1. Feb 01, 2017
    • Pedro Alves's avatar
      gdb/varobj.c: Fix leak · b47413b4
      Pedro Alves authored
      Whoops, this function returns a std::string.
      
      gdb/ChangeLog:
      2017-01-31  Pedro Alves  <palves@redhat.com>
      
      	* varobj.c (varobj_value_get_print_value): Remove xstrdup call.
      b47413b4
    • Pedro Alves's avatar
      gdb: make_scoped_restore and types convertible to T · 60adb36c
      Pedro Alves authored
      A following patch will want to do
      
         string_file str_file;
      
         scoped_restore save_stdout
          = make_scoped_restore (&gdb_stdout, &str_file);
      
      where gdb_stdout is a ui_file *, and string_file is a type that
      inherits from ui_file, but that doesn't compile today:
      
        src/gdb/top.c: In function ‘std::__cxx11::string execute_command_to_string(char*, int)’:
        src/gdb/top.c:710:50: error: no matching function for call to ‘make_scoped_restore(ui_file**, string_file*)’
             = make_scoped_restore (&gdb_stdout, &str_file);
      						    ^
        [...]
        In file included from src/gdb/utils.h:25:0,
      		   from src/gdb/defs.h:732,
      		   from src/gdb/top.c:20:
        src/gdb/common/scoped_restore.h:94:24: note: candidate: template<class T> scoped_restore_tmpl<T> make_scoped_restore(T*, T)
         scoped_restore_tmpl<T> make_scoped_restore (T *var, T value)
      			  ^
        src/gdb/common/scoped_restore.h:94:24: note:   template argument deduction/substitution failed:
        src/gdb/top.c:710:50: note:   deduced conflicting types for parameter ‘T’ (‘ui_file*’ and ‘string_file*’)
             = make_scoped_restore (&gdb_stdout, &str_file);
      						    ^
      
      This commit makes code such as the above possible.
      
      gdb/ChangeLog:
      2017-01-31  Pedro Alves  <palves@redhat.com>
      
      	* common/scoped_restore.h
      	(scoped_restore_tmpl::scoped_restore_tmpl): Template on T2, and
      	change the value's parameter type to T2.
      	(make_scoped_restore): Likewise.
      60adb36c
  2. Jan 31, 2017
    • Nick Clifton's avatar
      Fix buffer overflows in ld when printing translated strings. · 1273da04
      Nick Clifton authored
      ld	* ldmain.c (add_archive_element): Eliminate string buffer.
      	* ldlang.c (lang_print_asneeded): Likewise.
      1273da04
    • GDB Administrator's avatar
      Automatic date update in version.in · 07fbc63d
      GDB Administrator authored
      07fbc63d
    • Maciej W. Rozycki's avatar
      MIPS: Add options to control branch ISA checks · 8b10b0b3
      Maciej W. Rozycki authored
      Complement commit 9d862524 ("MIPS: Verify the ISA mode and alignment
      of branch and jump targets") and add GAS and LD options to control the
      checks for invalid branches between ISA modes introduced there, to help
      with some handwritten code lacking `.insn' annotation for labels used as
      branch targets and code produced by older versions of GCC which suffers
      from the issue with branches to code that has been optimized away,
      addressed with GCC commit 242424 ("MIPS/GCC: Mark trailing labels with
      `.insn'"), <https://gcc.gnu.org/ml/gcc-patches/2016-11/msg01061.html>.
      
      	bfd/
      	* elfxx-mips.h (_bfd_mips_elf_insn32): Rename prototype to...
      	(_bfd_mips_elf_linker_flags): ... this.  Add another parameter.
      	* elfxx-mips.c (mips_elf_link_hash_table): Add
      	`ignore_branch_isa' member.
      	(mips_elf_perform_relocation): Do not treat an ISA mode mismatch
      	in branch relocation calculation as an error if
      	`ignore_branch_isa' has been set.
      	(_bfd_mips_elf_insn32): Rename to...
      	(_bfd_mips_elf_linker_flags): ... this.  Rename the `on'
      	parameter to `insn32' and add an `ignore_branch_isa' parameter.
      	Handle the new parameter.
      
      	gas/
      	* config/tc-mips.c (mips_ignore_branch_isa): New variable.
      	(options): Add OPTION_IGNORE_BRANCH_ISA and
      	OPTION_NO_IGNORE_BRANCH_ISA enum values.
      	(md_longopts): Add "mignore-branch-isa" and
      	"mno-ignore-branch-isa" options.
      	(md_parse_option): Handle OPTION_IGNORE_BRANCH_ISA and
      	OPTION_NO_IGNORE_BRANCH_ISA.
      	(fix_bad_cross_mode_branch_p): Return FALSE if
      	`mips_ignore_branch_isa' has been set.
      	(md_show_usage): Add `-mignore-branch-isa' and
      	`-mno-ignore-branch-isa'.
      
      	* doc/as.texinfo (Target MIPS options): Add
      	`-mignore-branch-isa' and `-mno-ignore-branch-isa' options.
      	(-mignore-branch-isa, -mno-ignore-branch-isa): New options.
      	* doc/c-mips.texi (MIPS Options): Add `-mignore-branch-isa' and
      	`-mno-ignore-branch-isa' options.
      
      	* testsuite/gas/mips/branch-local-ignore-2.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-3.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-n32-2.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-n32-3.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-n64-2.d: New test.
      	* testsuite/gas/mips/branch-local-ignore-n64-3.d: New test.
      	* testsuite/gas/mips/mips.exp: Run the new tests.
      
      	ld/
      	* emultempl/mipself.em (ignore_branch_isa): New variable.
      	(mips_create_output_section_statements): Rename
      	`_bfd_mips_elf_insn32' called to `_bfd_mips_elf_linker_flags',
      	add `ignore_branch_isa' argument.
      	(PARSE_AND_LIST_PROLOGUE): Add OPTION_IGNORE_BRANCH_ISA and
      	OPTION_NO_IGNORE_BRANCH_ISA enum values.
      	(PARSE_AND_LIST_LONGOPTS): Add "ignore-branch-isa" and
      	"no-ignore-branch-isa" options.
      	(PARSE_AND_LIST_OPTIONS): Add `--ignore-branch-isa' and
      	`--no-ignore-branch-isa'.
      	(PARSE_AND_LIST_ARGS_CASES): Handle OPTION_IGNORE_BRANCH_ISA and
      	OPTION_NO_IGNORE_BRANCH_ISA.
      
      	* ld.texinfo (Options specific to MIPS targets): Add
      	`--ignore-branch-isa' and `--no-ignore-branch-isa' options.
      	(ld and the MIPS family): Likewise.
      
      	* testsuite/ld-mips-elf/bal-jalx-pic-ignore.d: New test.
      	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n32.d: New test.
      	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n64.d: New test.
      	* testsuite/ld-mips-elf/unaligned-branch-ignore-2.d: New test.
      	* testsuite/ld-mips-elf/unaligned-branch-ignore-r6-1: New test.
      	* testsuite/ld-mips-elf/unaligned-branch-ignore-mips16: New
      	test.
      	* testsuite/ld-mips-elf/unaligned-branch-ignore-micromips: New
      	test.
      	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
      8b10b0b3
    • Maciej W. Rozycki's avatar
      MIPS/GAS/testsuite: Convert branch local list tests to dump tests · 7795a8f8
      Maciej W. Rozycki authored
      	gas/
      	* testsuite/gas/mips/branch-local-2.d: New test.
      	* testsuite/gas/mips/branch-local-3.d: New test.
      	* testsuite/gas/mips/branch-local-n32-2.d: New test.
      	* testsuite/gas/mips/branch-local-n32-3.d: New test.
      	* testsuite/gas/mips/branch-local-n64-2.d: New test.
      	* testsuite/gas/mips/branch-local-n64-3.d: New test.
      	* testsuite/gas/mips/mips.exp: Fold corresponding list tests
      	into the new tests.
      7795a8f8
  3. Jan 30, 2017
  4. Jan 29, 2017
  5. Jan 28, 2017
  6. Jan 27, 2017
    • Walfred Tedeschi's avatar
      amd64-linux: expose system register FS_BASE and GS_BASE for Linux. · 2735833d
      Walfred Tedeschi authored
      
      
      This patch allows examination of the registers FS_BASE and GS_BASE
      for Linux Systems running on 64bit. Tests for simple read and write
      of the new registers is also added with this patch.
      
      2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
      	    Richard Henderson  <rth@redhat.com>
      
      gdb/ChangeLog:
      
      	* amd64-linux-nat.c (PTRACE_ARCH_PRCTL): New define.
      	(amd64_linux_fetch_inferior_registers): Add case to fetch FS_BASE
      	GS_BASE for older kernels.
      	(amd64_linux_store_inferior_registers): Add case to store FS_BASE
      	GS_BASE for older kernels.
      	* amd64-linux-tdep.c (amd64_linux_gregset_reg_offset): Add FS_BASE
      	and GS_BASE to the offset table.
      	(amd64_linux_register_reggroup_p): Add FS_BASE and GS_BASE to the
      	system register group.
      	* amd64-nat.c (amd64_native_gregset_reg_offset): Implements case
      	for older kernels.
      	* amd64-tdep.c (amd64_init_abi): Add segment registers for the
      	amd64 ABI.
      	* amd64-tdep.h (amd64_regnum): Add AMD64_FSBASE_REGNUM and
      	AMD64_GSBASE_REGNUM.
      	(AMD64_NUM_REGS): Set to AMD64_GSBASE_REGNUM + 1.
      	* features/Makefile (amd64-linux.dat, amd64-avx-linux.dat)
      	(amd64-mpx-linux.dat, amd64-avx512-linux.dat, x32-linux.dat)
      	(x32-avx-linux.dat, x32-avx512-linux.dat): Add
      	i386/64bit-segments.xml in those rules.
      	* features/i386/64bit-segments.xml: New file.
      	* features/i386/amd64-avx-mpx-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-avx-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-avx512-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-mpx-linux.xml: Add 64bit-segments.xml.
      	* features/i386/x32-avx512-linux.xml: Add 64bit-segments.xml.
      	* features/i386/x32-avx-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-linux.xml: Add 64bit-segments.xml.
      	* features/i386/amd64-avx-linux.c: Regenerated.
      	* features/i386/amd64-avx-mpx-linux.c: Regenerated.
      	* features/i386/amd64-avx-mpx.c: Regenerated.
      	* features/i386/amd64-avx512-linux.c: Regenerated.
      	* features/i386/amd64-linux.c: Regenerated.
      	* features/i386/amd64-mpx-linux.c: Regenerated.
      	* features/i386/i386-avx-mpx-linux.c: Regenerated.
      	* features/i386/i386-avx-mpx.c: Regenerated.
      	* features/i386/x32-avx-linux.c: Regenerated.
      	* features/i386/x32-avx512-linux.c: Regenerated.
      	* regformats/i386/amd64-avx-linux.dat: Regenerated.
      	* regformats/i386/amd64-avx-mpx-linux.dat: Regenerated.
      	* regformats/i386/amd64-avx512-linux.dat: Regenerated.
      	* regformats/i386/amd64-linux.dat: Regenerated.
      	* regformats/i386/amd64-mpx-linux.dat: Regenerated.
      	* regformats/i386/x32-avx-linux.dat: Regenerated.
      	* regformats/i386/x32-avx512-linux.dat: Regenerated.
      	* regformats/i386/x32-linux.dat: Regenerated.
      
      gdb/doc/ChangeLog:
      
      	* gdb.texinfo (i386 Features): Add system segment registers
      	as feature.
      
      gdb/gdbserver/ChangeLog:
      
      	* linux-x86-low.c (x86_64_regmap): Add fs_base and gs_base
      	to the register table.
      	(x86_fill_gregset): Add support for old kernels for the
      	fs_base and gs_base system registers.
      	(x86_store_gregset): Likewise.
      	* configure.srv (srv_i386_64bit_xmlfiles): Add 64bit-segments.xml.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.arch/amd64-gs_base.c: New file.
      	* gdb.arch/amd64-gs_base.exp: New file.
      
      Change-Id: I2e0eeb93058a2320d4d3b045082643cfe4aff963
      Signed-off-by: default avatarWalfred Tedeschi <walfred.tedeschi@intel.com>
      2735833d
    • Walfred Tedeschi's avatar
      amd64: simplify addition of new general registers. · 8884e97e
      Walfred Tedeschi authored
      The purpose of this patch is only simplify the addition of new registers.
      ORIG_RAX is kept as last register and any addition is done right before it.
      
      2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
      
      	* amd64-linux-tdep.h (AMD64_LINUX_ORIG_RAX_REGNUM):
      	Set to AMD64_NUM_REGS.
      8884e97e
    • Walfred Tedeschi's avatar
      amd64: remove additional comparison for validity of a register number. · 7005d26a
      Walfred Tedeschi authored
      Second part of the && is already guaranteed in the "regnum < num_regs"
      due to comparison above.
      
      2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
      
      	* amd64-nat.c (amd64_native_gregset_reg_offset): Simplify logic
      	that checks validity of a register number.
      7005d26a
    • Walfred Tedeschi's avatar
      gdbserver-amd64: add HAVE_STRUCT_USER_REGS_STRUCT_(GS|FS)_BASE for gdbserver. · 239b6d10
      Walfred Tedeschi authored
      The macros mentioned in the title were set only for GDB. In gdbserver they
      were not set until now.  To align the code in GDB and gdbserver these macros
      are also added into gdbserver, enabling read and write of gs_base and fs_base
      registers from the system in new and old kernels.
      
      2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
      
      gdb/gdbserver/ChangeLog:
      
          	* configure.ac: Check if the fs_base and gs_base members of
          	`struct user_regs_struct' exist.
          	* config.in: Regenerated.
          	* configure: Likewise.
      239b6d10
    • Dilyan Palauzov's avatar
      Update description of the -plugin option used by the linker, ar and nm. · 387dd777
      Dilyan Palauzov authored
      	PR 20343
      ld	* ld.texinfo (Options): Extend documentation of the --plugin
      	option.  Include a description of where the plugins should be
      	located.
      
      binutils* doc/binutils.texi (ar): Extend documentation of the --plugin
      	option.  Include a description of where the plugins should be
      	located.
      	(nm): Likewise.
      387dd777
    • Alexis Deruell's avatar
      Fix disassembling of TIC6X parallel instructions where the previous fetch... · 8ec5cf65
      Alexis Deruell authored
      Fix disassembling of TIC6X parallel instructions where the previous fetch packet ended with a 32-bit insn.
      
      	PR 21056
      opcodes	* tic6x-dis.c (print_insn_tic6x): Correct displaying of parallel
      	instructions when the previous fetch packet ends with a 32-bit
      	instruction.
      
      gas	* testsuite/gas/tic6x/insns16-parallel.s: New test case.
      	* testsuite/gas/tic6x/insns16-parallel.d: New test driver.
      8ec5cf65
    • Nick Clifton's avatar
      Add Serbian translation for the LD directory. · 0348d4be
      Nick Clifton authored
      ld	* po/sr.po: New Serbian translation.
      	* configure.ac (ALL_LINGUAS): Add sr.
      	* configure: Regenerate.
      0348d4be
    • Kees Cook's avatar
      Fix PTRACE_GETREGSET failure for compat inferiors on arm64 · 4bd2e1b2
      Kees Cook authored
      When running a 32-bit ARM inferior with a 32-bit ARM GDB on a 64-bit
      AArch64 host, only VFP registers (NT_ARM_VFP) are available. The FPA
      registers (NT_PRFPREG) are not available so GDB must not request them, as
      this will fail with -EINVAL.  This is most noticeably exposed when running
      "generate-core-file":
      
      (gdb) generate-core-file myprog.core
      Unable to fetch the floating point registers.: Invalid argument.
      
      ptrace(PTRACE_GETREGSET, 27642, NT_FPREGSET, 0xffcc67f0) = -1 EINVAL (Invalid argument)
      
      gdb/ChangeLog:
      
      2017-01-27  Kees Cook  <keescook@google.com>
      
      	* gdb/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.
      4bd2e1b2
    • Hans-Peter Nilsson's avatar
      Fix unused-but-set warning in elf32-cris.c:elf_cris_finish_dynamic_symbol · 22d9a0de
      Hans-Peter Nilsson authored
      	* elf32-cris.c (elf_cris_finish_dynamic_symbol): Remove now unused
      	local variable dynobj.
      22d9a0de
    • Hans-Peter Nilsson's avatar
      Fix PR ld/20995 for cris-linux · 1fbd05e1
      Hans-Peter Nilsson authored
      	PR ld/20995
      	* elf32-cris.c (elf_cris_size_dynamic_sections): Handle sdynrelro.
      	(elf_cris_adjust_dynamic_symbol): Place variables copied into the
      	executable from read-only sections into sdynrelro.
      	(elf_cris_finish_dynamic_symbol): Select sreldynrelro for
      	dynamic relocs in sdynrelro.
      	(elf_backend_want_dynrelro): Define.
      1fbd05e1
    • Luis Machado's avatar
      Add missing gdb/testsuite/ChangeLog entry. · b51e1e94
      Luis Machado authored
      b51e1e94
    • GDB Administrator's avatar
      Automatic date update in version.in · 03bc0a24
      GDB Administrator authored
      03bc0a24
    • Simon Marchi's avatar
      Change method of loading .py files in Python tests · 72ca0410
      Simon Marchi authored
      With my debug build of Python (--with-pydebug), many tests fails because
      of the same issue.  Python scripts are loaded by the tests using this
      pattern:
      
        (gdb) python exec (open ('file.py').read ())
      
      This causes Python to output this warning:
      
        __main__:1: ResourceWarning: unclosed file <_io.TextIOWrapper name='file.py' mode='r' encoding='ANSI_X3.4-1968'>
      
      and the test to fail because of that extra output.  Instead of using the
      open + read + exec trick which leaks the file and causes the warning,
      why not just source the files?
      
        (gdb) source file.py
      
      This patch changes this, and standardizes the test names of the tests I
      touched to "load python file" (some of them were empty, others were
      overly complicated).
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.python/py-bad-printers.exp: Load python file using "source".
      	* gdb.python/py-events.exp: Likewise.
      	* gdb.python/py-evsignal.exp: Likewise.
      	* gdb.python/py-evthreads.exp: Likewise.
      	* gdb.python/py-frame-args.exp: Likewise.
      	* gdb.python/py-framefilter-invalidarg.exp: Likewise.
      	* gdb.python/py-framefilter-mi.exp: Likewise.
      	* gdb.python/py-framefilter.exp: Likewise.
      	* gdb.python/py-mi.exp: Likewise.
      	* gdb.python/py-pp-maint.exp: Likewise.
      	* gdb.python/py-pp-registration.exp: Likewise.
      	* gdb.python/py-prettyprint.exp: Likewise.
      	(run_lang_tests): Likewise.
      	* gdb.python/py-typeprint.exp: Likewise.
      72ca0410
    • Luis Machado's avatar
      2017-01-26 Luis Machado <lgustavo@codesourcery.com> · e3ceef35
      Luis Machado authored
      	* lib/memory.exp: Remove spurious empty newlines.
      e3ceef35
    • Luis Machado's avatar
      Harden tests that deal with memory regions · e309aa65
      Luis Machado authored
      Exercising aarch64-elf with a custom debug stub i noticed a few failures in
      both gdb.base/breakpoint-in-ro-region.exp and gdb.base/memattr.exp:
      
      FAIL: gdb.base/breakpoint-in-ro-region.exp: create read-only mem region covering main
      FAIL: gdb.base/breakpoint-in-ro-region.exp: writing to read-only memory fails
      FAIL: gdb.base/breakpoint-in-ro-region.exp: inserting software breakpoint in read-only memory fails
      
      FAIL: gdb.base/memattr.exp: create mem region 1
      FAIL: gdb.base/memattr.exp: create mem region 2
      FAIL: gdb.base/memattr.exp: create mem region 3
      FAIL: gdb.base/memattr.exp: create mem region 4
      FAIL: gdb.base/memattr.exp: create mem region 5
      FAIL: gdb.base/memattr.exp: info mem (1)
      FAIL: gdb.base/memattr.exp: mem1 cannot be read
      FAIL: gdb.base/memattr.exp: mem2 cannot be written
      FAIL: gdb.base/memattr.exp: mem2 can be read
      FAIL: gdb.base/memattr.exp: disable mem 1
      FAIL: gdb.base/memattr.exp: mem 1 was disabled
      FAIL: gdb.base/memattr.exp: enable mem 1
      FAIL: gdb.base/memattr.exp: mem 1 was enabled
      FAIL: gdb.base/memattr.exp: disable mem 2 4
      FAIL: gdb.base/memattr.exp: mem 2 and 4 were disabled
      FAIL: gdb.base/memattr.exp: enable mem 2-4
      FAIL: gdb.base/memattr.exp: mem 2-4 were enabled
      FAIL: gdb.base/memattr.exp: mem 1 to 5 were disabled
      FAIL: gdb.base/memattr.exp: mem 1 to 5 were enabled
      FAIL: gdb.base/memattr.exp: delete mem 1
      FAIL: gdb.base/memattr.exp: mem 1 was deleted
      FAIL: gdb.base/memattr.exp: delete mem 2 4
      FAIL: gdb.base/memattr.exp: mem 2 and 4 were deleted
      FAIL: gdb.base/memattr.exp: mem 2-4 were deleted
      
      These failures don't show up with gdbserver or native gdb on Linux because
      they don't export any memory maps, therefore the vector of memory regions is
      empty.
      
      Outside of that scenario, we can't guarantee the absence of memory regions
      reported by the target upon a connection. In our particular target, we
      provide a memory map and the memory regions vector ceases to be empty.
      
      With a non-empty memory regions vector, manipulating memory regions will cause
      gdb to be more verbose and output text. For example:
      
      memattr.c:require_user_regions
      
        /* Otherwise, let the user know how to get back.  */
        if (from_tty)
          warning (_("Switching to manual control of memory regions; use "
      	       "\"mem auto\" to fetch regions from the target again."));
      
      memattr.c:create_mem_region
      
            if ((lo >= n->lo && (lo < n->hi || n->hi == 0))
      	  || (hi > n->lo && (hi <= n->hi || n->hi == 0))
      	  || (lo <= n->lo && ((hi >= n->hi && n->hi != 0) || hi == 0)))
      	{
      	  printf_unfiltered (_("overlapping memory region\n"));
      	  return;
      	}
      
      In my particular case i got both of the above messages.
      
      In order to fix this, i've moved the delete_memory proc from
      gdb.base/memattr.exp to a new file lib/memory.exp and made lib/gdb.exp
      load that file.
      
      For both gdb.base/breakpoint-in-ro-region.exp and gdb.base/memattr.exp the
      patch clears all existing memory regions after running to main. That way we
      are guaranteed to have a clean state for memory regions so the tests can
      exercise whatever they want and have an expected output pattern.
      
      Regression checked on x86-64/Ubuntu 16.04.
      
      gdb/testsuite/ChangeLog:
      
      2017-01-26  Luis Machado  <lgustavo@codesourcery.com>
      
      	* lib/memory.exp: New file.
      	* lib/gdb.exp: Load memory.exp.
      	* gdb.base/memattr.exp (delete_memory): Move proc to
      	lib/memory.exp and rename to delete_memory_regions.
      	Replace delete_memory with delete_memory_regions.
      	Cleanup memory regions before tests.
      	* gdb.base/breakpoint-in-ro-region.exp: Cleanup memory regions
      	before tests.
      e309aa65
    • Andreas Arnez's avatar
      Big-endian hosts: Fix "set architecture cris" · 7cf1de6c
      Andreas Arnez authored
      The all-architectures-1.exp test case currently yields 66 FAILs on s390x,
      because the "set architecture" command fails each time when attempting to
      switch to "cris", "crisv32", or "cris:common_v10_v32".  Actually, the
      command would succeed if the endianness had been set to "little" before.
      Instead, the test case sets the endianness to "auto", which results in
      "big" on s390x.
      
      So on x86_64:
      
        (gdb) set endian auto
        The target endianness is set automatically (currently little endian)
        (gdb) set architecture cris
        warning: A handler for the OS ABI "AIX" is not built into this configuration
        of GDB.  Attempting to continue with the default cris settings.
      
        The target architecture is assumed to be cris
      
      But on s390x:
      
        (gdb) set endian auto
        The target endianness is set automatically (currently big endian)
        (gdb) set architecture cris
        Architecture `cris' not recognized.
      
      See also the test results for s390x and ppc64be:
      
        https://sourceware.org/ml/gdb-testers/2016-q4/msg05150.html
        https://sourceware.org/ml/gdb-testers/2016-q4/msg05713.html
      
      Indeed, cris_gdbarch_init in cris-tdep.c returns a failure unless the
      user-specified endianness is "little".  Other architectures usually ignore
      the user-specified endianness and return a valid gdbarch anyhow, even if
      they can not really cope with the given endianness.
      
      This patch removes the check in cris-tdep.c and forces little-endian byte
      order instead.
      
      gdb/ChangeLog:
      
      	* cris-tdep.c (cris_gdbarch_init): Remove check for
      	info.byte_order and force it to BFD_ENDIAN_LITTLE.
      7cf1de6c
    • Luis Machado's avatar
      Missing ChangeLog and files for commit 8b00c176 · 515aff23
      Luis Machado authored
      This adds the missing testsuite files and Changelog entry.
      515aff23
    • Luis Machado's avatar
      Refactor gdb.reverse/insn-reverse.c · 8b00c176
      Luis Machado authored
      Changes in v2:
      
      - Renamed arch-specific files to insn-reverse-<arch>.c.
      - Adjusted according to reviews.
      
      This patch prepares things for an upcoming testcase for record/replay support
      on x86. As is, gdb.reverse/insn-reverse.c is divided into sections guarded by
      a few #if blocks, and right now it only handles arm/aarch64.
      
      If we move forward with requiring more tests for record/replay on different
      architectures, i think this has the potential to become cluttered with a lot
      of differing arch-specific code in the same file.
      
      I've broken up the main file into other files with arch-specific bits
      (insn-reverse-<arch>.c). The main file will hold the generic pieces that will
      take care of calling the tests.
      
      The arch-specific c files are then included at the top of the generic c file.
      
      I've also added a generic initialize function since we need to run pre-test
      checks on x86 to make sure the rdrand/rdseed instructions are supported,
      otherwise we will run into a SIGILL.
      
      The arch-specific files will implement their own initialize function with
      whatever makes sense. Right now the aarch64 and arm files have an empty
      initialization function.
      
      Does this look reasonable?
      
      gdb/testsuite/ChangeLog:
      
      2017-01-26  Luis Machado  <lgustavo@codesourcery.com>
      
      	* gdb.reverse/insn-reverse.c: Move arm and aarch64 code to their own
      	files.
      	(initialize): New function conditionally defined.
      	(testcases): Move within conditional block.
      	(main): Call initialize.
      	* gdb.reverse/insn-reverse-aarch64.c: New file, based on aarch64 bits
      	of gdb.reverse/insn-reverse.c.
      	* gdb.reverse/insn-reverse-arm.c: New file, based on arm bits of
      	gdb.reverse/insn-reverse.c.
      8b00c176
  7. Jan 26, 2017
    • Antoine Tremblay's avatar
      Fix crash when loading a core with unexpected register section size · 874a1c8c
      Antoine Tremblay authored
      When loading a core without an executable like so:
       $ gdb --core core
      for example often the gdbarch won't contain the
      iterate_over_regset_sections method. For example on ARM.
      
      This will generate a call to get_core_register_section with a NULL regset
      like at corelow.c:628
      
      get_core_register_section (regcache, NULL, ".reg", 0, 0, "general-purpose", 1);
      
      However a check for REGSET_VARIABLE_SIZE in get_core_register_section
      assumes that regset is != NULL thus leading to a crash with this backtrace:
      
      (gdb) bt
      #0  0x000000000065907b in get_core_register_section
          (regcache=regcache@entry=0x2c26260, regset=regset@entry=0x0,
          name=name@entry=0xdbf7b2 ".reg", min_size=min_size@entry=0,
          which=which@entry=0, human_name=human_name@entry=0xdbac28
          "general-purpose", required=1)
          at ../../gdb/corelow.c:542
      #1  0x0000000000659b70 in get_core_registers (ops=<optimized out>,
          regcache=0x2c26260, regno=<optimized out>) at ../../gdb/corelow.c:628
      #2  0x000000000076e5fb in target_fetch_registers
          (regcache=regcache@entry=0x2c26260, regno=regno@entry=15)
          at ../../gdb/target.c:3590
      
      Note that commit: f962539a ("Warn if core file register
      section is larger than expected") introduced this issue.
      Thus releases > 7.8.2 are affected.
      
      Also, this would have been caught by gdb.base/corefile.exp but the
      problem is that this triggers only if the core dump is missing some data
      so that it's not recognized as a linux core dump, or it's not a linux core
      dump and the core file register section is larger than expected.
      
      So if you just create a core and read it on linux with ARM the osabi is
      detected properly and iterate_over_regset_sections is present and so the
      problem is not triggered.
      
      Thus creating a linux test for this with a crafted core that meets the
      problem requirements is non-trivial.
      
      This patch fixes this crash by adding a check for regset existence before
      running the condition.
      
      gdb/ChangeLog:
      
      	* corelow.c (get_core_register_section): Check for regset
      	existence before checking for REGSET_VARIABLE_SIZE.
      874a1c8c
    • Yao Qi's avatar
      Don't throw exception in dis_asm_memory_error · d8b49cf0
      Yao Qi authored
      Hi,
      GDB calls some APIs from opcodes to do disassembly and provide some
      call backs.  This model makes troubles on C++ exception unwinding,
      because GDB is a C++ program, and opcodes is still compiled as C.
      As we can see, frame #10 and #12 are C++, while #frame 11 is C,
      
       #10 0x0000000000544228 in memory_error (err=TARGET_XFER_E_IO, memaddr=<optimized out>) at ../../binutils-gdb/gdb/corefile.c:237
       #11 0x00000000006b0a54 in print_insn_aarch64 (pc=0, info=0xffffffffeeb0) at ../../binutils-gdb/opcodes/aarch64-dis.c:3185
       #12 0x0000000000553590 in gdb_pretty_print_insn (gdbarch=gdbarch@entry=0xbbceb0, uiout=uiout@entry=0xbc73d0, di=di@entry=0xffffffffeeb0,
          insn=0xffffffffed40, insn@entry=0xffffffffed90, flags=flags@entry=0,
      
      C++ exception unwinder can't go across frame #11 unless it has
      unwind table.  However, C program on many architectures doesn't
      have it in default.  As a result, GDB aborts, which is described
      in PR 20939.
      
      This is not the first time we see this kind of problem.  We've
      had a commit 89525768
      "Propagate GDB/C++ exceptions across readline using sj/lj-based TRY/CATCH".
      We can fix the disassembly bug in a similar way, this is the option one.
      
      Since opcodes is built with gdb, we fix this problem in a different
      way as we did for the same issue with readline.  Instead of throwing
      exception in dis_asm_memory_error, we record the failed memory
      address, and throw exception when GDB returns from opcodes disassemblers.
      
      gdb:
      
      2017-01-26  Yao Qi  <yao.qi@linaro.org>
      	    Pedro Alves  <palves@redhat.com>
      
      	PR gdb/20939
      	* disasm.c (gdb_disassembler::dis_asm_memory_error): Don't
      	call memory_error, save memaddr instead.
      	(gdb_disassembler::print_insn): If gdbarch_print_insn returns
      	negative, cal memory_error.
      	* disasm.h (gdb_disassembler) <m_err_memaddr>: New field.
      
      gdb/testsuite:
      
      2017-01-26  Yao Qi  <yao.qi@linaro.org>
      
      	* gdb.base/all-architectures.exp.in (do_arch_tests): Test
      	disassemble on address 0.
      d8b49cf0
    • Yao Qi's avatar
      Disassembly unit test: memory error · 658ca58c
      Yao Qi authored
      This patch adds a unit test about memory error occurs on reading
      memory, and check MEMORY_ERROR exception is always thrown.
      
      gdb:
      
      2017-01-26  Yao Qi  <yao.qi@linaro.org>
      
      	* disasm-selftests.c (memory_error_test): New function.
      	(_initialize_disasm_selftests): Register memory_error_test.
      658ca58c
    • Yao Qi's avatar
      Disassembly unit test: disassemble one instruction · 79843d45
      Yao Qi authored
      This patch adds one unit test, which disassemble one instruction for
      every gdbarch if available.  The test needs one valid instruction of
      each gdbarch, and most of them are got from breakpoint instruction.
      For the rest gdbarch whose breakpoint instruction isn't a valid
      instruction, I copy one instruction from the gas/testsuite/gas/
      directory.
      
      I get the valid instruction of most gdbarch except ia64, mep, mips,
      tic6x, and xtensa.  People familiar with these arch should be easy
      to extend the test.
      
      In order to achieve "do the unit test for every gdbarch", I add
      selftest-arch.[c,h], so that we can register a function pointer,
      which has one argument gdbarch.  selftest.c will iterate over all
      gdbarches to call the registered function pointer.
      
      gdb:
      
      2017-01-26  Yao Qi  <yao.qi@linaro.org>
      
      	* Makefile.in (SFILES): Add disasm-selftests.c and
      	selftest-arch.c.
      	(COMMON_OBS): Add disasm-selftests.o and selftest-arch.o.
      	* disasm-selftests.c: New file.
      	* selftest-arch.c: New file.
      	* selftest-arch.h: New file.
      79843d45
    • Yao Qi's avatar
      Call print_insn_mep in mep_gdb_print_insn · 8cafda32
      Yao Qi authored
      opcodes/mep-dis.c:mep_print_insn has already had the code to
      handle the case when info->section is NULL,
      
        /* Picking the right ISA bitmask for the current context is tricky.  */
        if (info->section)
          {
          }
        else /* sid or gdb */
          {
          }
      
      so that we can still cal print_insn_mep even section can't be found.
      On the other hand, user can disassemble an arbitrary address which
      doesn't map to any section at all.
      
      gdb:
      
      2017-01-26  Yao Qi  <yao.qi@linaro.org>
      
      	* mep-tdep.c (mep_gdb_print_insn): Set info->arch
      	to bfd_arch_mep.  Don't return 0 if section is not
      	found.  Call print_insn_mep.
      8cafda32
    • Yao Qi's avatar
      Refactor disassembly code · e47ad6c0
      Yao Qi authored
      This patch addes class gdb_disassembler, and refactor
      code to use it.  The gdb_disassembler object is saved
      in disassember_info.application_data.  However,
      disassember_info.application_data is already used by
      gdb for arm, mips spu, and scm-disasm.  In arm and mips,
      .application_data is gdbarch, but we can still get gdbarch
      from gdb_disassember.
      
      The use of application_data in spu is a little bit
      complicated.  It creates its own disassemble_info, and
      save spu_dis_asm_data in .application_data.  This will
      overwrite the pointer to gdb_disassembler, so we need
      to find another place to save spu_dis_asm_data.  I
      extend disassemble_info, and put "id" there.
      
      gdb:
      
      2017-01-26  Pedro Alves  <palves@redhat.com>
      	    Yao Qi  <yao.qi@linaro.org>
      
      	* arm-tdep.c: Include "disasm.h".
      	(gdb_print_insn_arm): Update code to get gdbarch.
      	* disasm.c (dis_asm_read_memory): Change it to
      	gdb_disassembler::dis_asm_read_memory.
      	(dis_asm_memory_error): Likewise.
      	(dis_asm_print_address): Likewise.
      	(gdb_pretty_print_insn): Change it to
      	gdb_disassembler::pretty_print_insn.
      	(dump_insns): Add one argument gdb_disassemlber.  All
      	callers updated.
      	(do_mixed_source_and_assembly_deprecated): Likewise.
      	(do_mixed_source_and_assembly): Likewise.
      	(do_assembly_only): Likewise.
      	(gdb_disassembler::gdb_disassembler): New.
      	(gdb_disassembler::print_insn): New.
      	* disasm.h (class gdb_disassembler): New.
      	(gdb_pretty_print_insn): Remove declaration.
      	(gdb_disassemble_info): Likewise.
      	* guile/scm-disasm.c (class gdbscm_disassembler): New.
      	(gdbscm_disasm_read_memory_worker): Update.
      	(gdbscm_disasm_read_memory): Update.
      	(gdbscm_disasm_memory_error): Remove.
      	(gdbscm_disasm_print_address): Remove.
      	(gdbscm_disassembler::gdbscm_disassembler): New.
      	(gdbscm_print_insn_from_port): Update.
      	* mips-tdep.c: Include disasm.h.
      	(gdb_print_insn_mips): Update code to get gdbarch.
      	* record-btrace.c (btrace_insn_history): Update.
      	* spu-tdep.c: Include disasm.h.
      	(struct spu_dis_asm_data): Remove.
      	(struct spu_dis_asm_info): New.
      	(spu_dis_asm_print_address): Use spu_dis_asm_info to get
      	SPU id.
      	(gdb_print_insn_spu): Cast disassemble_info to
      	spu_dis_asm_info.
      e47ad6c0
    • Yao Qi's avatar
      New function null_stream · 80d75874
      Yao Qi authored
      This patch adds a new function null_stream, which returns a null
      stream.  The null stream can be used in multiple places.  It is
      used in gdb_insn_length, and the following patches will use it too.
      
      gdb:
      
      2017-01-26  Yao Qi  <yao.qi@linaro.org>
      
      	* disasm.c (do_ui_file_delete): Delete.
      	(gdb_insn_length): Move code creating stream to ...
      	* utils.c (null_stream): ... here.  New function.
      	* utils.h (null_stream): Declare.
      80d75874
    • GDB Administrator's avatar
      Automatic date update in version.in · 8e87a593
      GDB Administrator authored
      8e87a593