Commit Graph

2537 Commits

Author SHA1 Message Date
Tom Tromey 99598d713f Fix regression in "commands"
Pedro pointed out a regression in "commands", where trying to clear a
breakpoint's command list would fail:

    (top-gdb) commands
    Type commands for breakpoint(s) 3, one per line.
    End with a line saying just "end".
    >end
    No breakpoints specified.
    (top-gdb)

I believe the bug was introduced by my patch that changes
counted_command_line to be a shared_ptr.  This causes the problem
because now the counted_command_line in commands_command_1 can be NULL,
whereas previously it never could be.

After some discussion, we agreed to simply remove the error case from
commands_command_1.

2017-12-07  Tom Tromey  <tom@tromey.com>

	PR breakpoints/22511:
	* breakpoint.c (commands_command_1): Don't throw an exception when
	no commands have been read.

2017-12-07  Tom Tromey  <tom@tromey.com>

	* gdb.base/break.exp: Add test for empty "commands".
2017-12-07 14:52:20 -07:00
Sergio Lopez 3e1a70a018 Extend gdb.core/coredump-filter.exp to test dump-excluded-mappings.
gdb/testsuite/ChangeLog:
2017-11-30  Sergio Lopez  <slp@redhat.com>

	* gdb.core/coredump-filter.exp: Extend test to verify
	the functionality of the dump-excluded-mappings command.
2017-12-04 12:05:58 -05:00
Sergio Durigan Junior 97cbe998d0 Add support for the readnever concept
The purpose of this concept is to turn the load of debugging
information off, either globally (via the '--readnever' option), or
objfile-specific.  The implementation proposed here is an extension of
the patch distributed with Fedora GDB; looking at the Fedora patch
itself and the history, one can see some reasons why it was never
resubmitted:

  - The patch appears to have been introduced as a workaround, at
    least initially;
  - The patch is far from perfect, as it simply shunts the load of
    DWARF debugging information, without really worrying about the
    other debug format.
  - Who really does non-symbolic debugging anyways?

One use of this feature is when a user simply wants to do the
following sequence: attach, dump core, detach.  Loading the debugging
information in this case is an unnecessary cause of delay.

This patch expands the version shipped with Fedora GDB in order to
make the feature available for all the debuginfo backends, not only
for DWARF.  It also implements a per-objfile flag which can be
activated by using the "-readnever" command when using the
'add-symbol-file' or 'symbol-file' commands.

It's also worth mentioning that this patch tests whether GDB correctly
fails to initialize if both '--readnow' and '--readnever' options are
passed.

Tested on the BuildBot.

gdb/ChangeLog:

2017-12-01  Andrew Cagney  <cagney@redhat.com>
	    Joel Brobecker  <brobecker@adacore.com>
	    Sergio Durigan Junior  <sergiodj@redhat.com>

	* NEWS (Changes since GDB 8.0: Mention new '--readnever'
	feature.
	* coffread.c (coff_symfile_read): Do not map over sections with
	'coff_locate_sections' if readnever is on.
	* dwarf2read.c (dwarf2_has_info): Return 0 if
	readnever is on.
	* elfread.c (elf_symfile_read): Do not map over sections with
	'elf_locate_sections' if readnever is on.
	* main.c (validate_readnow_readnever): New function.
	(captured_main_1): Add support for --readnever.
	(print_gdb_help): Document --readnever.
	* objfile-flags.h (enum objfile_flag) <OBJF_READNEVER>: New
	flag.
	* symfile.c (readnever_symbol_files): New global.
	(symbol_file_add_with_addrs): Set 'OBJF_READNEVER' when
	'READNEVER_SYMBOL_FILES' is set.
	(validate_readnow_readnever): New function.
	(symbol_file_command): Handle '-readnever' option.
	Call 'validate_readnow_readnever'.
	(add_symbol_file_command): Handle '-readnever' option.
	Call 'validate_readnow_readnever'.
	(_initialize_symfile): Document new '-readnever' option for
	both 'symbol-file' and 'add-symbol-file' commands.
	* top.h (readnever_symbol_files): New extern global.
	* xcoffread.c (xcoff_initial_scan): Do not read debug
	information if readnever is on.

gdb/doc/ChangeLog:

2017-12-01  Andrew Cagney  <cagney@redhat.com>
	    Joel Brobecker  <brobecker@adacore.com>
	    Sergio Durigan Junior  <sergiodj@redhat.com>

	* gdb.texinfo (File Options): Document --readnever.
	(Commands to Specify Files): Likewise, for 'symbol-file' and
	'add-symbol-file'.

gdb/testsuite/ChangeLog:

2017-12-01  Joel Brobecker  <brobecker@adacore.com>
	    Sergio Durigan Junior  <sergiodj@redhat.com>
	    Pedro Alves  <palves@redhat.com>

	* gdb.base/readnever.c, gdb.base/readnever.exp: New files.
2017-12-01 21:28:31 -05:00
Sergio Durigan Junior 40fc416f4e Make '{add-,}symbol-file' not care about the position of command line arguments
This is a bug that's been detected while doing the readnever work.

If you use 'symbol-file' or 'add-symbol-file', the position of each
argument passed to the command matters.  This means that if you do:

  (gdb) symbol-file -readnow /foo/bar

The symbol file specified will (correctly) have all of its symbols
read by GDB (because of the -readnow flag).  However, if you do:

  (gdb) symbol-file /foo/bar -readnow

GDB will silently ignore the -readnow flag, because it was specified
after the filename.  This is not a good thing to do and may confuse
the user.

To address that, I've modified the argument parsing mechanisms of
symbol_file_command and add_symbol_file_command to be
"position-independent".  I have also added one error call at the end
of add_symbol_file_command's argument parsing logic, which now clearly
complains if no filename has been specified.  Both commands now
support the "--" option to stop argument processing.

This patch provides a testcase for both commands, in order to make
sure that the argument order does not matter.  It has been
regression-tested on BuildBot.

gdb/ChangeLog:

2017-12-01  Sergio Durigan Junior  <sergiodj@redhat.com>

	* symfile.c (symbol_file_command): Call
	'symbol_file_add_main_1' only after processing all command
	line options.
	(add_symbol_file_command): Modify logic to make arguments
	position-independent.

gdb/testsuite/ChangeLog:

2017-12-01  Sergio Durigan Junior  <sergiodj@redhat.com>

	* gdb.base/relocate.exp: Add tests to guarantee that arguments
	to 'symbol-file' and 'add-symbol-file' can be
	position-independent.
2017-12-01 17:01:24 -05:00
Sergio Durigan Junior 7f0f8ac8b1 Revert "Add support for the readnever concept"
This reverts commit e2e321740c.

It was mistakenly pushed.
2017-12-01 16:58:47 -05:00
Sergio Durigan Junior e2e321740c Add support for the readnever concept
The purpose of this concept is to turn the load of debugging
information off, either globally (via the '--readnever' option), or
objfile-specific.  The implementation proposed here is an extension of
the patch distributed with Fedora GDB; looking at the Fedora patch
itself and the history, one can see some reasons why it was never
resubmitted:

  - The patch appears to have been introduced as a workaround, at
    least initially;
  - The patch is far from perfect, as it simply shunts the load of
    DWARF debugging information, without really worrying about the
    other debug format.
  - Who really does non-symbolic debugging anyways?

One use of this feature is when a user simply wants to do the
following sequence: attach, dump core, detach.  Loading the debugging
information in this case is an unnecessary cause of delay.

This patch expands the version shipped with Fedora GDB in order to
make the feature available for all the debuginfo backends, not only
for DWARF.  It also implements a per-objfile flag which can be
activated by using the "-readnever" command when using the
'add-symbol-file' or 'symbol-file' commands.

It's also worth mentioning that this patch tests whether GDB correctly
fails to initialize if both '--readnow' and '--readnever' options are
passed.

Tested on the BuildBot.

gdb/ChangeLog:

2017-12-01  Andrew Cagney  <cagney@redhat.com>
	    Joel Brobecker  <brobecker@adacore.com>
	    Sergio Durigan Junior  <sergiodj@redhat.com>

	* NEWS (Changes since GDB 8.0: Mention new '--readnever'
	feature.
	* coffread.c (coff_symfile_read): Do not map over sections with
	'coff_locate_sections' if readnever is on.
	* dwarf2read.c (dwarf2_has_info): Return 0 if
	readnever is on.
	* elfread.c (elf_symfile_read): Do not map over sections with
	'elf_locate_sections' if readnever is on.
	* main.c (validate_readnow_readnever): New function.
	(captured_main_1): Add support for --readnever.
	(print_gdb_help): Document --readnever.
	* objfile-flags.h (enum objfile_flag) <OBJF_READNEVER>: New
	flag.
	* symfile.c (readnever_symbol_files): New global.
	(symbol_file_add_with_addrs): Set 'OBJF_READNEVER' when
	'READNEVER_SYMBOL_FILES' is set.
	(validate_readnow_readnever): New function.
	(symbol_file_command): Handle '-readnever' option.
	Call 'validate_readnow_readnever'.
	(add_symbol_file_command): Handle '-readnever' option.
	Call 'validate_readnow_readnever'.
	(_initialize_symfile): Document new '-readnever' option for
	both 'symbol-file' and 'add-symbol-file' commands.
	* top.h (readnever_symbol_files): New extern global.
	* xcoffread.c (xcoff_initial_scan): Do not read debug
	information if readnever is on.

gdb/doc/ChangeLog:

2017-12-01  Andrew Cagney  <cagney@redhat.com>
	    Joel Brobecker  <brobecker@adacore.com>
	    Sergio Durigan Junior  <sergiodj@redhat.com>

	* gdb.texinfo (File Options): Document --readnever.
	(Commands to Specify Files): Likewise, for 'symbol-file' and
	'add-symbol-file'.

gdb/testsuite/ChangeLog:

2017-12-01  Joel Brobecker  <brobecker@adacore.com>
	    Sergio Durigan Junior  <sergiodj@redhat.com>
	    Pedro Alves  <palves@redhat.com>

	* gdb.base/readnever.c, gdb.base/readnever.exp: New files.
2017-12-01 12:23:30 -05:00
Yao Qi 1cc75e929f Replace mail address with the URL in copyright header
The copyright header in most of GDB files were changed from mail address
to the URL in the conversion to GPLv3 in Aug 2007.  However, some files
still use mail address instead of the URL.  This patch fixes them.

gdb/testsuite:

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

	* gdb.arch/aarch64-atomic-inst.exp: Replace mail address with
	the URL in copyright header.
	* gdb.arch/aarch64-fp.exp: Likewise.
	* gdb.arch/ppc64-atomic-inst.exp: Likewise.
	* gdb.arch/ppc64-isa207-atomic-inst.exp: Likewise.
	* gdb.base/expand-psymtabs.exp: Likewise.
	* gdb.cp/expand-psymtabs-cxx.exp: Likewise.
	* gdb.fortran/common-block.exp: Likewise.
	* gdb.fortran/common-block.f90: Likewise.
	* gdb.fortran/logical.exp: Likewise.
	* gdb.fortran/vla-datatypes.f90: Likewise.
	* gdb.fortran/vla-sub.f90: Likewise.
2017-12-01 11:34:14 +00:00
Pedro Alves a20714ff39 Make "break foo" find "A::foo", A::B::foo", etc. [C++ and wild matching]
This patch teaches GDB about setting breakpoints in all scopes
(namespaces and classes) by default.

Here's a contrived example:

  (gdb) b func<tab>
  (anonymous namespace)::A::function()            Bn::(anonymous namespace)::B::function()        function(int, int)
  (anonymous namespace)::B::function()            Bn::(anonymous namespace)::function()           gdb::(anonymous namespace)::A::function()
  (anonymous namespace)::B::function() const      Bn::(anonymous namespace)::function(int, int)   gdb::(anonymous namespace)::function()
  (anonymous namespace)::function()               Bn::B::func()                                   gdb::(anonymous namespace)::function(int, int)
  (anonymous namespace)::function(int, int)       Bn::B::function()                               gdb::A::func()
  A::func()                                       Bn::func()                                      gdb::A::function()
  A::function()                                   Bn::function()                                  gdb::func()
  B::func()                                       Bn::function(int, int)                          gdb::function()
  B::function()                                   Bn::function(long)                              gdb::function(int, int)
  B::function() const                             func()                                          gdb::function(long)
  B::function_const() const                       function()
  (gdb) b function
  Breakpoint 1 at 0x4005ce: function. (26 locations)

  (gdb) b B::function<tab>
  (anonymous namespace)::B::function()        B::function() const                         Bn::B::function()
  (anonymous namespace)::B::function() const  B::function_const() const
  B::function()                               Bn::(anonymous namespace)::B::function()
  (gdb) b B::function
  Breakpoint 1 at 0x40072c: B::function. (6 locations)

To get back the original behavior of interpreting the function name as
a fully-qualified name, you can use the new "-qualified" (or "-q")
option/flag (added by this commit).  For example:

 (gdb) b B::function
 (anonymous namespace)::B::function()        B::function() const                         Bn::B::function()
 (anonymous namespace)::B::function() const  B::function_const() const
 B::function()                               Bn::(anonymous namespace)::B::function()

vs:

 (gdb) b -qualified B::function
 B::function()              B::function() const        B::function_const() const

I've chosen "-qualified" / "-q" because "-f" (for "full" or
"fully-qualified") is already taken for "-function".

Note: the "-qualified" option works with both linespecs and explicit
locations.  I.e., these are equivalent:

 (gdb) b -q func
 (gdb) b -q -f func

and so are these:

 (gdb) b -q filename.cc:func
 (gdb) b -q -s filename.cc -f func
 (gdb) b -s filename.cc -q -f func
 (gdb) b -s filename.cc -f func -q

To better understand why I consider wild matching the better default,
consider what happens when we get to the point when _all_ of GDB is
wrapped under "namespace gdb {}".  I have a patch series that does
that, and when I started debugging that GDB, I immediately became
frustrated.  You'd have to write "b gdb::internal_error", "b
gdb::foo", "b gdb::bar", etc. etc., which gets annoying pretty
quickly.  OTOH, consider how this makes it very easy to set
breakpoints in classes wrapped in anonymous namespaces.  You just
don't think of them, GDB finds the symbols for you automatically.

(At the Cauldron a couple months ago, several people told me that they
run into a similar issue when debugging other C++ projects.  One
example was when debugging LLVM, which puts all its code under the
"llvm" namespace.)

Implementation-wise, what the patch does is:

  - makes C++ symbol name hashing only consider the last component of
    a symbol name. (so that we can look up symbol names by
    last-component name only).

  - adds a C++ symbol name matcher for symbol_name_match_type::WILD,
    which ignores missing leading specifiers / components.

  - adjusts a few preexisting testsuite tests to use "-qualified" when
    they mean it.

  - adds new testsuite tests.

  - adds unit tests.

Grows the gdb.linespec/ tests like this:

  -# of expected passes           7823
  +# of expected passes           8977

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

	* NEWS: Mention that breakpoints on C++ functions are now set on
	on all namespaces/classes by default, and mention "break
	-qualified".
	* ax-gdb.c (agent_command_1): Adjust to pass a
	symbol_name_match_type to new_linespec_location.
	* breakpoint.c (parse_breakpoint_sals): Adjust to
	get_linespec_location's return type change.
	(strace_marker_create_sals_from_location): Adjust to pass a
	symbol_name_match_type to new_linespec_location.
	(strace_marker_decode_location): Adjust to get_linespec_location's
	return type change.
	(strace_command): Adjust to pass a symbol_name_match_type to
	new_linespec_location.
	(LOCATION_HELP_STRING): Add paragraph about wildmatching, and
	mention "-qualified".
	* c-lang.c (cplus_language_defn): Install cp_search_name_hash.
	* completer.c (explicit_location_match_type::MATCH_QUALIFIED): New
	enumerator.
	(complete_address_and_linespec_locations): New parameter
	'match_type'.  Pass it down.
	(explicit_options): Add "-qualified".
	(collect_explicit_location_matches): Pass the requested match type
	to the linespec completers.  Handle MATCH_QUALIFIED.
	(location_completer): Handle "-qualified" combined with linespecs.
	* cp-support.c (cp_search_name_hash): New.
	(cp_symbol_name_matches_1): Implement wild matching for C++.
	(cp_fq_symbol_name_matches): Reimplement.
	(cp_get_symbol_name_matcher): Return different matchers depending
	on the lookup name's match type.
	(selftests::test_cp_symbol_name_matches): Add wild matching tests.
	* cp-support.h (cp_search_name_hash): New declaration.
	* dwarf2read.c
	(selftests::dw2_expand_symtabs_matching::test_symbols): Add
	symbols.
	(test_dw2_expand_symtabs_matching_symbol): Add wild matching
	tests.
	* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Adjust to
	pass a symbol_name_match_type to new_linespec_location.
	* linespec.c (linespec_parse_basic): Lookup function symbols using
	the parser's symbol name match type.
	(convert_explicit_location_to_linespec): New
	symbol_name_match_type parameter.  Pass it down to
	find_linespec_symbols.
	(convert_explicit_location_to_sals): Pass the location's name
	match type to convert_explicit_location_to_linespec.
	(parse_linespec): New match_type parameter.  Save it in the
	parser.
	(linespec_parser_new): Default to symbol_name_match_type::WILD.
	(linespec_complete_function): New symbol_name_match_type
	parameter.  Use it.
	(complete_linespec_component): Pass down the parser's recorded
	name match type.
	(linespec_complete_label): New symbol_name_match_type parameter.
	Use it.
	(linespec_complete): New symbol_name_match_type parameter.  Save
	it in the parser and pass it down.  Adjust to
	get_linespec_location's prototype change.
	(find_function_symbols, find_linespec_symbols): New
	symbol_name_match_type parameter.  Pass it down instead of
	assuming symbol_name_match_type::WILD.
	* linespec.h (linespec_complete, linespec_complete_function)
	(linespec_complete_label): New symbol_name_match_type parameter.
	* location.c (event_location::linespec_location): Now a struct
	linespec_location.
	(EL_LINESPEC): Adjust.
	(initialize_explicit_location): Default to
	symbol_name_match_type::WILD.
	(new_linespec_location): New symbol_name_match_type parameter.
	Record it in the location.
	(get_linespec_location): Now returns a struct linespec_location.
	(new_explicit_location): Also copy func_name_match_type.
	(explicit_to_string_internal)
	(string_to_explicit_location): Handle "-qualified".
	(copy_event_location): Adjust to LINESPEC_LOCATION type change.
	Copy symbol_name_match_type fields.
	(event_location_deleter::operator()): Adjust to LINESPEC_LOCATION
	type change.
	(event_location_to_string): Adjust to LINESPEC_LOCATION type
	change.  Handle "-qualfied".
	(string_to_explicit_location): Handle "-qualified".
	(string_to_event_location_basic): New symbol_name_match_type
	parameter.  Pass it down.
	(string_to_event_location): Handle "-qualified".
	* location.h (struct linespec_location): New.
	(explicit_location::func_name_match_type): New field.
	(new_linespec_location): Now returns a const linespec_location *.
	(string_to_event_location_basic): New symbol_name_match_type
	parameter.
	(explicit_completion_info::saw_explicit_location_option): New
	field.
	* mi/mi-cmd-break.c (mi_cmd_break_insert_1): Adjust to pass a
	symbol_name_match_type to new_linespec_location.
	* python/py-breakpoint.c (bppy_init): Likewise.
	* python/python.c (gdbpy_decode_line): Likewise.

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

	* gdb.base/langs.exp: Use -qualified.
	* gdb.cp/meth-typedefs.exp: Use -qualified, and add tests without
	it.
	* gdb.cp/namespace.exp: Use -qualified.
	* gdb.linespec/cpcompletion.exp (overload-2, fqn, fqn-2)
	(overload-3, template-overload, template-ret-type, const-overload)
	(const-overload-quoted, anon-ns, ambiguous-prefix): New
	procedures.
	(test_driver): Call them.
	* gdb.cp/save-bp-qualified.cc: New.
	* gdb.cp/save-bp-qualified.exp: New.
	* gdb.linespec/explicit.exp: Test -qualified.
	* lib/completion-support.exp (completion::explicit_opts_list): Add
	"-qualified".
	* lib/gdb.exp (gdb_breakpoint): Handle "qualified".

gdb/doc/ChangeLog:
2017-11-29  Pedro Alves  <palves@redhat.com>

	* gdb.texinfo (Linespec Locations): Document how "function" is
	interpreted in C++ and Ada.  Document "-qualified".
	(Explicit Locations): Document how "-function" is interpreted in
	C++ and Ada.  Document "-qualified".
2017-11-29 19:43:48 +00:00
Tom Tromey 02ca603a48 Fix add-symbol-file usage and errors
This patch updates add-symbol-file help and error text.

It changes add-symbol-file to throw an exception if "-s" is seen but
not all of the arguments are given.  Previously this was silently
ignored.

It changes the unrecognized argument message to more clearly state
what went wrong.

Finally, it updates the usage line in the help text to follow GNU
style regarding "metasyntactic variables"; a change I believe should
be made to all gdb help messages.

gdb/ChangeLog
2017-11-29  Tom Tromey  <tom@tromey.com>

	* symfile.c (add_symbol_file_command): Error if some arguments to
	-s are missing.  Change unrecognized-argument error message.
	(_initialize_symfile): Fix usage text for add-symbol-file.

gdb/testsuite/ChangeLog
2017-11-29  Tom Tromey  <tom@tromey.com>

	* gdb.base/relocate.exp: Update invalid argument test.
	Add new tests for invalid arguments.
2017-11-29 09:21:43 -07:00
Pedro Alves a81aaca057 Fix completing an empty string
Earlier while working on the big completer rework series, I managed to
break

 (gdb) [TAB]

locally, and make GDB crash, but only notice a few weeks down the
road, because we have no test for that...

I also noticed that:

 (gdb)     [TAB]

didn't work (didn't show all commands as matches), even though
entering a command with leading whitespace works:

 (gdb)     help

This commit fixes the latter and adds a testcase that covers both
issues.

The gdb.base/completion.exp change is necessary because the new test
has a file name that also starts with "gdb.base/complet", making that
particular test ambiguous.  Adding another letter disambiguates.

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

	* completer.c (complete_line_internal_1): Skip spaces until the
	start of the command.

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

	* gdb.base/complete-empty.exp: New file.
	* gdb.base/completion.exp: Adjust.
2017-11-25 00:20:31 +00:00
Yao Qi 7c3c1aa885 [testsuite] Pass -g3 to clang in gdb.base/macscp.exp
clang accepts option -g3 too.  I checked the manual of xlc and icc, looks
they don't accept -g3 option, so I don't pass -g3 for them.

gdb/testsuite:

2017-11-23  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/macscp.exp: Append -g3 to additional_flags for clang.
2017-11-23 15:31:13 +00:00
Yao Qi 1daad298d6 [testsuite] Pass pthreads in prepare_for_testing
"pthreads" in the right flag to pass in prepare_for_testing to linker,
instead of additional_flags.  Without this patch, the test case can't be
complied by clang.

gdb compile failed, clang: warning: -lpthread: 'linker' input unused

gdb/testsuite:

2017-11-22  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/info-os.exp: Pass pthreads.
	* gdb.multi/multi-attach.exp: Likewise.
2017-11-22 16:50:53 +00:00
Yao Qi dc196b230b [testsuite] Pass -pie in ldflags
-pie is a linker flag, it should be passed via "ldflags", instead
of "additional_flags".  Otherwise, clang complains,

clang: warning: argument unused during compilation: '-pie'

gdb/testsuite:

2017-11-22  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/attach-pie-noexec.exp: Pass "-pie" in ldflags.
	* gdb.base/break-interp.exp: Likewise.
	* gdb.base/jit-attach-pie.exp: Likewise.
2017-11-22 14:35:01 +00:00
Ulrich Weigand 2400729ecf Target FP: Make use of MPFR if available
This second patch introduces mfpr_float_ops, an new implementation
of target_float_ops.  This implements precise emulation of target
floating-point formats using the MPFR library.  This is then used
to perform operations on types that do not match any host type.

Note that use of MPFR is still not required.  The patch adds
a configure option --with-mpfr similar to --with-expat.  If use of
MPFR is disabled via the option or MPFR is not available, code will
fall back to current behavior.  This means that operations on types
that do not match any host type will be implemented on the host
long double type instead.

A new test case verifies that we can correctly print the largest
__float128 value now.

gdb/ChangeLog:
2017-11-22  Ulrich Weigand  <uweigand@de.ibm.com>

	* NEWS: Document use of GNU MPFR.
	* README: Likewise.

	* Makefile.in (LIBMPFR): Add define.
	(CLIBS): Add $(LIBMPFR).
	* configure.ac: Add --with-mpfr configure option.
	* configure: Regenerate.
	* config.in: Regenerate.

	* target-float.c [HAVE_LIBMPFR]: Include <mpfr.h>.
	(class mpfr_float_ops): New type.
	(mpfr_float_ops::from_target): Two new overloaded functions.
	(mpfr_float_ops::to_target): Likewise.
	(mpfr_float_ops::to_string): New function.
	(mpfr_float_ops::from_string): Likewise.
	(mpfr_float_ops::to_longest): Likewise.
	(mpfr_float_ops::from_longest): Likewise.
	(mpfr_float_ops::from_ulongest): Likewise.
	(mpfr_float_ops::to_host_double): Likewise.
	(mpfr_float_ops::from_host_double): Likewise.
	(mpfr_float_ops::convert): Likewise.
	(mpfr_float_ops::binop): Likewise.
	(mpfr_float_ops::compare): Likewise.
	(get_target_float_ops): Use mpfr_float_ops if available.

gdb/doc/ChangeLog:
2017-11-22  Ulrich Weigand  <uweigand@de.ibm.com>

	* gdb.texinfo (Requirements): Document use of GNU MPFR.

gdb/testsuite/ChangeLog:
2017-11-22  Ulrich Weigand  <uweigand@de.ibm.com>

	* gdb.base/float128.c (large128): New variable.
	* gdb.base/float128.exp: Add test to print largest __float128 value.
2017-11-22 13:53:43 +01:00
Pedro Alves 73fcf6418d Fix gdb.base/whatis-ptype-typedefs.exp on 32-bit archs
The gdb.base/whatis-ptype-typedefs.exp testcase has several tests that
fail on 32-bit architectures.  E.g., on 'x86-64 -m32', I see:

 ...
 FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: cast: whatis (float_typedef) v_uchar_array_t_struct_typedef (invalid)
 FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: cast: ptype (float_typedef) v_uchar_array_t_struct_typedef (invalid)
 ...

gdb.log:

 (gdb) whatis (float_typedef) v_uchar_array_t_struct_typedef
 type = float_typedef
 (gdb) FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: cast: whatis (float_typedef) v_uchar_array_t_struct_typedef (invalid)

As Simon explained [1], the issue boils down to the fact that on
64-bit, this is an invalid cast:

 (gdb) p (float_typedef) v_uchar_array_t_struct_typedef
 Invalid cast.

while on 32 bits it is valid:

 (gdb) p (float_typedef) v_uchar_array_t_struct_typedef
 $1 = 1.16251721e-41

The expression basically tries to cast an array (which decays to a
pointer) to a float.  The cast works on 32 bits because a float and a
pointer are of the same size, and value_cast works in that case:

~~~
   More general than a C cast: accepts any two types of the same length,
   and if ARG2 is an lvalue it can be cast into anything at all.  */
~~~

On 64 bits, they are not the same size, so it ends throwing the
"Invalid cast" error.

The testcase is expecting the invalid cast behavior, thus the FAILs.

A point of these tests was to cover as many code paths in value_cast
as possible, as a sort of documentation of the current behavior:

    # The main idea here is testing all the different paths in the
    # value casting code in GDB (value_cast), making sure typedefs are
    # preserved.
...
    # We try all combinations, even those that don't parse, or are
    # invalid, to catch the case of a regression making them
    # inadvertently valid.  For example, these convertions are
    # invalid:
...

In that spirit, this commit makes the testcase adjust itself depending
on size of floats and pointers, and also test floats of different
sizes.

Passes cleanly on x86-64 GNU/Linux both -m64/-m32.

[1] - https://sourceware.org/ml/gdb-patches/2017-11/msg00382.html

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

	* gdb.base/whatis-ptype-typedefs.c (double_typedef)
	(long_double_typedef): New typedefs.
	Use DEF on double and long double.
	* gdb.base/whatis-ptype-typedefs.exp: Add double and long double
	cases.
	(run_tests): New 'float_ptr_same_size', 'double_ptr_same_size',
	and 'long_double_ptr_same_size' locals.  Use them to decide
	whether cast from array/function to float is valid/invalid.
2017-11-20 23:03:17 +00:00
Pedro Alves a0922d80df Test breakpoint commands w/ "continue" + Ctrl-C
This adds the testcase that exposed the multiple problems with Ctrl-C
handling fixed by the previous patches, when run against both native
and gdbserver GNU/Linux.

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

	* gdb.base/bp-cmds-continue-ctrl-c.c: New file.
	* gdb.base/bp-cmds-continue-ctrl-c.exp: New file.
2017-11-16 18:44:44 +00:00
Pedro Alves 968a13f836 Fix gdb.base/starti.exp racy test
This commit fixes a couple problems with gdb.base/starti.exp, causing
spurious FAILs.

The first is a double-prompt problem:

~~~
 (gdb) PASS: gdb.base/starti.exp: hook-stop
 starti
 [....]
 gdb_expect_list pattern: /\$1 = 0/
 $1 = 0

 gdb_expect_list pattern: //
 0x00007ffff7ddcc80 in _start () from /lib64/ld-linux-x86-64.so.2

 (gdb)                                         # EXPECTED PROMPT
 (gdb) PASS: gdb.base/starti.exp: starti       # ANOTHER PROMPT!
 break main
~~~

This happens because the test uses gdb_test_sequence with no command,
like this:

 gdb_test_sequence "" "starti" {
     "Program stopped."
     "\\$1 = 0"
 }

but gdb_test_sequence doesn't have a check for empty command like
gdb_test_multiple does, and so sends "\n" to GDB:

 proc gdb_test_sequence { command test_name expected_output_list } {
     global gdb_prompt
     if { $test_name == "" } {
	 set test_name $command
     }
     lappend expected_output_list ""; # implicit ".*" before gdb prompt
     send_gdb "$command\n"
     return [gdb_expect_list $test_name "$gdb_prompt $" $expected_output_list]
 }

"starti" is a no-repeat command, so pressing <ret> just makes another
prompt appear, confusing the following gdb_test/gdb_test_multiple/etc.

Even with that fixed, the testcase is still racy though.

The second problem is that sometimes the "continue" test times out
here:

~~~
 continue
 Continuing.
 $2 = 1


 gdb_expect_list pattern: /.*Breakpoint .*main \(\) at .*starti.c.*/
 Breakpoint 1, main () at /home/pedro/src/gdb/testsuite/gdb.base/starti.c:29
 29	  return 0;
 (gdb) gdb_expect_list pattern: //
 * hung here *
~~~

The problem is that the too-greedy ".*" trailing match in
gdb_expect_list's pattern ends up consuming GDB's prompt too soon.
Fix that by removing the unnecessary trailing ".*".  While at it,
remove all ".*"s to be stricter.

Tested on x86_64 GNU/Linux.

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

	* gdb.base/starti.exp ("continue" test): Remove ".*"s from
	pattern.
	* lib/gdb.exp (gdb_test_sequence): Don't send empty command to
	GDB.
2017-11-16 11:57:01 +00:00
Pedro Alves 2c88253fc4 Fix racy output matching in gdb.base/memattr.exp
Testing with:
 $ make check-read1 TESTS="gdb.base/memattr.exp"


Exposes a testcase bug that can result in racy fails:

  info mem
  Using user-defined memory regions.
  Num Enb Low Addr           High Addr          Attrs
  1   y   0x0000000000601060 0x0000000000601160 wo nocache
  2   y   0x0000000000601180 0x0000000000601280 ro nocache
  4   y   0x0000000000601280 0x0000000000601380 rw nocache
  3   y   0x0000000000601380 0x0000000000601480 rw nocache
  5   y   0x0000000000601480 0x0000000000601580 rw nocache
  (gdb) FAIL: gdb.base/memattr.exp: info mem (1)

The problem is that:

  "Attrs\[^\n\r]*.."

matches:

  "Attrs \r"

when the output buffer is filled with partial output like this:

  "info mem\r\nUsing user-defined memory regions.\r\nNum Enb Low Addr           High Addr          Attrs \r"

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

	* gdb.base/memattr.exp: Tighten regexes to match the end line.
2017-11-09 22:45:39 +00:00
Pedro Alves c7a3851716 Fix racy output matching in gdb.base/completion.exp
Testing with:
 $ make check-read1 TESTS="gdb.base/completion.exp"

Exposes a testcase bug that can result in racy fails:

  FAIL: gdb.base/completion.exp: command-name completion limiting using tab character
  ERROR: Undefined command "".
  FAIL: gdb.base/completion.exp: symbol-name completion limiting using tab character
  FAIL: gdb.base/completion.exp: symbol-name completion limiting using complete command

testsuite/gdb.log shows:

  (gdb) PASS: gdb.base/completion.exp: set max-completions 5
  p^G
  passcount     path          print         print-object  printf
  *** List may be truncated, max-completions reached. ***
  (gdb) FAIL: gdb.base/completion.exp: command-name completion limiting using tab character
  pcomplete p
  Undefined command: "pcomplete".  Try "help".
  (gdb) ERROR: Undefined command "".

The problem is that the expect buffer can get filled with partial
output that ends in the gdb prompt, and so the default FAIL inside
gdb_test_multiple matches.

Fix that by splitting the gdb_test_multiple in two stages.  Since that
is done in more than one place in the testcase, move the otherwise
duplicate code to helper procedures.

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

	* gdb.base/completion.exp (ignore_and_resync, test_tab_complete):
	New procedures, factored out from ...
	(top level): ... here, and adjusted to avoid expecting beyond the
	prompt in one go.
2017-11-09 22:45:06 +00:00
Pedro Alves 95e95a6de2 Make breakpoint/location number parsing error output consistent
... and also make GDB catch a few more cases of invalid input.

This fixes the inconsistency in GDB's output (e.g., "bad" vs "Bad")
exposed by the new tests added in the previous commit.

Also, makes the "0-0" and "inverted range" cases be loud errors.

Also makes GDB reject negative breakpoint number in ranges.  We
already rejected negative number literals, but you could still subvert
that via convenience variables, like:

  (gdb) set $bp -1
  (gdb) disable $bp.1-2

The change to get_number_trailer fixes a bug exposed by the new tests.
The function did not handle parsing "-$num".  [This wasn't visible in
the gdb.multi/tids.exp (which has similar tests) because the TID range
parsing is implemented differently.]

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

	* breakpoint.c (extract_bp_kind): New enum.
	(extract_bp_num, extract_bp_or_bp_range): New functions, partially
	factored out from ...
	(extract_bp_number_and_location): ... here.
	* cli/cli-utils.c (get_number_trailer): Handle '-$variable'.

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

	* gdb.base/ena-dis-br.exp (test_ena_dis_br): Adjust test.
	* gdb.cp/ena-dis-br-range.exp: Adjust tests.
	(disable_invalid, disable_inverted, disable_negative): New
	procedures.
	("bad numbers"): New set of tests.
2017-11-07 11:07:19 +00:00
Pedro Alves cc638e867c Breakpoint location parsing: always error instead of warning
It's odd that when parsing a breakpoint or location number, we error out
in most cases, but warn in others.

  (gdb) disable 1-
  bad breakpoint number at or near: '1-'
  (gdb) disable -1
  bad breakpoint number at or near: '-1'
  (gdb) disable .foo
  bad breakpoint number at or near: '.foo'
  (gdb) disable foo.1
  Bad breakpoint number 'foo.1'
  (gdb) disable 1.foo
  warning: bad breakpoint number at or near '1.foo'

This changes GDB to always error out.  It required touching one testcase
that expected the warning.

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

	* breakpoint.c (extract_bp_number_and_location): Change return
	type to void.  Throw error instead of warning.
	(enable_disable_command): Adjust.

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

	* gdb.base/ena-dis-br.exp: Don't expect "warning:".
2017-11-07 11:06:00 +00:00
Xavier Roirand d0fe47010f Allow enabling/disabling breakpoint location ranges
When a breakpoint has multiple locations, like e.g.:

 Num  Type       Disp Enb  Address    What
 1    breakpoint keep y    <MULTIPLE>
 1.1                  y    0x080486a2 in void foo<int>()...
 1.2                  y    0x080486ca in void foo<double>()...
 [....]
 1.5                  y    0x080487fa in void foo<long>()...

it's possible to enable/disable the individual locations using the
'<breakpoint_number>.<location_number>' syntax, like e.g.:

 (gdb) disable 1.2 1.3 1.4 1.5

That's inconvenient when you have a long list of locations to disable,
however.

This patch adds shorthand for the above, by making it possible to
specify a range of locations with the following syntax (similar to
thread id ranges):

 <breakpoint_number>.<first_location_number>-<last_location_number>

For example, the command above can now be simplified to:

 (gdb) disable 1.2-5

gdb/ChangeLog:
2017-11-07  Xavier Roirand  <roirand@adacore.com>
	    Pedro Alves  <palves@redhat.com>

	* breakpoint.c (map_breakpoint_number_range): New, factored out
	from ...
	(map_breakpoint_numbers): ... here.
	(find_location_by_number): Change parameters from string to
	breakpoint number and location.
	(extract_bp_number_and_location): New function.
	(enable_disable_bp_num_loc)
	(enable_disable_breakpoint_location_range)
	(enable_disable_command): New functions, factored out ...
	(enable_command, disable_command): ... these functions, and
	adjusted to support ranges.
	* NEWS: Document enable/disable breakpoint location range feature.

gdb/doc/ChangeLog:
2017-11-07  Xavier Roirand  <roirand@adacore.com>
	    Pedro Alves  <palves@redhat.com>

	* gdb.texinfo (Set Breaks): Document support for breakpoint
	location ranges in the enable/disable commands.

gdb/testsuite/ChangeLog:
2017-11-07  Xavier Roirand  <roirand@adacore.com>
	    Pedro Alves  <palves@redhat.com>

	* gdb.base/ena-dis-br.exp: Add reference to
	gdb.cp/ena-dis-br-range.exp.
	* gdb.cp/ena-dis-br-range.exp: New file.
	* gdb.cp/ena-dis-br-range.cc: New file.
2017-11-07 11:00:31 +00:00
Pedro Alves 46f67f80dd Test attaching to a process that isn't a process group leader
The patch at
<https://sourceware.org/ml/gdb-patches/2017-11/msg00039.html> was
proposing to add an assertion to child_terminal_init that turns out
would fail if you tried to attach to a process that isn't a process
group leader.

Since the testsuite failed to catch the problem, this commit adds a
new testcase that would catch it, like:

  (gdb) attach 12415
  Attaching to program: build/gdb/testsuite/outputs/gdb.base/attach-non-pgrp-leader/attach-non-pgrp-leader, process 12415
  src/gdb/inflow.c:180: internal-error: void child_terminal_init(target_ops*): Assertion `getpgid (inf->pid) == inf->pid' failed.
  A problem internal to GDB has been detected,
  further debugging may prove unreliable.
  Quit this debugging session? (y or n) FAIL: gdb.base/attach-non-pgrp-leader.exp: child: attach to child (GDB internal error)

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

	* gdb.base/attach-non-pgrp-leader.c: New.
	* gdb.base/attach-non-pgrp-leader.exp: New.
2017-11-06 16:32:04 +00:00
Pedro Alves 792ccf005f Fix racy test in gdb.base/new-ui.exp
I noticed gdb.base/new-ui.exp failing once here with:

 FAIL: gdb.base/new-ui.exp: do_test: delete all breakpoints on extra console (got interactive prompt)
 FAIL: gdb.base/new-ui.exp: do_test: main console: next causes no spurious output on other console
 FAIL: gdb.base/new-ui.exp: do_test: main console: breakpoint hit reported on other console

The problem is 100% reproducible with check-read1:
  $ make check-read1 TESTS="gdb.*/new-ui.exp"

testsuite/gdb.log shows:
  delete
  Delete all breakpoints? (y or n) [answered Y; input not from terminal]
  (gdb) FAIL: gdb.base/new-ui.exp: do_test: delete all breakpoints on extra console (got interactive prompt)

This commit fixes the problem.

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

	* gdb.base/new-ui.exp (do_test): Split "delete all breakpoints on
	extra console" test in two stages.
2017-10-24 23:22:56 +01:00
Pedro Alves 10389c2c8b Fix unstable test names in gdb.base/startup-with-shell.exp
Currently, if you diff testsuite/gdb.sum of two builds in different
directories you see these spurious hunks:

  -PASS: gdb.base/startup-with-shell.exp: touch /home/pedro/gdb1/build/gdb/testsuite/outputs/gdb.base/startup-with-shell/unique-file.unique-extension
  +PASS: gdb.base/startup-with-shell.exp: touch /home/pedro/gdb2/build/gdb/testsuite/outputs/gdb.base/startup-with-shell/unique-file.unique-extension

  -PASS: gdb.base/startup-with-shell.exp: startup_with_shell = on; run_args = *.unique-extension: set args /home/pedro/gdb1/build/gdb/testsuite/outputs/gdb.base/startup-with-shell/*.unique-extension
  +PASS: gdb.base/startup-with-shell.exp: startup_with_shell = on; run_args = *.unique-extension: set args /home/pedro/gdb2/build/gdb/testsuite/outputs/gdb.base/startup-with-shell/*.unique-extension

  -PASS: gdb.base/startup-with-shell.exp: startup_with_shell = off; run_args = *.unique-extension: set args /home/pedro/gdb1/build/gdb/testsuite/outputs/gdb.base/startup-with-shell/*.unique-extension
  +PASS: gdb.base/startup-with-shell.exp: startup_with_shell = off; run_args = *.unique-extension: set args /home/pedro/gdb2/build/gdb/testsuite/outputs/gdb.base/startup-with-shell/*.unique-extension

Since the run_args arguments are already shown in the test prefix, we
can change the "set args" test name to literally "set args $run_args".
I.e., after this commit we'll show:

  PASS: gdb.base/startup-with-shell.exp: startup_with_shell = on; run_args = *.unique-extension: set args $run_args
  PASS: gdb.base/startup-with-shell.exp: startup_with_shell = off; run_args = *.unique-extension: set args $run_args
  PASS: gdb.base/startup-with-shell.exp: startup_with_shell = on; run_args = $TEST: set args $run_args
  PASS: gdb.base/startup-with-shell.exp: startup_with_shell = off; run_args = $TEST: set args $run_args

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

	* gdb.base/startup-with-shell.exp ('touch $unique_file'): Don't
	include the unstable output directory name in the test's name.
	(initial_setup_simple) <'set args'>: Use custom test name.
2017-10-24 10:52:09 +01:00
Pedro Alves 15763a09d4 Fix 'gdb.base/quit.exp hangs forever' if the test fails
The [wait -i $gdb_spawn_id] in the test is dangerous in the sense that
it won't be subject to timeout logic.  So if GDB fails quiting, this
testcase hangs forever, hanging the test run with it.  See:
  https://sourceware.org/ml/gdb-patches/2016-10/msg00728.html

Instead of 'wait'ing directly, use gdb_test_multiple and expect 'eof'.

Tested that the testcase no longer hangs by hacking the test to send
"info threads" instead of "quit".

Tested with
  --target_board={unix, native-gdbserver,native-extended-gdbserver}
and tested with
  --host_board=local-remote-host
as well.

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

	* gdb.base/quit.exp: Use gdb_test_multiple and expect 'eof' before
	'wait -i'.  Use gdb_assert and remote_close.
2017-10-20 15:33:57 +01:00
Pedro Alves a75868f50b Fix inferior deadlock with "target remote | CMD"
Comparing test results between

  --target_board=native-gdbserver
  --target_board=native-stdio-gdbserver

I noticed that gdb.base/bigcore.exp is failing with native-stdio-gdbserver:

  Running src/gdb/testsuite/gdb.base/bigcore.exp ...
  FAIL: gdb.base/bigcore.exp: continue (timeout)
  ...

The problem is that:

  1. When debugging with "target remote | CMD", the inferior's
     stdout/stderr streams are connected to a pipe.

  2. The bigcore.c program prints a lot to the screen before it
     reaches the breakpoint location that the "continue" shown above
     wants to reach.

  3. GDB is not flushing the inferior's output pipe while the inferior
     is running.

  4. The pipe becomes full.

  5. The inferior thus deadlocks.

The bug is #3 above, which is what this commit fixes.  A new test is
added, that specifically exercises this scenario.  The test fails
before the fix, and passes after, and gdb.base/bigcore.exp also starts
passing.

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

	* ser-base.c (ser_base_read_error_fd): Delete the file handler if
	async.
	(handle_error_fd): New function.
	(ser_base_async): Add/delete an event loop file handler for
	error_fd.

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

	* gdb.base/long-inferior-output.c: New file.
	* gdb.base/long-inferior-output.exp: New file.
2017-10-19 16:00:21 +01:00
Pedro Alves 8484c95545 Add several "quit with live inferior" tests
In my multi-target branch, I had managed to break GDB exiting
successfuly in response to "quit" or SIGHUP/SIGTERM when:

 - you're debugging with "target extended-remote",
 - have more than one inferior loaded in gdb, some running, and at
   least one not running, and,
 - quit gdb with the inferior that is not running yet selected.

The testsuite still passed cleanly anyway.  I only noticed because I
was left with a bunch of core dumps in the gdb/testsuite/ directory --
the testsuite infrastructure closes GDB's pty after running each
testcase, which results in GDB getting a SIGHUP and should make GDB
exit gracefully.  If GDB crashes at that point though, there's no
indication about it in gdb.sum/gdb.log.

This commit adds a multitude of tests exercising quitting GDB with
live inferiors, some of which would have caught the problem.

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

	* gdb.base/quit-live.c: New file.
	* gdb.base/quit-live.exp: New file.
2017-10-17 14:58:54 +01:00
Pedro Alves 300b6685f1 Skip a few tests on targets that can't use the "run" commmand.
These tests want to use raw "run", so skip them on targets that can't
do that.

Also adds a small utility procedure that clearly conveys intent instead of
explicitly checking use_gdb_stub in the testcases.

This makes sure these testcases continue to be skipped with
--target_board=native-gdbserver once that board stops setting
is_remote.

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

	* lib/gdb.exp (target_can_use_run_cmd): New procedure.
	* gdb.base/annota1.exp: Use it instead of is_remote.
	* gdb.base/annota3.exp: Use it instead of is_remote.
	* gdb.cp/annota2.exp: Use it instead of is_remote.
	* gdb.cp/annota3.exp: Use it instead of is_remote.
	* gdb.multi/bkpt-multi-exec.exp: Use it instead of is_remote.
2017-10-13 18:11:31 +01:00
Pedro Alves 50500caf81 Fix gdb.base/testenv.exp against --target_board=native-extended-gdbserver
Currently we get:

  Running ..../src/gdb/testsuite/gdb.base/testenv.exp ...
  FAIL: gdb.base/testenv.exp: test no TEST_GDB var
  FAIL: gdb.base/testenv.exp: test with one TEST_GDB var
  FAIL: gdb.base/testenv.exp: test with two TEST_GDB var
  FAIL: gdb.base/testenv.exp: test with one TEST_GDB var, after unset
  FAIL: gdb.base/testenv.exp: test with TEST_GDB_GLOBAL
  FAIL: gdb.base/testenv.exp: test with TEST_GDB_GLOBAL unset

The problem is that the testcase relies on stdio.  While we could fix
this for gdbserver by read output from inferior_spawn_id, a better fix
it to not rely on stdio at all.  That's what this commit does.
Instead, it reads variables off of the inferior to extract the
necessary information.

Along the way, most of the .exp file is reimplemented/cleaned up using
more modern mechanisms.  E.g., with_test_prefix, proc_with_prefix,
save_vars, etc.  Also, a missing check for "is_remote host" is added.

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

	* gdb.base/testenv.exp: Check use_gdb_stub instead of is_remote.
	(test_num_test_vars, run_and_count_vars, find_env)
	(test_set_unset_env, test_inherit_env_var): New procedures.
	(top level): Use them.
2017-10-13 17:50:19 +01:00
Pedro Alves 8b0553c18f Make gdb.base/find-unmapped.exp pass on remote targets
Currently, with --target_board=native-extended-gdbserver, we get:

  Running .../src/gdb/testsuite/gdb.base/find-unmapped.exp ...
  FAIL: gdb.base/find-unmapped.exp: find global_var_0, global_var_2, 0xff
  FAIL: gdb.base/find-unmapped.exp: find global_var_1, global_var_2, 0xff
  FAIL: gdb.base/find-unmapped.exp: find global_var_2, (global_var_2 + 16), 0xff

This commit makes the test pass there, and also enables in on
--target_board=native-gdbserver, and other remote targets.

I've filed PR gdb/22293 to track the missing-warning problem.

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

	PR gdb/22293
	* gdb.base/find-unmapped.exp: Don't skip if is_remote target.
	(top level): Move some tests to ...
	(test_not_found): ... this new procedure.
	(top level): Call it.
2017-10-13 16:34:50 +01:00
Pedro Alves 7594f62360 Fix gdb.base/term.exp on non-"target native" boards
With --target_board=native-extended-gdbserver, we get:

  Running .../src/gdb/testsuite/gdb.base/term.exp ...
  FAIL: gdb.base/term.exp: info terminal at breakpoint

  (gdb) info terminal
  No saved terminal information.

Fix it by running the test everywhere, and expecting different output
on non-native targets.

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

	* gdb.base/term.exp: Don't skip if is_remote target.  Instead,
	expect different "info terminal" output if testing with a
	non-native target.
2017-10-13 13:41:44 +01:00
Pedro Alves df479dc6e0 Tweak gdb.base/corefile.exp is_remote check
1. Otherwise, when we make native-gdbserver board no longer is_remote,
   we get:

  Running .../src/gdb/testsuite/gdb.base/corefile.exp ...
  ERROR: tcl error sourcing .../src/gdb/testsuite/gdb.base/corefile.exp.
  ERROR: gdbserver does not support attach 9327 without extended-remote
      while executing
  "error "gdbserver does not support $command without extended-remote""

  That's fixed by using can_spawn_for_attach instead.

2. The gdb_protocol check fixes this current problem with
   --target_board=extended-remote-gdbserver:

     Running .../src/gdb/testsuite/gdb.base/corefile.exp ...
     FAIL: gdb.base/corefile.exp: run: with core
     FAIL: gdb.base/corefile.exp: run: core file is cleared
     FAIL: gdb.base/corefile.exp: attach: with core
     FAIL: gdb.base/corefile.exp: attach: core file is cleared

   gdb.log:
     (...)
     attach 10859
     Don't know how to attach.  Try "help target".
     (...)

The fix for #2 alone would fix #1 too, but can_spawn_for_attach
expresses the requirement directly, so I still left it there.

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

	* gdb.base/corefile.exp (corefile_test_run): Skip if gdb_protocol
	is set.
	(corefile_test_attach): Likewise.  Check can_spawn_for_attach
	instead of is_remote.
2017-10-13 12:15:52 +01:00
Pedro Alves 23fb630af0 Fix is_remote check in gdb.base/remote.exp
1. Otherwise, when the native-gdbserver board stops setting is_remote,
   this test would stop running there.

2. Makes the test run with --target_board=native-extended-gdbserver
   too.

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

	* gdb.base/remote.exp: Check gdb_protocol instead of is_remote.
	(top level): Add comment.
2017-10-13 11:20:37 +01:00
Pedro Alves cc77b1dc33 gdb.base/remote.exp: Fix typo and add missing return
(Dropped 'u' while at it because we're supposed to prefer American
English spelling...)

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

	* gdb.base/remote.exp (top level): Fix comment typo and add
	missing return.
2017-10-13 11:14:16 +01:00
Pedro Alves 27c9e813f9 Make gdb.base/solib-nodir.exp work with --target_board=native-extended-gdbserver
Fixes:
 Running .../src/gdb/testsuite/gdb.base/solib-nodir.exp ...
 FAIL: gdb.base/solib-nodir.exp: library loaded

... by using the new "set cwd" command.

gdb/testsuite/ChangeLog:
2017-10-13  Pedro Alves  <palves@redhat.com>
	    Simon Marchi <simon.marchi@polymtl.ca>

	* gdb.base/solib-nodir.exp: Split is_remote and skip_shlib_tests
	calls and add comments.  Skip test if use_gdb_stub is set.
	(top level): Use "set cwd" command instead of "cd" command.
2017-10-13 10:29:30 +01:00
Pedro Alves 5e830d9807 Eliminate is_remote check in gdb.base/shlib-call.exp
gdb/testsuite/ChangeLog:
2017-10-13  Pedro Alves  <palves@redhat.com>

	* gdb.base/shlib-call.exp (top level): Use gdb_run_cmd and remove
	is_remote target check.
2017-10-13 10:22:09 +01:00
Pedro Alves f5ca00321d Eliminate is_remote check in gdb.base/scope.exp
This commit makes --target_board=native-gdbserver (and in principle
all other is_remote boards) pass all the same gdb.base/scope.exp tests
as native testing.

I first wrote the gdb.base/scope.exp change described in the ChangeLog
below and in the new comments in the patch, knowing that gdb_file_cmd
was the right thing to use here.

However, that revealed that the native-extended-gdbserver board should
be overriding gdb_file_cmd+gdb_reload instead of gdb_load, as is
hinted at by the comments on top of the default implementations in
testsuite/lib/gdb.exp, because otherwise a gdb_run_cmd after
gdb_file_cmd misses setting "set remote exec-file".  However, if we do
that and remove gdb_load, then we regress gdb.base/dbx.exp, so for now
keep the gdb_load override as well.

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

	* gdb.base/scope.exp: Use build_executable + clean_restart +
	gdb_file_cmd instead of prepare_for_testing and no longer skip
	"before run" tests on is_remote target boards.  Update comments.
	* boards/native-extended-gdbserver.exp
	(extended_gdbserver_load_last_file): New, factored out from ...
	(gdb_load): ... this.  Move further below and add comment.
	(extended_gdbserver_gdb_file_cmd, gdb_file_cmd, gdb_reload): New.
2017-10-13 01:27:18 +01:00
Pedro Alves 8aed1c0d04 Remove references to gdb64 in the testsuite
I'm not sure whether this gdb64 was ever a thing in the upstream repo,
but it certainly doesn't exist nowadays.

AFAICT, this came in with the original big merge with the HP tree:
https://sourceware.org/ml/gdb-patches/1999-q2/msg00149.html

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

	* gdb.base/attach.exp: Remove references to gdb64.
	* gdb.base/dbx.exp: Remove references to gdb64.
2017-10-13 00:40:23 +01:00
Simon Marchi cfa34c871c Remove is_remote check in labels.exp
This works fine with remote target boards.

gdb/testsuite/ChangeLog:
2017-10-12  Simon Marchi  <simon.marchi@polymtl.ca>
	    Pedro Alves  <palves@redhat.com>

	* gdb.base/label.exp: Remove is_remote target check.
2017-10-12 23:14:09 +01:00
Pedro Alves 9192b7decc Make gdb.base/auvx.exp work with --target_board=native-extended-gdbserver
Currently we get:
 Running .../src/gdb/testsuite/gdb.base/auxv.exp ...
 WARNING: can't generate a core file - core tests suppressed - check ulimit -c

After this commit we get all the same PASSes as when native testing.

The problem is that the testcase wants to create a core dump in a
temporary directory and it is using the "cd" command to start the
inferior with that directory as current directory, but that command
only affects the inferior's cwd when native debugging.  Fix it by
using using the new "set cwd" command instead, which works with
gdbserver as well.

This still won't work with stub-like targets, because with those when
we connect the inferior is already running.  It'd be possible to make
it work by making the inferior itself change dirs, but we'll need to
make the native-gdbserver board no longer set is_remote first.

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

	* gdb.base/auvx.exp (coredir): Update comment.
	(top level) <core_works>: Use "set cwd" command instead of "cd"
	command.
2017-10-12 23:06:15 +01:00
Pedro Alves 6bf0052db8 Run gdb.base/catch-fork-static.exp on remote target boards
Another case of a stale check.  We support following forks in the
remote protocol nowadays.

gdb/testsuite/ChangeLog:
2017-10-12  Pedro Alves  <palves@redhat.com>
	    Simon Marchi  <simon.marchi@polymtl.ca>

	* gdb.base/catch-fork-static.exp: No longer skip on is_remote
	target boards.
2017-10-12 20:06:59 +01:00
Pedro Alves e48ef82dd2 checkpoint.exp: Check for non-"target native" instead of isnative/is_remote
This gets rid of a number of FAILs with
--target_board=native-extended-gdbserver.

The fact that checkpointing does not work has nothing to do with
dejagnu's native and remote concepts.  It only works with native Linux
targets because the implementation is currently baked with
linux-nat.c.

gdb/testsuite/ChangeLog:
2017-10-12  Pedro Alves  <palves@redhat.com>
	    Simon Marchi  <simon.marchi@polymtl.ca>

	* gdb.base/checkpoint.exp: Don't check is_remote or isnative.
	Instead skip if there's any gdb_protocol set.
2017-10-12 19:54:57 +01:00
Simon Marchi 8d7aea574a Remove is_remote target check from gdb.base/dprintf-non-stop.exp
1. is_remote is not the right check.

2. Both Simon & Pedro ran it continuously for some time against
   native-gdbserver and didn't see a failure.

3. The test has been running against native-extended-gdbserver anyway.

gdb/testsuite/ChangeLog:
2017-10-12  Simon Marchi  <simon.marchi@polymtl.ca>
	    Pedro Alves  <palves@redhat.com>

	* gdb.base/dprintf-non-stop.exp: Remove is_remote target check.
2017-10-12 19:33:06 +01:00
Pedro Alves 30440677f3 Tighten remote check in gdb.base/argv0-symlink.exp
Check for gdbserver instead of dejagnu remote.  Unlike what the
comment says, the test actually fails with target remote + gdbserver
(it does pass with extended-remote).  The result is:

 FAIL -> KFAIL with --target_board=native-gdbserver
 KPASS -> PASS with --target_board=native-extended-gdbserver

gdb/testsuite/ChangeLog:
2017-10-12  Pedro Alves  <palves@redhat.com>
	    Simon Marchi  <simon.marchi@polymtl.ca>

	* gdb.base/argv0-symlink.exp: kfail on remote gdbserver,
	instead of on dejagnu remote boards.
2017-10-12 19:16:54 +01:00
Pedro Alves 4e04f0450f Enable gdb.base/inferior-died.exp on is_remote target boards
We support follow-fork in the remote protocol nowadays.

Also, the right way to enable non-stop mode is to do it before
connecting, and for use_gdb_stub boards, that means we have to do it
at gdb_load time.  The "modern" pattern for that is to pass non-stop
in GDBFLAGS.

This makes the test pass with --target_board=native-gdbserver.

gdb/testsuite/ChangeLog:
2017-10-12  Pedro Alves  <palves@redhat.com>
	    Simon Marchi <simon.marchi@polymtl.ca>

	* gdb.base/inferior-died.exp: Remove is_remote and isnative
	checks.  Use build_executable + clean_restart instead of
	prepare_for_testing.  Pass "set non-stop on" via GDBFLAGS instead
	of enabling non-stop after starting gdb.
2017-10-12 18:39:13 +01:00
Pedro Alves 5c9e4427a7 Fix gdb.base/print-file-var-main.c value check logic
Fix a typo introduced in commit c56e7c4390 ("Make ctxobj.exp and
print-file-var.exp work on all platforms.").

This doesn't really affect the outcome of the testcase.  I only
noticed the typo because I stepped through the program manually.

To avoid such problems if the test is extended, this moves the STOP
marker until after the program self-validates the values.  With the
typo in place, this alone would have resulted in a test FAIL.  I.e.,
it'd have caught the typo.

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

	* gdb.base/print-file-var-main.c: Fix get_version_2 value check
	logic.  Move STOP marker after the value checks.
	* gdb.base/print-file-var.exp (continue to STOP marker): Tighten
	regexp.
2017-10-09 12:33:31 +01:00
Ulrich Weigand 3b4b2f160d Clean up some DFP interfaces
This cleans up a number of interfaces in dfp.c / dfp.h.  Specifically:

- The decimal_from_string / decimal_to_string routines are C++-ified
  to operate on std::string instead of character buffers.  In the
  decimal_from_string, the boolean return value now actually is bool
  instead of an int.

- The decimal_from_integral and decimal_from_doublest routines take
  an struct value as input.  This is not really appropriate at the low
  level the DFP routines sit, so this replaced them with new routines
  decimal_from_longest / decimal_from_ulongest / decimal_from_doublest
  that operate on contents instead.

- To mirror the decimal_from_[u]longest, a new decimal_to_longest
  routine is added as well, which can be used in unpack_long to
  avoid an unnecessary conversion via DOUBLEST.

Note that the decimal_from_longest / decimal_from_ulongest routines
are actually more powerful than decimal_from_integral: the old routine
would only accept integer *types* of at most four bytes size, while
the new routines accept all integer *values* that fit in an [u]int32_t,
no matter which type they came from.  The DFP tests are updated to
allow for this larger range of integers that can be converted.

gdb/ChangeLog:
2017-10-05  Ulrich Weigand  <uweigand@de.ibm.com>

	* dfp.h (MAX_DECIMAL_STRING): Move to dfp.c.
	(decimal_to_string): Return std::string object.
	(decimal_from_string): Accept std::string object.  Return bool.
	(decimal_from_integral, decimal_from_doublest): Remove.
	(decimal_from_longest): Add prototype.
	(decimal_from_ulongest): Likewise.
	(decimal_to_longest): Likewise.
	(decimal_from_doublest): Likewise.
	* dfp.c: Do not include "gdbtypes.h" or "value.h".
	(MAX_DECIMAL_STRING): Move here.
	(decimal_to_string): Return std::string object.
	(decimal_from_string): Accept std::string object.  Return bool.
	(decimal_from_integral): Remove, replace by ...
	(decimal_from_longest, decimal_from_ulongest): ... these new functions.
	(decimal_to_longest): New function.
	(decimal_from_floating): Remove, replace by ...
	(decimal_from_doublest): ... this new function.
	(decimal_to_doublest): Update to new decimal_to_string interface.

	* value.c (unpack_long): Use decimal_to_longest.
	* valops.c (value_cast): Use decimal_from_doublest instead of
	decimal_from_floating.  Use decimal_from_[u]longest isntead of
	decimal_from_integral.
	* valarith.c (value_args_as_decimal): Likewise.
	* valprint.c (print_decimal_floating): Update to new
	decimal_to_string interface.
	* printcmd.c (printf_decfloat): Likewise.
	* c-exp.y (parse_number): Update to new decimal_from_string interface.

gdb/testsuite/ChangeLog:
2017-10-05  Ulrich Weigand  <uweigand@de.ibm.com>

	* gdb.base/dfp-exprs.exp: Update tests to larger range of supported
	integer-to-dfp conversion.
	* gdb.base/dfp-test.exp: Likewise.
2017-10-05 19:14:08 +02:00
Sergio Durigan Junior bc3b087de2 Extend "set cwd" to work on gdbserver
This is the "natural" extension necessary for the "set cwd" command
(and the whole "set the inferior's cwd" logic) to work on gdbserver.

The idea here is to have a new remote packet, QSetWorkingDir (name
adopted from LLDB's extension to the RSP, as can be seen at
<https://raw.githubusercontent.com/llvm-mirror/lldb/master/docs/lldb-gdb-remote.txt>),
which sends an hex-encoded string representing the working directory
that the remote inferior will use.  There is a slight difference from
the packet proposed by LLDB: GDB's version will accept empty
arguments, meaning that the user wants to clear the previously set
working directory for the inferior (i.e., "set cwd" without arguments
on GDB).

For UNIX-like targets this feature is already implemented on
nat/fork-inferior.c, and all gdbserver has to do is to basically
implement "set_inferior_cwd" and call it whenever such packet arrives.
For other targets, like Windows, it is possible to use the existing
"get_inferior_cwd" function and do the necessary steps to make sure
that the inferior will use the specified working directory.

Aside from that, the patch consists basically of updates to the
testcase (making it available on remote targets) and the
documentation.

No regressions found.

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

	* NEWS (Changes since GDB 8.0): Add entry about new
	'set-cwd-on-gdbserver' feature.
	(New remote packets): Add entry for QSetWorkingDir.
	* common/common-inferior.h (set_inferior_cwd): New prototype.
	* infcmd.c (set_inferior_cwd): Remove "static".
	(show_cwd_command): Expand text to include remote debugging.
	* remote.c: Add PACKET_QSetWorkingDir.
	(remote_protocol_features) <QSetWorkingDir>: New entry for
	PACKET_QSetWorkingDir.
	(extended_remote_set_inferior_cwd): New function.
	(extended_remote_create_inferior): Call
	"extended_remote_set_inferior_cwd".
	(_initialize_remote): Call "add_packet_config_cmd" for
	QSetWorkingDir.

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

	* inferiors.c (set_inferior_cwd): New function.
	* server.c (handle_general_set): Handle QSetWorkingDir packet.
	(handle_query): Inform that QSetWorkingDir is supported.
	* win32-low.c (create_process): Pass the inferior's cwd to
	CreateProcess.

gdb/testsuite/ChangeLog:
2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>

	* gdb.base/set-cwd.exp: Make it available on
	native-extended-gdbserver.

gdb/doc/ChangeLog:
2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>

	* gdb.texinfo (Starting your Program) <The working directory.>:
	Mention remote debugging.
	(Working Directory) <Your Program's Working Directory>:
	Likewise.
	(Connecting) <Remote Packet>: Add "set-working-dir"
	and "QSetWorkingDir" to the table.
	(Remote Protocol) <QSetWorkingDir>: New item, explaining the
	packet.
2017-10-04 02:01:45 -04:00
Sergio Durigan Junior d092c5a246 Implement "set cwd" command on GDB
This commit adds new "set/show cwd" commands, which are used to
set/show the current working directory of the inferior that will be
started.

The idea here is that "set cwd" will become the de facto way of
setting the inferior's cwd.  Currently, the user can use "cd" for
that, but there are side effects: with "cd", GDB also switches to
another directory, and that can impact the loading of scripts and
other files.  With "set cwd", we separate the logic into a new
command.

To maintain backward compatibility, if the user issues a "cd" command
but doesn't use "set cwd", then the inferior's cwd will still be
changed according to what the user specified.  However, "set cwd" has
precedence over "cd", so it can always be used to override it.

"set cwd" works in the following way:

- If the user sets the inferior's cwd by using "set cwd", then this
  directory is saved into current_inferior ()->cwd and is used when
  the inferior is started (see below).

- If the user doesn't set the inferior's cwd by using "set cwd", but
  rather use the "cd" command as before, then this directory is
  inherited by the inferior because GDB will have chdir'd into it.

On Unix-like hosts, the way the directory is changed before the
inferior execution is by expanding the user set directory before the
fork, and then "chdir" after the call to fork/vfork on
"fork_inferior", but before the actual execution.  On Windows, the
inferior cwd set by the user is passed directly to the CreateProcess
call, which takes care of the actual chdir for us.

This way, we'll make sure that GDB's cwd is not affected by the user
set cwd.

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

	* NEWS (New commands): Mention "set/show cwd".
	* cli/cli-cmds.c (_initialize_cli_cmds): Mention "set cwd" on
	"cd" command's help text.
	* common/common-inferior.h (get_inferior_cwd): New prototype.
	* infcmd.c (inferior_cwd_scratch): New global variable.
	(set_inferior_cwd): New function.
	(get_inferior_cwd): Likewise.
	(set_cwd_command): Likewise.
	(show_cwd_command): Likewise.
	(_initialize_infcmd): Add "set/show cwd" commands.
	* inferior.h (class inferior) <cwd>: New field.
	* nat/fork-inferior.c: Include "gdb_tilde_expand.h".
	(fork_inferior): Change inferior's cwd before its execution.
	* windows-nat.c (windows_create_inferior): Pass inferior's cwd
	to CreateProcess.

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

	* inferiors.c (current_inferior_cwd): New global variable.
	(get_inferior_cwd): New function.
	* inferiors.h (struct process_info) <cwd>: New field.

gdb/doc/ChangeLog:
2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>

	* gdb.texinfo (Starting your Program) <The working directory.>:
	Mention new "set cwd" command.
	(Working Directory) <Your Program's Working Directory>:
	Rephrase to explain that "set cwd" exists and is the default
	way to change the inferior's cwd.

gdb/testsuite/ChangeLog:
2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>

	* gdb.base/set-cwd.c: New file.
	* gdb.base/set-cwd.exp: Likewise.
2017-10-04 01:59:30 -04:00
Tom Tromey a9bbfbd85f Add support for __VA_OPT__
C++2a adds a "__VA_OPT__" feature that can be used to control the
pesky "," emission when the final (variable) argument of a variadic
macro is empty.  This patch implements this feature for gdb.  (A patch
to implement it for gcc is pending.)

gdb/ChangeLog
2017-09-27  Tom Tromey  <tom@tromey.com>

	* macroexp.c (get_next_token_for_substitution): New function.
	(substitute_args): Call it.  Check for __VA_OPT__.

gdb/testsuite/ChangeLog
2017-09-27  Tom Tromey  <tom@tromey.com>

	* gdb.base/macscp.exp: Add __VA_OPT__ tests.
2017-09-27 07:51:33 -06:00
Thomas Preud'homme df8899e5c8 Fix FAILs in compare-sections.exp
compare-sections.exp has two cases that are not handled appropriately:
1) value read with msb set
2) error while patching that section

This patch adapts the "get value of read-only section" test to print
the value as an unsigned integer to fix 1) and test for the error
message to not set the written variable if read-only section cannot
be written to so as to solve 2).

2017-09-26  Thomas Preud'homme  <thomas.preudhomme@arm.com>
	    Pedro Alves  <palves@redhat.com>

gdb/testsuite/
	* gdb.base/compare-sections.exp (get value of read-only section): Read
	as unsigned value.
	(corrupt read-only section): Likewise and don't set written if patching
	failed.
2017-09-26 09:57:18 +01:00
Pedro Alves 06871ae840 Make "list ambiguous" show symbol names too
Currently, with an ambiguous "list first,last", we get:

  (gdb) list bar,main
  Specified first line 'bar' is ambiguous:
  file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97
  file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98

This commit makes gdb's output above a bit clearer by printing the
symbol name as well:

  (gdb) list bar,main
  Specified first line 'bar' is ambiguous:
  file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97, symbol: "bar(A)"
  file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98, symbol: "bar(B)"

And while at it, makes gdb print the symbol name when actually listing
multiple locations too.  I.e., before (with "set listsize 2"):

  (gdb) list bar
  file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97
  96
  97      int bar (A) { return 11; }
  file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98
  97      int bar (A) { return 11; }
  98      int bar (B) { return 22; }

After:

  (gdb) list bar
  file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97, symbol: "bar(A)"
  96
  97      int bar (A) { return 11; }
  file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98, symbol: "bar(B)"
  97      int bar (A) { return 11; }
  98      int bar (B) { return 22; }

Currently, the result of decoding a linespec loses information about
the original symbol that was found.  All we end up with is an address.
This makes it difficult to find the original symbol again to get at
its print name.  Fix that by storing a pointer to the symbol in the
sal.  We already store the symtab and obj_section, so it feels like a
natural progression to me.  This avoids having to do any extra symbol
lookup too.

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

	* cli/cli-cmds.c (list_command): Use print_sal_location.
	(print_sal_location): New function.
	(ambiguous_line_spec): Use print_sal_location.
	* linespec.c (symbol_to_sal): Record the symbol in the sal.
	* symtab.c (find_function_start_sal): Likewise.
	* symtab.h (symtab_and_line::symbol): New field.

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

	* gdb.base/list-ambiguous.exp (test_list_ambiguous_symbol): Expect
	symbol names in gdb's output.
	* gdb.cp/overload.exp ("list all overloads"): Likewise.
2017-09-20 16:21:26 +01:00
Pedro Alves e5f25bc5d6 Fix "list ambiguous_variable"
The "list" command allows specifying the name of variables as
argument, not just functions, so that users can type "list
a_global_variable".

That support is a broken when it comes to ambiguous locations though.

If there's more than one such global variable in the program, e.g.,
static globals in different compilation units, GDB ends up listing the
source of the first variable it finds, only.

linespec.c does find both symbol and minsym locations for all the
globals.  The problem is that it ends up merging all the resulting
sals into one, because they all have address, zero.  I.e., all sals
end up with sal.pc == 0, so maybe_add_address returns false for all
but the first.

The zero addresses appear because:

- in the minsyms case, linespec.c:minsym_found incorrectly treats all
  minsyms as if they were function/text symbols.  In list mode we can
  end up with data symbols there, and we shouldn't be using
  find_pc_sect_line on data symbols.

- in the debug symbols case, symbol_to_sal misses recording an address
  (sal.pc) for non-block, non-label symbols.

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

	* linespec.c (minsym_found): Handle non-text minsyms.
	(symbol_to_sal): Record a sal.pc for non-block, non-label symbols.

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

	* gdb.base/list-ambiguous.exp (test_list_ambiguous_function):
	Rename to ...
	(test_list_ambiguous_symbol): ... this and add a symbol name
	parameter.  Adjust.
	(test_list_ambiguous_function): Reimplement on top of
	test_list_ambiguous_symbol and also test listing ambiguous
	variables.
	* gdb.base/list-ambiguous0.c (ambiguous): Rename to ...
	(ambiguous_fun): ... this.
	(ambiguous_var): New.
	* gdb.base/list-ambiguous1.c (ambiguous): Rename to ...
	(ambiguous_fun): ... this.
	(ambiguous_var): New.
2017-09-20 16:12:54 +01:00
John Baldwin 4e5a4f5850 Add a 'starti' command.
This works like 'start' but it stops at the first instruction rather
than the first line in main().  This is useful if one wants to single
step through runtime linker startup.

While here, introduce a RUN_ARGS_HELP macro for shared help text
between run, start, and starti.  This includes expanding the help for
start and starti to include details from run's help text.

gdb/ChangeLog:

	* NEWS (Changes since GDB 8.0): Add starti.
	* infcmd.c (enum run_break): New.
	(run_command_1): Queue pending event for RUN_STOP_AT_FIRST_INSN
	case.
	(run_command): Use enum run_how.
	(start_command): Likewise.
	(starti_command): New function.
	(RUN_ARGS_HELP): New macro.
	(_initialize_infcmd): Use RUN_ARGS_HELP for run and start
	commands.  Add starti command.

gdb/doc/ChangeLog:

	* gdb.texinfo (Starting your Program): Add description of
	starti command.  Mention starti command as an alternative for
	debugging the elaboration phase.

gdb/testsuite/ChangeLog:

	* gdb.base/starti.c: New file.
	* gdb.base/starti.exp: New file.
	* lib/gdb.exp (gdb_starti_cmd): New procedure.
2017-09-19 12:15:35 -07:00
Pedro Alves 26e53f3eac gdb.base/nodebug.exp: Rename called functions
I'm seeing these failures on my system:

  FAIL: gdb.base/nodebug.exp: p (double) mult (2.0, 3.0)
  FAIL: gdb.base/nodebug.exp: p ((double (*) (double, double)) mult)(2.0f, 3.0f)
  FAIL: gdb.base/nodebug.exp: p ((double (*) (double, double)) mult)(2, 3)

The problem is simply that GDB is finding a symbol named "mult" from
glibc's debug info:

  (gdb) ptype mult
  type = enum expression_operator {var, num, lnot, mult, divide, module, plus, minus, less_than, greater_than, less_or_equal, greater_or_equal, equal, not_equal, land, lor,  qmop}

  (gdb) info types expression_operator
  All types matching regular expression "expression_operator":

  File plural-exp.h:
  enum expression_operator;

Fix this by unloading symbols from shared libraries.

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

	* gdb.base/nodebug.exp (nodebug_runto): New procedure.
	(top level): Use it instead of runto.
2017-09-14 18:32:00 +01:00
Tom Tromey cb791d5948 Make extract_arg return a std::string
Change extract_arg to return a std::string and fix up all the users.
I think string is mildly better than unique_xmalloc_ptr<char>, when
possible, because it provides a more robust API.

I changed the error messages emitted from find_location_by_number to
avoid either writing to a string or an extra allocation; this can be
changed but I thought that the new message was not any less clear.
You can see an example in the testsuite patch.

ChangeLog
2017-09-11  Tom Tromey  <tom@tromey.com>

	* demangle.c (demangle_command): Update.
	* breakpoint.c (disable_command): Update.
	(enable_command): Update.
	(find_location_by_number): Make "number" const.  Use
	get_number_trailer.
	* cli/cli-utils.c (extract_arg): Return std::string.
	* probe.c (parse_probe_linespec): Update.  Change types.
	(collect_probes): Take string arguments.
	(parse_probe_linespec): Likewise.
	(info_probes_for_ops): Update.
	(enable_probes_command): Update.
	(disable_probes_command): Update.
	* break-catch-sig.c (catch_signal_split_args): Update.
	* mi/mi-parse.c (mi_parse): Update.

testsuite/ChangeLog
2017-09-11  Tom Tromey  <tom@tromey.com>

	* gdb.base/ena-dis-br.exp (test_ena_dis_br): Update test.
2017-09-11 15:46:14 -06:00
Tom Tromey 5aec60eb2f Cast char constant to int in sizeof.exp
PR gdb/22010 concerns a regression I introduced with the scalar
printing changes.  The bug is that this code in sizeof.exp:

    set signof_byte [get_integer_valueof "'\\377'" -1]

can incorrectly compute sizeof_byte.  One underlying problem here is
that gdb's C parser doesn't treat a char constant as an int (this is
PR 19973).

However, it seems good to have an immediate fix for the regression.
The simplest is to cast to an int here.

testsuite/ChangeLog
2017-09-05  Tom Tromey  <tom@tromey.com>

	PR gdb/22010:
	* gdb.base/sizeof.exp (check_valueof): Cast char constant to int.
2017-09-06 11:11:03 -06:00
Pedro Alves 46a4882b3c Stop assuming no-debug-info variables have type int
An earlier commit made GDB no longer assume no-debug-info functions
return int.  This commit gives the same treatment to variables.

Currently, you can end misled by GDB over output like this:

  (gdb) p var
  $1 = -1
  (gdb) p /x var
  $2 = 0xffffffff

until you realize that GDB is assuming that the variable is an "int",
because:

  (gdb) ptype var
  type = <data variable, no debug info>

You may try to fix it by casting, but that doesn't really help:

  (gdb) p /x (unsigned long long) var
  $3 = 0xffffffffffffffff            # incorrect
         ^^

That's incorrect output, because the variable was defined like this:

  uint64_t var = 0x7fffffffffffffff;
                   ^^

What happened is that with the cast, GDB did an int -> 'unsigned long
long' conversion instead of reinterpreting the variable as the cast-to
type.  To get at the variable properly you have to reinterpret the
variable's address manually instead, with either:

  (gdb) p /x *(unsigned long long *) &var
  $4 = 0x7fffffffffffffff
  (gdb) p /x {unsigned long long} &var
  $5 = 0x7fffffffffffffff

After this commit GDB does it for you.  This is what you'll get
instead:

  (gdb) p var
  'var' has unknown type; cast it to its declared type
  (gdb) p /x (unsigned long long) var
  $1 = 0x7fffffffffffffff

As in the functions patch, the "compile" machinery doesn't currently
have the cast-to type handy, so it continues assuming no-debug
variables have int type, though now at least it warns.

The change to gdb.cp/m-static.exp deserves an explanation:

 - gdb_test "print 'gnu_obj_1::method()::sintvar'" "\\$\[0-9\]+ = 4" \
 + gdb_test "print (int) 'gnu_obj_1::method()::sintvar'" "\\$\[0-9\]+ = 4" \

That's printing the "sintvar" function local static of the
"gnu_obj_1::method()" method.

The problem with that test is that that "'S::method()::static_var'"
syntax doesn't really work in C++ as you'd expect.  The way to make it
work correctly currently is to quote the method part, not the whole
expression, like:

  (gdb) print 'gnu_obj_1::method()'::sintvar

If you wrap the whole expression in quotes, like in m-static.exp, what
really happens is that the parser considers the whole string as a
symbol name, but there's no debug symbol with that name.  However,
local statics have linkage and are given a mangled name that demangles
to the same string as the full expression, so that's what GDB prints.
After this commit, and without the cast, the print in m-static.exp
would error out saying that the variable has unknown type:

  (gdb) p 'gnu_obj_1::method()::sintvar'
  'gnu_obj_1::method()::sintvar' has unknown type; cast it to its declared type

TBC, if currently (even before this series) you try to print any
function local static variable of type other than int, you'll get
bogus results.  You can see that with m-static.cc as is, even.
Printing the "svar" local, which is a boolean (1 byte) still prints as
"int" (4 bytes):

  (gdb) p 'gnu_obj_1::method()::svar'
  $1 = 1
  (gdb) ptype 'gnu_obj_1::method()::svar'
  type = <data variable, no debug info>

This probably prints some random bogus value on big endian machines.

If 'svar' was of some aggregate type (etc.) we'd still print it as
int, so the problem would have been more obvious...  After this
commit, you'll get instead:

  (gdb) p 'gnu_obj_1::method()::svar'
  'gnu_obj_1::method()::svar' has unknown type; cast it to its declared type

... so at least GDB is no longer misleading.  Making GDB find the real
local static debug symbol is the subject of the following patches.  In
the end, it'll all "Just Work".

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

	* ax-gdb.c: Include "typeprint.h".
	(gen_expr_for_cast): New function.
	(gen_expr) <OP_CAST, OP_CAST_TYPE>: Use it.
	<OP_VAR_VALUE, OP_MSYM_VAR_VALUE>: Error out if the variable's
	type is unknown.
	* dwarf2read.c (new_symbol_full): Fallback to int instead of
	nodebug_data_symbol.
	* eval.c: Include "typeprint.h".
	(evaluate_subexp_standard) <OP_VAR_VALUE, OP_VAR_MSYM_VALUE>:
	Error out if symbol has unknown type.
	<UNOP_CAST, UNOP_CAST_TYPE>: Common bits factored out to
	evaluate_subexp_for_cast.
	(evaluate_subexp_for_address, evaluate_subexp_for_sizeof): Handle
	OP_VAR_MSYM_VALUE.
	(evaluate_subexp_for_cast): New function.
	* gdbtypes.c (init_nodebug_var_type): New function.
	(objfile_type): Use it to initialize types of variables with no
	debug info.
	* typeprint.c (error_unknown_type): New.
	* typeprint.h (error_unknown_type): New declaration.
	* compile/compile-c-types.c (convert_type_basic): Handle
	TYPE_CODE_ERROR; warn and fallback to int for variables with
	unknown type.

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

	* gdb.asm/asm-source.exp: Add casts to int.
	* gdb.base/nodebug.c (dataglobal8, dataglobal32_1, dataglobal32_2)
	(dataglobal64_1, dataglobal64_2): New globals.
	* gdb.base/nodebug.exp: Test different expressions involving the
	new globals, with print, whatis and ptype.  Add casts to int.
	* gdb.base/solib-display.exp: Add casts to int.
	* gdb.compile/compile-ifunc.exp: Expect warning.  Add cast to int.
	* gdb.cp/m-static.exp: Add cast to int.
	* gdb.dwarf2/dw2-skip-prologue.exp: Add cast to int.
	* gdb.threads/tls-nodebug.exp: Check that gdb errors out printing
	tls variable with no debug info without a cast.  Test with a cast
	to int too.
	* gdb.trace/entry-values.exp: Add casts.
2017-09-04 20:21:15 +01:00
Pedro Alves 2c5a2be190 Make ptype/whatis print function name of functions with no debug info too
The patch to make GDB stop assuming functions return int left GDB with
an inconsistency.  While with normal expression evaluation the
"unknown return type" error shows the name of the function that misses
debug info:

  (gdb) p getenv ("PATH")
  'getenv' has unknown return type; cast the call to its declared return type
   ^^^^^^

which is handy in more complicated expressions, "ptype" does not:

  (gdb) ptype getenv ("PATH")
  function has unknown return type; cast the call to its declared return type
  ^^^^^^^^

This commit builds on the new OP_VAR_MSYM_VALUE to fix it, by making
OP_FUNCALL extract the function name from the symbol stored in
OP_VAR_VALUE/OP_VAR_MSYM_VALUE.  We now get the same error in "print"
vs "ptype":

  (gdb) ptype getenv()
  'getenv' has unknown return type; cast the call to its declared return type
  (gdb) p getenv()
  'getenv' has unknown return type; cast the call to its declared return type

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

	* eval.c (evaluate_subexp_standard): <OP_FUNCALL>: Extract
	function name from symbol/minsym and pass it to
	error_call_unknown_return_type.

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

	* gdb.base/nodebug.exp: Test that ptype's error about functions
	with unknown return type includes the function name too.
2017-09-04 20:21:14 +01:00
Pedro Alves 7022349d5c Stop assuming no-debug-info functions return int
The fact that GDB defaults to assuming that functions return int, when
it has no debug info for the function has been a recurring source of
user confusion.  Recently this came up on the errno pretty printer
discussions.  Shortly after, it came up again on IRC, with someone
wondering why does getenv() in GDB return a negative int:

  (gdb) p getenv("PATH")
  $1 = -6185

This question (with s/getenv/random-other-C-runtime-function) is a FAQ
on IRC.

The reason for the above is:

 (gdb) p getenv
 $2 = {<text variable, no debug info>} 0x7ffff7751d80 <getenv>
 (gdb) ptype getenv
 type = int ()

... which means that GDB truncated the 64-bit pointer that is actually
returned from getent to 32-bit, and then sign-extended it:

 (gdb) p /x -6185
 $6 = 0xffffe7d7

The workaround is to cast the function to the right type, like:

 (gdb) p ((char *(*) (const char *)) getenv) ("PATH")
 $3 = 0x7fffffffe7d7 "/usr/local/bin:/"...

IMO, we should do better than this.

I see the "assume-int" issue the same way I see printing bogus values
for optimized-out variables instead of "<optimized out>" -- I'd much
rather that the debugger tells me "I don't know" and tells me how to
fix it than showing me bogus misleading results, making me go around
tilting at windmills.

If GDB prints a signed integer when you're expecting a pointer or
aggregate, you at least have some sense that something is off, but
consider the case of the function actually returning a 64-bit integer.
For example, compile this without debug info:

 unsigned long long
 function ()
 {
   return 0x7fffffffffffffff;
 }

Currently, with pristine GDB, you get:

 (gdb) p function ()
 $1 = -1                      # incorrect
 (gdb) p /x function ()
 $2 = 0xffffffff              # incorrect

maybe after spending a few hours debugging you suspect something is
wrong with that -1, and do:

 (gdb) ptype function
 type = int ()

and maybe, just maybe, you realize that the function actually returns
unsigned long long.  And you try to fix it with:

(gdb) p /x (unsigned long long) function ()
 $3 = 0xffffffffffffffff      # incorrect

... which still produces the wrong result, because GDB simply applied
int to unsigned long long conversion.  Meaning, it sign-extended the
integer that it extracted from the return of the function, to 64-bits.

and then maybe, after asking around on IRC, you realize you have to
cast the function to a pointer of the right type, and call that.  It
won't be easy, but after a few missteps, you'll get to it:

.....  (gdb) p /x ((unsigned long long(*) ()) function) ()
 $666 = 0x7fffffffffffffff             # finally! :-)


So to improve on the user experience, this patch does the following
(interrelated) things:

 - makes no-debug-info functions no longer default to "int" as return
   type.  Instead, they're left with NULL/"<unknown return type>"
   return type.

    (gdb) ptype getenv
    type = <unknown return type> ()

 - makes calling a function with unknown return type an error.

    (gdb) p getenv ("PATH")
    'getenv' has unknown return type; cast the call to its declared return type

 - and then to make it easier to call the function, makes it possible
   to _only_ cast the return of the function to the right type,
   instead of having to cast the function to a function pointer:

    (gdb) p (char *) getenv ("PATH")                      # now Just Works
    $3 = 0x7fffffffe7d7 "/usr/local/bin:/"...

    (gdb) p ((char *(*) (const char *)) getenv) ("PATH")  # continues working
    $4 = 0x7fffffffe7d7 "/usr/local/bin:/"...

   I.e., it makes GDB default the function's return type to the type
   of the cast, and the function's parameters to the type of the
   arguments passed down.

After this patch, here's what you'll get for the "unsigned long long"
example above:

 (gdb) p function ()
 'function' has unknown return type; cast the call to its declared return type
 (gdb) p /x (unsigned long long) function ()
 $4 = 0x7fffffffffffffff     # correct!

Note that while with "print" GDB shows the name of the function that
has the problem:

  (gdb) p getenv ("PATH")
  'getenv' has unknown return type; cast the call to its declared return type

which can by handy in more complicated expressions, "ptype" does not:

  (gdb) ptype getenv ("PATH")
  function has unknown return type; cast the call to its declared return type

This will be fixed in the next patch.

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

	* ada-lang.c (ada_evaluate_subexp) <TYPE_CODE_FUNC>: Don't handle
	TYPE_GNU_IFUNC specially here.  Throw error if return type is
	unknown.
	* ada-typeprint.c (print_func_type): Handle functions with unknown
	return type.
	* c-typeprint.c (c_type_print_base): Handle functions and methods
	with unknown return type.
	* compile/compile-c-symbols.c (convert_symbol_bmsym)
	<mst_text_gnu_ifunc>: Use nodebug_text_gnu_ifunc_symbol.
	* compile/compile-c-types.c: Include "objfiles.h".
	(convert_func): For functions with unknown return type, warn and
	default to int.
	* compile/compile-object-run.c (compile_object_run): Adjust call
	to call_function_by_hand_dummy.
	* elfread.c (elf_gnu_ifunc_resolve_addr): Adjust call to
	call_function_by_hand.
	* eval.c (evaluate_subexp_standard): Adjust calls to
	call_function_by_hand.  Handle functions and methods with unknown
	return type.  Pass expect_type to call_function_by_hand.
	* f-typeprint.c (f_type_print_base): Handle functions with unknown
	return type.
	* gcore.c (call_target_sbrk): Adjust call to
	call_function_by_hand.
	* gdbtypes.c (objfile_type): Leave nodebug text symbol with NULL
	return type instead of int.  Make nodebug_text_gnu_ifunc_symbol be
	an integer address type instead of nodebug.
	* guile/scm-value.c (gdbscm_value_call): Adjust call to
	call_function_by_hand.
	* infcall.c (error_call_unknown_return_type): New function.
	(call_function_by_hand): New "default_return_type" parameter.
	Pass it down.
	(call_function_by_hand_dummy): New "default_return_type"
	parameter.  Use it instead of defaulting to int.  If there's no
	default and the return type is unknown, throw an error.  If
	there's a default return type, and the called function has no
	debug info, then assume the function is prototyped.
	* infcall.h (call_function_by_hand, call_function_by_hand_dummy):
	New "default_return_type" parameter.
	(error_call_unknown_return_type): New declaration.
	* linux-fork.c (call_lseek): Cast return type of lseek.
	(inferior_call_waitpid, checkpoint_command): Adjust calls to
	call_function_by_hand.
	* linux-tdep.c (linux_infcall_mmap, linux_infcall_munmap): Adjust
	calls to call_function_by_hand.
	* m2-typeprint.c (m2_procedure): Handle functions with unknown
	return type.
	* objc-lang.c (lookup_objc_class, lookup_child_selector)
	(value_nsstring, print_object_command): Adjust calls to
	call_function_by_hand.
	* p-typeprint.c (pascal_type_print_varspec_prefix): Handle
	functions with unknown return type.
	(pascal_type_print_func_varspec_suffix): New function.
	(pascal_type_print_varspec_suffix) <TYPE_CODE_FUNC,
	TYPE_CODE_METHOD>: Use it.
	* python/py-value.c (valpy_call): Adjust call to
	call_function_by_hand.
	* rust-lang.c (rust_evaluate_funcall): Adjust call to
	call_function_by_hand.
	* valarith.c (value_x_binop, value_x_unop): Adjust calls to
	call_function_by_hand.
	* valops.c (value_allocate_space_in_inferior): Adjust call to
	call_function_by_hand.
	* typeprint.c (type_print_unknown_return_type): New function.
	* typeprint.h (type_print_unknown_return_type): New declaration.

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

	* gdb.base/break-main-file-remove-fail.exp (test_remove_bp): Cast
	return type of munmap in infcall.
	* gdb.base/break-probes.exp: Cast return type of foo in infcall.
	* gdb.base/checkpoint.exp: Simplify using for loop.  Cast return
	type of ftell in infcall.
	* gdb.base/dprintf-detach.exp (dprintf_detach_test): Cast return
	type of getpid in infcall.
	* gdb.base/infcall-exec.exp: Cast return type of execlp in
	infcall.
	* gdb.base/info-os.exp: Cast return type of getpid in infcall.
	Bail on failure to extract the pid.
	* gdb.base/nodebug.c: #include <stdint.h>.
	(multf, multf_noproto, mult, mult_noproto, add8, add8_noproto):
	New functions.
	* gdb.base/nodebug.exp (test_call_promotion): New procedure.
	Change expected output of print/whatis/ptype with functions with
	no debug info.  Test all supported languages.  Call
	test_call_promotion.
	* gdb.compile/compile.exp: Adjust expected output to expect
	warning.
	* gdb.threads/siginfo-threads.exp: Likewise.
2017-09-04 20:21:13 +01:00
Pedro Alves 54990598c4 Fix calling prototyped functions via function pointers
Calling a prototyped function via a function pointer with the right
prototype doesn't work correctly, if the called function requires
argument coercion...  Like, e.g., with:

  float mult (float f1, float f2) { return f1 * f2; }

  (gdb) p mult (2, 3.5)
  $1 = 7
  (gdb) p ((float (*) (float, float)) mult) (2, 3.5)
  $2 = 0

both calls should have returned the same, of course.  The problem is
that GDB misses marking the type of the function pointer target as
prototyped...

Without the fix, the new test fails like this:

 (gdb) p ((int (*) (float, float)) t_float_values2)(3.14159,float_val2)
 $30 = 0
 (gdb) FAIL: gdb.base/callfuncs.exp: p ((int (*) (float, float)) t_float_values2)(3.14159,float_val2)

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

	* gdbtypes.c (lookup_function_type_with_arguments): Mark function
	types with more than one parameter as prototyped.

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

	* gdb.base/callfuncs.exp (do_function_calls): New parameter
	"prototypes".  Test calling float functions via prototyped and
	unprototyped function pointers.
	(perform_all_tests): New parameter "prototypes".  Pass it down.
	(top level): Pass down "prototypes" parameter to
	perform_all_tests.
2017-09-04 20:21:13 +01:00
Simon Marchi 34d16ea2a1 gdb.base/commands.exp: Test loop_break and loop_continue in nested loops
This patch improves the loop_break and loop_continue tests to verify
that they work as expected when multiple loops are nested (they affect
the inner loop).

gdb/testsuite/ChangeLog:

	* gdb.base/commands.exp (loop_break_test, loop_continue_test):
	Test with nested loops.
2017-09-04 21:19:17 +02:00
Simon Marchi 9521ecda68 Add tests for loop_break and loop_continue commands
I grepped the testsuite for loop_break and loop_continue and didn't find
anything, so I wrote some simple tests for those.

gdb/testsuite/ChangeLog:

	* gdb.base/commands.exp: Call the new procedures.
	(loop_break_test, loop_continue_test): New procedures.
2017-09-04 19:15:59 +02:00
Simon Marchi 80a65e9b8f Error out immediatly when using if command without args in command list
When using "if" (or while) without args directly on gdb's command line,
you get this:

  (gdb) if
  if/while commands require arguments

When doing the same when entering a command list, you only get an error
when the command is executed, when parse_exp_in_context_1 fails to
evaluate the expression.

  (gdb) define foo
  Type commands for definition of "foo".
  End with a line saying just "end".
  >if
   >end
  >end
  (gdb) foo
  Argument required (expression to compute).

I think it would make more sense to error out when inputting the command
list directly:

  (gdb) define foo
  Type commands for definition of "foo".
  End with a line saying just "end".
  >if
  if/while commands require arguments.

The only required change is to check whether args is an empty string in
build_command_line.

gdb/ChangeLog:

	* cli/cli-script.c (build_command_line): For if/while commands,
	check whether args is empty.

gdb/testsuite/ChangeLog:

	* gdb.base/commands.exp: Call new procedure.
	(define_if_without_arg_test): New procedure.
2017-09-04 19:13:48 +02:00
Pedro Alves e439fa140a Clarify "list" output when specified lines are ambiguous
Currently, with "list LINESPEC1,LINESPEC2", if one of the linespecs is
ambiguous, i.e., if it expands to multiple locations, you get this
seemingly odd output:

 (gdb) list foo,bar
 file: "file0.c", line number: 26
 file: "file1.c", line number: 29

Since "foo" above expands to multiple locations, the specified range
is indeterminate, and GDB is trying to be helpful by showing you what
was ambiguous.  It looks confusing to me, though.  I think it'd be
much more user friendly if GDB actually told you that, like this:

 (gdb) list foo,bar
 Specified first line 'foo' is ambiguous:
 file: "file0.c", line number: 26
 file: "file1.c", line number: 29

 (gdb) list bar,foo
 Specified last line 'foo' is ambiguous:
 file: "file0.c", line number: 26
 file: "file1.c", line number: 29

Note, I'm using "first" and "last" in the output because that's what
the manual uses:

 ~~~
 list first,last

     Print lines from first to last. [...]
 ~~~

Tested on x86-64 GNU/Linux.

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

	* cli/cli-cmds.c (edit_command): Pass message to
	ambiguous_line_spec.
	(list_command): Pass message to ambiguous_line_spec.  Say
	"first"/"last" instead of "start" and "end" to be consistent with
	the manual.
	(ambiguous_line_spec): Add 'format' and vararg parameters.  Use
	them to print formatted message.

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

	* gdb.base/list-ambiguous.exp: New file.
	* gdb.base/list-ambiguous0.c: New file.
	* gdb.base/list-ambiguous1.c: New file.
	* gdb.base/list.exp (test_list_range): Adjust expected output.
2017-09-04 16:49:29 +01:00
Sergio Durigan Junior 0a2dde4a32 Implement the ability to set/unset environment variables to GDBserver when starting the inferior
This patch implements the ability to set/unset environment variables
on the remote target, mimicking what GDB already offers to the user.
There are two features present here: user-set and user-unset
environment variables.

User-set environment variables are only the variables that are
explicitly set by the user, using the 'set environment' command.  This
means that variables that were already present in the environment when
starting GDB/GDBserver are not transmitted/considered by this feature.

User-unset environment variables are variables that are explicitly
unset by the user, using the 'unset environment' command.

The idea behind this patch is to store user-set and user-unset
environment variables in two separate sets, both part of gdb_environ.
Then, when extended_remote_create_inferior is preparing to start the
inferior, it will iterate over the two sets and set/unset variables
accordingly.  Three new packets are introduced:

- QEnvironmentHexEncoded, which is used to set environment variables,
  and contains an hex-encoded string in the format "VAR=VALUE" (VALUE
  can be empty if the user set a variable with a null value, by doing
  'set environment VAR=').

- QEnvironmentUnset, which is used to unset environment variables, and
  contains an hex-encoded string in the format "VAR".

- QEnvironmentReset, which is always the first packet to be
  transmitted, and is used to reset the environment, i.e., discard any
  changes made by the user on previous runs.

The QEnvironmentHexEncoded packet is inspired on LLDB's extensions to
the RSP.  Details about it can be seen here:

  <https://raw.githubusercontent.com/llvm-mirror/lldb/master/docs/lldb-gdb-remote.txt>

I decided not to implement the QEnvironment packet because it is
considered deprecated by LLDB.  This packet, on LLDB, serves the same
purpose of QEnvironmentHexEncoded, but sends the information using a
plain text, non-hex-encoded string.

The other two packets are new.

This patch also includes updates to the documentation, testsuite, and
unit tests, without introducing regressions.

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

	* NEWS (Changes since GDB 8.0): Add entry mentioning new support
	for setting/unsetting environment variables on the remote target.
	(New remote packets): Add entries for QEnvironmentHexEncoded,
	QEnvironmentUnset and QEnvironmentReset.
	* common/environ.c (gdb_environ::operator=): Extend method to
	handle m_user_set_env_list and m_user_unset_env_list.
	(gdb_environ::clear): Likewise.
	(match_var_in_string): Change type of first parameter from 'char
	*' to 'const char *'.
	(gdb_environ::set): Extend method to handle
	m_user_set_env_list and m_user_unset_env_list.
	(gdb_environ::unset): Likewise.
	(gdb_environ::clear_user_set_env): New method.
	(gdb_environ::user_set_envp): Likewise.
	(gdb_environ::user_unset_envp): Likewise.
	* common/environ.h (gdb_environ): Handle m_user_set_env_list and
	m_user_unset_env_list on move constructor/assignment.
	(unset): Add new default parameter 'update_unset_list = true'.
	(clear_user_set_env): New method.
	(user_set_envp): Likewise.
	(user_unset_envp): Likewise.
	(m_user_set_env_list): New std::set.
	(m_user_unset_env_list): Likewise.
	* common/rsp-low.c (hex2str): New function.
	(bin2hex): New overload for bin2hex function.
	* common/rsp-low.c (hex2str): New prototype.
	(str2hex): New overload prototype.
	* remote.c: Include "environ.h". Add QEnvironmentHexEncoded,
	QEnvironmentUnset and QEnvironmentReset.
	(remote_protocol_features): Add QEnvironmentHexEncoded,
	QEnvironmentUnset and QEnvironmentReset packets.
	(send_environment_packet): New function.
	(extended_remote_environment_support): Likewise.
	(extended_remote_create_inferior): Call
	extended_remote_environment_support.
	(_initialize_remote): Add QEnvironmentHexEncoded,
	QEnvironmentUnset and QEnvironmentReset packet configs.
	* unittests/environ-selftests.c (gdb_selftest_env_var):
	New variable.
	(test_vector_initialization): New function.
	(test_init_from_host_environ): Likewise.
	(test_reinit_from_host_environ): Likewise.
	(test_set_A_unset_B_unset_A_cannot_find_A_can_find_B):
	Likewise.
	(test_unset_set_empty_vector): Likewise.
	(test_vector_clear): Likewise.
	(test_std_move): Likewise.
	(test_move_constructor):
	(test_self_move): Likewise.
	(test_set_unset_reset): Likewise.
	(run_tests): Rewrite in terms of the functions above.

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

	* server.c (handle_general_set): Handle QEnvironmentHexEncoded,
	QEnvironmentUnset and QEnvironmentReset packets.
	(handle_query): Inform remote that QEnvironmentHexEncoded,
	QEnvironmentUnset and QEnvironmentReset are supported.

gdb/doc/ChangeLog:
2017-08-31  Sergio Durigan Junior  <sergiodj@redhat.com>

	* gdb.texinfo (set environment): Add @anchor.  Explain that
	environment variables set by the user are sent to GDBserver.
	(unset environment): Likewise, but for unsetting variables.
	(Connecting) <Remote Packet>: Add "environment-hex-encoded",
	"QEnvironmentHexEncoded", "environment-unset", "QEnvironmentUnset",
	"environment-reset" and "QEnvironmentReset" to the table.
	(Remote Protocol) <QEnvironmentHexEncoded, QEnvironmentUnset,
	QEnvironmentReset>: New item, explaining the packet.

gdb/testsuite/ChangeLog:
2017-08-31  Sergio Durigan Junior  <sergiodj@redhat.com>

	* gdb.base/share-env-with-gdbserver.c: New file.
	* gdb.base/share-env-with-gdbserver.exp: Likewise.
2017-08-31 17:22:10 -04:00
Simon Marchi 5e89eb3ab0 gdb.base/commands.exp: Remove unused global references
There are a few unused references to the gdb_prompt global.

gdb/testsuite/ChangeLog:

	* gdb.base/commands.exp (gdbvar_simple_if_test,
	gdbvar_simple_if_test, gdbvar_complex_if_while_test,
	progvar_simple_if_test, progvar_simple_while_test,
	progvar_complex_if_while_test, user_defined_command_test,
	user_defined_command_args_eval,
	user_defined_command_args_stack_test,
	user_defined_command_manyargs_test, bp_deleted_in_command_test,
	temporary_breakpoint_commands,
	gdb_test_no_prompt, redefine_hook_test,
	redefine_backtrace_test): Remove "global gdb_prompt".
2017-08-28 23:39:18 +02:00
Simon Marchi fd437cbc43 define_command: Don't convert command name to lower case
Commit

  Command names: make them case sensitive
  3d7b173c29

made command name lookup case sensitive.  However, define_command, used
when creating a user-defined command, converts the command name to
lowercase, assuming that the command name lookup works in a case
insensitive way.  This causes user-defined commands with capital letters
in their name to only be callable with a lowercase version:

  (gdb) define Foo
  Type commands for definition of "Foo".
  End with a line saying just "end".
  >print 1
  >end
  (gdb) Foo
  Undefined command: "Foo".  Try "help".
  (gdb) foo
  $1 = 1

This patch removes that conversion to lowercase, so that the user can
call the command with the same name they provided.

gdb/ChangeLog:

	* cli/cli-script.c (define_command): Don't convert command name
	to lower case.

gdb/testsuite/ChangeLog:

	* gdb.base/commands.exp (user_defined_command_case_sensitivity):
	New proc, call it from toplevel.
2017-08-28 23:05:04 +02:00
Pedro Alves bf223d3e80 Handle function aliases better (PR gdb/19487, errno printing)
(Ref: https://sourceware.org/ml/gdb/2017-06/msg00048.html)

This patch improves GDB support for function aliases defined with
__attribute__ alias.  For example, in the test added by this commit,
there is no reference to "func_alias" in the debug info at all, only
to "func"'s definition:

 $ nm  ./testsuite/outputs/gdb.base/symbol-alias/symbol-alias  | grep " func"
 00000000004005ae t func
 00000000004005ae T func_alias

 $ readelf -w ./testsuite/outputs/gdb.base/symbol-alias/symbol-alias | grep func -B 1 -A 8
 <1><db>: Abbrev Number: 5 (DW_TAG_subprogram)
    <dc>   DW_AT_name        : (indirect string, offset: 0x111): func
    <e0>   DW_AT_decl_file   : 1
    <e1>   DW_AT_decl_line   : 27
    <e2>   DW_AT_prototyped  : 1
    <e2>   DW_AT_type        : <0xf8>
    <e6>   DW_AT_low_pc      : 0x4005ae
    <ee>   DW_AT_high_pc     : 0xb
    <f6>   DW_AT_frame_base  : 1 byte block: 9c         (DW_OP_call_frame_cfa)
    <f8>   DW_AT_GNU_all_call_sites: 1

So all GDB knows about "func_alias" is from the minsym (elf symbol):

 (gdb) p func_alias
 $1 = {<text variable, no debug info>} 0x4005ae <func>
 (gdb) ptype func_alias
 type = int ()

 (gdb) p func
 $2 = {struct S *(void)} 0x4005ae <func>
 (gdb) ptype func
 type = struct S {
     int field1;
     int field2;
 } *(void)

The result is that calling func_alias from the command line produces
incorrect results.

This is similar (though not exactly the same) to the glibc
errno/__errno_location/__GI___errno_location situation.  On glibc,
errno is defined like this:

  extern int *__errno_location (void);
  #define errno (*__errno_location ())

with __GI___errno_location being an internal alias for
__errno_location.  On my system's libc (F23), I do see debug info for
__errno_location, in the form of name vs linkage name:

 <1><95a5>: Abbrev Number: 18 (DW_TAG_subprogram)
    <95a6>   DW_AT_external    : 1
    <95a6>   DW_AT_name        : (indirect string, offset: 0x2c26): __errno_location
    <95aa>   DW_AT_decl_file   : 1
    <95ab>   DW_AT_decl_line   : 24
    <95ac>   DW_AT_linkage_name: (indirect string, offset: 0x2c21): __GI___errno_location
    <95b0>   DW_AT_prototyped  : 1
    <95b0>   DW_AT_type        : <0x9206>
    <95b4>   DW_AT_low_pc      : 0x20f40
    <95bc>   DW_AT_high_pc     : 0x11
    <95c4>   DW_AT_frame_base  : 1 byte block: 9c       (DW_OP_call_frame_cfa)
    <95c6>   DW_AT_GNU_all_call_sites: 1

however that doesn't matter in practice, because GDB doesn't record
demangled names anyway, and so we end up with the exact same situation
covered by the testcase.

So the fix is to make the expression parser find a debug symbol for
the same address as the just-found minsym, when a lookup by name
didn't find a debug symbol by name.  We now get:

 (gdb) p func_alias
 $1 = {struct S *(void)} 0x4005ae <func>
 (gdb) p __errno_location
 $2 = {int *(void)} 0x7ffff6e92830 <__errno_location>

I've made the test exercise variable aliases too, for completeness.
Those already work correctly, because unlike for function aliases, GCC
emits debug information for variable aliases.

Tested on GNU/Linux.

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

	PR gdb/19487
	* c-exp.y (variable production): Handle function aliases.
	* minsyms.c (msymbol_is_text): New function.
	* minsyms.h (msymbol_is_text): Declare.
	* symtab.c (find_function_alias_target): New function.
	* symtab.h (find_function_alias_target): Declare.

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

	PR gdb/19487
	* gdb.base/symbol-alias.c: New.
	* gdb.base/symbol-alias2.c: New.
	* gdb.base/symbol-alias.exp: New.
2017-08-21 11:34:32 +01:00
Pedro Alves c973d0aa4a Fix type casts losing typedefs and reimplement "whatis" typedef stripping
(Ref: https://sourceware.org/ml/gdb/2017-06/msg00020.html)

Assuming int_t is a typedef to int:

 typedef int int_t;

gdb currently loses this expression's typedef:

 (gdb) p (int_t) 0
 $1 = 0
 (gdb) whatis $1
 type = int

or:

 (gdb) whatis (int_t) 0
 type = int

or, to get "whatis" out of the way:

 (gdb) maint print type (int_t) 0
 ...
 name 'int'
 code 0x8 (TYPE_CODE_INT)
 ...

This prevents a type printer for "int_t" kicking in, with e.g.:

 (gdb) p (int_t) 0

From the manual, we can see that that "whatis (int_t) 0" command
invocation should have printed "type = int_t":

 If @var{arg} is a variable or an expression, @code{whatis} prints its
 literal type as it is used in the source code.  If the type was
 defined using a @code{typedef}, @code{whatis} will @emph{not} print
 the data type underlying the @code{typedef}.
 (...)
 If @var{arg} is a type name that was defined using @code{typedef},
 @code{whatis} @dfn{unrolls} only one level of that @code{typedef}.

That one-level stripping is currently done here, in
gdb/eval.c:evaluate_subexp_standard, handling OP_TYPE:

...
     else if (noside == EVAL_AVOID_SIDE_EFFECTS)
	{
	  struct type *type = exp->elts[pc + 1].type;

	  /* If this is a typedef, then find its immediate target.  We
	     use check_typedef to resolve stubs, but we ignore its
	     result because we do not want to dig past all
	     typedefs.  */
	  check_typedef (type);
	  if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
	    type = TYPE_TARGET_TYPE (type);
	  return allocate_value (type);
	}

However, this stripping is reachable in both:

 #1 - (gdb) whatis (int_t)0     # ARG is an expression with a cast to
                                # typedef type.
 #2 - (gdb) whatis int_t        # ARG is a type name.

while only case #2 should strip the typedef.  Removing that code from
evaluate_subexp_standard is part of the fix.  Instead, we make the
"whatis" command implementation itself strip one level of typedefs
when the command argument is a type name.

We then run into another problem, also fixed by this commit:
value_cast always drops any typedefs of the destination type.

With all that fixed, "whatis (int_t) 0" now works as expected:

 (gdb) whatis int_t
 type = int
 (gdb) whatis (int_t)0
 type = int_t

value_cast has many different exit/convertion paths, for handling many
different kinds of casts/conversions, and most of them had to be
tweaked to construct the value of the right "to" type.  The new tests
try to exercise most of it, by trying castin of many different
combinations of types.  With:

 $ make check TESTS="*/whatis-ptype*.exp */gnu_vector.exp */dfp-test.exp"

... due to combinatorial explosion, the testsuite results for the
tests above alone grow like:

 - # of expected passes            246
 + # of expected passes            3811

You'll note that the tests exposed one GCC buglet, filed here:

  Missing DW_AT_type in DW_TAG_typedef of "typedef of typedef of void"
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81267

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

	* eval.c (evaluate_subexp_standard) <OP_TYPE>: Don't dig past
	typedefs.
	* typeprint.c (whatis_exp): If handling "whatis", and expression
	is OP_TYPE, strip one typedef level.  Otherwise don't strip
	typedefs here.
	* valops.c (value_cast): Save "to" type before resolving
	stubs/typedefs.  Use that type as resulting value's type.

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

	* gdb.base/dfp-test.c
	(d32_t, d64_t, d128_t, d32_t2, d64_t2, d128_t2, v_d32_t, v_d64_t)
	(v_d128_t, v_d32_t2, v_d64_t2, v_d128_t2): New.
	* gdb.base/dfp-test.exp: Add whatis/ptype/cast tests.
	* gdb.base/gnu_vector.exp: Add whatis/ptype/cast tests.
	* gdb.base/whatis-ptype-typedefs.c: New.
	* gdb.base/whatis-ptype-typedefs.exp: New.
	* gdb.python/py-prettyprint.c (int_type, int_type2): New typedefs.
	(an_int, an_int_type, an_int_type2): New globals.
	* gdb.python/py-prettyprint.exp (run_lang_tests): Add tests
	involving typedefs and cast expressions.
	* gdb.python/py-prettyprint.py (class pp_int_typedef): New.
	(lookup_typedefs_function): New.
	(typedefs_pretty_printers_dict): New.
	(top level): Register lookup_typedefs_function in
	gdb.pretty_printers.
2017-08-21 11:34:32 +01:00
Sergio Durigan Junior 206726fbfd Fix PR gdb/21954: make 'unset environment' work again
When I made commit 9a6c7d9c02, which
C++-fied gdb/common/environ.[ch], I mistakenly altered the behaviour
of the 'unset environment' command.  This command, which should delete
all environment variables, is now resetting the list of variables to
the state they were when GDB was started.

This commit fixes this regression, and also adds a test on
gdb.base/environ.exp which really checks if 'unset environment'
worked.

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

	PR gdb/21954
	* infcmd.c (unset_environment_command): Use the 'clear' method on
	the environment instead of resetting it.

gdb/testsuite/ChangeLog:
2017-08-15  Sergio Durigan Junior  <sergiodj@redhat.com>

	PR gdb/21954
	* gdb.base/environ.exp: Add test to check if 'unset environment'
	works.
2017-08-15 13:49:18 -04:00
Tom Tromey d6382fffde Fix two regressions in scalar printing
PR gdb/21675 points out a few regressions in scalar printing.

One type of regression is due to not carrying over the old handling of
floating point printing -- where a format like "/d" causes a floating
point number to first be cast to a signed integer.  This patch restores
this behavior.

The other regression is a longstanding bug in print_octal_chars: one of
the constants was wrong.  This patch fixes the constant and adds static
asserts to help catch this sort of error.

ChangeLog
2017-08-14  Tom Tromey  <tom@tromey.com>

	PR gdb/21675
	* valprint.c (LOW_ZERO): Change value to 034.
	(print_octal_chars): Add static_asserts for octal constants.
	* printcmd.c (print_scalar_formatted): Add 'd' case.

testsuite/ChangeLog
2017-08-14  Tom Tromey  <tom@tromey.com>

	PR gdb/21675:
	* gdb.base/printcmds.exp (test_radices): New function.
	* gdb.dwarf2/var-access.exp: Use p/u, not p/d.
	* gdb.base/sizeof.exp (check_valueof): Use p/d.
	* lib/gdb.exp (get_integer_valueof): Use p/d.
2017-08-14 10:14:05 -06:00
Yao Qi 46a62268b8 Catch exceptions thrown from gdbarch_skip_prologue
PR 21555 is caused by the exception during the prologue analysis when re-set
a breakpoint.

(gdb) bt
 #0  memory_error_message (err=TARGET_XFER_E_IO, gdbarch=0x153db50, memaddr=93824992233232) at ../../binutils-gdb/gdb/corefile.c:192
 #1  0x00000000005718ed in memory_error (err=TARGET_XFER_E_IO, memaddr=memaddr@entry=93824992233232) at ../../binutils-gdb/gdb/corefile.c:220
 #2  0x00000000005719d6 in read_memory_object (object=object@entry=TARGET_OBJECT_CODE_MEMORY, memaddr=93824992233232, memaddr@entry=1, myaddr=myaddr@entry=0x7fffffffd0a0 "P\333S\001", len=len@entry=1) at ../../binutils-gdb/gdb/corefile.c:259
 #3  0x0000000000571c6e in read_code (len=1, myaddr=0x7fffffffd0a0 "P\333S\001", memaddr=<optimized out>) at ../../binutils-gdb/gdb/corefile.c:287
 #4  read_code_unsigned_integer (memaddr=memaddr@entry=93824992233232, len=len@entry=1, byte_order=byte_order@entry=BFD_ENDIAN_LITTLE)                          at ../../binutils-gdb/gdb/corefile.c:362
 #5  0x000000000041d4a0 in amd64_analyze_prologue (gdbarch=gdbarch@entry=0x153db50, pc=pc@entry=93824992233232, current_pc=current_pc@entry=18446744073709551615, cache=cache@entry=0x7fffffffd1e0) at ../../binutils-gdb/gdb/amd64-tdep.c:2310
 #6  0x000000000041e404 in amd64_skip_prologue (gdbarch=0x153db50, start_pc=93824992233232) at ../../binutils-gdb/gdb/amd64-tdep.c:2459
 #7  0x000000000067bfb0 in skip_prologue_sal (sal=sal@entry=0x7fffffffd4e0) at ../../binutils-gdb/gdb/symtab.c:3628
 #8  0x000000000067c4d8 in find_function_start_sal (sym=sym@entry=0x1549960, funfirstline=1) at ../../binutils-gdb/gdb/symtab.c:3501
 #9  0x000000000060999d in symbol_to_sal (result=result@entry=0x7fffffffd5f0, funfirstline=<optimized out>, sym=sym@entry=0x1549960) at ../../binutils-gdb/gdb/linespec.c:3860
....
 #16 0x000000000054b733 in location_to_sals (b=b@entry=0x15792d0, location=0x157c230, search_pspace=search_pspace@entry=0x1148120, found=found@entry=0x7fffffffdc64) at ../../binutils-gdb/gdb/breakpoint.c:14211
 #17 0x000000000054c1f5 in breakpoint_re_set_default (b=0x15792d0) at ../../binutils-gdb/gdb/breakpoint.c:14301
 #18 0x00000000005412a9 in breakpoint_re_set_one (bint=bint@entry=0x15792d0) at ../../binutils-gdb/gdb/breakpoint.c:14412

This problem can be fixed by

 - either each prologue analyzer doesn't throw exception,
 - or catch the exception thrown from gdbarch_skip_prologue,

I choose the latter because the former needs to fix *every* prologue
analyzer to not throw exception.

This error can be reproduced by changing reread.exp.  The test reread.exp
has already test that breakpoint can be reset correctly after the
executable is re-read.  This patch extends this test by compiling test c
file with and without -fPIE.

(gdb) run ^M
The program being debugged has been started already.^M
Start it from the beginning? (y or n) y^M
x86_64/gdb/testsuite/outputs/gdb.base/reread/reread' has changed; re-reading symbols.
Error in re-setting breakpoint 1: Cannot access memory at address 0x555555554790^M
Error in re-setting breakpoint 2: Cannot access memory at address 0x555555554790^M
Starting program: /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.base/reread/reread ^M
This is foo^M
[Inferior 1 (process 27720) exited normally]^M
(gdb) FAIL: gdb.base/reread.exp: opts= "-fPIE" "ldflags=-pie" : run to foo() second time (the program exited)

This patch doesn't re-indent the code, to keep the patch simple.

gdb:

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

	PR gdb/21555
	* arch-utils.c (gdbarch_skip_prologue_noexcept): New function.
	* arch-utils.h (gdbarch_skip_prologue_noexcept): Declare.
	* infrun.c: Include arch-utils.h
	(handle_step_into_function): Call gdbarch_skip_prologue_noexcept.
	(handle_step_into_function_backward): Likewise.
	* symtab.c (skip_prologue_sal): Likewise.

gdb/testsuite:

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

	PR gdb/21555
	* gdb.base/reread.exp: Wrap the whole test with two kinds of
	compilation flags, with -fPIE and without -fPIE.
2017-07-25 11:38:50 +01:00
Pedro Alves 47e77640be Make language_def O(1)
Profiling GDB with the rest of series applied, I saw calls to
language_def showing up high in some runs.  The problem is that
language_def is O(N) currently, since walk the languages vector each
time to find the matching language_defn.

IMO, the add_language mechanism is pointless, because "enum language"
implies the core of GDB needs to know about all languages anyway.  So
simply make the languages vector array be an array where each
element's index is the corresponding enum language enumerator.  Note
that "local_language_defn" is gone along the way.  It's just a copy of
"auto", so the new code simply maps one to the other.  One fewer place
to update when we need to change the language vector...

Also, a while ago the output of "set language" was made out of order
as side effect of some other change.  While I was at it, I made them
sorted again.

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

	* ada-lang.c (ada_language_defn): Make extern.
	(_initialize_ada_language): Remove add_language call.
	* c-lang.c (c_language_defn, cplus_language_defn)
	(asm_language_defn, minimal_language_defn): Make extern.
	(_initialize_c_language): Delete.
	* completer.c (compare_cstrings): Delete, moved to utils.h.
	* d-lang.c (d_language_defn): Make extern.
	(_initialize_d_language): Remove add_language calls.
	* defs.h (enum language): Add comment.
	* f-lang.c (f_language_defn): Make extern.
	(_initialize_f_language): Remove add_language call.
	* go-lang.c (go_language_defn): Make extern.
	(_initialize_go_language): Remove add_language call.
	* language.c: Include <algorithm>.
	(languages): Redefine as const array.
	(languages_size, languages_allocsize, DEFAULT_ALLOCSIZE): Delete.
	(set_language_command): Handle "local".  Use for-range loop.
	(set_language): Remove loop.
	(language_enum): Rewrite.
	(language_def, language_str): Remove loops.
	(add_language): Delete.
	(add_set_language_command): New, based on add_languages.
	(skip_language_trampoline): Adjust.
	(local_language_defn): Delete.
	(language_gdbarch_post_init): Adjust.
	(_initialize_language): Remove add_language calls.  Call
	add_set_language_command.
	* language.h (add_language): Delete.
	(auto_language_defn)
	(unknown_language_defn, minimal_language_defn, ada_language_defn)
	(asm_language_defn, c_language_defn, cplus_language_defn)
	(d_language_defn, f_language_defn, go_language_defn)
	(m2_language_defn, objc_language_defn, opencl_language_defn)
	(pascal_language_defn, rust_language_defn): Declare.
	* m2-lang.c (m2_language_defn): Make extern.
	(_initialize_m2_language): Remove add_language call.
	* objc-lang.c (objc_language_defn): Make extern.
	(_initialize_objc_language): Remove add_language call.
	* opencl-lang.c (opencl_language_defn): Make extern.
	(_initialize_opencl_language): Remove add_language call.
	* p-lang.c (pascal_language_defn): Make extern.
	(_initialize_pascal_language): Delete.
	* rust-lang.c (rust_language_defn): Make extern.
	(_initialize_rust_language): Delete.
	* utils.h (compare_cstrings): New static inline function.

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

	* gdb.base/default.exp (set language): Adjust expected output.
2017-07-20 18:28:01 +01:00
Pedro Alves 62d2a18a2e Make gdb.base/dmsym.exp independent of "set language ada"
This test is using "set language ada" expecting that to cause GDB to
do Ada symbol name matching.  That won't work when GDB uses the
symbol's language to decide which symbol matching algorithm to use,
because the test's symbols are C symbols.

So generalize the test a bit to not rely on Ada name matching rules.

Confirmed that by undoing the original fix the test was written for,
the test still fails.

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

	* gdb.base/dmsym.c (pck__foo__bar__minsym): Rename to ...
	(test_minsym): ... this, and make static.
	(get_pck__foo__bar__minsym): Rename to ...
	(get_test_minsym): ... this.
	* gdb.base/dmsym.exp (): Remove "set language ada" call.  Adjust
	symbol names and comments.
	* gdb.base/dmsym_main.c (get_pck__foo__bar__minsym): Rename to ...
	(get_test_minsym): ... this.
	(pck__foo__bar__minsym__2): Rename to ...
	(test_minsym): ... this.
	(main): Adjust.
2017-07-20 17:52:03 +01:00
Pedro Alves c45ec17c07 A smarter linespec completer
Continuing the theme of the explicit locations patch, this patch gets
rid of the need for quoting function names in linespec TAB completion.
To recap, when you have overloads in your program, and you want to set
a breakpoint in one of them:

 void function(int);  // set breakpoint here.
 void function(long);

 (gdb) b function(i[TAB]
 <all the symbols in the program that start with "i" are uselessly shown...>

This patch gets rid of the need for quoting by switching the linespec
completer to use the custom completion word point mechanism added in
the previous explicit location patch (extending it as needed), to
correctly determine the right completion word point.  In the case
above, we want the completer to figure out that it's completing a
function name that starts with "function(i", and it now does.

We also want the completer to know when it's potentially completing a
source file name, for:

(gdb) break source.[TAB] -> source.c:
(gdb) break source.c:  # Type line number or function name now

And we want it to know to complete label names, which it doesn't today:

(gdb) break function:lab[TAB]

etc., etc.

So what we want is for completion to grok the input string as closely
to how the linespec parser groks it.

With that in mind, the solution suggests itself - make the linespec
completer use the same parsing code as normal linespec parsing.

That's what the patch does.  The old completer is replaced by one that
reuses the actual linespec parser as much as possible.  This (ideally)
eliminate differences between what completion understands and actually
setting breakpoints understands by design.

The completer now offers sensible completion candidates depending on
which component of the linespec is being completed, source filename,
function, line number, expression, and (a new addition), labels.  For
example, when completing the function part, we now show the full name
of the method as completion candidates, instead of showing whatever
comes after what readline considered the word break character:

 (gdb) break klass::method[TAB]
 klass:method1(int)
 klass:method2()

If input is past the function, then we now offer keyword condidates:

  (gdb) b function(int) [TAB]
  if      task    thread

If input is past a keyword, we offer expression completion, which is
different from linespec completion:

  (gdb) b main if 1 + glo[TAB]
  global

(e.g., completes on types, struct data fields, etc.)

As mentioned, this teaches the linespec completer about completing
label symbols too:

  (gdb) b source.c:function:lab[TAB]

A nice convenience is that when completion uniquely matches a source
name, gdb adds the ":" automatically for you:

  (gdb) b filenam[TAB]
  (gdb) b filename.c:  # ':' auto-added, cursor right after it.

It's the little details.  :-)

I worked on this patch in parallel with writing the (big) testcase
added closer to the end of the series, which exercises many many
tricky cases around quoting and whitespace insertion placement.  In
general, I think it now all Just Works.

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

	* completer.c (complete_source_filenames): New function.
	(complete_address_and_linespec_locations): New function.
	(location_completer): Use complete_address_and_linespec_locations.
	(completion_tracker::build_completion_result): Honor the tracker's
	request to suppress append.
	* completer.h (completion_tracker::suppress_append_ws)
	(completion_tracker::set_suppress_append_ws): New methods.
	(completion_tracker::m_suppress_append_ws): New field.
	(complete_source_filenames): New declaration.
	* linespec.c (linespec_complete_what): New.
	(struct ls_parser) <complete_what, completion_word,
	completion_quote_char, completion_quote_end, completion_tracker>:
	New fields.
	(string_find_incomplete_keyword_at_end): New.
	(linespec_lexer_lex_string): Record quote char.  If in completion
	mode, don't throw.
	(linespec_lexer_consume_token): Advance the completion word point.
	(linespec_lexer_peek_token): Save/restore completion info.
	(save_stream_and_consume_token): New.
	(set_completion_after_number): New.
	(linespec_parse_basic): Set what to complete next depending on
	token.  Handle function and label completions specially.
	(parse_linespec): Disable objc shortcut in completion mode.  Set
	what to complete next depending on token type.  Skip keyword if in
	completion mode.
	(complete_linespec_component, linespec_complete): New.
	* linespec.h (linespec_complete): Declare.

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

	* gdb.base/completion.exp: Adjust expected output.
	* gdb.linespec/ls-errs.exp: Don't send tab characters, now that
	the completer works.
2017-07-17 20:29:37 +01:00
Pedro Alves eb17d4137d Expression completer should not match explicit location options
This commit fixes a mismatch between what "print" command completer
thinks the command understands, and what the command actually
understands.

The explicit location options are understood by commands that take
(linespecs and) explicit locations as argument.  I.e, breakpoint
commands, and "list".  For example:

 (gdb) b -source file.c -function my_func

So for those commands, it makes sense that the completer
completes:

 "b -sour[TAB]" -> "b -source "
 "b -functi[TAB]" -> "b -function "

etc.

However, completion for commands that take expressions (not
linespecs/locations) as arguments, such as the "print" command, also
completes the explicit location options, even though those switches
aren't really understood by these commands.  Instead, "-foo" is
understood as an expression applying unary minus on a symbol named
"foo" (think "print -1"):

 (gdb) p -func[TAB]
 (gdb) p -function [RET]
 No symbol "function" in current context.

The patch fixes this by having the expression_completer function
bypass the function that completes explicit locations.

New regression tests included.

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

	* completer.c (expression_completer): Call
	linespec_location_completer instead of location_completer.

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

	* gdb.base/printcmds.exp: Add tests.
2017-06-29 15:53:48 +01:00
Doug Gilmore 41664b45ab Fix PR 21337: segfault when re-reading symbols.
Fix issue exposed by commit 3e29f34.

The basic issue is that section data referenced through an objfile
pointer can also be referenced via the program-space data pointer,
although via a separate mapping mechanism, which is set up by
update_section_map.  Thus once section data attached to an objfile
pointer is released, the section map associated with the program-space
data pointer must be marked dirty to ensure that update_section_map is
called to prevent stale data being referenced.  For the matter at hand
this marking is being done via a call to objfiles_changed.

Before commit 3e29f34 objfiles_changed could be called after all of
the objfile pointers were processed in reread_symbols since section
data references via the program-space data pointer would not occur in
the calls of read_symbols performed by reread_symbols.

With commit 3e29f34 MIPS target specific calls to find_pc_section were
added to the code for DWARF information processing, which is called
via read_symbols.  Thus in reread_symbols the call to objfiles_changed
needs to be called before calling read_symbols, otherwise stale
section data can be referenced.

Thanks to Luis Machado for providing text for the main comment
associated with the change.

gdb/
2017-06-28  Doug Gilmore  <Doug.Gilmore@imgtec.com>
    PR gdb/21337
    * symfile.c (reread_symbols): Call objfiles_changed just before
    read_symbols.

gdb/testsuite/
2017-06-28  Doug Gilmore  <Doug.Gilmore@imgtec.com>
    PR gdb/21337
    * gdb.base/reread-readsym.exp: New file.
    * gdb.base/reread-readsym.c: New file.
2017-06-28 02:54:22 +01:00
Andreas Arnez 805acca042 gdb/testsuite: Add "get_endianness" convenience proc
The test suite contains multiple instances of determining the target's
endianness with GDB's "show endian" command.  This patch replaces these by
an invocation of a new convenience proc 'get_endianness'.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (get_endianness): New proc.
	* gdb.arch/aarch64-fp.exp: Use it.
	* gdb.arch/altivec-regs.exp: Likewise.
	* gdb.arch/e500-regs.exp: Likewise.
	* gdb.arch/vsx-regs.exp: Likewise.
	* gdb.base/dump.exp: Likewise.
	* gdb.base/funcargs.exp: Likewise.
	* gdb.base/gnu_vector.exp: Likewise.
	* gdb.dwarf2/formdata16.exp: Likewise.
	* gdb.dwarf2/implptrpiece.exp: Likewise.
	* gdb.dwarf2/nonvar-access.exp: Likewise.
	* gdb.python/py-inferior.exp: Likewise.
	* gdb.trace/unavailable-dwarf-piece.exp: Likewise.
2017-06-13 15:20:26 +02:00
Sergio Durigan Junior aefd8b33d9 Implement proper "startup-with-shell" support on gdbserver
This patch implements the proper support for the "startup-with-shell"
feature on gdbserver.  A new packet is added, QStartupWithShell, and
it is sent on initialization.  If the host sends a
"QStartupWithShell:1", it means the inferior shall be started using a
shell.  If the host sends a "QStartupWithShell:0", it means the
inferior shall be started without using a shell.  Any other value is
considered an error.

There is no way to remotely set the shell that will be used by the
target to start the inferior.  In order to do that, the user must
start gdbserver while providing a shell via the $SHELL environment
variable.  The same is true for the host side.

The "set startup-with-shell" setting from the host side is used to
decide whether to start the remote inferior using a shell.  This same
setting is also used to decide whether to use a shell to start the
host inferior; this means that it is not really possible to start the
inferior using different mechanisms on target and host.

A documentation patch is included, along with a new testcase for the
feature.

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

	* NEWS (Changes since GDB 8.0): Announce that GDBserver is now
	able to start inferiors	using a shell.
	(New remote packets): Announce new packet "QStartupWithShell".
	* remote.c: Add PACKET_QStartupWithShell.
	(extended_remote_create_inferior): Handle new
	PACKET_QStartupWithShell.
	(remote_protocol_features) <QStartupWithShell>: New entry for
	PACKET_QStartupWithShell.
	(_initialize_remote): Call "add_packet_config_cmd" for
	QStartupShell.

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

	* server.c (handle_general_set): Handle new packet
	"QStartupWithShell".
	(handle_query): Add "QStartupWithShell" to the list of supported
	packets.
	(gdbserver_usage): Add help text explaining the
	new "--startup-with-shell" and "--no-startup-with-shell" CLI
	options.
	(captured_main): Recognize and act upon the presence of the new
	CLI options.

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

	* gdb.base/startup-with-shell.c: New file.
	* gdb.base/startup-with-shell.exp: Likewise.

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

	* gdb.texinfo (Starting) <startup-with-shell>: Add @anchor.
	(Connecting) <Remote Packet>: Add "startup-with-shell"
	and "QStartupWithShell" to the table.
	(Remote Protocol) <QStartupWithShell>: New item, explaining the
	packet.
2017-06-07 19:56:09 -04:00
Simon Marchi 8e86a419d7 gdb.base/watch-cond-infcall.exp: Don't run if target doesn't support infcalls
This test requires calling a function in the inferior, and therefore it
doesn't make sense to run it if the target doesn't support calling
functions from GDB.

gdb/testsuite/ChangeLog:

	* gdb.base/watch-cond-infcall.exp: Don't run if target doesn't
	support function calls from GDB.
2017-05-30 11:24:52 +02:00
Thomas Preud'homme 3e3e7faebe Expect prompt after no FPU warning
2017-05-18  Thomas Preud'homme  <thomas.preudhomme@arm.com>

gdb/testsuite/
	* gdb.base/float.exp: Expect GDB prompt for targets without FPU.
2017-05-18 16:31:40 +01:00
Pedro Alves 59cc050d89 gdb.base/fileio.c: Fix several -Wmaybe-uninitialized warnings
src/gdb/testsuite/gdb.base/fileio.c: In function ‘test_write’:
 src/gdb/testsuite/gdb.base/fileio.c:158:5: warning: ‘ret’ may be used uninitialized in this function [-Wmaybe-uninitialized]
      printf ("write 1: ret = %d, errno = %d\n", ret, errno);
      ^

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

	* gdb.base/fileio.c (test_write, test_read, test_close)
	(test_fstat): Don't print 'ret' in the fail path.
2017-05-18 12:56:38 +01:00
Pedro Alves c8f6abd10d gdb.base/fileio.c: Fix several -Wreturn-type warnings
All the "test_" functions warn like:

  src/gdb/testsuite/gdb.base/fileio.c: In function ‘test_close’:
  src/gdb/testsuite/gdb.base/fileio.c:280:1: warning: control reaches end of non-void function [-Wreturn-type]
   }
   ^

Nothing looks at the return of these functions, so just make them
return void.  While at it, "()" is not the same as "(void)" in C - fix
that too.

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

	* gdb.base/fileio.c (stop, test_open, test_write, test_read)
	(test_lseek, test_close, test_stat, test_fstat, test_isatty)
	(test_system, test_rename, test_unlink, test_time): Change
	prototypes.
	* gdb.base/fileio.exp (stop_msg): Adjust.
2017-05-18 12:56:16 +01:00
Pedro Alves d2a03b7745 gdb.base/fileio.exp: Remove nowarnings
... and quiet -Wnonnull in a different way.

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

	* gdb.base/fileio.c (null_str): New global.
	(test_stat): Use it.
	* gdb.base/fileio.exp: Remove nowarnings.
2017-05-18 11:47:05 +01:00
Yao Qi 0d5c69990c Add nowarnings in gdb.base/fileio.exp
I see the following warning in gdb.base/fileio.c,

testsuite/gdb.base/fileio.c:297:3: warning: null argument where non-null required (argument 1) [-Wnonnull]
   ret = stat (NULL, &st);
   ^

This patch adds "nowarnings" to the list passed to gdb_compile.

gdb/testsuite:

2017-05-17  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/fileio.exp: Pass nowarnings to gdb_compile.
2017-05-17 14:46:17 +01:00
Yao Qi 21873064e8 Add alias command to cmd_list_element
When we add alias command, we call add_alias_cmd and pass the alias name
and command name.  This implicitly requires the command and its prefix
commands are already added to cmdlist.  This may not be true, for example,

  add_com_alias ("tty", "set inferior-tty", class_alias, 0);

"inferior-tty" command is added to setlist, but setlist may not be added
to cmdlist (It depends on the order of related _initialize_XXX functions
called) so that we can't find "set inferior-tty" from cmdlist.

This patch fixes this problem by passing cmd_list_element of "inferior-tty"
to add_alias_cmd, so that cmd_list_element of "inferior-tty" doesn't have
to be reachable from cmdlist at that moment.

gdb:

2017-05-17  Yao Qi  <yao.qi@linaro.org>

	* cli/cli-decode.c (add_alias_cmd): New function.
	* command.h (add_alias_cmd): Declare.
	* infcmd.c (_initialize_infcmd): Don't call add_com_alias,
	instead call add_alias_cmd.

gdb/testsuite:

2017-05-17  Simon Marchi  <simon.marchi@ericsson.com>

	* gdb.base/set-inferior-tty.exp (test_set_inferior_tty): Add
	argument command.
	(top-level): Invoke test_set_inferior_tty.
2017-05-17 14:22:35 +01:00
Sergio Durigan Junior 45ce1b47e4 Make environ.exp run on all platforms (and create info-program.exp)
This has been on my TODO list for a while.  There's a really old bug
about this (PR testsuite/8595), and there was no reason for
environ.exp to be specific for hppa* targets.  So this patch removes
this constraint, modernizes the testcase, and cleans up some things.
Most of the tests remained, and some were rewritten (especially the
one that checks if "show environment" works, which is something kind
of hard to do).

As a bonus, I'm adding a separated info-program.exp file containing
all the tests related to "info program" that were present on
environ.exp.

Tested locally, everything still passes.

gdb/testsuite/ChangeLog:
2017-04-28  Sergio Durigan Junior  <sergiodj@redhat.com>

	PR testsuite/8595
	* gdb.base/environ.exp: Make test available in all architectures.
	Move bits related to "info program" testing to
	gdb.base/info-program.exp.  Rewrite tests to use the two new
	procedures mentione below.
	(test_set_show_env_var) New procedure.
	(test_set_show_env_var_equal): Likewise.
	* gdb.base/info-program.exp: New file.
2017-04-28 20:29:20 -04:00
Andreas Arnez 59a561480d Fix spurious FAILs with examine-backward.exp
The test case examine-backward.exp issues the command "x/-s" after the end
of the first string in TestStrings, but without making sure that this
string is preceded by a string terminator.  Thus GDB may spuriously print
some random characters from before that string, and then the test fails.

This patch assures that TestStrings is preceded by a string terminator.

gdb/testsuite/ChangeLog:

	* gdb.base/examine-backward.c (Barrier): New character array
	constant, to ensure that TestStrings is preceded by a string
	terminator.
2017-03-20 18:55:39 +01: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
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 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
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
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
Pedro Alves f8c4e718c2 Add describing intro comment to gdb.base/tui-layout.exp
gdb/testsuite/ChangeLog:
2017-03-07  Pedro Alves  <palves@redhat.com>

	* gdb.base/tui-layout.exp: Add intro comment and fix typo.
2017-03-07 13:53:16 +00:00
Sergio Durigan Junior 99e8a4f9f8 PR gdb/21164: maint print {symbols,msymbols,psymbols} without args crash
This is a fix for PR gdb/21164.  The problem started to happen after:

 commit 34c41c681f
 Author:     Doug Evans <xdje42@gmail.com>
 AuthorDate: Mon Dec 19 08:33:46 2016 -0800

    New syntax for mt print symbols,msymbols,psymbols.

This change introduced new syntax for the mentioned commands, and
improved the parsing of arguments by using 'gdb_buildargv'.  However,
it is necessary to check if the argv being built is not NULL, which
can happen if the user doesn't provide any arguments to these
commands.

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

	PR gdb/21164
	* psymtab.c (maintenance_print_psymbols): Verify if 'argv' is not
	NULL before using it.
	* symmisc.c (maintenance_print_symbols): Likewise.
	(maintenance_print_msymbols): Likewise.

gdb/testsuite/ChangeLog:

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

	PR gdb/21164
	* gdb.base/maint.exp: Add testcases for when the commands do
	not have arguments.
2017-02-15 19:54:10 -05:00
Simon Marchi 26a06916b6 Do not send queries on secondary UIs
This is a follow-up to

  https://sourceware.org/ml/gdb-patches/2017-02/msg00261.html

This patch restricts queries to the main UI, which allows to avoid two
different problems.

The first one is that GDB is issuing queries on secondary MI channels
for which a TTY is allocated.  The second one is that GDB is not able to
handle queries on two (CLI) UIs simultaneously.  Restricting queries to
the main UI allows to bypass these two problems.

More details on how/why these two problems happen:

1. Queries on secondary MI UI

  The current criterion to decide if we should query the user is whether
  the input stream is a TTY.  The original way to start GDB in MI mode
  from a front-end was to create a subprocess with pipes to its
  stdin/stdout.  In this case, the input was considered non-interactive
  and queries were auto-answered.  Now that front-ends can create the MI
  channel as a separate UI connected to a dedicated TTY, GDB now
  considers this input stream as interactive and sends queries to it.
  By restricting queries to the main UI, we make sure we never query on
  the secondary MI UI.

2. Simultaneous queries

  As Pedro stated it, when you have two queries on two different CLI UIs
  at the same time, you end up with the following pseudo stack:

  #0 gdb_readline_wrapper
  #1 defaulted_query                 // for UI #2
  #2 handle_command
  #3 execute_command ("handle SIGTRAP" ....
  #4 stdin_event_handler             // input on UI #2
  #5 gdb_do_one_event
  #7 gdb_readline_wrapper
  #8 defaulted_query                 // for UI #1
  #9 handle_command
  #10 execute_command ("handle SIGINT" ....
  #11 stdin_event_handler            // input on UI #1
  #12 gdb_do_one_event
  #13 gdb_readline_wrapper

  trying to answer the query on UI #1 will therefore answer for UI #2.

  By restricting the queries to the main UI, we ensure that there will
  never be more than one pending query, since you can't have two queries
  on a UI at the same time.

I added a snippet to gdb.base/new-ui.exp to verify that we get a query
on the main UI, but that we don't on the secondary one (or, more
precisely, that it gets auto-answered).

gdb/ChangeLog:

	* utils.c (defaulted_query): Don't query on secondary UIs.

gdb/testsuite/ChangeLog:

	* gdb.base/new-ui.exp (do_test): Test queries behavior on main
	and extra UIs.
2017-02-10 16:29:50 -05:00
Simon Marchi b761ca9e3d new-ui.exp: Use proc_with_prefix
gdb/testsuite/ChangeLog:

	* gdb.base/new-ui.exp (do_test, do_test_invalid_args): Use
	proc_with_prefix.
2017-02-10 16:29:45 -05:00
Martin Galvan 18da0c51da PR gdb/21122: Fix documentation mistakes for breakpoint commands
Currently, the breakpoint documentation refers to some commands taking breakpoint
"ranges" as arguments. We discussed this with Pedro and concluded that it would
be more accurate to speak in terms of breakpoint "lists", whose elements can optionally
be ranges. I also fixed a couple of minor mistakes in the docs.

gdb/ChangeLog:

	* breakpoint.c (_initialize_breakpoint): Update the help description
	of the 'commands' command to indicate that it takes a list argument.

gdb/doc/ChangeLog:

	* gdb.texinfo (Breakpoints): Reword documentation to speak in terms of
	space-separated breakpoint lists.  Also add a missing @table command
	and @cindex for breakpoint lists.

gdb/testsuite/ChangeLog:

	* gdb.base/help.exp: Update match pattern for testing 'help commands'.
2017-02-10 13:38:54 -03:00
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 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
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
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 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
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 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 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 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
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
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
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
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
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
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
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 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
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
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
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
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
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
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