Commit Graph

38882 Commits

Author SHA1 Message Date
Doug Evans 6ebac3fbac gdb.python/py-lazy-string (pointer): Really add new typedef.
Somehow got dropped in earlier commit.

gdb/testsuite/ChangeLog:

	* gdb.python/py-lazy-string (pointer): Really add new typedef.
2017-03-16 10:43:21 -07:00
Doug Evans 2cc36e25db Remove collision markers from earlier commit 2017-03-16 10:40:27 -07:00
Yao Qi ba14f3792f Support CBNZ, CBZ, REV, REV16 and REVSH in arm process record
This patch adds the support for these instructions in arm process
record.

gdb:

2017-03-16  Yao Qi  <yao.qi@linaro.org>

	* arm-tdep.c (thumb_record_misc): Decode CBNZ, CBZ, REV16,
	and REVSH instructions.
2017-03-16 16:35:18 +00:00
Yao Qi b121eeb997 Fix arm process record for some instructions
I look at some fails in gdb.reverse/solib-precsave.exp in -mthumb,
they are caused by some bugs on decoding these three instructions,
uxtb, ldr and mrc.  This patch adds unit tests against these three
instructions, and fix these bugs by re-organizing the code to match
the table in ARM ARM.

gdb:

2017-03-16  Yao Qi  <yao.qi@linaro.org>

	* arm-tdep.c [GDB_SELF_TEST]: include "selftests.h".
	(arm_record_test): Declare.
	(_initialize_arm_tdep) [GDB_SELF_TEST]: call register_self_test.
	(thumb_record_ld_st_reg_offset): Rewrite the opcode matching to
	align with the manual.
	(thumb_record_misc): Adjust the code order to align with the
	manual.
	(thumb2_record_decode_insn_handler): Fix instruction matching.
	(instruction_reader_thumb): New class.
	(arm_record_test): New function.
2017-03-16 16:35:18 +00:00
Yao Qi 728a79135f Add instruction_reader to arm process record
This patch adds an abstract class abstract_memory_reader a
and pass it to the code reading instructions in arm process record,
rather than using target_read_memory to read from real target.  This
paves the way for adding more unit tests to arm process record.

gdb:

2017-03-16  Yao Qi  <yao.qi@linaro.org>

	* arm-tdep.c (abstract_memory_reader): New class.
	(instruction_reader): New class.
	(extract_arm_insn): Add argument 'reader'.  Callers updated.
	(decode_insn): Likewise.
2017-03-16 16:35:18 +00:00
Doug Evans a7c0469f99 Copy lazy string handling fixes from Python.
This patch keeps the Scheme side of lazy string handling in sync
with the python size, bringing over fixes for
PRs python/17728, python/18439, python/18779.

gdb/ChangeLog:

	* guile/scm-lazy-string.c (lazy_string_smob): Clarify use of LENGTH
	member.  Change type of TYPE member to SCM.  All uses updated.
	(lsscm_make_lazy_string_smob): Add assert.
	(lsscm_make_lazy_string): Flag bad length values.
	(lsscm_elt_type): New function.
	(gdbscm_lazy_string_to_value): Rewrite to use
	lsscm_safe_lazy_string_to_value.
	(lsscm_safe_lazy_string_to_value): Fix handling of TYPE_CODE_PTR.
	* guile/scm-value.c (gdbscm_value_to_lazy_string): Flag bad length
	values.  Fix TYPE_CODE_PTR.  Handle TYPE_CODE_ARRAY.  Handle typedefs
	in incoming type.
	* guile/guile-internal.h (tyscm_scm_to_type): Declare.
	* guile/scm-type.c (tyscm_scm_to_type): New function.

gdb/testsuite/ChangeLog:

	* gdb.guile/scm-value.c (main) Delete locals sptr, sn.
	* gdb.guile/scm-lazy-string.c: New file.
	* gdb.guile/scm-value.exp: Move lazy string tests to ...
	* gdb.guile/scm-lazy-string.exp: ... here, new file.  Add more tests
	for pointer, array, typedef lazy strings.
2017-03-16 09:31:29 -07:00
Doug Evans 34b433203b Fix various python lazy string bugs.
gdb/ChangeLog:

	PR python/17728, python/18439, python/18779
	* python/py-lazy-string.c (lazy_string_object): Clarify use of LENGTH
	member.  Change type of TYPE member to PyObject *.  All uses updated.
	(stpy_convert_to_value): Fix handling of TYPE_CODE_PTR.
	(gdbpy_create_lazy_string_object): Flag bad length values.
	Handle TYPE_CODE_ARRAY with possibly different user-provided length.
	Handle typedefs in incoming type.
	(stpy_lazy_string_elt_type): New function.
	(gdbpy_extract_lazy_string): Call it.
	* python/py-value.c (valpy_lazy_string): Flag bad length values.
	Fix handling of TYPE_CODE_PTR.  Handle TYPE_CODE_ARRAY.  Handle
	typedefs in incoming type.

gdb/testsuite/ChangeLog:

	PR python/17728, python/18439, python/18779
	* gdb.python/py-value.c (main) Delete locals sptr, sn.
	* gdb.python/py-lazy-string.c (pointer): New typedef.
	(main): New locals ptr, array, typedef_ptr.
	* gdb.python/py-value.exp: Move lazy string tests to ...
	* gdb.python/py-lazy-string.exp: ... here.  Add more tests for pointer,
	array, typedef lazy strings.
2017-03-16 09:28:11 -07:00
Doug Evans a3a5feccd2 New function tyscm_scm_to_type.
gdb/ChangeLog:

	* guile/guile-internal.h (tyscm_scm_to_type): Declare.
	* guile/scm-type.c (tyscm_scm_to_type): New function.
2017-03-16 09:26:18 -07:00
Doug Evans f8d995870f Lazy strings can be made from arrays too.
gdb/doc/ChangeLog:

	* guile.texi (Lazy Strings In Guile): Mention arrays.
	* python.texi (Lazy Strings In Python): Ditto.
2017-03-16 09:22:51 -07:00
Jiong Wang 28f1c60507 [Patch] Fix variable type glitch in inf-ptrace.c
gdb/
	* inf-ptrace.c (inf_ptrace_peek_poke): Change the type to "ULONGEST"
	for "skip".
2017-03-16 15:02:15 +00:00
Thomas Preud'homme ec3b243d43 Fix expect for gdb.cp/m-static.exp
The expectation in gdb.cp/m-static.exp for the ptype of
single_constructor is to get in the result of destructor with the
following prototype: ~single_constructor(int).

Yet, m-static.cc declares the destructor as ~single_constructor(). This
commit fixes the expectation.

2017-03-16  Thomas Preud'homme  <thomas.preudhomme@arm.com>

	gdb/testsuite/
	* gdb.cp/m-static.exp: Fix expectation for prototype of
	test5.single_constructor and single_constructor::single_constructor.
2017-03-16 14:02:31 +00:00
Andreas Arnez 87c336f60e inf-ptrace: Do not stop memory transfers after a single word
When inf_ptrace_xfer_partial performs a memory transfer via ptrace with
PT_READ_I, PT_WRITE_I (aka PTRACE_PEEKTEXT, PTRACE_POKETEXT), etc., then
it currently transfers at most one word.  This behavior yields degraded
performance, particularly if the caller has significant preparation work
for each invocation.  And indeed it has for writing, in
memory_xfer_partial in target.c, where all of the remaining data to be
transferred is copied to a temporary buffer each time, for breakpoint
shadow handling.  Thus large writes have quadratic runtime and can take
hours.

Note: On GNU/Linux targets GDB usually does not use
inf_ptrace_xfer_partial for large memory transfers, but attempts a single
read/write from/to /proc/<pid>/mem instead.  However, the kernel may
reject writes to /proc/<pid>/mem (such as kernels prior to 2.6.39), or
/proc may not be mounted.  In both cases GDB falls back to the ptrace
mechanism.

This patch fixes the performance issue by attempting to fulfill the whole
transfer request in inf_ptrace_xfer_partial, using a loop around the
ptrace call.

gdb/ChangeLog:

	PR gdb/21220
	* inf-ptrace.c (inf_ptrace_xfer_partial): In "case
	TARGET_OBJECT_MEMORY", extract the logic for ptrace peek/poke...
	(inf_ptrace_peek_poke): ...here.  New function.  Now also loop
	over ptrace peek/poke until end of buffer or error.
2017-03-14 19:20:46 +01:00
Simon Marchi cf81cf6081 Make length_of_subexp static
It isn't used anywhere else than the file it's defined in.

gdb/ChangeLog:

	* parse.c (length_of_subexp): Make static.
	* parser-defs.h (length_of_subexp): Remove.
2017-03-14 10:25:53 -04:00
Anton Kolesov 0efcde634d Add test name argument to get_valueof, get_integer_valueof and get_sizeof
An optional parameter TEST has been added to get_hexadecimal_valueof in commit:

  https://sourceware.org/ml/gdb-patches/2016-06/msg00469.html

This patch adds a similar optional parameter to other related methods that
retrieve expression values: get_valueof, get_integer_valueof and get_sizeof.
Thus tests that evaluate same expression multiple times can provide custom
test names, ensuring that test names will be unique.

gdb/testsuite/ChangeLog:
2017-03-14  Anton Kolesov  <anton.kolesov@synopsys.com>

	* lib/gdb.exp (get_valueof, get_integer_valueof, get_sizeof):
	  Add optional 'test' parameter.
2017-03-14 15:07:25 +03:00
Andreas Arnez a379284af2 linux-nat: Exploit /proc/<pid>/mem for writing
So far linux_proc_xfer_partial refused to handle write requests.  This is
still based on the assumption that the Linux kernel does not support
writes to /proc/<pid>/mem.  That used to be true, but has changed with
Linux 2.6.39 released in May 2011.

This patch lifts this restriction and now exploits /proc/<pid>/mem for
writing to inferior memory as well, if possible.

gdb/ChangeLog:

	* linux-nat.c (linux_proc_xfer_partial): Handle write operations
	as well.
2017-03-14 11:14:49 +01:00
Pedro Alves 8a6200ba86 Restore test-cp-name-parser build
Commit c8b23b3f89 ("Add constructor and destructor to
demangle_parse_info") a while ago broke the "test-cp-name-parser"
build:

 $ make test-cp-name-parser
 [...]
 src/gdb/cp-name-parser.y: In function ‘int main(int, char**)’:
 src/gdb/cp-name-parser.y:2190:9: error: cannot convert ‘std::unique_ptr<demangle_parse_info>’ to ‘demangle_parse_info*’ in assignment
   result = cp_demangled_name_to_comp (str2, &errmsg);
	  ^
 src/gdb/cp-name-parser.y:2199:38: error: ‘cp_demangled_name_parse_free’ was not declared in this scope
   cp_demangled_name_parse_free (result);
				       ^
 src/gdb/cp-name-parser.y:2211:14: error: cannot convert ‘std::unique_ptr<demangle_parse_info>’ to ‘demangle_parse_info*’ in assignment
	result = cp_demangled_name_to_comp (argv[arg], &errmsg);
	       ^
 src/gdb/cp-name-parser.y:2219:43: error: ‘cp_demangled_name_parse_free’ was not declared in this scope
	cp_demangled_name_parse_free (result);
					    ^
 Makefile:2107: recipe for target 'test-cp-name-parser.o' failed
 make: *** [test-cp-name-parser.o] Error 1

This commit restores it.

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

	* cp-name-parser.y (cp_demangled_name_to_comp): Update comment.
	(main): Use std::unique_ptr.  Remove calls to
	cp_demangled_name_parse_free.
2017-03-14 00:11:09 +00:00
Simon Marchi f79ec20666 alpha-bsd-nat: Use ptid from regcache instead of inferior_ptid
gdb/ChangeLog:

	* alpha-bsd-nat.c (alphabsd_fetch_inferior_registers,
	alphabsd_store_inferior_registers): Use regcache->ptid instead
	of inferior_ptid.
2017-03-13 18:51:41 -04:00
Simon Marchi edb5fb00a6 aix-thread: Use ptid from regcache instead of inferior_ptid
gdb/ChangeLog:

	* aix-thread.c (aix_thread_fetch_registers,
	aix_thread_store_registers): Use regcache->ptid instead of
	inferior_ptid.
2017-03-13 18:51:40 -04:00
Simon Marchi 551196862e aarc64-linux-nat: Use ptid from regcache instead of inferior_ptid
gdb/ChangeLog:

	* aarch64-linux-nat.c (fetch_gregs_from_thread,
	store_gregs_to_thread, fetch_fpregs_from_thread,
	store_fpregs_to_thread): Use regcache->ptid instead of
	inferior_ptid.
2017-03-13 18:51:39 -04:00
Simon Marchi 6a06fbb7b7 amd64-linux-nat: Use ptid from regcache instead of inferior_ptid
gdb/ChangeLog:

	* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers,
	amd64_linux_fetch_inferior_registers): Use regcache->ptid
	instead of inferior_ptid.
2017-03-13 18:51:39 -04:00
Simon Marchi c6386875ba Add asserts in target_fetch/store_registers
We are currently assuming that regcache->ptid is equal to inferior_ptid
when we call target_fetch/store_registers.  These asserts just validate
that assumption.  Also, since the following patches will change target
code to use regcache->ptid instead of inferior_ptid, asserting that they
are the same should ensure that our changes don't have any unintended
consequences.

gdb/ChangeLog:

	* target.c (target_fetch_registers, target_store_registers): Add
	assert.
2017-03-13 18:51:38 -04:00
Simon Marchi ddaaf0fb86 Introduce regcache_get_ptid
This patch introduces the regcache_get_ptid function, which can be used
to retrieve the ptid a regcache is connected to.  It is used in
subsequent patches.

gdb/ChangeLog:

	* regcache.h (regcache_get_ptid): New function.
	* regcache.c (regcache_get_ptid): New function.
2017-03-13 18:51:38 -04:00
Simon Marchi 1a01e7c6b0 gdbserver: Use pattern rule for the remaining %-ipa.o objects
gdb/gdbserver/ChangeLog:

	* Makefile.in (%-ipa.o: %-ipa.c): New rule.
	(ax-ipa.o: ax.c): Remove.
	(linux-i386-ipa.o: linux-i386-ipa.c): Remove.
	(linux-amd64-ipa.o: linux-amd64-ipa.c): Remove.
	(linux-aarch64-ipa.o: linux-aarch64-ipa.c): Remove.
	(linux-s390-ipa.o: linux-s390-ipa.c): Remove.
	(linux-ppc-ipa.o: linux-ppc-ipa.c): Remove.
2017-03-13 18:44:05 -04:00
Simon Marchi 36bc18a810 gdbserver: Use pattern rule for IPA objects from common/
gdb/gdbserver/ChangeLog:

	* Makefile.in (%-ipa.o: ../common/%.c): New rule.
	(print-utils-ipa.o: ../common/print-utils.c): Remove.
	(rsp-low-ipa.o: ../common/rsp-low.c): Remove.
	(errors-ipa.o: ../common/errors.c): Remove.
	(format-ipa.o: ../common/format.c): Remove.
	(common-utils-ipa.o: ../common/common-utils.c): Remove.
2017-03-13 18:44:05 -04:00
Simon Marchi a8ebe3d5f1 gdbserver: Use pattern rule for IPA objects from gdbserver/
gdb/gdbserver/ChangeLog:

	* Makefile.in (%-ipa.o: %.c): New rule.
	(tracepoint-ipa.o: tracepoint.c): Remove.
	(utils-ipa.o: utils.c): Remove.
	(remote-utils-ipa.o: remote-utils.c): Remove.
	(regcache-ipa.o: regcache.c): Remove.
	(i386-linux-ipa.o: i386-linux.c): Remove.
	(i386-mmx-linux-ipa.o: i386-mmx-linux.c): Remove.
	(i386-avx-linux-ipa.o: i386-avx-linux.c): Remove.
	(i386-mpx-linux-ipa.o: i386-mpx-linux.c): Remove.
	(i386-avx-mpx-linux-ipa.o: i386-avx-mpx-linux.c): Remove.
	(i386-avx-avx512-linux-ipa.o: i386-avx-avx512-linux.c): Remove.
	(i386-avx-mpx-avx512-pku-linux-ipa.o: i386-avx-mpx-avx512-pku-linux.c): Remove.
	(amd64-linux-ipa.o: amd64-linux.c): Remove.
	(amd64-avx-linux-ipa.o: amd64-avx-linux.c): Remove.
	(amd64-mpx-linux-ipa.o: amd64-mpx-linux.c): Remove.
	(amd64-avx-mpx-linux-ipa.o: amd64-avx-mpx-linux.c): Remove.
	(amd64-avx-avx512-linux-ipa.o: amd64-avx-avx512-linux.c): Remove.
	(amd64-avx-mpx-avx512-pku-linux-ipa.o: amd64-avx-mpx-avx512-pku-linux.c): Remove.
	(aarch64-ipa.o: aarch64.c): Remove.
	(s390-linux32-ipa.o: s390-linux32.c): Remove.
	(s390-linux32v1-ipa.o: s390-linux32v1.c): Remove.
	(s390-linux32v2-ipa.o: s390-linux32v2.c): Remove.
	(s390-linux64-ipa.o: s390-linux64.c): Remove.
	(s390-linux64v1-ipa.o: s390-linux64v1.c): Remove.
	(s390-linux64v2-ipa.o: s390-linux64v2.c): Remove.
	(s390-te-linux64-ipa.o: s390-te-linux64.c): Remove.
	(s390-vx-linux64-ipa.o: s390-vx-linux64.c): Remove.
	(s390-tevx-linux64-ipa.o: s390-tevx-linux64.c): Remove.
	(s390x-linux64-ipa.o: s390x-linux64.c): Remove.
	(s390x-linux64v1-ipa.o: s390x-linux64v1.c): Remove.
	(s390x-linux64v2-ipa.o: s390x-linux64v2.c): Remove.
	(s390x-te-linux64-ipa.o: s390x-te-linux64.c): Remove.
	(s390x-vx-linux64-ipa.o: s390x-vx-linux64.c): Remove.
	(s390x-tevx-linux64-ipa.o: s390x-tevx-linux64.c): Remove.
	(powerpc-32l-ipa.o: powerpc-32l.c): Remove.
	(powerpc-altivec32l-ipa.o: powerpc-altivec32l.c): Remove.
	(powerpc-cell32l-ipa.o: powerpc-cell32l.c): Remove.
	(powerpc-vsx32l-ipa.o: powerpc-vsx32l.c): Remove.
	(powerpc-isa205-32l-ipa.o: powerpc-isa205-32l.c): Remove.
	(powerpc-isa205-altivec32l-ipa.o: powerpc-isa205-altivec32l.c): Remove.
	(powerpc-isa205-vsx32l-ipa.o: powerpc-isa205-vsx32l.c): Remove.
	(powerpc-e500l-ipa.o: powerpc-e500l.c): Remove.
	(powerpc-64l-ipa.o: powerpc-64l.c): Remove.
	(powerpc-altivec64l-ipa.o: powerpc-altivec64l.c): Remove.
	(powerpc-cell64l-ipa.o: powerpc-cell64l.c): Remove.
	(powerpc-vsx64l-ipa.o: powerpc-vsx64l.c): Remove.
	(powerpc-isa205-64l-ipa.o: powerpc-isa205-64l.c): Remove.
	(powerpc-isa205-altivec64l-ipa.o: powerpc-isa205-altivec64l.c): Remove.
	(powerpc-isa205-vsx64l-ipa.o: powerpc-isa205-vsx64l.c): Remove.
	(tdesc-ipa.o: tdesc.c): Remove.
	(x32-linux-ipa.o: x32-linux.c): Remove.
	(x32-avx-linux-ipa.o: x32-avx-linux.c): Remove.
	(x32-avx512-linux-ipa.o: x32-avx512-linux.c): Remove.
2017-03-13 18:44:04 -04:00
Simon Marchi 50cfacb78f gdbserver: Use pattern rule for objects from arch/
gdb/gdbserver/ChangeLog:

	* Makefile.in (%.o: ../arch/%.c): New rule.
	(arm.o: ../arch/arm.c): Remove.
	(arm-linux.o: ../arch/arm-linux.c): Remove.
	(arm-get-next-pcs.o: ../arch/arm-get-next-pcs.c): Remove.
	(aarch64-insn.o: ../arch/aarch64-insn.c): Remove.
2017-03-13 18:44:03 -04:00
Simon Marchi c5a22423d0 gdbserver: Use pattern rule for objects from nat/
gdb/gdbserver/ChangeLog:

	* Makefile.in (%.o: ../nat/%.c): New rule.
	(x86-dregs.o: ../nat/x86-dregs.c): Remove.
	(amd64-linux-siginfo.o: ../nat/amd64-linux-siginfo.c): Remove.
	(linux-btrace.o: ../nat/linux-btrace.c): Remove.
	(linux-osdata.o: ../nat/linux-osdata.c): Remove.
	(linux-procfs.o: ../nat/linux-procfs.c): Remove.
	(linux-ptrace.o: ../nat/linux-ptrace.c): Remove.
	(linux-waitpid.o: ../nat/linux-waitpid.c): Remove.
	(mips-linux-watch.o: ../nat/mips-linux-watch.c): Remove.
	(ppc-linux.o: ../nat/ppc-linux.c): Remove.
	(linux-personality.o: ../nat/linux-personality.c): Remove.
	(aarch64-linux-hw-point.o: ../nat/aarch64-linux-hw-point.c): Remove.
	(aarch64-linux.o: ../nat/aarch64-linux.c): Remove.
	(x86-linux.o: ../nat/x86-linux.c): Remove.
	(x86-linux-dregs.o: ../nat/x86-linux-dregs.c): Remove.
	(linux-namespaces.o: ../nat/linux-namespaces.c): Remove.
2017-03-13 18:44:03 -04:00
Simon Marchi 6bda016bec gdbserver: Use pattern rule for objects from common/
gdb/gdbserver/ChangeLog:

	* Makefile.in (%.o: ../common/%.c): New rule.
	(signals.o: ../common/signals.c): Remove.
	(print-utils.o: ../common/print-utils.c): Remove.
	(rsp-low.o: ../common/rsp-low.c): Remove.
	(common-utils.o: ../common/common-utils.c): Remove.
	(posix-strerror.o: ../common/posix-strerror.c): Remove.
	(mingw-strerror.o: ../common/mingw-strerror.c): Remove.
	(vec.o: ../common/vec.c): Remove.
	(gdb_vecs.o: ../common/gdb_vecs.c): Remove.
	(xml-utils.o: ../common/xml-utils.c): Remove.
	(ptid.o: ../common/ptid.c): Remove.
	(buffer.o: ../common/buffer.c): Remove.
	(format.o: ../common/format.c): Remove.
	(filestuff.o: ../common/filestuff.c): Remove.
	(agent.o: ../common/agent.c): Remove.
	(errors.o: ../common/errors.c): Remove.
	(environ.o: ../common/environ.c): Remove.
	(common-debug.o: ../common/common-debug.c): Remove.
	(cleanups.o: ../common/cleanups.c): Remove.
	(common-exceptions.o: ../common/common-exceptions.c): Remove.
	(fileio.o: ../common/fileio.c): Remove.
	(common-regcache.o: ../common/common-regcache.c): Remove.
	(signals-state-save-restore.o: ../common/signals-state-save-restore.c): Remove.
	(new-op.o: ../common/new-op.c): Remove.
	(btrace-common.o: ../common/btrace-common.c): Remove.
2017-03-13 18:44:02 -04:00
Simon Marchi 21122961ec gdbserver: Use pattern rule for objects from target/
gdb/gdbserver/ChangeLog:

	* Makefile.in (%.o: ../target/%.c): New rule.
	(waitstatus.o: ../target/waitstatus.c): Remove.
2017-03-13 18:44:02 -04:00
Simon Marchi c362e6217b gdbserver: Use pattern rule for regformats source file generation
gdb/gdbserver/ChangeLog:

	* Makefile.in
	(%.c: ../regformats/%.dat,
	(%.c: ../regformats/arm/%.dat,
	(%.c: ../regformats/i386/%.dat,
	(%.c: ../regformats/rs6000/%.dat): New rules.
	(aarch64.c): Remove.
	(reg-arm.c): Remove.
	(arm-with-iwmmxt.c): Remove.
	(arm-with-vfpv2.c): Remove.
	(arm-with-vfpv3.c): Remove.
	(arm-with-neon.c): Remove.
	(reg-bfin.c): Remove.
	(reg-cris.c): Remove.
	(reg-crisv32.c): Remove.
	(i386.c): Remove.
	(i386-linux.c): Remove.
	(i386-avx.c): Remove.
	(i386-avx-linux.c): Remove.
	(i386-avx-avx512.c): Remove.
	(i386-avx-avx512-linux.c): Remove.
	(i386-mpx.c): Remove.
	(i386-mpx-linux.c): Remove.
	(i386-avx-mpx-avx512-pku.c): Remove.
	(i386-avx-mpx-avx512-pku-linux.c): Remove.
	(i386-avx-mpx.c): Remove.
	(i386-avx-mpx-linux.c): Remove.
	(i386-mmx.c): Remove.
	(i386-mmx-linux.c): Remove.
	(reg-ia64.c): Remove.
	(reg-m32r.c): Remove.
	(reg-m68k.c): Remove.
	(reg-cf.c): Remove.
	(mips-linux.c): Remove.
	(mips-dsp-linux.c): Remove.
	(mips64-linux.c): Remove.
	(mips64-dsp-linux.c): Remove.
	(nios2-linux.c): Remove.
	(powerpc-32.c): Remove.
	(powerpc-32l.c): Remove.
	(powerpc-altivec32l.c): Remove.
	(powerpc-cell32l.c): Remove.
	(powerpc-vsx32l.c): Remove.
	(powerpc-isa205-32l.c): Remove.
	(powerpc-isa205-altivec32l.c): Remove.
	(powerpc-isa205-vsx32l.c): Remove.
	(powerpc-e500l.c): Remove.
	(powerpc-64l.c): Remove.
	(powerpc-altivec64l.c): Remove.
	(powerpc-cell64l.c): Remove.
	(powerpc-vsx64l.c): Remove.
	(powerpc-isa205-64l.c): Remove.
	(powerpc-isa205-altivec64l.c): Remove.
	(powerpc-isa205-vsx64l.c): Remove.
	(s390-linux32.c): Remove.
	(s390-linux32v1.c): Remove.
	(s390-linux32v2.c): Remove.
	(s390-linux64.c): Remove.
	(s390-linux64v1.c): Remove.
	(s390-linux64v2.c): Remove.
	(s390-te-linux64.c): Remove.
	(s390-vx-linux64.c): Remove.
	(s390-tevx-linux64.c): Remove.
	(s390x-linux64.c): Remove.
	(s390x-linux64v1.c): Remove.
	(s390x-linux64v2.c): Remove.
	(s390x-te-linux64.c): Remove.
	(s390x-vx-linux64.c): Remove.
	(s390x-tevx-linux64.c): Remove.
	(tic6x-c64xp-linux.c): Remove.
	(tic6x-c64x-linux.c): Remove.
	(tic6x-c62x-linux.c): Remove.
	(reg-sh.c): Remove.
	(reg-sparc64.c): Remove.
	(reg-spu.c): Remove.
	(amd64.c): Remove.
	(amd64-linux.c): Remove.
	(amd64-avx.c): Remove.
	(amd64-avx-linux.c): Remove.
	(amd64-avx-avx512.c): Remove.
	(amd64-avx-avx512-linux.c): Remove.
	(amd64-mpx.c): Remove.
	(amd64-mpx-linux.c): Remove.
	(amd64-avx-mpx-avx512-pku.c): Remove.
	(amd64-avx-mpx-avx512-pku-linux.c): Remove.
	(amd64-avx-mpx.c): Remove.
	(amd64-avx-mpx-linux.c): Remove.
	(x32.c): Remove.
	(x32-linux.c): Remove.
	(x32-avx.c): Remove.
	(x32-avx-linux.c): Remove.
	(x32-avx-avx512.c): Remove.
	(x32-avx-avx512-linux.c): Remove.
	(reg-xtensa.c): Remove.
	(reg-tilegx.c): Remove.
	(reg-tilegx32.c): Remove.
2017-03-13 18:44:01 -04:00
Simon Marchi 7978d7c385 testsuite: Disable backslash_in_multi_line_command_test for old DejaGnus
I noticed that backslash_in_multi_line_command_test in
gdb.base/commands.exp failed on our RHEL6 servers.  I traced it to the
old version of DejaGnu (1.4.4).  I have found that instead of receiving
the expected:

  "print \\\nargc\n"

gdb received:

  "print  argc\n"

thus breaking the test and its purpose.  Versionof DejaGnu < 1.5 mess
up sending "\\\n", it somehow gets replaced with a space.  I found that
the following commit in DejaGnu fixed the issue:

http://git.savannah.gnu.org/cgit/dejagnu.git/commit/lib/remote.exp?id=3f39294f5cd6802858838d3bcc0ccce847ae17f2

Even though the commit is almost 10 years old, the following release of
DejaGnu was only in 2013, which is why we still have systems with the
old code.

If the DejaGnu version is < 1.5, we just skip the test.

gdb/testsuite/ChangeLog:

	* gdb.base/commands.exp (backslash_in_multi_line_command_test):
	Skip for versions of DejaGnu < 1.5.
2017-03-13 18:02:08 -04:00
Simon Marchi 896c0c1ede testsuite: Introduce dejagnu_version
The next patch will require checking the DejaGnu version.  There is
already a test that does this,
gdb.threads/attach-many-short-lived-threads.exp.  This patch introduces
a new procedure, dejagnu_version, and makes that test use it.

The version number is "right-padded" with zeroes, to make sure that we
always return a triplet (major, minor, patch).

The procedure does not consider the DejaGnu versions from git.  For
example, if you used DejaGnu from its current master branch, the version
would be "1.6.1-git", meaning that 1.6.1 will be the next release.  I
figured we'll cross that bridge when (and if) we get there.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (dejagnu_version): New proc.
	* gdb.threads/attach-many-short-lived-threads.exp (bad_dejagnu):
	Use dejagnu_version.
2017-03-13 18:02:07 -04:00
mark b9da89d161 Merge libiberty: Initialize d_printing in all cplus_demangle_fill_* functions.
While integrating the d_printing recursion guard change into gdb I
noticed we forgot to initialize the demangle_component d_printing
field in cplus_demangle_fill_{name,extended_operator,ctor,dtor}.
As is done in cplus_demangle_fill_{component,builtin_type,operator}.
It happened to work because in gcc all demangle_components were
allocated through d_make_empty. But gdb has its own allocation
mechanism (as might other users).

libiberty/ChangeLog:

       * cp-demangle.c (cplus_demangle_fill_name): Initialize
       demangle_component d_printing.
       (cplus_demangle_fill_extended_operator): Likewise.
       (cplus_demangle_fill_ctor): Likewise.
       (cplus_demangle_fill_dtor): Likewise.

gdb/ChangeLog:

       * cp-name-parser.y (make_empty): Initialize d_printing to zero.
2017-03-13 20:51:42 +01:00
Keith Seitz 5f4d108508 c++/8218: Destructors w/arguments.
For a long time now, c++/8218 has noted that GDB is printing argument types
for destructors:

(gdb) ptype A
type = class A {
  public:
    ~A(int);
}

This happens because cp_type_print_method_args doesn't ignore artificial
arguments.  [It ignores the first `this' pointer because it simply skips
the first argument for any non-static function.]

This patch fixes this:

(gdb) ptype  A
type = class A {
  public:
    ~A();
}

I've adjusted gdb.cp/templates.exp to account for this and added a new
passing regexp.

gdb/ChangeLog

	PR c++/8218
	* c-typeprint.c (cp_type_print_method_args): Skip artificial arguments.

gdb/testsuite/ChangeLog

	PR c++/8128
	* gdb.cp/templates.exp (test_ptype_of_templates): Remove argument
	type from destructor regexps.
	Add a branch which actually passes the test.
	Adjust "ptype t5i" test names.
2017-03-10 10:32:09 -08:00
Pedro Alves 1de05205af Avoid unstable test message in gdb.base/step-over-exit.exp
Currently diffing testrun results shows:

 -PASS: gdb.base/step-over-exit.exp: break *0x7ffff77e18c6 if main == 0
 +PASS: gdb.base/step-over-exit.exp: break *0x2aaaab0988c6 if main == 0

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

	* gdb.base/step-over-exit.exp: Add explicit test message.
2017-03-08 22:05:36 +00:00
Pedro Alves c65d6b55b3 Fix PR18360 - internal error when using "interrupt -a"
If you do "interrupt -a" just while some thread is stepping over a
breakpoint, gdb trips on an internal error.

The test added by this patch manages to trigger this consistently by
spawning a few threads that are constantly tripping on a conditional
breakpoint whose condition always evaluates to false.  With current
gdb, you get:

~~~
 interrupt -a
 .../src/gdb/inline-frame.c:343: internal-error: void skip_inline_frames(ptid_t): Assertion `find_inline_frame_state (ptid) == NULL' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n) FAIL: gdb.threads/interrupt-while-step-over.exp: displaced-stepping=on: iter=0: interrupt -a (GDB internal error)
[...]
 .../src/gdb/inline-frame.c:343: internal-error: void skip_inline_frames(ptid_t): Assertion `find_inline_frame_state (ptid) == NULL' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n) FAIL: gdb.threads/interrupt-while-step-over.exp: displaced-stepping=off: iter=0: wait for stops (GDB internal error)
~~~

The assertion triggers because we're processing a stop for a thread
that had already stopped before and thus had already its inline-frame
state filled in.

Calling handle_inferior_event_1 directly within a
"thread_stop_requested" observer is something that I've wanted to get
rid of before, for being fragile.  Nowadays, infrun is aware of
threads with pending events, so we can use that instead, and let the
normal fetch_inferior_event -> handle_inferior_event code path handle
the forced stop.

The change to finish_step_over is necessary because sometimes a thread
that was told to PTRACE_SINGLESTEP reports back a SIGSTOP instead of a
SIGTRAP (i.e., we tell it to single-step, and then interrupt it quick
enough that on the kernel side the thread dequeues the SIGTOP before
ever having had a chance of executing the instruction to be stepped).
SIGSTOP gets translated to a GDB_SIGNAL_0.  And then finish_step_over
would miss calling clear_step_over_info, and thus miss restarting the
other threads (which in this case of threads with pending events,
means setting their "resumed" flag, so their pending events can be
consumed).

And now that we always restart threads in finish_step_over, we no
longer need to do that in handle_signal_stop.

Tested on x86_64 Fedora 23, native and gdbserver.

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

	PR gdb/18360
	* infrun.c (start_step_over, do_target_resume, resume)
	(restart_threads): Assert we're not resuming a thread that is
	meant to be stopped.
	(infrun_thread_stop_requested_callback): Delete.
	(infrun_thread_stop_requested): If the thread is internally
	stopped, queue a pending stop event and clear the thread's
	inline-frame state.
	(handle_stop_requested): New function.
	(handle_syscall_event, handle_inferior_event_1): Use
	handle_stop_requested.
	(handle_stop_requested): New function.
	(handle_signal_stop): Set the thread's stop_signal here instead of
	at caller.
	(finish_step_over): Clear step over info unconditionally.
	(handle_signal_stop): If the user had interrupted the event
	thread, consider the stop a random signal.
	(handle_signal_stop) <signal arrived while stepping over
	breakpoint>: Don't restart threads here.
	(stop_waiting): Don't clear step-over info here.

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

	PR gdb/18360
	* gdb.threads/interrupt-while-step-over.c: New file.
	* gdb.threads/interrupt-while-step-over.exp: New file.
2017-03-08 18:54:34 +00:00
Pedro Alves 15c22686d0 gdb: Fix ATTRIBUTE_NONNULL usage
Should fix the build failure with Clang mentioned at
	<https://sourceware.org/bugzilla/show_bug.cgi?id=21206#c2>:

 In file included from ../../binutils-gdb/gdb/dwarf2read.c:72:
 ../../binutils-gdb/gdb/common/gdb_unlinker.h:35:35: error: '__nonnull__' attribute is invalid for the implicit this argument
   unlinker (const char *filename) ATTRIBUTE_NONNULL (1)
				   ^                  ~
 ../../binutils-gdb/gdb/../include/ansidecl.h:169:48: note: expanded from macro 'ATTRIBUTE_NONNULL'
 #  define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))

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

	PR 21206
	* common/gdb_unlinker.h (unlinker::unlinker): Attribute nonnull
	goes to argument 2, not 1.
2017-03-08 15:52:16 +00:00
Pedro Alves 2e86a2830c gdb.arch/amd64-entry-value-param*.exp: Make sure test messages are unique
gdb/testsuite/ChangeLog:
2017-03-08  Pedro Alves  <palves@redhat.com>

	* gdb.arch/amd64-entry-value-param-dwarf5.exp: Use with_test_prefix.
	* gdb.arch/amd64-entry-value-param.exp: Use with_test_prefix.
2017-03-08 14:17:23 +00:00
Pedro Alves 25dcbff6ef "gdb.arch/i386-pkru.exp: probe PKRU support" shouldn't FAIL if not supported
Currently I get:

 (gdb) print have_pkru()
 $1 = 0
 (gdb) FAIL: gdb.arch/i386-pkru.exp: probe PKRU support
 UNSUPPORTED: gdb.arch/i386-pkru.exp: processor does not support protection key feature.

Probing suceeded, so that should be a PASS -> UNSUPPORTED.

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

	* gdb.arch/i386-pkru.exp (probe PKRU support): Handle detecting
	PKRU as not supported as a PASS.
2017-03-08 13:09:45 +00:00
Pedro Alves dc9366eb05 gdb: Fix a few unstable test names
Avoid putting unstable path names in test messages, in order to avoid
spurious testrun result diffs like:

 [....]
 -PASS: gdb.base/break-fun-addr.exp: /home/pedro/gdb/test-build1/gdb/testsuite/outputs/gdb.base/break-fun-addr/break-fun-addr1: break *main
 +PASS: gdb.base/break-fun-addr.exp: /home/pedro/gdb/test-build2/gdb/testsuite/outputs/gdb.base/break-fun-addr/break-fun-addr1: break *main
 [....]

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

	* gdb.base/break-fun-addr.exp: Use $testfile1/$testfile2 for test
	prefix instead of $binfile1/$binfile2.
	* gdb.btrace/gcore.exp: Use "core" instead of unstable path name
	in test message.
	* gdb.python/py-completion.exp: Use "load python file" as test
	messages instead of unstable path names.
2017-03-08 12:46:44 +00:00
Pedro Alves 6e5d74e747 Fix PR 21218: GDB dumps core when escaping newline in multi-line command
With commit 3b12939dfc ("Replace the sync_execution global with a
new enum prompt_state tristate"), GDB started aborting if you try
splitting an input line with a continuation char (backslash) while in
a multi-line command:

 (gdb) commands
 Type commands for breakpoint(s) 1, one per line.
 End with a line saying just "end".
 >print \

 (gdb) 1      # note "(gdb)" incorrectly printed here.
 >end

 readline: readline_callback_read_char() called with no handler!
 $

That abort is actually a symptom of an old problem introduced when
gdb_readline_wrapper was rewritten to use asynchronous readline, back
in 2007.  Note how the "(gdb)" prompt is printed above in the "(gdb)
1" line.  Clearly it shouldn't be there, but it already was before the
commit mentioned above.  Fixing that also fixes the readline abort
shown above.

The problem starts when command_line_input passes a NULL prompt to
gdb_readline_wrapper when it finds previous incomplete input due to a
backslash, trying to fetch more input without printing another ">"
secondary prompt.  That itself should not be a problem, because
passing NULL to gdb_readline_wrapper has the same meaning as passing a
pointer to empty string, since gdb_readline_wrapper exposes the same
interface as 'readline(char *)'.  However, gdb_readline_wrapper passes
the prompt argument directly to display_gdb_prompt, and for the
latter, a NULL prompt argument has a different meaning - it requests
printing the primary prompt.

Before commit 782a7b8ef9c096 (which rewrote gdb_readline_wrapper to
use asynchronous readline), GDB behaved like this:

 (gdb) commands
 [....]
 >print \
 1
 >end
 (gdb)

The above is what this commit restores GDB back to.

New test included.

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

	PR cli/21218
	* top.c (gdb_readline_wrapper): Avoid passing NULL to
	display_gdb_prompt.
	(command_line_input): Add comment.

gdb/testsuite/ChangeLog:
2017-03-08  Pedro Alves  <palves@redhat.com>
	    Jan Kratochvil  <jan.kratochvil@redhat.com>

	PR cli/21218
	* gdb.base/commands.exp (backslash_in_multi_line_command_test):
	New proc.
	(top level): Call it.
2017-03-08 11:41:35 +00:00
Jiong Wang 5cf70512f8 [gdb, doc] Add missing escape character '@'
gdb/doc/
        * gdb.texinfo (Memory Protection Extensions): Add missing escape
	character "@".
2017-03-08 11:17:22 +00:00
Pedro Alves 9753a2f6d7 Fix PR tui/21216: TUI line breaks regression
Commit d7e747318f ("Eliminate make_cleanup_ui_file_delete / make
ui_file a class hierarchy") regressed the TUI's command window.
Newlines miss doing a "carriage return", resulting in output like:

~~~~~~~~~~~~~~~~~~
(gdb) helpList of classes of commands:

                                      aliases -- Aliases of other commands
                                                                          breakpoints -- Making program stop at certain points
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Before the commit mentioned above, the default ui_file->to_write
implementation had a hack that would defer into the ui_file->to_fputs
method.  The TUI's ui_file did not implement the to_write method, so
all writes would end up going to the ncurses window via tui_file_fputs
-> tui_puts.

After the commit above, the hack is gone, but the TUI's ui_file still
does not implement the ui_file::write method.  Since tui_file inherits
from stdio_file, writing to a tui_file ends up doing fwrite on the
FILE stream the TUI is "associated" with, via stdio_file::write,
instead of writing to the ncurses window.

The fix is to have tui_file override the "write" method.

New test included.

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

	PR tui/21216
	* tui/tui-file.c (tui_file::write): New.
	* tui/tui-file.h (tui_file): Override "write".
	* tui/tui-io.c (do_tui_putc, update_start_line): New functions,
	factored out from ...
	(tui_puts): ... here.
	(tui_putc): Use them.
	(tui_write): New function.
	* tui/tui-io.h (tui_write): Declare.

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

	PR tui/21216
	* gdb.tui/tui-nl-filtered-output.exp: New file.
2017-03-08 00:14:59 +00:00
Pedro Alves 1a4dd9ddae Move TUI completion tests to gdb.tui/completion.exp
gdb/testsuite/ChangeLog:
2017-03-08  Pedro Alves  <palves@redhat.com>

	* gdb.base/completion.exp: Move TUI completion tests to ...
	* gdb.tui/completion.exp: ... this new file.
2017-03-08 00:14:58 +00:00
Pedro Alves 7cbbff33a5 Move TUI testcases to new gdb/testsuite/gdb.tui/ directory
Let's start putting TUI tests in their own dir.

gdb/testsuite/
2017-03-08  Pedro Alves  <palves@redhat.com>

	* gdb.base/tui-disasm-long-lines.c,
	gdb.base/tui-disasm-long-lines.exp, gdb.base/tui-layout.c,
	gdb.base/tui-layout.exp: Move to ...
	* gdb.tui/: ... this new directory.
2017-03-08 00:14:58 +00:00
Sergio Durigan Junior 1672e0d98d Share gdb/environ.[ch] with gdbserver
We will need access to the environment functions when we share
fork_inferior between GDB and gdbserver, therefore we simply make the
API on gdb/environ.[ch] available on common/.  No extra adjustments
are needed to make it compile on gdbserver.

gdb/ChangeLog:
2017-03-07  Sergio Durigan Junior  <sergiodj@redhat.com>

	* Makefile.in (SFILES): Replace "environ.c" with
	"common/environ.c".
	(HFILES_NO_SRCDIR): Likewise, for "environ.h".
	* environ.c: Include "common-defs.h" instead of "defs.h.  Moved
	to...
	* common/environ.c: ... here.
	* environ.h: Moved to...
	* common/environ.h: ... here.

gdb/gdbserver/ChangeLog:
2017-03-07  Sergio Durigan Junior  <sergiodj@redhat.com>

	* Makefile.in (SFILES): Add "common/environ.c".
	(OBJS): Add "common/environ.h".
2017-03-07 15:39:35 -05:00
Peter Bergner f7bb4e3a0d GDB: Fix some null pointer dereferences due to disassembler-options patch.
gdb/
	* gdbarch.sh (pstring_ptr): New static function.
	(gdbarch_disassembler_options): Use it.
	(gdbarch_verify_disassembler_options): Print valid_disassembler_options,
	not valid_disassembler_option->name.
	* gdbarch.c: Regenerate.
2017-03-07 09:49:10 -06:00
Peter Bergner e45ced6c5e Remove use of the no longer needed -mminimal-toc option.
* config/powerpc/ppc64-linux.mh (MH_CFLAGS): Delete.
2017-03-07 09:39:13 -06:00
Pedro Alves 5f6fd32191 Fix "layout reg" crash
Commit d7e747318f ("Eliminate make_cleanup_ui_file_delete / make
ui_file a class hierarchy") introduced a problem when using "layout
regs", that leads gdb to crash when issuing:

./gdb ./a.out -ex 'layout regs' -ex start

From the backtrace, it's caused by this 'delete' on tui_restore_gdbout():

 (gdb) bt
 #0  0x00007ffff6b962b2 in free () from /lib64/libc.so.6
 #1  0x000000000059fa47 in tui_restore_gdbout (ui=0x22997b0) at ../../gdb/tui/tui-regs.c:714
 #2  0x0000000000619996 in do_my_cleanups (pmy_chain=pmy_chain@entry=0x1e08320 <cleanup_chain>, old_chain=old_chain@entry=0x235b4b0) at ../../gdb/common/cleanups.c:154
 #3  0x0000000000619b1d in do_cleanups (old_chain=old_chain@entry=0x235b4b0) at ../../gdb/common/cleanups.c:176
 #4  0x000000000059fb0d in tui_register_format (frame=frame@entry=0x22564e0, regnum=regnum@entry=0) at ../../gdb/tui/tui-regs.c:747
 #5  0x000000000059ffeb in tui_get_register (data=0x2434d18, changedp=0x0, regnum=0, frame=0x22564e0) at ../../gdb/tui/tui-regs.c:768
 #6  tui_show_register_group (refresh_values_only=<optimized out>, frame=0x22564e0, group=0x1e09250 <general_group>) at ../../gdb/tui/tui-regs.c:287
 #7  tui_show_registers (group=0x1e09250 <general_group>) at ../../gdb/tui/tui-regs.c:156
 #8  0x00000000005a07cf in tui_check_register_values (frame=frame@entry=0x22564e0) at ../../gdb/tui/tui-regs.c:496
 #9  0x00000000005a3e65 in tui_check_data_values (frame=frame@entry=0x22564e0) at ../../gdb/tui/tui-windata.c:232
 #10 0x000000000059cf65 in tui_refresh_frame_and_register_information (registers_too_p=1) at ../../gdb/tui/tui-hooks.c:156
 #11 0x00000000006d5c05 in generic_observer_notify (args=0x7fffffffdbe0, subject=<optimized out>) at ../../gdb/observer.c:167
 #12 observer_notify_normal_stop (bs=<optimized out>, print_frame=print_frame@entry=1) at ./observer.inc:61
 #13 0x00000000006a6409 in normal_stop () at ../../gdb/infrun.c:8364
 #14 0x00000000006af8f5 in fetch_inferior_event (client_data=<optimized out>) at ../../gdb/infrun.c:3990
 #15 0x000000000066f0fd in gdb_wait_for_event (block=block@entry=0) at ../../gdb/event-loop.c:859
 #16 0x000000000066f237 in gdb_do_one_event () at ../../gdb/event-loop.c:322
 #17 0x000000000066f386 in gdb_do_one_event () at ../../gdb/event-loop.c:353
 #18 0x00000000007411bc in wait_sync_command_done () at ../../gdb/top.c:570
 #19 0x0000000000741426 in maybe_wait_sync_command_done (was_sync=0) at ../../gdb/top.c:587
 #20 execute_command (p=<optimized out>, p@entry=0x7fffffffe43a "start", from_tty=from_tty@entry=1) at ../../gdb/top.c:676
 #21 0x00000000006c2048 in catch_command_errors (command=0x741200 <execute_command(char*, int)>, arg=0x7fffffffe43a "start", from_tty=1) at ../../gdb/main.c:376
 #22 0x00000000006c2b60 in captured_main_1 (context=0x7fffffffde70) at ../../gdb/main.c:1119
 #23 captured_main (data=0x7fffffffde70) at ../../gdb/main.c:1140
 #24 gdb_main (args=args@entry=0x7fffffffdf90) at ../../gdb/main.c:1158
 #25 0x0000000000408cf5 in main (argc=<optimized out>, argv=<optimized out>) at ../../gdb/gdb.c:32
 (gdb) f 1
 #1  0x000000000059fa47 in tui_restore_gdbout (ui=0x22997b0) at ../../gdb/tui/tui-regs.c:714
 714	  delete gdb_stdout;

The problem is simply that the commit mentioned above made the ui_file
that gdb_stdout is temporarily set to be a stack-allocated
string_file, while before it used to be a heap-allocated ui_file.  The
fix is simply to remove the now-incorrect delete.

New test included, which exercises enabling all TUI layouts, with and
without execution.  (This particular crash only triggers with
execution.)

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

	* tui/tui-regs.c (tui_restore_gdbout): Don't delete gdb_stdout.

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

	* gdb.base/tui-layout.c: New file.
	* gdb.base/tui-layout.exp: New file.
2017-03-07 13:54:02 +00:00
Pedro Alves 44959fa818 Rename gdb.base/tui-layout.exp -> gdb.base/tui-disasm-long-lines.exp
To better reflect what the testcase is about, and to make room for a
different testcase.

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

	* gdb.base/tui-layout.c: Rename to ...
	* gdb.base/tui-disasm-long-lines.c: ... this.
	* gdb.base/tui-layout.exp: Rename to ...
	* gdb.base/tui-disasm-long-lines.exp: ... this.
2017-03-07 13:53:29 +00:00