Commit Graph

6811 Commits

Author SHA1 Message Date
Jerome Guitton 604c4576fd Command abbreviation in define
When defining a new macro, "command" is not recognized as an alias for
"commands":

 (gdb) define breakmain
 Type commands for definition of "breakmain".
 End with a line saying just "end".
 >break main
 >command
 >echo "IN MAIN\n"
 >end
 (gdb)

There is a special case for while-stepping, where 'ws' and 'stepping' are
recognized explicitely. Instead of adding more special cases, this change
uses cli-decode.

gdb/ChangeLog:
	* cli/cli-decode.c (find_command_name_length): Make it extern.
	* cli/cli-decode.h (find_command_name_length): Declare.
	* cli/cli-script.c (command_name_equals, line_first_arg):
	New functions.
	(process_next_line): Use cli-decode to parse command names.
	(build_command_line): Make args a constant pointer.

gdb/testsuite/ChangeLog:

	* gdb.base/define.exp: Add test for command abbreviations
	in define.
2017-02-08 19:03:25 +01:00
Luis Machado 20b477a75c [BZ 21005] Add support for Intel 64 rdrand and rdseed record/replay
This patch addresses BZ 21005, which is gdb failing to recognize an rdrand
instruction.

It enables support for both rdrand and rdseed and handles extended register
addressing (R8~R15) for 16-bit, 32-bit and 64-bit.

gdb/ChangeLog
2017-02-06  Luis Machado  <lgustavo@codesourcery.com>

	* NEWS: Mention support for record/replay of Intel 64 rdrand and
	rdseed instructions.
	i386-tdep.c (i386_process_record): Handle Intel 64 rdrand and rseed.

gdb/testsuite/ChangeLog:
2017-02-06  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.reverse/insn-reverse.c: Include insn-reverse-x86.c.
	* gdb.reverse/insn-reverse-x86.c: New file.
2017-02-06 03:12:00 -06:00
Ivo Raisr 3f7b46f2da gdb: provide and use sparc{32,64} target description XML files.
gdb/ChangeLog:

2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>

	PR tdep/20936
	Provide and use sparc32 and sparc64 target description XML files.
	* features/sparc/sparc32-cp0.xml, features/sparc/sparc32-cpu.xml,
	features/sparc/sparc32-fpu.xml: New files for sparc 32-bit.
	* features/sparc/sparc64-cp0.xml, features/sparc/sparc64-cpu.xml,
	features/sparc/sparc64-fpu.xml: New files for sparc 64-bit.
	* features/sparc/sparc32-solaris.xml: New file.
	* features/sparc/sparc64-solaris.xml: New file.
	* features/sparc/sparc32-solaris.c: Generated.
	* features/sparc/sparc64-solaris.c: Generated.
	* sparc-tdep.h: Account for differences in target descriptions.
	* sparc-tdep.c (sparc32_register_name): Use target provided registers.
	(sparc32_register_type): Use target provided registers.
	(validate_tdesc_registers): New function.
	(sparc32_gdbarch_init): Use tdesc_has_registers.
	Set pseudoregister functions.
	* sparc64-tdep.c (sparc64_register_name): Use target provided registers.
	(sparc64_register_type): Use target provided registers.
	(sparc64_init_abi): Set pseudoregister functions.

gdb/doc/ChangeLog:

2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>

	PR tdep/20936
	* gdb.texinfo: (Standard Target Features): Document SPARC features.
	(Sparc Features): New node.

gdb/testsuite/ChangeLog:

2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>

	PR tdep/20936
	* gdb.xml/tdesc-regs.exp: Provide sparc core registers for the tests.
2017-02-05 23:44:03 -08:00
Tom Tromey f0fd41c192 Fix ptype of single-member Rust enums
While looking into PR rust/21097, I found that ptype of a
single-element enum in Rust did not always format the result properly.
In particular, it would leave out the members of a tuple struct.
Further testing showed that it also did the wrong thing for ordinary
struct members as well.

This patch fixes these problems.  I'm marking it as being associated
with the PR, since that is where the discovery was made; but this
doesn't actually fix that PR (which I think ultimately is due to a
Rust compiler bug).

Built and regtested on x86-64 Fedora 25, using the system Rust
compiler.  I'm checking this in.

2017-02-03  Tom Tromey  <tom@tromey.com>

	PR rust/21097:
	* rust-lang.c (rust_print_type) <TYPE_CODE_UNION>: Handle enums
	with a single member.

2017-02-03  Tom Tromey  <tom@tromey.com>

	PR rust/21097:
	* gdb.rust/simple.exp: Add new tests.
2017-02-03 22:14:36 -07:00
Pedro Alves 5be5dbf0ce Fix "-gdb-set logging redirect on" crash
This commit fixes a "-gdb-set logging redirect on" crash by not
handling "logging redirect on" on the fly.

Previous discussion here:
 https://sourceware.org/ml/gdb-patches/2017-01/msg00467.html

Code for handling "logging redirect on" on the fly was added here:
 https://sourceware.org/ml/gdb-patches/2010-08/msg00202.html

Meanwhile, MI gained support for logging, but flipping redirect "on"
on the fly was not considered.  The result is that this sequence of
commands crashes GDB:

 -gdb-set logging on
 -gdb-set logging redirect on

 Program received signal SIGSEGV, Segmentation fault.
 0x00000000008dd7bc in gdb_flush (file=0x2a097f0) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/ui-file.c:95
 194       file->to_flush (file);
 (top-gdb) bt
 #0  0x00000000008dd7bc in gdb_flush(ui_file*) (file=0x2a097f0) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/ui-file.c:95
 #1  0x00000000007b5f34 in gdb_wait_for_event(int) (block=0) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/event-loop.c:752
 #2  0x00000000007b52b6 in gdb_do_one_event() () at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/event-loop.c:322
 #3  0x00000000007b5362 in start_event_loop() () at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/event-loop.c:371
 #4  0x000000000082704a in captured_command_loop(void*) (data=0x0) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/main.c:325
 #5  0x00000000007b8d7c in catch_errors(int (*)(void*), void*, char*, return_mask) (func=0x827008 <captured_command_loop(void*)>, func_args=0x0, errstring=0x11dee51 "", mask=RETURN_MASK_ALL) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/exceptions.c:236
 #6  0x000000000082839b in captured_main(void*) (data=0x7fffffffd820) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/main.c:1148
 During symbol reading, cannot get low and high bounds for subprogram DIE at 24065.
 #7  0x00000000008283c4 in gdb_main(captured_main_args*) (args=0x7fffffffd820) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/main.c:1158
 #8  0x0000000000412d4d in main(int, char**) (argc=4, argv=0x7fffffffd928) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/gdb.c:32

The handling of redirect on the fly is not really a use case we need
to handle, IMO.  Its inconsistent (other "set logging foo" commands
aren't handled on the fly), and complicates the code significantly.
Instead of complicating it further for MI, go back to the original
idea of warning, only:

  https://sourceware.org/ml/gdb-patches/2010-08/msg00083.html

New test included.

gdb/ChangeLog:
2017-02-02  Pedro Alves  <palves@redhat.com>

	* cli/cli-logging.c (maybe_warn_already_logging): New factored out
	from ...
	(set_logging_overwrite): ... here.
	(logging_no_redirect_file): Delete.
	(set_logging_redirect): Don't handle redirection on the fly.
	Instead warn that "logging off" / "logging on" is necessary.
	(pop_output_files): Delete references to logging_no_redirect_file.
	(show_logging_command): Always speak in terms of what will happen
	once logging is reenabled.

gdb/testsuite/ChangeLog:
2017-02-02  Pedro Alves  <palves@redhat.com>

	* gdb.mi/mi-logging.exp: Add "redirect while already logging"
	tests.
2017-02-02 11:39:56 +00:00
Andreas Arnez 7346ef59bb Big-endian targets: Don't ignore offset into DW_OP_implicit_value
When a variable's location is expressed as DW_OP_implicit_value, but the
given value is longer than needed, which bytes should be used?  GDB's
current logic was introduced with a patch from 2011 and uses the "least
significant" bytes:

  https://sourceware.org/ml/gdb-patches/2011-08/msg00123.html

Now consider a sub-value from such a location at a given offset, accessed
through DW_OP_implicit_pointer.  Which bytes should be used for that?  The
patch above *always* uses the last bytes on big-endian targets, ignoring
the offset.

E.g., given the code snippet

  const char foo[] = "Hello, world!";
  const char *a = &foo[0];
  const char *b = &foo[7];

assume that `foo' is described as DW_OP_implicit_value and `a' and `b'
each as DW_OP_implicit_pointer into that value.  Then with current GDB
`*a' and `*b' yield the same result -- the string's zero terminator.

This patch basically reverts the portion of the patch above that deals
with DW_OP_implicit_value.  This fixes the offset handling and also goes
back to dropping the last instead of the first bytes on big-endian targets
if the implicit value is longer than needed.  The latter aspect of the
change probably doesn't matter for actual programs, but simplifies the
logic.

The patch also cleans up the original code a bit and adds appropriate test
cases.

gdb/testsuite/ChangeLog:

	* gdb.dwarf2/dw2-op-stack-value.exp: Adjust expected result of
	taking a 2-byte value out of a 4-byte DWARF implicit value on
	big-endian targets.
	* gdb.dwarf2/nonvar-access.exp: Add more comments to existing
	logic.  Add test cases for DW_OP_implicit.

gdb/ChangeLog:

	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): For
	DWARF_VALUE_LITERAL, no longer ignore the offset on big-endian
	targets.  And if the implicit value is longer than needed, extract
	the first bytes instead of the "least significant" ones.
2017-02-01 16:59:00 +01:00
Markus Metzger 787f00256b testsuite: diagnose a running GDB in gdb_skip_xml_tests
If GDB is running when gdb_skip_xml_tests is called with
--target_board=native-extended-gdbserer.exp, it fails with:

    (gdb) FAIL: ....exp: set tdesc filename .../trivial.xml (got interactive prompt)
    monitor exit

Diagnose this in gdb_skip_xml_tests to generate a more meaningful error message:

    ERROR: tcl error sourcing ....exp.
    ERROR: GDB must not be running in gdb_skip_xml_tests.
        while executing
    [...]

testsuite/
	* lib/gdb.exp (gdb_skip_xml_tests): Error if GDB is running.
2017-02-01 14:43:19 +01:00
Markus Metzger 68777c2989 btrace, testsuite: fix extended-remote fail
Parts of gdb.btrace/enable.exp are only valid for native debug.  The check for
skip_gdbserver_tests is done while GDB is running, though, which causes it to
fail with --target_board=native-extended-gdbserver.  Exit GDB before that check.

testsuite/
	* gdb.btrace/enable.exp: Call gdb_exit before skip_gdbserver_tests.
2017-02-01 14:41:18 +01:00
Markus Metzger 0a1c7e2881 btrace, testsuite: fix extended-remote non-stop test
With --target_board=native-extended-gdbserver non-stop tests are failing with

    UNTESTED: gdb.btrace/non-stop.exp: failed to run to main

Fix that by adding '-ex "set non-stop on"' to GDBFLAGS before restarting.

testsuite/
	* gdb.btrace/non-stop.exp: Add '-ex "set non-stop on"' to GDBFLAGS.
2017-02-01 14:40:10 +01:00
Markus Metzger b5ac99b082 btrace: add unsupported/untested messages when skipping tests
We may silently skip gdb.btrace tests if

  - the target does not support record-btrace
  - the target does not support TSX
  - the target does not support gdbserver
  - we fail to compile the test
  - we fail to run to main

Add unsupported/untested messages for each of those.

testsuite/
	* gdb.btrace/buffer-size.exp: Add unsupported/untested message if
	the test is skipped.
	* gdb.btrace/data.exp: Likewise.
	* gdb.btrace/delta.exp: Likewise.
	* gdb.btrace/dlopen.exp: Likewise.
	* gdb.btrace/enable-running.exp: Likewise.
	* gdb.btrace/enable.exp: Likewise.
	* gdb.btrace/exception.exp: Likewise.
	* gdb.btrace/function_call_history.exp: Likewise.
	* gdb.btrace/gcore.exp: Likewise.
	* gdb.btrace/instruction_history.exp: Likewise.
	* gdb.btrace/multi-thread-step.exp: Likewise.
	* gdb.btrace/nohist.exp: Likewise.
	* gdb.btrace/non-stop.exp: Likewise.
	* gdb.btrace/reconnect.exp: Likewise.
	* gdb.btrace/record_goto-step.exp: Likewise.
	* gdb.btrace/record_goto.exp: Likewise.
	* gdb.btrace/rn-dl-bind.exp: Likewise.
	* gdb.btrace/segv.exp: Likewise.
	* gdb.btrace/step.exp: Likewise.
	* gdb.btrace/stepi.exp: Likewise.
	* gdb.btrace/tailcall-only.exp: Likewise.
	* gdb.btrace/tailcall.exp: Likewise.
	* gdb.btrace/tsx.exp: Likewise.
	* gdb.btrace/unknown_functions.exp: Likewise.
	* gdb.btrace/vdso.exp: Likewise.
2017-02-01 14:38:44 +01:00
Markus Metzger cd4007e434 btrace: allow recording to be started (and stopped) for running threads
When recording is started for a running thread, GDB was able to start tracing
but then failed to read registers to insert the initial entry for the current
PC.  We don't really need that initial entry if we don't know where exactly we
started recording.  Skip that step to allow recording to be started while
threads are running.

If we do run into errors, we need to undo the tracing enable to not leak this
thread.  The operation did not complete so our caller won't clean up this
thread.

For the BTRACE_FORMAT_PT btrace format, we don't need that initial entry since
it will be recorded in the trace.  We can omit the call to btrace_add_pc.

gdb/
	* btrace.c (btrace_enable): Do not call btrace_add_pc for
	BTRACE_FORMAT_PT or if can_access_registers_ptid returns false.
	(btrace_fetch): Assert can_access_registers_ptid.
	* record-btrace.c (require_btrace_thread, record_btrace_info): Call
	validate_registers_access.

testsuite/
	* gdb.btrace/enable-running.c: New.
	* gdb.btrace/enable-running.exp: New.
2017-02-01 14:37:07 +01:00
Walfred Tedeschi 2735833d5f amd64-linux: expose system register FS_BASE and GS_BASE for Linux.
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: Walfred Tedeschi <walfred.tedeschi@intel.com>
2017-01-27 15:20:14 +01:00
Luis Machado b51e1e94d6 Add missing gdb/testsuite/ChangeLog entry. 2017-01-26 18:06:40 -06:00
Simon Marchi 72ca041044 Change method of loading .py files in Python tests
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.
2017-01-26 16:12:12 -05:00
Luis Machado e3ceef3544 2017-01-26 Luis Machado <lgustavo@codesourcery.com>
* lib/memory.exp: Remove spurious empty newlines.
2017-01-26 14:05:37 -06:00
Luis Machado e309aa6524 Harden tests that deal with memory regions
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.
2017-01-26 13:51:09 -06:00
Luis Machado 515aff23b4 Missing ChangeLog and files for commit 8b00c17616
This adds the missing testsuite files and Changelog entry.
2017-01-26 11:04:08 -06:00
Luis Machado 8b00c17616 Refactor gdb.reverse/insn-reverse.c
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.
2017-01-26 10:34:42 -06:00
Yao Qi d8b49cf0c8 Don't throw exception in dis_asm_memory_error
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 89525768cd
"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.
2017-01-26 14:29:20 +00:00
Yao Qi f13a9a0cf7 Use dwarf assembler in gdb.dwarf2/implptr-64bit.exp
This patch adds a DW_OP_implicit_value in dwarf assembler, and uses
dwarf assembler in implptr-64bit.exp.  Using dwarf assembler in
implptr-64bit.exp exposes some limitations in dwarf assembler,

 - some variables are not evaluated in the caller's context, so we
   can not pass variable to assembler, like this

       Dwarf::assemble $asm_file {

	cu {
	    version $dwarf_version
	    addr_size $addr_size
	    is_64 $is_64
	} {
	}

	and

	{DW_AT_type :$struct_label "DW_FORM_ref$ref_addr_size"}

   this limitation is fixed by adding "uplevel" and "subst".

 - dwarf assembler doesn't emit DW_FORM_ref_addr for label referencing.
   this limitation is fixed by adding a new character "%",

	{ type %$int_label }

   this means we want to emit DW_FORM_ref_addr for label referencing.

 - we can't set the form of label referencing offset in dwarf assembler.
   Nowadays, dwarf assembler guesses the form of labels, which is
   DW_FORM_ref4.  However, in implptr-64bit.exp, both DW_FORM_ref4
   and DW_FORM_ref8 is used (see REF_ADDR in implptr-64bit.S).  This
   patch adds the flexibility of setting the form of label reference.
   Both of them below are valid,

	{DW_AT_type :$struct_label}
	{DW_AT_type :$struct_label DW_FORM_ref8}

   the former form is the default DW_FORM_ref4.

I compared the .debug_info of objects without and with this patch
applied.  There is no changes except abbrev numbers.

gdb/testsuite:

2017-01-25  Andreas Arnez  <arnez@linux.vnet.ibm.com>
	    Yao Qi  <yao.qi@linaro.org>

	* gdb.dwarf2/implptr-64bit.exp: Use dwarf assembler.
	* gdb.dwarf2/implptr-64bit.S: Remove.
	* lib/dwarf.exp (Dwarf): Handle character "%".  Evaluate some
	variables in caller's context.  Add DW_OP_implicit_value.
2017-01-25 16:24:44 +00:00
Yao Qi 5ac9524116 Handle DW_OP_GNU_implicit_pointer in dwarf assembler
DW_OP_GNU_implicit_pointer refers to a DIE with an offset of different
sizes in different dwarf versions.  In v2, the size is the pointer size,
while in v3 and above, it is the ref_addr size.  This patch fixes
dwarf assembler to emit the correct size of offset.  We've already fixed
this size issue in gdb,
https://sourceware.org/ml/gdb-patches/2011-09/msg00451.html

gdb/testsuite:

2017-01-25  Yao Qi  <yao.qi@linaro.org>

	* lib/dwarf.exp (Dwarf::_location): Handle
	DW_OP_GNU_implicit_pointer with proper size.
2017-01-25 16:24:44 +00:00
Luis Machado 23e829301b Fix uppercase test names in gdb.python/py-xmethods.exp
Some leftover uppercase test names in py-xmethods.exp.  The patch also
replaces two "continue" calls with untested calls to make things a bit more
clear.

gdb/testsuite/ChangeLog:

2017-01-20  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.python/py-xmethods.exp: Fix test names starting with lowercase
	and add untested calls.
2017-01-20 13:58:40 -06:00
Luis Machado d334ae250a Make gdb.python/python.exp more robust
I noticed gdb.python/python.exp failing on aarch64-elf like so:

FAIL: gdb.python/python.exp: Test decode_line func1 line number

This particular test expects the line number for func1 to be 19, hardcoded.

In my aarch64-elf tests gdb thinks func1 is at line 20, making the test fail.

The following patch addresses this by reading the line number information from
GDB and comparing it against the python decoded symtab information.

gdb/testsuite/ChangeLog:

2017-01-20  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.python/python.exp: Check line number against what GDB thinks
	the line number is for func1.
2017-01-20 13:15:36 -06:00
Iain Buclaw f5e6296e21 [D] Fix crash when debug expression enabled.
While casting works as expected with expression debugging turned off,
this seems to be an indication that the D language parser function is
doing something wrong in the building of the expression.

Without changing the grammar, using UNOP_CAST_TYPE is the right thing to
do here, as the TypeExp handler has already wrapped the type around a
pair of OP_TYPE opcodes.

gdb/ChangeLog:

	* d-exp.y (CastExpression): Emit UNOP_CAST_TYPE.

gdb/testsuite/ChangeLog:

	* gdb.dlang/debug-expr.exp: New file.
2017-01-08 11:20:56 +01:00
Joel Brobecker 61baf725ec update copyright year range in GDB files
This applies the second part of GDB's End of Year Procedure, which
updates the copyright year range in all of GDB's files.

gdb/ChangeLog:

        Update copyright year range in all GDB files.
2017-01-01 10:52:34 +04:00
Luis Machado 5b362f04b2 Fix more cases of improper test names
I noticed more occurrences of improper test names. The rather mechanical,
tedious and large patch below addresses, hopefully, most of the leftover cases.

As usual, another pair of eyes is welcome to check if missed something or did
an invalid substitution.

This patch also fixes the prepare_for_testing calls to pass proper test names.

gdb/testsuite/ChangeLog:

2016-12-23  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names for the following files:

	* gdb.ada/exec_changed.exp
	* gdb.ada/info_types.exp
	* gdb.arch/aarch64-atomic-inst.exp
	* gdb.arch/aarch64-fp.exp
	* gdb.arch/altivec-abi.exp
	* gdb.arch/altivec-regs.exp
	* gdb.arch/amd64-byte.exp
	* gdb.arch/amd64-disp-step.exp
	* gdb.arch/amd64-dword.exp
	* gdb.arch/amd64-entry-value-inline.exp
	* gdb.arch/amd64-entry-value-param.exp
	* gdb.arch/amd64-entry-value-paramref.exp
	* gdb.arch/amd64-entry-value.exp
	* gdb.arch/amd64-i386-address.exp
	* gdb.arch/amd64-invalid-stack-middle.exp
	* gdb.arch/amd64-invalid-stack-top.exp
	* gdb.arch/amd64-optimout-repeat.exp
	* gdb.arch/amd64-prologue-skip.exp
	* gdb.arch/amd64-prologue-xmm.exp
	* gdb.arch/amd64-stap-special-operands.exp
	* gdb.arch/amd64-stap-wrong-subexp.exp
	* gdb.arch/amd64-tailcall-cxx.exp
	* gdb.arch/amd64-tailcall-noret.exp
	* gdb.arch/amd64-tailcall-ret.exp
	* gdb.arch/amd64-tailcall-self.exp
	* gdb.arch/amd64-word.exp
	* gdb.arch/arm-bl-branch-dest.exp
	* gdb.arch/arm-disp-step.exp
	* gdb.arch/arm-neon.exp
	* gdb.arch/arm-single-step-kernel-helper.exp
	* gdb.arch/avr-flash-qualifier.exp
	* gdb.arch/disp-step-insn-reloc.exp
	* gdb.arch/e500-abi.exp
	* gdb.arch/e500-regs.exp
	* gdb.arch/ftrace-insn-reloc.exp
	* gdb.arch/i386-avx512.exp
	* gdb.arch/i386-bp_permanent.exp
	* gdb.arch/i386-byte.exp
	* gdb.arch/i386-cfi-notcurrent.exp
	* gdb.arch/i386-disp-step.exp
	* gdb.arch/i386-dr3-watch.exp
	* gdb.arch/i386-float.exp
	* gdb.arch/i386-gnu-cfi.exp
	* gdb.arch/i386-mpx-map.exp
	* gdb.arch/i386-mpx-sigsegv.exp
	* gdb.arch/i386-mpx-simple_segv.exp
	* gdb.arch/i386-mpx.exp
	* gdb.arch/i386-permbkpt.exp
	* gdb.arch/i386-prologue.exp
	* gdb.arch/i386-signal.exp
	* gdb.arch/i386-size-overlap.exp
	* gdb.arch/i386-unwind.exp
	* gdb.arch/i386-word.exp
	* gdb.arch/mips-fcr.exp
	* gdb.arch/powerpc-d128-regs.exp
	* gdb.arch/powerpc-stackless.exp
	* gdb.arch/ppc64-atomic-inst.exp
	* gdb.arch/s390-stackless.exp
	* gdb.arch/s390-tdbregs.exp
	* gdb.arch/s390-vregs.exp
	* gdb.arch/sparc-sysstep.exp
	* gdb.arch/thumb-bx-pc.exp
	* gdb.arch/thumb-singlestep.exp
	* gdb.arch/thumb2-it.exp
	* gdb.arch/vsx-regs.exp
	* gdb.asm/asm-source.exp
	* gdb.base/a2-run.exp
	* gdb.base/advance.exp
	* gdb.base/all-bin.exp
	* gdb.base/anon.exp
	* gdb.base/args.exp
	* gdb.base/arithmet.exp
	* gdb.base/async-shell.exp
	* gdb.base/async.exp
	* gdb.base/attach-pie-noexec.exp
	* gdb.base/attach-twice.exp
	* gdb.base/auto-load.exp
	* gdb.base/bang.exp
	* gdb.base/bitfields.exp
	* gdb.base/break-always.exp
	* gdb.base/break-caller-line.exp
	* gdb.base/break-entry.exp
	* gdb.base/break-inline.exp
	* gdb.base/break-on-linker-gcd-function.exp
	* gdb.base/break-probes.exp
	* gdb.base/break.exp
	* gdb.base/breakpoint-shadow.exp
	* gdb.base/call-ar-st.exp
	* gdb.base/call-sc.exp
	* gdb.base/call-signal-resume.exp
	* gdb.base/call-strs.exp
	* gdb.base/callfuncs.exp
	* gdb.base/catch-fork-static.exp
	* gdb.base/catch-gdb-caused-signals.exp
	* gdb.base/catch-load.exp
	* gdb.base/catch-signal-fork.exp
	* gdb.base/catch-signal.exp
	* gdb.base/catch-syscall.exp
	* gdb.base/charset.exp
	* gdb.base/checkpoint.exp
	* gdb.base/chng-syms.exp
	* gdb.base/code-expr.exp
	* gdb.base/code_elim.exp
	* gdb.base/commands.exp
	* gdb.base/completion.exp
	* gdb.base/complex.exp
	* gdb.base/cond-expr.exp
	* gdb.base/condbreak.exp
	* gdb.base/consecutive.exp
	* gdb.base/continue-all-already-running.exp
	* gdb.base/coredump-filter.exp
	* gdb.base/corefile.exp
	* gdb.base/dbx.exp
	* gdb.base/debug-expr.exp
	* gdb.base/define.exp
	* gdb.base/del.exp
	* gdb.base/disabled-location.exp
	* gdb.base/disasm-end-cu.exp
	* gdb.base/disasm-optim.exp
	* gdb.base/display.exp
	* gdb.base/duplicate-bp.exp
	* gdb.base/ena-dis-br.exp
	* gdb.base/ending-run.exp
	* gdb.base/enumval.exp
	* gdb.base/environ.exp
	* gdb.base/eu-strip-infcall.exp
	* gdb.base/eval-avoid-side-effects.exp
	* gdb.base/eval-skip.exp
	* gdb.base/exitsignal.exp
	* gdb.base/expand-psymtabs.exp
	* gdb.base/filesym.exp
	* gdb.base/find-unmapped.exp
	* gdb.base/finish.exp
	* gdb.base/float.exp
	* gdb.base/foll-exec-mode.exp
	* gdb.base/foll-exec.exp
	* gdb.base/foll-fork.exp
	* gdb.base/fortran-sym-case.exp
	* gdb.base/freebpcmd.exp
	* gdb.base/func-ptr.exp
	* gdb.base/func-ptrs.exp
	* gdb.base/funcargs.exp
	* gdb.base/gcore-buffer-overflow.exp
	* gdb.base/gcore-relro-pie.exp
	* gdb.base/gcore-relro.exp
	* gdb.base/gcore.exp
	* gdb.base/gdb1090.exp
	* gdb.base/gdb11530.exp
	* gdb.base/gdb11531.exp
	* gdb.base/gdb1821.exp
	* gdb.base/gdbindex-stabs.exp
	* gdb.base/gdbvars.exp
	* gdb.base/hbreak.exp
	* gdb.base/hbreak2.exp
	* gdb.base/included.exp
	* gdb.base/infcall-input.exp
	* gdb.base/inferior-died.exp
	* gdb.base/infnan.exp
	* gdb.base/info-macros.exp
	* gdb.base/info-os.exp
	* gdb.base/info-proc.exp
	* gdb.base/info-shared.exp
	* gdb.base/info-target.exp
	* gdb.base/infoline.exp
	* gdb.base/interp.exp
	* gdb.base/interrupt.exp
	* gdb.base/jit-reader.exp
	* gdb.base/jit-simple.exp
	* gdb.base/kill-after-signal.exp
	* gdb.base/kill-detach-inferiors-cmd.exp
	* gdb.base/label.exp
	* gdb.base/langs.exp
	* gdb.base/ldbl_e308.exp
	* gdb.base/line-symtabs.exp
	* gdb.base/linespecs.exp
	* gdb.base/list.exp
	* gdb.base/long_long.exp
	* gdb.base/longest-types.exp
	* gdb.base/maint.exp
	* gdb.base/max-value-size.exp
	* gdb.base/memattr.exp
	* gdb.base/mips_pro.exp
	* gdb.base/morestack.exp
	* gdb.base/moribund-step.exp
	* gdb.base/multi-forks.exp
	* gdb.base/nested-addr.exp
	* gdb.base/nextoverexit.exp
	* gdb.base/noreturn-finish.exp
	* gdb.base/noreturn-return.exp
	* gdb.base/nostdlib.exp
	* gdb.base/offsets.exp
	* gdb.base/opaque.exp
	* gdb.base/pc-fp.exp
	* gdb.base/permissions.exp
	* gdb.base/print-symbol-loading.exp
	* gdb.base/prologue-include.exp
	* gdb.base/psymtab.exp
	* gdb.base/ptype.exp
	* gdb.base/random-signal.exp
	* gdb.base/randomize.exp
	* gdb.base/range-stepping.exp
	* gdb.base/readline-ask.exp
	* gdb.base/recpar.exp
	* gdb.base/recurse.exp
	* gdb.base/relational.exp
	* gdb.base/restore.exp
	* gdb.base/return-nodebug.exp
	* gdb.base/return.exp
	* gdb.base/run-after-attach.exp
	* gdb.base/save-bp.exp
	* gdb.base/scope.exp
	* gdb.base/sect-cmd.exp
	* gdb.base/set-lang-auto.exp
	* gdb.base/set-noassign.exp
	* gdb.base/setvar.exp
	* gdb.base/sigall.exp
	* gdb.base/sigbpt.exp
	* gdb.base/siginfo-addr.exp
	* gdb.base/siginfo-infcall.exp
	* gdb.base/siginfo-obj.exp
	* gdb.base/siginfo.exp
	* gdb.base/signals-state-child.exp
	* gdb.base/signest.exp
	* gdb.base/sigstep.exp
	* gdb.base/sizeof.exp
	* gdb.base/skip.exp
	* gdb.base/solib-corrupted.exp
	* gdb.base/solib-nodir.exp
	* gdb.base/solib-search.exp
	* gdb.base/stack-checking.exp
	* gdb.base/stale-infcall.exp
	* gdb.base/stap-probe.exp
	* gdb.base/start.exp
	* gdb.base/step-break.exp
	* gdb.base/step-bt.exp
	* gdb.base/step-line.exp
	* gdb.base/step-over-exit.exp
	* gdb.base/step-over-syscall.exp
	* gdb.base/step-resume-infcall.exp
	* gdb.base/step-test.exp
	* gdb.base/store.exp
	* gdb.base/structs3.exp
	* gdb.base/sym-file.exp
	* gdb.base/symbol-without-target_section.exp
	* gdb.base/term.exp
	* gdb.base/testenv.exp
	* gdb.base/ui-redirect.exp
	* gdb.base/until.exp
	* gdb.base/unwindonsignal.exp
	* gdb.base/value-double-free.exp
	* gdb.base/vla-datatypes.exp
	* gdb.base/vla-ptr.exp
	* gdb.base/vla-sideeffect.exp
	* gdb.base/volatile.exp
	* gdb.base/watch-cond-infcall.exp
	* gdb.base/watch-cond.exp
	* gdb.base/watch-non-mem.exp
	* gdb.base/watch-read.exp
	* gdb.base/watch-vfork.exp
	* gdb.base/watchpoint-cond-gone.exp
	* gdb.base/watchpoint-delete.exp
	* gdb.base/watchpoint-hw-hit-once.exp
	* gdb.base/watchpoint-hw.exp
	* gdb.base/watchpoint-stops-at-right-insn.exp
	* gdb.base/watchpoints.exp
	* gdb.base/wchar.exp
	* gdb.base/whatis-exp.exp
	* gdb.btrace/buffer-size.exp
	* gdb.btrace/data.exp
	* gdb.btrace/delta.exp
	* gdb.btrace/dlopen.exp
	* gdb.btrace/enable.exp
	* gdb.btrace/exception.exp
	* gdb.btrace/function_call_history.exp
	* gdb.btrace/gcore.exp
	* gdb.btrace/instruction_history.exp
	* gdb.btrace/nohist.exp
	* gdb.btrace/reconnect.exp
	* gdb.btrace/record_goto-step.exp
	* gdb.btrace/record_goto.exp
	* gdb.btrace/rn-dl-bind.exp
	* gdb.btrace/segv.exp
	* gdb.btrace/step.exp
	* gdb.btrace/stepi.exp
	* gdb.btrace/tailcall-only.exp
	* gdb.btrace/tailcall.exp
	* gdb.btrace/tsx.exp
	* gdb.btrace/unknown_functions.exp
	* gdb.btrace/vdso.exp
	* gdb.compile/compile-ifunc.exp
	* gdb.compile/compile-ops.exp
	* gdb.compile/compile-print.exp
	* gdb.compile/compile-setjmp.exp
	* gdb.cp/abstract-origin.exp
	* gdb.cp/ambiguous.exp
	* gdb.cp/annota2.exp
	* gdb.cp/annota3.exp
	* gdb.cp/anon-ns.exp
	* gdb.cp/anon-struct.exp
	* gdb.cp/anon-union.exp
	* gdb.cp/arg-reference.exp
	* gdb.cp/baseenum.exp
	* gdb.cp/bool.exp
	* gdb.cp/breakpoint.exp
	* gdb.cp/bs15503.exp
	* gdb.cp/call-c.exp
	* gdb.cp/casts.exp
	* gdb.cp/chained-calls.exp
	* gdb.cp/class2.exp
	* gdb.cp/classes.exp
	* gdb.cp/cmpd-minsyms.exp
	* gdb.cp/converts.exp
	* gdb.cp/cp-relocate.exp
	* gdb.cp/cpcompletion.exp
	* gdb.cp/cpexprs.exp
	* gdb.cp/cplabel.exp
	* gdb.cp/cplusfuncs.exp
	* gdb.cp/cpsizeof.exp
	* gdb.cp/ctti.exp
	* gdb.cp/derivation.exp
	* gdb.cp/destrprint.exp
	* gdb.cp/dispcxx.exp
	* gdb.cp/enum-class.exp
	* gdb.cp/exception.exp
	* gdb.cp/exceptprint.exp
	* gdb.cp/expand-psymtabs-cxx.exp
	* gdb.cp/expand-sals.exp
	* gdb.cp/extern-c.exp
	* gdb.cp/filename.exp
	* gdb.cp/formatted-ref.exp
	* gdb.cp/fpointer.exp
	* gdb.cp/gdb1355.exp
	* gdb.cp/gdb2495.exp
	* gdb.cp/hang.exp
	* gdb.cp/impl-this.exp
	* gdb.cp/infcall-dlopen.exp
	* gdb.cp/inherit.exp
	* gdb.cp/iostream.exp
	* gdb.cp/koenig.exp
	* gdb.cp/local.exp
	* gdb.cp/m-data.exp
	* gdb.cp/m-static.exp
	* gdb.cp/mb-ctor.exp
	* gdb.cp/mb-inline.exp
	* gdb.cp/mb-templates.exp
	* gdb.cp/member-name.exp
	* gdb.cp/member-ptr.exp
	* gdb.cp/meth-typedefs.exp
	* gdb.cp/method.exp
	* gdb.cp/method2.exp
	* gdb.cp/minsym-fallback.exp
	* gdb.cp/misc.exp
	* gdb.cp/namelessclass.exp
	* gdb.cp/namespace-enum.exp
	* gdb.cp/namespace-nested-import.exp
	* gdb.cp/namespace.exp
	* gdb.cp/nextoverthrow.exp
	* gdb.cp/no-dmgl-verbose.exp
	* gdb.cp/non-trivial-retval.exp
	* gdb.cp/noparam.exp
	* gdb.cp/nsdecl.exp
	* gdb.cp/nsimport.exp
	* gdb.cp/nsnested.exp
	* gdb.cp/nsnoimports.exp
	* gdb.cp/nsrecurs.exp
	* gdb.cp/nsstress.exp
	* gdb.cp/nsusing.exp
	* gdb.cp/operator.exp
	* gdb.cp/oranking.exp
	* gdb.cp/overload-const.exp
	* gdb.cp/overload.exp
	* gdb.cp/ovldbreak.exp
	* gdb.cp/ovsrch.exp
	* gdb.cp/paren-type.exp
	* gdb.cp/parse-lang.exp
	* gdb.cp/pass-by-ref.exp
	* gdb.cp/pr-1023.exp
	* gdb.cp/pr-1210.exp
	* gdb.cp/pr-574.exp
	* gdb.cp/pr10687.exp
	* gdb.cp/pr12028.exp
	* gdb.cp/pr17132.exp
	* gdb.cp/pr17494.exp
	* gdb.cp/pr9067.exp
	* gdb.cp/pr9167.exp
	* gdb.cp/pr9631.exp
	* gdb.cp/printmethod.exp
	* gdb.cp/psmang.exp
	* gdb.cp/psymtab-parameter.exp
	* gdb.cp/ptype-cv-cp.exp
	* gdb.cp/ptype-flags.exp
	* gdb.cp/re-set-overloaded.exp
	* gdb.cp/ref-types.exp
	* gdb.cp/rtti.exp
	* gdb.cp/scope-err.exp
	* gdb.cp/shadow.exp
	* gdb.cp/smartp.exp
	* gdb.cp/static-method.exp
	* gdb.cp/static-print-quit.exp
	* gdb.cp/temargs.exp
	* gdb.cp/templates.exp
	* gdb.cp/try_catch.exp
	* gdb.cp/typedef-operator.exp
	* gdb.cp/typeid.exp
	* gdb.cp/userdef.exp
	* gdb.cp/using-crash.exp
	* gdb.cp/var-tag.exp
	* gdb.cp/virtbase.exp
	* gdb.cp/virtfunc.exp
	* gdb.cp/virtfunc2.exp
	* gdb.cp/vla-cxx.exp
	* gdb.disasm/t01_mov.exp
	* gdb.disasm/t02_mova.exp
	* gdb.disasm/t03_add.exp
	* gdb.disasm/t04_sub.exp
	* gdb.disasm/t05_cmp.exp
	* gdb.disasm/t06_ari2.exp
	* gdb.disasm/t07_ari3.exp
	* gdb.disasm/t08_or.exp
	* gdb.disasm/t09_xor.exp
	* gdb.disasm/t10_and.exp
	* gdb.disasm/t11_logs.exp
	* gdb.disasm/t12_bit.exp
	* gdb.disasm/t13_otr.exp
	* gdb.dlang/circular.exp
	* gdb.dwarf2/arr-stride.exp
	* gdb.dwarf2/arr-subrange.exp
	* gdb.dwarf2/atomic-type.exp
	* gdb.dwarf2/bad-regnum.exp
	* gdb.dwarf2/bitfield-parent-optimized-out.exp
	* gdb.dwarf2/callframecfa.exp
	* gdb.dwarf2/clztest.exp
	* gdb.dwarf2/corrupt.exp
	* gdb.dwarf2/data-loc.exp
	* gdb.dwarf2/dup-psym.exp
	* gdb.dwarf2/dw2-anon-mptr.exp
	* gdb.dwarf2/dw2-anonymous-func.exp
	* gdb.dwarf2/dw2-bad-mips-linkage-name.exp
	* gdb.dwarf2/dw2-bad-unresolved.exp
	* gdb.dwarf2/dw2-basic.exp
	* gdb.dwarf2/dw2-canonicalize-type.exp
	* gdb.dwarf2/dw2-case-insensitive.exp
	* gdb.dwarf2/dw2-common-block.exp
	* gdb.dwarf2/dw2-compdir-oldgcc.exp
	* gdb.dwarf2/dw2-compressed.exp
	* gdb.dwarf2/dw2-const.exp
	* gdb.dwarf2/dw2-cp-infcall-ref-static.exp
	* gdb.dwarf2/dw2-cu-size.exp
	* gdb.dwarf2/dw2-dup-frame.exp
	* gdb.dwarf2/dw2-entry-value.exp
	* gdb.dwarf2/dw2-icycle.exp
	* gdb.dwarf2/dw2-ifort-parameter.exp
	* gdb.dwarf2/dw2-inline-break.exp
	* gdb.dwarf2/dw2-inline-param.exp
	* gdb.dwarf2/dw2-intercu.exp
	* gdb.dwarf2/dw2-intermix.exp
	* gdb.dwarf2/dw2-lexical-block-bare.exp
	* gdb.dwarf2/dw2-linkage-name-trust.exp
	* gdb.dwarf2/dw2-minsym-in-cu.exp
	* gdb.dwarf2/dw2-noloc.exp
	* gdb.dwarf2/dw2-op-call.exp
	* gdb.dwarf2/dw2-op-out-param.exp
	* gdb.dwarf2/dw2-opt-structptr.exp
	* gdb.dwarf2/dw2-param-error.exp
	* gdb.dwarf2/dw2-producer.exp
	* gdb.dwarf2/dw2-ranges-base.exp
	* gdb.dwarf2/dw2-ref-missing-frame.exp
	* gdb.dwarf2/dw2-reg-undefined.exp
	* gdb.dwarf2/dw2-regno-invalid.exp
	* gdb.dwarf2/dw2-restore.exp
	* gdb.dwarf2/dw2-restrict.exp
	* gdb.dwarf2/dw2-single-line-discriminators.exp
	* gdb.dwarf2/dw2-strp.exp
	* gdb.dwarf2/dw2-undefined-ret-addr.exp
	* gdb.dwarf2/dw2-unresolved.exp
	* gdb.dwarf2/dw2-var-zero-addr.exp
	* gdb.dwarf2/dw4-sig-types.exp
	* gdb.dwarf2/dwz.exp
	* gdb.dwarf2/dynarr-ptr.exp
	* gdb.dwarf2/enum-type.exp
	* gdb.dwarf2/gdb-index.exp
	* gdb.dwarf2/implptr-64bit.exp
	* gdb.dwarf2/implptr-optimized-out.exp
	* gdb.dwarf2/implptr.exp
	* gdb.dwarf2/implref-array.exp
	* gdb.dwarf2/implref-const.exp
	* gdb.dwarf2/implref-global.exp
	* gdb.dwarf2/implref-struct.exp
	* gdb.dwarf2/mac-fileno.exp
	* gdb.dwarf2/main-subprogram.exp
	* gdb.dwarf2/member-ptr-forwardref.exp
	* gdb.dwarf2/method-ptr.exp
	* gdb.dwarf2/missing-sig-type.exp
	* gdb.dwarf2/nonvar-access.exp
	* gdb.dwarf2/opaque-type-lookup.exp
	* gdb.dwarf2/pieces-optimized-out.exp
	* gdb.dwarf2/pieces.exp
	* gdb.dwarf2/pr10770.exp
	* gdb.dwarf2/pr13961.exp
	* gdb.dwarf2/staticvirtual.exp
	* gdb.dwarf2/subrange.exp
	* gdb.dwarf2/symtab-producer.exp
	* gdb.dwarf2/trace-crash.exp
	* gdb.dwarf2/typeddwarf.exp
	* gdb.dwarf2/valop.exp
	* gdb.dwarf2/watch-notconst.exp
	* gdb.fortran/array-element.exp
	* gdb.fortran/charset.exp
	* gdb.fortran/common-block.exp
	* gdb.fortran/complex.exp
	* gdb.fortran/derived-type-function.exp
	* gdb.fortran/derived-type.exp
	* gdb.fortran/logical.exp
	* gdb.fortran/module.exp
	* gdb.fortran/multi-dim.exp
	* gdb.fortran/nested-funcs.exp
	* gdb.fortran/print-formatted.exp
	* gdb.fortran/subarray.exp
	* gdb.fortran/vla-alloc-assoc.exp
	* gdb.fortran/vla-datatypes.exp
	* gdb.fortran/vla-history.exp
	* gdb.fortran/vla-ptr-info.exp
	* gdb.fortran/vla-ptype-sub.exp
	* gdb.fortran/vla-ptype.exp
	* gdb.fortran/vla-sizeof.exp
	* gdb.fortran/vla-type.exp
	* gdb.fortran/vla-value-sub-arbitrary.exp
	* gdb.fortran/vla-value-sub-finish.exp
	* gdb.fortran/vla-value-sub.exp
	* gdb.fortran/vla-value.exp
	* gdb.fortran/whatis_type.exp
	* gdb.go/chan.exp
	* gdb.go/handcall.exp
	* gdb.go/hello.exp
	* gdb.go/integers.exp
	* gdb.go/methods.exp
	* gdb.go/package.exp
	* gdb.go/strings.exp
	* gdb.go/types.exp
	* gdb.go/unsafe.exp
	* gdb.guile/scm-arch.exp
	* gdb.guile/scm-block.exp
	* gdb.guile/scm-breakpoint.exp
	* gdb.guile/scm-cmd.exp
	* gdb.guile/scm-disasm.exp
	* gdb.guile/scm-equal.exp
	* gdb.guile/scm-frame-args.exp
	* gdb.guile/scm-frame-inline.exp
	* gdb.guile/scm-frame.exp
	* gdb.guile/scm-iterator.exp
	* gdb.guile/scm-math.exp
	* gdb.guile/scm-objfile.exp
	* gdb.guile/scm-ports.exp
	* gdb.guile/scm-symbol.exp
	* gdb.guile/scm-symtab.exp
	* gdb.guile/scm-value-cc.exp
	* gdb.guile/types-module.exp
	* gdb.linespec/break-ask.exp
	* gdb.linespec/cpexplicit.exp
	* gdb.linespec/explicit.exp
	* gdb.linespec/keywords.exp
	* gdb.linespec/linespec.exp
	* gdb.linespec/ls-dollar.exp
	* gdb.linespec/ls-errs.exp
	* gdb.linespec/skip-two.exp
	* gdb.linespec/thread.exp
	* gdb.mi/mi-async.exp
	* gdb.mi/mi-basics.exp
	* gdb.mi/mi-break.exp
	* gdb.mi/mi-catch-load.exp
	* gdb.mi/mi-cli.exp
	* gdb.mi/mi-cmd-param-changed.exp
	* gdb.mi/mi-console.exp
	* gdb.mi/mi-detach.exp
	* gdb.mi/mi-disassemble.exp
	* gdb.mi/mi-eval.exp
	* gdb.mi/mi-file-transfer.exp
	* gdb.mi/mi-file.exp
	* gdb.mi/mi-fill-memory.exp
	* gdb.mi/mi-inheritance-syntax-error.exp
	* gdb.mi/mi-linespec-err-cp.exp
	* gdb.mi/mi-logging.exp
	* gdb.mi/mi-memory-changed.exp
	* gdb.mi/mi-read-memory.exp
	* gdb.mi/mi-record-changed.exp
	* gdb.mi/mi-reg-undefined.exp
	* gdb.mi/mi-regs.exp
	* gdb.mi/mi-return.exp
	* gdb.mi/mi-reverse.exp
	* gdb.mi/mi-simplerun.exp
	* gdb.mi/mi-solib.exp
	* gdb.mi/mi-stack.exp
	* gdb.mi/mi-stepi.exp
	* gdb.mi/mi-syn-frame.exp
	* gdb.mi/mi-until.exp
	* gdb.mi/mi-var-block.exp
	* gdb.mi/mi-var-child.exp
	* gdb.mi/mi-var-cmd.exp
	* gdb.mi/mi-var-cp.exp
	* gdb.mi/mi-var-display.exp
	* gdb.mi/mi-var-invalidate.exp
	* gdb.mi/mi-var-list-children-invalid-grandchild.exp
	* gdb.mi/mi-vla-fortran.exp
	* gdb.mi/mi-watch.exp
	* gdb.mi/mi2-var-child.exp
	* gdb.mi/user-selected-context-sync.exp
	* gdb.modula2/unbounded-array.exp
	* gdb.multi/dummy-frame-restore.exp
	* gdb.multi/multi-arch-exec.exp
	* gdb.multi/multi-arch.exp
	* gdb.multi/tids.exp
	* gdb.multi/watchpoint-multi.exp
	* gdb.opencl/callfuncs.exp
	* gdb.opencl/convs_casts.exp
	* gdb.opencl/datatypes.exp
	* gdb.opencl/operators.exp
	* gdb.opencl/vec_comps.exp
	* gdb.opt/clobbered-registers-O2.exp
	* gdb.opt/inline-break.exp
	* gdb.opt/inline-bt.exp
	* gdb.opt/inline-cmds.exp
	* gdb.opt/inline-locals.exp
	* gdb.pascal/case-insensitive-symbols.exp
	* gdb.pascal/floats.exp
	* gdb.pascal/gdb11492.exp
	* gdb.python/lib-types.exp
	* gdb.python/py-arch.exp
	* gdb.python/py-as-string.exp
	* gdb.python/py-bad-printers.exp
	* gdb.python/py-block.exp
	* gdb.python/py-breakpoint-create-fail.exp
	* gdb.python/py-breakpoint.exp
	* gdb.python/py-caller-is.exp
	* gdb.python/py-cmd.exp
	* gdb.python/py-explore-cc.exp
	* gdb.python/py-explore.exp
	* gdb.python/py-finish-breakpoint.exp
	* gdb.python/py-finish-breakpoint2.exp
	* gdb.python/py-frame-args.exp
	* gdb.python/py-frame-inline.exp
	* gdb.python/py-frame.exp
	* gdb.python/py-framefilter-mi.exp
	* gdb.python/py-infthread.exp
	* gdb.python/py-lazy-string.exp
	* gdb.python/py-linetable.exp
	* gdb.python/py-mi-events.exp
	* gdb.python/py-mi-objfile.exp
	* gdb.python/py-mi.exp
	* gdb.python/py-objfile.exp
	* gdb.python/py-pp-integral.exp
	* gdb.python/py-pp-maint.exp
	* gdb.python/py-pp-re-notag.exp
	* gdb.python/py-pp-registration.exp
	* gdb.python/py-recurse-unwind.exp
	* gdb.python/py-strfns.exp
	* gdb.python/py-symbol.exp
	* gdb.python/py-symtab.exp
	* gdb.python/py-sync-interp.exp
	* gdb.python/py-typeprint.exp
	* gdb.python/py-unwind-maint.exp
	* gdb.python/py-unwind.exp
	* gdb.python/py-value-cc.exp
	* gdb.python/py-xmethods.exp
	* gdb.reverse/amd64-tailcall-reverse.exp
	* gdb.reverse/break-precsave.exp
	* gdb.reverse/break-reverse.exp
	* gdb.reverse/consecutive-precsave.exp
	* gdb.reverse/consecutive-reverse.exp
	* gdb.reverse/finish-precsave.exp
	* gdb.reverse/finish-reverse-bkpt.exp
	* gdb.reverse/finish-reverse.exp
	* gdb.reverse/fstatat-reverse.exp
	* gdb.reverse/getresuid-reverse.exp
	* gdb.reverse/i386-precsave.exp
	* gdb.reverse/i386-reverse.exp
	* gdb.reverse/i386-sse-reverse.exp
	* gdb.reverse/i387-env-reverse.exp
	* gdb.reverse/i387-stack-reverse.exp
	* gdb.reverse/insn-reverse.exp
	* gdb.reverse/machinestate-precsave.exp
	* gdb.reverse/machinestate.exp
	* gdb.reverse/next-reverse-bkpt-over-sr.exp
	* gdb.reverse/pipe-reverse.exp
	* gdb.reverse/readv-reverse.exp
	* gdb.reverse/recvmsg-reverse.exp
	* gdb.reverse/rerun-prec.exp
	* gdb.reverse/s390-mvcle.exp
	* gdb.reverse/step-precsave.exp
	* gdb.reverse/step-reverse.exp
	* gdb.reverse/time-reverse.exp
	* gdb.reverse/until-precsave.exp
	* gdb.reverse/until-reverse.exp
	* gdb.reverse/waitpid-reverse.exp
	* gdb.reverse/watch-precsave.exp
	* gdb.reverse/watch-reverse.exp
	* gdb.rust/generics.exp
	* gdb.rust/methods.exp
	* gdb.rust/modules.exp
	* gdb.rust/simple.exp
	* gdb.server/connect-with-no-symbol-file.exp
	* gdb.server/ext-attach.exp
	* gdb.server/ext-restart.exp
	* gdb.server/ext-wrapper.exp
	* gdb.server/file-transfer.exp
	* gdb.server/server-exec-info.exp
	* gdb.server/server-kill.exp
	* gdb.server/server-mon.exp
	* gdb.server/wrapper.exp
	* gdb.stabs/exclfwd.exp
	* gdb.stabs/gdb11479.exp
	* gdb.threads/clone-new-thread-event.exp
	* gdb.threads/corethreads.exp
	* gdb.threads/current-lwp-dead.exp
	* gdb.threads/dlopen-libpthread.exp
	* gdb.threads/gcore-thread.exp
	* gdb.threads/sigstep-threads.exp
	* gdb.threads/watchpoint-fork.exp
	* gdb.trace/actions-changed.exp
	* gdb.trace/backtrace.exp
	* gdb.trace/change-loc.exp
	* gdb.trace/circ.exp
	* gdb.trace/collection.exp
	* gdb.trace/disconnected-tracing.exp
	* gdb.trace/ftrace.exp
	* gdb.trace/mi-trace-frame-collected.exp
	* gdb.trace/mi-trace-unavailable.exp
	* gdb.trace/mi-traceframe-changed.exp
	* gdb.trace/mi-tsv-changed.exp
	* gdb.trace/no-attach-trace.exp
	* gdb.trace/passc-dyn.exp
	* gdb.trace/qtro.exp
	* gdb.trace/range-stepping.exp
	* gdb.trace/read-memory.exp
	* gdb.trace/save-trace.exp
	* gdb.trace/signal.exp
	* gdb.trace/status-stop.exp
	* gdb.trace/tfile.exp
	* gdb.trace/trace-break.exp
	* gdb.trace/trace-buffer-size.exp
	* gdb.trace/trace-condition.exp
	* gdb.trace/tracefile-pseudo-reg.exp
	* gdb.trace/tstatus.exp
	* gdb.trace/unavailable.exp
	* gdb.trace/while-dyn.exp
	* gdb.trace/while-stepping.exp
2016-12-23 10:52:18 -06:00
Doug Evans 34c41c681f New syntax for mt print symbols,msymbols,psymbols.
gdb/ChangeLog:

	* NEWS: Document new syntax for "mt print symbols", "mt print psymbols"
	and "mt print msymbols" commands.
	* psymtab.c (DEV_TTY): Delete.
	(dump_psymtab_addrmap): Don't dump if psymtabs_addrmap is NULL.
	(maintenance_print_psymbols): Rewrite for new syntax:
	mt print psymbols [-objfile objfile] [-pc address] [outfile]
	mt print psymbols [-objfile objfile] [-source source] [outfile]
	(_initialize_psymtab): Update help text.
	* symmisc.c (maintenance_print_symbols): Rewrite for new syntax:
	mt print symbols [-pc address] [outfile]
	mt print symbols [-objfile objfile] [-source source] [outfile]
	(maintenance_print_msymbols): Rewrite for new syntax:
	mt print msymbols [-objfile objfile] [outfile]
	Only print symbols for the current progspace.
	(_initialize_symmisc): Update help text.

gdb/doc/ChangeLog:

	* gdb.texinfo (Symbols): Update docs for symbol printing maintenance
	commands.

gdb/testsuite/ChangeLog:

	* gdb.base/maint.exp: Update tests for maint print symbols, psymbols
	and msymbols.
2016-12-22 15:37:22 -08:00
Yao Qi 16e69324ec Clean up gdb.gdb/selftest.exp
I recently see the test fails like this,

(gdb) PASS: gdb.gdb/selftest.exp: step over argv initialization
list^M
487       std::vector<struct cmdarg> cmdarg_vec;^M
(gdb) FAIL: gdb.gdb/selftest.exp: unknown source line (after step over argv initialization)

step^M
std::vector<cmdarg, std::allocator<cmdarg> >::vector (this=0x7fffffffdc10) at ../../binutils-gdb/gdb/main.c:487^M
487       std::vector<struct cmdarg> cmdarg_vec;^M
(gdb) FAIL: gdb.gdb/selftest.exp: step into xmalloc call

These fails are caused by using std::vector in commit
f60ee22ea1.  selttest.exp should match
the source code of GDB.  It is a maintenance pain, so this patch
removes do_steps_and_nexts.

gdb/testsuite:

2016-12-19  Yao Qi  <yao.qi@linaro.org>

	* gdb.gdb/selftest.exp (do_steps_and_nexts): Remove.
	(test_with_self): Don't call do_steps_and_nexts, and remove
	code about stepping into xmalloc.
2016-12-19 15:00:32 +00:00
Yao Qi f94f411b83 Add ChangeLog entries
ChangeLog entries are missed in my two previous commits.
2016-12-09 15:44:48 +00:00
Yao Qi a28aa6edd4 Create tdep->rx_psw_type and tdep->rx_fpsw_type lazily
I build GDB with all targets enabled, and "set architecture rx",
GDB crashes,

(gdb) set architecture rx

Program received signal SIGSEGV, Segmentation fault.
append_flags_type_flag (type=0x20cc360, bitpos=bitpos@entry=0, name=name@entry=0xd27529 "C") at ../../binutils-gdb/gdb/gdbtypes.c:4926
4926				   name);
(gdb) bt 10
 #0  append_flags_type_flag (type=0x20cc360, bitpos=bitpos@entry=0, name=name@entry=0xd27529 "C") at ../../binutils-gdb/gdb/gdbtypes.c:4926
 #1  0x00000000004ce725 in rx_gdbarch_init (info=..., arches=<optimized out>) at ../../binutils-gdb/gdb/rx-tdep.c:1051
 #2  0x00000000006b05a4 in gdbarch_find_by_info (info=...) at ../../binutils-gdb/gdb/gdbarch.c:5269
 #3  0x000000000060eee4 in gdbarch_update_p (info=...) at ../../binutils-gdb/gdb/arch-utils.c:557
 #4  0x000000000060f8a8 in set_architecture (ignore_args=<optimized out>, from_tty=1, c=<optimized out>) at ../../binutils-gdb/gdb/arch-utils.c:531
 #5  0x0000000000593d0b in do_set_command (arg=<optimized out>, arg@entry=0x20bee81 "rx ", from_tty=from_tty@entry=1, c=c@entry=0x20b1540)
    at ../../binutils-gdb/gdb/cli/cli-setshow.c:455
 #6  0x00000000007665c3 in execute_command (p=<optimized out>, p@entry=0x20bee70 "set architecture rx ", from_tty=1) at ../../binutils-gdb/gdb/top.c:666
 #7  0x00000000006935f4 in command_handler (command=0x20bee70 "set architecture rx ") at ../../binutils-gdb/gdb/event-top.c:577
 #8  0x00000000006938d8 in command_line_handler (rl=<optimized out>) at ../../binutils-gdb/gdb/event-top.c:767
 #9  0x0000000000692c2c in gdb_rl_callback_handler (rl=0x20be7f0 "") at ../../binutils-gdb/gdb/event-top.c:200

The cause is that we want to access some builtin types in gdbarch init, but
it is not initialized yet.  I fix it by creating the type when it is to be
used.  We've already done this in sparc, sparc64 and m68k.

gdb:

2016-12-09  Yao Qi  <yao.qi@linaro.org>

	PR tdep/20954
	* rx-tdep.c (rx_psw_type): New function.
	(rx_fpsw_type): New function.
	(rx_register_type): Call rx_psw_type and rx_fpsw_type.
	(rx_gdbarch_init): Move code to rx_psw_type and
	rx_fpsw_type.

gdb/testsuite:

2016-12-09  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/all-architectures.exp.in: Remove kfail for "rx".
2016-12-09 15:27:43 +00:00
Yao Qi 1a31b34a18 Create tdep->rl78_psw_type lazily
I build GDB for all targets enabled.  When I "set architecture rl78",
GDB crashes,

(gdb) set architecture rl78

Program received signal SIGSEGV, Segmentation fault.
append_flags_type_flag (type=0x20cc0e0, bitpos=bitpos@entry=0, name=name@entry=0x11dba3f "CY") at ../../binutils-gdb/gdb/gdbtypes.c:4926
4926				   name);
(gdb) bt 10
 #0  append_flags_type_flag (type=0x20cc0e0, bitpos=bitpos@entry=0, name=name@entry=0x11dba3f "CY") at ../../binutils-gdb/gdb/gdbtypes.c:4926
 #1  0x00000000004aaca8 in rl78_gdbarch_init (info=..., arches=<optimized out>) at ../../binutils-gdb/gdb/rl78-tdep.c:1410
 #2  0x00000000006b05a4 in gdbarch_find_by_info (info=...) at ../../binutils-gdb/gdb/gdbarch.c:5269
 #3  0x000000000060eee4 in gdbarch_update_p (info=...) at ../../binutils-gdb/gdb/arch-utils.c:557
 #4  0x000000000060f8a8 in set_architecture (ignore_args=<optimized out>, from_tty=1, c=<optimized out>) at ../../binutils-gdb/gdb/arch-utils.c:531
 #5  0x0000000000593d0b in do_set_command (arg=<optimized out>, arg@entry=0x20be851 "rl78", from_tty=from_tty@entry=1, c=c@entry=0x20b1540)
    at ../../binutils-gdb/gdb/cli/cli-setshow.c:455
 #6  0x00000000007665c3 in execute_command (p=<optimized out>, p@entry=0x20be840 "set architecture rl78", from_tty=1) at ../../binutils-gdb/gdb/top.c:666
 #7  0x00000000006935f4 in command_handler (command=0x20be840 "set architecture rl78") at ../../binutils-gdb/gdb/event-top.c:577
 #8  0x00000000006938d8 in command_line_handler (rl=<optimized out>) at ../../binutils-gdb/gdb/event-top.c:767
 #9  0x0000000000692c2c in gdb_rl_callback_handler (rl=0x20be890 "") at ../../binutils-gdb/gdb/event-top.c:200

The cause is that we want to access some builtin types in gdbarch init, but
it is not initialized yet.  I fix it by creating the type when it is to be
used.  We've already done this in sparc, sparc64 and m68k.

gdb:

2016-12-09  Yao Qi  <yao.qi@linaro.org>

	PR tdep/20953
	* rl78-tdep.c (rl78_psw_type): New function.
	(rl78_register_type): Call rl78_psw_type.
	(rl78_gdbarch_init): Move code to rl78_psw_type.

gdb/testsuite:

2016-12-09  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/all-architectures.exp.in: Remove kfail for rl78.
2016-12-09 15:27:43 +00:00
Pedro Alves f1b5deee16 Add test that exercises all bfd architecture, osabi, endian, etc. combinations
This adds a test that exposes several problems fixed by earlier
patches:

#1 - Buffer overrun when host/target formats match, but sizes don't.
     https://sourceware.org/ml/gdb-patches/2016-03/msg00125.html

#2 - Missing handling for FR-V FR300.
     https://sourceware.org/ml/gdb-patches/2016-03/msg00117.html

#3 - BFD architectures with spaces in their names (v850).
     https://sourceware.org/ml/binutils/2016-03/msg00108.html

#4 - The OS ABI names with spaces issue.
     https://sourceware.org/ml/gdb-patches/2016-03/msg00116.html

#5 - Bogus HP/PA long double format.
     https://sourceware.org/ml/gdb-patches/2016-03/msg00122.html

#6 - Cris big endian internal error.
     https://sourceware.org/ml/gdb-patches/2016-03/msg00126.html

#7 - Several PowerPC bfd archs/machines not handled by gdb.
     https://sourceware.org/bugzilla/show_bug.cgi?id=19797

And hopefully helps catch others in the future.

This started out as a test that simply did,

 gdb -ex "print 1.0L"

to exercise #1 above.

Then to cover both 32-bit target / 64-bit host and the converse, I
thought of having the testcase print the floats twice, once with the
architecture set to "i386" and then to "i386:x86-64".  This way it
wouldn't matter whether gdb was built as 32-bit or a 64-bit program.

Then I thought that other archs might have similar host/target
floatformat conversion issues as well.  Instead of hardcoding some
architectures in the test file, I thought we could just iterate over
all bfd architectures and OS ABIs supported by the gdb build being
tested.  This is what then exposed all the other problems listed
above...

With an --enable-targets=all, this exercises over 14 thousand
combinations.  If left in a single test file, it all consistenly runs
in under a minute on my machine (An Intel i7-4810MQ @ 2.8 MHZ running
Fedora 23).  Split in 8 chunks, as in this commit, it runs in around
25 seconds, with make -j8.

To avoid flooding the gdb.sum file, it avoids calling "pass" on each
tested combination/iteration.  I'm explicitly not implementing that by
passing an empty message to gdb_test / gdb_test_multiple, because I
still want a FAIL to be logged in gdb.sum.  So instead this puts the
internal passes in the gdb.log file, only, prefixed "IPASS:", for
internal pass.  TBC, if some iteration fails, it'll still show up as
FAIL in gdb.sum.  If this is an approach that takes on, I can see us
extending the common bits to support it for all testcases.

gdb/testsuite/ChangeLog:
2016-12-09  Pedro Alves  <palves@redhat.com>

	* gdb.base/all-architectures-0.exp: New file.
	* gdb.base/all-architectures-1.exp: New file.
	* gdb.base/all-architectures-2.exp: New file.
	* gdb.base/all-architectures-3.exp: New file.
	* gdb.base/all-architectures-4.exp: New file.
	* gdb.base/all-architectures-5.exp: New file.
	* gdb.base/all-architectures-6.exp: New file.
	* gdb.base/all-architectures-7.exp: New file.
	* gdb.base/all-architectures.exp.in: New file.
2016-12-09 14:59:09 +00:00
Yao Qi 364ca42e71 Compile gdb.perf/skip-prologue.c with and without debug info
gdb.perf/skip-prologue.exp is intended to measure the performance of
skipping prologue with prologue analysis by setting breakpoints.
However, if program is compiled with debug info, GDB is smart to
skip prologue by line table from debug info, so prologue analysis
is not exercised at all.

This patch adds a parameter COMPILE to specify compiling with
debug information, otherwise, it is compiled without debug
information.

gdb/testsuite:

2016-12-09  Yao Qi  <yao.qi@linaro.org>

	* gdb.perf/skip-prologue.exp: Add parameter COMPILE.
2016-12-09 09:51:20 +00:00
Luis Machado 107c2d628b Remove unneeded pattern matching in gdb.base/maint.exp
This gets rid of more useless pattern matching cases in gdb.base/maint.exp.

gdb/testsuite/ChangeLog:

2016-12-02  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.base/maint.exp: Use gdb_test instead of gdb_test_multiple when
	possible.
	Remove useless pattern-matching code.
2016-12-02 13:36:15 -06:00
Pedro Alves df3ee9ca89 Support an "unlimited" number of user-defined arguments
New in v2:

  - A few adjustments / simplifications were possible now that we
    require C++11:

    . Use std::unique_ptr to make the user_args_stack std::vector own
      its elements:

       static std::vector<std::unique_ptr<user_args>> user_args_stack;

    . use vector::emplace_back to construct elements directly in the
      corresponding vectors.

    . use std::to_string instead of adding a gdb::to_string
      replacement.

  - Now includes a test.

Docs/NEWS are unchanged from v1 and have already been approved.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I recently wrote a user-defined command that could benefit from
supporting an unlimited number of arguments:

 http://palves.net/list-active-signal-handlers-with-gdb/

E.g., 'info signal-dispositions 1 2 3 4 5 6 7 8 9 10 11'

However, we currently only support up to 10 arguments passed to
user-defined commands ($arg0..$arg9).

I can't find a good reason for that, other than "old code with hard
coded limits".  This patch removes that limit and modernizes the code
along the way:

  - Makes the user_args struct a real C++ class that uses std::vector
    for storage.

  - Removes the "next" pointer from within user_args and uses a
    std::vector to maintain a stack instead.

  - Adds a new RAII-based scoped_user_args_level class to help
    push/pop user args in the stack instead of using a cleanup.

gdb/ChangeLog:
2016-12-02  Pedro Alves  <palves@redhat.com>

	* NEWS: Mention that user commands now accept an unlimited number
	of arguments.
	* cli/cli-script.c: Include <vector>.
	(struct string_view): New type.
	(MAXUSERARGS): Delete.
	(struct user_args): Now a C++ class.
	(user_args_stack): New.
	(struct scoped_user_args_level): New type.
	(execute_user_command): Use scoped_user_args_level.
	(arg_cleanup): Delete.
	(setup_user_args): Deleted, and refactored as ...
	(user_args::user_args): ... this new constructor.  Limit of number
	of arguments removed.
	(insert_user_defined_cmd_args): Defer to user_args_stack.
	(user_args::insert_args): New, bits based on old
	insert_user_defined_cmd_args with limit of number of arguments
	eliminated.

gdb/doc/ChangeLog:
2016-12-02  Pedro Alves  <palves@redhat.com>

	* gdb.texinfo (User-defined Commands): Limit on number of
	arguments passed to user-defined commands removed; update.

gdb/testsuite/ChangeLog:
2016-12-02  Pedro Alves  <palves@redhat.com>

	* gdb.base/commands.exp (user_defined_command_manyargs_test): New
	procedure.
	(top level): Call it.
2016-12-02 19:22:48 +00:00
Pedro Alves ec835369f1 Test user-defined gdb commands and arguments stack
We're missing a test that makes sure that arguments to user-defined
commands are handled correctly when a user-defined command calls
another user-defined command / recurses.

The following patch changes that code, so add such a test first so we
can be confident won't be breaking this use case.

gdb/testsuite/ChangeLog:
2016-12-02  Pedro Alves  <palves@redhat.com>

	* gdb.base/commands.exp (user_defined_command_args_stack_test):
	New procedure.
	(top level): Call it.
2016-12-02 19:22:23 +00:00
Pedro Alves 01770bbde9 Fix PR 20559 - "eval" command and $arg0...$arg9/$argc substitution
It'd be handy to be able to iterate over command arguments in
user-defined commands, in order to support optional arguments
($arg0..$argN).

I thought I could make it work with "eval", but alas, it doesn't work
currently.  E.g., with:

 define test
   set $i = 0
   while $i < $argc
     eval "print $arg%d", $i
     set $i = $i + 1
   end
 end

we get:

 (gdb) test 1
 $1 = void
 (gdb) test 1 2 3
 $2 = void
 $3 = void
 $4 = void
 (gdb)

The problem is that "eval" doesn't do user-defined command arguments
substitution after expanding its own argument.  This patch fixes that,
which makes the example above work:

 (gdb) test 1
 $1 = 1
 (gdb) test 1 2 3
 $2 = 1
 $3 = 2
 $4 = 3
 (gdb)

New test included, similar the above, but also exercises expanding
$argc.

I think this is likely to simplify many scripts out there, so I'm
adding an example to the manual and mentioning it in NEWS as well.

gdb/ChangeLog:
2016-12-02  Pedro Alves  <palves@redhat.com>

	PR cli/20559
	* NEWS: Mention "eval" expands user-defined command arguments.
	* cli/cli-script.c (execute_control_command): Adjust to rename.
	(insert_args): Rename to ...
	(insert_user_defined_cmd_args): ... this, and make extern.
	* cli/cli-script.h (insert_user_defined_cmd_args): New
	declaration.
	* printcmd.c: Include "cli/cli-script.h".
	(eval_command): Call insert_user_defined_cmd_args.

gdb/doc/ChangeLog:
2016-12-02  Pedro Alves  <palves@redhat.com>

	PR cli/20559
	* gdb.texinfo (Define): Add example of using "eval" to process a
	variable number of arguments.
	(Output) <eval>: Add anchor.

gdb/testsuite/ChangeLog:
2016-12-02  Pedro Alves  <palves@redhat.com>

	PR cli/20559
	* gdb.base/commands.exp (user_defined_command_args_eval): New
	procedure.
	(top level): Call it.
2016-12-02 19:17:13 +00:00
Luis Machado 008459ea88 Revert change to gdb.cp/ovldbreak.exp
This reverts the timeout handling (removed by
018572b888) for gdb.cp/ovldbreak.exp until we
decide what to do about this particular function.

gdb/testsuite/ChangeLog:

2016-12-02  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.base/ovldbreak.exp (take_gdb_out_of_choice_menu): Restore
	timeout handling.
2016-12-02 11:37:57 -06:00
Tom Tromey 0c1b455e29 PR symtab/16264 - support DW_AT_main_subprogram
This patch adds support for DW_AT_main_subprogram.
This is PR symtab/16264.

DW_AT_main_subprogram is used to mark a program's entry point.  GCC
can emit this, and I hope to change the Rust compiler to emit it as
well.

GDB already supports an older, pre-DWARF 4 convention adopted by
FORTRAN compilers, namely to emit DW_AT_calling_convention for the
"main" function.  However, I think this support in GDB had a small
bug, in that it seems to rely on the DW_AT_name being read before
DW_AT_calling_convention.  This patch fixes this as well.

Built and regtested on x86-64 Fedora 24 and the buildbot.  New test
case included.

2016-12-02  Tom Tromey  <tom@tromey.com>

	PR symtab/16264:
	* dwarf2read.c (struct partial_die_info) <main_subprogram>: New
	member.
	(add_partial_symbol): Call set_objfile_main_name.
	(read_partial_die): Handle DW_AT_main_subprogram.
	<DW_AT_calling_convention>: don't call set_objfile_main_name, but
	set main_subprogram flag.

2016-12-02  Tom Tromey  <tom@tromey.com>

	* gdb.dwarf2/main-subprogram.c: New file.
	* gdb.dwarf2/main-subprogram.exp: New file.
2016-12-02 09:11:47 -07:00
Luis Machado 018572b888 Don't handle timeout inside gdb_test_multiple
This fixes a few cases where the testcase is explicitly handling timeouts
inside gdb_test_multiple when it is not necessary.

It also converts two gdb_test_multiple calls to gdb_test_no_output calls
(also removing the timeout handling).

gdb/testsuite/ChangeLog:

2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.base/maint.exp: Remove timeout handling for gdb_test_multiple.
	* gdb.cp/gdb2495.exp: Likewise and convert gdb_test_multiple into
	gdb_test_no_output for a couple of cases.
	* gdb.cp/ovldbreak.exp: Remove timeout handling for gdb_test_multiple.
2016-12-01 22:07:02 -06:00
Luis Machado 84c93cd5f1 Fixup testcases outputting own name as a test name and standardize failed compilation messages
Changes in v3:

- Adjusted some testcases where the message "failed to compile" was not unique.

Changes in v2:

- Addressed comments from reviewers.
- Fixed spurious whitespaces.
- Changed compilation failure messages that included source/binary paths to
  ones that are short and deterministic.

---

Another bit of cleanup to the testsuite. We have a number of tests that are
not honoring the rule of not outputting their own name as a test name.

I fixed up all the offenders i could find with the following regular
expression:

"(xfail|kfail|kpass|fail|pass|unsupported|untested) ([A-Za-z0-9]+|\\\$(.)*testfile(.)*)\.exp$"

gdb/testsuite/ChangeLog:
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names and standardize compilation error messages throughout
	the following files:

	* gdb.ada/start.exp
	* gdb.arch/alpha-step.exp
	* gdb.arch/e500-prologue.exp
	* gdb.arch/ftrace-insn-reloc.exp
	* gdb.arch/gdb1291.exp
	* gdb.arch/gdb1431.exp
	* gdb.arch/gdb1558.exp
	* gdb.arch/i386-dr3-watch.exp
	* gdb.arch/i386-sse-stack-align.exp
	* gdb.arch/ia64-breakpoint-shadow.exp
	* gdb.arch/pa-nullify.exp
	* gdb.arch/powerpc-aix-prologue.exp
	* gdb.arch/thumb-bx-pc.exp
	* gdb.base/annota1.exp
	* gdb.base/annota3.exp
	* gdb.base/arrayidx.exp
	* gdb.base/assign.exp
	* gdb.base/attach.exp
	* gdb.base/auxv.exp
	* gdb.base/bang.exp
	* gdb.base/bfp-test.exp
	* gdb.base/bigcore.exp
	* gdb.base/bitfields2.exp
	* gdb.base/break-fun-addr.exp
	* gdb.base/break-probes.exp
	* gdb.base/call-rt-st.exp
	* gdb.base/callexit.exp
	* gdb.base/catch-fork-kill.exp
	* gdb.base/charset.exp
	* gdb.base/checkpoint.exp
	* gdb.base/comprdebug.exp
	* gdb.base/constvars.exp
	* gdb.base/coredump-filter.exp
	* gdb.base/cursal.exp
	* gdb.base/cvexpr.exp
	* gdb.base/detach.exp
	* gdb.base/display.exp
	* gdb.base/dmsym.exp
	* gdb.base/dprintf-pending.exp
	* gdb.base/dso2dso.exp
	* gdb.base/dtrace-probe.exp
	* gdb.base/dump.exp
	* gdb.base/enum_cond.exp
	* gdb.base/exe-lock.exp
	* gdb.base/exec-invalid-sysroot.exp
	* gdb.base/execl-update-breakpoints.exp
	* gdb.base/exprs.exp
	* gdb.base/fileio.exp
	* gdb.base/find.exp
	* gdb.base/finish.exp
	* gdb.base/fixsection.exp
	* gdb.base/foll-vfork.exp
	* gdb.base/frame-args.exp
	* gdb.base/gcore.exp
	* gdb.base/gdb1250.exp
	* gdb.base/global-var-nested-by-dso.exp
	* gdb.base/gnu-ifunc.exp
	* gdb.base/hashline1.exp
	* gdb.base/hashline2.exp
	* gdb.base/hashline3.exp
	* gdb.base/hbreak-in-shr-unsupported.exp
	* gdb.base/huge.exp
	* gdb.base/infcall-input.exp
	* gdb.base/info-fun.exp
	* gdb.base/info-shared.exp
	* gdb.base/jit-simple.exp
	* gdb.base/jit-so.exp
	* gdb.base/jit.exp
	* gdb.base/jump.exp
	* gdb.base/label.exp
	* gdb.base/lineinc.exp
	* gdb.base/logical.exp
	* gdb.base/longjmp.exp
	* gdb.base/macscp.exp
	* gdb.base/miscexprs.exp
	* gdb.base/new-ui-echo.exp
	* gdb.base/new-ui-pending-input.exp
	* gdb.base/new-ui.exp
	* gdb.base/nodebug.exp
	* gdb.base/nofield.exp
	* gdb.base/offsets.exp
	* gdb.base/overlays.exp
	* gdb.base/pending.exp
	* gdb.base/pointers.exp
	* gdb.base/pr11022.exp
	* gdb.base/printcmds.exp
	* gdb.base/prologue.exp
	* gdb.base/ptr-typedef.exp
	* gdb.base/realname-expand.exp
	* gdb.base/relativedebug.exp
	* gdb.base/relocate.exp
	* gdb.base/remote.exp
	* gdb.base/reread.exp
	* gdb.base/return2.exp
	* gdb.base/savedregs.exp
	* gdb.base/sep.exp
	* gdb.base/sepdebug.exp
	* gdb.base/sepsymtab.exp
	* gdb.base/set-inferior-tty.exp
	* gdb.base/setshow.exp
	* gdb.base/shlib-call.exp
	* gdb.base/sigaltstack.exp
	* gdb.base/siginfo-addr.exp
	* gdb.base/signals.exp
	* gdb.base/signull.exp
	* gdb.base/sigrepeat.exp
	* gdb.base/so-impl-ld.exp
	* gdb.base/solib-display.exp
	* gdb.base/solib-overlap.exp
	* gdb.base/solib-search.exp
	* gdb.base/solib-symbol.exp
	* gdb.base/structs.exp
	* gdb.base/structs2.exp
	* gdb.base/symtab-search-order.exp
	* gdb.base/twice.exp
	* gdb.base/unload.exp
	* gdb.base/varargs.exp
	* gdb.base/watchpoint-solib.exp
	* gdb.base/watchpoint.exp
	* gdb.base/whatis.exp
	* gdb.base/wrong_frame_bt_full.exp
	* gdb.btrace/dlopen.exp
	* gdb.cell/ea-standalone.exp
	* gdb.cell/ea-test.exp
	* gdb.cp/dispcxx.exp
	* gdb.cp/gdb2384.exp
	* gdb.cp/method2.exp
	* gdb.cp/nextoverthrow.exp
	* gdb.cp/pr10728.exp
	* gdb.disasm/am33.exp
	* gdb.disasm/h8300s.exp
	* gdb.disasm/mn10300.exp
	* gdb.disasm/sh3.exp
	* gdb.dwarf2/dw2-dir-file-name.exp
	* gdb.fortran/complex.exp
	* gdb.fortran/library-module.exp
	* gdb.guile/scm-pretty-print.exp
	* gdb.guile/scm-symbol.exp
	* gdb.guile/scm-type.exp
	* gdb.guile/scm-value.exp
	* gdb.linespec/linespec.exp
	* gdb.mi/gdb701.exp
	* gdb.mi/gdb792.exp
	* gdb.mi/mi-breakpoint-changed.exp
	* gdb.mi/mi-dprintf-pending.exp
	* gdb.mi/mi-dprintf.exp
	* gdb.mi/mi-exit-code.exp
	* gdb.mi/mi-pending.exp
	* gdb.mi/mi-solib.exp
	* gdb.mi/new-ui-mi-sync.exp
	* gdb.mi/pr11022.exp
	* gdb.mi/user-selected-context-sync.exp
	* gdb.opt/solib-intra-step.exp
	* gdb.python/py-events.exp
	* gdb.python/py-finish-breakpoint.exp
	* gdb.python/py-mi.exp
	* gdb.python/py-prettyprint.exp
	* gdb.python/py-shared.exp
	* gdb.python/py-symbol.exp
	* gdb.python/py-template.exp
	* gdb.python/py-type.exp
	* gdb.python/py-value.exp
	* gdb.reverse/solib-precsave.exp
	* gdb.reverse/solib-reverse.exp
	* gdb.server/solib-list.exp
	* gdb.stabs/weird.exp
	* gdb.threads/reconnect-signal.exp
	* gdb.threads/stepi-random-signal.exp
	* gdb.trace/actions.exp
	* gdb.trace/ax.exp
	* gdb.trace/backtrace.exp
	* gdb.trace/change-loc.exp
	* gdb.trace/deltrace.exp
	* gdb.trace/ftrace-lock.exp
	* gdb.trace/ftrace.exp
	* gdb.trace/infotrace.exp
	* gdb.trace/mi-tracepoint-changed.exp
	* gdb.trace/packetlen.exp
	* gdb.trace/passcount.exp
	* gdb.trace/pending.exp
	* gdb.trace/range-stepping.exp
	* gdb.trace/report.exp
	* gdb.trace/stap-trace.exp
	* gdb.trace/tfind.exp
	* gdb.trace/trace-break.exp
	* gdb.trace/trace-condition.exp
	* gdb.trace/trace-enable-disable.exp
	* gdb.trace/trace-mt.exp
	* gdb.trace/tracecmd.exp
	* gdb.trace/tspeed.exp
	* gdb.trace/tsv.exp
	* lib/perftest.exp
2016-12-01 14:47:50 -06:00
Luis Machado fb9feb3591 Fix test names starting with uppercase using multi-line gdb_test_multiple
This fixes offender testcases that have test names starting with uppercase
when using gdb_test_multiple in a multi-line construct.

gdb/testsuite/ChangeLog
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.cp/gdb2495.exp: Replace gdb_test_multiple
	with gdb_test_no_output.
	Use command as test name.
2016-12-01 14:46:28 -06:00
Luis Machado cd2ddb6cde Fix test names starting with uppercase using multi-line gdb_test_no_output
This fixes offender testcases that have test names starting with uppercase
when using gdb_test_no_output in a multi-line construct.

gdb/testsuite/ChangeLog
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names starting with uppercase throughout the files.

	* gdb.ada/assign_1.exp
	* gdb.ada/boolean_expr.exp
	* gdb.base/arrayidx.exp
	* gdb.base/del.exp
	* gdb.base/gcore-buffer-overflow.exp
	* gdb.base/testenv.exp
	* gdb.compile/compile.exp
	* gdb.python/py-framefilter-invalidarg.exp
	* gdb.python/py-framefilter.exp
2016-12-01 14:45:32 -06:00
Luis Machado bb95117e10 Fix test names starting with uppercase using multi-line gdb_test/mi_gdb_test
This fixes offender testcases that have test names starting with uppercase
when using gdb_test/mi_gdb_test in a multi-line construct.

gdb/testsuite/ChangeLog
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names starting with uppercase throughout the files.

	* gdb.ada/array_return.exp
	* gdb.ada/expr_delims.exp
	* gdb.ada/mi_dyn_arr.exp
	* gdb.ada/mi_interface.exp
	* gdb.ada/mi_var_array.exp
	* gdb.ada/watch_arg.exp
	* gdb.arch/alpha-step.exp
	* gdb.arch/altivec-regs.exp
	* gdb.arch/e500-regs.exp
	* gdb.arch/powerpc-d128-regs.exp
	* gdb.base/arrayidx.exp
	* gdb.base/break.exp
	* gdb.base/checkpoint.exp
	* gdb.base/debug-expr.exp
	* gdb.base/dmsym.exp
	* gdb.base/radix.exp
	* gdb.base/sepdebug.exp
	* gdb.base/testenv.exp
	* gdb.base/watch_thread_num.exp
	* gdb.base/watchpoint-cond-gone.exp
	* gdb.cell/break.exp
	* gdb.cell/ea-cache.exp
	* gdb.compile/compile.exp
	* gdb.cp/gdb2495.exp
	* gdb.gdb/selftest.exp
	* gdb.gdb/xfullpath.exp
	* gdb.go/hello.exp
	* gdb.go/integers.exp
	* gdb.objc/basicclass.exp
	* gdb.pascal/hello.exp
	* gdb.pascal/integers.exp
	* gdb.python/py-breakpoint.exp
	* gdb.python/py-cmd.exp
	* gdb.python/py-linetable.exp
	* gdb.python/py-xmethods.exp
	* gdb.python/python.exp
	* gdb.reverse/consecutive-precsave.exp
	* gdb.reverse/finish-precsave.exp
	* gdb.reverse/i386-precsave.exp
	* gdb.reverse/machinestate-precsave.exp
	* gdb.reverse/sigall-precsave.exp
	* gdb.reverse/solib-precsave.exp
	* gdb.reverse/step-precsave.exp
	* gdb.reverse/until-precsave.exp
	* gdb.reverse/watch-precsave.exp
	* gdb.threads/leader-exit.exp
	* gdb.threads/pthreads.exp
	* gdb.threads/wp-replication.exp
	* gdb.trace/actions.exp
	* gdb.trace/mi-tsv-changed.exp
	* gdb.trace/tsv.exp
2016-12-01 14:44:38 -06:00
Luis Machado de97fdd4a0 Fix test names starting with uppercase using gdb_test_multiple
This fixes offender testcases that have test names starting with uppercase
when using gdb_test_multiple in a single-line construct.

gdb/testsuite/ChangeLog
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names starting with uppercase throughout the files.

	* gdb.arch/i386-bp_permanent.exp
	* gdb.arch/i386-gnu-cfi.exp
	* gdb.base/disasm-end-cu.exp
	* gdb.base/macscp.exp
	* gdb.base/pending.exp
	* gdb.base/watch_thread_num.exp
	* gdb.cp/exception.exp
	* gdb.cp/gdb2495.exp
	* gdb.cp/local.exp
	* gdb.python/py-evsignal.exp
	* gdb.python/python.exp
	* gdb.trace/tracecmd.exp
2016-12-01 14:43:42 -06:00
Luis Machado 9f058c10ce Fix test names starting with uppercase using gdb_test_no_output
This fixes offender testcases that have test names starting with uppercase
when using gdb_test_no_output in a single-line construct.

gdb/testsuite/ChangeLog
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names starting with uppercase throughout the files.

	* gdb.base/charset.exp
	* gdb.base/eval.exp
	* gdb.base/multi-forks.exp
	* gdb.guile/scm-progspace.exp
	* gdb.opencl/datatypes.exp
	* gdb.python/py-block.exp
	* gdb.python/py-function.exp
	* gdb.python/py-symbol.exp
	* gdb.python/py-symtab.exp
	* gdb.python/py-xmethods.exp
	* gdb.reverse/break-precsave.exp
	* gdb.reverse/break-reverse.exp
	* gdb.reverse/consecutive-precsave.exp
	* gdb.reverse/consecutive-reverse.exp
	* gdb.reverse/finish-precsave.exp
	* gdb.reverse/finish-reverse-bkpt.exp
	* gdb.reverse/finish-reverse.exp
	* gdb.reverse/fstatat-reverse.exp
	* gdb.reverse/getresuid-reverse.exp
	* gdb.reverse/i386-precsave.exp
	* gdb.reverse/i386-reverse.exp
	* gdb.reverse/i386-sse-reverse.exp
	* gdb.reverse/i387-stack-reverse.exp
	* gdb.reverse/insn-reverse.exp
	* gdb.reverse/machinestate-precsave.exp
	* gdb.reverse/machinestate.exp
	* gdb.reverse/next-reverse-bkpt-over-sr.exp
	* gdb.reverse/pipe-reverse.exp
	* gdb.reverse/readv-reverse.exp
	* gdb.reverse/recvmsg-reverse.exp
	* gdb.reverse/rerun-prec.exp
	* gdb.reverse/s390-mvcle.exp
	* gdb.reverse/sigall-precsave.exp
	* gdb.reverse/sigall-reverse.exp
	* gdb.reverse/solib-precsave.exp
	* gdb.reverse/solib-reverse.exp
	* gdb.reverse/step-precsave.exp
	* gdb.reverse/step-reverse.exp
	* gdb.reverse/time-reverse.exp
	* gdb.reverse/until-precsave.exp
	* gdb.reverse/until-reverse.exp
	* gdb.reverse/waitpid-reverse.exp
	* gdb.reverse/watch-precsave.exp
	* gdb.reverse/watch-reverse.exp
2016-12-01 14:42:48 -06:00
Luis Machado cdc7edd7b1 Fix test names starting with uppercase using gdb_test on a single line.
Changes in v3:
  Fixed incorrect substitutions.

This fixes offender testcases that have test names starting with uppercase
when using gdb_test in a single line construct.

gdb/testsuite/ChangeLog
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names starting with uppercase throughout the files.

	* gdb.arch/i386-mpx-simple_segv.exp
	* gdb.arch/i386-mpx.exp
	* gdb.arch/i386-permbkpt.exp
	* gdb.arch/pa-nullify.exp
	* gdb.arch/powerpc-d128-regs.exp
	* gdb.arch/vsx-regs.exp
	* gdb.base/bfp-test.exp
	* gdb.base/break.exp
	* gdb.base/breakpoint-shadow.exp
	* gdb.base/callfuncs.exp
	* gdb.base/charset.exp
	* gdb.base/commands.exp
	* gdb.base/completion.exp
	* gdb.base/dfp-test.exp
	* gdb.base/echo.exp
	* gdb.base/ending-run.exp
	* gdb.base/eval.exp
	* gdb.base/expand-psymtabs.exp
	* gdb.base/float128.exp
	* gdb.base/floatn.exp
	* gdb.base/foll-exec-mode.exp
	* gdb.base/gdb1056.exp
	* gdb.base/gdb11531.exp
	* gdb.base/kill-after-signal.exp
	* gdb.base/multi-forks.exp
	* gdb.base/overlays.exp
	* gdb.base/pending.exp
	* gdb.base/sepdebug.exp
	* gdb.base/testenv.exp
	* gdb.base/valgrind-db-attach.exp
	* gdb.base/watch_thread_num.exp
	* gdb.base/watchpoint-cond-gone.exp
	* gdb.base/watchpoint.exp
	* gdb.base/watchpoints.exp
	* gdb.cp/arg-reference.exp
	* gdb.cp/baseenum.exp
	* gdb.cp/operator.exp
	* gdb.cp/shadow.exp
	* gdb.dwarf2/dw2-op-out-param.exp
	* gdb.dwarf2/dw2-reg-undefined.exp
	* gdb.go/chan.exp
	* gdb.go/hello.exp
	* gdb.go/integers.exp
	* gdb.go/methods.exp
	* gdb.go/package.exp
	* gdb.guile/scm-parameter.exp
	* gdb.guile/scm-progspace.exp
	* gdb.guile/scm-value.exp
	* gdb.mi/mi-pending.exp
	* gdb.mi/user-selected-context-sync.exp
	* gdb.multi/multi-attach.exp
	* gdb.multi/tids.exp
	* gdb.opt/clobbered-registers-O2.exp
	* gdb.pascal/floats.exp
	* gdb.pascal/integers.exp
	* gdb.python/py-block.exp
	* gdb.python/py-events.exp
	* gdb.python/py-parameter.exp
	* gdb.python/py-symbol.exp
	* gdb.python/py-symtab.exp
	* gdb.python/py-type.exp
	* gdb.python/py-value.exp
	* gdb.python/py-xmethods.exp
	* gdb.python/python.exp
	* gdb.reverse/break-precsave.exp
	* gdb.reverse/consecutive-precsave.exp
	* gdb.reverse/finish-precsave.exp
	* gdb.reverse/i386-precsave.exp
	* gdb.reverse/machinestate-precsave.exp
	* gdb.reverse/sigall-precsave.exp
	* gdb.reverse/solib-precsave.exp
	* gdb.reverse/step-precsave.exp
	* gdb.reverse/until-precsave.exp
	* gdb.reverse/watch-precsave.exp
	* gdb.server/ext-attach.exp
	* gdb.server/ext-restart.exp
	* gdb.server/ext-run.exp
	* gdb.server/ext-wrapper.exp
	* gdb.stabs/gdb11479.exp
	* gdb.stabs/weird.exp
	* gdb.threads/attach-many-short-lived-threads.exp
	* gdb.threads/kill.exp
	* gdb.threads/watchpoint-fork.exp
2016-12-01 14:41:23 -06:00
Luis Machado bc6c7af4a2 Fix test names starting with uppercase output by basic functions
The following patch is based on the previous patch i sent and handles cases of
test names that start with an uppercase letter. Test names should start with
lowercase unless it starts with the name of a technology, architecture, ISA
etc.

This first patch addresses cases of test names output explicitly via xfail,
kfail, kpass, fail, pass, unsupported, untested and also names set with the
pattern "set test" and "set testname".

gdb/testsuite/ChangeLog:
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names starting with uppercase throughout all the files below.

	* gdb.ada/array_return.exp
	* gdb.ada/catch_ex.exp
	* gdb.ada/info_exc.exp
	* gdb.ada/mi_catch_ex.exp
	* gdb.ada/mi_dyn_arr.exp
	* gdb.ada/mi_ex_cond.exp
	* gdb.ada/mi_exc_info.exp
	* gdb.ada/mi_interface.exp
	* gdb.ada/mi_task_arg.exp
	* gdb.ada/mi_task_info.exp
	* gdb.ada/mi_var_array.exp
	* gdb.arch/alpha-step.exp
	* gdb.arch/amd64-disp-step.exp
	* gdb.arch/arm-disp-step.exp
	* gdb.arch/disp-step-insn-reloc.exp
	* gdb.arch/e500-prologue.exp
	* gdb.arch/ftrace-insn-reloc.exp
	* gdb.arch/gdb1558.exp
	* gdb.arch/i386-bp_permanent.exp
	* gdb.arch/i386-disp-step.exp
	* gdb.arch/i386-float.exp
	* gdb.arch/i386-gnu-cfi.exp
	* gdb.arch/ia64-breakpoint-shadow.exp
	* gdb.arch/mips16-thunks.exp
	* gdb.arch/pa-nullify.exp
	* gdb.arch/powerpc-aix-prologue.exp
	* gdb.arch/powerpc-power.exp
	* gdb.arch/ppc-dfp.exp
	* gdb.arch/s390-tdbregs.exp
	* gdb.arch/spu-info.exp
	* gdb.arch/spu-ls.exp
	* gdb.arch/thumb-bx-pc.exp
	* gdb.base/advance.exp
	* gdb.base/annota-input-while-running.exp
	* gdb.base/arrayidx.exp
	* gdb.base/asmlabel.exp
	* gdb.base/async.exp
	* gdb.base/attach-wait-input.exp
	* gdb.base/auto-connect-native-target.exp
	* gdb.base/batch-preserve-term-settings.exp
	* gdb.base/bfp-test.exp
	* gdb.base/bigcore.exp
	* gdb.base/bp-permanent.exp
	* gdb.base/break-always.exp
	* gdb.base/break-fun-addr.exp
	* gdb.base/break-idempotent.exp
	* gdb.base/break-main-file-remove-fail.exp
	* gdb.base/break-probes.exp
	* gdb.base/break-unload-file.exp
	* gdb.base/break.exp
	* gdb.base/call-ar-st.exp
	* gdb.base/call-rt-st.exp
	* gdb.base/call-sc.exp
	* gdb.base/call-signal-resume.exp
	* gdb.base/call-strs.exp
	* gdb.base/callexit.exp
	* gdb.base/callfuncs.exp
	* gdb.base/catch-gdb-caused-signals.exp
	* gdb.base/catch-signal-siginfo-cond.exp
	* gdb.base/catch-syscall.exp
	* gdb.base/compare-sections.exp
	* gdb.base/cond-eval-mode.exp
	* gdb.base/condbreak-call-false.exp
	* gdb.base/consecutive-step-over.exp
	* gdb.base/cursal.exp
	* gdb.base/disabled-location.exp
	* gdb.base/disasm-end-cu.exp
	* gdb.base/display.exp
	* gdb.base/double-prompt-target-event-error.exp
	* gdb.base/dprintf-bp-same-addr.exp
	* gdb.base/dprintf-detach.exp
	* gdb.base/dprintf-next.exp
	* gdb.base/dprintf-non-stop.exp
	* gdb.base/dprintf-pending.exp
	* gdb.base/dso2dso.exp
	* gdb.base/ending-run.exp
	* gdb.base/enum_cond.exp
	* gdb.base/examine-backward.exp
	* gdb.base/exe-lock.exp
	* gdb.base/exec-invalid-sysroot.exp
	* gdb.base/execl-update-breakpoints.exp
	* gdb.base/execution-termios.exp
	* gdb.base/fileio.exp
	* gdb.base/fixsection.exp
	* gdb.base/foll-exec-mode.exp
	* gdb.base/foll-exec.exp
	* gdb.base/fork-running-state.exp
	* gdb.base/frame-args.exp
	* gdb.base/fullpath-expand.exp
	* gdb.base/func-ptr.exp
	* gdb.base/gcore-relro-pie.exp
	* gdb.base/gdb1090.exp
	* gdb.base/gdb1555.exp
	* gdb.base/global-var-nested-by-dso.exp
	* gdb.base/gnu-ifunc.exp
	* gdb.base/hbreak-in-shr-unsupported.exp
	* gdb.base/hbreak-unmapped.exp
	* gdb.base/hook-stop.exp
	* gdb.base/infcall-input.exp
	* gdb.base/info-fun.exp
	* gdb.base/info-shared.exp
	* gdb.base/interrupt-noterm.exp
	* gdb.base/jit-so.exp
	* gdb.base/jit.exp
	* gdb.base/line-symtabs.exp
	* gdb.base/list.exp
	* gdb.base/longjmp.exp
	* gdb.base/macscp.exp
	* gdb.base/max-value-size.exp
	* gdb.base/nodebug.exp
	* gdb.base/nofield.exp
	* gdb.base/overlays.exp
	* gdb.base/paginate-after-ctrl-c-running.exp
	* gdb.base/paginate-bg-execution.exp
	* gdb.base/paginate-inferior-exit.exp
	* gdb.base/pending.exp
	* gdb.base/pr11022.exp
	* gdb.base/printcmds.exp
	* gdb.base/ptr-typedef.exp
	* gdb.base/ptype.exp
	* gdb.base/randomize.exp
	* gdb.base/range-stepping.exp
	* gdb.base/realname-expand.exp
	* gdb.base/relativedebug.exp
	* gdb.base/remote.exp
	* gdb.base/savedregs.exp
	* gdb.base/sepdebug.exp
	* gdb.base/set-noassign.exp
	* gdb.base/shlib-call.exp
	* gdb.base/shreloc.exp
	* gdb.base/sigaltstack.exp
	* gdb.base/sigbpt.exp
	* gdb.base/siginfo-addr.exp
	* gdb.base/siginfo-obj.exp
	* gdb.base/siginfo-thread.exp
	* gdb.base/signest.exp
	* gdb.base/signull.exp
	* gdb.base/sigrepeat.exp
	* gdb.base/skip.exp
	* gdb.base/so-impl-ld.exp
	* gdb.base/solib-corrupted.exp
	* gdb.base/solib-disc.exp
	* gdb.base/solib-display.exp
	* gdb.base/solib-overlap.exp
	* gdb.base/solib-search.exp
	* gdb.base/solib-symbol.exp
	* gdb.base/source-execution.exp
	* gdb.base/sss-bp-on-user-bp-2.exp
	* gdb.base/sss-bp-on-user-bp.exp
	* gdb.base/stack-checking.exp
	* gdb.base/stale-infcall.exp
	* gdb.base/step-break.exp
	* gdb.base/step-line.exp
	* gdb.base/step-over-exit.exp
	* gdb.base/step-test.exp
	* gdb.base/structs.exp
	* gdb.base/sym-file.exp
	* gdb.base/symtab-search-order.exp
	* gdb.base/term.exp
	* gdb.base/type-opaque.exp
	* gdb.base/unload.exp
	* gdb.base/until-nodebug.exp
	* gdb.base/until.exp
	* gdb.base/unwindonsignal.exp
	* gdb.base/watch-cond.exp
	* gdb.base/watch-non-mem.exp
	* gdb.base/watch_thread_num.exp
	* gdb.base/watchpoint-reuse-slot.exp
	* gdb.base/watchpoint-solib.exp
	* gdb.base/watchpoint.exp
	* gdb.btrace/dlopen.exp
	* gdb.cell/arch.exp
	* gdb.cell/break.exp
	* gdb.cell/bt.exp
	* gdb.cell/core.exp
	* gdb.cell/data.exp
	* gdb.cell/dwarfaddr.exp
	* gdb.cell/ea-cache.exp
	* gdb.cell/ea-standalone.exp
	* gdb.cell/ea-test.exp
	* gdb.cell/f-regs.exp
	* gdb.cell/fork.exp
	* gdb.cell/gcore.exp
	* gdb.cell/mem-access.exp
	* gdb.cell/ptype.exp
	* gdb.cell/registers.exp
	* gdb.cell/sizeof.exp
	* gdb.cell/solib-symbol.exp
	* gdb.cell/solib.exp
	* gdb.compile/compile-tls.exp
	* gdb.cp/exception.exp
	* gdb.cp/gdb2495.exp
	* gdb.cp/local.exp
	* gdb.cp/mb-inline.exp
	* gdb.cp/mb-templates.exp
	* gdb.cp/pr10687.exp
	* gdb.cp/pr9167.exp
	* gdb.cp/scope-err.exp
	* gdb.cp/templates.exp
	* gdb.cp/virtfunc.exp
	* gdb.dwarf2/dw2-dir-file-name.exp
	* gdb.dwarf2/dw2-single-line-discriminators.exp
	* gdb.fortran/complex.exp
	* gdb.fortran/library-module.exp
	* gdb.guile/guile.exp
	* gdb.guile/scm-cmd.exp
	* gdb.guile/scm-frame-inline.exp
	* gdb.guile/scm-objfile.exp
	* gdb.guile/scm-pretty-print.exp
	* gdb.guile/scm-symbol.exp
	* gdb.guile/scm-type.exp
	* gdb.guile/scm-value.exp
	* gdb.linespec/keywords.exp
	* gdb.linespec/ls-errs.exp
	* gdb.linespec/macro-relative.exp
	* gdb.linespec/thread.exp
	* gdb.mi/mi-breakpoint-changed.exp
	* gdb.mi/mi-dprintf-pending.exp
	* gdb.mi/mi-fullname-deleted.exp
	* gdb.mi/mi-logging.exp
	* gdb.mi/mi-pending.exp
	* gdb.mi/mi-solib.exp
	* gdb.mi/new-ui-mi-sync.exp
	* gdb.mi/user-selected-context-sync.exp
	* gdb.multi/dummy-frame-restore.exp
	* gdb.multi/multi-arch-exec.exp
	* gdb.multi/remove-inferiors.exp
	* gdb.multi/watchpoint-multi-exit.exp
	* gdb.opt/solib-intra-step.exp
	* gdb.perf/backtrace.exp
	* gdb.perf/single-step.exp
	* gdb.perf/skip-command.exp
	* gdb.perf/skip-prologue.exp
	* gdb.perf/solib.exp
	* gdb.python/lib-types.exp
	* gdb.python/py-as-string.exp
	* gdb.python/py-bad-printers.exp
	* gdb.python/py-block.exp
	* gdb.python/py-breakpoint.exp
	* gdb.python/py-cmd.exp
	* gdb.python/py-events.exp
	* gdb.python/py-evthreads.exp
	* gdb.python/py-finish-breakpoint.exp
	* gdb.python/py-finish-breakpoint2.exp
	* gdb.python/py-frame-inline.exp
	* gdb.python/py-frame.exp
	* gdb.python/py-inferior.exp
	* gdb.python/py-infthread.exp
	* gdb.python/py-mi.exp
	* gdb.python/py-objfile.exp
	* gdb.python/py-pp-maint.exp
	* gdb.python/py-pp-registration.exp
	* gdb.python/py-prettyprint.exp
	* gdb.python/py-recurse-unwind.exp
	* gdb.python/py-shared.exp
	* gdb.python/py-symbol.exp
	* gdb.python/py-symtab.exp
	* gdb.python/py-template.exp
	* gdb.python/py-type.exp
	* gdb.python/py-unwind-maint.exp
	* gdb.python/py-unwind.exp
	* gdb.python/py-value.exp
	* gdb.python/python.exp
	* gdb.reverse/finish-reverse-bkpt.exp
	* gdb.reverse/insn-reverse.exp
	* gdb.reverse/next-reverse-bkpt-over-sr.exp
	* gdb.reverse/solib-precsave.exp
	* gdb.reverse/solib-reverse.exp
	* gdb.stabs/gdb11479.exp
	* gdb.stabs/weird.exp
	* gdb.threads/fork-child-threads.exp
	* gdb.threads/fork-plus-threads.exp
	* gdb.threads/fork-thread-pending.exp
	* gdb.threads/forking-threads-plus-breakpoint.exp
	* gdb.threads/hand-call-in-threads.exp
	* gdb.threads/interrupted-hand-call.exp
	* gdb.threads/linux-dp.exp
	* gdb.threads/local-watch-wrong-thread.exp
	* gdb.threads/next-while-other-thread-longjmps.exp
	* gdb.threads/non-ldr-exit.exp
	* gdb.threads/pending-step.exp
	* gdb.threads/print-threads.exp
	* gdb.threads/process-dies-while-detaching.exp
	* gdb.threads/process-dies-while-handling-bp.exp
	* gdb.threads/pthreads.exp
	* gdb.threads/queue-signal.exp
	* gdb.threads/reconnect-signal.exp
	* gdb.threads/signal-command-handle-nopass.exp
	* gdb.threads/signal-command-multiple-signals-pending.exp
	* gdb.threads/signal-delivered-right-thread.exp
	* gdb.threads/signal-sigtrap.exp
	* gdb.threads/sigthread.exp
	* gdb.threads/staticthreads.exp
	* gdb.threads/stepi-random-signal.exp
	* gdb.threads/thread-unwindonsignal.exp
	* gdb.threads/thread_check.exp
	* gdb.threads/thread_events.exp
	* gdb.threads/tid-reuse.exp
	* gdb.threads/tls-nodebug.exp
	* gdb.threads/tls-shared.exp
	* gdb.threads/tls-so_extern.exp
	* gdb.threads/tls.exp
	* gdb.threads/wp-replication.exp
	* gdb.trace/actions-changed.exp
	* gdb.trace/actions.exp
	* gdb.trace/backtrace.exp
	* gdb.trace/change-loc.exp
	* gdb.trace/collection.exp
	* gdb.trace/deltrace.exp
	* gdb.trace/disconnected-tracing.exp
	* gdb.trace/entry-values.exp
	* gdb.trace/ftrace-lock.exp
	* gdb.trace/ftrace.exp
	* gdb.trace/infotrace.exp
	* gdb.trace/mi-trace-frame-collected.exp
	* gdb.trace/mi-trace-unavailable.exp
	* gdb.trace/mi-traceframe-changed.exp
	* gdb.trace/mi-tracepoint-changed.exp
	* gdb.trace/mi-tsv-changed.exp
	* gdb.trace/no-attach-trace.exp
	* gdb.trace/packetlen.exp
	* gdb.trace/passc-dyn.exp
	* gdb.trace/passcount.exp
	* gdb.trace/pending.exp
	* gdb.trace/pr16508.exp
	* gdb.trace/qtro.exp
	* gdb.trace/range-stepping.exp
	* gdb.trace/read-memory.exp
	* gdb.trace/report.exp
	* gdb.trace/save-trace.exp
	* gdb.trace/signal.exp
	* gdb.trace/stap-trace.exp
	* gdb.trace/status-stop.exp
	* gdb.trace/strace.exp
	* gdb.trace/tfile.exp
	* gdb.trace/tfind.exp
	* gdb.trace/trace-break.exp
	* gdb.trace/trace-condition.exp
	* gdb.trace/trace-enable-disable.exp
	* gdb.trace/trace-mt.exp
	* gdb.trace/tracecmd.exp
	* gdb.trace/tracefile-pseudo-reg.exp
	* gdb.trace/tspeed.exp
	* gdb.trace/tstatus.exp
	* gdb.trace/tsv.exp
	* gdb.trace/unavailable.exp
	* gdb.trace/while-dyn.exp
	* gdb.trace/while-stepping.exp
	* lib/gdb-guile.exp
	* lib/gdb.exp
	* lib/mi-support.exp
	* lib/pascal.exp
	* lib/perftest.exp
	* lib/prelink-support.exp
	* lib/selftest-support.exp
2016-12-01 14:40:05 -06:00
Simon Marchi ad02e4fe87 Makefiles: Disable suffix rules and implicit rules
Since we don't use suffix rules nor implicit rules in gdb, we can
disable them.  The advantage is a slightly faster make [1].

Here are some numbers about the speedup.  I ran this on my trusty old
Intel Q6600, so the time numbers are probably higher than what you'd get
on any recent hardware.  I ran "make" in the gdb/ directory of an
already built repository (configured with --enable-targets=all).  I
recorded the time of execution (average of 5).  I then ran "make -d" and
recorded the number of printed lines, which gives a rough idea of the
number of operations done.

I compared the following configurations, to see the impact of both the
empty .SUFFIXES target and the empty pattern rules, as well as running
"make -r", which can be considered the "ideal" case.

 A - baseline
 B - baseline + .SUFFIXES
 C - baseline + pattern rules
 D - baseline + .SUFFIXES + pattern rules
 E - baseline + make -r

 config | time (s) | "make -d"
 -----------------------------
    A   |   5.74   |  2396643
    B   |   1.19   |   298469
    C   |   2.81   |  1266573
    D   |   1.13   |   245489
    E   |   1.01   |   163914

We can see that the empty .SUFFIXES target has a bigger impact than the
empty pattern rules, but still it doesn't hurt to disable the implicit
pattern rules as well.

There are still some mentions of implicit rules I can't get rid of in
the "make -d" output.  For example, it's trying to build .c files from
.w files:

  Looking for an implicit rule for '/home/simark/src/binutils-gdb/gdb/infrun.c'.
  Trying pattern rule with stem 'infrun'.
  Trying implicit prerequisite '/home/simark/src/binutils-gdb/gdb/infrun.w'.

and trying to build Makefile.in from a bunch of extensions:

  Looking for an implicit rule for 'Makefile.in'.
  Trying pattern rule with stem 'Makefile.in'.
  Trying implicit prerequisite 'Makefile.in.o'.
  Trying pattern rule with stem 'Makefile.in'.
  Trying implicit prerequisite 'Makefile.in.c'.
  Trying pattern rule with stem 'Makefile.in'.
  Trying implicit prerequisite 'Makefile.in.cc'.
  ... many more ...

If somebody knows how to disable them, we can do it, but at this point
the returns are minimal, so it is not that important.

I verified that both in-tree and out-of-tree builds work.

[1] Switching from explicit rules to pattern rules for files in
    subdirectories actually made it slower, so this is kind of a way to
    redeem myself.  But it the end it's faster than it was previously,
    so it was all worth it. :)

gdb/ChangeLog:

	* disable-implicit-rules.mk: New file.
	* Makefile.in: Include disable-implicit-rules.mk.
	* data-directory/Makefile.in: Likewise.
	* gnulib/Makefile.in: Likewise.

gdb/doc/ChangeLog:

	* Makefile.in: Likewise.

gdb/gdbserver/ChangeLog:

	* Makefile.in: Include disable-implicit-rules.mk.

gdb/testsuite/ChangeLog:

	* Makefile.in: Include disable-implicit-rules.mk.
2016-11-30 16:23:59 -05:00
Andreas Arnez 22347e554c Fix copy_bitwise()
When the user writes or reads a variable whose location is described
with DWARF pieces (DW_OP_piece or DW_OP_bit_piece), GDB's helper
function copy_bitwise is invoked for each piece.  The implementation of
this function has a bug that may result in a corrupted copy, depending
on alignment and bit size.  (Full-byte copies are not affected.)

This rewrites copy_bitwise, replacing its algorithm by a fixed version,
and adding an appropriate test case.  Without the fix the new test case
fails, e.g.:

  print def_t
  $2 = {a = 0, b = 4177919}
  (gdb) FAIL: gdb.dwarf2/nonvar-access.exp: print def_t

Written in binary, the wrong result above looks like this:

  01111111011111111111111

Which means that two zero bits have sneaked into the copy of the
original all-one bit pattern.  The test uses this simple all-one value
in order to avoid another GDB bug that causes the DWARF piece of a
DW_OP_stack_value to be taken from the wrong end on big-endian
architectures.

gdb/ChangeLog:

	* dwarf2loc.c (extract_bits_primitive): Remove.
	(extract_bits): Remove.
	(copy_bitwise): Rewrite.  Fixes a possible corruption that may
	occur for non-byte-aligned copies.

gdb/testsuite/ChangeLog:

	* gdb.dwarf2/nonvar-access.exp: Add a test for accessing
	non-byte-aligned bit fields.
2016-11-24 17:48:03 +01:00
Andreas Arnez da5b30da2d Fix PR12616 - gdb does not implement DW_AT_data_bit_offset
The DW_AT_data_bit_offset attribute was introduced by DWARF V4 and
allows specifying the offset of a data member within its containing
entity.  But although the new attribute was intended to replace
DW_AT_bit_offset for this purpose, GDB ignores it, and thus GCC still
emits DW_AT_bit_offset instead.  See also
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71669.

This change fixes GDB's lack of support for DW_AT_data_bit_offset and
adds an appropriate test case.

gdb/ChangeLog:

	PR gdb/12616
	* dwarf2read.c (dwarf2_add_field): Handle the DWARF V4 attribute
	DW_AT_data_bit_offset.

gdb/testsuite/ChangeLog:

	PR gdb/12616
	* gdb.dwarf2/nonvar-access.exp: New testcase.  Check that GDB
	respects the DW_AT_data_bit_offset attribute.
2016-11-24 17:48:03 +01:00
Simon Marchi b593ecca85 Makefiles: Flatten and sort file lists
I find the big file lists in the Makefiles a bit ugly and not very
practical.  Since there are multiple filenames on each line (as much as
fits in 80 columns), it's not easy to add, remove or change a name in
the middle.  As a result, we have a mix of long and short lines in no
particular order (ALL_TARGET_OBS is a good example).

I therefore suggest flattening the lists (one name per line) and keeping
them in alphabetical order.  The diffs will be much clearer and merge
conflicts will be easier to resolve.

A nice (IMO) side-effect I observed is that the files are compiled
alphabetically by make, so it gives a rough idea of the progress of the
build.

I added a comment in gdb/Makefile.in to mention to keep the file lists
ordered, and gave the general guidelines on what order to respect.  I
added a comment in other Makefiles which refers to gdb/Makefile.in, to
avoid duplication.

Running the patch through the buildbot found that gdb.base/default.exp
started to fail.  The languages in the error message shown when typing
"set language" have changed order.  We could probably improve gdb so
that it prints them in a stable order, regardless of the order of the
object list passed to the linked, but just fixing the test is easier for
now.

New in v2:

 - Change ordering style, directories go at the end.
 - Cleanup gdbserver's and data-directory's Makefile as well.
 - Add comments at top of Makefiles about the ordering.
 - Remove wrong trailing backslahes.
 - Fix test gdb.base/default.exp.

gdb/ChangeLog:

	* Makefile.in: Add comment about file lists ordering.
	(SUBDIR_CLI_OBS, SUBDIR_CLI_SRCS, SUBDIR_MI_OBS, SUBDIR_MI_SRCS,
	SUBDIR_TUI_OBS, SUBDIR_TUI_SRCS, SUBDIR_GCC_COMPILE_OBS,
	SUBDIR_GCC_COMPILE_SRCS, SUBDIR_GUILE_OBS, SUBDIR_GUILE_SRCS,
	SUBDIR_PYTHON_OBS, SUBDIR_PYTHON_SRCS, SUBDIR_GDBTK_OBS,
	SUBDIR_GDBTK_SRCS, XMLFILES, REMOTE_OBS, ALL_64_TARGET_OBS,
	ALL_TARGET_OBS, SFILES, HFILES_NO_SRCDIR, HFILES_WITH_SRCDIR,
	COMMON_OBS, YYFILES, YYOBJ, generated_files, ALLDEPFILES):
	Flatten list and order alphabetically.
	* data-directory/Makefile.in: Add comment about file lists
	ordering.
	(GEN_SYSCALLS_FILES, PYTHON_FILE_LIST): Flatten list and order
	alphabetically.

gdb/gdbserver/ChangeLog:

	* Makefile.in (SFILES, OBS): Flatten list and order
	alphabetically.

gdb/testsuite/ChangeLog:

	* gdb.base/default.exp: Fix output of "set language".
2016-11-23 09:45:22 -05:00
Simon Marchi 3b165252e8 Remove code that checks for GNU/non-GNU make
Since GNU make is now required to build GDB, we can remove everything
that checks whether the current make implemention is the GNU one or
not.  I simply removed the @GMAKE_TRUE@ prefixes and removed the whole
lines that were prefixed with @GMAKE_FALSE@.

I removed the code in the configure scripts that set those variables.

I also removed the following bits from the configure scripts:

  AC_CHECK_PROGS(MAKE, make): GNU make already defines a MAKE variable
    internally to be used when invoking Makefiles recursively.  I don't see
    this variable being used anywhere else (in scripts for example), so I
    think it's safe for removal.

  AC_PROG_MAKE_SET: This macro defines a SET_MAKE output variable, which
    is meant to be used in Makefiles to define the MAKE variable when
    using an implementation of make that doesn't already define it.
    Since we are now requiring GNU make, we don't need it anymore.
    Plus, I don't see SET_MAKE being used anywhere, so I don't think it
    was actually doing anything...

gdb/ChangeLog:

	* 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.

gdb/gdbserver/ChangeLog:

	* 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.

gdb/testsuite/ChangeLog:

	* 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-11-17 12:00:10 -05:00
Kevin Buettner 1a2f3d7ff1 Extend test gdb.python/py-recurse-unwind.exp
This patch modifies the unwinder (sniffer) defined in
py-recurse-unwind.py so that, depending upon the value of one of its
class variables, it will take different paths through the code,
testing different functionality.

The original test attempted to obtain the value of an undefined
symbol.

This somewhat expanded test checks to see if 'pc' can be read via
gdb.PendingFrame.read_register() and also via gdb.parse_and_eval().

gdb/testsuite/ChangeLog:

	* gdb.python/py-recurse-unwind.c (main): Add loop.
	* gdb.python/py-recurse-unwind.py (TestUnwinder): Add calls
	to read_register() and gdb.parse_and_eval().  Make each code
	call a separate case that can be individually tested.
	* gdb.python/py-recurse-unwind.exp (cont_and_backtrace): New
	proc. Call cont_and_backtrace for each of the code paths that
	we want to test in the unwinder.
2016-11-16 11:37:11 -07:00
Andreas Arnez b7f38fdae7 bitfield-parent-optimized-out: Fix struct definition
The "struct S" type in bitfield-parent-optimized-out.exp is declared to
have a size of 4 bytes but to hold two 4-byte members: an int-based
bitfield and a 4-byte int.  Also, both members have the same
data_member_location 2, causing them to overlap and to reach 2 bytes
beyond the structure's boundary.

This is fixed by increasing the structure size to 8 and setting the
first and second member's data_member_location to 0 and 4, respectively.

gdb/testsuite/ChangeLog:

	* gdb.dwarf2/bitfield-parent-optimized-out.exp: Fix DWARF code for
	the definition of struct S.
2016-11-15 20:52:03 +01:00
Catherine Moore 1f8db34304 Identify verilog dump tests as such.
A couple of the verilog dump tests were marked as ihex tests.  This
	patch identifies the tests as verilog format dump tests.
2016-11-11 07:42:37 -08:00
Pedro Alves fad0c9fb7d Further cleanup/modernization of gdb.base/commands.exp
- Use multi_line for matching multi-line GDB output.

 - Add a multi_line_input variant of multi_line to build GDB input and
   use it throughout.

   (The two changes above make the tests much more readable, IMO.)

 - Add a new valnum_re global to get rid of the multiple "\\\$\[0-9\]*".

 - Remove gdb_stop_suppressing_tests uses.

 - tighten a few regexps.

 - Replace send_gdb/gdb_expect with gdb_test_multiple and simplify,
   making pass/fail messages the same.

gdb/ChangeLog:
2016-11-09  Pedro Alves  <palves@redhat.com>

	* gdb.base/commands.exp (runto_or_return): New procedure.
	(gdbvar_simple_if_test, gdbvar_simple_while_test)
	(gdbvar_complex_if_while_test, progvar_simple_if_test)
	(progvar_simple_while_test, progvar_complex_if_while_test)
	(if_while_breakpoint_command_test)
	(infrun_breakpoint_command_test, breakpoint_command_test)
	(user_defined_command_test, watchpoint_command_test)
	(test_command_prompt_position, redefine_hook_test)
	(stray_arg0_test, error_clears_commands_left, redefine_hook_test)
	(redefine_backtrace_test): Use runto_or_return, $valnum_re,
	multi_line_input and multi_line.  Remove gdb_expect and
	gdb_stop_suppressing_tests uses.
	* lib/gdb.exp (valnum_re): New global.
	* lib/gdb.exp (valnum_re): New global.
	(multi_line_input): New procedure.
2016-11-09 18:48:25 +00:00
Simon Marchi 8354c62cd1 Make gdb.mi/user-selected-context-sync.exp use proc_with_prefix
Pedro's patch provides a cleaner way to prefix tests with the proc name,
so let's use that.

gdb/testsuite/ChangeLog:

	* gdb.mi/user-selected-context-sync.exp (with_test_prefix_procname):
	Remove.
	(test_setup): Define with proc_with_prefix.
	(test_cli_inferior): Likewise.
	(test_cli_thread): Likewise.
	(test_cli_frame): Likewise.
	(test_cli_select_frame): Likewise.
	(test_cli_up_down): Likewise.
	(test_mi_thread_select): Likewise.
	(test_mi_stack_select_frame): Likewise.
	(test_cli_in_mi_inferior): Likewise.
	(test_cli_in_mi_thread): Likewise.
	(test_cli_in_mi_frame): Likewise.
	(top level): Do not use with_test_prefix_procname.
2016-11-09 10:55:14 -05:00
Pedro Alves 64f367a201 gdb/testsuite: Introduce "proc_with_prefix"
While adding new tests to gdb.base/commands.exp, I noticed that the
file includes a bunch of individual testcases split into their own
procedures, and that none have ever been adjusted to use
with_test_prefix.  Instead, each gdb_test/gdb_test_multiple/etc
invocation takes care of including the procedure name in the test
message, in order to make sure test messages are unique.

Simon convinced me that using the procedure name as prefix is not that
bad of an idea:
  https://sourceware.org/ml/gdb-patches/2016-10/msg00020.html

This commit adds an IMO simpler alternative to
with_test_prefix_procname added by that patch -- a new
"proc_with_prefix" convenience proc that is meant to be used in place
of "proc", and then uses it in commands.exp.  Procedures defined with
this automatically run their bodies under with_test_prefix $proc_name.

Here's a sample of the resulting gdb.sum diff:

 [...]
 -PASS: gdb.base/commands.exp: break factorial #3
 -PASS: gdb.base/commands.exp: set value to 5 in test_command_prompt_position
 -PASS: gdb.base/commands.exp: if test in test_command_prompt_position
 -PASS: gdb.base/commands.exp: > OK in test_command_prompt_position
 +PASS: gdb.base/commands.exp: test_command_prompt_position: break factorial
 +PASS: gdb.base/commands.exp: test_command_prompt_position: set value to 5
 +PASS: gdb.base/commands.exp: test_command_prompt_position: if test
 +PASS: gdb.base/commands.exp: test_command_prompt_position: > OK
 [...]

gdb/testsuite/ChangeLog:
2016-11-09  Pedro Alves  <palves@redhat.com>

	* gdb.base/commands.exp (gdbvar_simple_if_test)
	(gdbvar_simple_while_test, gdbvar_complex_if_while_test)
	(progvar_simple_if_test, progvar_simple_while_test)
	(progvar_complex_if_while_test, if_while_breakpoint_command_test)
	(infrun_breakpoint_command_test, breakpoint_command_test)
	(user_defined_command_test, watchpoint_command_test)
	(test_command_prompt_position, deprecated_command_test)
	(bp_deleted_in_command, temporary_breakpoint_commands)
	(stray_arg0_test, source_file_with_indented_comment)
	(recursive_source_test, if_commands_test)
	(error_clears_commands_left, redefine_hook_test)
	(redefine_backtrace_test): Use proc_with_prefix.
	* lib/gdb.exp (proc_with_prefix): New proc.
2016-11-09 15:12:11 +00:00
Pedro Alves 2806dc7eec Fix formattting of gdb/ChangeLog and gdb/testsuite/ChangeLog enties
Leading tab/spaces.  Missing periods.  Duplicate date.
2016-11-09 15:09:31 +00:00
Andreas Arnez 0bb65f1e7c tui-disasm: Fix window content buffer overrun
A user reported a GDB crash with TUI when trying to debug a function
with a long demangled C++ method name.  It turned out that the logic for
displaying the TUI disassembly window has a bug that can cause a buffer
overrun, possibly overwriting GDB-internal data structures.  In
particular, the logic performs an unguarded strcpy.

Another (harmless) bug in tui_alloc_source_buffer causes the buffer to
be two lines longer than needed.  This may have made the crash appear
less frequently.

gdb/ChangeLog:

	* tui/tui-disasm.c (tui_set_disassem_content): Fix line buffer
	overrun due to unchecked strcpy.

gdb/testsuite/ChangeLog:

	* gdb.base/tui-layout.c: New file.
	* gdb.base/tui-layout.exp: Use tui-layout.c, to ensure that the
	disassembly window contains very long lines.
2016-11-09 13:02:12 +01:00
Tom Tromey 7353f2470c Fix py-value.exp failure on Python 3
I happened to notice that one test in py-value.exp did not work
properly with Python 3.  This patch fixes the problem.

2016-11-08  Tom Tromey  <tom@tromey.com>

	* gdb.python/py-value.exp (test_value_creation): Make "long" test
	depend on Python 2.
2016-11-08 09:10:57 -07:00
Tom Tromey 30a7bb833c Fix some error-handling bugs in python frame filters
While writing a Python frame filter, I found a few bugs in the current
frame filter code.  In particular:

* One spot converts a Python long to a CORE_ADDR using PyLong_AsLong.
  However, this can fail on overflow.  I changed this to use
  get_addr_from_python.

* Another spot is doing the same but with PyLong_AsUnsignedLongLong; I
  changed this as well just for consistency.

* Converting line numbers can print "-1" if conversion from long
  fails.  This isn't fatal but just a bit ugly.

I've included a test case for the first issue.  The line number one
didn't seem important enough to bother with.

2016-11-08  Tom Tromey  <tom@tromey.com>

	* python/py-framefilter.c (py_print_frame): Use
	get_addr_from_python.  Check for errors when getting line number.

2016-11-08  Tom Tromey  <tom@tromey.com>

	* gdb.python/py-framefilter.py (ElidingFrameDecorator.address):
	New method.
2016-11-08 09:10:57 -07:00
Manish Goregaokar cdf5a07c75 Add support for the sizeof function in Rust
2016-10-29  Manish Goregaokar  <manish@mozilla.com>

gdb/ChangeLog:
    * rust-exp.y: Parse `sizeof(exp)` as `UNOP_SIZEOF`

gdb/testsuite/ChangeLog:
    * gdb.rust/simple.exp: Add tests for `sizeof(expr)`
2016-11-03 15:45:14 -07:00
Manish Goregaokar 51a789c3bf
Fix handling of discriminantless univariant enums in Rust; fix bug with encoded enums
2016-10-27  Manish Goregaokar  <manish@mozilla.com>

gdb/ChangeLog:
    * rust-lang.c (rust_get_disr_info): Treat univariant enums
    without discriminants as encoded enums with a real field
    * rust-lang.c (rust_evaluate_subexp): Handle field access
    on encoded struct-like enums

gdb/testsuite/ChangeLog:
    * simple.rs: Add test for univariant enums without discriminants
    and for encoded struct-like enums
    * simple.exp: Add test expectations
2016-11-03 15:45:05 -07:00
Pedro Alves f610ab6d3c gdb/testsuite: Avoid a buffer overrun in `gdb.base/maint.exp'
Fixes:

 PASS: gdb.base/maint.exp: maint w/o args
 ERROR: internal buffer is full.
 UNRESOLVED: gdb.base/maint.exp: maint info line-table w/o a file name

The problem is just many symtabs and long line tables, enough to
overflow the expect buffer.  Fix this by matching input incrementally.

gdb/testsuite/ChangeLog:
2016-10-28  Pedro Alves  <palves@redhat.com>

	* gdb.base/maint.exp <maint info line-table w/o a file name>: Use
	gdb_test_multiple, tighten regexps and match symtabs and line
	tables incrementally.
2016-10-28 15:52:27 +01:00
Luis Machado b129b0cacd Make gdb.base/foll-exec.exp test pattern more general
Testing a powerpc toolchain running gdbserver on the other end i noticed a
failure in gdb.base/foll-exec.exp.  Turns out gdb is outputting a slightly
different pattern due to the presence of debug information.

--
foll-exec is about to execlp(execd-prog)...^M
Continuing.^M
process 21222 is executing new program: gdb.d/outputs/gdb.base/foll-exec/execd-prog^M
^M
Catchpoint 2 (exec'd gdb.d/outputs/gdb.base/foll-exec/execd-prog), _start () at ../sysdeps/powerpc/powerpc32/dl-start.S:32^M
--

Notice the presence of source file information.

Now, on my local machine, i get this:

--
foll-exec is about to execlp(execd-prog)...^M
Continuing.^M
process 9285 is executing new program: gdb/testsuite/outputs/gdb.base/foll-exec/execd-prog^M
^M
Catchpoint 2 (exec'd gdb/testsuite/outputs/gdb.base/foll-exec/execd-prog), 0x00007ffff7dd7cc0 in ?? () from /lib64/ld-linux-x86-64.so.2^M
--

So the output differs slightly and the testcase is actually expecting only
the second form with the "in" anchor.

This patch removes the "in" pattern and lets the test match both kinds of
output.

gdb/testsuite/ChangeLog:

2016-10-28  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.base/foll-exec.exp (do_exec_tests): Make test pattern more
	general.
2016-10-28 08:45:27 -05:00
Sandra Loosemore ecf45d2cc7 PR 20569, segv in follow_exec
The following testcases make GDB crash whenever an invalid sysroot is
provided, when GDB is unable to find a valid path to the symbol file:

 gdb.base/catch-syscall.exp
 gdb.base/execl-update-breakpoints.exp
 gdb.base/foll-exec-mode.exp
 gdb.base/foll-exec.exp
 gdb.base/foll-vfork.exp
 gdb.base/pie-execl.exp
 gdb.multi/bkpt-multi-exec.exp
 gdb.python/py-finish-breakpoint.exp
 gdb.threads/execl.exp
 gdb.threads/non-ldr-exc-1.exp
 gdb.threads/non-ldr-exc-2.exp
 gdb.threads/non-ldr-exc-3.exp
 gdb.threads/non-ldr-exc-4.exp
 gdb.threads/thread-execl.exp

The immediate cause of the segv is that follow_exec is passing a NULL
argument (the result of exec_file_find) to strlen.

However, the problem is deeper than that: follow_exec simply isn't
prepared for the case where sysroot translation fails to locate the
new executable.  Actually all callers of exec_file_find have bugs due
to confusion between host and target pathnames.  This commit attempts
to fix all that.

In terms of the testcases that were formerly segv'ing, GDB now prints
a warning but continues execution of the new program, so that the
tests now mostly FAIL instead.  You could argue the FAILs are due to a
legitimate problem with the test environment setting up the sysroot
translation incorrectly.

A new representative test is added which exercises the ne wwarning
code path even with native testing.

Tested on x86_64 Fedora 23, native and gdbserver.

gdb/ChangeLog:
2016-10-25  Sandra Loosemore  <sandra@codesourcery.com>
	    Luis Machado  <lgustavo@codesourcery.com>
	    Pedro Alves  <palves@redhat.com>

	PR gdb/20569
	* exceptions.c (exception_print_same): Moved here from exec.c.
	* exceptions.h (exception_print_same): Declare.
	* exec.h: Include "symfile-add-flags.h".
	(try_open_exec_file): New declaration.
	* exec.c (exception_print_same): Moved to exceptions.c.
	(try_open_exec_file): New function.
	(exec_file_locate_attach): Rename exec_file and full_exec_path
	variables to avoid confusion between target and host pathnames.
	Move pathname processing logic to exec_file_find.  Do not return
	early if pathname lookup fails; Call try_open_exec_file.
	* infrun.c (follow_exec): Split and rename execd_pathname variable
	to avoid confusion between target and host pathnames.  Warn if
	pathname lookup fails.  Pass target pathname to
	target_follow_exec, not hostpathname.  Call try_open_exec_file.
	* main.c (symbol_file_add_main_adapter): New function.
	(captured_main_1): Use it.
	* solib-svr4.c (open_symbol_file_object): Adjust to pass
	symfile_add_flags to symbol_file_add_main.
	* solib.c (exec_file_find): Incorporate fallback logic for relative
	pathnames formerly in exec_file_locate_attach.
	* symfile.c (symbol_file_add_main, symbol_file_add_main_1):
	Replace 'from_tty' parameter with a symfile_add_file.
	(symbol_file_command): Adjust to pass symfile_add_flags to
	symbol_file_add_main.
	* symfile.h (symbol_file_add_main): Replace 'from_tty' parameter
	with a symfile_add_file.

gdb/testsuite/ChangeLog:
2016-10-25  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.base/exec-invalid-sysroot.exp: New file.
2016-10-26 16:47:46 +01:00
Jan Kratochvil b8d38ee425 testsuite: Fix false FAIL for gdb.base/morestack.exp
Since
	[commit] [testsuite patch] Fix gcc_compiled for gcc 6 & 7
	https://sourceware.org/ml/gdb-patches/2016-10/msg00620.html

there has started running again
	 Running gdb/testsuite/gdb.base/morestack.exp ...
	+FAIL: gdb.base/morestack.exp: continue
	+PASS: gdb.base/morestack.exp: up 3000

but as you can see it FAILs now - on Fedora 24 x86_64 (although for example it
still PASSes on CentOS-7.2 x86_64).

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff787c7bb in malloc_consolidate (av=av@entry=0x7ffff7bbcb00 <main_arena>) at malloc.c:4181
4181		      unlink(av, nextchunk, bck, fwd);
(gdb) bt
[...]
[...]

This apparently is due to - man gcc - -fsplit-stack:
	When code compiled with -fsplit-stack calls code compiled without
	-fsplit-stack, there may not be much stack space available for the
	latter code to run.  If compiling all code, including library code,
	with -fsplit-stack is not an option, then the linker can fix up these
	calls so that the code compiled without -fsplit-stack always has
	a large stack.  Support for this is implemented in the gold linker in
	GNU binutils release 2.21 and later.

gdb/testsuite/ChangeLog
2016-10-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.base/morestack.exp: Try to build it using -fuse-ld=gold first.
2016-10-24 14:13:51 +02:00
Jan Kratochvil f90fd8c2f1 testsuite: Fix gcc_compiled for gcc 6 & 7
gdb/testsuite/ChangeLog
2016-10-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* lib/gdb.exp (get_compiler_info): Generalize gcc_compile regexp.
2016-10-20 21:58:54 +02:00
Maciej W. Rozycki 2d2476aac7 testsuite: Fix gdb.base/killed-outside.exp using irrelevant stale options
Fix a commit 4a556533cf ("Fix PR11094: JIT breakpoint is not properly
recreated on reruns") regression:

Running .../gdb/testsuite/gdb.base/killed-outside.exp ...
Executing on host: mips-mti-linux-gnu-gcc  -Wl,--no-as-needed  -c -g  -o .../gdb/testsuite/outputs/gdb.base/killed-outside/killed-outside0.o .../gdb/testsuite/gdb.base/killed-outside.c .../gdb/testsuite/outputs/gdb.base/jit-simple/jit-simple-jit.so    (timeout = 300)
spawn mips-mti-linux-gnu-gcc -Wl,--no-as-needed -c -g -o .../gdb/testsuite/outputs/gdb.base/killed-outside/killed-outside0.o .../gdb/testsuite/gdb.base/killed-outside.c .../gdb/testsuite/outputs/gdb.base/jit-simple/jit-simple-jit.so
mips-mti-linux-gnu-gcc: warning: .../gdb/testsuite/outputs/gdb.base/jit-simple/jit-simple-jit.so: linker input file unused because linking not done
output is:
mips-mti-linux-gnu-gcc: warning: .../gdb/testsuite/outputs/gdb.base/jit-simple/jit-simple-jit.so: linker input file unused because linking not done

gdb compile failed, mips-mti-linux-gnu-gcc: warning: .../gdb/testsuite/outputs/gdb.base/jit-simple/jit-simple-jit.so: linker input file unused because linking not done
UNTESTED: gdb.base/killed-outside.exp: failed to prepare

and adjust the call to `prepare_for_testing' by removing a reference to
`options', which is not set in this test case but a stale value is
carried over from `gdb.base/jit-simple.exp' previously executed in a
full test suite run.

	gdb/testsuite/
	* gdb.base/killed-outside.exp: Remove $options from a call to
	`prepare_for_testing'.
2016-10-19 18:23:09 +01:00
Simon Marchi e42b25a040 Fix duplicate test message in mi-trace-save.exp
gdb/testsuite/ChangeLog:

	* gdb.trace/mi-trace-save.exp (test_trace_save_wrong_num_args):
	Change test message.
2016-10-17 17:05:46 -04:00
Simon Marchi 3ccdb4324b Fix comment in mi-trace-save.exp
This fixes a comment I forgot to update in the previous patch.

gdb/testsuite/ChangeLog:

	* gdb.trace/mi-trace-save.exp (test_trace_save_wrong_num_args):
	Update comment.
2016-10-17 16:54:24 -04:00
Simon Marchi 5bad317030 Fix -trace-save crash when argument is missing
-trace-save doesn't check whether an argument is passed, leading to a
segfault if you pass nothing.

I added a small test, which only tests the error conditions of
-trace-save.

gdb/ChangeLog:

	* mi/mi-main.c (mi_cmd_trace_save): Check if argument is present
	before using it.

gdb/testsuite/ChangeLog:

	* gdb.trace/mi-trace-save.exp: New file.
2016-10-17 16:48:25 -04:00
Yao Qi 5ad9dba751 Share proc get_var_address
This patch moves proc get_var_address into lib/gdb.exp, and remove the
duplicate copy in gdb.base/*.exp files.

gdb/testsuite:

2016-10-13  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/code_elim.exp (get_var_address): Remove.
	* gdb.base/relocate.exp: Likewise.
	* gdb.base/shreloc.exp: Likewise.
	* lib/gdb.exp (get_var_address): New.
2016-10-13 16:08:17 +01:00
Yao Qi 62df7e210e Skip testing structures with floating points
This patch skips some tests related to floating point in structs.exp
if gdb_skip_float_test return false.

gdb/testsuite:

2016-10-13  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/structs.exp: Invoke gdb_skip_float_test, and do
	floating point tests if $skip_float_test is false.
2016-10-13 15:36:57 +01:00
Luis Machado 4dac951e11 Fixup gdb.python/py-value.exp for bare-metal aarch64-elf
I noticed that testing aarch64-elf gdb with a physical board
ran into issues with gdb.python/py-value.exp. Further investigation showed
that we were actually trying to dereference a NULL pointer (argv) when trying
to access argv[0].

Being bare-metal, argv is not guaranteed to be valid. So we need to make sure
argv is sane before accessing argv[0].

The following patch fixes up the test program to check for a NULL argv and also
improves the testcase a bit so it doesn't have to work with a hardcoded argc
value.

Regression-tested on x86-64 Ubuntu 16.04.

gdb/testsuite/ChangeLog:

2016-10-12  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.python/py-value.c (main): Check if argv is NULL before using it.
	* gdb.python/py-value.exp (test_value_in_inferior): Don't use hardcoded
	argc values.
	Add 1 to argc so we guarantee distinct initial/modified argc values.
2016-10-12 10:10:03 -05:00
Jan Kratochvil 8f1a8fc4df testsuite: Fix gdb.arch/powerpc-prologue.c compilation
gcc-6.2.1

gdb compile failed, gdb/testsuite/gdb.arch/powerpc-prologue.c: In function 'main':
gdb/testsuite/gdb.arch/powerpc-prologue.c:32:3: warning: implicit declaration of function 'optimized_1' [-Wimplicit-function-declaration]
   optimized_1 ();
   ^~~~~~~~~~~

gdb/testsuite/ChangeLog
2016-10-11  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.arch/powerpc-prologue.c (optimized_1): New declaration.
2016-10-11 19:09:05 +02:00
Jan Kratochvil 16c85b5d14 testsuite: Use standard_output_file
gdb/testsuite/ChangeLog
2016-10-11  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.arch/powerpc-prologue.exp: Use standard_output_file.
	* gdb.arch/ppc64-symtab-cordic.exp: Likewise.
	* gdb.arch/vsx-regs.exp: Likewise.
2016-10-11 16:43:58 +02:00
Yao Qi 1d0e042a83 Set regdir in tdesc-regs.exp or arm
0a69eedb (Clean up the XML files for ARM) moves arm-*.xml files to
arm/ directory, so need update gdb.xml/tdesc-regs.exp accordingly.

gdb/testsuite:

2016-10-07  Yao Qi  <yao.qi@linaro.org>

	* gdb.xml/tdesc-regs.exp: Set regdir to "arm/".
2016-10-07 10:29:13 +01:00
Markus Metzger 68dadef54c python: accept address and explicit locations in gdb.decode_line
The gdb.decode_line python function is documented to support the same location
expressions as the "break" command.  It currently expects a linespec location.

Instead of creating a linespec location directly, create the location via
string_to_event_location_basic.
2016-10-07 09:02:56 +02:00
Doug Evans 33fa2c6e1b Fix gdb.Value->python conversion for large unsigned ints.
gdb/ChangeLog:

	* python/py-value.c (valpy_long): Handle unsigned values.

gdb/testsuite/ChangeLog:

	* gdb.python/py-value.exp (test_value_creation): Add test for large
	unsigned 64-bit value.
2016-10-06 10:41:27 -07:00
Tom Tromey 9c37b5aed9 Remove Java support
This patch removes the Java support from gdb.  gcj has not seen much
development or use for years now, and was recently removed from GCC.
This patch changes gdb to follow; in the unlikely event that there are
still users using gcj, they can continue to use an older gdb to debug.
Or, they can debug in C++ mode.

Built and regtested on x86-64 Fedora 24.

2016-10-06  Tom Tromey  <tom@tromey.com>

	* MAINTAINERS: Remove Java test maintainer.
	* varobj.h (java_varobj_ops): Don't declare.
	* valprint.h (struct value_print_options)
	<pascal_static_field_print>: Update comment.
	* utils.c (producer_is_gcc): Remove java reference.
	* symtab.h (struct general_symbol_info): Remove java references.
	(SYMBOL_SEARCH_NAME): Likewise.
	* objfiles.c (allocate_objfile): Update comment.
	* linespec.c (find_linespec_symbols): Remove java references.
	* gnu-v3-abi.c (gnuv3_rtti_type, gnuv3_baseclass_offset): Remove
	java references.
	* gdbtypes.h (struct cplus_struct_type) <is_java>: Remove.
	(TYPE_CPLUS_REALLY_JAVA): Remove.
	* c-varobj.c (enum vsections): Update comment.
	* symtab.c (symbol_set_language, symbol_set_names)
	(symbol_natural_name, symbol_demangled_name)
	(demangle_for_lookup, symbol_matches_domain)
	(default_make_symbol_completion_list_break_on_1): Remove java
	references.
	(JAVA_PREFIX, JAVA_PREFIX_LEN): Remove.
	* psymtab.c (match_partial_symbol, psymtab_search_name)
	(lookup_partial_symbol): Remove java references.
	* dwarf2read.c (find_slot_in_mapped_hash): Remove java references.
	(add_partial_symbol, dwarf2_compute_name, dwarf2_physname)
	(dwarf2_add_member_fn, is_vtable_name, read_structure_type)
	(process_structure_scope, read_subroutine_type)
	(read_subrange_type, load_partial_dies)
	(new_symbol_full, determine_prefix, typename_concat)
	(dwarf2_name): Remove java references.
	(set_cu_language): Treat Java as C++.
	* c-typeprint.c (c_type_print_args): Remove java reference.
	* defs.h (enum language) <language_java>: Remove.
	* Makefile.in (SFILES, HFILES_NO_SRCDIR, COMMON_OBS, YYFILES)
	(YYOBJ, local-maintainer-clean): Don't mention java files.
	* jv-exp.y, jv-lang.c, jv-lang.h, jv-typeprint.c, jv-valprint.c,
	jv-varobj.c: Remove.

2016-10-06  Tom Tromey  <tom@tromey.com>

	* guile.texi (Types In Guile): Remove Java mentions.
	* python.texi (Types In Python): Remove Java mentions.
	* gdb.texinfo (Address Locations, Supported Languages)
	(Index Section Format): Remove Java mentions.

2016-10-06  Tom Tromey  <tom@tromey.com>

	* gdb.compile/compile.exp: Change java tests to rust.
	* gdb.base/setshow.exp: Change java tests to rust.
	* gdb.base/default.exp: Remove java from language list.
	* README (Examples): Update language example.
	* gdb.python/py-lookup-type.exp (test_lookup_type): Remove java
	test.
	* lib/gdb.exp (skip_java_tests): Remove.
	* lib/java.exp: Remove.
	* gdb.java: Remove.
2016-10-06 10:10:40 -06:00
Maciej W. Rozycki 78b86327b5 mips-tdep: Make FCRs always 32-bit
Fix a regression from commit f8b73d13b7 ("Target-described register
support for MIPS"),
<https://sourceware.org/ml/gdb-patches/2007-05/msg00340.html>,
<https://sourceware.org/ml/gdb-patches/2007-06/msg00256.html>, which
caused Floating Point Control Registers (FCRs) to be shown as 64-bit
with 64-bit targets.

This came from the legacy register format where all raw registers
matched the width of the architecture regardless of their actual size.
The correct size was then set in `mips_register_type' for cooked
registers presented to the user, which in the case of FCRs meant the
cooked size was always forced to 32 bits, reflecting their actual
hardware size, even though the raw format carried them in 64-bit
quantities on 64-bit targets.  The upper 32 bits carried in the raw FCR
format have always been don't-cares, not actually retrieved from
hardware and never written back.

With the introduction of XML register descriptions the layout of
previously defined raw registers has been preserved, so as to keep
existing register handling code unchanged and make it easier for GDB and
`gdbserver' to interact with each other whether neither, either or both
parties talking over RSP support XML register descriptions.  For the
XML-described case however `mips_register_type' is not used in raw to
cooked register conversion, so any special cases coded there are not
taken into account.

Instead a new function, `mips_pseudo_register_type', has been introduced
to handle size conversion, however lacking the special case for FCRs for
the Linux and the now defunct IRIX target.  The correct size has been
maintained for embedded targets however, due to the bundling of FCRs
with the embedded registers under the `rawnum >= MIPS_EMBED_FP0_REGNUM +
32' condition.

Add the missing case to `mips_pseudo_register_type' then, referring to
the FCR indices explicitly, and observing that between
`MIPS_EMBED_FP0_REGNUM + 32' and `MIPS_FIRST_EMBED_REGNUM' there is an
unused register slot whose contents are ignored so with the removal of
embedded FCRs from under that condition we don't have to care about it
and we can refer to the embedded registers starting from
MIPS_FIRST_EMBED_REGNUM instead.

Add a test case too so that we have means to check automatically that
the correct user-visible size of FCRs is maintained.

	gdb/
	* mips-tdep.c (mips_pseudo_register_type): Make FCRs always
	32-bit.

	gdb/testsuite/
	* gdb.arch/mips-fcr.exp: New test.
	* gdb.arch/mips-fcr.c: Source for the new test.
2016-10-06 16:56:57 +01:00
Maciej W. Rozycki 7470adbb87 testsuite: solib-disc: Use `standard_output_file'
Correct a commit 2151ccc56c ("Always organize test artifacts in a
directory hierarchy") regression causing:

Running .../gdb/testsuite/gdb.base/solib-disc.exp ...
gdb compile failed, Assembler messages:
Fatal error: can't create .../gdb/testsuite/gdb.base/so-disc-shr.c.o: No such file or directory

by using `standard_output_file' to construct output file names
throughout.

	gdb/testsuite/
	* gdb.base/solib-disc.exp: Use `standard_output_file'
	throughout.
2016-10-06 15:15:54 +01:00
Pedro Alves 4a556533cf Fix PR11094: JIT breakpoint is not properly recreated on reruns
Even though this was supposedly in the gdb 7.2 timeframe, the testcase
in PR11094 crashes current GDB with a segfault:

  Program received signal SIGSEGV, Segmentation fault.
  0x00000000005ee894 in event_location_to_string (location=0x0) at
  src/gdb/location.c:412
  412       if (EL_STRING (location) == NULL)
  (top-gdb) bt
  #0  0x00000000005ee894 in event_location_to_string (location=0x0) at
  src/gdb/location.c:412
  #1  0x000000000057411a in print_breakpoint_location (b=0x18288e0, loc=0x0) at
  src/gdb/breakpoint.c:6201
  #2  0x000000000057483f in print_one_breakpoint_location (b=0x18288e0,
  loc=0x182cf10, loc_number=0, last_loc=0x7fffffffd258, allflag=1)
      at src/gdb/breakpoint.c:6473
  #3  0x00000000005751e1 in print_one_breakpoint (b=0x18288e0,
  last_loc=0x7fffffffd258, allflag=1) at
  src/gdb/breakpoint.c:6707
  #4  0x000000000057589c in breakpoint_1 (args=0x0, allflag=1, filter=0x0) at
  src/gdb/breakpoint.c:6947
  #5  0x0000000000575aa8 in maintenance_info_breakpoints (args=0x0, from_tty=0)
  at src/gdb/breakpoint.c:7026
  [...]

This is GDB trying to print the location spec of the JIT event
breakpoint, but that's an internal breakpoint without one.

If I add a NULL check, then we see that the JIT breakpoint is now
pending (because its location has shlib_disabled set):

  (gdb) maint info breakpoints
  Num     Type           Disp Enb Address            What
  [...]
  -8      jit events     keep y   <PENDING>           inf 1
  [...]

But that's incorrect.  GDB should have managed to recreate the JIT
breakpoint's location for the second run.  So the problem is
elsewhere.

The problem is that if the JIT loads at the same address on the second
run, we never recreate the JIT breakpoint, because we hit this early
return:

  static int
  jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
				  struct jit_program_space_data *ps_data)
  {
    [...]
    if (ps_data->cached_code_address == addr)
      return 0;

    [...]
      delete_breakpoint (ps_data->jit_breakpoint);
    [...]
    ps_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr);

Fix this by deleting the breakpoint and discarding the cached code
address when the objfile where the previous JIT breakpoint was found
is deleted/unloaded in the first place.

The test that was originally added for PR11094 doesn't trip on this
because:

  #1 - It doesn't test the case of the JIT descriptor's address _not_
       changing between reruns.

  #2 - And then it doesn't do "maint info breakpoints", or really
       anything with the JIT at all.

  #3 - and even then, to trigger the problem the JIT descriptor needs
       to be in a separate library, while the current test puts it in
       the main program.

The patch extends the test to cover all combinations of these
scenarios.

gdb/ChangeLog:
2016-10-06  Pedro Alves  <palves@redhat.com>

	* jit.c (free_objfile_data): Delete the JIT breakpoint and clear
	the cached code address.

gdb/testsuite/ChangeLog:
2016-10-06  Pedro Alves  <palves@redhat.com>

	* gdb.base/jit-simple-dl.c: New file.
	* gdb.base/jit-simple-jit.c: New file, factored out from ...
	* gdb.base/jit-simple.c: ... this.
	* gdb.base/jit-simple.exp (jit_run): Delete.
	(build_jit): New proc.
	(jit_test_reread): Recompile either the main program or the shared
	library, depending on what is being tested.  Skip changing address
	if caller wants to.  Compare before/after addresses.  If testing
	standalone, explicitly load the binary.  Test "maint info
	breakpoints".
	(top level): Add "standalone vs shared lib" and "change address"
	vs "same address" axes.
2016-10-06 12:53:52 +01:00
Pedro Alves 5a122fbc30 Fix a few gdb.base/jit-simple.exp problems
I noticed that we sometimes get this:

  (gdb) print &__jit_debug_descriptor
  $1 = (struct jit_descriptor *) 0x601040 <__jit_debug_descriptor>
  (gdb) PASS: gdb.base/jit-simple.exp: blah 1
  [...]
  (gdb) run
  [...]
  Starting program: build/gdb/testsuite/outputs/gdb.base/jit-simple/jit-simple
  Unsupported JIT protocol version 4 in descriptor (expected 1)

  Breakpoint 2, main () at src/gdb/testsuite/gdb.base/jit-simple.c:36
  36        return 0;
  (gdb) print &__jit_debug_descriptor
  $2 = (struct jit_descriptor *) 0x601040 <__jit_debug_descriptor>
  (gdb) PASS: gdb.base/jit-simple.exp: blah 1

All tests PASSed, but note the "Unsupported JIT protocol version 4"
message.

Also notice that "__jit_debug_descriptor" has the same address before
and after the rerun, while the test is built in a way that should make
that address change between runs.

The test doesn't catch any of this because it doesn't compare
before/after addresses.

And then notice the "blah 1" test messages.  "blah" is clearly a WIP
message, but it should be at least "blah 2" the second time.  :-)

The reason this sometimes happens is that the test recompiles the
program and expects gdb to reload it automaticallyt on "run".  However,
if the original program and the new recompilation happen to be in the
same second, then gdb does not realize that the binary needs to be
reloaded.  (This is an old problem out of scope of this series.)  If
that happens, then GDB ends up using the wrong symbols for the program
that it spawns, reads the JIT descriptor out of the wrong address,
finds garbage, and prints that "unsupported version" notice.

Fix that in the same way gdb.base/reread.exp handles it -- by sleeping
one second before recompiling.

gdb/testsuite/ChangeLog:
2016-10-06  Pedro Alves  <palves@redhat.com>

	* gdb.base/jit-simple.exp (top level) Delete get_compiler_info
	call.
	(jit_run): Delete.
	(jit_test_reread): Use with_test_prefix.  Reload the main binary
	explicitly.  Compare the before/after addresses of the JIT
	descriptor.
2016-10-06 12:53:51 +01:00
Doug Evans ee8da4b839 Make "end" field in feature specs required again.
Newer gdbservers may be talking to older gdbs,
and older gdbs will flag a missing "end" as an error.
So just make "end" required again, and for compatibility
change the default field type to "bool".

gdb/ChangeLog:
2016-10-06  Doug Evans  <dje@google.com>

	* features/aarch64-core.xml (cpsr_flags): Elide "type" and specify
	"end" in all fields.
	* features/aarch64.c: Regenerate.
	* features/i386/32bit-mpx.xml (_bndcfgu): Specify type of "preserved"
	and "enabled" fields. Correct size of "enabled" field.
	* features/i386/64bit-mpx.xml (_bndcfgu): Specify type of "preserved"
	and "enabled" fields.
	* features/i386/i386-avx-mpx-linux.c: Regenerate.
	* features/i386/i386-avx-mpx.c: Regenerate.
	* features/i386/i386-avx512-linux.c: Regenerate.
	* features/i386/i386-avx512.c: Regenerate.
	* features/i386/i386-mpx-linux.c: Regenerate.
	* features/i386/i386-mpx.c: Regenerate.
	* features/arc-arcompact.c: Regenerate.
	* features/arc-v2.c: Regenerate.
	* xml-tdesc.c (tdesc_start_field): Require "end" spec.  Single bit
	fields default to "bool" type.

	Revert 2016-03-15  Doug Evans  <dje@google.com>
	* features/i386/32bit-core.xml (i386_eflags): Remove "end" spec.
	* features/i386/32bit-sse.xml (i386_eflags): Ditto.
	* features/i386/64bit-core.xml (i386_eflags): Ditto.
	* features/i386/64bit-sse.xml (i386_eflags): Ditto.
	* features/i386/x32-core.xml (i386_eflags): Ditto.

gdb/doc/ChangeLog:
2016-10-06  Doug Evans  <dje@google.com>

	* gdb.texinfo (Target Description Format): Update docs on "end"
	field spec and field default type.

gdb/testsuite/ChangeLog:
2016-10-06  Doug Evans  <dje@google.com>

	* gdb.xml/extra-regs.xml: Update, end field now required, default type
	for single bitfields is bool.
	* gdb.xml/tdesc-regs.exp: Ditto.
2016-10-06 12:12:33 +01:00
Jan Kratochvil f389f6fef7 testsuite: Fix recent GCC FAIL: gdb.arch/i386-signal.exp
gcc-6.2.1-2.fc24.x86_64

(gdb) backtrace 10^M
(gdb) FAIL: gdb.arch/i386-signal.exp: backtrace 10

(gdb) disas/s
Dump of assembler code for function main:
.../gdb/testsuite/gdb.arch/i386-signal.c:
30      {
   0x000000000040057f <+0>:     push   %rbp
   0x0000000000400580 <+1>:     mov    %rsp,%rbp
31        setup ();
   0x0000000000400583 <+4>:     callq  0x400590 <setup>
=> 0x0000000000400588 <+9>:     mov    $0x0,%eax
32      }
   0x000000000040058d <+14>:    pop    %rbp
   0x000000000040058e <+15>:    retq
End of assembler dump.

The .exp patch is an obvious typo fix I think.  The regex was written to
accept "ADDR in main" and I find it OK as checking .debug_line validity is not
the purpose of this testfile.

gcc-4.8.5-11.el7.x86_64 did not put the 'mov $0x0,%eax' instruction there at
all so there was no problem with .debug_line.

gdb/testsuite/ChangeLog
2016-10-05  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.arch/i386-signal.exp (backtrace 10): Fix #2 typo.
2016-10-05 21:56:46 +02:00
Yao Qi fdebf1a415 Skip complex types tests if gdb_skip_float_test
If the target doesn't support float, we don't run float complex types
tests.

gdb/testsuite:

2016-10-05  Yao Qi  <yao.qi@linaro.org>

	* lib/gdb.exp (support_complex_tests): Return zero if
	gdb_skip_float_test return true.
2016-10-05 17:04:31 +01:00
Antoine Tremblay 9c36d9544f Add test for user context selection sync
This patch adds a test to verify that events are sent properly to all
UIs when the user selection context (inferior, thread, frame) changes.

The goal of the C test file is to provide two threads that are stopped with the
same predictable backtrace (so that we can test frame switching).  The barrier
helps us know when the child threads are started.  Then, scheduler-locking is
used to bring each thread one by one to the position we expect them to be
during the test.

gdb/testsuite/ChangeLog:

YYYY-MM-DD  Antoine Tremblay  <antoine.tremblay@ericsson.com>
YYYY-MM-DD  Simon Marchi  <simon.marchi@ericsson.com>

	PR gdb/20487
	* gdb.mi/user-selected-context-sync.exp: New file.
	* gdb.mi/user-selected-context-sync.c: New file.
2016-10-03 16:56:24 -04:00
Antoine Tremblay 4034d0ff52 Emit inferior, thread and frame selection events to all UIs
With this patch, when an inferior, thread or frame is explicitly
selected by the user, notifications will appear on all CLI and MI UIs.
When a GDB console is integrated in a front-end, this allows the
front-end to follow a selection made by the user ont he CLI, and it
informs the user about selection changes made behind the scenes by the
front-end.

This patch addresses PR gdb/20487.

In order to communicate frame changes to the front-end, this patch adds
a new field to the =thread-selected event for the selected frame.  The
idea is that since inferior/thread/frame can be seen as a composition,
it makes sense to send them together in the same event.  The vision
would be to eventually send the inferior information as well, if we find
that it's needed, although the "=thread-selected" event would be
ill-named for that job.

Front-ends need to handle this new field if they want to follow the
frame selection changes that originate from the console.  The format of
the frame attribute is the same as what is found in the *stopped events.

Here's a detailed example for each command and the events they generate:

thread
------

1. CLI command:

     thread 1.3

   MI event:

     =thread-selected,id="3",frame={...}

2. MI command:

     -thread-select 3

   CLI event:

     [Switching to thread 1.3 ...]

3. MI command (CLI-in-MI):

     thread 1.3

   MI event/reply:

     &"thread 1.3\n"
     ~"#0  child_sub_function () ...
     =thread-selected,id="3",frame={level="0",...}
     ^done

frame
-----

1. CLI command:

     frame 1

   MI event:

     =thread-selected,id="3",frame={level="1",...}

2. MI command:

     -stack-select-frame 1

   CLI event:

     #1  0x00000000004007f0 in child_function...

3. MI command (CLI-in-MI):

     frame 1

   MI event/reply:

     &"frame 1\n"
     ~"#1  0x00000000004007f9 in ..."
     =thread-selected,id="3",frame={level="1"...}
     ^done

inferior
--------

Inferior selection events only go from the console to MI, since there's
no way to select the inferior in pure MI.

1. CLI command:

     inferior 2

   MI event:

     =thread-selected,id="3"

Note that if the user selects an inferior that is not started or exited,
the MI doesn't receive a notification.  Since there is no threads to
select, the =thread-selected event does not apply...

2. MI command (CLI-in-MI):

     inferior 2

   MI event/reply:

     &"inferior 2\n"
     ~"[Switching to inferior 2 ...]"
     =thread-selected,id="4",frame={level="0"...}
     ^done

Internal implementation detail: this patch makes it possible to suppress
notifications caused by a CLI command, like what is done in mi-interp.c.
This means that it's now possible to use the
add_com_suppress_notification function to register a command with some
event suppressed.  It is used to implement the select-frame command in
this patch.

The function command_notifies_uscc_observer was added to extract
the rather complicated logical expression from the if statement.  It is
also now clearer what that logic does: if the command used by the user
already notifies the user_selected_context_changed observer, there is
not need to notify it again.  It therefore protects again emitting the
event twice.

No regressions, tested on ubuntu 14.04 x86 with target boards unix and
native-extended-gdbserver.

gdb/ChangeLog:

YYYY-MM-DD  Antoine Tremblay  <antoine.tremblay@ericsson.com>
YYYY-MM-DD  Simon Marchi  <simon.marchi@ericsson.com>

	PR gdb/20487
	* NEWS: Mention new frame field of =thread-selected event.
	* cli/cli-decode.c (add_cmd): Initialize c->suppress_notification.
	(add_com_suppress_notification): New function definition.
	(cmd_func): Set and restore the suppress_notification flag.
	* cli/cli-deicode.h (struct cmd_list_element)
	<suppress_notification>: New field.
	* cli/cli-interp.c (cli_suppress_notification): New global variable.
	(cli_on_user_selected_context_changed): New function.
	(_initialize_cli_interp): Attach to user_selected_context_changed
	observer.
	* command.h (struct cli_suppress_notification): New structure.
	(cli_suppress_notification): New global variable declaration.
	(add_com_suppress_notification): New function declaration.
	* defs.h (enum user_selected_what_flag): New enum.
	(user_selected_what): New enum flag type.
	* frame.h (print_stack_frame_to_uiout): New function declaration.
	* gdbthread.h (print_selected_thread_frame): New function declaration.
	* inferior.c (print_selected_inferior): New function definition.
	(inferior_command): Remove printing of inferior/thread/frame switch
	notifications, notify user_selected_context_changed observer.
	* inferior.h (print_selected_inferior): New function declaration.
	* mi/mi-cmds.c (struct mi_cmd): Add user_selected_context
	suppression to stack-select-frame and thread-select commands.
	* mi/mi-interp.c (struct mi_suppress_notification)
	<user_selected_context>: Initialize.
	(mi_user_selected_context_changed): New function definition.
	(_initialize_mi_interp): Attach to user_selected_context_changed.
	* mi/mi-main.c (mi_cmd_thread_select): Print thread selection reply.
	(mi_execute_command): Handle notification suppression.  Notify
	user_selected_context_changed observer on thread change instead of printing
	event directly.  Don't send it if command already sends the notification.
	(command_notifies_uscc_observer): New function.
	(mi_cmd_execute): Don't handle notification suppression.
	* mi/mi-main.h (struct mi_suppress_notification)
	<user_selected_context>: New field.
	* stack.c (print_stack_frame_to_uiout): New function definition.
	(select_frame_command): Notify user_selected_context_changed
	observer.
	(frame_command): Call print_selected_thread_frame if there's no frame
	change or notify user_selected_context_changed observer if there is.
	(up_command): Notify user_selected_context_changed observer.
	(down_command): Likewise.
	(_initialize_stack): Suppress user_selected_context notification for
	command select-frame.
	* thread.c (thread_command): Notify
	user_selected_context_changed if the thread has changed, print
	thread info directly if it hasn't.
	(do_captured_thread_select): Do not print thread switch event.
	(print_selected_thread_frame): New function definition.
	* tui/tui-interp.c (tui_on_user_selected_context_changed):
	New function definition.
	(_initialize_tui_interp): Attach to user_selected_context_changed
	observer.

gdb/doc/ChangeLog:

	PR gdb/20487
	* gdb.texinfo (Context management): Update mention of frame
	change notifications.
	(gdb/mi Async Records): Document frame field in
	=thread-select event.
	* observer.texi (GDB Observers): New user_selected_context_changed
	observer.

gdb/testsuite/ChangeLog:

	PR gdb/20487
	* gdb.mi/mi-pthreads.exp (check_mi_thread_command_set): Adapt
	=thread-select-event check.
2016-10-03 16:54:58 -04:00
Peter Bergner a4297203ea Update tests to account for the L operand being compulsory.
* gdb.arch/powerpc-power.exp <cmprb>: Update tests to account for
	the compulsory L operand changes.
	* gdb.arch/powerpc-power.s: Likewise.
2016-09-29 15:21:55 -05:00
Jan Kratochvil bb805577d2 PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression
Regression: gdb --pid $(pidof qemu-system-x86_64) stopped working with gdb 7.11.1
https://sourceware.org/bugzilla/show_bug.cgi?id=20609

It was reported for qemu-system-x86_64 but it happens for any multithreaded
inferior with a JIT debugging hook.

136613ef0c6850427317e57be1b644080ff6decb is the first bad commit
Author: Pedro Alves <palves@redhat.com>
    Fix PR gdb/19828: gdb -p <process from a container>: internal error
Message-ID: <cbdf2e04-4fa8-872a-2a23-08c9c1b26e00@redhat.com>
https://sourceware.org/ml/gdb-patches/2016-05/msg00450.html

jit_breakpoint_re_set() is specific by trying to insert a breakpoint into the
main executable, not into a shared library.  During attachment GDB thinks it
needs to use 'breakpoint always-inserted' from
breakpoints_should_be_inserted_now() as a newly attached thread is
'thread_info->executing' due to 'lwp_info->must_set_ptrace_flags' enabled and
the task not yet stopped.  This did not happen before the 'bad commit' above
which adds tracking of such thread.

GDB then fails to insert the breakpoints to invalid address as PIE executable
gets properly relocated during later phase of attachment.  One can see in the
backtraces below:
 -> jit_breakpoint_re_set_internal()
later:
 -> svr4_exec_displacement()

One can suppress the initial breakpoint_re_set() call as there will be another
breakpoint_re_set() done from the final post_create_inferior() call in
setup_inferior().

BTW additionally 'threads_executing' cache bool is somehow stale (somewhere is
missing update_threads_executing()).  I was trying to deal with that in my
first/second attempt below but in my final third attempt (attached) I have
left it as it is.

First attempt trying not to falsely require 'breakpoint always-inserted':
  https://people.redhat.com/jkratoch/rhbz1375553-fix1.patch
Reduced first attempt:
  https://people.redhat.com/jkratoch/rhbz1375553-fix2.patch

The third attempt suppresses breakpoint insertion until PIE executable gets
relocated by svr4_exec_displacement().  Applied.

gdb/ChangeLog
2016-09-29  Jan Kratochvil  <jan.kratochvil@redhat.com>

	PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression
	* exec.c (exec_file_locate_attach): Add parameter defer_bp_reset.
	Use it.
	* gdbcore.h (exec_file_locate_attach): Add parameter defer_bp_reset.
	* infcmd.c (setup_inferior): Update caller.
	* remote.c (remote_add_inferior): Likewise.

gdb/testsuite/ChangeLog
2016-09-29  Jan Kratochvil  <jan.kratochvil@redhat.com>

	PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression
	* gdb.base/jit-attach-pie.c: New file.
	* gdb.base/jit-attach-pie.exp: New file.
2016-09-29 17:39:39 +02:00
Pedro Alves 6d61dee599 Fix PR 20345 - call_function_by_hand_dummy: Assertion `tp->thread_fsm == &sm->thread_fsm' failed
If you run an infcall from the command line, and immediately after run
some other command, GDB incorrectly processes the other command before
the infcall finishes.

The problem is that the fix for PR gdb/20418 (Problems with
synchronous commands and new-ui, git 3eb7562a98) moved the
add_file_handler/delete_file_handler calls out of
target_terminal_$foo, and missed adjusting the infcall code.

gdb/ChangeLog:
2016-09-28  Pedro Alves  <palves@redhat.com>

	* infcall.c (run_inferior_call): Remove input from the event
	loop while running the infcall.

gdb/testsuite/ChangeLog:
2016-09-28  Pedro Alves  <palves@redhat.com>

	* gdb.base/infcall-input.c: New file.
	* gdb.base/infcall-input.exp: New file.
2016-09-28 17:44:57 -04:00
Yao Qi f73842fc84 Close gdbserver in mi_gdb_exit
In commit 6423214f (testsuite: Don't use expect_background to reap
gdbserver), we override gdb_exit in lib/gdbserver-support.exp, so
that we can close gdbserver first.  However, we don't close gdbserver
in mi_gdb_exit.  This makes a problem in my aarch64 mulit-arch testing,
in which I run some mi tests, mi-watch.exp for example, in different
variations (aarch64 and arm),

Schedule of variations:
    junor0-2
    junor0-2-arm/-marm
    junor0-2-arm/-mthumb

When the test is done in the first variation (aarch64), test case is
recompiled for arm, but GDBserver with aarch64 program is still
running.  When the second variation is started, GDB loads arm program,
but GDBserver still loads aarch64 program because the old GDBserver
process is using it.  We'll get,

47-target-select remote junor0-2:2350^M
&"warning: Selected architecture arm is not compatible with reported target architecture aarch64\n"^M
&"warning: Architecture rejected target-supplied description\n"

This patch fixes this problem by closing GDBserver in mi_gdb_exit.

gdb/testsuite:

2016-09-22  Yao Qi  <yao.qi@linaro.org>

	* lib/gdbserver-support.exp: Rename mi_gdb_exit.
	(gdb_exit): Rename it to ...
	(gdbserver_gdb_exit): ...  Close GDBserver.
	(gdb_exit): New proc, call gdbserver_gdb_exit.
	(mi_gdb_exit): Likewise.
2016-09-22 16:04:03 +01:00
Yao Qi 90681dabc7 Use gdbserver-base in remote-gdbserver-on-localhost.exp
This patch is to make remote-gdbserver-on-localhost.exp use gdbserver-base
and remove duplicated code.

gdb/testsuite:

2016-09-22  Yao Qi  <yao.qi@linaro.org>

	* boards/gdbserver-base.exp (gdb_server_prog): Set the absolute
	path.
	* boards/remote-gdbserver-on-localhost.exp: Use gdbserver-base.
	Remove duplication.
2016-09-22 14:36:54 +01:00
Yao Qi 9c211fd8d6 Check the right proc name
In lib/gdbserver-support.exp, we rename gdb_exit to
gdbserver_orig_gdb_exit, but we check the existence gdbserver_gdb_exit.
We should check gdbserver_orig_gdb_exit instead.  Looks it is a typo
or an oversight.

gdb/testsuite:

2016-09-22  Yao Qi  <yao.qi@linaro.org>

	* lib/gdbserver-support.exp: Check the existence of
	gdbserver_orig_gdb_exit rather than gdbserver_gdb_exit.
2016-09-22 10:04:19 +01:00
Anton Kolesov ad0a504f7e arc: New Synopsys ARC port
ARC is a family of licensable processors developed by Synopsys.

This is an initial patch that doesn't yet support some of the features, that
are already available in Synopsys' fork of GDB, namely:

  * longjmp support
  * signal frame handling
  * prologue analysis
  * Linux targets support
  * native Linux support

ARC cores are configurable and extensible, which means from debugger
perspective that some registers and debug capabilities are optional, therefore
it is up to the GDB stub to determine exact list of register available on
target and supply it to GDB via XML target descriptions.  List of registers
that is known to GDB and is required is intentionally kept small to simplify
requirements to GDB stub and implementation of a GDB client.

gdb/ChangeLog:

	* Makefile.in (ALL_TARGET_OBS): Add arc-tdep.o.
	(HFILES_NO_SRCDIR): Add arc-tdep.h.
	(ALLDEPFILES): Add arc-tdep.c.
	* NEWS: Mention new ARC port.
	* configure.tgt: Add ARC.
	* arc-tdep.c: New file.
	* arc-tdep.h: New file.
	* features/Makefile (XMLTOC): Add arc-v2.xml and arc-arcompact.xml.
	* features/arc-v2.xml: New file.
	* features/arc-v2.c: New file (generated).
	* features/arc-arcompact.xml: New file.
	* features/arc-arcompact.c: New file (generated).

gdb/doc/ChangeLog:

	* gdb.texinfo (Embedded Processors): Document ARC.
	(Synopsys ARC): New section.
	(Standard Target Features): Document ARC features.
	(ARC Features): New section.

gdb/testsuite/ChangeLog:

	* gdb.xml/tdesc-regs.exp: set core-regs for arc*-*-elf32.
2016-09-21 21:07:06 +03:00
Tom Tromey 36cf1806a8 PR gdb/20604 - fix "quit" when an invalid expression is used
This fixes PR gdb/20604.  The bug here is that passing an invalid
expression to "quit" -- e.g., "quit()" -- causes gdb to enter a
non-functioning state.

The immediate problem is that quit_force resets the terminal before
evaluating the expression.  However, it seemed to me that it doesn't
really make sense to pass the quit_force argument to kill_or_detach
(which passes it to to_detach), first because conflating the exit
status for "quit" and the signal to pass when detaching doesn't make
sense, and second because to_detach implementations generally only
accept a constant here, while "quit" accepts an expression.  So, I
removed that.

As an aside, I think the "detach SIGNO" functionality is not
documented.

Built and regtested on x86-64 Fedora 24.

2016-09-21  Tom Tromey  <tom@tromey.com>

	PR gdb/20604:
	* top.h (quit_force): Update.
	* top.c (quit_force): Changed type of first argument.  Don't
	evaluate expression.  Pass NULL to kill_or_detach.
	* cli/cli-cmds.c (quit_command): Evaluate "args".

2016-09-21  Tom Tromey  <tom@tromey.com>

	PR gdb/20604:
	* gdb.base/quit.exp: New file.
2016-09-21 11:39:37 -06:00
Simon Marchi 74172ecf37 Update and add .gitignore's
This patch adds a bunch of generated files to gdb's gitignore files.
There are still a bunch of "stamp" files that are not ignored, but I
think the rule for them should be put in the top-level gitignore.

Users and developers are encouraged to build out-of-tree, but some
people prefer the simplicity to build in-tree, so it should be useful
for them.

gdb/ChangeLog:

	* .gitignore: Ignore more files.
	* data-directory/.gitignore: Likewise.

gdb/doc/ChangeLog:

	* .gitignore: New file.

gdb/gdbserver/ChangeLog:

	* .gitinore: Ignore more files.

gdb/testsuite/ChangeLog:

	* .gitignore: New file.
2016-09-21 13:12:21 -04:00
Maciej W. Rozycki 3d0ec88224 MIPS/testsuite: mips16-thunks: Use `standard_output_file'
Correct a commit 2151ccc56c ("Always organize test artifacts in a
directory hierarchy") regression causing:

Running .../gdb/testsuite/gdb.arch/mips16-thunks.exp ...
gdb compile failed, Assembler messages:
Fatal error: can't create .../gdb/testsuite/gdb.arch/mips16-thunks-inmain.o: No such file or directory
gdb compile failed, Assembler messages:
Fatal error: can't create .../gdb/testsuite/gdb.arch/mips16-thunks-main.o: No such file or directory
gdb compile failed, mips-mti-linux-gnu-gcc: error: .../gdb/testsuite/gdb.arch/mips16-thunks-inmain.o: No such file or directory
mips-mti-linux-gnu-gcc: error: .../gdb/testsuite/gdb.arch/mips16-thunks-main.o: No such file or directory
UNSUPPORTED: gdb.arch/mips16-thunks.exp: No MIPS16 support in the toolchain.

by using `standard_output_file' to construct output file names
throughout.

	gdb/testsuite/
	* gdb.arch/mips16-thunks.exp: Use `standard_output_file'
	throughout.
2016-09-21 12:59:33 +01:00
Andreas Arnez 8193adea2f S390: Hardware breakpoint support
Add hardware breakpoint support for S390 targets.

gdb/ChangeLog:

	* s390-linux-nat.c (PER_BIT, PER_EVENT_BRANCH, PER_EVENT_IFETCH)
	(PER_EVENT_STORE, PER_EVENT_NULLIFICATION)
	(PER_CONTROL_BRANCH_ADDRESS, PER_CONTROL_SUSPENSION)
	(PER_CONTROL_ALTERATION): New macros.
	(struct s390_debug_reg_state) <break_areas>: New member.
	(s390_forget_process): Free break_areas as well.
	(s390_linux_new_fork): Copy break_areas as well.
	(s390_prepare_to_resume): Install hardware breakpoints.
	(s390_can_use_hw_breakpoint): Indicate support for hardware
	breakpoints.
	(s390_insert_hw_breakpoint, s390_remove_hw_breakpoint): New
	linux_nat target methods.
	(_initialize_s390_nat): Register them.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp: No longer skip hardware breakpoint tests on s390.
2016-09-16 19:25:55 +02:00
Jan Kratochvil d41a5c096e testsuite: Fix false FAIL in gdb.cp/casts.exp
gcc-6.2.1-1.fc26.x86_64

gdb compile failed, /home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/casts.cc:40:10: error: expected primary-expression before 'int'
 decltype(int x)
          ^~~
/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/casts.cc:40:10: error: expected ')' before 'int'
/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/casts.cc:40:1: error: expected unqualified-id before 'decltype'
 decltype(int x)
 ^~~~~~~~
/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/casts.cc: In function 'int main(int, char**)':
/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/casts.cc:59:14: error: expected primary-expression before 'decltype'
   double y = decltype(2);
              ^~~~~~~~

'decltype' is a registered keyword since C++11 which is now a default for GCC.

On Thu, 15 Sep 2016 14:06:56 +0200, Pedro Alves wrote:

Seems to be exercising the FLAG_SHADOW bits:

...
    {"__typeof__", TYPEOF, OP_TYPEOF, 0 },
    {"__typeof", TYPEOF, OP_TYPEOF, 0 },
    {"typeof", TYPEOF, OP_TYPEOF, FLAG_SHADOW },
    {"__decltype", DECLTYPE, OP_DECLTYPE, FLAG_CXX },
    {"decltype", DECLTYPE, OP_DECLTYPE, FLAG_CXX | FLAG_SHADOW },
...

/* This is used to associate some attributes with a token.  */

enum token_flag
{
...
  /* 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
};

So perhaps a better fix is to move that particular test to a
separate testcase that force-compiles with -std=c++03.

gdb/testsuite/ChangeLog
2016-09-16  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.cp/casts.cc (decltype): Move it ...
	(main): ... with its call to ...
	* gdb.cp/casts03.cc: ... a new file.
	* gdb.cp/casts.exp: Add new file casts03.cc, move decltype test to it.
2016-09-16 19:23:22 +02:00
Jan Kratochvil d2dfe70034 testsuite: Fix C++11 compilation failure for gdb.cp/m-static.exp
gcc-6.2.1-1.fc26.x86_64

g++ -std=c++03:
no warnings

g++:
In file included from /home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/m-static.cc:79:0:
/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/m-static.h:9:34: error: ‘constexpr’ needed for in-class initialization of static
data member ‘const float gnu_obj_4::somewhere’ of non-integral type [-fpermissive]
   static const float somewhere = 3.14159;
                                  ^~~~~~~

clang++:
In file included from /home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/m-static.cc:79:
/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/m-static.h:9:22: warning: in-class initializer for static data member of type 'const
float' is a GNU extension [-Wgnu-static-float-init]
  static const float somewhere = 3.14159;
                     ^           ~~~~~~~
1 warning generated.

clang++ -std=c++11:
In file included from /home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/m-static.cc:79:
/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/m-static.h:9:22: error: in-class initializer for static data member of type 'const
float' requires 'constexpr' specifier [-Wstatic-float-init]
  static const float somewhere = 3.14159;
                     ^           ~~~~~~~
/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/m-static.h:9:3: note: add 'constexpr'
  static const float somewhere = 3.14159;
  ^
  constexpr
1 error generated.

OK for check-in?

After the fix out of the 4 combinations above only this one remains non-empty:

clang++:
In file included from /home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/m-static.cc:79:
/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.cp/m-static.h:9:22: warning: in-class initializer for static data member of type 'const
float' is a GNU extension [-Wgnu-static-float-init]
  static const float somewhere = 3.14159;
                     ^           ~~~~~~~
1 warning generated.

On Thu, 15 Sep 2016 15:10:50 +0200, Pedro Alves wrote:

Hmm, OK, now that I read the test, I think you were right in trying to
keep it safe, actually.  The .exp file has:

if { $non_dwarf } { setup_xfail *-*-* }
gdb_test "print test4.everywhere" "\\$\[0-9\].* = 317" "static const int initialized in class definition"
if { $non_dwarf } { setup_xfail *-*-* }
gdb_test "print test4.somewhere" "\\$\[0-9\].* = 3.14\[0-9\]*" "static const float initialized in class definition"
                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Added by this:

 https://sourceware.org/bugzilla/show_bug.cgi?id=11702
 https://sourceware.org/ml/gdb-patches/2010-06/msg00677.html
 https://sourceware.org/ml/gdb-patches/2010-06/txt00011.txt

So the new patch would make that highlighted tested above not
test what its test message says it is testing.

So I now think your original patch is better.  Please push
that one instead.

gdb/testsuite/ChangeLog
2016-09-15  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.cp/m-static.h (gnu_obj_4::somewhere): Use constexpr for C++11.
2016-09-15 23:45:11 +02:00
Peter Bergner e2a92b1649 Update ISA 3.0 / POWER9 gdb tests to match GAS test cases.
* gdb.arch/powerpc-power.s: Update Power9 instruction tests
	and sync up the test with tests in gas/testsuite/gas/ppc.
	* gdb.arch/powerpc-power.exp: Likewise.
2016-09-15 16:10:05 -05:00
Jan Kratochvil 49b4de6424 testsuite: Disable ccache
There were always various problems with compatibility with ccache:
	https://bugzilla.redhat.com/show_bug.cgi?id=488863
	https://bugzilla.redhat.com/show_bug.cgi?id=759592
	https://sourceware.org/ml/gdb-patches/2009-02/msg00397.html

IMO in a summary ccache finds more a benefit of faster compilation despite the
debug info is no longer exactly the same (as without ccache).

Although for example in this case ccache helped to find a real GDB bug:
	https://sourceware.org/ml/gdb-patches/2015-01/msg00497.html

For the GDB testcases ccache has (IMO) no real performance advantage and it
just brings heisenbugs - false FAILs - from time to time:

Breakpoint 1, main () at gdb/testsuite/gdb.base/vdso-warning.c:21^M
	21        return 0;^M
	(gdb) PASS: gdb.base/vdso-warning.exp: run: startup
	->
	Breakpoint 1, main () at gdb/testsuite/gdb.base/hbreak-unmapped.c:21^M
	21        return 0;^M
	(gdb) FAIL: gdb.base/vdso-warning.exp: run: startup

So I find most safe and easy to just disable ccache for all testsuites.

gdb/testsuite/ChangeLog
2016-09-15  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* lib/future.exp: Set CCACHE_DISABLE, clear CCACHE_NODISABLE.
2016-09-15 14:06:11 +02:00
Sergio Durigan Junior 2c29df25b7 Fix false FAIL on gdb.base/stap-probe.exp, due to ICF optimization
GCC 6's ICF optimization pass is making the declaration of 'm1' and
'm2', on gdb.base/stap-probe.c, to be unified.  However, this leads to
only one instance of the probe 'two' being created, which causes a
failure on the testsuite (which expects a multi-location breakpoint to
be inserted on the probe).

This patch fixes this failure by declaring a dummy variable on 'm1',
and using it as an argument to m1's version of probe 'two'.  Since we
do not care about the contents of the functions nor about the
arguments of each probe 'two', this is OK.

gdb/testsuite/ChangeLog:
2016-09-11  Sergio Durigan Junior  <sergiodj@redhat.com>
	    Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.base/stap-probe.c (m1): New variable 'dummy', necessary to
	make m1's definition to be different from m2's.  Use 'dummy' as an
	argument for probe 'two'.
2016-09-12 00:19:22 -04:00
Jon Beniston cc3c284619 Use target_sim_options for sim target.
2016-09-10  Jon Beniston  <jon@beniston.com>

	* lib/mi-support.exp (mi_gdb_target_load): Use target_sim_options
	for sim target.
2016-09-10 21:38:47 +01:00
Andreas Arnez e1b2624a08 Pass HWCAP to ifunc resolver
On various GNU Elf architectures, including AArch64, ARM, s390/s390x,
ppc32/64, and sparc32/64, the dynamic loader passes HWCAP as a parameter
to each ifunc resolver.  Currently there is an open glibc Bugzilla that
requests this to be generalized to all architectures:

  https://sourceware.org/bugzilla/show_bug.cgi?id=19766

And various ifunc resolvers already rely on receiving HWCAP.  Currently
GDB always calls an ifunc resolver without any arguments; thus the
resolver may receive garbage, and based on that, the resolver may decide
to return a function that is not suited for the given platform.

This patch always passes HWCAP to ifunc resolvers, even on systems where
the dynamic loader currently behaves otherwise.  The rationale is
that (1) the dynamic loader may get adjusted on those systems as well in
the future; (2) passing an unused argument should not cause a problem
with existing resolvers; and (3) the logic is much simpler without such
a distinction.

gdb/ChangeLog:

	* elfread.c (auxv.h): New include.
	(elf_gnu_ifunc_resolve_addr): Pass HWCAP to ifunc resolver.

gdb/testsuite/ChangeLog:

	* gdb.base/gnu-ifunc-lib.c (resolver_hwcap): New external
	variable declaration.
	(gnu_ifunc): Add parameter hwcap.  Store it in resolver_hwcap.
	* gdb.base/gnu-ifunc.c (resolver_hwcap): New global variable.
	* gdb.base/gnu-ifunc.exp: Add test to verify that the resolver
	received HWCAP as its argument.
2016-09-09 19:59:53 +02:00
Pedro Alves 4295e285ef new-ui command: gdb internal errors if input is already pending
I noticed that if input is already pending on the new-ui TTY, gdb
internal-errors.

E.g., create /dev/pts/2, and type anything there (even just <return>
is sufficient).

Now start GDB creating a new UI on that TTY, while at the same time,
running a synchronous execution command.  Something like:

$ gdb program -ex "new-ui console /dev/pts/2" -ex "start"

Back on /dev/pts/2, we get:

  (gdb) .../src/gdb/event-top.c:360: internal-error: double prompt
  A problem internal to GDB has been detected,
  further debugging may prove unreliable.

While the main UI was waiting for "start" to finish, gdb kepts pumping
events, including the input fd of the extra console.  The problem is
that stdin_event_handler doesn't restore the current UI back to what
it was, assuming that it's only ever called from the top level event
loop.  However, in this case, it's being called from the nested event
loop from within maybe_wait_sync_command_done.

When finally the "start" command is done, we reach the code that
prints the prompt in the main UI, just before starting the main event
loop.  Since now the current UI is pointing at the extra console (by
mistake), we find ourselves printing a double prompt on the extra
console.  This is caught by the assertion that fails, as shown above.

Since other event handlers also don't restore the UI (e.g., signal
event handlers), I think it's better if whatever is pumping events to
take care to restore the UI, if it cares.  That's what this patch
does.  New test included.

gdb/ChangeLog:
2016-09-06  Pedro Alves  <palves@redhat.com>

	* top.c (wait_sync_command_done): Don't assume current_ui doesn't
	change across events.  Restore the current UI before returning.
	(gdb_readline_wrapper): Restore the current UI before returning.

gdb/testsuite/ChangeLog:
2016-09-06  Pedro Alves  <palves@redhat.com>

	* gdb.base/new-ui-pending-input.c: New file.
	* gdb.base/new-ui-pending-input.exp: New file.
	* gdb.exp (clear_gdb_spawn_id): New procedure.
	(with_spawn_id): Check whether gdb_spawn_id exists before
	referencing it.  If gdb_spawn_id didn't exist on entry, clear it
	on exit.
2016-09-06 23:49:57 +01:00
Ulrich Weigand 00d5215ece Support 128-bit IEEE floating-point types on Intel and Power
Now that all the prerequisites are in place, this commit finally adds support
for handling the __float128 type on Intel and Power, by providing appropriate
platform-specific versions of the floatformat_for_type callback.

Since at this point we do not yet have any indication in the debug info to
distinguish different floating-point formats of the same length, we simply
use the type name as hint.  Types named "__float128" get the IEEE format.
In addition to handling "__float128" itself, we also recognize "_Float128"
and (on Power) "_Float64x", as well as the complex versions of those.
(As pointed out by Joseph Myers, starting with GCC 7, __float128 is just
a typedef for _Float128 -- but it's good to handle this anyway.)

A new test case does some simple verification that the format is decoded
correctly, using both __float128 and "long double" to make sure using both
in the same file still works.  Another new test verifies handling of the
_FloatN and _FloatNx types supported by GCC 7, as well as the complex
versions of those types.

Note that this still only supports basic format decoding and encoding.
We do not yet support the GNU extension 'g' suffix for __float128 constants.
In addition, since all *arithmetic* on floating-point values is still
performed in native host "long double" arithmetic, if that format is not
able to encode all target __float128 values, we may get incorrect results.
(To fix this would require implementing fully synthetic target floating-
point arithmetic along the lines of GCC's real.c, presumably using MPFR.)

gdb/ChangeLog:

	* i386-tdep.c (i386_floatformat_for_type): New function.
	(i386_gdbarch_init): Install it.
	* ppc-linux-tdep.c (ppc_floatformat_for_type): New function.
	(ppc_linux_init_abi): Install it.

gdb/testsuite/ChangeLog:

	* gdb.base/float128.c: New file.
	* gdb.base/float128.exp: Likewise.
	* gdb.base/floatn.c: Likewise.
	* gdb.base/floatn.exp: Likewise.

Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
2016-09-06 17:33:15 +02:00
Ulrich Weigand a9ff5f12cf Remove obsolete TYPE_FLAG_... values
Now that init_type no longer takes a FLAGS argument, there is no user of
the TYPE_FLAGS_... enum values left.  This commit removes them (and all
references to them in comments as well).

This is mostly a no-op, except for a change to the Python type printer,
which attempted to use them before.  (As best as I can tell, this wasn't
really needed anyway, since it was only used to pretty-print type
*instance* flags, which only use the instance flags.)

gdb/ChangeLog:

	* gdbtypes.h (enum type_flag_value): Remove.
	Remove references to TYPE_FLAG_... in comments throughout.
	* gdbtypes.c (recursive_dump_type): Do not print TYPE_FLAG_...
	flags, print the corresponding TYPE_... access macro names.
	Remove references to TYPE_FLAG_... in comments throughout.
	* infcall.c: Remove references to TYPE_FLAG_... in comments.
	* valprint.c: Likewise.
	* gdb-gdb.py (class TypeFlag): No longer consider TYPE_FLAG_...
	values, only TYPE_INSTANCE_FLAG_... values.
	(class TypeFlagsPrinter): Likewise.

gdb/testsuite/ChangeLog:

	* gdb.cp/hang.exp: Remove reference to TYPE_FLAG_STUB in comment.

Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
2016-09-06 17:29:15 +02:00
Pedro Alves f245535cf5 Fix PR19927: Avoid unwinder recursion if sniffer uses calls parse_and_eval
This fixes the problem exercised by Kevin's test at:

 https://sourceware.org/ml/gdb-patches/2016-08/msg00216.html

This was originally exposed by the OpenJDK Python-based unwinder.

If an unwinder attempts to call parse_and_eval from within its
sniffing method, GDB's unwinding machinery enters infinite recursion.
However, parse_and_eval is a pretty reasonable thing to call, because
Python/Scheme-based unwinders will often need to read globals out of
inferior memory.  The recursion happens because:

- get_current_frame() is called soon after the target stops.

- current_frame is NULL, and so we unwind it from the sentinel frame
  (which is special and has level == -1).

- We reach get_prev_frame_if_no_cycle, which does cycle detection
  based on frame id, and thus tries to compute the frame id of the new
  frame.

- Frame id computation requires an unwinder, so we go through all
  unwinder sniffers trying to see if one accepts the new frame (the
  current frame).

- the unwinder's sniffer calls parse_and_eval().

- parse_and_eval depends on the selected frame/block, and if not set
  yet, the selected frame is set to the current frame.

- get_current_frame () is called again.  current_frame is still NULL,
  so ...

- recurse forever.


In Kevin's test at:

 https://sourceware.org/ml/gdb-patches/2016-08/msg00216.html

gdb doesn't recurse forever simply because the Python unwinder
contains code to detect and stop the recursion itself.  However, GDB
goes downhill from here, e.g., by showing the sentinel frame as
current frame (note the -1):

    Breakpoint 1, ccc (arg=<unavailable>) at py-recurse-unwind.c:23
    23      }
    (gdb) bt
    #-1 ccc (arg=<unavailable>) at py-recurse-unwind.c:23
    Backtrace stopped: previous frame identical to this frame (corrupt stack?)

That "-1" frame level comes from this:

      if (catch_exceptions (current_uiout, unwind_to_current_frame,
			    sentinel_frame, RETURN_MASK_ERROR) != 0)
	{
	  /* Oops! Fake a current frame?  Is this useful?  It has a PC
             of zero, for instance.  */
	  current_frame = sentinel_frame;
	}

which is bogus.  It's never correct to set the current frame to the
sentinel frame.  The only reason this has survived so long is that
getting here normally indicates something wrong has already happened
before and we fix that.  And this case is no exception -- it doesn't
really matter how precisely we managed to get to that bogus code (it
has to do with the the stash), because anything after recursion
happens is going to be invalid.

So the fix is to avoid the recursion in the first place.

Observations:

 #1 - The recursion happens because we try to do cycle detection from
      within get_prev_frame_if_no_cycle.  That requires computing the
      frame id of the frame being unwound, and that itself requires
      calling into the unwinders.

 #2 - But, the first time we're unwinding from the sentinel frame,
      when we reach get_prev_frame_if_no_cycle, there's no frame chain
      at all yet:

      - current_frame is NULL.
      - the frame stash is empty.

Thus, there's really no need to do cycle detection the first time we
reach get_prev_frame_if_no_cycle, when building the current frame.

So we can break the recursion by making get_current_frame call a
simplified version of get_prev_frame_if_no_cycle that results in
setting the current_frame global _before_ computing the current
frame's id.

But, we can go a little bit further.  As there's really no reason
anymore to compute the current frame's frame id immediately, we can
defer computing it to when some caller of get_current_frame might need
it.  This was actually how the frame id was computed for all frames
before the stash-based cycle detection was added.  So in a way, this
patch reintroduces the lazy frame id computation, but unlike before,
only for the case of the current frame, which turns out to be special.

This lazyness, however, requires adjusting
gdb.python/py-unwind-maint.exp, because that assumes unwinders are
immediately called as side effect of some commands.  I didn't see a
need to preserve the behavior expected by that test (all it would take
is call get_frame_id inside get_current_frame), so I adjusted the
test.

gdb/ChangeLog:
2016-09-05  Pedro Alves  <palves@redhat.com>

	PR backtrace/19927
	* frame.c (get_frame_id): Compute the frame id if not computed
	yet.
	(unwind_to_current_frame): Delete.
	(get_current_frame): Use get_prev_frame_always_1 to get the
	current frame and assert that that always succeeds.
	(get_prev_frame_if_no_cycle): Skip cycle detection if returning
	the current frame.

gdb/testsuite/ChangeLog:
2016-09-05  Pedro Alves  <palves@redhat.com>

	PR backtrace/19927
	* gdb.python/py-unwind-maint.exp: Adjust tests to not expect that
	unwinders are immediately called as side effect of "source" or
	"disable unwinder" commands.
	* gdb.python/py-recurse-unwind.exp: Remove setup_kfail calls.
2016-09-05 18:41:38 +01:00
Yao Qi ae9cf263fd Skip floating point tests in return-nodebug.exp if gdb_skip_float_test is true
return-nodebug.exp does the test for various types, but we shouldn't
test with floating point type if gdb_skip_float_test returns true.

gdb/testsuite:

2016-09-02  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/return-nodebug.exp: Skip the test if	skip_float_test
	is true and $type is "float" or "double".
2016-09-02 15:26:54 +01:00
Yao Qi 27aba0477a Detect broken ptrace in gdb_skip_float_test
We recently found a ARM kernel ptrace bug
http://lists.infradead.org/pipermail/linux-arm-kernel/2016-May/431962.html
Details can be found in the comment in gdb_skip_float_test.  We can
skip floating point tests if the kernel bug is detected.

This patch adds more code in gdb_skip_float_test to detect the broken
ptrace on arm-linux.  Such detection should be done at the beginning
of the test, because it starts a fresh GDB, so change the test cases
to invoke gdb_skip_float_test at the beginning of test, and use its
return value afterwards.

Since gdb_skip_float_test becomes a gdb_caching_proc, so it can't
have an argument, this patch also removes argument "msg", which isn't
useful.

gdb/testsuite:

2016-09-02  Yao Qi  <yao.qi@linaro.org>

	* gdb.arch/arm-neon.exp: Skip it if gdb_skip_float_test returns
	true.
	* gdb.base/call-ar-st.exp: Invoke gdb_skip_float_test.
	* gdb.base/call-rt-st.exp: Likewise.
	* gdb.base/call-sc.exp: Invoke gdb_skip_float_test and use its
	return value instead of gdb,skip_float_test.
	* gdb.base/callfuncs.exp: Invoke gdb_skip_float_test.
	(do_function_calls): Use its return value instead of
	gdb,skip_float_test.
	* gdb.base/finish.exp: Likewise.
	* gdb.base/funcargs.exp: Likewise.
	* gdb.base/return.exp: Likewise.
	* gdb.base/return2.exp: Likewise.
	* gdb.base/varargs.exp: Likewise.
	* lib/gdb.exp (gdb_skip_float_test): Change it to
	gdb_caching_proc.  Detect the broken ptrace on arm-linux.
2016-09-02 09:22:13 +01:00
Andreas Arnez 5af962df4d Fix order of inferiors in "thread apply all"
This inserts missing parentheses in the calculation of the comparison
result between two different inferior numbers.  The problem was found by
Philipp Rudo.

gdb/ChangeLog:

	* thread.c (tp_array_compar): Insert missing parentheses.

gdb/testsuite/ChangeLog:

	* gdb.multi/tids.exp: Test "thread apply all".
2016-08-30 17:03:55 +02:00
Jan Kratochvil 7fac69100a gdb.base/default.exp regression
tty^M
(gdb) FAIL: gdb.base/default.exp: tty

gdb/testsuite/ChangeLog
2016-08-29  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.base/default.exp (tty): Remove.
2016-08-29 15:20:04 +02:00
Kevin Buettner bb1fe4acb8 Test case to detect recursive unwinding in Python-based unwinders.
This test case verifies that GDB will not attempt to invoke a python
unwinder recursively.

At the moment, the behavior exhibited by GDB looks like this:

    (gdb) source py-recurse-unwind.py
    Python script imported
    (gdb) b ccc
    Breakpoint 1 at 0x4004bd: file py-recurse-unwind.c, line 23.
    (gdb) run
    Starting program: py-recurse-unwind
    TestUnwinder: Recursion detected - returning early.
    TestUnwinder: Recursion detected - returning early.
    TestUnwinder: Recursion detected - returning early.
    TestUnwinder: Recursion detected - returning early.

    Breakpoint 1, ccc (arg=<unavailable>) at py-recurse-unwind.c:23
    23      }
    (gdb) bt
    #-1 ccc (arg=<unavailable>) at py-recurse-unwind.c:23
    Backtrace stopped: previous frame identical to this frame (corrupt stack?)

[I've shortened pathnames for easier reading.]

The desired / expected behavior looks like this:

    (gdb) source py-recurse-unwind.py
    Python script imported
    (gdb) b ccc
    Breakpoint 1 at 0x4004bd: file py-recurse-unwind.c, line 23.
    (gdb) run
    Starting program: py-recurse-unwind

    Breakpoint 1, ccc (arg=789) at py-recurse-unwind.c:23
    23      }
    (gdb) bt
    #0  ccc (arg=789) at py-recurse-unwind.c:23
    #1  0x00000000004004d5 in bbb (arg=456) at py-recurse-unwind.c:28
    #2  0x00000000004004ed in aaa (arg=123) at py-recurse-unwind.c:34
    #3  0x00000000004004fe in main () at py-recurse-unwind.c:40

Note that GDB's problems go well beyond the fact that it invokes the
unwinder recursively.  In the process it messes up some internal state
(the frame stash) leading to display of (only) the sentinel frame in
the backtrace.

gdb/testsuite/ChangeLog:

	* gdb.python/py-recurse-unwind.c: New file.
	* gdb.python/py-recurse-unwind.py: New file.
	* gdb.python/py-recurse-unwind.exp: New file.
2016-08-24 14:22:30 -07:00
Simon Marchi 0a1ddfa6b6 Allow resetting an empty inferior-tty
This patch allows the user to set the inferior-tty to "empty", in order
to come back to the default behaviour of using the same tty as gdb is
using.

This is already supported in MI (and tested in gdb.mi/mi-basics.exp).

I added a new test, set-inferior-tty.exp, where I test only the setting
and unsetting of the parameter.  It would be nice to actually test that
the inferior output properly goes to the separate tty, but that will be
for another day.

gdb/ChangeLog:

	* infcmd.c (set_inferior_io_terminal): Set inferior terminal to
	NULL if terminal_name is an empty string.
	(_initialize_infcmd): Make the argument of "set inferior-tty"
	optional, mention it in the help doc.

gdb/doc/ChangeLog:

	* gdb.texinfo (Input/Output): Mention possibility to unset
	inferior-tty.

gdb/testsuite/ChangeLog:

	* gdb.base/set-inferior-tty.exp: New file.
	* gdb.base/set-inferior-tty.c: New file.
2016-08-24 13:10:08 -04:00
Pedro Alves d9de1fe3d5 Fix PR20494 - User input stops being echoed in CLI
This patch fixes a problem that problem triggers if you start an
inferior, e.g., with the "start" command, in a UI created with the
new-ui command, and then run a foreground execution command in the
main UI.  Once the program stops for the latter command, typing in the
main UI no longer echoes back to the user.

The problem revolves around this:

- gdb_has_a_terminal computes its result lazily, on first call.

  that is what saves gdb's initial main UI terminal state (the UI
  associated with stdin):

          our_terminal_info.ttystate = serial_get_tty_state (stdin_serial);

  This is the state that target_terminal_ours() restores.

- In this scenario, the gdb_has_a_terminal function happens to be
  first ever called from within the target_terminal_init call in
  startup_inferior:

      (top-gdb) bt
      #0  gdb_has_a_terminal () at src/gdb/inflow.c:157
      #1  0x000000000079db22 in child_terminal_init_with_pgrp () at src/gdb/inflow.c:217
       [...]
      #4  0x000000000065bacb in target_terminal_init () at src/gdb/target.c:456
      #5  0x00000000004676d2 in startup_inferior () at src/gdb/fork-child.c:531
       [...]
      #7  0x000000000046b168 in linux_nat_create_inferior () at src/gdb/linux-nat.c:1112
       [...]
      #9  0x00000000005f20c9 in start_command (args=0x0, from_tty=1) at src/gdb/infcmd.c:657

If the command to start the inferior is issued on the main UI, then
readline will have deprepped the terminal when we reach the above, and
the problem doesn't appear.

If however the command is issued on a non-main UI, then when we reach
that gdb_has_a_terminal call, the main UI's terminal state is still
set to whatever readline has sets it to in rl_prep_terminal, which
happens to have echo disabled.  Later, when the following synchronous
execution command finishes, we'll call target_terminal_ours to restore
gdb's the main UI's terminal settings, and that restores the terminal
state with echo disabled...

Conceptually, the fix is to move the gdb_has_a_terminal call earlier,
to someplace during GDB initialization, before readline/ncurses have
had a chance to change terminal settings.  Turns out that
"set_initial_gdb_ttystate" is exactly such a place.

I say conceptually, because the fix actually inlines the
gdb_has_a_terminal part that saves the terminal state in
set_initial_gdb_ttystate and then simplifies gdb_has_a_terminal, since
there's no point in making gdb_has_a_terminal do lazy computation.

gdb/ChangeLog:
2016-08-23  Pedro Alves  <palves@redhat.com>

	PR gdb/20494
	* inflow.c (our_terminal_info, initial_gdb_ttystate): Update
	comments.
	(enum gdb_has_a_terminal_flag_enum, gdb_has_a_terminal_flag):
	Delete.
	(set_initial_gdb_ttystate): Record our_terminal_info here too,
	instead of ...
	(gdb_has_a_terminal): ... here.  Reimplement in terms of
	initial_gdb_ttystate.  Make static.
	* terminal.h (gdb_has_a_terminal): Delete declaration.
	(set_initial_gdb_ttystate): Add comment.
	* top.c (show_interactive_mode): Use input_interactive_p instead
	of gdb_has_a_terminal.

gdb/testsuite/ChangeLog:
2016-08-23  Pedro Alves  <palves@redhat.com>

	PR gdb/20494
	* gdb.base/new-ui-echo.c: New file.
	* gdb.base/new-ui-echo.exp: New file.
2016-08-23 16:03:28 +01:00
Yao Qi e9d9abd747 gdbserver_spawn "" rather than gdbserver_spawn ${binfile}
Hi,
I happen to see gdbserver is spawned like this in gdb.log,

spawn /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/../../gdb/gdbserver/gdbserver --once :2346 /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.s
erver/connect-stopped-target/connect-stopped-target /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.server/connect-stopped-target/connect-stopped-t
arget

spawn /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/../../gdb/gdbserver/gdbserver --once :2347 /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.s
erver/connect-stopped-target/connect-stopped-target /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.server/connect-stopped-target/connect-stopped-t
arget

as we can see, there are two instances of connect-stopped-target or
connect-stopped-target in the command line spawning gdbserver, but
none of these gets parameters from command line.  In these two
tests, gdbserver is spawned via "gdbserver_spawn ${binfile}".  However,
the argument of gdbserver_spawn is the argument passed the child
inferior, not the program itself.

 # Start a gdbserver process running SERVER_EXEC, and connect GDB
 # to it.  CHILD_ARGS are passed to the inferior.
 #
 # Returns the target protocol and socket to connect to.

proc gdbserver_spawn { child_args } {
    set target_exec [gdbserver_download_current_prog]

GDBserver gets the program via last_loaded_file, which is set by
gdb_file_cmd.  In each test, we don't need to pass ${binfile}.

gdb/testsuite:

2016-08-23  Yao Qi  <yao.qi@linaro.org>

	* gdb.server/connect-stopped-target.exp (do_test): Pass "" to
	gdbserver_spawn.
	* gdb.server/connect-without-multi-process.exp (do_test):
	Likewise.
2016-08-23 14:24:03 +01:00
Yao Qi 3589529e3c Fix signals-state-child.exp in remote testing
Remote testing isn't considered in signals-state-child.exp, so the it
fails like

shell diff -s /scratch/yao/gdb/build-git/aarch64-linux-gnu/gdb/testsuite/outputs/gdb.base/signals-state-child/standalone.txt /scratch/yao/gdb/build-git/aarch64-linux-gnu/gdb/testsuite/outputs/gdb.base/signals-state-child/gdb.txt^M
diff: /scratch/yao/gdb/build-git/aarch64-linux-gnu/gdb/testsuite/outputs/gdb.base/signals-state-child/standalone.txt: No such file or directory^M
(gdb) FAIL: gdb.base/signals-state-child.exp: signals states are identical

This patch is to fix it.

gdb/testsuite:

2016-08-23  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/signals-state-child.exp: Set variables gdb_txt and
	standalone_txt.  Delete gdb_txt and standalone_txt on host
	and target.  Spawn the binary on target.  Copy files from
	target to host.
2016-08-23 14:15:50 +01:00
Pedro Alves 6bb90213cb Fix PR gdb/20505 - Make vDSO detection work with core files
Loading a core dump that was either generated on a system running
pristine glibc master, or on a Fedora/RHEL system with LD_DEBUG=unused
set in the environment, solib-svr4.c:svr4_current_sos fails to filter
out the vDSO, resulting in:

  (gdb) core-file corefile.core^M
  [New LWP 2362]^M
  warning: Could not load shared library symbols for linux-vdso.so.1.^M
  Do you need "set solib-search-path" or "set sysroot"?^M
  Core was generated by `build-gdb/gdb/testsuite/outputs/gdb.base/corefile/'.^M
  ...

The problem is that gdbarch_vsyscall_range does not support core
inferiors at all.

When live debugging, we're finding the vDSO's start address with
auxv/AT_SYSINFO_EHDR, and then we find the vDSO's size by look for the
corresponding mapping, by parsing /proc/PID/maps.  When debugging a
core dump, we can also determine the starting address from
auxv/AT_SYSINFO_EHDR.  However, we obviously can't read the core
mappings out of the host's /proc.  But we can instead look for a
corresponding load segment in the core's bfd.

gdb/ChangeLog:
2016-08-22  Pedro Alves  <palves@redhat.com>

	PR gdb/20505
	* linux-tdep.c (linux_vsyscall_range_raw): For core inferiors,
	find the vDSO's start address with AT_SYSINFO_EHDR too, and
	determine the vDSO's size by finding the PT_LOAD segment that
	matches AT_SYSINFO_EHDR.

gdb/testsuite/ChangeLog:
2016-08-22  Pedro Alves  <palves@redhat.com>

	PR gdb/20505
	* gdb.base/vdso-warning.exp: Test core dumps too.  Use
	with_test_prefix.  Factor out bits to ...
	(test_no_vdso): ... this new procedure.
2016-08-22 20:05:09 +01:00
Carl E. Love 20c2c024c1 Fix missing files for ld when test suite not compiled in the source directory
This patch fixes an issues with six test suite expect files that do not
run correctly when the test suite is not built in the source directory.  The
issue is these tests are not using the current "standard_testfile" call
but rather using the older set command to initialize the "testfile",
"srcfile" and "binprefix" variables or are missing the set for the
"binprefix" variable.

-----------------------------------------------

gdb/testsuite/ChangeLog

2016-08-19  Carl Love  <cel@us.ibm.com>

	* gdb.arch/altivec-regs.exp: Use standard_testfile instead of
	maintaining separate logic for constructing the output path.
	* gdb.arch/powerpc-d128-regs.exp: Likewise.
	* gdb.arch/ppc-dfp.exp: Likewise.
	* gdb.arch/ppc-fp.exp: Likewise.
	* gdb.arch/vsx-regs.exp: Likewise.
	* gdb.arch/altivec-abi.exp: Likewise, plus added local variable
	binprefix for generating the additional binary files.
2016-08-19 11:06:38 -07:00
Pedro Alves 0646e07d6e x32: Fix gdb.trace/mi-trace-frame-collected.exp
gdb.trace/mi-trace-frame-collected.exp has a couple failures on x32:

 FAIL: gdb.trace/mi-trace-frame-collected.exp: live: -trace-frame-collected (register)
 FAIL: gdb.trace/mi-trace-frame-collected.exp: tfile: -trace-frame-collected (register)

gdb.log:

 -trace-frame-collected
 ^done,explicit-variables=[{name="gdb_char_test",value="0 '\\000'"}],computed-expressions=[],registers=[{number="16",value="0x4004dc"},{number="204",value="0x4004dc"}],tvars
 =[],memory=[{address="0x00601060",length="1"}]
 (gdb)
 FAIL: gdb.trace/mi-trace-frame-collected.exp: live: -trace-frame-collected (register)
[...]
 -trace-frame-collected
 ^done,explicit-variables=[{name="gdb_char_test",value="0 '\\000'"}],computed-expressions=[],registers=[{number="16",value="0x4004dc"},{number="204",value="0x4004dc"}],tvars
 =[],memory=[{address="0x00601060",length="1"}]
 (gdb)
 FAIL: gdb.trace/mi-trace-frame-collected.exp: tfile: -trace-frame-collected (register)

This test only collects the PC, and thus expects to only see one
register in the output of -trace-frame-collected.  However, while on
the 64-bit ABI gdb only exposes 64-bit $pc/$rip (register 16 above),
on x32, GDB exposes 32-bit $eip as well, as a pseudo-register
(register 204 above).  Thus, collecting $pc/$rip automatically always
collects $eip as well.

gdb/testsuite/ChangeLog:
2016-08-19  Pedro Alves  <palves@redhat.com>

	* gdb.trace/mi-trace-frame-collected.exp
	(test_trace_frame_collected): On x32, expect two registers.
2016-08-19 12:13:47 +01:00
Carl E. Love 46da9242e8 Add ChangeLog updates to my previous two commits
gdb/ChangeLog:

	* MAINTAINERS (Write After Approval): Add "Carl Love".

gdb/testsuite/ChangeLog:

	* gdb.arch/powerpc-power.s: Add new Power9 instruction tests
	and sync up the test with tests in gas/testsuite/gas/ppc.
	* gdb.arch/powerpc-power.exp: Likewise.
2016-08-18 14:36:36 -07:00
Carl Love 63373e4f16 Fix for powerpc-power.exp gdb regression test for Power 9
The GDB testsuite reports 5 test failures on Power 7 instructions.
Additionally the ppc test is missing the new Power 9 instructions as
well as a large number of older instructions.  Additionally, some
instruction names have changed or been deleted.  This patch
fixes the test failures and completely updates the test to make it
consistent with the supported Power 9 instructions listed in:

   gas/testsuite/gas/ppc/power7.d
   gas/testsuite/gas/ppc/power8.d
   gas/testsuite/gas/ppc/power9.d
   gas/testsuite/gas/ppc/altivec.d
   gas/testsuite/gas/ppc/altivec2.d
   gas/testsuite/gas/ppc/altivec3.d
   gas/testsuite/gas/ppc/vsx.d
   gas/testsuite/gas/ppc/vsx2.d
   gas/testsuite/gas/ppc/vsx3.d
-----------------------------------------------------

gdb/testsuite/ChangeLog

2016-08-18  Carl Love  <cel@us.ibm.com>

	* gdb.arch/powerpc-power.s: Add new Power9 instruction tests
	and sync up the test with tests in gas/testsuite/gas/ppc.
	* gdb.arch/powerpc-power.exp: Likewise.
2016-08-18 13:10:59 -07:00
Simon Marchi eb2332d78d Fix remove-inferior error message
This error message should not contain the word symbol:

  (gdb) remove-inferiors 1
  Warning: Can not remove current symbol inferior 1.

gdb/ChangeLog:

	* inferior.c (remove_inferior_command): Fix error message.

gdb/testsuite/ChangeLog:

	* gdb.multi/remove-inferiors.exp (test_remove_inferiors): Fix
	expected error message.
2016-08-17 16:02:27 -04:00
Simon Marchi 63c61e04bb Add remove-inferiors test
I noticed that the remove-inferiors command was not tested, and as I am
doing some changes related to the user selection, I want to make sure I
don't break it.  For example, I want to make sure it's not possible to
remove the current inferior.

gdb/testsuite/ChangeLog:

	* gdb.multi/remove-inferiors.exp: New file.
	* gdb.multi/remove-inferiors.c: New file.
2016-08-17 15:53:29 -04:00
Yao Qi 7b17065f84 Fix warning in gdb.base/signals-state-child.c
I see the following warning when running signals-state-child.exp.

gdb/testsuite/gdb.base/signals-state-child.c:77:4: warning: too many arguments for format [-Wformat-extra-args]
    fprintf (out, "sigaction={sa_handler=", i);
    ^

this patch is to remove the argument from fprintf.

gdb/testsuite:

2016-08-12  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/signals-state-child.c (main): Remove "i" from fprintf's
	argument list.
2016-08-12 11:02:04 +01:00
Pedro Alves 01d3dedf60 Fix PR gdb/19187 (process record over a fork causes internal error)
Right after a fork is detected, we detach breakpoints from the child
(detach_breakpoints), which calls into target_remove_breakpoint with
inferior_ptid pointing at the child process, but leaves the breakpoint
marked inserted (in the parent).

The problem is that record-full.c always deletes all knowledge of the
breakpoint.  Then when we later really delete the breakpoint from the
parent, we fail the assertion, since the breakpoint is unexpectedly
not found in the record-full.c breakpoint table.

The fix is simply to not forget about the breakpoint if we're
detaching it from a fork child.

gdb/ChangeLog:
2016-08-10  Pedro Alves  <palves@redhat.com>

	PR gdb/19187
	* record-full.c (record_full_remove_breakpoint): Don't remove the
	breakpoint from the record_full_breakpoints VEC if we're detaching
	the breakpoint from a fork child.

gdb/testsuite/ChangeLog:
2016-08-10  Pedro Alves  <palves@redhat.com>

	PR gdb/19187
	* gdb.reverse/waitpid-reverse.exp: Add comment and remove
	setup_kfails.
2016-08-10 23:03:29 +01:00
Pedro Alves 3eb7562a98 Fix PR gdb/20418 - Problems with synchronous commands and new-ui
When executing commands on a secondary UI running the MI interpreter,
some commands that should be synchronous are not.  MI incorrectly
continues processing input right after the synchronous command is
sent, before the target stops.

The problem happens when we emit MI async events (=library-loaded,
etc.), and we go about restoring the previous terminal state, we end
up calling target_terminal_ours, which incorrectly always installs the
current UI's input_fd in the event loop...  That is, code like this:

   old_chain = make_cleanup_restore_target_terminal ();
   target_terminal_ours_for_output ();

   fprintf_unfiltered (mi->event_channel, "library-loaded");

...

   do_cleanups (old_chain);

The fix is to move the add_file_handler/delete_file_handler calls out
of target_terminal_$foo, making these completely no-ops unless called
with the main UI as current UI.

gdb/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>

	PR gdb/20418
	* event-top.c (ui_register_input_event_handler)
	(ui_unregister_input_event_handler): New functions.
	(async_enable_stdin): Register input in the event loop.
	(async_disable_stdin): Unregister input from the event loop.
	(gdb_setup_readline): Register input in the event loop.
	* infrun.c (check_curr_ui_sync_execution_done): Register input in
	the event loop.
	* target.c (target_terminal_inferior): Don't unregister input from
	the event loop.
	(target_terminal_ours): Don't register input in the event loop.
	* target.h (target_terminal_inferior)
	(target_terminal_ours_for_output, target_terminal_ours): Update
	comments.
	* top.h (ui_register_input_event_handler)
	(ui_unregister_input_event_handler): New declarations.
	* utils.c (ui_unregister_input_event_handler_cleanup)
	(prepare_to_handle_input): New functions.
	(defaulted_query, prompt_for_continue): Use
	prepare_to_handle_input.

gdb/testsuite/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>
	    Simon Marchi  <simon.marchi@ericsson.com>

	PR gdb/20418
	* gdb.mi/new-ui-mi-sync.c, gdb.mi/new-ui-mi-sync.exp: New files.
	* lib/mi-support.exp (mi_expect_interrupt): Remove anchors.
2016-08-09 22:50:45 +01:00
Pedro Alves 8061491427 Fix PR mi/20431 - Missing MI prompts after sync execution MI command (-exec-continue, etc.) errors
gdb 7.11 introduced an MI regression: a failing MI sync execution
command misses printing the MI prompt, and then all subsequent command
miss it too:

 $ gdb-7.11.1 -i=mi
 [...]
 p 1
 &"p 1\n"
 ~"$1 = 1"
 ~"\n"
 ^done
 (gdb)                                        <<< prompted ok
 -exec-continue
 ^error,msg="The program is not being run."   <<< missing prompt after this
 print 1
 &"print 1\n"
 ~"$2 = 1"
 ~"\n"
 ^done                                        <<< missing prompt after this


gdb 7.10.1 behaved correctly, even with "set mi-async on":

 -exec-continue
 ^error,msg="The program is not being run."
 (gdb)                                        <<< prompted ok

etc.

Bisecting points at:

  commit 0b333c5e7d
  Author: Pedro Alves <palves@redhat.com>
  Date:   Wed Sep 9 18:23:23 2015 +0100

      Merge async and sync code paths some more
  [...]

The problem is that when an exception is thrown, we leave the prompt
state set to PROMPT_BLOCKED, and then mi_execute_command_input_handler
doesn't print the prompt.  It used to work because before that patch,
we happened to skip disabling stdin if the current target didn't do
async (which it never does before execution).

I was surprised to find that this bug isn't caught by the testsuite,
so I made a thorough test that tests all combinations of pairs of:

 - a failing synchronous execution command
 - a failing non-execution command
 - a non-failing command

gdb/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>

	PR mi/20431
	* mi/mi-main.c (mi_execute_command): Enable input and set prompt
	state to PROMPT_NEEDED.

gdb/testsuite/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>

	PR mi/20431
	* gdb.mi/mi-cmd-error.exp: New file.
2016-08-09 22:45:39 +01:00
Pedro Alves f348d89aec Fix PR gdb/18653: gdb disturbs inferior's inherited signal dispositions
gdb's (or gdbserver's) own signal handling should not interfere with
the signal dispositions their spawned children inherit.  However, it
currently does.  For example, some paths in gdb cause SIGPIPE to be
set to SIG_IGN, and as consequence, the child starts with SIGPIPE to
set to SIG_IGN too, even though gdb was started with SIGPIPE set to
SIG_DFL.

This is because the exec family of functions does not reset the signal
disposition of signals that are set to SIG_IGN:

  http://pubs.opengroup.org/onlinepubs/7908799/xsh/execve.html

  Signals set to the default action (SIG_DFL) in the calling process
  image are set to the default action in the new process
  image. Signals set to be ignored (SIG_IGN) by the calling process
  image are set to be ignored by the new process image. Signals set to
  be caught by the calling process image are set to the default action
  in the new process image (see <signal.h>).

And neither does it reset signal masks or flags.

In order to be transparent, when spawning new child processes to debug
(with "run", etc.), reset signal actions and mask back to what was
originally inherited from gdb/gdbserver's parent, just before execing
the target program to debug.

gdb/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>

	PR gdb/18653
	* Makefile.in (SFILES): Add
	common/signals-state-save-restore.c.
	(HFILES_NO_SRCDIR): Add common/signals-state-save-restore.h.
	(COMMON_OBS): Add signals-state-save-restore.o.
	(signals-state-save-restore.o): New rule.
	* configure: Regenerate.
	* fork-child.c: Include "signals-state-save-restore.h".
	(fork_inferior): Call restore_original_signals_state.
	* main.c: Include "signals-state-save-restore.h".
	(captured_main): Call save_original_signals_state.
	* common/common.m4: Add sigaction to AC_CHECK_FUNCS checks.
	* common/signals-state-save-restore.c: New file.
	* common/signals-state-save-restore.h: New file.

gdb/gdbserver/ChangeLog:
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.

gdb/testsuite/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>

	PR gdb/18653
	* gdb.base/signals-state-child.c: New file.
	* gdb.base/signals-state-child.exp: New file.
	* gdb.gdb/selftest.exp (do_steps_and_nexts): Add new pattern.
2016-08-09 20:16:20 +01:00
Pedro Alves e5ca03b41d Fix PR gdb/20295: GDB segfaults printing bitfield member of optimized out value
With something like:

  struct A { int bitfield:4; } var;

If 'var' ends up wholly-optimized out, printing 'var.bitfield' crashes
gdb here:

 (top-gdb) bt
 #0  0x000000000058b89f in extract_unsigned_integer (addr=0x2 <error: Cannot access memory at address 0x2>, len=2, byte_order=BFD_ENDIAN_LITTLE)
     at /home/pedro/gdb/mygit/src/gdb/findvar.c:109
 #1  0x00000000005a187a in unpack_bits_as_long (field_type=0x16cff70, valaddr=0x0, bitpos=16, bitsize=12) at /home/pedro/gdb/mygit/src/gdb/value.c:3347
 #2  0x00000000005a1b9d in unpack_value_bitfield (dest_val=0x1b5d9d0, bitpos=16, bitsize=12, valaddr=0x0, embedded_offset=0, val=0x1b5d8d0)
     at /home/pedro/gdb/mygit/src/gdb/value.c:3441
 #3  0x00000000005a2a5f in value_fetch_lazy (val=0x1b5d9d0) at /home/pedro/gdb/mygit/src/gdb/value.c:3958
 #4  0x00000000005a10a7 in value_primitive_field (arg1=0x1b5d8d0, offset=0, fieldno=0, arg_type=0x16d04c0) at /home/pedro/gdb/mygit/src/gdb/value.c:3161
 #5  0x00000000005b01e5 in do_search_struct_field (name=0x1727c60 "bitfield", arg1=0x1b5d8d0, offset=0, type=0x16d04c0, looking_for_baseclass=0, result_ptr=0x7fffffffcaf8,
 [...]

unpack_value_bitfield is already optimized-out/unavailable -aware:

   (...) VALADDR points to the contents of VAL.  If the VAL's contents
   required to extract the bitfield from are unavailable/optimized
   out, DEST_VAL is correspondingly marked unavailable/optimized out.

however, it is not considering the case of the value having no
contents buffer at all, as can happen through
allocate_optimized_out_value.

gdb/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>

	* value.c (unpack_value_bitfield): Skip unpacking if the parent
	has no contents buffer to begin with.

gdb/testsuite/ChangeLog:
2016-08-09  Pedro Alves  <palves@redhat.com>

	* gdb.dwarf2/bitfield-parent-optimized-out.exp: New file.
2016-08-09 12:04:48 +01:00
Tom Tromey 282a0691a7 PR python/18565 - make Frame.function work for inline frames
PR python/18565 notes that calling frame filters don't work properly for
inlined functions.  This happens because Frame.function on an inline
frame will yield the wrong result.  This patch changes this code to use
find_frame_funname instead, which handles inline frames properly.

Built and regtested on x86-64 Fedora 24.

2016-08-03  Tom Tromey  <tom@tromey.com>

	PR python/18565:
	* python/py-frame.c (frapy_function): Use find_frame_funname.

2016-08-03  Tom Tromey  <tom@tromey.com>

	PR python/18565:
	* gdb.python/py-frame-inline.exp: Add Frame.function test.
2016-08-03 09:04:08 -06:00
Yao Qi 41bfcd638a Swap "single-process" and "multi-process" in process-dies-while-detaching.exp
"single-process" and "multi-process" are used in the test message of
process-dies-while-detaching.exp, but they are misplaced due to

    set mode [expr {$multi_process ? "single-process" : "multi-process"}]

This patch is to swap them.

gdb/testsuite:

2016-08-01  Yao Qi  <yao.qi@linaro.org>

	* gdb.threads/process-dies-while-detaching.exp (do_test): Set
	variable mode to "multi-process" if $multi_process is 1, otherwise
	set it to "single-process".
2016-08-01 10:00:31 +01:00
Yao Qi e3465b24a2 Tweak gdb.cp tests for aarch32
There are some gdb.cp/ tests fails if the program is compiled for arm
32-bit but GDB/GDBserver is aarch64 64-bit program, because target triplet
doesn't match "arm*-*-*".  Instead, we can use is_aarch32_target.

gdb/testsuite:

2016-08-01  Yao Qi  <yao.qi@linaro.org>

	* gdb.cp/anon-struct.exp: Check is_aarch32_target.
	* gdb.cp/cpexprs.exp: Likewise.
	* gdb.cp/m-static.exp: Likewise.
2016-08-01 09:32:06 +01:00
Tom Tromey 0b31a4bcec PR python/20190 - compute TLS symbol without a frame
PR python/20190 arose from an exception I noticed when trying to use
the Python unwinder for Spider Monkey in Firefox.

The problem is that the unwinder wants to examine the value of a
thread-local variable.  However, sympy_value rejects this because
symbol_read_needs_frame returns true for a TLS variable.

This problem arose once before, though in a different context:

https://sourceware.org/bugzilla/show_bug.cgi?id=11803

At the time Pedro and Daniel pointed out a simpler way to fix that bug
(see links in 20190 if you are interested); but for this new bug I
couldn't think of a similar fix and ended up implementing Daniel's
other suggestion:

https://sourceware.org/ml/gdb-patches/2010-07/msg00393.html

That is, this patch makes it possible to detect whether a symbol needs
a specific frame, or whether it just needs the inferior to have
registers.

Built and regtested on x86-64 Fedora 24.

2016-07-26  Tom Tromey  <tom@tromey.com>

	* symtab.c (register_symbol_computed_impl): Update.
	PR python/20190:
	* value.h (symbol_read_needs): Declare.
	(symbol_read_needs_frame): Add comment.
	* symtab.h (struct symbol_computed_ops) <read_variable>: Update
	comment.
	<get_symbol_read_needs>: Rename.  Change return type.
	* findvar.c (symbol_read_needs): New function.
	(symbol_read_needs_frame): Rewrite.
	(default_read_var_value): Use symbol_read_needs.
	* dwarf2loc.c (struct symbol_needs_baton): Rename.
	<needs>: Renamed from needs_frame.  Changed type.
	(needs_frame_read_addr_from_reg, symbol_needs_get_reg_value)
	(symbol_needs_read_mem, symbol_needs_frame_base)
	(symbol_needs_frame_cfa, symbol_needs_tls_address)
	(symbol_needs_dwarf_call): Rename.
	(needs_dwarf_reg_entry_value): Update.
	(symbol_needs_ctx_funcs, dwarf2_loc_desc_get_symbol_read_needs):
	Rename and update.
	(locexpr_get_symbol_read_needs, loclist_symbol_needs): Likewise.
	(dwarf2_locexpr_funcs, dwarf2_loclist_funcs): Update.
	* defs.h (enum symbol_needs_kind): New.

2016-07-26  Tom Tromey  <tom@tromey.com>

	PR python/20190:
	* gdb.threads/tls.exp (check_thread_local): Add python symbol
	test.
2016-07-26 13:43:27 -06:00
Markus Metzger e0461dbb65 btrace, testsuite: fix assembly source file selection
Some btrace tests use assembly source files.  They use the target triplet to
distinguish between x86_64 and ia32 ISA.  This does not work for -m32 tests
without setting the target triplet to i686-?-?.

Instead use is_amd64_regs_target to distinguish between x86_64 and ia32 ISA.

See also https://sourceware.org/ml/gdb-patches/2016-07/msg00256.html.

testsuite/
	* gdb.btrace/record_goto.exp: Use is_amd64_regs_target for selecting
	assembly source files.
	* gdb.btrace/stepi.exp: Use is_amd64_regs_target for selecting
	assembly source files.
	* gdb.btrace/tailcall.exp: Use is_amd64_regs_target for selecting
	assembly source files.
	* gdb.btrace/tailcall-only.exp: Use is_amd64_regs_target for selecting
	assembly source files.
2016-07-26 13:56:27 +02:00
Simon Marchi 8194e927cc Handle correctly passing a bad interpreter name to new-ui
When a bad interpreter name is passed to new-ui, such as:

  (gdb)  new-ui bloop /dev/pts/10

A partially created UI is left in the UI list, with interp set to NULL.
Trying to do anything that will print on this UI (such as "start") will
cause a segmentation fault.

Changes in v2:

  - Use with_test_prefix to namespace test procedures
  - Give an explicit stable test name
  - Add a "bad terminal path" test
  - Remove useless runto_main
  - Add missing intro comments

I did not factor out the pty spawn, as there is some magic involved I
don't quite understand.  But it wouldn't bring that much anyway.

gdb/ChangeLog:

	* top.h (make_delete_ui_cleanup): New declaration.
	* top.c (delete_ui_cleanup): New function.
	(make_delete_ui_cleanup): New function.
	(new_ui_command): Create restore_ui cleanup earlier, create a
	delete_ui cleanup and discard it on success.

gdb/testsuite/ChangeLog:

	* gdb.base/new-ui.exp (do_test_invalid_args): New
	procedure.
2016-07-25 11:01:54 -04:00
Tim Wiederhake c0272db585 btrace: Resume recording after disconnect.
This patch allows gdbserver to continue recording after disconnect.  On
reconnect, the recorded data is accessible to gdb as if no disconnect happened.

A possible application for this feature is remotely examine bugs that occur
at irregular intervals, where maintaining a gdb connection is inconvenient.

This also fixes the issue mentioned here:
https://sourceware.org/ml/gdb-patches/2015-11/msg00424.html

Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com>

gdb/ChangeLog:
	* NEWS: Resume btrace on reconnect.
	* record-btrace.c: Added record-btrace.h include.
	(record_btrace_open): Split into this and ...
	(record_btrace_push_target): ... this.
	(record_btrace_disconnect): New function.
	(init_record_btrace_ops): Use record_btrace_disconnect.
	* record-btrace.h: New file.
	* remote.c: Added record-btrace.h include.
	(remote_start_remote): Check recording status.
	(remote_btrace_maybe_reopen): New function.

gdb/doc/ChangeLog:
	* gdb.texinfo: Resume btrace on reconnect.

gdb/testsuite/ChangeLog:

	* gdb.btrace/reconnect.c: New file.
	* gdb.btrace/reconnect.exp: New file.

Change-Id: I95e8b0ab8a89e58591aba0e63818cee82fd211bc
2016-07-25 11:03:43 +02:00
Gabriel Krisman Bertazi e34879080d Implement catch syscall group
Implement support to add catchpoints for a group of related syscalls
using the syntax:

(gdb) catch syscall group:<group>
or
(gdb) catch syscall g:<group>

Several groups are predefined in the xml files for all architectures
supported by GDB over Linux.  They are based on the groups defined by
strace.

gdb/

	* xml-syscall.c (get_syscalls_by_group): New.
	(get_syscall_group_names): New.
	(struct syscall_group_desc): New structure to store group data.
	(struct syscalls_info): Include field to store the group list.
	(sysinfo_free_syscall_group_desc): New.
	(free_syscalls_info): Free group list.
	(syscall_group_create_syscall_group_desc): New.
	(syscall_group_add_syscall): New.
	(syscall_create_syscall_desc): Add syscall to its groups.
	(syscall_start_syscall): Load group attribute.
	(syscall_group_get_group_by_name): New.
	(xml_list_syscalls_by_group): New.
	(xml_list_of_groups): New.
	* xml-syscall.h (get_syscalls_by_group): Export function
	to retrieve a list of syscalls filtered by the group name.
	(get_syscall_group_names): Export function to retrieve the list
	of syscall groups.
	* break-catch-syscall.c (catch_syscall_split_args): Verify if
	argument is a syscall group and expand it to a list of syscalls
	when creating catchpoints.
	(catch_syscall_completer): Add word completion for system call
	groups.
	* configure.ac: Include dependency for xsltproc when building
	in maintainer-mode.
	* break-catch-syscall.c (_initialize_breakpoint): Update catch
	syscall command documentation.
	* NEWS: Include section about catching groups of syscalls.
	* configure: Regenerate.
	* data-directory/Makefile.in: Generate syscall xml when building
	in maintainer mode.
	* syscalls/gdb-syscalls.dtd: Include group attribute to the
	syscall element.
	* syscalls/apply-defaults.xsl: New.
	* syscalls/linux-defaults.xml.in: New.
	* syscalls/aarch64-linux.xml: Rename to aarch64-linux.xml.in.
	* syscalls/amd64-linux.xml: Rename to amd64-linux.xml.in.
	* syscalls/arm-linux.xml: Rename to arm-linux.xml.in.
	* syscalls/bfin-linux.xml: Rename to bfin-linux.xml.in.
	* syscalls/i386-linux.xml: Rename to i386-linux.xml.in.
	* syscalls/mips-n32-linux.xml: Rename to mips-n32-linux.xml.in.
	* syscalls/mips-n64-linux.xml: Rename to mips-n64-linux.xml.in.
	* syscalls/mips-o32-linux.xml: Rename to mips-o32-linux.xml.in.
	* syscalls/ppc-linux.xml: Rename to ppc-linux.xml.in.
	* syscalls/ppc64-linux.xml: Rename to ppc64-linux.xml.in.
	* syscalls/s390-linux.xml: Rename to s390-linux.xml.in.
	* syscalls/s390x-linux.xml: Rename to s390x-linux.xml.in.
	* syscalls/sparc-linux.xml: Rename to sparc-linux.xml.in.
	* syscalls/sparc64-linux.xml: Rename to sparc64-linux.xml.in.
	* syscalls/aarch64-linux.xml: Regenerate.
	* syscalls/amd64-linux.xml: Regenerate.
	* syscalls/arm-linux.xml: Regenerate.
	* syscalls/i386-linux.xml: Regenerate.
	* syscalls/mips-n32-linux.xml: Regenerate.
	* syscalls/mips-n64-linux.xml: Regenerate.
	* syscalls/mips-o32-linux.xml: Regenerate.
	* syscalls/ppc-linux.xml: Regenerate.
	* syscalls/ppc64-linux.xml: Regenerate.
	* syscalls/s390-linux.xml: Regenerate.
	* syscalls/s390x-linux.xml: Regenerate.
	* syscalls/sparc-linux.xml: Regenerate.
	* syscalls/sparc64-linux.xml: Regenerate.

gdb/testsuite/

	* gdb.base/catch-syscall.exp (do_syscall_tests): Add call
	to test_catch_syscall_group.
	(test_catch_syscall_group): New.

gdb/doc/

	* gdb.texinfo (Set Catchpoints): Add 'group' argument to catch
	syscall.
2016-07-23 18:38:24 -03:00
Tom Tromey 12df5c002d Allow empty struct expressions in Rust
I learned recently that empty struct expressions, like "X{}", have been
promoted from experimental to stable in Rust.  This patch changes the
Rust expression parser to allow this case.

New test case included.
Built and regtested on x86-64 Fedora 23, using Rust 1.11 beta.

2016-07-21  Tom Tromey  <tom@tromey.com>

	* rust-lang.c (rust_tuple_struct_type_p): Return false for empty
	structs.
	* rust-exp.y (struct_expr_list): Allow empty elements.

2016-07-21  Tom Tromey  <tom@tromey.com>

	* gdb.rust/simple.rs (main): Use empty struct expression.
	* gdb.rust/simple.exp: Add tests for empty struct expression.
2016-07-21 15:16:04 -06:00
Yao Qi bae62ee208 Skip gdb.server/ tests if lack of XML support
I recently see some gdb.server/*.exp fails in my native gdb testing,
in which libexpat isn't available, so GDB isn't able to parse xml file.
It causes gdb.server/ tests fails because GDB can't get registers
correctly from GDBserver.

(gdb) PASS: gdb.server/connect-without-multi-process.exp: multiprocess=off: break main
target remote localhost:2352^M
Remote debugging using localhost:2352^M
warning: Can not parse XML target description; XML support was disabled at compile time^M
Reading /lib/ld-linux-armhf.so.3 from remote target...^M
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.^M
Reading /lib/ld-linux-armhf.so.3 from remote target...^M
Reading symbols from target:/lib/ld-linux-armhf.so.3...Reading /lib/ld-2.17.so.debug from remote target...^M
Reading /lib/.debug/ld-2.17.so.debug from remote target...^M
(no debugging symbols found)...done.^M
Remote 'g' packet reply is too long: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efffbe00000000808d0f4d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^
0x4d0f8d80 in _start () from target:/lib/ld-linux-armhf.so.3^M

Without XML support in GDB, it can't parse xml sent by GDBserver, and has
to fall back to the oldest arch.  However, GDBserver doesn't know this
(IMO, this is a defect in RSP), and still choose the right target
description to create regcache and 'g' packet.  If the port only has
one target description or coincidentally two sides choose the same
target description, there is no such issue.  Otherwise, GDB is broken
on read registers.

This patch is to skip gdbserver tests if XML is not support and the
target has multiple target descriptions.

gdb/testsuite:

2016-07-21  Yao Qi  <yao.qi@linaro.org>

	* lib/gdbserver-support.exp (skip_gdbserver_tests): Return 1
	if gdb_skip_xml_test is true on some targets.
2016-07-21 09:24:44 +01:00
Yao Qi b1b53fb3ef Fix fail in gdb.server/solib-list.exp
If I run single test solib-list.exp, it is OK.  If I run two, as below,
there are fails,

$ make check RUNTESTFLAGS="server-run.exp solib-list.exp"
FAIL: gdb.server/solib-list.exp: non-stop 0: continue (the program exited)
FAIL: gdb.server/solib-list.exp: non-stop 0: p libvar
FAIL: gdb.server/solib-list.exp: non-stop 1: continue (the program exited)
FAIL: gdb.server/solib-list.exp: non-stop 1: p libvar

in gdb.log,

/scratch/yao/gdb/build-git/x86_64/gdb/testsuite/../../gdb/gdbserver/gdbserver --once :2347 /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.server/server-run/server-run /lib64/ld-linux-x86-64.so.2 /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.server/solib-list/solib-list

server-run is spawned, which is wrong.  If I only run solib-list.exp, ld-linux
is spawned, which is right.

/scratch/yao/gdb/build-git/x86_64/gdb/testsuite/../../gdb/gdbserver/gdbserver --once :2346 /lib64/ld-linux-x86-64.so.2 /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.server/solib-list/solib-list

in test, we spawn gdbserver this way,

    # Note we pass ${interp_system}, the program gdbserver spawns, as
    # argument here, instead of using gdb_load, because we don't want
    # to download the interpreter to the target (it's already there)
    # or to the test output directory.
    set res [gdbserver_spawn "${interp_system} ${remote_binfile}"]

in gdbserver_spawn -> gdbserver_download_current_prog, if
last_loaded_file is set (when you run multiple tests), it is
returned.

This patch is to unset last_loaded_file in solib-list.exp.

gdb/testsuite:

2016-07-21  Yao Qi  <yao.qi@linaro.org>

	* gdb.server/solib-list.exp: Unset last_loaded_file.
2016-07-21 09:15:21 +01:00
Jan Kratochvil 027d97f8b0 testsuite: Fix gdb.gdb/selftest.exp for C++-O2-g-built GDB
tested on Fedora 24 x86_64 after:
        ./configure; make
That is: CFLAGS='-g -O2' CXXFLAGS='-g -O2'

FAIL: gdb.gdb/selftest.exp: unknown source line
FAIL: gdb.gdb/selftest.exp: step into xmalloc call

gdb/testsuite/ChangeLog
2016-07-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.gdb/selftest.exp (do_steps_and_nexts): Add "next over TRY" and
	"step into captured_main (args)".
2016-07-20 16:26:44 +02:00
Jan Kratochvil 7674d381b4 testsuite: Fix gdb.btrace/tailcall-only.exp errors on x86_64-m32
$ runtest 'CC_FOR_TARGET=gcc -m32' gdb.btrace/tailcall-only.exp
Running ./gdb.btrace/tailcall-only.exp ...
gdb compile failed, tailcall-only.c: Assembler messages:
tailcall-only.c:142: Error: cannot represent relocation type BFD_RELOC_64
[...]
tailcall-only.c:425: Error: cannot represent relocation type BFD_RELOC_64

It works for the other x86 arch combinations:

On Mon, 11 Apr 2016 08:44:23 +0200, Metzger, Markus T wrote:
I'm setting the target triplet to "i686-unknown-linux" in my m32 configuration.
Like this:

set target_triplet "i686-unknown-linux"
set_board_info cflags "-m32"
set_board_info cppflags "-m32"

On Wed, 20 Jul 2016 16:02:20 +0200, Pedro Alves wrote:
There's no reason you should _not_ set it.

But, multilib-style testing with --target_board=unix\{-m64,-m32\} etc.
should work _too_, IMO.

gdb/testsuite/ChangeLog
2016-07-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.btrace/tailcall-only.exp: Use is_lp64_target check.
2016-07-20 16:20:48 +02:00
Jan Kratochvil 72b5d09937 testsuite patch: Skip py-unwind.exp on x86_64 -m32
(gdb) source /home/jkratoch/redhat/gdb-clean/gdb/testsuite/outputs/gdb.python/py-unwind/py-unwind.py^M
Python script imported^M
Python Exception <type 'exceptions.ValueError'> Bad register: ^M
(gdb) FAIL: gdb.python/py-unwind.exp: import python scripts

class TestUnwinder(Unwinder):
    AMD64_RBP = 6
    AMD64_RSP = 7
    AMD64_RIP = 16

On Tue, 19 Jul 2016 12:06:09 +0200, Yao Qi wrote:
py-unwind.exp does nothing on arch specific thing, so py-unwind.exp shouldn't
be aware of the arch difference, but py-unwind.py should.

On Tue, 19 Jul 2016 20:04:33 +0200, Pedro Alves wrote:
How about we handle this in the .exp file for now and leave something
more complicated for when the test is first ported to some other
arch.  WDYT?

gdb/testsuite/ChangeLog
2016-07-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.python/py-unwind.exp: Test also ![is_lp64_target].
2016-07-20 16:17:04 +02:00