Commit Graph

41505 Commits

Author SHA1 Message Date
Tom Tromey e148f09d75 Move the symbol lists to buildsym_compunit
This moves the global symbol lists into buildsym_compunit, adds
accessors, and updates all the users.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* xcoffread.c (read_xcoff_symtab, process_xcoff_symbol): Update.
	* stabsread.c (patch_block_stabs, define_symbol, read_type)
	(read_enum_type, common_block_start, common_block_end)
	(cleanup_undefined_types_1, finish_global_stabs): Update.
	* mdebugread.c (psymtab_to_symtab_1): Update.
	* dwarf2read.c (fixup_go_packaging, read_func_scope)
	(read_lexical_block_scope, new_symbol): Update.
	* dbxread.c (process_one_symbol): Update.
	* coffread.c (coff_symtab_read, process_coff_symbol)
	(coff_read_enum_type): Update.
	* buildsym.h (file_symbols, global_symbols, local_symbols): Don't
	declare.
	(get_local_symbols, get_file_symbols, get_global_symbols): New
	functions.
	* buildsym.c (~buildsym_compunit): Clean up m_file_symbols and
	m_global_symbols.
	<m_file_symbols, m_local_symbols, m_global_symbols>: New members.
	(~scoped_free_pendings): Update.
	(finish_block, prepare_for_building, reset_symtab_globals)
	(end_symtab_get_static_block, end_symtab_with_blockvector)
	(augment_type_symtab, push_context): Update.
	(get_local_symbols, get_file_symbols, get_global_symbols): New
	functions.
	(buildsym_init): Update.
2018-07-20 09:42:46 -06:00
Tom Tromey 93b8bea414 Set list_in_scope later in DWARF reader
Currently the DWARF reader sets the list_in_scope member of the CU
when first starting to process symbols.  Future changes will make this
assert -- code will not be able to refer to these lists until after
start_symtab has been called.  This patch prepares for the problem by
arranging to initialize list_in_scope in dwarf2_start_symtab.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (process_full_comp_unit): Do not set list_in_scope.
	(process_full_type_unit): Likewise.
	(dwarf2_start_symtab): Set list_in_scope.
2018-07-20 09:42:46 -06:00
Tom Tromey f62f6af5da Do not look at file symbols when reading psymtabs
The DWARF reader was setting the list_in_scope member when reading
partial symbols.  however, this member is only useful when reading
full symbols.  Future patches will make this assert, so remove these
unneeded initializations.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (process_psymtab_comp_unit_reader)
	(build_type_psymtabs_reader): Do not set list_in_scope.
2018-07-20 09:42:45 -06:00
Tom Tromey 1d376700df Remove free_pendings
buildsym.c currently keeps a free list of "struct pending"s.  However,
this didn't seem necessary to me, and so this patch removes the free
list.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* buildsym.c (free_pendings): Remove.
	(add_symbol_to_list, scoped_free_pendings)
	(finish_block_internal, buildsym_init): Update.
2018-07-20 09:42:44 -06:00
Tom Tromey c233e9c641 Remove the "listhead" argument from finish_block
finish_block is only ever called with "&local_symbols" as the
"listhead" argument.  So, remove this argument.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* xcoffread.c (read_xcoff_symtab): Update.
	* dwarf2read.c (read_func_scope, read_lexical_block_scope):
	Update.
	* dbxread.c (process_one_symbol): Update.
	* coffread.c (coff_symtab_read): Update.
	* buildsym.h (finish_block): Update.
	* buildsym.c (finish_block): Remove "listhead" argument.
	(end_symtab_get_static_block): Update.
2018-07-20 09:42:44 -06:00
Tom Tromey 5ac045503d Move pending_blocks and pending_block_obstack to buildsym_compunit
This moves the pending_blocks and pending_block_obstack into
buildsym_compunit.

The obstack could perhaps be merged with the addrmap obstack, but I
did not do that in this series.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* buildsym.h (class scoped_free_pendings): Remove constructor.
	* buildsym.c (struct buildsym_compunit) <free_pending_blocks>: New
	method.
	<m_pending_block_obstack, m_pending_blocks>: New members.
	(pending_block_obstack, pending_blocks): Remove.
	(scoped_free_pendings::scoped_free_pendings): Default.
	(~scoped_free_pendings): Update.
	(free_pending_blocks): Remove.
	(finish_block_internal, record_pending_block, make_blockvector)
	(end_symtab_get_static_block, augment_type_symtab, push_context)
	(buildsym_init): Update.
2018-07-20 09:42:43 -06:00
Tom Tromey 7ea05a7b63 Move pending addrmap globals to buildsym_compunit
This moves the pending addrmap-related globals into buildsym_compunit.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* buildsym.c (struct buildsym_compunit) <m_pending_addrmap,
	m_pending_addrmap_obstack, m_pending_addrmap_interesting>: New
	members.
	(pending_addrmap, pending_addrmap_obstack)
	(pending_addrmap_interesting): Remove.
	(scoped_free_pendings, record_block_range, make_blockvector)
	(prepare_for_building, reset_symtab_globals, buildsym_init):
	Update.
2018-07-20 09:42:43 -06:00
Tom Tromey 3c65e5b31c Move current_subfile to buildsym_compunit
This moves the global current_subfile into buildsym_compunit.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* xcoffread.c (process_linenos): Update.
	* stabsread.c (define_symbol, read_type, read_enum_type): Update.
	* mdebugread.c (psymtab_to_symtab_1): Update.
	* dwarf2read.c (setup_type_unit_groups)
	(lnp_state_machine::handle_set_file, dwarf_record_line_p)
	(lnp_state_machine::record_line, dwarf_decode_lines): Update.
	* dbxread.c (process_one_symbol): Update.
	* coffread.c (coff_symtab_read, enter_linenos)
	(process_coff_symbol): Update.
	* buildsym.h (current_subfile): Don't declare.
	(get_current_subfile): Declare.
	* buildsym.c (struct buildsym_compunit) <m_current_subfile>: New
	member.
	(start_subfile, free_buildsym_compunit, push_subfile)
	(prepare_for_building, start_symtab): Update.
	(get_current_subfile): New function.
2018-07-20 09:42:42 -06:00
Tom Tromey a60f3166aa Move the context stack to buildsym_compunit
This moves the context stack globals to be members of
buildsym_compunit, changing the type to a std::vector in the process.

Because the callers expect the context stack object to be valid after
being popped, at Simon's suggestion I've changed pop_context to return
the object rather than the pointer.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* coffread.c (coff_symtab_read): Update.
	* xcoffread.c (read_xcoff_symtab): Update.
	* dwarf2read.c (new_symbol): Update.
	(read_func_scope, read_lexical_block_scope): Update.
	* dbxread.c (process_one_symbol): Update.
	* buildsym.h (context_stack, context_stack_depth): Don't declare.
	(outermost_context_p): Remove macro.
	(outermost_context_p, get_current_context_stack)
	(get_context_stack_depth): Declare.
	(pop_context): Return struct context_stack.
	* buildsym.c (struct buildsym_compunit) <m_context_stack: New
	member.
	(context_stack_size): Remove.
	(INITIAL_CONTEXT_STACK_SIZE): Remove.
	(prepare_for_building, end_symtab_get_static_block)
	(augment_type_symtab, push_context): Update.
	(pop_context): Return struct context_stack.
	(outermost_context_p, get_current_context_stack)
	(get_context_stack_depth): New functions.
	(buildsym_init): Update.
2018-07-20 09:42:41 -06:00
Tom Tromey 56ba65a047 Make the Rust parser pure
This makes the Rust parser a pure parser and removes all the
(non-constant) globals from rust-exp.y.  This seemed like a nice
simplification to me and I think it should probably be applied to all
the parsers.  Perhaps it would be good to go even one step farther and
have all parsers derive from parser_state.

Tested on x86-64 Fedora 26.

gdb/ChangeLog
2018-07-20  Tom Tromey  <tom@tromey.com>

	* rust-exp.y: Now a pure parser.  Update all rules.
	(%union): Move earlier.
	(current_parser, work_obstack): Remove globals.
	(rust_parser, ~rust_parser): Update.
	(class rust_parser) <copy_name, concat3, crate_name, super_name,
	lex_character, lex_number, lex_string, lex_identifier,
	rust_lookup_type, convert_params_to_types, convert_ast_to_type,
	convert_name, convert_params_to_expression,
	convert_ast_to_expression, ast_basic_type, ast_operation,
	ast_compound_assignment, rust_op, ast_literal, ast_dliteral,
	ast_structop, ast_structop_anonymous, ast_unary, ast_cast,
	ast_call_ish, ast_path, ast_string, ast_struct, ast_range,
	ast_array_type, ast_slice_type, ast_reference_type,
	ast_pointer_type, ast_function_type, ast_tuple_type>: New methods.
	(rust_parse): Update.
	(rustyyerror, rustyylex): Add parser parameter.
	(rust_lex_test_one, rust_lex_int_test, rust_lex_exception_test)
	(rust_lex_stringish_test, rust_lex_test_sequence)
	(rust_lex_test_trailing_dot, rust_lex_test_completion)
	(rust_lex_test_push_back, rust_lex_tests): Update.
2018-07-20 09:40:18 -06:00
Tom de Vries 232a00325b [gdb/testsuite] Make noclone conditional in vla-optimized-out.c
Make the noclone attribute on f1 in vla-optimized-out.c conditional.  This
makes the test-case by default identical to
gcc/testsuite/gcc.dg/guality/vla-1.c.

Tested on x86_64-linux.

2018-07-20  Tom de Vries  <tdevries@suse.de>

	* gdb.base/vla-optimized-out.c: Make noclone attribute conditional on
	NOCLONE macro.
	* gdb.base/vla-optimized-out.exp: Use additional_flags -DNOCLONE.
2018-07-20 17:04:02 +02:00
Pedro Alves 4c6933327e Eliminate remaining gdb/guile cleanups
The remaining gdb/guile cleanups all handle the memory returned by
gdbscm_scm_to_c_string.

This commit makes gdbscm_scm_to_c_string return a
gdb::unique_xmalloc_ptr instead of a naked pointer, and eliminates the
remaining cleanups.

gdb/ChangeLog:
2018-07-19  Pedro Alves  <palves@redhat.com>

	* guile/guile-internal.h (gdbscm_scm_to_c_string): Now returns a
	gdb::unique_xmalloc_ptr.
	* guile/scm-breakpoint.c (gdbscm_set_breakpoint_condition_x):
	Adjust to use dbscm_wrap and gdb::unique_xmalloc_ptr.
	* guile/scm-exception.c (gdbscm_exception_message_to_string): Use
	copy-initialization.
	* guile/scm-pretty-print.c (ppscm_print_children): Use
	gdb::unique_xmalloc_ptr instead of cleanups.
	(gdbscm_apply_val_pretty_printer): Remove cleanups.
	* guile/scm-string.c (gdbscm_scm_to_c_string): Now returns a
	gdb::unique_xmalloc_ptr.
	* guile/scm-type.c (gdbscm_type_field, gdbscm_type_has_field_p):
	Adjust to use gdb::unique_xmalloc_ptr.
	* guile/scm-utils.c (extract_arg): Adjust.
	* guile/scm-value.c (gdbscm_value_field): Adjust to use
	gdb::unique_xmalloc_ptr instead of a cleanup.
2018-07-19 16:34:55 +01:00
Tom Tromey 4581dc8297 Remove make_cleanup_value_free_to_mark
Pedro's patch to introduce gdbscm_wrap removed the last caller of
make_cleanup_value_free_to_mark.  This patch removes this function.

I'm checking this in as obvious.  Tested by rebuilding, and by
grepping.

gdb/ChangeLog
2018-07-19  Tom Tromey  <tom@tromey.com>

	* utils.c (do_value_free_to_mark)
	(make_cleanup_value_free_to_mark): Remove.
	* utils.h (make_cleanup_value_free_to_mark): Remove.
2018-07-19 08:52:24 -06:00
Tom de Vries fbb1d502ee [gdb/testsuite] Fix regexp in list-thread-groups-available.exp
I ran into a gdb.mi/list-thread-groups-available.exp failure:
...
Running gdb/testsuite/gdb.mi/list-thread-groups-available.exp ...
FAIL: gdb.mi/list-thread-groups-available.exp:
        list available thread groups (unexpected output)
PASS: gdb.mi/list-thread-groups-available.exp:
        list available thread groups with filter
...
When doing an experiment of running it 100 times in a row, the failure
reproduced 3 times.

Analyzing the original failure led to insufficient quoting of square brackets
in a regexp.  This patch fixes the regexp, which resulted in 0 failures in a
100-in-a-row run.

Tested on x86_64-linux.

2018-07-19  Tom de Vries  <tdevries@suse.de>

	* gdb.mi/list-thread-groups-available.exp (cores_re): Fix quoting in
	regular	expression.
2018-07-19 16:51:22 +02:00
Pedro Alves 43cc6c3adb gdbscm_wrap, really forward args
Commit 557e56be26 ("Eliminate most remaining cleanups under
gdb/guile/") missed adding the && to Args to really forward the
arguments properly.  Noticed by inspection.

gdb/ChangeLog:
2018-07-19  Pedro Alves  <palves@redhat.com>

	* guile/guile-internal.h (gdbscm_wrap): Really make 'args' a
	forwarding reference.
2018-07-19 10:56:47 +01:00
Pedro Alves 3a5f2a48ff Eliminate cleanup in gdbscm_execute_gdb_command
Note: the "may be modified" comment is no longer true nowadays.

gdb/ChangeLog:
2018-07-18  Pedro Alves  <palves@redhat.com>

	* guile/guile.c (gdbscm_execute_gdb_command): Adjust to use
	gdbscm_wrap.  Use gdb::unique_xmalloc_ptr<char> instead of a
	cleanup.
2018-07-18 23:41:06 +01:00
Pedro Alves 557e56be26 Eliminate most remaining cleanups under gdb/guile/
The main complication with the Guile code is that we have two types of
exceptions to consider.  GDB/C++ exceptions, and Guile/SJLJ
exceptions.  Code that is facing the Guile interpreter must not throw
GDB exceptions, instead Scheme exceptions must be thrown.  Also,
because Guile exceptions are SJLJ based, Guile-facing code must not
use local objects with dtors, unless wrapped in a scope with a
TRY/CATCH, because the dtors won't otherwise be run when a Guile
exceptions is thrown.

This commit adds a new gdbscm_wrap wrapper function than encapsulates
a pattern I noticed in many of the functions using
GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS.  The wrapper is written
such that you can pass either a lambda to it, or a function plus a
variable number of forwarded args.  I used a lambda when its body
would be reasonably short, and a separate function in the larger
cases.

This also convers a few functions that were using
GDBSCM_HANDLE_GDB_EXCEPTION to use gdbscm_wrap too because they
followed a similar pattern.

A few cases of make_cleanup calls are replaced with explicit xfree
calls.  The make_cleanup/do_cleanups calls in those cases are
pointless, because do_cleanups won't be called when a Scheme exception
is thrown.

We also have a couple cases of Guile-facing code using RAII-type
objects to manage memory, but those are incorrect, exactly because
their dtor won't be called if a Guile exception is thrown.

gdb/ChangeLog:
2018-07-18  Pedro Alves  <palves@redhat.com>

	* guile/guile-internal.h: Add comment about mixing GDB and Scheme
	exceptions.
	(GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS): Delete.
	(gdbscm_wrap): New.
	* guile/scm-frame.c (gdbscm_frame_read_register): Use xfree
	directly instead of a cleanup.
	* guile/scm-math.c (vlscm_unop_gdbthrow): New, factored out from ...
	(vlscm_unop): ... this.  Reimplement using gdbscm_wrap.
	(vlscm_binop_gdbthrow): New, factored out from ...
	(vlscm_binop): ... this.  Reimplement using gdbscm_wrap.
	(vlscm_rich_compare): Use gdbscm_wrap.
	* guile/scm-symbol.c (gdbscm_lookup_symbol): Use xfree directly
	instead of a cleanup.
	(gdbscm_lookup_global_symbol): Use xfree directly instead of a
	cleanup.
	* guile/scm-type.c (gdbscm_type_field, gdbscm_type_has_field_p):
	Use xfree directly instead of a cleanup.
	* guile/scm-value.c (gdbscm_make_value, gdbscm_make_lazy_value):
	Adjust to use gdbscm_wrap and scoped_value_mark.
	(gdbscm_value_optimized_out_p): Adjust to use gdbscm_wrap.
	(gdbscm_value_address, gdbscm_value_dereference)
	(gdbscm_value_referenced_value): Adjust to use gdbscm_wrap and
	scoped_value_mark.
	(gdbscm_value_dynamic_type): Use scoped_value_mark.
	(vlscm_do_cast, gdbscm_value_field): Adjust to use gdbscm_wrap and
	scoped_value_mark.
	(gdbscm_value_subscript, gdbscm_value_call): Adjust to use
	gdbscm_wrap and scoped_value_mark.
	(gdbscm_value_to_string): Use xfree directly instead of a
	cleanup.  Move 'buffer' unique_ptr to TRY scope.
	(gdbscm_value_to_lazy_string): Use xfree directly instead of a
	cleanup.  Move 'buffer' unique_ptr to TRY scope.  Use
	scoped_value_mark.
	(gdbscm_value_fetch_lazy_x): Use gdbscm_wrap.
	(gdbscm_parse_and_eval): Adjust to use gdbscm_wrap and
	scoped_value_mark.
	(gdbscm_history_ref, gdbscm_history_append_x): Adjust to use
	gdbscm_wrap.
2018-07-18 22:55:59 +01:00
Tom de Vries 42dc7699a2 [gdb/exp] Fix printing of type of optimized out vla
Consider this snippet from gcc/testsuite/gcc.dg/guality/vla-1.c:
...
int __attribute__((noinline))
f1 (int i)
{
  char a[i + 1];
  a[0] = 5;             /* { dg-final { gdb-test .+1 "i" "5" } } */
  return a[0];          /* { dg-final { gdb-test . "sizeof (a)" "6" } } */
}
...

When we compile the test-case with -O1 -g, and query the size of optimized
out vla 'a', we get:
...
$ ./gdb -batch -ex "b f1" -ex "r" -ex "p sizeof (a)" vla-1.exe
Breakpoint 1 at 0x4004a8: file vla-1.c, line 17.

Breakpoint 1, f1 (i=i@entry=5) at vla-1.c:17
17        return a[0];
$1 = 0
...
while we expect a size of '6'.

The problem is that default_read_var_value does not resolve the dynamic type
of a variable if the variable is optimized out.

This patch fixes that, and consequently gdb prints '6', as expected.

Tested on x86_64-linux.

2018-07-18  Tom de Vries  <tdevries@suse.de>

	* findvar.c (default_read_var_value): Also resolve dynamic type for
	LOC_OPTIMIZED_OUT vars.

	* gdb.base/vla-optimized-out.c: New test.
	* gdb.base/vla-optimized-out.exp: New file.
2018-07-18 22:02:34 +02:00
Maciej W. Rozycki 6592ceed48 microMIPS: Add SYSCALL instruction decoding
Fix a bug with commit 4cc0665f24 ("microMIPS support"),
<https://sourceware.org/ml/gdb-patches/2012-05/msg00724.html>, and add
missing microMIPS SYSCALL instruction decoding needed to determine the
location to put a breakpoint at when single-stepping though a syscall.

	gdb/
	* mips-tdep.c (micromips_next_pc): Add SYSCALL instruction
	decoding.
2018-07-18 19:17:39 +01:00
Tom Tromey c6c6149af4 Return unique_xmalloc_ptr from gdbscm_scm_to_string
This changes gdbscm_scm_to_string to return a unique_xmalloc_ptr and
then fixes all the callers.  This allows for the removal of some
cleanups.

gdb/ChangeLog
2018-07-17  Tom Tromey  <tom@tromey.com>

	* guile/scm-param.c (pascm_set_func, pascm_show_func)
	(compute_enum_list, pascm_set_param_value_x)
	(gdbscm_parameter_value): Update.
	* guile/guile-internal.h (gdbscm_scm_to_string): Update.
	(gdbscm_scm_to_host_string): Update.
	* guile/scm-math.c (vlscm_convert_typed_value_from_scheme):
	Update.
	* guile/scm-cmd.c (cmdscm_add_completion): Update.
	* guile/scm-pretty-print.c (ppscm_print_string_repr): Update.
	* guile/scm-string.c (gdbscm_scm_to_string): Return
	unique_xmalloc_ptr.
	(gdbscm_scm_to_host_string): Likewise.
2018-07-17 13:21:48 -06:00
Tom Tromey a1a31cb8dc Return unique_xmalloc_ptr from gdbscm_safe_eval_string
This changes gdbscm_safe_eval_string to return a unique_xmalloc_ptr.
This allows for the removal of some cleanups.  It also fixes a
potential latent memory leak in gdbscm_set_backtrace.

gdb/ChangeLog
2018-07-17  Tom Tromey  <tom@tromey.com>

	* guile/guile.c (gdbscm_eval_from_control_command): Update.
	* guile/guile-internal.h (gdbscm_safe_eval_string): Update.
	* guile/scm-objfile.c (gdbscm_execute_objfile_script): Update.
	* guile/scm-safe-call.c (gdbscm_safe_eval_string): Return
	unique_xmalloc_ptr.
2018-07-17 13:21:47 -06:00
Tom Tromey 15bf30027b Change gdbscm_exception_message_to_string to return a unique_xmalloc_ptr
This changes gdbscm_exception_message_to_string to return a
unique_xmalloc_ptr, allowing for the removal of some cleanups.
unique_xmalloc_ptr was chosen because at the root of the call chains
is a function from Guile that returns a malloc'd string.

gdb/ChangeLog
2018-07-17  Tom Tromey  <tom@tromey.com>

	* guile/scm-param.c (pascm_signal_setshow_error): Update.
	* guile/guile-internal.h (gdbscm_exception_message_to_string):
	Update.
	* guile/scm-cmd.c (cmdscm_function): Update.
	* guile/scm-pretty-print.c
	(ppscm_print_exception_unless_memory_error): Update.
	* guile/scm-exception.c (gdbscm_exception_message_to_string):
	Return unique_xmalloc_ptr.
2018-07-17 13:21:47 -06:00
Tom Tromey 7eb1a66c26 Use std::string in ppscm_make_pp_type_error_exception
This changes ppscm_make_pp_type_error_exception to use std::string,
removing a cleanup.

gdb/ChangeLog
2018-07-17  Tom Tromey  <tom@tromey.com>

	* guile/scm-pretty-print.c (ppscm_make_pp_type_error_exception):
	Use string_printf.
2018-07-17 13:21:46 -06:00
Jim Wilson 27724bad00 RISC-V: Don't decrement pc after break.
gdb/
	* riscv-tdep.c (riscv_has_feature): Delete comment that refers to
	set_gdbarch_decr_pc_after_break.  Call riscv_read_misa_reg always.
	(riscv_gdbarch_init): Delete local has_compressed_isa.  Delete now
	unecessary braces after EF_RISCV_RVC test.  Delete call to
	set_gdbarch_decr_pc_after_break.
2018-07-17 09:44:42 -07:00
Jim Wilson ce73f31015 RISC-V: Correct legacy misa register number.
gdb/
	* riscv-tdep.h (DECLARE_CSR): Use RISCV_FIRST_CSR_REGNUM instead of
	RISCV_LAST_FP_REGNUM + 1.
	(RSICV_CSR_LEGACY_MISA_REGNUM): Add RISCV_FIRST_CSR_REGNUM.
2018-07-17 09:42:23 -07:00
Tom Tromey 056dec39ed Remove --disable-gdbcli
I think it doesn't really make sense to allow building gdb without the
CLI.  Perhaps at one time this was a goal, but libgdb is long gone and
the CLI is intrinsic to gdb.

So, this patch removes the implementation of this configure option.
It is still recognized (this is autoconf's default), but does nothing.

This simplifies configure.ac and Makefile.in a bit.

Tested by rebuilding.

gdb/ChangeLog
2018-07-17  Tom Tromey  <tom@tromey.com>

	* configure.ac: Remove --disable-gdbcli.
	* configure: Rebuild.
	* Makefile.in (SUBDIR_CLI_DEPS, SUBDIR_CLI_LDFLAGS)
	(SUBDIR_CLI_CFLAGS): Remove.
	(SFILES): Use SUBDIR_CLI_SRCS.
	(COMMON_OBS): Use SUBDIR_CLI_OBS.
2018-07-17 09:54:17 -06:00
Tom Tromey 4735f0edf4 Use scoped_free_pendings in coff_symtab_read
PR gdb/18624 concerns an assertion failure that occurs when setting a
breakpoint in a Go program on Windows.

What happens here is that coff_symtab_read uses buildsym but does not
instantiate scoped_free_pendings.  So, the struct pending objects are
never released.  Later, dwarf2read.c calls buildsym_init, which
asserts.

This patch fixes the problem by instantiating scoped_free_pendings in
coff_symtab_read.

Tested using the test executable from the PR.  I don't know how to
test this more fully.

gdb/ChangeLog
2018-07-17  Tom Tromey  <tom@tromey.com>

	PR gdb/18624:
	* coffread.c (coff_symtab_read): Use scoped_free_pendings.
2018-07-17 09:30:57 -06:00
Jim Wilson 117a0e996d RISC-V: Add osabi support.
gdb/
	* riscv-tdep.c (riscv_gdbarch_init): Call gdbarch_init_osabi.
2018-07-16 14:50:36 -07:00
Simon Marchi 8a67aaa818 Add missing ChangeLog entry
I forgot (yes, again) the ChangeLog entry in my latest patch.
2018-07-16 14:31:11 -04:00
Simon Marchi b4792091ca Remove unused variables in ia64*tdep.c
gdb/ChangeLog:

	* ia64-libunwind-tdep.c (libunwind_frame_cache): Remove unused
	variable.
	(libunwind_frame_sniffer): Likewise.
	(libunwind_frame_prev_register): Likewise.
	(libunwind_sigtramp_frame_sniffer): Likewise.
	* ia64-tdep.c (ia64_access_reg): Likewise.
	(ia64_access_rse_reg): Likewise.
	(ia64_libunwind_sigtramp_frame_this_id): Likewise.
	* ia64-vms-tdep.c (ia64_vms_find_proc_info_x): Likewise.
2018-07-16 14:30:30 -04:00
Simon Marchi ec74dcd894 Fix compilation error in ia64-vms-tdep.c with libunwind-ia64
I found this when doing a --enable-targets=all build with libunwind-ia64
properly configured.

  CXX    ia64-vms-tdep.o
/home/emaisin/src/binutils-gdb/gdb/ia64-vms-tdep.c: In function ‘int ia64_vms_find_proc_info_x(unw_addr_space_t, unw_word_t, unw_proc_info_t*, int, void*)’:
/home/emaisin/src/binutils-gdb/gdb/ia64-vms-tdep.c:79:33: error: invalid conversion from ‘void*’ to ‘gdb_byte* {aka unsigned char*}’ [-fpermissive]
                             pi->unwind_info, pi->unwind_info_size);
                                 ^
In file included from /home/emaisin/src/binutils-gdb/gdb/target.h:70:0,
                 from /home/emaisin/src/binutils-gdb/gdb/exec.h:23,
                 from /home/emaisin/src/binutils-gdb/gdb/gdbcore.h:29,
                 from /home/emaisin/src/binutils-gdb/gdb/ia64-vms-tdep.c:25:
/home/emaisin/src/binutils-gdb/gdb/target/target.h:35:12: note:   initializing argument 2 of ‘int target_read_memory(CORE_ADDR, gdb_byte*, ssize_t)’
 extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr,
            ^

gdb/ChangeLog:

	* ia64-vms-tdep.c (ia64_vms_find_proc_info_x): Add cast.
2018-07-16 14:15:37 -04:00
Simon Marchi a700e753e5 remote-sim.c: Remove unused variables
gdb/ChangeLog:

	* remote-sim.c (gdbsim_target::close,
	gdbsim_target::mourn_inferior): Remove unused variables.
2018-07-16 14:08:49 -04:00
Simon Marchi 8b411ff8d5 Add missing ChangeLog entry
I forgot to append the ChangeLog entry to the last commit...
2018-07-16 14:08:26 -04:00
Simon Marchi 5d691c8829 Fix compilation error in ia64-tdep.c with libunwind-ia64
Commit

  9018be22e0 ("Make target_read_alloc & al return vectors")

failed to update the code in ia64-tdep.c, for HAVE_LIBUNWIND_IA64_H.
This patch fixes that.

gdb/ChangeLog:

	* ia64-tdep.c (ktab_buf): New global.
	(getunwind_table): Return a gdb::optional<gdb::byte_vector>.
	(get_kernel_table): Adjust.
2018-07-16 13:59:39 -04:00
Tom Tromey edb0470b99 Use outermost_context_p in more places
This changes a few explicit checks of context_stack_depth to use
outermost_context_p instead.  This simplifies some future work.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* xcoffread.c (read_xcoff_symtab): Use outermost_context_p.
	* dwarf2read.c (using_directives, new_symbol): Use
	outermost_context_p.
	* dbxread.c (process_one_symbol): Use outermost_context_p.
	* coffread.c (coff_symtab_read): Use outermost_context_p.
2018-07-16 08:55:22 -06:00
Tom Tromey 6cccc9a891 Move the using directives to buildsym_compunit
This moves the globals local_using_directives and
global_using_directives to be members of buildsym_compunit, and adds
the necessary accessors.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (using_directives, read_func_scope)
	(read_lexical_block_scope): Update.
	* cp-namespace.c (cp_scan_for_anonymous_namespaces): Update.
	* buildsym.h (local_using_directives, global_using_directives):
	Don't declare.
	(get_local_using_directives, set_local_using_directives)
	(get_global_using_directives): Declare.
	* buildsym.c (struct buildsym_compunit) <m_local_using_directives,
	m_global_using_directives>: New members.
	(finish_block_internal, prepare_for_building)
	(reset_symtab_globals, end_symtab_get_static_block)
	(push_context): Update.
	(get_local_using_directives, set_local_using_directives)
	(get_global_using_directives): New functions.
	(buildsym_init): Update.
2018-07-16 08:55:22 -06:00
Tom Tromey 652788a731 Make free_pending_blocks static
free_pending_blocks can be static because scoped_free_pendings (et al)
arrange for it to be NULL in the "steady state".  This removes a
couple of unnecessary calls to free_pending_blocks and changes it to
be static.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* xcoffread.c (xcoff_initial_scan): Don't call
	free_pending_blocks.
	* dbxread.c (dbx_symfile_read): Don't call free_pending_blocks.
	* buildsym.h (class scoped_free_pendings): Add constructor.
	(free_pending_blocks): Don't declare.
	* buildsym.c (scoped_free_pendings::scoped_free_pendings): New.
	(free_pending_blocks): Now static.
2018-07-16 08:55:21 -06:00
Tom Tromey 8419ee5331 Move the subfile stack to buildsym_compunit
This moves the global subfile_stack to be a member of
buildsym_compunit.  It also change this to be a std::vector, which
simplifies the code.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.h (push_subfile, pop_subfile): Update declarations.
	* buildsym.c (struct buildsym_compunit) <m_subfile_stack>: New
	member.
	(struct subfile_stack): Remove.
	(subfile_stack): Remove.
	(push_subfile, pop_subfile, buildsym_init): Update.
2018-07-16 08:55:21 -06:00
Tom Tromey ccdac490bb Use gdb_assert in two places in buildsym.c
This changes buildsym.c to use gdb_assert rather than internal_error
in a couple of spots.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.c (push_subfile): Use gdb_assert.
	(pop_subfile): Use gdb_assert.
2018-07-16 08:55:20 -06:00
Tom Tromey 43130d6f96 Remove merge_symbol_lists
I discovered that merge_symbol_lists is unused, so this removes it.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.h (merge_symbol_lists): Remove.
	* buildsym.c (merge_symbol_lists): Remove.
2018-07-16 08:55:20 -06:00
Tom Tromey 77d6f1aa16 Move scan_file_globals declaration to stabsread.h
scan_file_globals is defined in stabsread.c, so move its declaration
to stabsread.h.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* stabsread.c (scan_file_globals): Update comment.
	* stabsread.h (scan_file_globals): Move from buildsym.h.
	* buildsym.h (scan_file_globals): Move to stabsread.h.
2018-07-16 08:55:19 -06:00
Tom Tromey 2c722d18f3 Remove buildsym_new_init
buildsym_new_init is just an alias for buildsym_init.  This removes
it.  In the long run buildsym_init will also go away; this patch just
helps make things a bit clearer in the meantime.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* xcoffread.c (xcoff_new_init): Update.
	* mipsread.c (mipscoff_new_init): Update.
	* mdebugread.c (mdebug_build_psymtabs): Update.
	* elfread.c (elf_new_init): Update.
	* dbxread.c (dbx_new_init, coffstab_build_psymtabs)
	(elfstab_build_psymtabs, stabsect_build_psymtabs): Update.
	* buildsym.h (buildsym_new_init): Don't declare.
	* buildsym.c (buildsym_new_init): Remove.
2018-07-16 08:55:19 -06:00
Tom Tromey 5985ac614d Move within_function to stabsread
The global within_function is only used by a few symbol readers.  This
patch moves the global out of buildsym and into stabsread, which
seemed like a better fit.  It also arranges for the existing readers
to clear the global at the appropriate time.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* stabsread.h (within_function): Move from buildsym.h.
	* stabsread.c (start_stabs): Clear within_function.
	* coffread.c (coff_start_symtab): Clear within_function.
	* buildsym.h (within_function): Move to stabsread.h.
	* buildsym.c (prepare_for_building): Update.
2018-07-16 08:55:18 -06:00
Tom Tromey 6b84eeb216 Move processing_gcc to stabsread
processing_gcc is also only used by stabsread -- it is set by the
DWARF reader, but this turns out not to be needed.  So, this patch
moves processing_gcc and removes the assignment from the DWARF reader.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* stabsread.h (processing_gcc_compilation): Move from buildsym.h.
	* dwarf2read.c (dwarf2_start_symtab): Don't set
	processing_gcc_compilation.
	* buildsym.h (processing_gcc_compilation): Move to stabsread.h.
2018-07-16 08:55:18 -06:00
Tom Tromey 2150c3ef04 Move some code from buildsym to stabsread
A few things that currently reside in buildsym.c turn out to be
specific to the stabs reader.  This patch moves these from
buildsym.[ch] to stabsread.[ch].

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* stabsread.h (HASHSIZE, hashname, symnum, next_symbol_text)
	(next_symbol_text_func): Move from buildsym.h.
	* stabsread.c (hashname): Move from buildsym.c.
	* buildsym.h (HASHSIZE, symnum, next_symbol_text)
	(next_symbol_text_func, hashname): Move to stabsread.h.
	* buildsym.c: Don't include bcache.h
	(hashname): Move to stasbread.c.
2018-07-16 08:55:17 -06:00
Tom Tromey 0ec44fc067 Make context_stack_size static in buildsym.c
context_stack_size is declared in buildsym.h, but only used in
buildsym.c.  This makes it static in buildsym.c.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.h (context_stack_size): Don't declare.
	* buildsym.c (context_stack_size): New global.
2018-07-16 08:55:17 -06:00
Tom Tromey 81cc346dc9 Move processing_acc_compilation to dbxread.c
processing_acc_compilation is only used in dbxread.c, so move it
there.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* dbxread.c (processing_acc_compilation): New global.
	* buildsym.h (processing_acc_compilation): Don't declare.
2018-07-16 08:55:16 -06:00
Tom Tromey 2c99ee5c4f Move last_source_start_addr to buildsym_compunit
This moves the global last_source_start_addr into buildsym_compunit,
adding some accessors as well.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* xcoffread.c (aix_process_linenos, complete_symtab): Update.
	* dbxread.c (read_ofile_symtab): Update.
	* coffread.c (coff_start_symtab, coff_end_symtab): Update.
	* buildsym.h (last_source_start_addr): Remove.
	(set_last_source_start_addr, get_last_source_start_addr):
	Declare.
	* buildsym.c (buildsym_compunit::buildsym_compunit): Add last_addr
	parameter.
	(struct buildsym_compunit) <m_last_source_start_addr>: New
	member.
	(prepare_for_building): Remove start_addr parameter.
	(start_symtab, restart_symtab, end_symtab_get_static_block)
	(end_symtab_with_blockvector): Update.
	(set_last_source_start_addr, get_last_source_start_addr): New
	functions.
2018-07-16 08:55:16 -06:00
Tom Tromey 530fedbcbf Move have_line_numbers to buildsym_compunit
This moves the global have_line_numbers into buildsym_compunit.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.c (struct buildsym_compunit) <m_have_line_numbers>: New
	member.
	(have_line_numbers): Remove.
	(record_line, prepare_for_building, end_symtab_get_static_block)
	(augment_type_symtab): Update.
2018-07-16 08:55:16 -06:00
Tom Tromey 6a976300e7 Move pending_macros to buildsym_compunit
This moves the pending_macros global into buildsym_compunit.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.c (~buildsym_compunit): Free the macro table.
	(struct buildsym_compunit) <get_macro_table, release_macros>: New
	methods.
	<m_pending_macros>: New member.
	(pending_macros): Remove.
	(~scoped_free_pendings, get_macro_table, prepare_for_building)
	(reset_symtab_globals, end_symtab_get_static_block)
	(end_symtab_with_blockvector, augment_type_symtab)
	(buildsym_init): Update.
2018-07-16 08:55:15 -06:00
Tom Tromey c0015d4497 Move last_source file to buildsym_compunit
This moves the global last_source_file into buildsym_compunit.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.c (buildsym_compunit::buildsym_compunit): Add name
	parameter.
	(buildsym_compunit::set_last_source_file): New method.
	<m_last_source_file>: New member.
	(prepare_for_building): Remove "name" parameter.
	(start_symtab, restart_symtab, reset_symtab_globals): Update.
	(last_source_file): Remove.
	(set_last_source_file, get_last_source_file): Update.
2018-07-16 08:55:15 -06:00
Tom Tromey e62cca7ccb Add assert in prepare_for_building
This adds an assertion in prepare_for_building.  This was useful for
verifying whether some subsequent changes were valid.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.c (prepare_for_building): Add assert.
2018-07-16 08:55:14 -06:00
Tom Tromey 905eb0e293 Change buildsym_compunit::comp_dir to be a unique_xmalloc_ptr
This change buildsym_compunit::comp_dir to be a unique_xmalloc_ptr.
This is just a small cleanup to remove some manual memory management.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.c (~buildsym_compunit): Update.
	(struct buildsym_compunit) <comp_unit>: Now a unique_xmalloc_ptr.
	(start_subfile, patch_subfile_names)
	(end_symtab_with_blockvector): Update.
2018-07-16 08:55:14 -06:00
Tom Tromey b248663fe5 Use new and delete for buildsym_compunit
This changes buildsym_compunit to use new and delete.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

	* buildsym.c (struct buildsym_compunit): Add constructor,
	destructor, initializers.
	(start_buildsym_compunit): Remove.
	(free_buildsym_compunit): Use "delete".
	(start_symtab, restart_symtab): Use "new".
2018-07-16 08:55:13 -06:00
Simon Marchi 4869c5854e Fix filename in prior ChangeLog entry 2018-07-15 10:40:49 -04:00
Simon Marchi ff27d0737e Remove struct keyword in range-based for loop
Fix this with  gcc 6.3.0:

/home/simark/src/binutils-gdb/gdb/symfile.c: In function 'void set_objfile_default_section_offset(objfile*, const section_addr_info&, CORE_ADDR)':
/home/simark/src/binutils-gdb/gdb/symfile.c:2114:14: error: types may not be defined in a for-range-declaration [-Werror]
   for (const struct other_sections *objf_sect : objf_addrs_sorted)
              ^~~~~~
gdb/ChangeLog:

	* symfile.c (set_objfile_default_section_offset): Remove struct
	keyword.
2018-07-13 22:06:34 -04:00
Stafford Horne 6a15ecf5e0 gdb: Add Stafford Horne as or1k maintainer.
Since I helped upstream openrisc I would like to claim responsibility to
maintain it.

gdb/ChangeLog:

yyyy-mm-dd  Stafford Horne  <shorne@gmail.com>

	* (Responsible Maintainers): Add myself as or1k maintainer.

Signed-off-by: Stafford Horne <shorne@gmail.com>
2018-07-14 05:59:26 +09:00
Sergio Durigan Junior 7f1f7e2393 Expect for another variant of error message when gdbserver cannot resolve hostname
I've noticed that on a few hosts, when given an invalid hostname,
gdbserver fails with:

  spawn /../../gdb/gdbserver/gdbserver --once tcp8:123:2353 /gdb/build/fedora-s390x/build/gdb/testsuite/outputs/gdb.server/server-connect/server-connect
  tcp8:123:2353: cannot resolve name: No address associated with hostname
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Exiting

Unfortunately, this causes a fail on the new
gdb.server/server-connect.exp test (introduced by the IPv6 patch):

  FAIL: gdb.server/server-connect.exp: tcp8: start gdbserver: gdbserver should fail but did not

This happens because we're expecting for another variant of this error
message:

  cannot resolve name: Name or service not known

Therefore, this patch extends the helper function 'gdbserver_start' to
also recognize the "No address associated with hostname" message.
This "fixes" the testcase on the hosts that use this variant.

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

	* lib/gdbserver-support.exp (gdbserver_start): Expect for the
	message "No address associated with hostname" when gdbserver
	cannot resolve the hostname.
2018-07-13 16:20:34 -04:00
Tom Tromey 027a4c30d0 Remove a warning on macOS
This removes a clang warning coming from -Wmissing-braces.

ChangeLog
2018-07-13  Tom Tromey  <tom@tromey.com>

	* symfile.c (set_objfile_default_section_offset): Use extra braces
	around initializer.
2018-07-13 11:14:57 -06:00
Andreas Arnez 5c1eda30f5 S390: Fix displaced stepping of "basr r,0"
The BASR instruction behaves differently depending on whether the second
operand is a number from 1 to 15, or zero.  In the former case BASR jumps
to the address contained in the general register of that number, but in
the latter case no jump is performed.  GDB's displaced-stepping logic does
not distinguish these cases, although it should.

This is fixed.  In the case where no jump is performed the PC is adjusted
to point back after the original instruction.  Otherwise the PC is left
alone.

gdb/ChangeLog:

	* s390-tdep.c (s390_displaced_step_fixup): Adjust PC for a
	non-branching basr.
2018-07-13 12:46:14 +02:00
Pedro Alves a780ef4f27 GDBserver: Pass process_info pointer to target_kill
We start from a process_info pointer, pass down process->pid, and
then the target_kill implementations need to find the process from the
pid again.  Pass the process_info pointer down directly instead.

gdb/gdbserver/ChangeLog:
2018-07-13  Pedro Alves  <palves@redhat.com>

	* linux-low.c (linux_kill): Change parameter to process_info
	pointer instead of pid.  Adjust.
	* lynx-low.c (lynx_kill): Likewise.
	* nto-low.c (nto_kill): Likewise.
	* spu-low.c (spu_kill): Likewise.
	* win32-low.c (win32_kill): Likewise.
	* server.c (handle_v_kill, kill_inferior_callback)
	(detach_or_kill_for_exit): Adjust.
	* target.c (kill_inferior): Change parameter to process_info
	pointer instead of pid.  Adjust.
	* target.h (struct target_ops) <kill>: Change parameter to
	process_info pointer instead of pid.  Adjust all implementations
	and callers.
	(kill_inferior): Likewise.
2018-07-13 10:58:17 +01:00
Pedro Alves ef2ddb33bd GDBserver: Pass process_info pointer to target_detach and target_join
We start from a process_info pointer, pass down process->pid, and then
the target_detach and target_join implementations need to find the
process from the pid again.  Pass the process_info pointer down
directly instead.

gdb/gdbserver/ChangeLog:
2018-07-13  Pedro Alves  <palves@redhat.com>

	* linux-low.c (linux_detach, linux_join): Change parameter to
	process_info pointer instead of pid.  Adjust.
	* lynx-low.c (lynx_detach, lynx_join): Likewise.
	* nto-low.c (nto_detach): Likewise.
	* spu-low.c (spu_detach, spu_join): Likewise.
	* win32-low.c (win32_detach, win32_join): Likewise.
	* server.c (handle_detach, detach_or_kill_for_exit): Adjust.
	* target.h (struct target_ops) <detach, join>: Change parameter to
	process_info pointer instead of pid.  Adjust all implementations
	and callers.
	(detach_inferior, join_inferior): Rename 'pid' parameter to
	'proc'.
2018-07-13 10:28:46 +01:00
Philippe Waroquiers bc7b042bcb Add a self-test for cli-utils.c
tests added for:
* number_or_range_parser
  In particular, it tests the cur_tok when parsing is finished.

* parse_flags

* parse_flags_qcs

gdb/ChangeLog
2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
	unittests/cli-utils-selftests.c
	* unittests/cli-utils-selftests.c: New file.
2018-07-12 23:10:56 +02:00
Philippe Waroquiers 5759ebb3b3 Modify gdb.threads/pthreads.exp to test FLAG qcs arguments for thread apply.
Also, add prefixes to make some non unique tests unique.

gdb/testsuite/ChangeLog
2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.threads/pthreads.exp: Test qcs FLAG arguments.
	Add some test prefixes to make tests unique.
2018-07-12 23:10:29 +02:00
Philippe Waroquiers 3606ccab0f Add a test for 'frame apply'
gdb/testsuite/ChangeLog
2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.base/frameapply.c: New file.
	* gdb.base/frameapply.exp: New file.
2018-07-12 23:06:08 +02:00
Philippe Waroquiers a14c4daab2 Announce the user visible changes for frame/thread apply in NEWS.
'frame apply', faas, taas, tfaas commands and [FLAG]... arg for thread apply.

gdb/ChangeLog
2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* NEWS: Mention new commands.  Mention change to 'thread apply'.
2018-07-12 23:02:14 +02:00
Philippe Waroquiers 0a2323003c Documents the new commands 'frame apply', faas, taas, tfaas
Documents the new commands 'frame apply', faas, taas, tfaas.
Documents the new arguments [FLAG]... added to 'thread apply'.

gdb/doc/ChangeLog
2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.texinfo (Debugging Programs with Multiple Threads):
	Document changes to 'thread apply'.  Document 'taas'.
	Document 'tfaas'.
	(Examining the Stack): Document 'frame apply'.  Document 'faas'.
2018-07-12 22:50:36 +02:00
Philippe Waroquiers 1fe75df7eb Add [FLAG]... arguments to 'thread apply'.
Enhance 'thread apply' command to also accept [FLAG]... arguments.

An example usage for this new argument:
   thread apply all -s frame apply all -s p some_local_var_somewhere
      Prints the thread id, frame location and some_local_var_somewhere
      value in frames of threads that have such local var.

To make the life of the user easier, the most typical use cases
have shortcuts :
   taas  : shortcut for 'thread apply all -s'
   tfaas : shortcut for 'thread apply all -s frame apply all -s"

An example usage :
   tfaas p some_local_var_somewhere
     same as the longer:
        'thread apply all -s frame apply all -s p some_local_var_somewhere'

gdb/ChangeLog
2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* thread.c (thr_try_catch_cmd): New function.
	(thread_apply_all_command): Handle qcs flags.
	(thread_apply_command): Handle qcs flags.
	(taas_command): New function.
	(tfaas_command): New function.
	(_initialize_thread): Update to setup the new commands 'taas
	and 'tfaas'. Change doc string for 'thread apply'.
2018-07-12 22:50:36 +02:00
Philippe Waroquiers 6a70eb7d9b Implement frame apply [all | COUNT | -COUNT | level LEVEL... ] [FLAG]... COMMAND.
Implement frame apply [all | COUNT | -COUNT | level LEVEL... ] [FLAG]... COMMAND.
Also implement the command 'faas COMMAND', a shortcut for
'frame apply all -s COMMAND'.

The syntax of 'frame apply' to specify some innermost or outermost
frames is similar to 'backtrace' command, using COUNT or -COUNT.

To apply a COMMAND to a more specific set of frames, the following
new command and syntax can be used:
frame apply level LEVEL... [FLAG]... COMMAND
where LEVEL is one or more frame levels or range of frame levels.

The new command 'frame apply' allows to apply a COMMAND to a number of frames,
or to all frames, or to a set of frames.
The optional [FLAG]... arguments allow to control what output to produce
and how to handle errors raised when applying COMMAND to a frame.

Some example usages for this new command:
   frame apply all info frame
      Produce info frame for all frames.
   frame apply all p $sp
      For each frame, print the location, followed by the frame sp.
   frame apply all -q p $sp
      Same as before, but -q flag (q = quiet) indicates to only print
      the frames sp.
   frame apply all p some_local_var_somewhere
      Print some_local_var_somewhere in all frames. 'frame apply'
      will abort as soon as the print command fails.
   frame apply all -c p some_local_var_somewhere
      Same as before, but -c flag (c = continue) means to
      print the error and continue applying command in case the
      print command fails.
   frame apply all -s p some_local_var_somewhere
      Same as before, but -s flag (s = silent) means to
      be silent for frames where the print command fails.
      In other words, this allows to 'search' the frame in which
      some_local_var_somewhere can be printed.
   frame apply all -s -q p some_local_var_somewhere
      Same as before, but does not print the frame info in which
      the variable is found.
   frame apply level 2-4 5 8-10 -s p i = i + 1
      Increments i in the identified frames.

gdb/ChangeLog
2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* stack.c: (trailing_outermost_frame): New function, mostly
	extracted from backtrace_command_1.
	(leading_innermost_frame): New function.
	(backtrace_command_1): Update to call trailing_outermost_frame.
	(frame_apply_command_count): New function.
	(frame_apply_level_command): New function.
	(frame_apply_all_command): New function.
	(frame_apply_command): New function.
	(faas_command): New function.
	(frame_cmd_list): New variable.
	(_initialize_stack): Update to setup the new commands 'frame apply'
	and 'faas'.
2018-07-12 22:50:36 +02:00
Philippe Waroquiers 529c08b25e Add helper functions parse_flags and parse_flags_qcs
Add helper functions parse_flags and parse_flags_qcs.
parse_flags helper function allows to look for a set of flags at
the start of a string.
A flag must be given individually.

parse_flags_qcs is a specialised helper function to handle
the flags -q, -c and -s, that are used in the new command 'frame apply'
and in the command 'thread apply.

Modify number_or_range_parser::get_number to differentiate a
- followed by digits from a - followed by an alpha (i.e. a flag or an option).
That is needed for the addition of the [FLAG]... arguments to
thread apply ID... [FLAG]... COMMAND

Remove bool number_or_range_parser::m_finished, rather
implement the 'finished' logic inside number_or_range_parser::finished.
The new logic properly detects the end of parsing even if not at
end of the string. This ensures that number_or_range_parser::cur_tok
really points past the last parsed token when parsing is finished.
Before, it was always pointing at the end of the string.
As parsing now is finished directly when not positioned on a number,
number_is_in_list must do an error check before the loop getting all
numbers.

The error message for 'thread apply -$unknownconvvar p 1'
is now the more clear:
  Convenience variable must have integer value.
  Invalid thread ID: -$unknownconvvar p 1
instead of previously:
  negative value

gdb/ChangeLog
2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* cli-utils.c (number_or_range_parser::get_number): Only handle
	numbers or convenience var as numbers.
	(parse_flags): New function.
	(parse_flags_qcs): New function.
	(number_or_range_parser::finished): Ensure parsing end is detected
	before end of string.
	* cli-utils.h (parse_flags): New function.
	(parse_flags_qcs): New function.
	(number_or_range_parser): Remove m_finished bool.
	(number_or_range_parser::skip_range): Set m_in_range to false.

gdb/testsuite/ChangeLog
2018-07-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.base/skip.exp: Update expected error message.
2018-07-12 22:50:26 +02:00
Sergio Durigan Junior 64b5847236 Declare 'ioarg' (from ser-tcp.c:try_connect) as 'u_long' when on Windows (and unbreak build on mingw32)
When building GDB on mingw32, it fails with:

  ../../binutils-gdb/gdb/ser-tcp.c: In function 'int try_connect(const addrinfo*, unsigned int*)':
  ../../binutils-gdb/gdb/ser-tcp.c:176:25: error: invalid conversion from 'int*' to 'u_long* {aka long unsigned int*}' [-fpermissive]
     ioctl (sock, FIONBIO, &ioarg);
			   ^~~~~~
  In file included from ../../binutils-gdb/gdb/serial.h:23:0,
		   from ../../binutils-gdb/gdb/ser-tcp.c:21:
  /usr/x86_64-w64-mingw32/sys-root/mingw/include/winsock2.h:977:34: note:   initializing argument 3 of 'int ioctlsocket(SOCKET, long int, u_long*)'
     WINSOCK_API_LINKAGE int WSAAPI ioctlsocket(SOCKET s,__LONG32 cmd,u_long *argp);
				    ^~~~~~~~~~~
  make[2]: *** [Makefile:1610: ser-tcp.o] Error 1

The problem happens because the IPv6
commit (c7ab0aef11) wrongly removed the
code responsible for declaring 'ioarg' with a different type if
building for Windows.  This patch restores that.

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

	* ser-tcp.c (try_connect): Declare 'ioarg' as 'u_long' if building
	on Windows.
2018-07-12 13:03:31 -04:00
Sergio Durigan Junior c7ab0aef11 Implement IPv6 support for GDB/gdbserver
This patch implements IPv6 support for both GDB and gdbserver.  Based
on my research, it is the fourth attempt to do that since 2006.  Since
I used ideas from all of the previous patches, I also added their
authors's names on the ChangeLogs as a way to recognize their
efforts.  For reference sake, you can find the previous attempts at:

  https://sourceware.org/ml/gdb-patches/2006-09/msg00192.html

  https://sourceware.org/ml/gdb-patches/2014-02/msg00248.html

  https://sourceware.org/ml/gdb-patches/2016-02/msg00226.html

The basic idea behind the patch is to start using the new
'getaddrinfo'/'getnameinfo' calls, which are responsible for
translating names and addresses in a protocol-independent way.  This
means that if we ever have a new version of the IP protocol, we won't
need to change the code again (or, at least, won't have to change the
majority of the code).

The function 'getaddrinfo' returns a linked list of possible addresses
to connect to.  Dealing with multiple addresses proved to be a hard
task with the current TCP auto-retry mechanism implemented on
ser-tcp:net_open.  For example, when gdbserver listened only on an
IPv4 socket:

  $ ./gdbserver --once 127.0.0.1:1234 ./a.out

and GDB was instructed to try to connect to both IPv6 and IPv4
sockets:

  $ ./gdb -ex 'target extended-remote localhost:1234' ./a.out

the user would notice a somewhat big delay before GDB was able to
connect to the IPv4 socket.  This happened because GDB was trying to
connect to the IPv6 socket first, and had to wait until the connection
timed out before it tried to connect to the IPv4 socket.

For that reason, I had to rewrite the main loop and implement a new
method for handling multiple connections.  After some discussion,
Pedro and I agreed on the following algorithm:

  1) For each entry returned by 'getaddrinfo', we try to open a socket
  and connect to it.

  2.a) If we have a successful 'connect', we just use that connection.

  2.b) If we don't have a successfull 'connect', but if we've got a
  ECONNREFUSED (meaning the the connection was refused), we keep track
  of this fact by using a flag.

  2.c) If we don't have a successfull 'connect', but if we've got a
  EINPROGRESS (meaning that the connection is in progress), we perform
  a 'select' call on the socket until we have a result (either a
  successful connection, or an error on the socket).

  3) If tcp_auto_retry is true, and we haven't gotten a successful
  connection, and at least one of our attempts failed with
  ECONNREFUSED, then we wait a little bit (i.e., call
  'wait_for_connect'), check to see if there was a
  timeout/interruption (in which case we bail out), and then go back
  to (1).

After multiple tests, I was able to connect without delay on the
scenario described above, and was also able to connect in all other
types of scenarios.

I also implemented some hostname parsing functions (along with their
corresponding unit tests) which are used to help GDB and gdbserver to
parse hostname strings provided by the user.  These new functions are
living inside common/netstuff.[ch].  I've had to do that since IPv6
introduces a new URL scheme, which defines that square brackets can be
used to enclose the host part and differentiate it from the
port (e.g., "[::1]:1234" means "host ::1, port 1234").  I spent some
time thinking about a reasonable way to interpret what the user wants,
and I came up with the following:

  - If the user has provided a prefix that doesn't specify the protocol
    version (i.e., "tcp:" or "udp:"), or if the user has not provided
    any prefix, don't make any assumptions (i.e., assume AF_UNSPEC when
    dealing with 'getaddrinfo') *unless* the host starts with "[" (in
    which case, assume it's an IPv6 host).

  - If the user has provided a prefix that does specify the protocol
    version (i.e., "tcp4:", "tcp6:", "udp4:" or "udp6:"), then respect
    that.

This method doesn't follow strictly what RFC 2732 proposes (that
literal IPv6 addresses should be provided enclosed in "[" and "]")
because IPv6 addresses still can be provided without square brackets
in our case, but since we have prefixes to specify protocol versions I
think this is not an issue.

Another thing worth mentioning is the new 'GDB_TEST_SOCKETHOST'
testcase parameter, which makes it possible to specify the
hostname (without the port) to be used when testing GDB and
gdbserver.  For example, to run IPv6 tests:

  $ make check-gdb RUNTESTFLAGS='GDB_TEST_SOCKETHOST=tcp6:[::1]'

Or, to run IPv4 tests:

  $ make check-gdb RUNTESTFLAGS='GDB_TEST_SOCKETHOST=tcp4:127.0.0.1'

This required a few changes on the gdbserver-base.exp, and also a
minimal adjustment on gdb.server/run-without-local-binary.exp.

Finally, I've implemented a new testcase,
gdb.server/server-connect.exp, which is supposed to run on the native
host and perform various "smoke tests" using different connection
methods.

This patch has been regression-tested on BuildBot and locally, and
also built using a x86_64-w64-mingw32 GCC, and no problems were found.

gdb/ChangeLog:
2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
	    Jan Kratochvil  <jan.kratochvil@redhat.com>
	    Paul Fertser  <fercerpav@gmail.com>
	    Tsutomu Seki  <sekiriki@gmail.com>
	    Pedro Alves  <palves@redhat.com>

	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
	'unittests/parse-connection-spec-selftests.c'.
	(COMMON_SFILES): Add 'common/netstuff.c'.
	(HFILES_NO_SRCDIR): Add 'common/netstuff.h'.
	* NEWS (Changes since GDB 8.2): Mention IPv6 support.
	* common/netstuff.c: New file.
	* common/netstuff.h: New file.
	* ser-tcp.c: Include 'netstuff.h' and 'wspiapi.h'.
	(wait_for_connect): Update comment.  New parameter
	'gdb::optional<int> sock' instead of 'struct serial *scb'.
	Use 'sock' directly instead of 'scb->fd'.
	(try_connect): New function, with code from 'net_open'.
	(net_open): Rewrite main loop to deal with multiple
	sockets/addresses.  Handle IPv6-style hostnames; implement
	support for IPv6 connections.
	* unittests/parse-connection-spec-selftests.c: New file.

gdb/gdbserver/ChangeLog:
2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
	    Jan Kratochvil  <jan.kratochvil@redhat.com>
	    Paul Fertser  <fercerpav@gmail.com>
	    Tsutomu Seki  <sekiriki@gmail.com>

	* Makefile.in (SFILES): Add '$(srcdir)/common/netstuff.c'.
	(OBS): Add 'common/netstuff.o'.
	(GDBREPLAY_OBS): Likewise.
	* gdbreplay.c: Include 'wspiapi.h' and 'netstuff.h'.
	(remote_open): Implement support for IPv6
	connections.
	* remote-utils.c: Include 'netstuff.h', 'filestuff.h'
	and 'wspiapi.h'.
	(handle_accept_event): Accept connections from IPv6 sources.
	(remote_prepare): Handle IPv6-style hostnames; implement
	support for IPv6 connections.
	(remote_open): Implement support for printing connections from
	IPv6 sources.

gdb/testsuite/ChangeLog:
2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
	    Jan Kratochvil  <jan.kratochvil@redhat.com>
	    Paul Fertser  <fercerpav@gmail.com>
	    Tsutomu Seki  <sekiriki@gmail.com>

	* README (Testsuite Parameters): Mention new 'GDB_TEST_SOCKETHOST'
	parameter.
	* boards/native-extended-gdbserver.exp: Do not set 'sockethost'
	by default.
	* boards/native-gdbserver.exp: Likewise.
	* gdb.server/run-without-local-binary.exp: Improve regexp used
	for detecting when a remote debugging connection succeeds.
	* gdb.server/server-connect.exp: New file.
	* lib/gdbserver-support.exp (gdbserver_default_get_comm_port):
	Do not prefix the port number with ":".
	(gdbserver_start): New global GDB_TEST_SOCKETHOST.  Implement
	support for detecting and using it.  Add '$debughost_gdbserver'
	to the list of arguments used to start gdbserver.  Handle case
	when gdbserver cannot resolve a network name.

gdb/doc/ChangeLog:
2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
	    Jan Kratochvil  <jan.kratochvil@redhat.com>
	    Paul Fertser  <fercerpav@gmail.com>
	    Tsutomu Seki  <sekiriki@gmail.com>

	* gdb.texinfo (Remote Connection Commands): Add explanation
	about new IPv6 support.  Add new connection prefixes.
2018-07-11 19:41:31 -04:00
Pedro Alves 4c7333b308 GDB: Work around D;PID handling bug in older GDBservers (PR gdb/23377)
This commit adds a GDB workaround for the GDBserver bug exposed by
commit f2ffa92bbc ("gdb: Eliminate the 'stop_pc' global"), so that
newer GDBs can continue working with older GDBservers.

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

	PR gdb/23377
	* remote.c (remote_target::remote_detach_pid): Call
	set_current_process.
2018-07-11 23:33:19 +01:00
Pedro Alves 31445d1036 GDBserver: Don't assume a current process in D;PID implementation (PR gdb/23377)
This fixes a gdb.base/multi-forks.exp regression with GDBserver.

Git commit f2ffa92bbc ("gdb: Eliminate the 'stop_pc' global") caused
the regression by exposing a latent bug in gdbserver.

The bug is that GDBserver's implementation of the D;PID packet
incorrectly assumes that the selected thread points to the process
being detached.  This happens via the any_persistent_commands call,
which calls current_process:

  (gdb) bt
  #0  0x000000000040a57e in internal_error(char const*, int, char const*, ...)
  (file=0x4a53c0 "src/gdb/gdbserver/inferiors.c", line=212, fmt=0x4a539e "%s:
  Assertion `%s' failed.") at src/gdb/gdbserver/../common/errors.c:54
  #1  0x0000000000420acf in current_process() () at
  src/gdb/gdbserver/inferiors.c:212
  #2  0x00000000004226a0 in any_persistent_commands() () at
  gdb/gdbserver/mem-break.c:308
  #3  0x000000000042cb43 in handle_detach(char*) (own_buf=0x6f0280 "D;62ea") at
  src/gdb/gdbserver/server.c:1210
  #4  0x0000000000433af3 in process_serial_event() () at
  src/gdb/gdbserver/server.c:4055
  #5  0x0000000000434878 in handle_serial_event(int, void*) (err=0,
  client_data=0x0)

The "eliminate stop_pc" commit exposes the problem because before that
commit, GDB's switch_to_thread always read the newly-selected thread's
PC, and that would end up forcing GDBserver's selected thread to
change accordingly as side effect.  After that commit, GDB no longer
reads the thread's PC, and GDBserver does not switch the thread.

Fix this by removing the assumption from GDBserver.

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

	PR gdb/23377
	* mem-break.c (any_persistent_commands): Add process_info
	parameter and use it instead of relying on the current process.
	Change return type to bool.
	* mem-break.h (any_persistent_commands): Add process_info
	parameter and change return type to bool.
	* server.c (handle_detach): Remove require_running_or_return call.
	Look up the process_info for the process we're about to detach.
	If not found, return back error to GDB.  Adjust
	any_persistent_commands call to pass down a process pointer.
2018-07-11 23:31:44 +01:00
Pedro Alves a6f88f6e44 gdb: Remove traces of h8300 ecoff support
There's this little bit of ecoff support in the h8300 port that I ran
into that I think we could remove.  Grepping around BFD, I don't think
ECOFF is supported for h8300.

And if not, I'm failing to see why we'd support ECOFF debug info in
ELF for h8300 (.mdebug).  It kind of seems like someone just installed
the set_gdbarch_ecoff_reg_to_regnum hook at the same time the dwarf2
and stabs hooks were installed.

I'm removing this so that greps for ecoff stuff only lead to MIPS, as
ISTR that Linux/MIPS support still relies on some subset of ECOFF for
something.

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

	* h8300-tdep.c (h8300_gdbarch_init): Remove
	set_gdbarch_ecoff_reg_to_regnum calls.
2018-07-11 20:39:12 +01:00
Sergio Durigan Junior 16ff70ddd4 Fix PR c++/23373: GDB hangs when printing a struct with a static member of itself
This patch fixes a failure that happens when a structure has a static
member whose type is the same as itself.  From the bug report:

  Example code:
  struct A
  {
      static A Empty;
      int a;
  };

  int main(void) {
      A a;
      return 0;
  }

  Output:
  (gdb) ptype/o A
  /* offset    |  size */  type = struct A {
			     static struct A {
				 static struct A {
				     static struct A {
					 static struct A {
					     static struct A {
						 static struct A {
						     ... # infinite loop

The problem here is that GDB is not taking into account the fact that
static members inside a class/struct are not stored in the
class/struct, and therefore they should not be accounted for during
the display of the offsets/sizes.  The fix is simple: we just check if
the field we're dealing with (on
c-typeprint.c:c_type_print_base_struct_union) is static, and if it is
then we don't iterate over it.

This patch also adds a new test for this case, and doesn't introduce
any regressions.  I believe it is important enough to be included in
the 8.2 branch.

OK?

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

	PR c++/23373
	* c-typeprint.c (c_type_print_base_struct_union): Don't print
	offsets/sizes for static members of a class/struct.

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

	PR c++/23373
	* gdb.base/ptype-offsets.cc (struct static_member): New
	struct.
	(main) <stmember>: New variable.
	* gdb.base/ptype-offsets.exp: Add test for printing a struct
	with a static member in it.
2018-07-11 14:53:44 -04:00
Pedro Alves cb19713281 GDBserver: Fix "Cond. jump or move depends on uninit value" in x87 code
Running gdbserver under Valgrind I get:

  ==26925== Conditional jump or move depends on uninitialised value(s)
  ==26925==    at 0x473E7F: i387_cache_to_xsave(regcache*, void*) (i387-fp.c:579)
  ==26925==    by 0x46E3ED: x86_fill_xstateregset(regcache*, void*) (linux-x86-low.c:418)
  ==26925==    by 0x45E747: regsets_store_inferior_registers(regsets_info*, regcache*) (linux-low.c:5456)
  ==26925==    by 0x45EEF8: linux_store_registers(regcache*, int) (linux-low.c:5731)
  ==26925==    by 0x426441: regcache_invalidate_thread(thread_info*) (regcache.c:89)
  ==26925==    by 0x45CCAF: linux_resume_one_lwp_throw(lwp_info*, int, int, siginfo_t*) (linux-low.c:4447)
  ==26925==    by 0x45CE2A: linux_resume_one_lwp(lwp_info*, int, int, siginfo_t*) (linux-low.c:4519)
  ==26925==    by 0x45E17C: proceed_one_lwp(thread_info*, lwp_info*) (linux-low.c:5216)
  ==26925==    by 0x45DC81: linux_resume_one_thread(thread_info*, bool) (linux-low.c:5031)
  ==26925==    by 0x45DD34: linux_resume(thread_resume*, unsigned long)::{lambda(thread_info*)#2}::operator()(thread_info*) const (linux-low.c:5095)
  ==26925==    by 0x462907: void for_each_thread<linux_resume(thread_resume*, unsigned long)::{lambda(thread_info*)#2}>(linux_resume(thread_resume*, unsigned long)::{lambda(thread_info*)#2}) (gdbthread.h:150)
  ==26925==    by 0x45DE62: linux_resume(thread_resume*, unsigned long) (linux-low.c:5093)
  ==26925==
  ==26925== Conditional jump or move depends on uninitialised value(s)
  ==26925==    at 0x473EBD: i387_cache_to_xsave(regcache*, void*) (i387-fp.c:586)
  ==26925==    by 0x46E3ED: x86_fill_xstateregset(regcache*, void*) (linux-x86-low.c:418)
  ==26925==    by 0x45E747: regsets_store_inferior_registers(regsets_info*, regcache*) (linux-low.c:5456)
  ==26925==    by 0x45EEF8: linux_store_registers(regcache*, int) (linux-low.c:5731)
  ==26925==    by 0x426441: regcache_invalidate_thread(thread_info*) (regcache.c:89)
  ==26925==    by 0x45CCAF: linux_resume_one_lwp_throw(lwp_info*, int, int, siginfo_t*) (linux-low.c:4447)
  ==26925==    by 0x45CE2A: linux_resume_one_lwp(lwp_info*, int, int, siginfo_t*) (linux-low.c:4519)
  ==26925==    by 0x45E17C: proceed_one_lwp(thread_info*, lwp_info*) (linux-low.c:5216)
  ==26925==    by 0x45DC81: linux_resume_one_thread(thread_info*, bool) (linux-low.c:5031)
  ==26925==    by 0x45DD34: linux_resume(thread_resume*, unsigned long)::{lambda(thread_info*)#2}::operator()(thread_info*) const (linux-low.c:5095)
  ==26925==    by 0x462907: void for_each_thread<linux_resume(thread_resume*, unsigned long)::{lambda(thread_info*)#2}>(linux_resume(thread_resume*, unsigned long)::{lambda(thread_info*)#2}) (gdbthread.h:150)
  ==26925==    by 0x45DE62: linux_resume(thread_resume*, unsigned long) (linux-low.c:5093)

The problem is a type/width mismatch in code like this, in
gdbserver/i387-fp.c:

  /* Some registers are 16-bit.  */
  collect_register_by_name (regcache, "fctrl", &val);
  fp->fctrl = val;

In the above code:

 #1 - 'val' is a 64-bit unsigned long.

 #2 - "fctrl" is 32-bit in the register cache, thus half of 'val' is
      left uninitialized by collect_register_by_name, which works with
      an untyped raw buffer output (i.e., void*).

 #3 - fp->fctrl is an unsigned short (16-bit).  For some such
      registers we're masking off the uninitialized bits with 0xffff,
      but not in all cases.

We end up in such a fragile situation because
collect_registers_by_name works with an untyped output buffer pointer,
making it easy to pass a pointer to a variable of the wrong size.

Fix this by using regcache_raw_get_unsigned instead (actually a new
regcache_raw_get_unsigned_by_name wrapper), which always returns a
zero-extended ULONGEST register value.  It ends up simplifying the
i387-tdep.c code a bit, even.

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

	* i387-fp.c (i387_cache_to_fsave, cache_to_fxsave)
	(i387_cache_to_xsave): Use regcache_raw_get_unsigned_by_name
	instead of collect_register_by_name.
	* regcache.c (regcache_raw_get_unsigned_by_name): New.
	* regcache.h (regcache_raw_get_unsigned_by_name): New.
2018-07-11 19:49:19 +01:00
Alan Hayward 12863263d6 Rename tdesc_register_size to tdesc_register_bitsize
tdesc_register_size returns number of bits, not bytes.
Rename to make it clearer.

Also, fixed bug in aarch64_get_tdesc_vq which assumed bytes.

gdb/
	* target-descriptions.c (tdesc_register_bitsize): Rename.
	* target-descriptions.h (tdesc_register_bitsize): Likewise.
	* rs6000-tdep.c (rs6000_gdbarch_init): Use new name.
	* aarch64-tdep.c (aarch64_get_tdesc_vq): Convert size.
2018-07-11 10:00:14 +01:00
Tom Tromey 1123588c0b Use std::vector for moribund_locations
This changes moribund_locations to use a std::vector rather than VEC.
I also noticed that moribund_locations is only used in breakpoint.c,
so now it is static as well.

It might be possible to make this code a bit simpler by using a
ref_ptr in moribund_locations; however, I have not done this.

Tested by the buildbot.

gdb/ChangeLog
2018-07-10  Tom Tromey  <tom@tromey.com>

	* breakpoint.c (moribund_locations): Now static and a
	std::vector.
	(breakpoint_init_inferior, moribund_breakpoint_here_p)
	(build_bpstat_chain, update_global_location_list)
	(breakpoint_retire_moribund): Update.
	* breakpoint.h (bp_location_p): Remove typedef.  Don't declare
	VEC.
2018-07-10 19:41:05 -06:00
Andrew Burgess 3541979fff gdb/testsuite: Run test with software and hardware watchpoints
Expand the gdb.base/watchpoint-reuse-slot.exp test to be run twice,
once with hardware watchpoints disabled (this is new) and then with
hardware watchpoints enabled (the old way).

Running with hardware watchpoints enabled is skipped if the board file
says that hardware watchpoints are not supported on this target.

gdb/testsuite/ChangeLog:

	* gdb.base/watchpoint-reuse-slot.exp: Test with hardware
	watchpoints enabled and disabled.
2018-07-10 14:47:38 +01:00
Andrew Burgess 8c49aa89ab gdb/riscv: Fix assertion in inferior call code
An assertion when setting up arguments for an inferior call checks the
size of the argument against xlen.  However, if xlen and flen are
different sizes, and the argument is being placed into a floating
pointer register then we should be comparing against flen not xlen.

This issue shows up as an assertion failure when running on an rv32g
target with a binary compiled using the rv32f abi and making an
inferior call involving large floating point arguments, for example
the test gdb.base/infcall-nested-structs.exp.

gdb/ChangeLog:

	* riscv-tdep.c (riscv_is_fp_regno_p): New function.
	(riscv_register_reggroup_p): Use new function, remove unneeded
	parenthesis.
	(riscv_push_dummy_call): Extend assert to compare against xlen or
	flen based on register type.
2018-07-10 12:46:56 +01:00
Andrew Burgess 42ecac1732 gdb/riscv: Use TYPE_SAFE_NAME
In debug printing, use TYPE_SAFE_NAME instead of replicating the
functionality using TYPE_NAME and a null check.

gdb/ChangeLog:

	* riscv-tdep.c (riscv_print_arg_location): Use TYPE_SAFE_NAME.
2018-07-10 12:46:56 +01:00
Andrew Burgess 055303e28f gdb: Use add_setshow_zuinteger_unlimited_cmd in remote.c
Switch to use add_setshow_zuinteger_unlimited_cmd for some of the
control variables in remote.c.  The variables
hardware-watchpoint-limit, hardware-breakpoint-limit, and
hardware-watchpoint-length-limit are all changed.  For example, a user
will now see this:

    (gdb) show remote hardware-breakpoint-limit
    The maximum number of target hardware breakpoints is unlimited.

Instead of this:

    (gdb) show remote hardware-breakpoint-limit
    The maximum number of target hardware breakpoints is -1.

And can do this:

    (gdb) set remote hardware-breakpoint-limit unlimited

However, previously any negative value implied "unlimited", now only
-1, or the text "unlimited" can be used for unlimited.  Any other
negative value will give an error about invalid input.  This is a
small change in the user interface, but, hopefully, this will not
cause too many problems.

I've also added show functions for these three variables to allow for
internationalisation.

gdb/ChangeLog:

	* remote.c (show_hardware_watchpoint_limit): New function.
	(show_hardware_watchpoint_length_limit): New function.
	(show_hardware_breakpoint_limit): New function.
	(_initialize_remote): Use add_setshow_zuinteger_unlimited_cmd
	where appropriate, update help text.

gdb/doc/ChangeLog:

	* gdb.texinfo (Remote Configuration): Update descriptions for
	set/show of hardware-watchpoint-limit, hardware-breakpoint-limit,
	and hardware-watchpoint-length-limit variables.
2018-07-09 18:07:01 +01:00
Andrew Burgess c8ad9b9a31 gdb/testsuite: Allow for failure to read some memory addresses
In the gdb.base/examine-backward.exp test script, we check to see if
address zero is readable, and then read memory first forward from
address zero, and then backward from address zero.

The problem is, being able to read address zero does not guarantee
that you'll be able to read from the other end of the address space,
and the test probably shouldn't assume that is the case.

This patch updates the test script so that even if address zero is
known non-readable, we still run the tests, the tests in question are
mostly about, can GDB calculate the correct address to read from, we
can confirm this even if the final read ultimately fails.  We also no
longer assume that if address zero is readable, then the other end of
the address space will be readable.

One further change is that, when we examined the memory at address
zero, the regexp used to match the address expected that the zero
address would have two '0' digits as the least significant digits.  As
GDB strips leading zeros from addresses this was causing the test to
fail.  I've reduced the zero address to a single 0 digit.

gdb/testsuite/ChangeLog:

	* gdb.base/examine-backward.exp: Still run tests around address
	0x0, even if address 0x0 is not readable.  Update the pattern for
	matching address 0x0 in expected output.
2018-07-09 15:08:20 +01:00
Tom Tromey 8fd32c1ce6 Don't mention XM_CDEPS or NAT_CLIBS
Neither XM_CDEPS nor NAT_CLIBS are defined anywhere, so remove the
uses.

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (CDEPS): Don't mention XM_CDEPS.
	(CLIBS): Don't mention NAT_CLIBS.
2018-07-09 08:03:49 -06:00
Tom Tromey 31278b5193 Remove ADD_FILES and ADD_DEPS from Makefile.in
Nothing defines XM_ADD_FILES, TM_ADD_FILES, or NAT_ADD_FILES any more,
so consequently ADD_FILES and ADD_DEPS are no longer needed.  So, this
removes them.

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (ADD_FILES, ADD_DEPS): Remove.
	(LIBGDB_OBS, clean mostlyclean): Update.
	(gdb$(EXEEXT), insight$(EXEEXT)): Update.
2018-07-09 08:03:49 -06:00
Tom Tromey e5fd1493fd Minimize yacc and lex output
This minimizes the "make" output from the yacc and lex rules,
following the same technique as the rest of the Makefile.

The lex rule had a special case to deal with the situation where flex
is not available.  I don't think this is needed, so I removed it.  If
flex is truly unavailable, the person building gdb can simply "touch"
the output file.

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (%.c: %.y): Use ECHO_YACC.
	(%.c: %.l): Use ECHO_LEX.  Just fail if flex not available.
	* silent-rules.mk (ECHO_YACC, ECHO_LEX): New variables.
2018-07-09 08:03:49 -06:00
Tom Tromey 981e0c0c1a Fix exec.c handling in Makefile
exec.c ws handled specially in COMMON_OBS, but there doesn't seem to
be a reason for this.  This changes the Makefile to treat exec.c as an
ordinary source file.

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (ALLDEPFILES): Remove exec.c.
	(COMMON_OBS): Remove exec.o.
	(COMMON_SFILES): Add exec.c.
2018-07-09 08:03:49 -06:00
Tom Tromey 14ccceb2e2 Remove lint support
I don't think anyone uses lint any more, so this removes the support
for it from the Makefile.

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (LINT, LINTFLAGS, LINTFILES, lint): Remove.
2018-07-09 08:03:49 -06:00
Tom Tromey 5d3c3a68c3 Use a stamp file for version.c
This introduces a stamp file for version.c, preventing unnecessary
version.o rebuilds.

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (clean mostlyclean): Remove stamp-version.
	(version.c): Depend on stamp-version.
	(stamp-version): New rule, from version.c rule.
2018-07-09 08:03:49 -06:00
Tom Tromey 1998086d54 Use a stamp file for init.c
This introduces a stamp file for init.c.  This prevents constant
rebuilds of init.o, by arranging for init.c to only be modified when
its contents change.  (FWIW this is a standard idiom in use by
Automake and by gdb itself for many years.)

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (init.c): Depend on stamp-init.
	(stamp-init): New rule, from init.c rule.
	(clean mostlyclean): Remove stamp-init.
2018-07-09 08:03:49 -06:00
Tom Tromey 4c7549492b Simplify INIT_FILES
This simplifies the INIT_FILES variable.  COMMON_OBS includes
CONFIG_OBS and SUBDIR_GCC_COMPILE_OBS, so there's no need to reference
CONFIG_OBS or SUBDIR_GCC_COMPILE_SRCS there.  Once this is done, it it
clear that duplicates can't occur, so remove the duplicate-removing
code as well.

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (INIT_FILES): Remove CONFIG_SRCS,
	SUBDIR_GCC_COMPILE_SRCS.
2018-07-09 08:03:49 -06:00
Tom Tromey 6497f1dd03 Remove some unused code from init.c build rule
The init.c build rule has a few sed expressions that aren't necessary
any more.  This removes them.

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (init.c): Remove some unused sed rules.
2018-07-09 08:03:49 -06:00
Tom Tromey 97a34db942 Remove TSOBS from gdb/Makefile.in
The TSOBS variable doesn't seem to serve a useful purpose in
gdb/Makefile.in, so remove it.

gdb/ChangeLog
2018-07-09  Tom Tromey  <tom@tromey.com>

	* Makefile.in (TSOBS): Remove.
	(INIT_FILES): Update.
	(LIBGDB_OBS): Update.
	(COMMON_SFILES): Add inflow.c.
	(SFILES): Remove inflow.c.
2018-07-09 08:03:48 -06:00
Jan Kratochvil 25289ac167 contrib/gdb-add-index.sh -dwarf-5
------------------------------------------------------------------------------
(gdb) help save gdb-index
Save a gdb-index file.
Usage: save gdb-index [-dwarf-5] DIRECTORY

No options create one file with .gdb-index extension for pre-DWARF-5
compatible .gdb_index section.  With -dwarf-5 creates two files with
extension .debug_names and .debug_str for DWARF-5 .debug_names section.
------------------------------------------------------------------------------

But gdb-add-index command provided no way how to pass the -dwarf-5 option.

gdb/ChangeLog
2018-07-07  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* contrib/gdb-add-index.sh ($dwarf5): New, use it.
2018-07-07 23:02:36 +02:00
Simon Marchi e83f4d9750 ia64-tdep.c: Fix -Wwrite-strings errors
Simply add const where necessary to get rid of errors like:

/home/simark/src/binutils-gdb/gdb/ia64-libunwind-tdep.c:114:1: error: ISO C++ forbids converting a string constant to ‘char*’ [-Werror=write-strings]
 static char *get_reg_name = STRINGIFY(UNW_OBJ(get_reg));
 ^~~~~~~~~~~~~~
/home/simark/src/binutils-gdb/gdb/common/preprocessor.h:28:25: note: in definition of macro ‘STRINGIFY_1’
 #define STRINGIFY_1(x) #x
                         ^
/home/simark/src/binutils-gdb/gdb/ia64-libunwind-tdep.c:114:29: note: in expansion of macro ‘STRINGIFY’
 static char *get_reg_name = STRINGIFY(UNW_OBJ(get_reg));
                             ^~~~~~~~~

gdb/ChangeLog:

	* ia64-tdep.c (get_reg_name, get_fpreg_name, get_saveloc_name,
	is_signal_frame_name, step_name, init_remote_name,
	create_addr_space_name, destroy_addr_space_name,
	search_unwind_table_name, find_dyn_list_name): Constify.
2018-07-07 11:14:57 -04:00
Andrew Burgess e0e5e971ae gdb/testsuite: Ensure test links in malloc and free
The test associated with the source file
gdb.base/share-env-with-gdbserver.c relies on calling malloc and free
within the inferior from GDB.  However, as the test source itself
makes no use of these functions, there's no requirement that they be
linked into the test executable.

This commit adds a dummy call to malloc and free to ensure they are
linked into the test executable.

gdb/testsuite/ChangeLog:

	* gdb.base/share-env-with-gdbserver.c (main): Add call to
	malloc/free.
2018-07-06 14:31:37 +01:00
Simon Marchi 6821842f15 darwin: Silence syscall deprecated declaration warning
This patch silences this warning:

/Users/simark/src/binutils-gdb/gdb/darwin-nat.c:839:10: error: 'syscall' is deprecated: first deprecated in macOS 10.12 - syscall(2) is unsupported; please switch to a supported interface. For SYS_kdebug_trace use kdebug_signpost(). [-Werror,-Wdeprecated-declarations]
          res = syscall (SYS___pthread_kill, thread->gdb_port, nsignal);
                ^
/usr/include/unistd.h:745:6: note: 'syscall' has been explicitly marked deprecated here
int      syscall(int, ...);
         ^

The comment of the new pthread_kill function explains why we use the
syscall function directly.

include/ChangeLog:

	* diagnostics.h (DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS):
	Define for clang.

gdb/ChangeLog:

	* darwin-nat.c (darwin_pthread_kill): New function.
	(darwin_resume_thread): Use darwin_pthread_kill.
2018-07-05 21:50:18 -04:00
Tom de Vries c530603c59 [gdb] Fix build error in macroexp.c
When doing a combined build with the gcc and binutils-gdb repos, I run into
this build error in gdb:
...
gdb/macroexp.c: \
  In function ‘void get_next_token_for_substitution(macro_buffer*, \
  macro_buffer*, char**, macro_buffer*, char**, int*, bool*)’:
gdb/macroexp.c:925:17: error: \
  implicitly-declared ‘constexpr macro_buffer& \
  macro_buffer::operator=(const macro_buffer&)’ is deprecated \
  [-Werror=deprecated-copy]
       *token = *lookahead;
...

Wdeprecated-copy is a new gcc warning added after gcc 8.

This patch fixes the build error by adding an explicit copy operator to the
macro_buffer class.  I've added asserts to ensure that both the dest and src
of the copy are shared, in other words, neither is owner of the text pointer.

I've run the gdb testsuite on x86_64-linux and the asserts did not trigger.

2018-07-05  Tom de Vries  <tdevries@suse.de>

	* macroexp.c (macro_buffer) <operator=>: New member function.
2018-07-05 11:23:46 +02:00
Tom Tromey a7d0f0f000 Use exit_inferior in darwin_attach_pid
Commit a50c11c666 was intended to use exit_inferior in
darwin_attach_pid, but I accidentally pushed the wrong version of the
patch.  This fixes the problem.

gdb/ChangeLog
2018-07-04  Tom Tromey  <tom@tromey.com>

	* darwin-nat.c (darwin_attach_pid): Use exit_inferior.
2018-07-04 11:32:50 -06:00
Simon Marchi 6242c6a690 darwin: Don't use sbrk
This patch gets rid of this warning on macOS:

    CXX    main.o
  /Users/simark/src/binutils-gdb/gdb/main.c:492:27: error: 'sbrk' is deprecated [-Werror,-Wdeprecated-declarations]
    lim_at_start = (char *) sbrk (0);
                            ^
  /usr/include/unistd.h:585:1: note: 'sbrk' has been explicitly marked deprecated here
  __deprecated __WATCHOS_PROHIBITED __TVOS_PROHIBITED
  ^
  /usr/include/sys/cdefs.h:176:37: note: expanded from macro '__deprecated'
  #define __deprecated    __attribute__((deprecated))
                                         ^

sbrk on macOS is not useful for our purposes, since sbrk(0) always
returns the same value.  From what I read, brk/sbrk on macOS is just an
emulation, it always returns a pointer in a 4MB section reserved for
that.

So instead of letting users use "maint set per-command space on" and
print silly results, I think we should just disable that feature for
this platform (as we do for platforms that don't have sbrk).

I defined a HAVE_USEFUL_SBRK macro and used that instead of HAVE_SBRK.

gdb/ChangeLog:

	* common/common-defs.h (HAVE_USEFUL_SBRK): Define.
	* main.c: Use HAVE_USEFUL_SBRK instead of HAVE_SBRK.
	* maint.c: Likewise.
	* top.c: Likewise.
2018-07-04 12:40:25 -04:00
Joel Brobecker 4e5b2f8961 Update NEWS post GDB 8.2 branch creation.
gdb/ChangeLog:

	* NEWS: Create a new section for the next release branch.
	Rename the section of the current branch, now that it has
	been cut.
2018-07-04 08:48:05 -07:00
Joel Brobecker 538ccc4a22 Bump version to 8.2.50.DATE-git.
Now that the GDB 8.2 branch has been created, we can
bump the version number.

gdb/ChangeLog:

	GDB 8.2 branch created (1b919490e8):
	* version.in: Bump version to 8.2.50.DATE-git.
2018-07-04 08:42:44 -07:00
Vyacheslav Barinov 1b919490e8 Warn if /proc is not accessible
There's a buildroot where I want to debug a binary, and I tried to
connect to it from outside, but got very weird errors like
architecture mismatch or protocol errors.  At last, after switching on
'--debug' for gdbserver I found a message 'Can't open /proc/pid/'
message and suddenly found that I forgot to mount procfs in my
buildroot.

Make discovering the problem easier by making GDB / GDBserver warn
(even without --debug) if /proc can not be accessed.

Native debugging:

 (gdb) start
 Temporary breakpoint 1 at 0x400835: file test.c, line 10.
 Starting program: /tmp/test
 warning: /proc is not accessible.

GDBserver/remote debugging:

 $ ./gdbserver :9999 ./gdbserver
 gdbserver: /proc is not accessible.

gdb/ChangeLog:
2018-07-04  Vyacheslav Barinov  <v.barinov@samsung.com>
	    Pedro Alves  <palves@redhat.com>

	* linux-nat.c (linux_init_ptrace): Rename to ...
	(linux_init_ptrace_procfs): ... this.  Call
	linux_proc_init_warnings.
	(linux_nat_target::post_attach)
	(linux_nat_target::post_startup_inferior): Adjust.
	* nat/linux-procfs.c (linux_proc_init_warnings): Define function.
	* nat/linux-procfs.h (linux_proc_init_warnings): Declare function.

gdb/gdbserver/ChangeLog:
2018-07-04  Vyacheslav Barinov  <v.barinov@samsung.com>
	    Pedro Alves  <palves@redhat.com>

	* linux-low.c (initialize_low): Call linux_proc_init_warnings.
2018-07-04 16:13:29 +01:00
Tom de Vries 1ea5da0262 [gdb/symtab] Fix version check in dwarf compilation unit header
The version check of the dwarf compilation unit header in
error_check_comp_unit_head is done too late, and consequently dwarf code with
an unsupported version in the compilation unit header is interpreted as dwarf5
code in read_comp_unit_head.

Fixed by moving the check earlier.

Build and reg-tested on x86_64-linux.

2018-07-04  Tom de Vries  <tdevries@suse.de>

	* dwarf2read.c (error_check_comp_unit_head): Move dwarf version
	check ...
	(read_comp_unit_head): ... here.

	* gdb.dwarf2/dw2-error.exp: Update expected error message.
2018-07-04 11:56:51 +02:00
Tom Tromey f51e0e20bd Remove VEC from breakpoint
This removes a use of VEC from breakpoint.h, also removing the
now-unnecessary breakpoint_p typedef.

This patch fixes a latent memory leak in
find_matching_tracepoint_location, which neglected to free the vector
returned by all_tracepoints.

Tested by the buildbot.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* tracepoint.c (process_tracepoint_on_disconnect, start_tracing)
	(stop_tracing, tstatus_command)
	(find_matching_tracepoint_location, merge_uploaded_tracepoints)
	(print_one_static_tracepoint_marker): Update.
	* breakpoint.c (static_tracepoints_here, all_tracepoints): Return
	std::vector.
	* breakpoint.h (breakpoint_p): Remove typedef.  Don't declare
	VEC.
	(all_tracepoints, static_tracepoints_here): Return std::vector.
2018-07-03 23:00:49 -06:00
Tom Tromey d7e15655a4 Remove ptid_equal
Remove ptid_equal in favor of using "==".

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.c (ptid_equal): Remove.
	* common/ptid.h (ptid_equal): Don't declare.
	* ada-tasks.c: Update.
	* breakpoint.c: Update.
	* common/agent.c: Update.
	* corelow.c: Update.
	* darwin-nat-info.c: Update.
	* darwin-nat.c: Update.
	* dcache.c: Update.
	* dtrace-probe.c: Update.
	* dummy-frame.c: Update.
	* fbsd-nat.c: Update.
	* frame.c: Update.
	* gdbthread.h: Update.
	* gnu-nat.c: Update.
	* go32-nat.c: Update.
	* inf-loop.c: Update.
	* inf-ptrace.c: Update.
	* infcall.c: Update.
	* infcmd.c: Update.
	* inflow.c: Update.
	* infrun.c: Update.
	* linux-fork.c: Update.
	* linux-nat.c: Update.
	* linux-thread-db.c: Update.
	* mi/mi-cmd-var.c: Update.
	* mi/mi-interp.c: Update.
	* mi/mi-main.c: Update.
	* nto-procfs.c: Update.
	* ppc-linux-tdep.c: Update.
	* procfs.c: Update.
	* python/py-inferior.c: Update.
	* python/py-record-btrace.c: Update.
	* python/py-record.c: Update.
	* ravenscar-thread.c: Update.
	* regcache.c: Update.
	* remote-sim.c: Update.
	* remote.c: Update.
	* sol-thread.c: Update.
	* solib.c: Update.
	* target.c: Update.
	* tui/tui-stack.c: Update.
	* varobj.c: Update.
	* windows-nat.c: Update.
	* windows-tdep.c: Update.

gdb/gdbserver/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* linux-low.c: Update.
	* lynx-low.c: Update.
	* mem-break.c: Update.
	* nto-low.c: Update.
	* remote-utils.c: Update.
	* server.c: Update.
	* spu-low.c: Update.
	* target.c: Update.
	* win32-low.c: Update.
2018-07-03 11:36:46 -06:00
Tom Tromey 26a57c9256 Remove ptid_match
This removes ptid_match in favor of the ptid_t::matches method.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.c (ptid_match): Remove.
	* common/ptid.h (ptid_match): Don't declare.
	* fbsd-nat.c: Update.
	* infcmd.c: Update.
	* infrun.c: Update.
	* linux-nat.c: Update.
	* record-btrace.c: Update.
	* regcache.c: Update.
	* remote.c: Update.

gdb/gdbserver/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* server.c: Update.
2018-07-03 11:36:45 -06:00
Tom Tromey d2a107e3f9 Remove ptid_tid_p
This removes ptid_tid_p in favor of the ptid_t::tid_p method.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.c (ptid_tid_p): Remove.
	* common/ptid.h (ptid_tid_p): Don't declare.
	* sol-thread.c: Update.
2018-07-03 11:36:45 -06:00
Tom Tromey 15a9e13e52 Remove ptid_lwp_p
This removes ptid_lwp_p in favor of the ptid_t::lwp_p method.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.c (ptid_lwp_p): Remove.
	* common/ptid.h (ptid_lwp_p): Don't declare.
	* fbsd-nat.c: Update.
	* linux-nat.c: Update.
	* nat/linux-procfs.c: Update.
	* nat/x86-linux-dregs.c: Update.
	* sol-thread.c: Update.
2018-07-03 11:36:45 -06:00
Tom Tromey 0e998d966b Remove ptid_is_pid
This removes ptid_is_pid in favor of the ptid_t::is_pid method.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.c (ptid_is_pid): Remove.
	* common/ptid.h (ptid_is_pid): Don't declare.
	* infrun.c: Update.
	* linux-nat.c: Update.
	* mi/mi-interp.c: Update.
	* remote.c: Update.
	* thread.c: Update.

gdb/gdbserver/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* linux-low.c: Update.
2018-07-03 11:36:44 -06:00
Tom Tromey cc6bcb548d Remove ptid_get_tid
This removes ptid_get_tid in favor of calling the ptid_t::tid method.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.c (ptid_get_tid): Remove.
	* common/ptid.h (ptid_get_tid): Don't declare.
	* ada-tasks.c: Update.
	* aix-thread.c: Update.
	* bsd-uthread.c: Update.
	* darwin-nat.c: Update.
	* fbsd-nat.c: Update.
	* i386-darwin-nat.c: Update.
	* infrun.c: Update.
	* linux-tdep.c: Update.
	* nto-procfs.c: Update.
	* ppc-ravenscar-thread.c: Update.
	* python/py-infthread.c: Update.
	* ravenscar-thread.c: Update.
	* sol-thread.c: Update.
	* sparc-ravenscar-thread.c: Update.
	* windows-nat.c: Update.

gdb/gdbserver/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* target.c: Update.
2018-07-03 11:36:44 -06:00
Tom Tromey e38504b392 Remove ptid_get_lwp
This removes ptid_get_lwp in favor of calling the ptid_t::lwp method.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.c (ptid_get_lwp): Remove.
	* common/ptid.h (ptid_get_lwp): Don't declare.
	* aarch64-linux-nat.c: Update.
	* ada-tasks.c: Update.
	* aix-thread.c: Update.
	* amd64-linux-nat.c: Update.
	* arm-linux-nat.c: Update.
	* corelow.c: Update.
	* fbsd-nat.c: Update.
	* fbsd-tdep.c: Update.
	* gnu-nat.c: Update.
	* i386-cygwin-tdep.c: Update.
	* i386-gnu-nat.c: Update.
	* i386-linux-nat.c: Update.
	* ia64-linux-nat.c: Update.
	* inf-ptrace.c: Update.
	* infrun.c: Update.
	* linux-fork.c: Update.
	* linux-nat.c: Update.
	* linux-tdep.c: Update.
	* linux-thread-db.c: Update.
	* mips-linux-nat.c: Update.
	* nat/aarch64-linux-hw-point.c: Update.
	* nat/aarch64-linux.c: Update.
	* nat/linux-btrace.c: Update.
	* nat/linux-osdata.c: Update.
	* nat/linux-procfs.c: Update.
	* nat/x86-linux-dregs.c: Update.
	* obsd-nat.c: Update.
	* ppc-fbsd-nat.c: Update.
	* ppc-linux-nat.c: Update.
	* procfs.c: Update.
	* python/py-infthread.c: Update.
	* ravenscar-thread.c: Update.
	* remote.c: Update.
	* s390-linux-nat.c: Update.
	* sol-thread.c: Update.
	* sol2-tdep.c: Update.
	* spu-linux-nat.c: Update.
	* x86-linux-nat.c: Update.
	* xtensa-linux-nat.c: Update.

gdb/gdbserver/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* linux-low.c: Update.
	* linux-mips-low.c: Update.
	* lynx-low.c: Update.
	* nto-low.c: Update.
	* remote-utils.c: Update.
	* server.c: Update.
	* spu-low.c: Update.
	* target.c: Update.
	* thread-db.c: Update.
2018-07-03 11:36:43 -06:00
Tom Tromey e99b03dcf4 Remove ptid_get_pid
This removes ptid_get_pid in favor of calling the ptid_t::pid method.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.c (ptid_get_pid): Remove.
	* common/ptid.h (ptid_get_pid): Don't declare.
	* aarch64-linux-nat.c: Update.
	* ada-lang.c: Update.
	* aix-thread.c: Update.
	* alpha-bsd-nat.c: Update.
	* amd64-fbsd-nat.c: Update.
	* amd64-linux-nat.c: Update.
	* arm-linux-nat.c: Update.
	* arm-nbsd-nat.c: Update.
	* auxv.c: Update.
	* break-catch-syscall.c: Update.
	* breakpoint.c: Update.
	* bsd-uthread.c: Update.
	* corelow.c: Update.
	* ctf.c: Update.
	* darwin-nat.c: Update.
	* fbsd-nat.c: Update.
	* fbsd-tdep.c: Update.
	* gcore.c: Update.
	* gnu-nat.c: Update.
	* hppa-nbsd-nat.c: Update.
	* hppa-obsd-nat.c: Update.
	* i386-fbsd-nat.c: Update.
	* ia64-linux-nat.c: Update.
	* inf-ptrace.c: Update.
	* infcmd.c: Update.
	* inferior.c: Update.
	* inferior.h: Update.
	* inflow.c: Update.
	* infrun.c: Update.
	* linux-fork.c: Update.
	* linux-nat.c: Update.
	* linux-tdep.c: Update.
	* linux-thread-db.c: Update.
	* m68k-bsd-nat.c: Update.
	* mi/mi-interp.c: Update.
	* mi/mi-main.c: Update.
	* mips-linux-nat.c: Update.
	* mips-nbsd-nat.c: Update.
	* mips64-obsd-nat.c: Update.
	* nat/aarch64-linux-hw-point.c: Update.
	* nat/aarch64-linux.c: Update.
	* nat/linux-btrace.c: Update.
	* nat/linux-osdata.c: Update.
	* nat/linux-procfs.c: Update.
	* nat/x86-linux-dregs.c: Update.
	* nto-procfs.c: Update.
	* obsd-nat.c: Update.
	* ppc-linux-nat.c: Update.
	* ppc-nbsd-nat.c: Update.
	* ppc-obsd-nat.c: Update.
	* proc-service.c: Update.
	* procfs.c: Update.
	* python/py-inferior.c: Update.
	* python/py-infthread.c: Update.
	* ravenscar-thread.c: Update.
	* record.c: Update.
	* remote-sim.c: Update.
	* remote.c: Update.
	* rs6000-nat.c: Update.
	* s390-linux-nat.c: Update.
	* sh-nbsd-nat.c: Update.
	* sol-thread.c: Update.
	* sparc-nat.c: Update.
	* sparc64-tdep.c: Update.
	* spu-linux-nat.c: Update.
	* spu-tdep.c: Update.
	* target-debug.h: Update.
	* target.c: Update.
	* thread.c: Update.
	* tid-parse.c: Update.
	* tracefile-tfile.c: Update.
	* vax-bsd-nat.c: Update.
	* windows-nat.c: Update.
	* x86-linux-nat.c: Update.
	* x86-nat.c: Update.

gdb/gdbserver/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* linux-low.c: Update.
	* linux-mips-low.c: Update.
	* lynx-low.c: Update.
	* mem-break.c: Update.
	* nto-low.c: Update.
	* remote-utils.c: Update.
	* server.c: Update.
	* spu-low.c: Update.
	* target.c: Update.
	* tracepoint.c: Update.
2018-07-03 11:36:42 -06:00
Tom Tromey f2907e4991 Remove pid_to_ptid
This removes pid_to_ptid in favor of calling the ptid_t constructor
directly.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.c (pid_to_ptid): Remove.
	* common/ptid.h (pid_to_ptid): Don't declare.
	* aix-thread.c: Update.
	* arm-linux-nat.c: Update.
	* common/ptid.c: Update.
	* common/ptid.h: Update.
	* corelow.c: Update.
	* ctf.c: Update.
	* darwin-nat.c: Update.
	* fbsd-nat.c: Update.
	* fork-child.c: Update.
	* gnu-nat.c: Update.
	* go32-nat.c: Update.
	* inf-ptrace.c: Update.
	* infcmd.c: Update.
	* inferior.c: Update.
	* infrun.c: Update.
	* linux-fork.c: Update.
	* linux-nat.c: Update.
	* nat/aarch64-linux-hw-point.c: Update.
	* nat/fork-inferior.c: Update.
	* nat/x86-linux-dregs.c: Update.
	* nto-procfs.c: Update.
	* obsd-nat.c: Update.
	* procfs.c: Update.
	* progspace.c: Update.
	* remote.c: Update.
	* rs6000-nat.c: Update.
	* s390-linux-nat.c: Update.
	* sol-thread.c: Update.
	* spu-linux-nat.c: Update.
	* target.c: Update.
	* top.c: Update.
	* tracefile-tfile.c: Update.
	* windows-nat.c: Update.

gdb/gdbserver/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* linux-low.c: Update.
	* linux-ppc-low.c: Update.
	* linux-x86-low.c: Update.
	* proc-service.c: Update.
	* server.c: Update.
	* spu-low.c: Update.
	* thread-db.c: Update.
	* win32-low.c: Update.
2018-07-03 11:36:42 -06:00
Tom Tromey fd79271bd9 Remove ptid_build
This removes ptid_build in favor of simply calling the ptid_t
constructor directly.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* common/ptid.h (ptid_build): Don't declare.
	* common/ptid.c (ptid_build): Remove.
	* aix-thread.c: Update.
	* bsd-kvm.c: Update.
	* bsd-uthread.c: Update.
	* common/agent.c: Update.
	* common/ptid.c: Update.
	* common/ptid.h: Update.
	* corelow.c: Update.
	* darwin-nat.c: Update.
	* fbsd-nat.c: Update.
	* gnu-nat.c: Update.
	* linux-fork.c: Update.
	* linux-nat.c: Update.
	* linux-thread-db.c: Update.
	* nat/linux-osdata.c: Update.
	* nat/linux-procfs.c: Update.
	* nto-procfs.c: Update.
	* obsd-nat.c: Update.
	* proc-service.c: Update.
	* procfs.c: Update.
	* ravenscar-thread.c: Update.
	* remote-sim.c: Update.
	* remote.c: Update.
	* sol-thread.c: Update.
	* target.c: Update.
	* windows-nat.c: Update.

gdb/gdbserver/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* linux-low.c: Update.
	* lynx-low.c: Update.
	* nto-low.c: Update.
	* remote-utils.c: Update.
	* spu-low.c: Update.
	* thread-db.c: Update.
	* win32-low.c: Update.
2018-07-03 11:36:41 -06:00
Tom Tromey 057302ceb3 Remove exit_inferior_num_silent
The sole caller of exit_inferior_num_silent was getting the inferior's
number to then use the number to look up the inferior again.  I think
it's better to simply not have exit_inferior_num_silent; any potential
callers that only have the inferior's number should probably be
converted to pass the inferior itself around instead.

Tested by the buildbot.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	* infrun.c (follow_exec): Use exit_inferior_silent.
	* inferior.c (exit_inferior_num_silent): Remove.
	* inferior.h (exit_inferior_num_silent): Don't declare.
2018-07-03 09:49:30 -06:00
Tom Tromey a50c11c666 Fix crash in "run" on macOS when gdb is not signed
On macOS, when gdb is not code-signed, it will throw an exception from
darwin_attach_pid.  However, gdb also then crashes:

thread.c:93: internal-error: struct thread_info *inferior_thread(): Assertion `tp' failed.

I think the problem here is that darwin_attach_pid does not clean up
inferior_ptid and inf->pid on failure.  This leads to a situation
where gdb tries to find a thread, but cannot.

In other cases, gdb would mourn the inferior at this point; but here
this is not possible because the target has not been pushed.  Instead
this patch works by simply updating the inferior and inferior_ptid on
failure.

Tested by building an unsigned gdb on macOS and trying to run an
inferior.

gdb/ChangeLog
2018-07-03  Tom Tromey  <tom@tromey.com>

	PR cli/23340:
	* darwin-nat.c (darwin_attach_pid): Reset inferior and
	inferior_ptid on error.
2018-07-03 09:28:26 -06:00
Maciej W. Rozycki 471b9d1507 GDB PR tdep/8282: MIPS: Wire in `set disassembler-options'
Implement MIPS target support for passing options to the disassembler,
complementing commit 65b48a8140 ("GDB: Add support for the new
set/show disassembler-options commands.").

This includes options that expect an argument, so adjust the generic
code and data structures used so as to handle such options.  So as to
give backends syntax flexibility no specific delimiter has been defined
to separate options from their respective arguments, so it has to be
included as the last character of the option name.  Completion code
however has not been adjusted and consequently option arguments cannot
be completed at this time.

Also the MIPS target has non-empty defaults for the options, so that ABI
names for the general-purpose registers respect our `set mips abi ...'
setting rather than always being determined from the ELF headers of the
binary file selected.  Handle these defaults as implicit options, never
shown to the user and always prepended to the user-specified options, so
that the latters can override the defaults.

The resulting output for the MIPS target is as follows:

(gdb) show disassembler-options
The current disassembler options are ''

The following disassembler options are supported for use with the
'set disassembler-options <option>[,<option>...]' command:

  no-aliases      Use canonical instruction forms.

  msa             Recognize MSA instructions.

  virt            Recognize the virtualization ASE instructions.

  xpa             Recognize the eXtended Physical Address (XPA) ASE
                  instructions.

  ginv            Recognize the Global INValidate (GINV) ASE instructions.

  gpr-names=ABI   Print GPR names according to specified ABI.
                  Default: based on binary being disassembled.

  fpr-names=ABI   Print FPR names according to specified ABI.
                  Default: numeric.

  cp0-names=ARCH  Print CP0 register names according to specified architecture.
                  Default: based on binary being disassembled.

  hwr-names=ARCH  Print HWR names according to specified architecture.
                  Default: based on binary being disassembled.

  reg-names=ABI   Print GPR and FPR names according to specified ABI.

  reg-names=ARCH  Print CP0 register and HWR names according to specified
                  architecture.

  For the options above, the following values are supported for "ABI":
    numeric 32 n32 64

  For the options above, the following values are supported for "ARCH":
    numeric r3000 r3900 r4000 r4010 vr4100 vr4111 vr4120 r4300 r4400 r4600
    r4650 r5000 vr5400 vr5500 r5900 r6000 rm7000 rm9000 r8000 r10000 r12000
    r14000 r16000 mips5 mips32 mips32r2 mips32r3 mips32r5 mips32r6 mips64
    mips64r2 mips64r3 mips64r5 mips64r6 interaptiv-mr2 sb1 loongson2e
    loongson2f loongson3a octeon octeon+ octeon2 octeon3 xlr xlp
(gdb)

which corresponds to what `objdump --help' used to print for the MIPS
target, with minor formatting changes, most notably option argument
lists being wrapped, but also the amount of white space separating
options from the respective descriptions.  The relevant part the new
code is now also used by `objdump --help', which means these formatting
changes apply to both outputs, except for argument list wrapping, which
is GDB-specific.

This also adds a separating new line between the heading and option
lists where descriptions are provided, hence:

(gdb) set architecture s390:31-bit
(gdb) show disassembler-options
The current disassembler options are ''

The following disassembler options are supported for use with the
'set disassembler-options <option>[,<option>...]' command:

  esa         Disassemble in ESA architecture mode
  zarch       Disassemble in z/Architecture mode
  insnlength  Print unknown instructions according to length from first two bits
(gdb)

but:

(gdb) set architecture powerpc:common
(gdb) show disassembler-options
The current disassembler options are ''

The following disassembler options are supported for use with the
'set disassembler-options <option>[,<option>...]' command:
  403, 405, 440, 464, 476, 601, 603, 604, 620, 7400, 7410, 7450, 7455, 750cl,
  821, 850, 860, a2, altivec, any, booke, booke32, cell, com, e200z4, e300,
  e500, e500mc, e500mc64, e5500, e6500, e500x2, efs, efs2, power4, power5,
  power6, power7, power8, power9, ppc, ppc32, 32, ppc64, 64, ppc64bridge,
  ppcps, pwr, pwr2, pwr4, pwr5, pwr5x, pwr6, pwr7, pwr8, pwr9, pwrx, raw, spe,
  spe2, titan, vle, vsx
(gdb)

Existing affected target backends have been adjusted accordingly.

This has been verified manually with:

(gdb) set architecture arm
(gdb) set architecture powerpc:common
(gdb) set architecture s390:31-bit

to cause no issues with the `show disassembler-options' and `set
disassembler-options' commands.  A test case for the MIPS target has
also been provided, covering the default settings with ABI overrides as
well as disassembler option overrides.

2018-07-02  Maciej W. Rozycki  <macro@mips.com>
            Simon Marchi  <simon.marchi@polymtl.ca>

	include/
	PR tdep/8282
	* dis-asm.h (disasm_option_arg_t): New typedef.
	(disasm_options_and_args_t): Likewise.
	(disasm_options_t): Add `arg' member, document members.
	(disassembler_options_mips): New prototype.
	(disassembler_options_arm, disassembler_options_powerpc)
	(disassembler_options_s390): Update prototypes.

	opcodes/
	PR tdep/8282
	* mips-dis.c (mips_option_arg_t): New enumeration.
	(mips_options): New variable.
	(disassembler_options_mips): New function.
	(print_mips_disassembler_options): Reimplement in terms of
	`disassembler_options_mips'.
	* arm-dis.c (disassembler_options_arm): Adapt to using the
	`disasm_options_and_args_t' structure.
	* ppc-dis.c (disassembler_options_powerpc): Likewise.
	* s390-dis.c (disassembler_options_s390): Likewise.

	gdb/
	PR tdep/8282
	* disasm.h (gdb_disassembler): Add
	`m_disassembler_options_holder'. member
	* disasm.c (get_all_disassembler_options): New function.
	(gdb_disassembler::gdb_disassembler): Use it.
	(gdb_buffered_insn_length_init_dis): Likewise.
	(gdb_buffered_insn_length): Adjust accordingly.
	(set_disassembler_options): Handle options with arguments.
	(show_disassembler_options_sfunc): Likewise.  Add a leading new
	line if showing options with descriptions.
	(disassembler_options_completer): Adapt to using the
	`disasm_options_and_args_t' structure.
	* mips-tdep.c (mips_disassembler_options): New variable.
	(mips_disassembler_options_o32): Likewise.
	(mips_disassembler_options_n32): Likewise.
	(mips_disassembler_options_n64): Likewise.
	(gdb_print_insn_mips): Don't set `disassembler_options'.
	(gdb_print_insn_mips_n32, gdb_print_insn_mips_n64): Remove
	functions.
	(mips_gdbarch_init): Always set `gdbarch_print_insn' to
	`gdb_print_insn_mips'.  Set `gdbarch_disassembler_options',
	`gdbarch_disassembler_options_implicit' and
	`gdbarch_valid_disassembler_options'.
	* arm-tdep.c (_initialize_arm_tdep): Adapt to using the
	`disasm_options_and_args_t' structure.
	* gdbarch.sh (disassembler_options_implicit): New `gdbarch'
	method.
	(valid_disassembler_options): Switch from `disasm_options_t' to
	the `disasm_options_and_args_t' structure.
	* NEWS: Document `set disassembler-options' support for the MIPS
	target.
	* gdbarch.h: Regenerate.
	* gdbarch.c: Regenerate.

	gdb/doc/
	PR tdep/8282
	* gdb.texinfo (Source and Machine Code): Document `set
	disassembler-options' support for the MIPS target.

	gdb/testsuite/
	PR tdep/8282
	* gdb.arch/mips-disassembler-options.exp: New test.
	* gdb.arch/mips-disassembler-options.s: New test source.
2018-07-02 23:57:21 +01:00
Sebastian Huber 41823f29a8 gdb: Prefer RISC-V register name "s0" over "fp"
The "fp" register name is an alias for "s0" which is an alias for "x8".
The "fp" name is only understood by very recent Binutils and thus not
used by GCC.  GCC does not emit a frame pointer with common optimization
options such as -Og or -O2.

It is still possible to use the "fp" register name, e.g.

  (gdb) p/x $fp
  $1 = 0x800367c8

works.

However, in the register dump you see now:

  (gdb) info registers
  ...
  t2             0xffffffffffffffff       18446744073709551615
  s0             0x800367c8       0x800367c8
  s1             0x80033280       2147693184
  ...

gdb/

	* riscv-tdep.c (riscv_register_aliases): Swap "fp" and "s0"
	entries.
2018-07-02 15:27:53 +02:00
Sergio Durigan Junior c0867626d2 Add missing parameter to 'amd64_create_target_description' (and unbreak build)
While building gdbserver on GNU/Linux, the build failed with:

  ../../../binutils-gdb/gdb/gdbserver/linux-x86-tdesc.c: In function ‘const target_desc* amd64_linux_read_description(uint64_t, bool)’:
  ../../../binutils-gdb/gdb/gdbserver/linux-x86-tdesc.c:121:67: error: too few arguments to function ‘target_desc* amd64_create_target_description(uint64_t, bool, bool, bool)’
         *tdesc = amd64_create_target_description (xcr0, is_x32, true);
                                                                     ^
  In file included from ../../../binutils-gdb/gdb/gdbserver/linux-x86-tdesc.c:26:0:
  ../../../binutils-gdb/gdb/gdbserver/../arch/amd64.h:21:14: note: declared here
   target_desc *amd64_create_target_description (uint64_t xcr0, bool is_x32,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

According to Joel Brobecker:

> I think the parameter should be set to "true". Otherwise, it will
> not include the fs_base and gs_base register in the list of registers.
> Although the name of the source file says x86, the code itself is
> protected by...
>
>     #ifdef __x86_64__
>
> ... and is inside a function called amd64_linux_read_description.
> I also verified that this file gets compiled on amd64-linux platforms.
> See gdb/gdbserver/configure.srv:
>
>   x86_64-*-linux*)      srv_regobj="$srv_amd64_linux_regobj $srv_i386_linux_regobj"
>
> The last piece of confirmation is that setting the parameter to "true"
> provides the behavior before the parameter was added; and the reason
> for adding the parameter was to remove the {fs,gs}_base registers
> from the list for Windows only.

Therefore I'm pushing the patch to unbreak the build.

gdb/gdbserver/ChangeLog:
2018-06-29  Joel Brobecker  <brobecker@adacore.com>

	* linux-x86-tdesc.c (amd64_linux_read_description): Add missing
	parameter in call to 'amd64_create_target_description'.
2018-06-29 21:38:46 -04:00
Joel Brobecker 41206e32fb fix GDB build failure for various amd64 targets
The following patch caused some amd64-*-tdep files to fail to compile:

  | commit de52b9607d
  | Date:   Tue Jun 26 16:33:27 2018 +0100
  | Subject: x86_64-windows GDB crash due to fs_base/gs_base registers

This is because we added one additional "segments" argument to
function amd64_target_description and forgot to update all the callers.
This patch fixes the omissions.

gdb/ChangeLog:

        * amd64-darwin-tdep.c (x86_darwin_init_abi_64): Add missing
        parameter in call to amd64_target_description.
        * amd64-dicos-tdep.c (amd64_dicos_init_abi): Likewise.
        * amd64-fbsd-tdep.c (amd64fbsd_core_read_description)
        (amd64fbsd_init_abi): Likewise.
        * amd64-nbsd-tdep.c (amd64nbsd_init_abi): Likewise.
        * amd64-obsd-tdep.c (amd64obsd_init_abi): Likewise.
        * amd64-sol2-tdep.c (amd64_sol2_init_abi): Likewise.
        * amd64-fbsd-nat.c (amd64_fbsd_nat_target): Likewise.

The change to amd64-fbsd-nat.c was done "blind" (no access to system),
but is reasonably straightforward. The changes to the -tdep.c files
were verify by rebuilding GDB on x86_64-linux when configured with
--enable-targets=all.
2018-06-29 18:51:18 -04:00
Pedro Alves de52b9607d x86_64-windows GDB crash due to fs_base/gs_base registers
GDB is currently crashing anytime we try to access the fs_base/gs_base
registers, either to read them, or to write them. This can be observed
under various scenarios:
  - Explicit reference to those registers (eg: print $fs_base) --
    probably relatively rare;
  - Calling a function in the inferior, with the crash happening
    because we are trying to read those registers in order to save
    their value ahead of making the function call;
  - Just a plain "info registers";

The crash was introduced by the following commit:

    | commit 48aeef91c2
    | Date:   Mon Jun 26 18:14:43 2017 -0700
    | Subject: Include the fs_base and gs_base registers in amd64 target descriptions.

The Windows-nat implementation was unfortunately not prepared to deal
with those new registers. In particular, the way it fetches registers
is done by using a table where the index is the register number, and
the value at that index is the offset in the area in the thread's CONTEXT
data where the corresponding register value is stored.

For instance, in amd64-windows-nat.c, we can find the mappings static
array containing the following 57 elements in it:

    #define context_offset(x) (offsetof (CONTEXT, x))
    static const int mappings[] =
    {
      context_offset (Rax),
      [...]
      context_offset (FloatSave.MxCsr)
    };

That array is then used by windows_fetch_one_register via:

    char *context_offset = ((char *) &th->context) + mappings[r];

The problem is that fs_base's register number is 172, which is
well past the end of the mappings array (57 elements in total).
We end up getting an undefined offset, which happens to be so large
that it then causes the address where we try to read the register
value (a little bit later) to be invalid, thus crashing GDB with
a SEGV.

This patch side-steps the issue entirely by removing support for
those registers in GDB on x86_64-windows, because a look at the
CONTEXT structure indicates no support for getting those registers.

A more comprehensive fix would patch the potential buffer overflow
of the mappings array, but this can be done as a separate commit.

gdb/ChangeLog:

        * gdb/amd64-tdep.h (amd64_create_target_description): Add
        "segments" parameter.
        * gdb/amd64-tdep.c (amd64_none_init_abi, amd64_x32_none_init_abi)
        (_initialize_amd64_tdep): Update call to
        amd64_create_target_description.
        (amd64_target_description): Add "segments" parameter.  Adjust
        the implementation to use it.
        * gdb/amd64-linux-tdep.c (amd64_linux_read_description): Update
        call to amd64_create_target_description.
        * gdb/amd64-windows-tdep.c (amd64_windows_init_abi): Likewise.
        * gdb/arch/amd64.h (amd64_create_target_description): Add
        "segments" register.
        * gdb/arch/amd64.c (amd64_create_target_description): Add
        "segments" parameter.  Call create_feature_i386_64bit_segments
        only if SEGMENTS is true.
        * gdb/gdbserver/win32-i386-low.c (i386_arch_setup): Update
        call to amd64_create_target_description.

Tested on x86_64-windows using AdaCore's testsuite (by Joel Brobecker
<brobecker at adacore dot com>).
2018-06-29 15:05:20 -07:00
Pedro Alves 75acb4867d Improve alignment of "info threads" output, align "Target Id" column
It's long annoyed me that "info threads"'s columns are misaligned.

Particularly the "Target Id" column's content is usually longer than
the specified column width, so the table ends up with the "Frame"
column misaligned.  For example, currently we get this:

 (gdb) info threads
   Id   Target Id         Frame
   1    Thread 0x7ffff7fb5740 (LWP 9056) "threads" 0x00007ffff7bc28ad in __pthread_join (threadid=140737345763072, thread_return=0x7fffffffd3e8) at pthread_join.c:90
   2    Thread 0x7ffff7803700 (LWP 9060) "function0" thread_function0 (arg=0x0) at threads.c:90
 * 3    Thread 0x7ffff7002700 (LWP 9061) "threads" thread_function1 (arg=0x1) at threads.c:106

The fact that the "Frame" heading is in a weird spot is particularly
annoying.

This commit turns the above into into this:

 (gdb) info threads
   Id   Target Id                                    Frame
   1    Thread 0x7ffff7fb5740 (LWP 7548) "threads"   0x00007ffff7bc28ad in __pthread_join (threadid=140737345763072, thread_return=0x7fffffffd3e8) at pthread_join.c:90
   2    Thread 0x7ffff7803700 (LWP 7555) "function0" thread_function0 (arg=0x0) at threads.c:91
 * 3    Thread 0x7ffff7002700 (LWP 7557) "threads"   thread_function1 (arg=0x1) at threads.c:104

It does that by computing the max width of the "Target Id" column and
using that as column width when creating the table.

This results in calling target_pid_to_str / target_extra_thread_info /
target_thread_name twice for each thread, but I think that it doesn't
matter in practice performance-wise, because the remote target caches
the info, and with native targets it shouldn't be noticeable.  It
could matter if we have many threads (say, thousands), but then "info
threads" is practically useless in such a scenario anyway -- better
thread filtering and aggregation would be necessary.

(Note: I have an old branch somewhere where I attempted at making
gdb's "info threads"-like tables follow a model/view design, so that a
general framework took care of issues like these, but it's incomplete
and a much bigger change.  This patch doesn't prevent going in that
direction in the future, of course.)

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

	* thread.c (thread_target_id_str): New, factored out from ...
	(print_thread_info_1): ... here.  Use it to compute the max
	"Target Id" column width.

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

	* gdb.threads/names.exp: Adjust expected "info threads" output.
2018-06-29 20:47:15 +01:00
Pedro Alves c76a8ea36c remote & target_extra_thread_info, use cache w/ qThreadExtraInfo and qP too
The following patch will make "info threads" call target_extra_thread_info
more frequently.  When I looked at the remote implementation, I noticed
that if we're not using qXfer:threads:read, then we'd be increasing the
remote protocol traffic.  This commit prevents that from happening.

Also, it removes a gratuitous local static buffer, which seems good on
its own.

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

	* remote.c (remote_target::extra_thread_info): Delete
	'display_buf' and 'n' locals.  from the cache, regardless of
	packet mechanims is in use.  Use cache for qThreadExtra and qP
	methods too.
2018-06-29 20:45:34 +01:00
Pedro Alves cd2bb70994 "break LINENO/*ADDRESS", inline functions and "info break" output
While experimenting with the previous patch, I noticed this inconsistency
in GDB's output:

  (gdb) b 32
  Breakpoint 1 at 0x40062f: file inline-break.c, line 32.                  (1)
  (gdb) r
  ....
  Breakpoint 1, func1 (x=1) at inline-break.c:32                           (2)
  32        return x * 23; /* break here */
  (gdb) info breakpoints
  Num     Type           Disp Enb Address    What
  1       breakpoint     keep y   0x40062f   in main at inline-break.c:32  (3)
	  breakpoint already hit 1 time
  (gdb)

Notice that when the breakpoint as set, GDB showed "inline-break.c,
line 32" (1), the same line number that was specified in the command.

When we run to the breakpoint, we present the stop at the same line
number, and correctly show "func1" as the function name (2).

But in "info break" output (3), notice that we say "in main", not "in
func1".

The same thing happens if you set a breakpoint by address.  I.e.:

  (gdb) b *0x40062f
  Breakpoint 2 at 0x40062f: file inline-break.c, line 32.
  (gdb) info breakpoints
  Num     Type           Disp Enb Address            What
  2       breakpoint     keep y   0x000000000040062f in main at inline-break.c:32
   (gdb) r
   ....
  Breakpoint 2, func1 (x=1) at inline-break.c:32
  32        return x * 23; /* break here */

The problem is that the breakpoints were set at an inline function,
but when we set such a breakpoint by line number or address, we don't
record the functions symbol in the sal, and as consequence the
breakpoint location does not have an associated symbol either.

Then, in print_breakpoint_location, if the location does not have a
symbol, we call find_pc_sect_function to find one, and this is what
finds "main", because find_pc_sect_function uses
block_linkage_function:

  /* Return the symbol for the function which contains a specified
     lexical block, described by a struct block BL.  The return value
     will not be an inlined function; the containing function will be
     returned instead.  */

  struct symbol *
  block_linkage_function (const struct block *bl)

To fix this, this commit adds an alternative to find_pc_sect_function
that uses block_containing_function instead:

  /* Return the symbol for the function which contains a specified
     block, described by a struct block BL.  The return value will be
     the closest enclosing function, which might be an inline
     function.  */

  struct symbol *
  block_containing_function (const struct block *bl)

(It seems odd to me that block_linkage_function says "the CONTAINING
function will be returned", and then block_containing_function says it
returns "the closest enclosing function".  Something seems reversed
here.  Still, I've kept the same nomenclature and copied the comments,
so that at least there's consistency.  Maybe we should fix that up
somehow.)

Then I wondered, why make print_breakpoint_location look up the symbol
every time it is called, instead of just always storing the symbol
when the location is created, since the location already stores the
symbol in some cases.  So to find which cases might be missing setting
the symbol in the sal which is used to create the breakpoint location,
I added an assertion to print_breakpoint_location, and ran the
testsuite.  That caught a few places, unsurprisingly:

 - setting a breakpoint by line number
 - setting a breapoint by address
 - ifunc resolving

Those are all fixed by this commit.  I decided not to add the
assertion to block_linkage_function and leave the existing "if (sym)"
check in place, because it's plausible that we have symtabs with line
info but no symbols.  I.e., that would not be a GDB bug, but
a peculiarity of debug info input.

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

	* blockframe.c (find_pc_sect_containing_function): New function.
	* breakpoint.c (print_breakpoint_location): Don't call
	find_pc_sect_function.
	* linespec.c (create_sals_line_offset): Record the location's
	symbol in the sal.
	* linespec.c (convert_address_location_to_sals): Fill in sal's
	symbol with find_pc_sect_containing_function.
	* symtab.c (find_function_start_sal): Rename to ...
	(find_function_start_sal_1): ... this.
	(find_function_start_sal): Reimplement as wrapper around
	find_function_start_sal_1, and use
	find_pc_sect_containing_function to fill in the sal's symbol.
	(find_function_start_sal(symbol*, bool)): Adjust.
	* symtab.h (find_pc_function, find_pc_sect_function): Adjust
	comments.
	(find_pc_sect_containing_function): Declare.

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

	* gdb.opt/inline-break.exp (line number, address): Add "info
	break" tests.
2018-06-29 19:37:20 +01:00
Pedro Alves 991ff2922a Fix running to breakpoint set in inline function by lineno/address
Commit 61b04dd04a ("Change inline frame breakpoint skipping logic
(fix gdb.gdb/selftest.exp)") caused a GDB crash when you set a
breakpoint by line number in an inline function, and then run to the
breakpoint:

    $ gdb -q test Reading symbols from test...done.
    (gdb) b inline-break.c:32
    Breakpoint 1 at 0x40062f: file inline-break.c, line 32.
    (gdb) run
    Starting program: /[...]/test
    [1]    75618 segmentation fault  /[...]/gdb -q test

The problem occurs because we assume that a bp_location's symbol is
not NULL, which is not true when we set the breakpoint with a linespec
location:

    Program received signal SIGSEGV, Segmentation fault.
    0x00000000006f42bb in stopped_by_user_bp_inline_frame (
        stop_chain=<optimized out>, frame_block=<optimized out>)
        at gdb/inline-frame.c:305
    305		      && frame_block == SYMBOL_BLOCK_VALUE (loc->symbol))
    (gdb) p loc->symbol
    $1 = (const symbol *) 0x0

The same thing happens if you run to a breakpoint set in an inline
function by address:

  (gdb) b *0x40062f
  Breakpoint 3 at 0x40062f: file inline-break.c, line 32.

To fix this, add a null pointer check, to avoid the crash, and make it
so that if there's no symbol for the location, then we present the
stop at the inline function.  This preserves the previous behavior
when e.g., setting a breakpoint by address, with "b *ADDRESS".

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

	* inline-frame.c (stopped_by_user_bp_inline_frame): Return
	true if the the location has no symbol.

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

	* gdb.opt/inline-break.c (func1): Add "break here" marker.
	* gdb.opt/inline-break.exp: Test setting breakpoints by line
	number and address and running to them.
2018-06-29 19:35:13 +01:00
Pedro Alves 356819b6bc Fix format of last gdb/testsuite/ChangeLog entry 2018-06-29 19:32:57 +01:00
Richard Bunt 49af4b7012 Remove unstable test output
Changed test output from:
PASS: gdb.base/watchpoint-hw-attach.exp: attach 25501
to
PASS: gdb.base/watchpoint-hw-attach.exp: attach

gdb/testsuite/ChangeLog:

	* gdb.base/watchpoint-hw-attach.exp: Remove unstable output.
2018-06-29 17:34:58 +01:00
Tom Tromey 44cee4fdf4 Add --enable-codesign to gdb's configure
macOS requires that the gdb executable be signed in order to be able
to successfully use ptrace.  This must be done after each link.

This patch adds a new --enable-codesign configure option so that this
step can be automated.

gdb/ChangeLog
2018-06-28  Tom Tromey  <tom@tromey.com>

	* NEWS: Mention --enable-codesign.
	* silent-rules.mk (ECHO_SIGN): New variable.
	* configure.ac: Add --enable-codesign.
	* configure: Rebuild.
	* Makefile.in (CODESIGN, CODESIGN_CERT): New variables.
	(gdb$(EXEEXT)): Optionally invoke codesign.
2018-06-28 15:13:43 -06:00
Pedro Alves f2ffa92bbc gdb: Eliminate the 'stop_pc' global
In my multi-target work, I need to add a few more
scoped_restore_current_thread and switch_to_thread calls in some
places, and in some lower-level places I was fighting against the fact
that switch_to_thread reads/refreshes the stop_pc global.

Instead of piling on workarounds, let's just finally eliminate the
stop_pc global.  We already have the per-thread
thread_info->suspend.stop_pc field, so it's mainly a matter of using
that more/instead.

gdb/ChangeLog:
2018-06-28  Pedro Alves  <palves@redhat.com>

	* gdbthread.h (struct thread_suspend_state) <stop_pc>: Extend
	comments.
	(switch_to_thread_no_regs): Adjust comment.
	* infcmd.c (stop_pc): Delete.
	(post_create_inferior, info_program_command): Replace references
	to stop_pc with references to thread_info->suspend.stop_pc.
	* inferior.h (stop_pc): Delete declaration.
	* infrun.c (proceed, handle_syscall_event, fill_in_stop_func)
	(handle_inferior_event_1, handle_signal_stop)
	(process_event_stop_test, keep_going_stepped_thread)
	(handle_step_into_function, handle_step_into_function_backward)
	(print_stop_location): Replace references to stop_pc with
	references to thread_info->suspend.stop_pc.
	(struct infcall_suspend_state) <stop_pc>: Delete field.
	(save_infcall_suspend_state, restore_infcall_suspend_state):
	Remove references to inf_stat->stop_pc.
	* linux-fork.c (fork_load_infrun_state): Likewise.
	* record-btrace.c (record_btrace_set_replay): Likewise.
	* record-full.c (record_full_goto_entry): Likewise.
	* remote.c (print_one_stopped_thread): Likewise.
	* target.c (target_resume): Extend comment.
	* thread.c (set_executing_thread): New.
	(set_executing): Use it.
	(switch_to_thread_no_regs, switch_to_no_thread, switch_to_thread):
	Remove references to stop_pc.
2018-06-28 17:12:07 +01:00
Pedro Alves ecdc3a72c8 Fix follow-exec regression / crash
After commit 00431a78b2 ("Use thread_info and inferior pointers more
throughout"), following an exec can result in gdb crashing.  On some
systems, this is visible with gdb.multi/multi-arch-exec.exp and
gdb.base/foll-exec-mode.exp.  E.g.:

  $ make check TESTS="gdb.multi/multi-arch-exec.exp gdb.base/foll-exec-mode.exp"
  [snip]
  FAIL: gdb.multi/multi-arch-exec.exp: first_arch=1: selected_thread=1: follow_exec_mode=new: continue across exec that changes architecture (GDB internal error)
  ERROR: : spawn id exp10 not open
      while executing

Running multi-arch-exec under Valgrind we easily spot the problem:

  process 16305 is executing new program: ..../gdb.multi/multi-arch-exec/1-multi-arch-exec-hello
  [New inferior 2 (process 0)]
  [New process 16305]
  ==16129== Invalid read of size 8
  ==16129==    at 0x7FA14D: get_thread_regcache(thread_info*) (regcache.c:399)
  ==16129==    by 0x75E54B: handle_inferior_event_1(execution_control_state*) (infrun.c:5292)
  ==16129==    by 0x75E82D: handle_inferior_event(execution_control_state*) (infrun.c:5382)
  ==16129==    by 0x75BC6A: fetch_inferior_event(void*) (infrun.c:3918)
  ==16129==    by 0x748DA3: inferior_event_handler(inferior_event_type, void*) (inf-loop.c:43)
  ==16129==    by 0x464B5D: handle_target_event(int, void*) (linux-nat.c:4359)
  ==16129==    by 0x7047E0: handle_file_event(file_handler*, int) (event-loop.c:733)
  ==16129==    by 0x704D83: gdb_wait_for_event(int) (event-loop.c:859)
  ==16129==    by 0x703BF6: gdb_do_one_event() (event-loop.c:322)
  ==16129==    by 0x703CA2: start_event_loop() (event-loop.c:371)
  ==16129==    by 0x791D95: captured_command_loop() (main.c:330)
  ==16129==    by 0x79311C: captured_main(void*) (main.c:1157)
  ==16129==  Address 0x15a5bad0 is 32 bytes inside a block of size 600 free'd
  ==16129==    at 0x4C2E1E8: operator delete(void*) (vg_replace_malloc.c:576)
  ==16129==    by 0x8A15D0: delete_thread_1(thread_info*, bool) (thread.c:465)
  ==16129==    by 0x8A15FA: delete_thread(thread_info*) (thread.c:476)
  ==16129==    by 0x8A0D43: add_thread_silent(ptid_t) (thread.c:291)
  ==16129==    by 0x8A0DF0: add_thread_with_info(ptid_t, private_thread_info*) (thread.c:317)
  ==16129==    by 0x8A0E79: add_thread(ptid_t) (thread.c:331)
  ==16129==    by 0x75764C: follow_exec(ptid_t, char*) (infrun.c:1233)
  ==16129==    by 0x75E534: handle_inferior_event_1(execution_control_state*) (infrun.c:5290)
  ==16129==    by 0x75E82D: handle_inferior_event(execution_control_state*) (infrun.c:5382)
  ==16129==    by 0x75BC6A: fetch_inferior_event(void*) (infrun.c:3918)
  ==16129==    by 0x748DA3: inferior_event_handler(inferior_event_type, void*) (inf-loop.c:43)
  ==16129==    by 0x464B5D: handle_target_event(int, void*) (linux-nat.c:4359)

The problem is that handle_inferior_event_1 is reading the stop_pc off
of a thread that was deleted by follow_exec.  Before commit
00431a78b2, we didn't crash because we were passing down a ptid to
get_thread_regcache instead of ecs->event_thread.

Fix this by simply moving the stop_pc reading until after
ecs->event_thread is refreshed.

gdb/ChangeLog:
2018-06-28  Pedro Alves  <palves@redhat.com>

	* infrun.c (handle_inferior_event_1) <TARGET_WAITKIND_EXECD>:
	Moving fetching stop_pc until after ecs->event_thread is refreshed.
2018-06-28 16:57:18 +01:00
Tom Tromey d95d3aef9e Make dwarf2_free_objfile static
I noticed that dwarf2_free_objfile can be made static, by changing it
to be a registry cleanup function.  This simplifies the code, as well,
because now symbol readers don't have to explicitly call it.

Tested by the buildbot.

gdb/ChangeLog
2018-06-28  Tom Tromey  <tom@tromey.com>

	* coffread.c (coff_symfile_finish): Update.
	* xcoffread.c (xcoff_symfile_finish): Update.
	* elfread.c (elf_symfile_finish): Update.
	* symfile.h (dwarf2_free_objfile): Don't declare.
	* dwarf2read.c (_initialize_dwarf2_read): Use
	register_objfile_data_with_cleanup.
	(dwarf2_free_objfile): Now static.  Change signature.
2018-06-28 08:20:59 -06:00
Jan Kratochvil 2512d7efdf Remove 2 excessive executable permission flags
Fedora rpmbuild has been complaining:
	*** WARNING: ./usr/src/debug/gdb-8.1.50.20180618-24.fc28.x86_64/gdb/gdbserver/x86-tdesc.h is executable but has empty or no shebang, removing executable bit

gdb/gdbserver/ChangeLog
2018-06-28  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* x86-tdesc.h: Remove executable permission flag.

gdb/testsuite/ChangeLog
2018-06-28  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* lib/compiler.c: Remove executable permission flag.
2018-06-28 16:09:37 +02:00
Richard Bunt be1b6474f0 Fixed top frame assumption in watchpoint-hw-attach
watchpoint-hw-attach.exp was noticed to fail on some machines.
Thanks to the input from sergiodj and palves on the IRC channel,
it was concluded that the test case incorrectly assumed that on
attach it was landed in the top-most frame of the inferior. This
was fixed by running to a break point in main by explicitly
defining the source file name before continuing with the test.

Tested on the following architectures x86_64, aarch64 and ppc64le.

gdb/testsuite/ChangeLog:

	* gdb.base/watchpoint-hw-attach.c (main): Remove unneeded
	code.
	* gdb.base/watchpoint-hw-attach.exp: Break in outermost frame.
2018-06-28 08:59:59 +01:00
Petr Tesarik 291f9a9643 Add an optional offset option to the "add-symbol-file" command
If all sections of a symbol file are loaded with a fixed offset, it
is easier to specify that offset than listing all sections
explicitly.  There is also a similar option for "symbol-file".

gdb/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* symfile.c (add_symbol_file_command, _initialize_symfile): Add
	option "-o" to add-symbol-file-load to add an offset to each
	section's load address.
	* symfile.c (set_objfile_default_section_offset): New function.

gdb/doc/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* gdb.texinfo (Files): Document "add-symbol-file -o offset".

gdb/testsuite/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* gdb.base/relocate.exp: Add test for "add-symbol-file -o ".
2018-06-28 08:35:34 +02:00
Petr Tesarik d81a3eaff3 Make sure that sorting does not change section order
Symbol files may contain multiple sections with the same name.
Section addresses specified by add-symbol-file are assigned to the
corresponding BFD sections in addr_info_make_relative using sorted
indexes of both vectors.  Since the sort algorithm is not inherently
stable, the comparison function uses sectindex to maintain the
original order.  However, add_symbol_file_command uses zero for all
sections, so if the user specifies multiple sections with the same
name, they will be assigned randomly to symbol file sections with
the same name.

gdb/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* symfile.c (add_symbol_file_command): Make sure that sections
2018-06-28 08:35:34 +02:00
Petr Tesarik ed6dfe517e Make add-symbol-file's address argument optional
The (first) .text section must be always specified as the second
non-option argument.  The documentation states that GDB cannot
figure out this address by itself.  This is true if the object file
was indeed relocated, but it is also confusing, because all other
sections can be omitted and will use the address provided by BFD.

gdb/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* symfile.c (add_symbol_file_command, _initialize_symfile): Do not
	require the second argument.  If omitted, load sections at the
	addresses specified in the file.

gdb/doc/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* gdb.texinfo (Files): The address argument for "add-symbol-file"
	is no longer mandatory.

gdb/testsuite/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* gdb.base/relocate.exp: Test add-symbol-file behavior when the
	address argument is omitted.
2018-06-28 08:35:34 +02:00
Petr Tesarik d4d429d589 Add an optional offset option to the "symbol-file" command
If the main file is relocated at runtime, all symbols are offset by
a fixed amount.  Let the user specify this offset when loading a
symbol file.

gdb/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* symfile.c (symbol_file_command, symbol_file_add_main_1)
	(_initialize_symfile): Add option "-o" to symbol-file to add an
	offset to each section of the symbol file.

gdb/doc/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* gdb.texinfo (Files): Document "symbol-file -o offset".

gdb/testsuite/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* gdb.base/relocate.exp: Add test for "symbol-file -o ".
2018-06-28 08:35:34 +02:00
Petr Tesarik 39b27ab6ae Add myself as a write-after-approval GDB maintainer.
gdb/ChangeLog:
2018-06-28  Petr Tesarik  <ptesarik@suse.cz>

	* MAINTAINERS (Write After Approval): Add Petr Tesarik.
2018-06-28 08:01:33 +02:00
Tom Tromey 41827fc34d Update "func" help text to GNU standards
In my earlier series to change help text to follow the GNU standards
for metasyntactic variables, I missed one: the "func" command.  This
patch updates its help text.

Tested by the buildbot.

gdb/ChangeLog
2018-06-27  Tom Tromey  <tom@tromey.com>

	* stack.c (_initialize_stack): Update "func" help text.
2018-06-27 15:09:05 -06:00
Tom Tromey 0c6aef226e Remove a VEC from py-unwind.c
This removes a use of VEC from py-unwind.c, replacing it wit
std::vector.  It also changes saved_regs to hold a gdbpy_ref<>,
simplifying the memory management.

Tested against gdb.python on x86-64 Fedora 26.

gdb/ChangeLog
2018-06-27  Tom Tromey  <tom@tromey.com>

	* python/py-unwind.c (unwind_info_object) <saved_regs>: Now a
	std::vector.
	(unwind_infopy_str, pyuw_create_unwind_info)
	(unwind_infopy_add_saved_register, pyuw_sniffer)
	(unwind_infopy_dealloc, unwind_infopy_add_saved_register):
	Update.
	(struct saved_reg): Add constructor.
	<value>: Now a gdbpy_ref<>.
2018-06-27 14:50:10 -06:00
Tom Tromey 6317728958 Fix crash in machoread.c
"./gdb ./gdb" was crashing for me on macOS.  Investigating showed that
macho_symfile_read was crashing because "symbol_table" was being freed
too soon.  This was introduced by my earlier patch to change
macho_symfile_read to use a std::vector.

Tested on macOS 10.13.5 using "./gdb ./gdb".  This should un-break
various already existing tests (testsuite/gdb.gdb at least), so no new
test case.

I'm checking this in as obvious.

gdb/ChangeLog
2018-06-27  Tom Tromey  <tom@tromey.com>

	* machoread.c (macho_symfile_read): Define "symbol_table" earlier.
2018-06-27 14:36:42 -06:00
Simon Marchi e76f78a052 Format gdb-gdb.py.in with autopep8
Format using "autopep8 -i".

gdb/ChangeLog:

	* gdb-gdb.py.in: Format using autopep8.
2018-06-27 15:31:05 -04:00
Simon Marchi 9a14af7b1a Add pretty-printer for CORE_ADDR
Add a pretty-printer that prints CORE_ADDR values in hex.

gdb/ChangeLog:

	* gdb-gdb.py.in (CoreAddrPrettyPrinter): New class.
	(type_lookup_function): Recognize CORE_ADDR values.
2018-06-27 15:21:47 -04:00
Simon Marchi 189366cd86 gdb-gdb.py.in: Don't print value's tag_name
This has been removed recently.

gdb/ChangeLog:

	* gdb-gdb.py.in (StructMainTypePrettyPrinter) <to_string>: Don't
	print tag_name.
2018-06-27 14:32:08 -04:00
Simon Marchi 68ad5fb9aa gdb-gdb.py.in: Fix ordering of TypeFlags objects with Python 3
Python 3 doesn't use __cmp__ to order objects, it uses __lt__.  Because
of this, we get this exception when trying to pretty-print "type"
objects:

I tested it with Python 2.7 as well.

gdb/ChangeLog:

	* gdb-gdb.py.in (TypeFlag) <__cmp__>: Remove.
	<__lt__>: Add.
2018-06-27 14:32:05 -04:00
Simon Marchi 141ec9f67f Copy gdb-gdb.py to build dir
I have thought for a long time how nice it would be to have cool pretty
printers for GDB's internal types.  Well, turns out there are few
already in gdb-gdb.py!  Unfortunately, if you build GDB outside of the
source directory, that file never gets loaded.  top-gdb will look for a
file called

  ../path/to/build/gdb/gdb-gdb.py

but that file is in the source directory at

  ../path/to/src/gdb/gdb-gdb.py

This patch makes it so we copy it to the build directory, just like we
do for gdb-gdb.gdb.  With this, I can at least see the file getting
automatically loaded:

(top-gdb) info pretty-printer
global pretty-printers:
  builtin
    mpx_bound128
  objfile /home/emaisin/build/binutils-gdb/gdb/gdb pretty-printers:
  type_lookup_function

I noticed that running "make" didn't re-generate gdb-gdb.py from
gdb-gdb.py.in.  That's because it's copied when running the configure
script and that's it.  I added a rule in the Makefile for that (and for
gdb-gdb.gdb too) and added them as a dependency to the "all" target.

gdb/ChangeLog:

	* gdb-gdb.py: Move to...
	* gdb-gdb.py.in: ... here.
	* configure.ac (AC_CONFIG_FILES): Add gdb-gdb.py.
	* Makefile.in (all): Add gdb-gdb.gdb and gdb-gdb.py as
	dependencies.
	(distclean): Remove gdb-gdb.py when cleaning.
	(gdb-gdb.py, gdb-gdb.gdb): New rules.
	* configure: Re-generate.
2018-06-27 14:32:02 -04:00
Pedro Alves 4c4e7ad46e Fix Cell debugging regression
Commit 00431a78b2 ("Use thread_info and inferior pointers more
throughout") broke Cell multi-arch debugging, because it made the
proc-service routines (ps_lgetregs etc.) access registers using the
SPU architecture if GDB happens to interrupt SPU code.  The
proc-service routines must always operate on the "main" (in this case
PowerPC) architecture, because that's the register set libthread_db
expects to be using.

Restore the previous behavior, but wrapped in a new
get_ps_regcache function with a describing comment.

Also, the ps_l*regs routines have an explicit lwpid parameter that
said commit missed; with the commit mentioned above, we started always
reading the registers off of the current thread, which is incorrect.
That is fixed by this commit too.

gdb/ChangeLog:
2018-06-27  Pedro Alves  <palves@redhat.com>

	* proc-service.c (get_ps_regcache): New.
	(ps_lgetregs, ps_lsetregs, ps_lgetfpregs)
	(ps_lsetfpregs): Use it.
2018-06-27 17:19:32 +01:00
Omair Javaid 7ab6656f27 Fix lost line info for symbol at addr zero
This patch fixes a unique condition where GDB fails to provide line
information of symbol at address zero when code is compiled with text
address zero but loaded at an offset > 0.

For example lets compile following code snippet:

int main() {
  return 0;
}

gcc -O0 -g3 -nostdlib -emain -Wl,-Ttext=0x00 -o file.out file.c

Start gdb and run:

add-symbol-file file.out 0xffff0000
info line main

GDB will return error saying no line info is available for the symbol.

This is a direct consequence of the fix for PR 12528 where GDB tries to ignore
line table for a function which has been garbage collected by the linker.

As the garbage collected symbols are sent to address zero GDB assumes a symbol
actually placed at address zero as garbage collected.

This was fixed with an additional check address < lowpc. But when symbol is
loaded at an offset lowpc becomes lowpc + offset while no offset is added to
address rather final symbol address is calculated based on baseaddr and address
added together. So in case where symbols are loaded at an offset the condition
address < lowpc will always return true.

This patch fixes this by comparing address against a non offset lowpc.

This patch also adds a GDB test case to replicate this behavior.

gdb:

2018-06-27  Omair Javaid  <omair.javaid@linaro.org>

	PR gdb/21695
	* dwarf2read.c (lnp_state_machine::check_line_address): Update declaration.
	(dwarf_decode_lines_1): Adjust.

gdb/testsuite:

2018-06-27  Omair Javaid  <omair.javaid@linaro.org>

	PR gdb/21695
	* gdb.base/infoline-reloc-main-from-zero.exp: New test.
	* gdb.base/infoline-reloc-main-from-zero.c: New file.
2018-06-27 20:12:49 +05:00
Simon Marchi bd583225a5 Add overrides, fix FreeBSD build
Fix this:

  CXX    fbsd-nat.o
In file included from fbsd-nat.c:44:
./fbsd-nat.h:40:7: error: 'find_memory_regions' overrides a member function but is not marked 'override' [-Werror,-Winconsistent-missing-override]
  int find_memory_regions (find_memory_region_ftype func, void *data);
      ^
./target.h:702:17: note: overridden virtual function is here
    virtual int find_memory_regions (find_memory_region_ftype func, void *data)
                ^
In file included from fbsd-nat.c:44:
./fbsd-nat.h:42:8: error: 'info_proc' overrides a member function but is not marked 'override' [-Werror,-Winconsistent-missing-override]
  bool info_proc (const char *, enum info_proc_what);
       ^
./target.h:950:18: note: overridden virtual function is here
    virtual bool info_proc (const char *, enum info_proc_what);
                 ^

gdb/ChangeLog:

	* fbsd-nat.h (class fbsd_nat_target) <find_memory_regions>: Add
	override.
	<info_proc>: Likewise.
2018-06-27 10:53:29 -04:00
Joel Brobecker 9a325b7b3f Minor reorganization of fetch_registers/store_registers in windows-nat.c
This patch is a small reorganizational patch that splits
do_windows_fetch_inferior_registers into two parts:

  (a) One part that first reloads the thread's context when needed,
      and then decides based on the given register number whether
      one register needs to be fetched or all of them.

      This part is moved to windows_nat_target::fetch_registers.

  (b) The rest of the code, which actually fetches the register value
      and supplies it to the regcache.

A similar treatment is applied to do_windows_store_inferior_registers.

This change is preparation work for changing the way we calculate
the location of a given register in the thread context structure,
and should be a no op.

gdb/ChangeLog:

        * windows-nat.c (do_windows_fetch_inferior_registers): Rename
        to windows_fetch_one_register, and only handle the case of
        fetching one register.  Move the code that reloads the context
        and iterates over all registers if R is negative to...
        (windows_nat_target::fetch_registers): ... here.
        (do_windows_store_inferior_registers): Rename to
        windows_store_one_register, and only handle the case of storing
        one register.  Move the code that handles the case where r is
        negative to...
        (windows_nat_target::store_registers) ... here.

Tested on x86-windows and x86_64-windows using AdaCore's testsuite.
2018-06-26 14:38:32 -07:00
Tom Tromey a33ccfc7af Support ptype/o in Rust
This adds support for ptype/o to the Rust language code.

By default, the Rust compiler reorders fields to reduce padding.  So,
the Rust language code sorts the fields by offset before printing.
This may yield somewhat odd-looking results, but it is faithful to
"what really happens", and might be useful when doing lower-level
debugging.

The reordering can be disabled using #[repr(c)]; ptype/o might be more
useful in this case.

gdb/ChangeLog
2018-06-26  Tom Tromey  <tom@tromey.com>

	PR rust/22574:
	* typeprint.c (whatis_exp): Allow ptype/o for Rust.
	* rust-lang.c (rust_print_struct_def): Add podata parameter.
	Update.
	(rust_internal_print_type): Add podata parameter.
	(rust_print_type): Update.

gdb/testsuite/ChangeLog
2018-06-26  Tom Tromey  <tom@tromey.com>

	PR rust/22574:
	* gdb.rust/simple.exp (test_one_slice): Add ptype/o tests.
	* gdb.rust/simple.rs (struct SimpleLayout): New.
2018-06-26 14:53:17 -06:00
Tom Tromey e0c547d14a Move ptype/o printing code to typeprint.c
This moves the hole-printing support code for ptype/o from
c-typeprint.c to be methods on print_offset_data.  This allows the
code to be used from non-C languages.

gdb/ChangeLog
2018-06-26  Tom Tromey  <tom@tromey.com>

	* typeprint.h (struct print_offset_data) <update, finish,
	maybe_print_hole>: New methods.
	<indentation>: New constant.
	* typeprint.c (print_offset_data::indentation): Define.
	(print_offset_data::maybe_print_hole, print_offset_data::update)
	(print_offset_data::finish): Move from c-typeprint.c and rename.
	* c-typeprint.c (OFFSET_SPC_LEN): Remove.
	(print_spaces_filtered_with_print_options): Update.
	(c_print_type_union_field_offset, maybe_print_hole)
	(c_print_type_struct_field_offset): Move to typeprint.c and
	rename.
	(c_type_print_base_struct_union): Update.
2018-06-26 14:53:17 -06:00
Pedro Alves 75cbc781e3 gdb: For macOS, s/thread_info/struct thread_info/
The macOS build currently fails with several instances of this problem:

  In file included from ../../src/gdb/darwin-nat.h:22:0,
		   from ../../src/gdb/i386-darwin-nat.c:37:
  ../../src/gdb/gdbthread.h:376:59: error: type/value mismatch at argument 1 in template parameter list for 'template<class T, class Policy> class gdb::ref_ptr'
     = gdb::ref_ptr<thread_info, refcounted_object_ref_policy>;
							     ^
  ../../src/gdb/gdbthread.h:376:59: note:   expected a type, got 'thread_info'
  ../../src/gdb/gdbthread.h:396:28: error: variable or field 'delete_thread' declared void
   extern void delete_thread (thread_info *thread);
			      ^
(...)

This is because there's a thread_info function in the Darwin/XNU/mach API:

 http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/thread_info.html

Fix this in the same way it had been fixed in commit 7aabaf9d4a
("Create private_thread_info hierarchy"), by adding an explicit
"struct" keyword.

gdb/ChangeLog:
2018-06-25  Pedro Alves  <palves@redhat.com>

	* gdbthread.h (thread_info_ref, delete_thread)
	(delete_thread_silent, first_thread_of_inferior)
	(any_thread_of_inferior, switch_to_thread)
	(enable_thread_stack_temporaries)
	(thread_stack_temporaries_enabled_p, push_thread_stack_temporary)
	(get_last_thread_stack_temporary)
	(value_in_thread_stack_temporaries, can_access_registers_thread):
	Spell out "struct thread_info" instead of just "thread_info".
	* inferior.h (notice_new_inferior): Likewise.
2018-06-25 17:43:14 +01:00
Pedro Alves b7a08269ca gdb: Fix build on several hosts/ports
Commit 00431a78b2 ("Use thread_info and inferior pointers more
throughout") missed updating some callers, like e.g.,:

 gdb/remote-sim.c: In member function 'virtual void gdbsim_target::mourn_inferior()':
 gdb/remote-sim.c:1198:50: error: cannot convert 'ptid_t' to 'thread_info*' for argument '1' to 'void delete_thread_silent(thread_info*)'
   delete_thread_silent (sim_data->remote_sim_ptid);

 gdb/mygit/src/gdb/procfs.c: In member function ‘virtual void procfs_target::detach(inferior*, int)’:
 gdb/mygit/src/gdb/procfs.c:1931:23: error: invalid conversion from ‘int’ to ‘inferior*’ [-fpermissive]
    detach_inferior (pid);
			 ^
 In file included from gdb/mygit/src/gdb/procfs.c:24:0:
 gdb/mygit/src/gdb/inferior.h:476:13: note:   initializing argument 1 of ‘void detach_inferior(inferior*)’

 etc.

This fixes it.

The delete_thread_silent calls in both go32-nat.c and remote-sim.c are
unnecessary because generic_mourn_inferior calls exit_inferior, which
deletes the inferior's threads.

gdb/ChangeLog:
2018-06-25  Pedro Alves  <palves@redhat.com>

	* windows-nat.c (windows_delete_thread): Use find_thread_ptid and
	pass thread_info pointer to delete_thread.
	(windows_nat_target::detach): Pass inferior pointer to
	detach_inferior.
	* aix-thread.c (sync_threadlists): Pass thread_info pointer to
	delete_thread.
	* bsd-kvm.c (bsd_kvm_target::close): Use discard_all_inferiors.
	* darwin-nat.c (darwin_check_new_threads): Use find_thread_ptid
	and pass a thread_info pointer to delete_thread.
	* fbsd-nat.c (fbsd_nat_target::wait): Use find_thread_ptid and
	pass thread_info pointer to delete_thread.
	* go32-nat.c (go32_nat_target::mourn_inferior): Remove
	delete_thread_silent call.
	* procfs.c (procfs_target::detach): Pass inferior pointer to
	detach_inferior.
	(procfs_target::wait): Pass thread_info pointer to delete_thread.
	* remote-sim.c (gdbsim_target::mourn_inferior): Remove
	delete_thread_silent call.
	* windows-nat.c (windows_delete_thread): Use find_thread_ptid and
	pass thread_info pointer to delete_thread.
	(windows_nat_target::detach): Pass inferior pointer to
	delete_inferior.
2018-06-25 17:42:22 +01:00
Simon Marchi 6d72d289c4 Fix "info registers" regexes in gdb.base/jit-reader.exp
Commit

  e813d34 ("Align natural-format register values to the same column")

changed the output of "info registers" (tabs to spaces), but didn't
update gdb.base/jit-reader.exp.  Update the regexes to expect spaces
instead.

gdb/testsuite/ChangeLog:

	* gdb.base/jit-reader.exp (jit_reader_test): Expect spaces in
	"info registers" output.
2018-06-22 13:40:47 -04:00
Alan Hayward 8e7767e3f7 Use partial register read/writes in transfer_regset
This avoids assert failures when the register is bigger than the
slot size. This happens on Aarch64 when truncating Z registers
into an fpsimd structure. This can be triggered by running
gdb command "generate-core-file".

Also, when the register is smaller then the slot size, then
zero pad when writing to the slot, and truncate when writing
to the regcache. This happens on Aarch64 with the CPSR register.

Continue to ensure registers are invalidated when both buffers
are null.

gdb/
	* regcache.c (readable_regcache::read_part): Fix asserts.
	(reg_buffer::raw_collect_part): New function.
	(regcache::write_part): Fix asserts.
	(reg_buffer::raw_supply_part): New function.
	(regcache::transfer_regset_register): New helper function.
	(regcache::transfer_regset): Call new functions.
	(regcache_supply_regset): Use gdb_byte*.
	(regcache::supply_regset): Likewise.
	(regcache_collect_regset): Likewise.
	(regcache::collect_regset): Likewise.
	* regcache.h (reg_buffer::raw_collect_part): New declaration.
	(reg_buffer::raw_supply_part): Likewise.
	(regcache::transfer_regset_register): Likewise.
	(regcache::transfer_regset): Use gdb_byte*.
2018-06-22 16:26:02 +01:00
Alan Hayward bfd60e344c Fix up HAS_SVE_STATE macro
Prevents build break on aarch64 Suse.

2018-06-22  Alan Hayward  <alan.hayward@arm.com>

gdb/
	* nat/aarch64-sve-linux-ptrace.h (HAS_SVE_STATE): Use &.
2018-06-22 12:01:18 +01:00
Pedro Alves 00431a78b2 Use thread_info and inferior pointers more throughout
This is more preparation bits for multi-target support.

In a multi-target scenario, we need to address the case of different
processes/threads running on different targets that happen to have the
same PID/PTID.  E.g., we can have both process 123 in target 1, and
process 123 in target 2, while they're in reality different processes
running on different machines.  Or maybe we've loaded multiple
instances of the same core file.  Etc.

To address this, in my WIP multi-target branch, threads and processes
are uniquely identified by the (process_stratum target_ops *, ptid_t)
and (process_stratum target_ops *, pid) tuples respectively.  I.e.,
each process_stratum instance has its own thread/process number space.

As you can imagine, that requires passing around target_ops * pointers
in a number of functions where we're currently passing only a ptid_t
or an int.  E.g., when we look up a thread_info object by ptid_t in
find_thread_ptid, the ptid_t alone isn't sufficient.

In many cases though, we already have the thread_info or inferior
pointer handy, but we "lose" it somewhere along the call stack, only
to look it up again by ptid_t/pid.  Since thread_info or inferior
objects know their parent target, if we pass around thread_info or
inferior pointers when possible, we avoid having to add extra
target_ops parameters to many functions, and also, we eliminate a
number of by ptid_t/int lookups.

So that's what this patch does.  In a bit more detail:

- Changes a number of functions and methods to take a thread_info or
  inferior pointer instead of a ptid_t or int parameter.

- Changes a number of structure fields from ptid_t/int to inferior or
  thread_info pointers.

- Uses the inferior_thread() function whenever possible instead of
  inferior_ptid.

- Uses thread_info pointers directly when possible instead of the
  is_running/is_stopped etc. routines that require a lookup.

- A number of functions are eliminated along the way, such as:

  int valid_gdb_inferior_id (int num);
  int pid_to_gdb_inferior_id (int pid);
  int gdb_inferior_id_to_pid (int num);
  int in_inferior_list (int pid);

- A few structures and places hold a thread_info pointer across
  inferior execution, so now they take a strong reference to the
  (refcounted) thread_info object to avoid the thread_info pointer
  getting stale.  This is done in enable_thread_stack_temporaries and
  in the infcall.c code.

- Related, there's a spot in infcall.c where using a RAII object to
  handle the refcount would be handy, so a gdb::ref_ptr specialization
  for thread_info is added (thread_info_ref, in gdbthread.h), along
  with a gdb_ref_ptr policy that works for all refcounted_object types
  (in common/refcounted-object.h).

gdb/ChangeLog:
2018-06-21  Pedro Alves  <palves@redhat.com>

	* ada-lang.h (ada_get_task_number): Take a thread_info pointer
	instead of a ptid_t.  All callers adjusted.
	* ada-tasks.c (ada_get_task_number): Likewise.  All callers
	adjusted.
	(print_ada_task_info, display_current_task_id, task_command_1):
	Adjust.
	* breakpoint.c (watchpoint_in_thread_scope): Adjust to use
	inferior_thread.
	(breakpoint_kind): Adjust.
	(remove_breakpoints_pid): Rename to ...
	(remove_breakpoints_inf): ... this.  Adjust to take an inferior
	pointer.  All callers adjusted.
	(bpstat_clear_actions): Use inferior_thread.
	(get_bpstat_thread): New.
	(bpstat_do_actions): Use it.
	(bpstat_check_breakpoint_conditions, bpstat_stop_status): Adjust
	to take a thread_info pointer.  All callers adjusted.
	(set_longjmp_breakpoint_for_call_dummy, set_momentary_breakpoint)
	(breakpoint_re_set_thread): Use inferior_thread.
	* breakpoint.h (struct inferior): Forward declare.
	(bpstat_stop_status): Update.
	(remove_breakpoints_pid): Delete.
	(remove_breakpoints_inf): New.
	* bsd-uthread.c (bsd_uthread_target::wait)
	(bsd_uthread_target::update_thread_list): Use find_thread_ptid.
	* btrace.c (btrace_add_pc, btrace_enable, btrace_fetch)
	(maint_btrace_packet_history_cmd)
	(maint_btrace_clear_packet_history_cmd): Adjust.
	(maint_btrace_clear_cmd, maint_info_btrace_cmd): Adjust to use
	inferior_thread.
	* cli/cli-interp.c: Include "inferior.h".
	* common/refcounted-object.h (struct
	refcounted_object_ref_policy): New.
	* compile/compile-object-load.c: Include gdbthread.h.
	(store_regs): Use inferior_thread.
	* corelow.c (core_target::close): Use current_inferior.
	(core_target_open): Adjust to use first_thread_of_inferior and use
	the current inferior.
	* ctf.c (ctf_target::close): Adjust to use current_inferior.
	* dummy-frame.c (dummy_frame_id) <ptid>: Delete, replaced by ...
	<thread>: ... this new field.  All references adjusted.
	(dummy_frame_pop, dummy_frame_discard, register_dummy_frame_dtor):
	Take a thread_info pointer instead of a ptid_t.
	* dummy-frame.h (dummy_frame_push, dummy_frame_pop)
	(dummy_frame_discard, register_dummy_frame_dtor): Take a
	thread_info pointer instead of a ptid_t.
	* elfread.c: Include "inferior.h".
	(elf_gnu_ifunc_resolver_stop, elf_gnu_ifunc_resolver_return_stop):
	Use inferior_thread.
	* eval.c (evaluate_subexp): Likewise.
	* frame.c (frame_pop, has_stack_frames, find_frame_sal): Use
	inferior_thread.
	* gdb_proc_service.h (struct thread_info): Forward declare.
	(struct ps_prochandle) <ptid>: Delete, replaced by ...
	<thread>: ... this new field.  All references adjusted.
	* gdbarch.h, gdbarch.c: Regenerate.
	* gdbarch.sh (get_syscall_number): Replace 'ptid' parameter with a
	'thread' parameter.  All implementations and callers adjusted.
	* gdbthread.h (thread_info) <set_running>: New method.
	(delete_thread, delete_thread_silent): Take a thread_info pointer
	instead of a ptid.
	(global_thread_id_to_ptid, ptid_to_global_thread_id): Delete.
	(first_thread_of_process): Delete, replaced by ...
	(first_thread_of_inferior): ... this new function.  All callers
	adjusted.
	(any_live_thread_of_process): Delete, replaced by ...
	(any_live_thread_of_inferior): ... this new function.  All callers
	adjusted.
	(switch_to_thread, switch_to_no_thread): Declare.
	(is_executing): Delete.
	(enable_thread_stack_temporaries): Update comment.
	<enable_thread_stack_temporaries>: Take a thread_info pointer
	instead of a ptid_t.  Incref the thread.
	<~enable_thread_stack_temporaries>: Decref the thread.
	<m_ptid>: Delete
	<m_thr>: New.
	(thread_stack_temporaries_enabled_p, push_thread_stack_temporary)
	(get_last_thread_stack_temporary)
	(value_in_thread_stack_temporaries, can_access_registers_thread):
	Take a thread_info pointer instead of a ptid_t.  All callers
	adjusted.
	* infcall.c (get_call_return_value): Use inferior_thread.
	(run_inferior_call): Work with thread pointers instead of ptid_t.
	(call_function_by_hand_dummy): Work with thread pointers instead
	of ptid_t.  Use thread_info_ref.
	* infcmd.c (proceed_thread_callback): Access thread's state
	directly.
	(ensure_valid_thread, ensure_not_running): Use inferior_thread,
	access thread's state directly.
	(continue_command): Use inferior_thread.
	(info_program_command): Use find_thread_ptid and access thread
	state directly.
	(proceed_after_attach_callback): Use thread state directly.
	(notice_new_inferior): Take a thread_info pointer instead of a
	ptid_t.  All callers adjusted.
	(exit_inferior): Take an inferior pointer instead of a pid.  All
	callers adjusted.
	(exit_inferior_silent): New.
	(detach_inferior): Delete.
	(valid_gdb_inferior_id, pid_to_gdb_inferior_id)
	(gdb_inferior_id_to_pid, in_inferior_list): Delete.
	(detach_inferior_command, kill_inferior_command): Use
	find_inferior_id instead of valid_gdb_inferior_id and
	gdb_inferior_id_to_pid.
	(inferior_command): Use inferior and thread pointers.
	* inferior.h (struct thread_info): Forward declare.
	(notice_new_inferior): Take a thread_info pointer instead of a
	ptid_t.  All callers adjusted.
	(detach_inferior): Delete declaration.
	(exit_inferior, exit_inferior_silent): Take an inferior pointer
	instead of a pid.  All callers adjusted.
	(gdb_inferior_id_to_pid, pid_to_gdb_inferior_id, in_inferior_list)
	(valid_gdb_inferior_id): Delete.
	* infrun.c (follow_fork_inferior, proceed_after_vfork_done)
	(handle_vfork_child_exec_or_exit, follow_exec): Adjust.
	(struct displaced_step_inferior_state) <pid>: Delete, replaced by
	...
	<inf>: ... this new field.
	<step_ptid>: Delete, replaced by ...
	<step_thread>: ... this new field.
	(get_displaced_stepping_state): Take an inferior pointer instead
	of a pid.  All callers adjusted.
	(displaced_step_in_progress_any_inferior): Adjust.
	(displaced_step_in_progress_thread): Take a thread pointer instead
	of a ptid_t.  All callers adjusted.
	(displaced_step_in_progress, add_displaced_stepping_state): Take
	an inferior pointer instead of a pid.  All callers adjusted.
	(get_displaced_step_closure_by_addr): Adjust.
	(remove_displaced_stepping_state): Take an inferior pointer
	instead of a pid.  All callers adjusted.
	(displaced_step_prepare_throw, displaced_step_prepare)
	(displaced_step_fixup): Take a thread pointer instead of a ptid_t.
	All callers adjusted.
	(start_step_over): Adjust.
	(infrun_thread_ptid_changed): Remove bit updating ptids in the
	displaced step queue.
	(do_target_resume): Adjust.
	(fetch_inferior_event): Use inferior_thread.
	(context_switch, get_inferior_stop_soon): Take an
	execution_control_state pointer instead of a ptid_t.  All callers
	adjusted.
	(switch_to_thread_cleanup): Delete.
	(stop_all_threads): Use scoped_restore_current_thread.
	* inline-frame.c: Include "gdbthread.h".
	(inline_state) <inline_state>: Take a thread pointer instead of a
	ptid_t.  All callers adjusted.
	<ptid>: Delete, replaced by ...
	<thread>: ... this new field.
	(find_inline_frame_state): Take a thread pointer instead of a
	ptid_t.  All callers adjusted.
	(skip_inline_frames, step_into_inline_frame)
	(inline_skipped_frames, inline_skipped_symbol): Take a thread
	pointer instead of a ptid_t.  All callers adjusted.
	* inline-frame.h (skip_inline_frames, step_into_inline_frame)
	(inline_skipped_frames, inline_skipped_symbol): Likewise.
	* linux-fork.c (delete_checkpoint_command): Adjust to use thread
	pointers directly.
	* linux-nat.c (get_detach_signal): Likewise.
	* linux-thread-db.c (thread_from_lwp): New 'stopped' parameter.
	(thread_db_notice_clone): Adjust.
	(thread_db_find_new_threads_silently)
	(thread_db_find_new_threads_2, thread_db_find_new_threads_1): Take
	a thread pointer instead of a ptid_t.  All callers adjusted.
	* mi/mi-cmd-var.c: Include "inferior.h".
	(mi_cmd_var_update_iter): Update to use thread pointers.
	* mi/mi-interp.c (mi_new_thread): Update to use the thread's
	inferior directly.
	(mi_output_running_pid, mi_inferior_count): Delete, bits factored
	out to ...
	(mi_output_running): ... this new function.
	(mi_on_resume_1): Adjust to use it.
	(mi_user_selected_context_changed): Adjust to use inferior_thread.
	* mi/mi-main.c (proceed_thread): Adjust to use thread pointers
	directly.
	(interrupt_thread_callback): : Adjust to use thread and inferior
	pointers.
	* proc-service.c: Include "gdbthread.h".
	(ps_pglobal_lookup): Adjust to use the thread's inferior directly.
	* progspace-and-thread.c: Include "inferior.h".
	* progspace.c: Include "inferior.h".
	* python/py-exitedevent.c (create_exited_event_object): Adjust to
	hold a reference to an inferior_object.
	* python/py-finishbreakpoint.c (bpfinishpy_init): Adjust to use
	inferior_thread.
	* python/py-inferior.c (struct inferior_object): Give the type a
	tag name instead of a typedef.
	(python_on_normal_stop): No need to check if the current thread is
	listed.
	(inferior_to_inferior_object): Change return type to
	inferior_object.  All callers adjusted.
	(find_thread_object): Delete, bits factored out to ...
	(thread_to_thread_object): ... this new function.
	* python/py-infthread.c (create_thread_object): Use
	inferior_to_inferior_object.
	(thpy_is_stopped): Use thread pointer directly.
	(gdbpy_selected_thread): Use inferior_thread.
	* python/py-record-btrace.c (btpy_list_object) <ptid>: Delete
	field, replaced with ...
	<thread>: ... this new field.  All users adjusted.
	(btpy_insn_or_gap_new): Drop const.
	(btpy_list_new): Take a thread pointer instead of a ptid_t.  All
	callers adjusted.
	* python/py-record.c: Include "gdbthread.h".
	(recpy_insn_new, recpy_func_new): Take a thread pointer instead of
	a ptid_t.  All callers adjusted.
	(gdbpy_current_recording): Use inferior_thread.
	* python/py-record.h (recpy_record_object) <ptid>: Delete
	field, replaced with ...
	<thread>: ... this new field.  All users adjusted.
	(recpy_element_object) <ptid>: Delete
	field, replaced with ...
	<thread>: ... this new field.  All users adjusted.
	(recpy_insn_new, recpy_func_new): Take a thread pointer instead of
	a ptid_t.  All callers adjusted.
	* python/py-threadevent.c: Include "gdbthread.h".
	(get_event_thread): Use thread_to_thread_object.
	* python/python-internal.h (struct inferior_object): Forward
	declare.
	(find_thread_object, find_inferior_object): Delete declarations.
	(thread_to_thread_object, inferior_to_inferior_object): New
	declarations.
	* record-btrace.c: Include "inferior.h".
	(require_btrace_thread): Use inferior_thread.
	(record_btrace_frame_sniffer)
	(record_btrace_tailcall_frame_sniffer): Use inferior_thread.
	(get_thread_current_frame): Use scoped_restore_current_thread and
	switch_to_thread.
	(get_thread_current_frame): Use thread pointer directly.
	(record_btrace_replay_at_breakpoint): Use thread's inferior
	pointer directly.
	* record-full.c: Include "inferior.h".
	* regcache.c: Include "gdbthread.h".
	(get_thread_arch_regcache): Use the inferior's address space
	directly.
	(get_thread_regcache, registers_changed_thread): New.
	* regcache.h (get_thread_regcache(thread_info *thread)): New
	overload.
	(registers_changed_thread): New.
	(remote_target) <remote_detach_1>: Swap order of parameters.
	(remote_add_thread): <remote_add_thread>: Return the new thread.
	(get_remote_thread_info(ptid_t)): New overload.
	(remote_target::remote_notice_new_inferior): Use thread pointers
	directly.
	(remote_target::process_initial_stop_replies): Use
	thread_info::set_running.
	(remote_target::remote_detach_1, remote_target::detach)
	(extended_remote_target::detach): Adjust.
	* stack.c (frame_show_address): Use inferior_thread.
	* target-debug.h (target_debug_print_thread_info_pp): New.
	* target-delegates.c: Regenerate.
	* target.c (default_thread_address_space): Delete.
	(memory_xfer_partial_1): Use current_inferior.
	(target_detach): Use current_inferior.
	(target_thread_address_space): Delete.
	(generic_mourn_inferior): Use current_inferior.
	* target.h (struct target_ops) <thread_address_space>: Delete.
	(target_thread_address_space): Delete.
	* thread.c (init_thread_list): Use ALL_THREADS_SAFE.  Use thread
	pointers directly.
	(delete_thread_1, delete_thread, delete_thread_silent): Take a
	thread pointer instead of a ptid_t.  Adjust all callers.
	(ptid_to_global_thread_id, global_thread_id_to_ptid): Delete.
	(first_thread_of_process): Delete, replaced by ...
	(first_thread_of_inferior): ... this new function.  All callers
	adjusted.
	(any_thread_of_process): Rename to ...
	(any_thread_of_inferior): ... this, and take an inferior pointer.
	(any_live_thread_of_process): Rename to ...
	(any_live_thread_of_inferior): ... this, and take an inferior
	pointer.
	(thread_stack_temporaries_enabled_p, push_thread_stack_temporary)
	(value_in_thread_stack_temporaries)
	(get_last_thread_stack_temporary): Take a thread pointer instead
	of a ptid_t.  Adjust all callers.
	(thread_info::set_running): New.
	(validate_registers_access): Use inferior_thread.
	(can_access_registers_ptid): Rename to ...
	(can_access_registers_thread): ... this, and take a thread
	pointer.
	(print_thread_info_1): Adjust to compare thread pointers instead
	of ptids.
	(switch_to_no_thread, switch_to_thread): Make extern.
	(scoped_restore_current_thread::~scoped_restore_current_thread):
	Use m_thread pointer directly.
	(scoped_restore_current_thread::scoped_restore_current_thread):
	Use inferior_thread.
	(thread_command): Use thread pointer directly.
	(thread_num_make_value_helper): Use inferior_thread.
	* top.c (execute_command): Use inferior_thread.
	* tui/tui-interp.c: Include "inferior.h".
	* varobj.c (varobj_create): Use inferior_thread.
	(value_of_root_1): Use find_thread_global_id instead of
	global_thread_id_to_ptid.
2018-06-21 17:09:31 +01:00
Alan Hayward 33bab475a6 Avoid memcpys in regcache read_part/write_part for full registers.
Additionally, tidy up the functions: Remove asserts, use gdb_byte,
update comments.

gdb/
	* regcache.c (readable_regcache::read_part): Avoid memcpy when
	possible.
	(regcache::write_part): Likewise.
	(readable_regcache::cooked_read_part): Update comment.
	(readable_regcache::cooked_write_part): Likewise.
	* regcache.h: (readable_regcache::read_part): Likewise.
	(regcache::write_part): Likewise.
2018-06-21 16:27:15 +01:00
Richard Bunt 8363f9d5f2 Enable hardware watchpoints on attach for aarch64
This commit fixes a bug whereby hardware watchpoints are not used on
aarch64 when attaching to a target. The fix adds an aarch64 specialization
of post_attach which records the number of available hardware debug registers
using aarch64_linux_get_debug_reg_capacity. This implementation mirrors that
of aarch64_linux_child_post_startup_inferior which successfully enables the
use of hardware watchpoints when launching the target under the debugger.

gdb/ChangeLog:

	* aarch64-linux-nat.c (post_attach): New.
	(aarch64_linux_nat_target::post_attach): Override post_attach to
	record the number of hardware debug registers.

gdb/testsuite/ChangeLog:

	* gdb.base/watchpoint-hw-attach.c: New test.
	* gdb.base/watchpoint-hw-attach.exp: New file.
2018-06-21 14:09:34 +01:00
Tom Tromey 0d0b0ea29a Fix a memory leak in py-param.c
Mark Wielaard pointed out this memory leak to me:

    ==17633== 775 bytes in 1 blocks are definitely lost in loss record 13,346 of 13,967
    ==17633==    at 0x4C2DB6B: malloc (vg_replace_malloc.c:299)
    ==17633==    by 0x6652B7: xmalloc (common-utils.c:45)
    ==17633==    by 0xC4C889: xstrdup (xstrdup.c:34)
    ==17633==    by 0x5A71FD: unicode_to_encoded_string(_object*, char const*) (py-utils.c:81)
    ==17633==    by 0x5A73EB: python_string_to_host_string(_object*) (py-utils.c:158)
    ==17633==    by 0x59CC6C: get_doc_string(_object*, _object*) (py-param.c:334)
    ==17633==    by 0x59D2AA: parmpy_init(_object*, _object*, _object*) (py-param.c:728)

The bug here is that parmpy_init is written as though
add_setshow_generic takes ownership of its doc-string arguments.
However, it does not.  This patch fixes the bug in a straightforward
way and also applies some missing constification to make the problem
more apparent.

Tested on x86-64 Fedora 26.

gdb/ChangeLog
2018-06-20  Tom Tromey  <tom@tromey.com>

	* python/py-param.c (add_setshow_generic): Make parameters const.
	(parmpy_init): Update.
2018-06-20 21:10:10 -06:00
Simon Marchi 302abd6e9f Rename regcache_cooked_read_ftype and make a function_view
regcache_cooked_read_ftype can be converted to a function_view, which
allows us to use lambda functions and therefore avoid having to pass an
opaque pointer parameter.

Adjusting the fallouts showed that the "const regcache &" passed to the
readonly_detached_regcache constructor is cast to non-const in
do_cooked_read.  I changed the constructor parameter to be non-const.

Finally, I renamed the typedef from regcache_cooked_read_ftype to
register_read_ftype, since there is nothing that forces us to use it
only for regcaches nor cooked registers.

gdb/ChangeLog:

	* regcache.h (regcache_cooked_read_ftype): Rename to...
	(register_read_ftype): ...this, change type to function_view.
	(class reg_buffer) <save>: Remove src parameter.
	(readonly_detached_regcache) <readonly_detached_regcache>: Make
	parameter non-const in first overload.  Remove src parameter in
	second overload.
	* regcache.c (do_cooked_read): Remove.
	(readonly_detached_regcache::readonly_detached_regcache): Make
	parameter non-const, adjust call to other constructor.
	(reg_buffer::save): Remove src parameter.
	* frame.c (do_frame_register_read): Remove.
	(frame_save_as_regcache): Use lambda function.
	* ppc-linux-tdep.c (ppu2spu_unwind_register): Change type of src
	parameter to ppu2spu_data *.
	(ppu2spu_sniffer): Use lambda function.
2018-06-20 12:49:03 -04:00
Simon Marchi f00674fe07 testsuite: Fix cc-with-tweaks.sh being executed in the wrong shell
The cc-with-tweaks.sh script needs to be executed with bash.  When
trying to run this:

  make check RUNTESTFLAGS="--target_board=dwarf4-gdb-index" TESTS="gdb.base/return.exp"

I get:

  gdb compile failed, /home/emaisin/src/binutils-gdb/gdb/contrib/cc-with-tweaks.sh: 174: /home/emaisin/src/binutils-gdb/gdb/contrib/cc-with-tweaks.sh: Bad substitution

The reason is that the board files execute cc-with-tweaks.sh using
/bin/sh, which points to dash on my machine.  Remove the /bin/sh part
and let the shebang choose the right interpreter.

gdb/testsuite/ChangeLog:

	* boards/cc-with-tweaks.exp: Don't call cc-with-tweaks.sh
	through /bin/sh.
	* boards/dwarf4-gdb-index.exp: Likewise.
	* boards/fission-dwp.exp: Likewise.
2018-06-20 12:46:28 -04:00
Simon Marchi 19f3f25f37 Remove struct keyword in range-based for-loop
Fix this with gcc 6.3.0, and make the loop variable const while at it:

/home/simark/src/binutils-gdb/gdb/record-full.c: In member function 'virtual int record_full_target::insert_breakpoint(gdbarch*, bp_target_info*)':
/home/simark/src/binutils-gdb/gdb/record-full.c:1789:8: error: types may not be defined in a for-range-declaration [-Werror]
   for (struct record_full_breakpoint &bp : record_full_breakpoints)

gdb/ChangeLog:

	* record-full.c (record_full_target::insert_breakpoint): Remove
	"struct" keyword, add const.
2018-06-20 12:40:54 -04:00
Ulrich Weigand 1d554008b3 Improve gdb.base/float128.exp failure message
If the "print large128" sub-test fails in a manner that typically
indicates internal overflow due to GDB being built without MPFR
support, explicitly state this in the failure message.

gdb/testsuite/ChangeLog:
2018-06-20  Ulrich Weigand  <uweigand@de.ibm.com>

	* gdb.base/float128.exp: Add comment and improved fail message
	to the failure case of "print large128" test.
2018-06-20 16:24:16 +02:00
Simon Marchi d0ac1c4488 Bump to autoconf 2.69 and automake 1.15.1
When trying to run the update-gnulib.sh script in gdb, I get this:

Error: Wrong automake version (Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/\${ <-- HERE ([^      =:+{}]+)}/ at /opt/automake/1.11.1/bin/automake line 4113.), we need 1.11.1.
Aborting.

Apparently, it's an issue with a regex in automake that triggers a
warning starting with Perl 5.22.  It has been fixed in automake 1.15.1.
So I think it's a good excuse to bump the versions of autoconf and
automake used in the gnulib import.  And to avoid requiring multiple
builds of autoconf/automake, it was suggested that we bump the required
version of those tools for all binutils-gdb.

For autoconf, the 2.69 version is universally available, so it's an easy
choice.  For automake, different distros and distro versions have
different automake versions.  But 1.15.1 seems to be the most readily
available as a package.  In any case, it's easy to build it from source.

I removed the version checks from AUTOMAKE_OPTIONS and AC_PREREQ,
because I don't think they are useful in our case.  They only specify a
lower bound for the acceptable version of automake/autoconf.  That's
useful if you let the user choose the version of the tool they want to
use, but want to set a minimum version (because you use a feature that
was introduced in that version).  In our case, we force people to use a
specific version anyway.  For the autoconf version, we have the check in
config/override.m4 that enforces the version we want.  It will be one
less thing to update next time we change autotools version.

I hit a few categories of problems that required some changes.  They are
described below along with the chosen solutions.

Problem 1:

  configure.ac:17: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated.  For more info, see:
  configure.ac:17: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation

Solution 1:

  Adjust the code based on the example at that URL.

Problem 2 (in zlib/):

  Makefile.am: error: required file './INSTALL' not found
  Makefile.am:   'automake --add-missing' can install 'INSTALL'
  Makefile.am: error: required file './NEWS' not found
  Makefile.am: error: required file './AUTHORS' not found
  Makefile.am: error: required file './COPYING' not found
  Makefile.am:   'automake --add-missing' can install 'COPYING'

Solution 2:

  Add the foreign option to AUTOMAKE_OPTIONS.

Problem 3:

  doc/Makefile.am:20: error: support for Cygnus-style trees has been removed

Solution 3:

  Remove the cygnus options.

Problem 4:

  Makefile.am:656: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')

Solution 4:

  Rename "INCLUDES = " to "AM_CPPFLAGS += " (because AM_CPPFLAGS is
  already defined earlier).

Problem 5:

  doc/Makefile.am:71: warning: suffix '.texinfo' for Texinfo files is discouraged; use '.texi' instead
  doc/Makefile.am: warning: Oops!
  doc/Makefile.am:     It appears this file (or files included by it) are triggering
  doc/Makefile.am:     an undocumented, soon-to-be-removed automake hack.
  doc/Makefile.am:     Future automake versions will no longer place in the builddir
  doc/Makefile.am:     (rather than in the srcdir) the generated '.info' files that
  doc/Makefile.am:     appear to be cleaned, by e.g. being listed in CLEANFILES or
  doc/Makefile.am:     DISTCLEANFILES.
  doc/Makefile.am:     If you want your '.info' files to be placed in the builddir
  doc/Makefile.am:     rather than in the srcdir, you have to use the shiny new
  doc/Makefile.am:     'info-in-builddir' automake option.

Solution 5:

  Rename .texinfo files to .texi.

Problem 6:

  doc/Makefile.am: warning: Oops!
  doc/Makefile.am:     It appears this file (or files included by it) are triggering
  doc/Makefile.am:     an undocumented, soon-to-be-removed automake hack.
  doc/Makefile.am:     Future automake versions will no longer place in the builddir
  doc/Makefile.am:     (rather than in the srcdir) the generated '.info' files that
  doc/Makefile.am:     appear to be cleaned, by e.g. being listed in CLEANFILES or
  doc/Makefile.am:     DISTCLEANFILES.
  doc/Makefile.am:     If you want your '.info' files to be placed in the builddir
  doc/Makefile.am:     rather than in the srcdir, you have to use the shiny new
  doc/Makefile.am:     'info-in-builddir' automake option.

Solution 6:

  Remove the hack at the bottom of doc/Makefile.am and use
  the info-in-builddir automake option.

Problem 7:

  doc/Makefile.am:35: error: required file '../texinfo.tex' not found
  doc/Makefile.am:35:   'automake --add-missing' can install 'texinfo.tex'

Solution 7:

  Use the no-texinfo.tex automake option.  We also have one in
  texinfo/texinfo.tex, not sure if we should point to that, or move it
  (or a newer version of it added with automake --add-missing) to
  top-level.

Problem 8:

  Makefile.am:131: warning: source file 'config/tc-aarch64.c' is in a subdirectory,
  Makefile.am:131: but option 'subdir-objects' is disabled
  automake: warning: possible forward-incompatibility.
  automake: At least a source file is in a subdirectory, but the 'subdir-objects'
  automake: automake option hasn't been enabled.  For now, the corresponding output
  automake: object file(s) will be placed in the top-level directory.  However,
  automake: this behaviour will change in future Automake versions: they will
  automake: unconditionally cause object files to be placed in the same subdirectory
  automake: of the corresponding sources.
  automake: You are advised to start using 'subdir-objects' option throughout your
  automake: project, to avoid future incompatibilities.

Solution 8:

  Use subdir-objects, that means adjusting references to some .o that will now
  be in config/.

Problem 9:

  configure.ac:375: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
  ../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
  ../../lib/autoconf/general.m4:2601: _AC_COMPILE_IFELSE is expanded from...
  ../../lib/autoconf/general.m4:2617: AC_COMPILE_IFELSE is expanded from...
  ../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
  ../../lib/autoconf/general.m4:2042: AC_CACHE_VAL is expanded from...
  ../../lib/autoconf/general.m4:2063: AC_CACHE_CHECK is expanded from...
  configure.ac:375: the top level

Solution 9:

  Use AC_LANG_SOURCE, or use proper quoting.

Problem 10 (in intl/):

  configure.ac:7: warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
  /usr/share/aclocal/threadlib.m4:36: gl_THREADLIB_EARLY_BODY is expanded from...
  /usr/share/aclocal/threadlib.m4:29: gl_THREADLIB_EARLY is expanded from...
  /usr/share/aclocal/threadlib.m4:318: gl_THREADLIB is expanded from...
  /usr/share/aclocal/lock.m4:9: gl_LOCK is expanded from...
  /usr/share/aclocal/intl.m4:211: gt_INTL_SUBDIR_CORE is expanded from...
  /usr/share/aclocal/intl.m4:25: AM_INTL_SUBDIR is expanded from...
  /usr/share/aclocal/gettext.m4:57: AM_GNU_GETTEXT is expanded from...
  configure.ac:7: the top level

Solution 10:

  Add AC_USE_SYSTEM_EXTENSIONS in configure.ac.

ChangeLog:

	* libtool.m4: Use AC_LANG_SOURCE.
	* configure.ac: Remove AC_PREREQ, use AC_LANG_SOURCE.
	* README-maintainer-mode: Update version requirements.
	* ar-lib: New file.
	* test-driver: New file.
	* configure: Re-generate.

bfd/ChangeLog:

	* Makefile.am (AUTOMAKE_OPTIONS): Remove 1.11.
	(INCLUDES): Rename to ...
	(AM_CPPFLAGS): ... this.
	* configure.ac: Remove AC_PREREQ.
	* doc/Makefile.am (AUTOMAKE_OPTIONS): Remove 1.9, cygnus, add
	info-in-builddir no-texinfo.tex.
	(info_TEXINFOS): Rename bfd.texinfo to bfd.texi.
	* doc/bfd.texinfo: Rename to ...
	* doc/bfd.texi: ... this.
	* Makefile.in: Re-generate.
	* aclocal.m4: Re-generate.
	* config.in: Re-generate.
	* configure: Re-generate.
	* doc/Makefile.in: Re-generate.

binutils/ChangeLog:

	* configure.ac: Remove AC_PREREQ.
	* doc/Makefile.am (AUTOMAKE_OPTIONS): Remove cygnus, add
	info-in-builddir no-texinfo.tex.
	* Makefile.in: Re-generate.
	* aclocal.m4: Re-generate.
	* config.in: Re-generate.
	* configure: Re-generate.
	* doc/Makefile.in: Re-generate.

config/ChangeLog:

	* override.m4 (_GCC_AUTOCONF_VERSION): Bump from 2.64 to 2.69.

etc/ChangeLog:

	* configure.in: Remove AC_PREREQ.
	* configure: Re-generate.

gas/ChangeLog:

	* Makefile.am (AUTOMAKE_OPTIONS): Remove 1.11, add subdir-objects.
	(TARG_CPU_O, OBJ_FORMAT_O, ATOF_TARG_O): Add config/ prefix.
	* configure.ac (TARG_CPU_O, OBJ_FORMAT_O, ATOF_TARG_O, emfiles,
	extra_objects): Add config/ prefix.
	* doc/as.texinfo: Rename to...
	* doc/as.texi: ... this.
	* doc/Makefile.am: Rename as.texinfo to as.texi throughout.
	Remove DISTCLEANFILES hack.
	(AUTOMAKE_OPTIONS): Remove 1.8, cygnus, add no-texinfo.tex and
	info-in-builddir.
	* Makefile.in: Re-generate.
	* aclocal.m4: Re-generate.
	* config.in: Re-generate.
	* configure: Re-generate.
	* doc/Makefile.in: Re-generate.

gdb/ChangeLog:

	* common/common-defs.h (PACKAGE_NAME, PACKAGE_VERSION,
	PACKAGE_STRING, PACKAGE_TARNAME): Undefine.
	* configure.ac: Remove AC_PREREQ, add missing quoting.
	* gnulib/configure.ac: Modernize usage of
	AC_INIT/AM_INIT_AUTOMAKE.  Remove AC_PREREQ.
	* gnulib/update-gnulib.sh (AUTOCONF_VERSION): Bump to 2.69.
	(AUTOMAKE_VERSION): Bump to 1.15.1.
	* configure: Re-generate.
	* config.in: Re-generate.
	* aclocal.m4: Re-generate.
	* gnulib/aclocal.m4: Re-generate.
	* gnulib/config.in: Re-generate.
	* gnulib/configure: Re-generate.
	* gnulib/import/Makefile.in: Re-generate.

gdb/gdbserver/ChangeLog:

	* configure.ac: Remove AC_PREREQ, add missing quoting.
	* configure: Re-generate.
	* config.in: Re-generate.
	* aclocal.m4: Re-generate.

gdb/testsuite/ChangeLog:

	* configure.ac: Remove AC_PREREQ.
	* configure: Re-generate.

gold/ChangeLog:

	* configure.ac: Remove AC_PREREQ, add missing quoting and usage
	of AC_LANG_SOURCE.
	* Makefile.in: Re-generate.
	* aclocal.m4: Re-generate.
	* configure: Re-generate.
	* testsuite/Makefile.in: Re-generate.

gprof/ChangeLog:

	* configure.ac: Remove AC_PREREQ.
	* Makefile.am: Remove DISTCLEANFILES hack.
	(AUTOMAKE_OPTIONS): Remove 1.11, add info-in-builddir.
	* Makefile.in: Re-generate.
	* aclocal.m4: Re-generate.
	* configure: Re-generate.
	* gconfig.in: Re-generate.

intl/ChangeLog:

	* configure.ac: Add AC_USE_SYSTEM_EXTENSIONS, remove AC_PREREQ.
	* configure: Re-generate.
	* config.h.in: Re-generate.
	* aclocal.m4: Re-generate.

ld/ChangeLog:

	* configure.ac: Remove AC_PREREQ.
	* Makefile.am: Remove DISTCLEANFILES hack, rename ld.texinfo to
	ld.texi, ldint.texinfo to ldint.texi throughout.
	(AUTOMAKE_OPTIONS): Add info-in-builddir.
	* README: Rename ld.texinfo to ld.texi, ldint.texinfo to
	ldint.texi throughout.
	* gen-doc.texi: Likewise.
	* h8-doc.texi: Likewise.
	* ld.texinfo: Rename to ...
	* ld.texi: ... this.
	* ldint.texinfo: Rename to ...
	* ldint.texi: ... this.
	* Makefile.in: Re-generate.
	* aclocal.m4: Re-generate.
	* config.in: Re-generate.
	* configure: Re-generate.

libdecnumber/ChangeLog:

	* configure.ac: Remove AC_PREREQ.
	* configure: Re-generate.
	* aclocal.m4.

libiberty/ChangeLog:

	* configure.ac: Remove AC_PREREQ.
	* configure: Re-generate.
	* config.in: Re-generate.

opcodes/ChangeLog:

	* Makefile.am (AUTOMAKE_OPTIONS): Remove 1.11.
	* configure.ac: Remove AC_PREREQ.
	* Makefile.in: Re-generate.
	* aclocal.m4: Re-generate.
	* configure: Re-generate.

readline/ChangeLog.gdb:

	* configure: Re-generate.
	* examples/rlfe/configure: Re-generate.

sim/ChangeLog:

	* All configure.ac: Remove AC_PREREQ.
	* All configure: Re-generate.

zlib/ChangeLog.bin-gdb:

	* configure.ac: Modernize AC_INIT call, remove AC_PREREQ.
	* Makefile.am (AUTOMAKE_OPTIONS): Remove 1.8, cygnus, add
	foreign.
	* Makefile.in: Re-generate.
	* aclocal.m4: Re-generate.
	* configure: Re-generate.
2018-06-19 16:55:06 -04:00
Pedro Alves 6ae5026709 Silence -Wmaybe-uninitialized warning in minsyms.c:lookup_minimal_symbol_by_pc_section
Compiling with GCC 8.1 shows this warning:

  gdb/minsyms.c: In function 'bound_minimal_symbol lookup_minimal_symbol_by_pc_section(CORE_ADDR, obj_section*, lookup_msym_prefer)':
  gdb/minsyms.c:825:40: warning: 'want_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
	   && MSYMBOL_TYPE (&msymbol[hi]) != want_type

That warning is a false positive, because the switch that converts
enum lookup_msym_prefer values to enum enum minimal_symbol_type values
has a case for every lookup_msym_prefer enumerator:

  switch (prefer)
   {
    case lookup_msym_prefer::TEXT:
      want_type = mst_text;
      break;
    case lookup_msym_prefer::TRAMPOLINE:
      want_type = mst_solib_trampoline;
      break;
    case lookup_msym_prefer::GNU_IFUNC:
      want_type = mst_text_gnu_ifunc;
      break;
    }

The problem is that GCC assumes that enum variables may hold values
other than the named enumerators (like e.g., "lookup_msym_prefer
prefer = (lookup_msym_prefer) 10;").

Rework the code a bit, adding a gdb_assert to make it explicit to the
compiler that want_type is initialized in all normal-return paths.

gdb/ChangeLog:
2018-06-19  Pedro Alves  <palves@redhat.com>

	* minsyms.c (msym_prefer_to_msym_type): New, factored out from ...
	(lookup_minimal_symbol_by_pc_section): ... here with
	gdb_assert_not_reached added.
2018-06-19 18:16:40 +01:00
Pedro Alves 61b04dd04a Change inline frame breakpoint skipping logic (fix gdb.gdb/selftest.exp)
Currently, gdb.gdb/selftest.exp fails if you build GDB with
optimization (-O2, etc.).

The reason is that after setting a breakpoint in captured_main, we
stop at:
 ...
 Breakpoint 1, captured_main_1 (context=<optimized out>) at src/gdb/main.c:492
 ...
while selftest_setup expects a stop at captured_main.

Here, captured_main_1 has been inlined into captured_main, and
captured_main has been inlined into gdb_main:

 ...
 $ nm ./build/gdb/gdb | egrep ' [tT] .*captured_main|gdb_main' | c++filt
 000000000061b950 T gdb_main(captured_main_args*)
 ...

Indeed, the two inlined functions show up in the backtrace:

 ...
 (gdb) bt
 #0  captured_main_1 (context=<optimized out>) at main.c:492
 #1  captured_main (data=<optimized out>) at main.c:1147
 #2  gdb_main (args=args@entry=0x7fffffffdb80) at main.c:1173
 #3  0x000000000040fea5 in main (argc=<optimized out>, argv=<optimized out>)
     at gdb.c:32
 ...

We're now stopping at captured_main_1 because commit ddfe970e6b
("Don't elide all inlined frames") makes GDB present a stop at the
innermost inlined frame if the program stopped by a user breakpoint.

Now, the selftest.exp testcase explicitly asks to stop at
"captured_main", not "captured_main_1", so I'm thinking that it's
GDB'S behavior that should be improved.  That is what this commit
does, by only showing a stop at an inline frame if the user breakpoint
was set in that frame's block.

Before this commit:

 (top-gdb) b captured_main
 Breakpoint 1 at 0x792f99: file src/gdb/main.c, line 492.
 (top-gdb) r
 Starting program: build/gdb/gdb

 Breakpoint 1, captured_main_1 (context=<optimized out>) at src/gdb/main.c:492
 492       lim_at_start = (char *) sbrk (0);
 (top-gdb)

After this commit, we now instead get:

 (top-gdb) b captured_main
 Breakpoint 1 at 0x791339: file src/gdb/main.c, line 492.
 (top-gdb) r
 Starting program: build/gdb/gdb

 Breakpoint 1, captured_main (data=<optimized out>) at src/gdb/main.c:1147
 1147      captured_main_1 (context);
 (top-gdb)

and:

 (top-gdb) b captured_main_1
 Breakpoint 2 at 0x791339: file src/gdb/main.c, line 492.
 (top-gdb) r
 Starting program: build/gdb/gdb
 Breakpoint 2, captured_main_1 (context=<optimized out>) at src/gdb/main.c:492
 492       lim_at_start = (char *) sbrk (0);
 (top-gdb)

Note that both captured_main and captured_main_1 resolved to the same
address, 0x791339.  That is necessary to trigger the issue in
question.  The gdb.base/inline-break.exp testcase currently does not
exercise that, but the new test added by this commit does.  That new
test fails without the GDB fix and passes with the fix.  No
regressions on x86-64 GNU/Linux.

While at it, the THIS_PC comparison in stopped_by_user_bp_inline_frame
is basically a nop, so just remove it -- if a software or hardware
breakpoint explains the stop, then it must be that it was installed at
the current PC.

gdb/ChangeLog:
2018-06-19  Pedro Alves  <palves@redhat.com>

	* inline-frame.c (stopped_by_user_bp_inline_frame): Replace PC
	parameter with a block parameter.  Compare location's block symbol
	with the frame's block instead of addresses.
	(skip_inline_frames): Pass the current block instead of the
	frame's address.  Break out as soon as we determine the frame
	should not be skipped.

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

	* gdb.opt/inline-break.c (func_inline_callee, func_inline_caller)
	(func_extern_caller): New.
	(main): Call func_extern_caller.
	* gdb.opt/inline-break.exp: Add tests for inline frame skipping
	logic change.
2018-06-19 16:30:13 +01:00
Simon Marchi f63b508a87 Fix ChangeLog merge conflict
I noticed that gdb/testsuite/ChangeLog had some conflict markers... this
patch fixes it.
2018-06-18 20:44:50 -04:00
Weimin Pan bf2977b5f3 Fix failure to find member of a typedef base class
The test case below demonstrates the problem, as described in this PR's Comment 5:

typedef struct {
        int x;
} A;

struct C : A {
        int y;
};

int main()
{
        C c;
        return 55;
}

$ gdb a.out
(gdb) ptype C::x
Internal error: non-aggregate type to value_struct_elt_for_reference

In value_struct_elt_for_reference(), need to call check_typedef() on
the aggregate type to handle the case of *curtype being ptr->typedef.

Tested on x86_64-linux. No regressions.
2018-06-18 21:31:55 +00:00
Simon Marchi c4eb05ff9a Remove current_traceframe declaration
The variable has been removed in c12a508 ("Add client_state struct."),
remove the leftover declaration.

gdb/gdbserver/ChangeLog:

	* tracepoint.h (current_traceframe): Remove declaration.
2018-06-18 16:21:30 -04:00
Tom Tromey f709fabb61 Use unique_xmalloc_ptr in solib-aix.c
This removes a cleanup from solib-aix.c via unique_xmalloc_ptr.

gdb/ChangeLog
2018-06-18  Tom Tromey  <tom@tromey.com>

	* solib-aix.c (solib_aix_get_section_offsets): Return
	unique_xmalloc_ptr.
	(solib_aix_solib_create_inferior_hook): Update.
2018-06-18 13:26:33 -06:00
Tom Tromey 668eb2f045 Use unique_xmalloc_ptr in darwin_current_sos
This changes darwin_current_sos to use unique_xmalloc_ptr rather than
a cleanup.

gdb/ChangeLog
2018-06-18  Tom Tromey  <tom@tromey.com>

	* solib-darwin.c (darwin_current_sos): Use unique_xmalloc_ptr.
2018-06-18 13:26:32 -06:00
Tom Tromey 309822ca28 Use unique_xmalloc_ptr in two solib functions
This removes a couple of cleanups by using unique_xmalloc_ptr instead.
These two changes are combined because the two functions are very
similar.

gdb/ChangeLog
2018-06-18  Tom Tromey  <tom@tromey.com>

	* solib-frv.c (frv_relocate_main_executable): Use
	unique_xmalloc_ptr.
	* solib-dsbt.c (dsbt_relocate_main_executable): Use
	unique_xmalloc_ptr.
2018-06-18 13:26:32 -06:00
Tom Tromey 06424eac62 Remove resume_section_map_updates_cleanup
This removes resume_section_map_updates_cleanup, replacing it with a
scoped_restore.

Tested by the buildbot.

gdb/ChangeLog
2018-06-18  Tom Tromey  <tom@tromey.com>

	* objfiles.h (inhibit_section_map_updates): Update.
	(resume_section_map_updates, resume_section_map_updates_cleanup):
	Remove.
	* solib-svr4.c (svr4_handle_solib_event): Update.
	* objfiles.c (inhibit_section_map_updates): Return
	scoped_restore_tmpl<int>.
	(resume_section_map_updates, resume_section_map_updates_cleanup):
	Remove.
2018-06-18 13:16:45 -06:00
Tom Tromey b4be9fadea Use unique_xmalloc_ptr for read_string
This changes read_string's "buffer" out-parameter to be a
unique_xmalloc_ptr, then updates the users.  This allows for the
removal of some cleanups.

I chose unique_xmalloc_ptr rather than byte_vector here due to the way
Guile unwinding seems to work.

Tested by the buildbot.

gdb/ChangeLog
2018-06-18  Tom Tromey  <tom@tromey.com>

	* valprint.h (read_string): Update.
	* valprint.c (read_string): Change type of "buffer".
	(val_print_string): Update.
	* python/py-value.c (valpy_string): Update.
	* language.h (struct language_defn) <la_get_string>: Change
	type of "buffer".
	(default_get_string, c_get_string): Update.
	* language.c (default_get_string): Change type of "buffer".
	* guile/scm-value.c (gdbscm_value_to_string): Update.
	* c-lang.c (c_get_string): Change type of "buffer".
2018-06-18 12:51:02 -06:00
Tom Tromey 3f0dbd670b Remove cleanups from ser-mingw.c
This removes the only cleanup from ser-mingw.c, replacing it with a
specialization of std::unique_ptr.

Tested by the buildbot.

gdb/ChangeLog
2018-06-18  Tom Tromey  <tom@tromey.com>

	* ser-mingw.c (struct pipe_state_destroyer): New.
	(pipe_state_up): New typedef.
	(cleanup_pipe_state): Remove.
	(pipe_windows_open): Use pipe_state_up.  Don't release argv.
2018-06-18 12:46:38 -06:00
Tom Tromey 69d340c684 Remove la_error
While working on the parser code, I noticed that yyerror is exported
from each parser.  It is used by this code in parse.c:

   TRY
     {
       if (lang->la_parser (&ps))
         lang->la_error (NULL);
     }

However, it seems to me that la_error will never be called here,
because in every case, la_parser throws an exception on error -- each
implementation of yyerror just calls error.

So, this patch removes la_error and makes all the yyerror functions
static.  This is handy primarily because it makes it simpler to make
the expression parsers pure.

Tested by the buildbot.

gdb/ChangeLog
2018-06-18  Tom Tromey  <tom@tromey.com>

	* rust-lang.h (rust_yyerror): Don't declare.
	* rust-lang.c (rust_language_defn): Update.
	* rust-exp.y (yyerror): Now static.
	* parse.c (parse_exp_in_context_1): Update.
	* p-lang.h (p_yyerror): Don't declare.
	* p-lang.c (p_language_defn): Update.
	* p-exp.y (yyerror): Now static.
	* opencl-lang.c (opencl_language_defn): Update.
	* objc-lang.c (objc_language_defn): Update.
	* m2-lang.h (m2_yyerror): Don't declare.
	* m2-lang.c (m2_language_defn): Update.
	* m2-exp.y (yyerror): Now static.
	* language.h (struct language_defn) <la_error>: Remove.
	* language.c (unk_lang_error): Remove.
	(unknown_language_defn, auto_language_defn): Remove.
	* go-lang.h (go_yyerror): Don't declare.
	* go-lang.c (go_language_defn): Update.
	* go-exp.y (yyerror): Now static.
	* f-lang.h (f_yyerror): Don't declare.
	* f-lang.c (f_language_defn): Update.
	* f-exp.y (yyerror): Now static.
	* d-lang.h (d_yyerror): Don't declare.
	* d-lang.c (d_language_defn): Update.
	* d-exp.y (yyerror): Now static.
	* c-lang.h (c_yyerror): Don't declare.
	* c-lang.c (c_language_defn, cplus_language_defn)
	(asm_language_defn, minimal_language_defn): Update.
	* c-exp.y (yyerror): Now static.
	* ada-lang.h (ada_yyerror): Don't declare.
	* ada-lang.c (ada_language_defn): Update.
	* ada-exp.y (yyerror): Now static.
2018-06-18 12:29:15 -06:00
Alan Hayward 02895270ec Ptrace support for AArch64 SVE gdbserver
Add checks to detect SVE tdesc. Easiest way to do this is by checking the
size of the vector registers.

Use the common aarch64 ptrace copy functions for reading/writing registers.
A wrapper is required due to the common functions using reg_buffer_common.

gdbserver/
	* linux-aarch64-low.c (is_sve_tdesc): New function.
	(aarch64_sve_regs_copy_to_regcache): Likewise.
	(aarch64_sve_regs_copy_from_regcache):  Likewise.
	(aarch64_regs_info): Add SVE checks.
	(initialize_low_arch): Initialize SVE.
2018-06-18 10:10:00 +01:00
Alan Hayward e9902bfc28 Ptrace support for Aarch64 SVE
Add support for reading and writing registers for Aarch64 SVE.

We need to support the cases where the kernel only gives us a
fpsimd structure. This occurs when there is no active SVE state
in the kernel (for example, after starting a new process).

Added checks to make sure the vector length has not changed whilst
the process is running.

gdb/
	* aarch64-linux-nat.c (fetch_sveregs_from_thread): New function.
	(store_sveregs_to_thread): Likewise.
	(aarch64_linux_fetch_inferior_registers): Check for SVE.
	(aarch64_linux_store_inferior_registers): Likewise.
	* nat/aarch64-sve-linux-ptrace.c (aarch64_sve_get_sveregs): New
	function.
	(aarch64_sve_regs_copy_to_regcache): Likewise.
	(aarch64_sve_regs_copy_from_regcache): Likewise.
	* nat/aarch64-sve-linux-ptrace.h (aarch64_sve_get_sveregs): New
	declaration.
	(aarch64_sve_regs_copy_to_regcache): Likewise.
	(aarch64_sve_regs_copy_from_regcache): Likewise.
	(sve_context): Structure from Linux headers.
	(SVE_SIG_ZREGS_SIZE): Define from Linux headers.
	(SVE_SIG_ZREG_SIZE): Likewise.
	(SVE_SIG_PREG_SIZE): Likewise.
	(SVE_SIG_FFR_SIZE): Likewise.
	(SVE_SIG_REGS_OFFSET): Likewise.
	(SVE_SIG_ZREGS_OFFSET): Likewise.
	(SVE_SIG_ZREG_OFFSET): Likewise.
	(SVE_SIG_ZREGS_SIZE): Likewise.
	(SVE_SIG_PREGS_OFFSET): Likewise.
	(SVE_SIG_PREG_OFFSET): Likewise.
	(SVE_SIG_PREGS_SIZE): Likewise.
	(SVE_SIG_FFR_OFFSET): Likewise.
	(SVE_SIG_REGS_SIZE): Likewise.
	(SVE_SIG_CONTEXT_SIZE): Likewise.
	(SVE_PT_REGS_MASK): Likewise.
	(SVE_PT_REGS_FPSIMD): Likewise.
	(SVE_PT_REGS_SVE): Likewise.
	(SVE_PT_VL_INHERIT): Likewise.
	(SVE_PT_VL_ONEXEC): Likewise.
	(SVE_PT_REGS_OFFSET): Likewise.
	(SVE_PT_FPSIMD_OFFSET): Likewise.
	(SVE_PT_FPSIMD_SIZE): Likewise.
	(SVE_PT_SVE_ZREG_SIZE): Likewise.
	(SVE_PT_SVE_PREG_SIZE): Likewise.
	(SVE_PT_SVE_FFR_SIZE): Likewise.
	(SVE_PT_SVE_FPSR_SIZE): Likewise.
	(SVE_PT_SVE_FPCR_SIZE): Likewise.
	(__SVE_SIG_TO_PT): Likewise.
	(SVE_PT_SVE_OFFSET): Likewise.
	(SVE_PT_SVE_ZREGS_OFFSET): Likewise.
	(SVE_PT_SVE_ZREG_OFFSET): Likewise.
	(SVE_PT_SVE_ZREGS_SIZE): Likewise.
	(SVE_PT_SVE_PREGS_OFFSET): Likewise.
	(SVE_PT_SVE_PREG_OFFSET): Likewise.
	(SVE_PT_SVE_PREGS_SIZE): Likewise.
	(SVE_PT_SVE_FFR_OFFSET): Likewise.
	(SVE_PT_SVE_FPSR_OFFSET): Likewise.
	(SVE_PT_SVE_FPCR_OFFSET): Likewise.
	(SVE_PT_SVE_SIZE): Likewise.
	(SVE_PT_SIZE): Likewise.
	(HAS_SVE_STATE): New define.

gdbserver/
	* Makefile.in: Add aarch64-sve-linux-ptrace.c.
2018-06-18 10:06:53 +01:00
Alan Hayward 17a1cc89b5 Add Aarch64 SVE compatibility macros
This header provides compatibility support for SVE allow building
even when the underlying host system lacks support for SVE.
If the binary is then run on an SVE-enabled kernel then support
will automatically be available.

gdb/
	* nat/aarch64-sve-linux-sigcontext.h: New file.
	* nat/aarch64-sve-linux-ptrace.h (SVE_VQ_BYTES): Move to
	new files.
	(SVE_VQ_MIN): Likewise.
	(SVE_VQ_MAX): Likewise.
	(SVE_VL_MIN): Likewise.
	(SVE_VL_MAX): Likewise.
	(SVE_NUM_ZREGS): Likewise.
	(SVE_NUM_PREGS): Likewise.
	(sve_vl_valid): Likewise.
	(struct user_sve_header): Likewise.
2018-06-18 10:02:56 +01:00
Tom de Vries 0fe3a55830 [gdb/testsuite/ada] Fix number-of-bp test in bp_inlined_func.exp
At the moment, bp_inlined_func.exp passes for a combined current gcc and
gdb-binutils repos build but fails for a build with system gcc (7.3.1) and
ld (2.29.1).

It checks for 4 breakpoints on read_small:
...
gdb_test "break read_small" \
         "Breakpoint $decimal at $hex: read_small\\. \\(4 locations\\)" \
         "set breakpoint at read_small"
...
and fails because it gets 5 breakpoint locations instead:
...
(gdb) break read_small
Breakpoint 2 at 0x401f9a: read_small. (5 locations)
(gdb) FAIL: gdb.ada/bp_inlined_func.exp: set breakpoint at read_small
...

The 4 expected breakpoint locations are inlined versions of read_small, and
the 5th breakpoint location has this address:
...
(gdb) info breakpoint
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   <MULTIPLE>
1.1                         y     0x0000000000401f9a in b.read_small
                                                   at bp_inlined_func/b.adb:20
...
which is the read_small function itself:
...
(gdb) x 0x0000000000401f9a
0x401f9a <b__read_small+4>:     0x22f8058b
...

This patch updates the test to allow 5 breakpoint locations.

Tested on the configurations mentioned above, on x86_64.

2018-06-18  Tom de Vries  <tdevries@suse.de>

	* gdb.ada/bp_inlined_func.exp: Allow 5 breakpoint locations.
2018-06-18 09:04:38 +02:00
Andrew Burgess 7010835a6c gdb: Don't drop SIGSTOP during stop_all_threads
This patch fixes an issue where GDB would sometimes hang when
attaching to a multi-threaded process.  This issue was especially
likely to trigger if the machine (running the inferior) was under
load.

In summary, the problem is an imbalance between two functions in
linux-nat.c, stop_callback and stop_wait_callback.  In stop_callback
we send SIGSTOP to a thread, but _only_ if the thread is not already
stopped, and if it is not signalled, which means it should stop soon.
In stop_wait_callback we wait for the SIGSTOP to arrive, however, we
are aware that the thread might have been signalled for some other
reason, and so if a signal other than SIGSTOP causes the thread to
stop then we stash that signal away so it can be reported back later.
If we get a SIGSTOP then this is discarded, after all, this signal was
sent from stop_callback.  Except that this might not be the case, it
could be that SIGSTOP was sent to a thread from elsewhere in GDB, in
which case we would not have sent another SIGSTOP from stop_callback
and the SIGSTOP received in stop_wait_callback should not be ignored.

Below I've laid out the exact sequence of events that I saw that lead
me to track down the above diagnosis.

After attaching to the inferior GDB sends a SIGSTOP to all of the
threads and then returns to the event loop waiting for interesting
things to happen.

Eventually the first target event is detected (this will be the first
SIGSTOP arriving) and GDB calls inferior_event_handler which calls
fetch_inferior_event.  Inside fetch_inferior_event GDB calls
do_target_wait which calls target_wait to find a thread with an event.

The target_wait call ends up in linux_nat_wait_1, which first checks
to see if any threads already have stashed stop events to report, and
if there are none then we enter a loop fetching as many events as
possible out of the kernel.  This event fetching is non-blocking, and
we give up once the kernel has no more events ready to give us.

All of the events from the kernel are passed through
linux_nat_filter_event which stashes the wait status for all of the
threads that reported a SIGSTOP, these will be returned by future
calls to linux_nat_wait_1.

Lets assume for a moment that we've attached to a multi-threaded
inferior, and that all but one thread has reported its stop during the
initial wait call in linux_nat_wait_1.  The other thread will be
reporting a SIGSTOP, but the kernel has not yet managed to deliver
that signal to GDB before GDB gave up waiting and continued handling
the events it already had.  GDB selects one of the threads that has
reported a SIGSTOP and passes this thread ID back to
fetch_inferior_event.

To handle the thread's SIGSTOP, GDB calls handle_signal_stop, which
calls stop_all_threads, this calls wait_one, which in turn calls
target_wait.

The first call to target_wait at this point will result in a stashed
wait status being returned, at which point we call setup_inferior.
The call to setup_inferior leads to a call into try_thread_db_load_1
which results in a call to linux_stop_and_wait_all_lwps.  This in turn
calls stop_callback on each thread followed by stop_wait_callback on
each thread.

We're now ready to make the mistake.  In stop_callback we see that our
problem thread is not stopped, but is signalled, so it should stop
soon.  As a result we don't send another SIGSTOP.

We then enter stop_wait_callback, eventually the problem thread stops
with SIGSTOP which we _incorrectly_ assume came from stop_callback,
and we discard.

Once stop_wait_callback has done its damage we return from
linux_stop_and_wait_all_lwps, finish in try_thread_db_load_1, and
eventually unwind back to the call to setup_inferior in
stop_all_threads.  GDB now loops around, and performs another
target_wait to get the next event from the inferior.

The target_wait calls causes us to once again reach linux_nat_wait_1,
and we pass through some code that calls resume_stopped_resumed_lwps.
This allows GDB to resume threads that are physically stopped, but
which GDB doesn't see any good reason for the thread to remain
stopped.  In our case, the problem thread which had its SIGSTOP
discarded is stopped, but doesn't have a stashed wait status to
report, and so GDB sets the thread going again.

We are now stuck waiting for an event on the problem thread that might
never arrive.

When considering how to write a test for this bug I struggled.  The
issue was only spotted _randomly_ when a machine was heavily loaded
with many multi-threaded applications, and GDB was being attached (by
script) to all of these applications in parallel.  In one reproducer I
required around 5 applications each of 5 threads per machine core in
order to reproduce the bug 2 out of 3 times.

What we really want to do though is simulate the kernel being slow to
report events through waitpid during the initial attach.  The solution
I came up with was to write an LD_PRELOAD library that intercepts
(some) waitpid calls and rate limits them to one per-second.  Any more
than that simply return 0 indicating there's no event available.
Obviously this can only be applied to waitpid calls that have the
WNOHANG flag set.

Unfortunately, once you ignore a waitpid call GDB can get a bit stuck.
Usually, once the kernel has made a child status available to waitpid
GDB will be sent a SIGCHLD signal.  However, if the kernel makes 5
child statuses available but, due to the preload library we only
collect one of them, then the kernel will not send any further SIGCHLD
signals, and so, when GDB, thinking that the remaining statuses have
not yet arrived sits waiting for a SIGCHLD it will be disappointed.

The solution, implemented within the preload library, is that, when we
hold back a waitpid result from GDB we spawn a new thread.  This
thread delays for a short period, and then sends GDB a SIGCHLD.  This
causes GDB to retry the waitpid, at which point sufficient time has
passed and our library allows the waitpid call to complete.

gdb/ChangeLog:

	* linux-nat.c (stop_wait_callback): Don't discard SIGSTOP if it
	was requested by GDB.

gdb/testsuite/ChangeLog:

	* gdb.threads/attach-slow-waitpid.c: New file.
	* gdb.threads/attach-slow-waitpid.exp: New file.
	* gdb.threads/slow-waitpid.c: New file.
2018-06-16 01:03:57 +01:00
Tom de Vries 479b3ef4a3 [gdb] Add me to write-after-approval section in MAINTAINERS
I've committed one patch modifying gdb ([gdb/cli] Honour 'print pretty' when
printing result of finish command) and I'm covered by the Novell blanket
copyright assignment.  So AFAIU, I qualify for write-after-approval.

This patch adds me to the MAINTAINERS file in the write-after-approval section.

2018-06-15  Tom de Vries  <tdevries@suse.de>

	* MAINTAINERS (Write After Approval): Add Tom de Vries.
2018-06-15 20:43:25 +02:00
Simon Marchi 8199b8f4d4 update-gnulib.sh: Report required versions of autoconf/aclocal
Update the messages printed when the wrong version of autoconf/aclocal
is found to include the expected version too, like we already do for
automake.

gdb/ChangeLog:

	* gnulib/update-gnulib.sh: Print expected versions of
	autoconf/aclocal.
2018-06-14 18:38:32 -04:00
Simon Marchi 55c748a1c0 type alignment: Use type_length_units
The type alignment value is returned in 8-bit-bytes instead of target
memory addressable units.  For example, on a target with 16-bit-bytes
where sizeof(int) == 1 (one addressable unit), alignof(int) currently
returns 2.  After, this patch, it returns 1.

gdb/ChangeLog:

	* arch-utils.c (default_type_align): Use type_length_units.
	* gdbtypes.c (type_align): Use type_length_units.
2018-06-14 18:24:55 -04:00
Sergio Durigan Junior b9a3c020ea Fix "beneath" conversion on AIX
GDB build on AIX is broken according to BuildBot:

  ../../binutils-gdb/gdb/aix-thread.c: In member function 'virtual void aix_thread_target::mourn_inferior()':
  ../../binutils-gdb/gdb/aix-thread.c:1735:34: error: 'beneath' cannot be used as a function
     target_ops *beneath = beneath ();
				    ^
This obvious commit fixes it.  There's apparently another issue
breaking the build there, but that's unrelated.

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

	* aix-thread.c (aix_thread_target::xfer_partial): Use
	"beneath" as a method.
2018-06-14 17:46:15 -04:00
Tom de Vries 74fdb8ff70 [gdb] Fixup incomplete patch 0dbfed25e9 2018-06-14 22:31:41 +02:00
Philippe Waroquiers 87a8eca781 Fix/improve on-line help of 'define' command.
There is an inconsistency between the doc and the online help.
=> the doc is correct, so fixing/improving the on-line help.

2018-06-14  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* cli/cli-script.c (_initialize_cli_script): Fix online documentation
	of 'define' command.
2018-06-14 22:28:39 +02:00
Tom de Vries 0dbfed25e9 [gdb] Add 'Concept Index' entry '&' for background execution
GDB's execution commands have a foreground and background variant: f.i.,
there's 'continue' and 'continue&', and both are listed individually in the
'Command, Variable, and Function Index'.  But the '&' is not listed in the
'Concept Index' as being connected with the concept background execution.

This patch adds an '&' in the 'Concept Index':
...
 * $_, $__, and value history:            Memory.             (line  119)
+* &, background execution of commands:   Background Execution.
+                                                             (line   16)
 * --annotate:                            Mode Options.       (line  121)
...
pointing to this line in 'Background Execution':
...
   To specify background execution, add a '&' to the command.
...

Build on x86_64.

2018-06-14  Tom de Vries  <tdevries@suse.de>

	* gdb.texinfo (Background Execution): Add @cindex for '&'.
2018-06-14 22:19:51 +02:00
Pedro Alves 14897d65b5 Avoid gdb.base/fork-running-state.exp lingering processes
Currently, the gdb.base/fork-running-state.exp testcase leaves a few
processes lingering until a 3 minutes alarm kills them:

 pedro    28308     1  0 13:55 ?        00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state
 pedro    28340     1  0 13:55 ?        00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state
 pedro    28372     1  0 13:55 ?        00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state
 pedro    28400     1  0 13:55 ?        00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state
 pedro    28431     1  0 13:55 ?        00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state
 pedro    28463     1  0 13:55 ?        00:00:00 /home/pedro/gdb/binutils-gdb/build/gdb/testsuite/outputs/gdb.base/fork-running-state/fork-running-state

Those processes used to kill themselves, but that was changed by
commit f50d8a2eae ("Fix gdb.base/fork-running-state.exp race").

This commit restores the self-killing, but only in the cases gdb won't
try killing the processes, thus avoiding the old race.

(The restored code in fork_parent isn't exactly the same as it was.
In this version, we're exiting immediately when 'wait' returns
success, while in the old version we'd loop again and end up in the
perror call.  The output from that perror call is not expected by the
"kill inferior" tests, and would result in a test FAIL.)

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

	* gdb.base/fork-running-state.c: Include <errno.h>.
	(exit_if_relative_exits): New.
	(fork_child): If 'exit_if_relative_exits' is true, exit if the parent
	exits.
	(fork_parent): If 'exit_if_relative_exits' is true, exit if the
	child exits.
2018-06-14 17:47:03 +01:00
Tom de Vries 5d9a060879 [gdb/cli] Honour 'print pretty' when printing result of finish command
Consider this testcase:
...
struct s {
  int a;
  int b;
};

struct s foo ()
{
  struct s r;
  r.a = 1;
  r.b = 2;
  return r;
}

int
main (void)
{
  struct s v;
  v = foo ();
  return v.a + v.b;
}
...

When we compile it with -g, load the exec with gdb, and run till the end of foo,
we can print r:
...
(gdb) p r
$1 = {a = 1, b = 2}
...

and by setting pretty printing to on, we can get the fields of r printed each
on its own line:
...
(gdb) set print pretty
(gdb) p r
$2 = {
  a = 1,
  b = 2
}
...

However, when we finish foo, the printed function result value is not using
the pretty printing setting:
...
(gdb) finish
Run till exit from #0  foo () at test.c:11
0x00000000004004c1 in main () at test.c:18
18        v = foo ();
Value returned is $3 = {a = 1, b = 2}
...

This patch fixes that by using get_user_print_options instead of
get_no_prettyformat_print_options in print_return_value_1, which gives us:
...
(gdb) finish
Run till exit from #0  foo () at test.c:11
0x00000000004004c1 in main () at test.c:18
18        v = foo ();
Value returned is $2 = {
  a = 1,
  b = 2
}
...

Build & reg-tested on x86_64.

2018-06-14  Tom de Vries  <tdevries@suse.de>

	PR cli/22573
	* infcmd.c (print_return_value_1): Use get_user_print_options instead of
	get_no_prettyformat_print_options.

	* gdb.base/finish-pretty.c: New test.
	* gdb.base/finish-pretty.exp: New file.
2018-06-14 15:30:47 +02:00
Pedro Alves 7b045207d1 Revert accidental push of "Inline breakpoints" commit 2018-06-14 12:54:09 +01:00
Pedro Alves 11ae5818f7 gdb.gdb/selftest.exp, Use multi_line to build gdb's expected startup output
This regex had to be touched at least twice these past few days.  Use
multi_line to make it more readable.

Note this also tightens the regex a little bit in some spots.

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

	* gdb.gdb/selftest.exp (test_with_self): Use multi_line to build
	gdb's expected startup output.
2018-06-14 12:25:41 +01:00
Pedro Alves a898ca0e0c Inline breakpoints
gdb/ChangeLog:
yyyy-mm-dd  Pedro Alves  <palves@redhat.com>

	* inline-frame.c (stopped_by_user_bp_inline_frame): Replace PC
	parameter with a block parameter.  Compare location's block symbol
	with the frame's block instead of addresses.
	(skip_inline_frames): Pass the current block instead of the
	frame's address.  Break out as soon as we determine the frame
	should not be skipped.

gdb/testsuite/ChangeLog:
yyyy-mm-dd  Pedro Alves  <palves@redhat.com>

	* gdb.opt/inline-break.c (func_callee, func_caller): New.
	(main): Call func_caller.
2018-06-14 12:24:39 +01:00
Pedro Alves 1d39de443a Remove stale inline function handling from selftest_setup
Before commit 70ee000084 ("[gdb] Allow function arguments in bp
print match in selftest_setup"), this pattern in selftest_setup:

	-re "Starting program.*Breakpoint \[0-9\]+,.* at .*main.c:.*$function.*$gdb_prompt $" {
	    # $function may be inlined, so the program stops at the line
	    # calling $function.
	    pass "$description"
	}

happened to match if captured_main_1 was inlined and captured_main was
not, because captured_main calls captured_main_1 first thing, which
coincidentally matches "$function.*":

 Breakpoint 1, captured_main (data=<optimized out>) at src/gdb/main.c:1147
 1147      captured_main_1 (context);

That would probably be better "$function .*", with a space, but I
think that even better is to remove the "may be inlined" case too now,
because since ddfe970e6b ("Don't elide all inlined frames") GDB
presents the stop at the inline function instead of at the caller.

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

	* lib/selftest-support.exp (selftest_setup): Remove inlined
	function handling.
2018-06-14 11:40:23 +01:00
Tom de Vries 70ee000084 [gdb] Allow function arguments in bp print match in selftest_setup
2018-06-14  Tom de Vries  <tdevries@suse.de>

	* lib/selftest-support.exp (selftest_setup): Allow function arguments in
	matching of breakpoint printing.
2018-06-14 12:06:10 +02:00
Tom de Vries 11f4b608e6 [gdb/testsuite] Add missing ChangeLog entries 2018-06-14 11:08:32 +02:00
Simon Marchi ab89b5a57c Fix GDB sparc build
Cross-compiling for sparc64 bumped into a few issues, fixed by this
patch.

1. Include target.h in sparc-nat.h fixes:

/home/emaisin/src/binutils-gdb/gdb/sparc-nat.h:45:8: error: ‘target_xfer_status’ does not name a type
 extern target_xfer_status sparc_xfer_wcookie (enum target_object object,

2. Remove extra semi-colon at sparc64-linux-nat.c:40 fixes:

/home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c:41:3: error: expected unqualified-id before ‘{’ token
   { sparc_store_inferior_registers (this, regcache, regnum); }

3. Remove "this" argument fixes:

/home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c: In member function ‘virtual void sparc64_linux_nat_target::fetch_registers(regcache*, int)’:
/home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c:38:59: error: cannot convert ‘sparc64_linux_nat_target*’ to ‘regcache*’ for argument ‘1’ to ‘void sparc_fetch_inferior_registers(regcache*, int)’
   { sparc_fetch_inferior_registers (this, regcache, regnum); }
                                                           ^
/home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c: In member function ‘virtual void sparc64_linux_nat_target::store_registers(regcache*, int)’:
/home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c:41:59: error: cannot convert ‘sparc64_linux_nat_target*’ to ‘regcache*’ for argument ‘1’ to ‘void sparc_store_inferior_registers(regcache*, int)’
   { sparc_store_inferior_registers (this, regcache, regnum); }
                                                           ^
4. Use sparc64_forget_process instead of sparc_forget_process fixes:

/home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c: In member function ‘virtual void sparc64_linux_nat_target::low_forget_process(pid_t)’:
/home/emaisin/src/binutils-gdb/gdb/sparc64-linux-nat.c:47:30: error: ‘sparc_forget_process’ was not declared in this scope
   { sparc_forget_process (pid); }
                              ^

gdb/ChangeLog:

	* sparc-nat.h: Include target.h.
	* sparc64-linux-nat.c (class sparc64_linux_nat_target)
	<fetch_registers>: Remove this argument in function call.
	<store_registers>: Remove this argument in function call, remove
	extra semicolon.
	<low_forget_process>: Call sparc64_forget_process instead of
	sparc_forget_process.
2018-06-13 21:57:55 -04:00
Tom de Vries a08ac84b96 [gdb/testsuite] Fix hang in fork-running-state.c
When I run make check:
...
$ cd build/gdb
$ make check 2>&1 | tee ../CHECKLOG.gdb
...
I see after ~30m the summary of the test run printed, but make still hangs.

This seems to be due to some sleeping processes:
...
$ ps  fx | grep fork-run
 6475 ?        S      0:00 gdb.base/fork-running-state/fork-running-state
 6451 ?        S      0:00 gdb.base/fork-running-state/fork-running-state
 6427 ?        S      0:00 gdb.base/fork-running-state/fork-running-state
...

Killing the sleeping processes like this:
...
kill -9 $(ps -A  | grep fork-running-st | awk '{print $1}')
...
allows make to finish.

If I isolate one debug session from fork-running-state.exp that causes one of
these sleeping processes, we get:
...
(gdb) set non-stop on
(gdb) break main
Breakpoint 1 at 0x400665: file src/gdb/testsuite/gdb.base/fork-running-state.c,
line 52.
(gdb) run
Starting program: build/gdb/testsuite/outputs/gdb.base/fork-running-state/
fork-running-state

Breakpoint 1, main () at src/gdb/testsuite/gdb.base/fork-running-state.c:52
52        save_parent = getpid ();
(gdb) set detach-on-fork on
(gdb) set follow-fork parent
(gdb) continue &
Continuing.
[Detaching after fork from child process 18797]
(gdb) info threads
  Id   Target Id         Frame
* 1    process 18793 "fork-running-st" (running)
(gdb) set print inferior-events off
(gdb) kill inferior 1
...
So, AFAIU, the hanging process is the child process that gdb detaches from.

There's an alarm set in main before the fork, but alarms are not preserved in
the fork child:
...
$ man alarm
   ...
NOTES
       Alarms created by alarm() are preserved across execve(2) and are not
       inherited by children created via fork(2).
...
So, AFAIU, once the parent is killed, there's no alarm to terminate the child.

The patch fixes this by moving the setting of the alarm into the
fork_main/fork_child functions, making sure that an alarm will trigger for
the child.

Tested with make check on x86_64.

2018-06-13  Tom de Vries  <tdevries@suse.de>

	PR testsuite/23269
	* gdb.base/fork-running-state.c (main): Move setting of alarm ...
	(fork_child): ... here, and ...
	(fork_parent): ... here.
2018-06-13 14:15:52 +02:00
Tom de Vries c75d3d4144 [gdb/testsuite] Update gdb startup text in selftest.exp
Atm selftest.exp fails for me.

One of the reasons is that in c61b06a19a (Remove
some text from --version output) an eol was added after "There is NO
WARRANTY, to the extent permitted by law".

This patch updates the matching of the gdb startup message in selftest.exp
accordingly.

Tested selftest.exp (with two other selftest.exp related fixes applied).

2018-06-12  Tom de Vries  <tdevries@suse.de>

	* gdb.gdb/selftest.exp (test_with_self): Update gdb startup text.
2018-06-13 14:10:02 +02:00
Rainer Orth 62c808aef6 Fix procfs.c compilation
procfs.c currently doesn't compile on Solaris:

/vol/src/gnu/gdb/gdb/local/gdb/procfs.c: In function `void _initialize_procfs()':
/vol/src/gnu/gdb/gdb/local/gdb/procfs.c:3734:15: error: invalid initialization of reference of type `const target_info&' from expression of type `procfs_target*'
   add_target (&the_procfs_target);
               ^~~~~~~~~~~~~~~~~~
In file included from /vol/src/gnu/gdb/gdb/local/gdb/inferior.h:40,
                 from /vol/src/gnu/gdb/gdb/local/gdb/procfs.c:24:
/vol/src/gnu/gdb/gdb/local/gdb/target.h:2305:13: note: in passing argument 1 of `void add_target(const target_info&, void (*)(const char*, int), void (*)(cmd_list_element*, completion_tracker&, const char*, const char*))'
 extern void add_target (const target_info &info,
             ^~~~~~~~~~
/vol/src/gnu/gdb/gdb/local/gdb/procfs.c: In member function `virtual char* procfs_target::make_corefile_notes(bfd*, int*)':
/vol/src/gnu/gdb/gdb/local/gdb/procfs.c:3898:16: error: too many arguments to function `gdb::optional<std::vector<unsigned char, gdb::default_init_allocator<unsigned char, std::allocator<unsigned char> > > > target_read_alloc(target_ops*, target_object, const char*)'
     NULL, &auxv);
                ^
In file included from /vol/src/gnu/gdb/gdb/local/gdb/inferior.h:40,
                 from /vol/src/gnu/gdb/gdb/local/gdb/procfs.c:24:
/vol/src/gnu/gdb/gdb/local/gdb/target.h:341:40: note: declared here
 extern gdb::optional<gdb::byte_vector> target_read_alloc
                                        ^~~~~~~~~~~~~~~~~
/vol/src/gnu/gdb/gdb/local/gdb/procfs.c:3898:16: error: cannot convert `gdb::optional<std::vector<unsigned char, gdb::default_init_allocator<unsigned char, std::allocator<unsigned char> > > >' to `int' in assignment
     NULL, &auxv);
                ^

Fixed as follows.  Built and ran make check on 64-bit Solaris 11.5/x86
(amd64-pc-solaris2.11) only.

	* procfs.c (_initialize_procfs): Use add_inf_child_target.
	(procfs_target::make_corefile_notes): Adjust to new
	target_read_alloc return type.
2018-06-13 11:05:51 +02:00
Andrew Burgess 1840d81a20 gdb: Run INF_EXEC_COMPLETE handler for additional cases
When making an inferior call, and non-stop mode is off, then, once the
inferior call is complete all threads will be stopped, and we should
run the INF_EXEC_COMPLETE handler.  This will result in a call to
'target_async(0)' to remove the event handlers for the target.

This was discussed by Yao Qi in this mailing list thread:

    https://sourceware.org/ml/gdb/2017-10/msg00032.html

Without this then the target event handlers are left in place even
when the target is stopped, which is different to what happens during
a standard stop proceedure (for example when one thread hits a
breakpoint).

gdb/ChangeLog:

	PR gdb/22882
	* infrun.c (fetch_inferior_event): If GDB is not proceeding then
	run INF_EXEC_COMPLETE handler, even when not calling normal_stop.
	Move should_notify_stop local into more inner scope.
2018-06-12 21:15:33 +01:00
Andrew Burgess 9516f85aea gdb: Mark async event handler when event is already pending
In PR22882 inferior functions are called on different threads while
scheduler-locking is turned on.  This results in a hang.  This was
discussed in this mailing list thread:

    https://sourceware.org/ml/gdb/2017-10/msg00032.html

The problem is that when the thread is set running in order to execute
the inferior call, a call to target_async is made.  If the target is
not already registered as 'target_async' then this will install the
async event handler, AND unconditionally mark the handler as having an
event pending.

However, if the target is already registered as target_async then the
event handler is not installed (its already installed) and the
handler is NOT marked as having an event pending.

If we try to set running a thread that already has a pending event,
then we do want to set target_async, however, there will not be an
external event incoming (the thread is already stopped) so we rely on
manually marking the event handler as having a pending event in order
to see the threads pending stop event.  This is fine, if, at the point
where we call target_async, the target is not already marked as async.
But, if it is, then the event handler will not be marked as ready, and
the threads pending stop event will never be processed.

A similar pattern of code can be seen in linux_nat_target::resume,
where, when a thread has a pending event, the call to target_async is
followed by a call to async_file_mark to ensure that the pending
thread event will be processed, even if target_async was already set.

gdb/ChangeLog:

	PR gdb/22882
	* infrun.c (resume_1): Add call to mark_async_event_handler.

gdb/testsuite/ChangeLog:

	* gdb.threads/multiple-successive-infcall.exp: Remove kfail case,
	rewrite test to describe action performed, rather than possible
	failure.
2018-06-12 21:15:33 +01:00
Andrew Burgess defd21729f gdb: Fix an infrun debug log message
Run the test gdb.threads/multiple-successive-infcall.exp by hand, if
you turn on 'debug infrun 1', you'll see that the debug line fixed in
this commit is printed and contains the wrong $pc value.  Fixed in
this commit.

gdb/ChangeLog:

	* infrun.c (do_target_wait): Change old version of $pc printed.
2018-06-12 21:15:32 +01:00
Simon Marchi 7b23e0874d Rename some functions, index -> gdb_index
Since we now have two index formats, DWARF5/debug_names and gdb_index, I
wanted to rename some functions to make it clear that they deal with the
gdb_index format specifically.

gdb/ChangeLog:

	* dwarf2read.c (read_index_from_section): Rename to...
	(read_gdb_index_from_section): ... this, update all callers.
	(dwarf2_read_index): Rename to...
	(dwarf2_read_gdb_index): ... this, update all callers.
2018-06-11 21:51:26 -04:00
John David Anglin 69c67a0b2a Fix gdb build on hppa-linux
Fixes:

  CXX    hppa-linux-nat.o
../../src/gdb/hppa-linux-nat.c:277:17: error: no 'void hppa_linux_nat_target::fetch_inferior_registers(regcache*, int)' member function declared in class 'hppa_linux_nat_target'
        int regno)
                 ^
../../src/gdb/hppa-linux-nat.c:224:1: error: 'void fetch_register(regcache*, int)' defined but not used [-Werror=unused-function]
 fetch_register (struct regcache *regcache, int regno)
 ^~~~~~~~~~~~~~

gdb/ChangeLog:

	* gdb/hppa-linux-nat.c
	(hppa_linux_nat_target::fetch_inferior_registers): Rename to
	hppa_linux_nat_target::fetch_registers.
2018-06-11 21:15:33 -04:00
Eli Zaretskii 41fc26a2cb Fix build of GDB documentation.
gdb/doc/ChangeLog
2018-06-11  Eli Zaretskii  <eliz@gnu.org>

	* gdb.texinfo (Maintenance Commands): Add a missing @anchor.
2018-06-11 20:30:11 +03:00
Alan Hayward fefa175e8f Enable Aarch64 SVE for gdbserver
gdbserver/
	* linux-aarch64-ipa.c (get_ipa_tdesc): Add null VQ param.
	(initialize_low_tracepoint): Likewise
	* linux-aarch64-low.c (aarch64_arch_setup): Get VQ.
	* linux-aarch64-tdesc-selftest.c (aarch64_tdesc_test): Add null VQ
	param.
	* linux-aarch64-tdesc.c (aarch64_linux_read_description): Add VQ
	checks.
	* linux-aarch64-tdesc.h (aarch64_linux_read_description): Add VQ.
2018-06-11 13:25:15 +01:00
Alan Hayward b91ad3ff94 Increase gdbsever PBUFSIZ
PBUFSIZ is no longer big enough for SVE. Increase accordingly.

gdbserver/
            * server.h (PBUFSIZ): Increase size
2018-06-11 10:29:45 +01:00
Alan Hayward 65d4cadafd Add Aarch64 SVE dwarf regnums
This is as per the spec:
https://developer.arm.com/products/architecture/a-profile/docs/100985/0000

gdb/
	* aarch64-tdep.c (aarch64_dwarf_reg_to_regnum): Add mappings.
	* aarch64-tdep.h (AARCH64_DWARF_SVE_VG): Add define.
	(AARCH64_DWARF_SVE_FFR): Likewise.
	(AARCH64_DWARF_SVE_P0): Likewise.
	(AARCH64_DWARF_SVE_Z0): Likewise.
2018-06-11 10:24:20 +01:00
Alan Hayward f868386e72 Add regcache raw_compare method
gdb/
	* common/common-regcache.h (raw_compare): New function.
	* regcache.c (regcache::raw_compare): Likewise.
	* regcache.h (regcache::raw_compare): New declaration.

gdbserver/
	* regcache.c (regcache::raw_compare): New function.
	* regcache.h (regcache::raw_compare): New declaration.
2018-06-11 10:09:30 +01:00
Alan Hayward 9c86188316 Add reg_buffer_common
A purely virtual class containing functions from gdb/regcache.h

Both the gdb regcache structures and gdbserver regcache inherit
directly from reg_buffer_common. This will allow for common
functions which require the use of a regcache.

gdb/
	* common/common-regcache.h (reg_buffer_common): New structure.
	* regcache.c (reg_buffer::invalidate): Move from detached_regcache.
	(reg_buffer::raw_supply): Likewise.
	(reg_buffer::raw_supply_integer): Likewise.
	(reg_buffer::raw_supply_zeroed): Likewise.
	(reg_buffer::raw_collect): Likewise.
	(reg_buffer::raw_collect_integer): Likewise.
	* regcache.h (reg_buffer::invalidate): Move from detached_regcache.
	(reg_buffer::raw_supply): Likewise.
	(reg_buffer::raw_supply_integer): Likewise.
	(reg_buffer::raw_supply_zeroed): Likewise.
	(reg_buffer::raw_collect): Likewise.
	(reg_buffer::raw_collect_integer): Likewise.

gdbserver/
	* regcache.c (new_register_cache): Use new.
	(free_register_cache): Use delete.
	(register_data): Use const.
	(supply_register): Move body inside regcache.
	(regcache::raw_supply): New override function.
	(collect_register): Move body inside regcache.
	(regcache::raw_collect): New override function.
	(regcache::get_register_status): New override function.
	* regcache.h (struct regcache): Inherit from reg_buffer_common.
2018-06-11 10:09:16 +01:00
Tom Tromey 953edf2b6c Remove use of queue from remote.c
This removes a use of the queue data structure (common/queue.h) from
remote.c.

The queue is replaced with a std::vector.  A queue was not needed, as
the code never de-queued items.

This removes quite a bit of boilerplate code, mostly involved with
marshalling arguments to be passed through the queue iterator.

Tested by the buildbot.

gdb/ChangeLog
2018-06-10  Tom Tromey  <tom@tromey.com>

	* remote.c (stop_reply_p): Remove typedef.  Don't declare queue.
	(class remote_state) <stop_reply_queue>: Now std::vector.
	(remote_state::~remote_state)
	(remote_target::stop_reply_queue_length): Update.
	(struct queue_iter_param, remove_child_of_pending_fork)
	(struct check_pending_event_prevents_wildcard_vcont_callback_data)
	(check_pending_event_prevents_wildcard_vcont_callback)
	(remove_stop_reply_for_inferior)
	(remove_stop_reply_of_remote_state)
	(remote_notif_remove_once_on_match)
	(stop_reply_match_ptid_and_ws)
	(remote_kill_child_of_pending_fork): Remove.
	(remote_target::remove_new_fork_children)
	(remote_target::check_pending_events_prevent_wildcard_vcont)
	(remote_target::discard_pending_stop_replies)
	(remote_target::discard_pending_stop_replies_in_queue)
	(remote_target::remote_notif_remove_queued_reply)
	(remote_target::queued_stop_reply)
	(remote_target::push_stop_reply, remote_target::peek_stop_reply)
	(remote_target::wait, remote_target::kill_new_fork_children)
	(remote_target::async): Update.
2018-06-10 22:31:19 -06:00
Tom Tromey 1ddbba9df5 Remove cleanups from record-full.c
This removes cleanups from record-full.c.  In this case, the cleanups
were only ever run when an exception was thrown.  So, I replaced these
with try/catch, rather than introduce a new specialized RAII type.

Tested by the buildbot.

gdb/ChangeLog
2018-06-10  Tom Tromey  <tom@tromey.com>

	* record-full.c (record_full_arch_list_cleanups): Remove.
	(record_full_message): Use try/catch.
	(record_full_wait_cleanups): Remove.
	(record_full_wait_1): Use try/catch.
	(record_full_restore): Likewise.
2018-06-10 22:19:44 -06:00
Tom Tromey 219605fd6a Remove a VEC from record-full.c
This replaces a VEC in record-full.c with a std::vector.  This version
of the patch also catches a memory leak in the original code noticed
by Simon.

Tested by the buildbot.

gdb/ChangeLog
2018-06-10  Tom Tromey  <tom@tromey.com>

	* record-full.c (record_full_breakpoint_p): Remove typedef.  Don't
	declare VEC.  Add constructor.
	<in_target_beneath>: Now bool.
	(record_full_breakpoints): Now a std::vector, static.
	(record_full_sync_record_breakpoints)
	(record_full_init_record_breakpoints)
	(record_full_target::insert_breakpoint)
	(record_full_target::remove_breakpoint): Update.  Don't use XNEW.
2018-06-10 22:12:32 -06:00
Simon Marchi 71b7376497 Remove more "struct" keywords in range-based for loops
GCC 6.3.0 produces this kind of errors:

  CXX    dwarf2read.o
/home/simark/src/binutils-gdb/gdb/dwarf2read.c: In function 'void process_cu_includes(dwarf2_per_objfile*)':
/home/simark/src/binutils-gdb/gdb/dwarf2read.c:10220:8: error: types may not be defined in a for-range-declaration [-Werror]
   for (struct dwarf2_per_cu_data *iter : dwarf2_per_objfile->just_read_cus)
        ^~~~~~

Removing the struct keyword makes it happy.

gdb/ChangeLog:

	* dwarf2read.c (process_cu_includes): Remove struct keyword.
	* serial.c (serial_interface_lookup): Remove struct keyword.
2018-06-10 22:34:08 -04:00
Tom Tromey 4360561f5a Fix some missed "beneath" conversions
The buildbot pointed out that arm-linux-nat.c was not properly using
"beneath" as a method.  A search showed a few more places with this
issue.

Tested by the buildbot, though of course this only checked
arm-linux-nat.c.  Nevertheless I'm checking this in under the obvious
rule.

gdb/ChangeLog
2018-06-10  Tom Tromey  <tom@tromey.com>

	* procfs.c (procfs_target::xfer_partial): Use "beneath" as a
	method.
	* nto-procfs.c (nto_procfs_target::xfer_partial): Use "beneath" as
	a method.
	* go32-nat.c (go32_nat_target::xfer_partial): Use "beneath" as a
	method.
	* arm-linux-nat.c (arm_linux_nat_target::read_description): Use
	"beneath" as a method.
	* arm-fbsd-nat.c (arm_fbsd_nat_target::read_description):
	Use "beneath" as a method.
2018-06-10 09:58:34 -06:00
Tom Tromey d14b92bf8a Remove cleanups from tracefile.c
This removes cleanups from tracefile.c, by introducing a unique_ptr
specialization.

This code could be made even simpler via a deeper C++-ification, but I
have not attempted that.

Tested by the buildbot.

gdb/ChangeLog
2018-06-10  Tom Tromey  <tom@tromey.com>

	* tracefile.c (struct trace_file_writer_deleter): New.
	<operator()>: Rename from trace_file_writer_xfree.
	(trace_file_writer_up): New typedef.
	(tsave_command, trace_save_tfile, trace_save_ctf): Update.
2018-06-10 07:31:22 -06:00
Simon Marchi 835dcf9261 Use std::unique_ptr in reg_buffer
Using std::unique_ptr allows to remove the manual xfree in the
destructor.

If I understand correctly, using the () after the new operator will make
sure the allocated objects will be value initialized, which for scalars
means they are zero-initialized.  So it should have the same behavior as
XCNEWVEC.

gdb/ChangeLog:

	* regcache.h (reg_buffer) <~reg_buffer>: Use default destructor.
	<m_registers, m_register_status>: Change type to
	std::unique_ptr.
	* regcache.c (reg_buffer::reg_buffer): Use new instead of
	XCNEWVEC.
2018-06-09 22:30:42 -04:00
Simon Marchi aac0d564ce Change type of reg_buffer::m_register_status to register_status
The type of reg_buffer::m_register_status is an array of signed char,
probably to ensure that each element takes up only one byte.  Instead,
since we use C++11, we can force the underlying type of register_status
to be signed char and use the enum type.

gdb/ChangeLog:

	* common/common-regcache.h (enum register_status): Add
	underlying type "signed char".
	* regcache.h (reg_buffer) <m_register_status>: Change type to
	register_status *.
	* regcache.c (reg_buffer::reg_buffer): Alocate arrays of
	register_status instead of signed char.
	(reg_buffer::save): Use REG_UNKNOWN instead of 0.
	(reg_buffer::get_register_status): Remove cast.
	(readable_regcache::raw_read): Remove cast.
	(readable_regcache::cooked_read): Remove cast.
2018-06-09 22:08:06 -04:00
Tom Tromey 4059184490 Remove use of queue.h from gdbserver/event-loop.c
This removes a use of queue.h from gdbserver/event-loop.c, replacing
it with std::queue.

I was not completely sure whether std::queue is even that useful.
Perhaps plain std::list could be used just as easily.

Tested by the buildbot.

gdb/gdbserver/ChangeLog
2018-06-09  Tom Tromey  <tom@tromey.com>

	* event-loop.c (gdb_event, gdb_event_p): Remove typedefs.  Don't
	declare queue.
	(event_queue): Use std::queue.
	(gdb_event_xfree): Remove.
	(initialize_event_loop, process_event, wait_for_event): Update.
2018-06-09 16:12:15 -06:00
Tom Tromey 77ad739445 Remove two more uses of make_cleanup_close
This removes two more uses of make_cleanup_close, replacing them with
relatively straightforward uses of scoped_fd.

Tested by the buildbot.

gdb/ChangeLog
2018-06-09  Tom Tromey  <tom@tromey.com>

	* source.c (reverse_search_command, forward_search_command): Use
	scoped_fd.
2018-06-09 16:09:52 -06:00
Tom Tromey 191cca6383 Remove a VEC from serial.c
This replaces a VEC in serial.c with a std::vector.

Tested by the buildbot.

gdb/ChangeLog
2018-06-09  Tom Tromey  <tom@tromey.com>

	* serial.c (serial_ops_p): Remove typedef.  Don't declare VEC.
	(serial_ops_list): Now static, std::vector.
	(serial_interface_lookup, serial_add_interface): Update.
2018-06-09 16:07:57 -06:00
Tom Tromey c5d0225d25 Remove a VEC from dwarf2read.c
This removes a VEC from dwarf2read.c, replacing it with a std::vector.

Tested by the buildbot.

gdb/ChangeLog
2018-06-09  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (process_cu_includes): Update.
	(process_full_comp_unit): Update.
	* dwarf2read.h (struct dwarf2_per_objfile) <just_read_cus>: Now a
	std::vector.
2018-06-09 16:05:48 -06:00
Stan Cox 6341380d5c Add missing client_state struct references to win target.
gdbserver/ChangeLog
	* win32-low.c (win32_create_inferior):  last_ptid and last_status
	moved to client_state.
2018-06-08 16:40:52 -04:00
Pedro Alves 03349c9345 Make gdbreplay use more common routines
This makes gdbreplay share a bit more code with gdbserver, and paves
the way to share more in future.  Including common-defs.h pulls in
defines and headers that gdb and gdbserver assume are always
defined/available too, such as for example _(), ansidecl.h or a set of
system headers.  Including that revealed (static vs extern conflict)
gdbreplay had a local copy of perror_with_name (which exited directly
instead of throwing an error).  So I removed gdbreplay's local copy,
and then added enough .o files until gdbreplay linked successfully.

Also, use xstrdup instead of strdup.

gdb/gdbserver/ChangeLog:
2018-06-08  Pedro Alves  <palves@redhat.com>

	* Makefile.in (GDBREPLAY_OBS): Add common/cleanups.o,
	common/common-exceptions.o, common/common-utils.o,
	common/errors.o, common/print-utils.o and utils.o.
	* gdbreplay.c: Include "common-defs.h" instead of the two
	'config.h's here.  Don't include stdio.h, errno.h, stdlib.h,
	string.h or alloca.h.
	(perror_with_name): Delete.
	(remote_open): Use xstrdup instead of strdup.
	(main): Rename to ...
	(captured_main): ... this.
	(main): New.
2018-06-08 20:48:28 +01:00
Paul Koning aeab512851 Fix build issue with Python 3.7
Originally reported in
https://bugzilla.redhat.com/show_bug.cgi?id=1577396 -- gdb build fails
with Python 3.7 due to references to a Python internal function whose
declaration changed in 3.7.

gdb/ChangeLog
2018-06-08  Paul Koning  <paul_koning@dell.com>

	    PR gdb/23252

	    * python/python.c (do_start_initialization):
	    Avoid call to internal Python API.
	    (init__gdb_module): New function.
2018-06-08 13:32:03 -04:00
Gary Benson 5045b3d789 linux: Add maintenance commands to test libthread_db
This commit adds two new commands which may be used to test thread
debugging libraries used by GDB:

  * "maint check libthread-db" tests the thread debugging library GDB
     is using for the current inferior.

  * "maint set/show check-libthread-db" selects whether libthread_db
     tests should be run automatically as libthread_db is auto-loaded.
     The default is to not run tests automatically.

The test itself is a basic integrity check exercising all libthread_db
functions used by GDB on GNU/Linux systems.  By extension this also
exercises the proc_service functions provided by GDB that libthread_db
uses.

This functionality is useful for NPTL developers and libthread_db
developers.  It could also prove useful investigating bugs reported
against GDB where the thread debugging library or GDB's proc_service
layer is suspect.

gdb/ChangeLog:

	* linux-thread-db.c (valprint.h): New include.
	(struct check_thread_db_info): New structure.
	(check_thread_db_on_load, tdb_testinfo): New static globals.
	(check_thread_db, check_thread_db_callback): New functions.
	(try_thread_db_load_1): Run integrity checks if requested.
	(maintenance_check_libthread_db): New function.
	(_initialize_thread_db): Register "maint check libthread-db"
	and "maint set/show check-libthread-db".
	* NEWS: Mention the above new commands.

gdb/doc/ChangeLog:

	* gdb.texinfo (Maintenance Commands): Document "maint check
	libthread-db" and "maint set/show check-libthread-db".

gdb/testsuite/ChangeLog:

	* gdb.threads/check-libthread-db.exp: New file.
	* gdb.threads/check-libthread-db.c: Likewise.
2018-06-08 18:06:46 +01:00
Tom Tromey 2f4f025ff1 Fix gdb mingw build
I noticed that the mingw build was failing in the buildbot.  This
patch fixes the problem.  I'm checking it in as obvious.

gdb/ChangeLog
2018-06-08  Tom Tromey  <tom@tromey.com>

	* windows-nat.c (windows_nat_target::xfer_partial): "beneath" is
	now a method.
2018-06-08 10:07:37 -06:00
Tom Tromey 343b0027ae Remove last cleanup from btrace code
This removes the last cleanup from btrace.c, replacing it with a use
of unique_xmalloc_ptr.

gdb/ChangeLog
2018-06-08  Tom Tromey  <tom@tromey.com>

	* btrace.c (parse_xml_raw): Use gdb::unique_xmalloc_ptr.
2018-06-08 07:05:49 -06:00
Tom Tromey 8dcc53b37f Remove cleanups from btrace code
This removes some cleanups from the btrace code by minorly C++-ifying
struct btrace_data.

gdb/ChangeLog
2018-06-08  Tom Tromey  <tom@tromey.com>

	* common/btrace-common.h (struct btrace_data): Add constructor,
	destructor, move assignment operator.
	<empty, clear, fini>: New methods.
	<format>: Initialize.
	(btrace_data_init, btrace_data_fini, btrace_data_clear)
	(btrace_data_empty): Don't declare.
	* common/btrace-common.c (btrace_data_init): Remove.
	(btrace_data::fini): Rename from btrace_data_fini.
	(btrace_data::empty): Rename from btrace_data_empty.
	(btrace_data::clear): Rename from btrace_data_clear.  Return
	bool.
	* btrace.h (make_cleanup_btrace_data): Don't declare.
	* btrace.c (btrace_add_pc, btrace_stitch_trace, btrace_clear)
	(parse_xml_btrace): Update.
	(do_btrace_data_cleanup, make_cleanup_btrace_data): Remove.
	(maint_btrace_clear_packet_history_cmd): Update.

gdb/gdbserver/ChangeLog
2018-06-08  Tom Tromey  <tom@tromey.com>

	* linux-low.c (linux_low_read_btrace): Update.
2018-06-08 07:05:49 -06:00
Sergio Durigan Junior 13e3c6088e Add ChangeLog entry for e5a77256e8
I forgot to add a ChangeLog entry for my previous commit:

commit e5a77256e8
Author: Sergio Durigan Junior <sergiodj@redhat.com>
Date:   Tue Jun 5 17:55:39 2018 -0400

    Guard declarations of 'sve_{vq,vl}_from_{vl,vq}' macros on Aarch64 (and unbreak build)

This commit fixes that.
2018-06-07 14:17:53 -04:00
Pedro Alves a1740ee157 Introduce class target_stack
Currently, the target stack is represented by a singly linked list,
with target_ops having a pointer to the target beneath.  This poses a
problem for multi-process / multi-target debugging.  In that case, we
will naturally want multiple instances of target stacks.  E.g., one
stack for inferior 1 which is debugging a core file, and another
target stack for inferior 2 which is debugging a remote process.  The
problem then is in finding a target's "beneath" target, if we consider
that for some target_ops types, we'll be sharing a single target_ops
instance between several inferiors.  For example, so far, I found no
need to have multiple instances of the spu_multiarch_target /
exec_target / dummy_target targets.

Thus this patch, which changes the target stack representation to an
array of pointers.  For now, there's still a single global instance of
this new target_stack class, though further down in the multi-target
work, each inferior will have its own instance.

gdb/ChangeLog:
2018-06-07  Pedro Alves  <palves@redhat.com>

	* target.h (target_ops) <beneath>: Now a method.  All references
	updated.
	(class target_stack): New.
	* target.c (g_target_stack): New.
	(g_current_top_target): Delete.
	(current_top_target): Get the top target out of g_target_stack.
	(target_stack::push, target_stack::unpush): New.
	(push_target, unpush_target): Reimplement.
	(target_is_pushed): Reimplement in terms of g_target_stack.
	(target_ops::beneath, target_stack::find_beneath): New.
2018-06-07 18:58:04 +01:00
Pedro Alves d6ca69cddc Eliminate find_target_beneath
Call target_ops::beneath() throughout instead.

gdb/ChangeLog:
2018-06-07  Pedro Alves  <palves@redhat.com>

	* target.h (find_target_beneath): Delete declaration.
	* target.c (find_target_beneath): Delete definition.
	* aix-thread.c: All callers of find_target_beneath adjusted to
	call target_ops::beneath instead.
	* bsd-uthread.c: Likewise.
	* linux-thread-db.c: Likewise.
	* ravenscar-thread.c: Likewise.
	* sol-thread.c: Likewise.
	* spu-multiarch.c: Likewise.
2018-06-07 18:57:37 +01:00
Pedro Alves b6a8c27bb8 target_ops::beneath -> target_ops::beneath()
This changes target_ops::beneath from a pointer to a method, and
adjusts all references throughout.  The idea here is to make it easier
to change the target stack representation from an intrusive singly
linked list to something else without leaking implementation details
throughout.

The commit does not change the representation yet, that will be done
in a following patch.  That is why a new target_ops::m_beneath field
appears here.  That new field isn't really documented properly or made
private, simply because it will be removed shortly.

Note that target_ops::beneath() is essentially the same as the current
find_target_beneath routine.  The following patch will eliminate the
latter.

gdb/ChangeLog:
2018-06-07  Pedro Alves  <palves@redhat.com>

	* target.h (target_ops) <beneath>: Now a method.  All references
	updated.
	(target_ops) <m_beneath>: New.
	* target.c (target_ops::beneath): New.
	* corelow.c: Adjust all references to target_ops::beneath.
	* linux-thread-db.c: Likewise.
	* make-target-delegates: Likewise.
	* record-btrace.c: Likewise.
	* record-full.c: Likewise.
	* remote.c: Likewise.
	* target.c: Likewise.
	* target-delegates.c: Regenerate.
2018-06-07 18:57:06 +01:00
Pedro Alves 8b88a78e63 target_stack -> current_top_target() throughout
The recent C++ification of target_ops replaced references to the old
"current_target" squashed target throughout with references to a
"target_stack" pointer.  I had picked the "target_stack" name very
early in the multi-target work, and managed to stick with it, even
though it's a bit of a misnomer, since it isn't really a "target
stack" object, but a pointer into the current top target in the stack.
As I'm splitting more pieces off of the multi-target branch, I've come
to think that it's better to rename it now.  A following patch will
introduce a new class to represent a target stack, and "target_stack"
would be _its_ ideal name.  (In the branch, the class is called
a_target_stack to work around the clash.)

Thus this commit renames target_stack to current_top_target and
replaces all references throughout.  Also, while at it,
current_top_target is made a function instead of a pointer, to make it
possible to change its internal implementation without leaking
implementation details out.  In a couple patches, the implementation
of the function will change to refer to a target stack object, and
then further down the multi-target work, it'll change again to find
the right target stack for the current inferior.

gdb/ChangeLog:
2018-06-07  Pedro Alves  <palves@redhat.com>

	* target.h (target_stack): Delete.
	(current_top_target): Declare function.
	* target.c (target_stack): Delete.
	(g_current_top_target): New.
	(current_top_target): New function.
	* auxv.c: Use current_top_target instead of target_stack
	throughout.
	* avr-tdep.c: Likewise.
	* breakpoint.c: Likewise.
	* corefile.c: Likewise.
	* elfread.c: Likewise.
	* eval.c: Likewise.
	* exceptions.c: Likewise.
	* frame.c: Likewise.
	* gdbarch-selftests.c: Likewise.
	* gnu-v3-abi.c: Likewise.
	* ia64-tdep.c: Likewise.
	* ia64-vms-tdep.c: Likewise.
	* infcall.c: Likewise.
	* infcmd.c: Likewise.
	* infrun.c: Likewise.
	* linespec.c: Likewise.
	* linux-tdep.c: Likewise.
	* minsyms.c: Likewise.
	* ppc-linux-nat.c: Likewise.
	* ppc-linux-tdep.c: Likewise.
	* procfs.c: Likewise.
	* regcache.c: Likewise.
	* remote.c: Likewise.
	* rs6000-tdep.c: Likewise.
	* s390-linux-nat.c: Likewise.
	* s390-tdep.c: Likewise.
	* solib-aix.c: Likewise.
	* solib-darwin.c: Likewise.
	* solib-dsbt.c: Likewise.
	* solib-spu.c: Likewise.
	* solib-svr4.c: Likewise.
	* solib-target.c: Likewise.
	* sparc-tdep.c: Likewise.
	* sparc64-tdep.c: Likewise.
	* spu-tdep.c: Likewise.
	* symfile.c: Likewise.
	* symtab.c: Likewise.
	* target-descriptions.c: Likewise.
	* target-memory.c: Likewise.
	* target.c: Likewise.
	* target.h: Likewise.
	* tracefile-tfile.c: Likewise.
	* tracepoint.c: Likewise.
	* valops.c: Likewise.
	* valprint.c: Likewise.
	* value.c: Likewise.
	* windows-tdep.c: Likewise.
	* mi/mi-main.c: Likewise.
2018-06-07 17:27:46 +01:00
Tom Tromey c7110220be Change build_address_symbolic to return std::string
This changes two out parameters of build_address_symbolic to be
std::string, and updates the callers.  This allows removing some
cleanups.

This patch also moves the declaration of build_address_symbolic out of
defs.h.  I think that many things in defs.h should be elsewhere
instead.  In this case, I moved the declaration to valprint.h, becuase
there is no "printcmd.h" -- but perhaps it would be better to
introduce that instead.

Tested by the buildbot.

gdb/ChangeLog
2018-06-07  Tom Tromey  <tom@tromey.com>

	* valprint.h (build_address_symbolic): Declare.
	* printcmd.c (print_address_symbolic): Update.
	(build_address_symbolic): Change "name" and "filename" to
	std::string.
	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
	Update.
	* defs.h (build_address_symbolic): Remove declaration.
2018-06-07 06:38:18 -06:00
Alan Hayward 63bad7b636 Aarch64 SVE pseudo register support
Add the functionality for reading/writing pseudo registers.

On SVE the V registers are pseudo registers. This is supported
by adding AARCH64_SVE_V0_REGNUM.

	* aarch64-tdep.c (AARCH64_SVE_V0_REGNUM): Add define.
	(aarch64_vnv_type): Add function.
	(aarch64_pseudo_register_name): Add V regs for SVE.
	(aarch64_pseudo_register_type): Likewise.
	(aarch64_pseudo_register_reggroup_p): Likewise.
	(aarch64_pseudo_read_value_2): Use V0 offset for SVE
	(aarch64_pseudo_read_value): Add V regs for SVE.
	(aarch64_pseudo_write_2): Use V0 offset for SVE
	(aarch64_pseudo_write): Add V regs for SVE.
	* aarch64-tdep.h (struct gdbarch_tdep): Add vnv_type.
2018-06-07 10:31:41 +01:00
Sergio Durigan Junior e5a77256e8 Guard declarations of 'sve_{vq,vl}_from_{vl,vq}' macros on Aarch64 (and unbreak build)
Commit 122394f147 ("Function for reading
the Aarch64 SVE vector length") has added macros to manipulate SVE
vector sizes based on Linux kernel sources, but did not guard them
with #ifndef's, which breaks the build when the system headers already
have these macros:

    CXX    aarch64-linux-nat.o
  In file included from ../../gdb/aarch64-tdep.h:25,
                   from ../../gdb/aarch64-linux-nat.c:30:
  ../../gdb/arch/aarch64.h:79: error: "sve_vq_from_vl" redefined [-Werror]
   #define sve_vq_from_vl(vl) ((vl) / 0x10)

  In file included from /usr/include/bits/sigcontext.h:30,
                   from /usr/include/signal.h:291,
                   from build-gnulib/import/signal.h:52,
                   from ../../gdb/linux-nat.h:23,
                   from ../../gdb/aarch64-linux-nat.c:26:
  /usr/include/asm/sigcontext.h:154: note: this is the location of the previous definition
   #define sve_vq_from_vl(vl) ((vl) / SVE_VQ_BYTES)

  In file included from ../../gdb/aarch64-tdep.h:25,
                   from ../../gdb/aarch64-linux-nat.c:30:
  ../../gdb/arch/aarch64.h:80: error: "sve_vl_from_vq" redefined [-Werror]
   #define sve_vl_from_vq(vq) ((vq) * 0x10)

  In file included from /usr/include/bits/sigcontext.h:30,
                   from /usr/include/signal.h:291,
                   from build-gnulib/import/signal.h:52,
                   from ../../gdb/linux-nat.h:23,
                   from ../../gdb/aarch64-linux-nat.c:26:
  /usr/include/asm/sigcontext.h:155: note: this is the location of the previous definition
   #define sve_vl_from_vq(vq) ((vq) * SVE_VQ_BYTES)

In order to fix this breakage, this commit guards the declaration of
the macros using #ifndef's.

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

	* arch/aarch64.h (sve_vg_from_vl): Guard with #ifndef.
	(sve_vl_from_vg): Likewise.
	(sve_vq_from_vl): Likewise.
	(sve_vl_from_vq): Likewise.
	(sve_vq_from_vg): Likewise.
	(sve_vg_from_vq): Likewise.
2018-06-06 17:35:01 -04:00
Tom Tromey c61b06a19a Remove some text from --version output
I happened to notice recently that "gdb --version" says:

    GNU gdb (GDB) 8.0.50.20170911-git
    Copyright (C) 2017 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-pc-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word".

This is a bit on the wordy side, but also references interactive
commands, which I think doesn't really make sense for --version.

This patch removes some text from --version, while leaving it in the
"show version" output.  It also adds a newline between the URLs and
the "For help, ..." text, because I thought that was easier to read.
Finally, it indents one of the URLs, since that was simpler to read,
but not the other URL, because the current format is specified by the
GNU coding standards section on "--version".

Now the --version output looks like:

    GNU gdb (GDB) 8.1.50.20180511-git
    Copyright (C) 2018 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

Tested by the buildbot.

gdb/ChangeLog
2018-06-05  Tom Tromey  <tom@tromey.com>

	* cli/cli-cmds.c (show_version): Update.
	* top.c (print_gdb_version): Add "interactive" parameter.
	Update.
	* main.c (captured_main_1): Update.
	* top.h (print_gdb_version): Add "interactive" parameter and a
	comment.

gdb/testsuite/ChangeLog
2018-06-05  Tom Tromey  <tom@tromey.com>

	* gdb.base/default.exp: Update expected "show version" output.
2018-06-05 11:47:50 -06:00
David Malcolm 115f7325b5 Fix typo in common/enum-flags.h example
The DEF_ENUM_FLAGS_TYPE macro should be used with a trailing
semicolon, but the example in the comment lacks one.

gdb/ChangeLog:
2018-06-05  David Malcolm  <dmalcolm@redhat.com>

	* common/enum-flags.h: Add trailing semicolon to example in
	comment.
2018-06-05 18:22:25 +01:00
Tom Tromey eb6af80922 Add "continue" response to pager
This adds a "continue" response to the pager.  If the user types "c"
in response to the pager prompt, pagination will be disabled for the
duration of one command -- but re-enabled afterward.  This is handy if
you type a command that produces a lot of output, and you don't want
to baby-sit it by typing "return" each time the prompt comes up.

Tested by the buildbot.

gdb/ChangeLog
2018-06-05  Tom Tromey	<tom@tromey.com>

	PR cli/12326:
	* NEWS: Add entry about pager.
	* utils.c (pagination_disabled_for_command): New global.
	(prompt_for_continue): Allow "c" response to prompt.
	(reinitialize_more_filter): Clear
	pagination_disabled_for_command.
	(fputs_maybe_filtered): Check pagination_disabled_for_command.

gdb/doc/ChangeLog
2018-06-05  Tom Tromey	<tom@tromey.com>

	PR cli/12326:
	* gdb.texinfo (Screen Size): Document "c" response to pagination
	prompt.

gdb/testsuite/ChangeLog
2018-06-05  Tom Tromey	<tom@tromey.com>

	PR cli/12326:
	* gdb.cp/static-print-quit.exp: Update.
	* lib/gdb.exp (pagination_prompt): Update.
	* gdb.base/page.exp: Use pagination_prompt.  Add new tests.
	* gdb.python/python.exp: Update.
2018-06-05 11:02:52 -06:00
Tom Tromey 54d343a240 Remove last Ada cleanups
This removes the last cleanups from the Ada code by changing
ada_lookup_symbol_list's out parameter to be a std::vector, and then
fixing up the fallout.

This is a relatively shallow change.  Deeper changes are possible, for
example (1) changing various other functions to accept a vector rather
than a pointer, or (2) changing ada_lookup_symbol_list to return the
vector and omitting the length entirely.

Tested by the buildbot, but I'll wait for Joel to test these as well.

gdb/ChangeLog
2018-06-04  Tom Tromey  <tom@tromey.com>

	* ada-lang.h (ada_lookup_symbol_list): Update.
	* ada-lang.c (resolve_subexp): Update.
	(symbols_are_identical_enums): Change type of syms.  Remove nsyms
	parameter.
	(remove_extra_symbols, remove_irrelevant_renamings): Likewise.
	(ada_lookup_symbol_list_worker, ada_lookup_symbol_list): Change
	results parameter to std::vector.
	(ada_iterate_over_symbols, ada_lookup_symbol, get_var_value):
	Update.
	* ada-exp.y (block_lookup): Update.
	(select_possible_type_sym): Change type of syms.  Remove nsyms
	parameter.
	(write_var_or_type, write_name_assoc): Update.
2018-06-04 15:33:28 -06:00
Joel Brobecker 178d6a6386 (windows) GDB/MI crash when using "-list-thread-groups --available"
On Windows, using the "-list-thread-groups --available" GDB/MI command
before an inferior is being debugged:

    % gdb -q -i=mi
    =thread-group-added,id="i1"
    =cmd-param-changed,param="auto-load safe-path",value="/"
    (gdb)
    -list-thread-groups --available
    Segmentation fault

Ooops!

The SEGV happens because the -list-thread-groups --available command
triggers a windows_nat_target::xfer_partial call for a TARGET_OBJECT_OSDATA
object.  Until a program is being debugged, the target_ops layer that
gets the call is the Windows "native" layer. Except for a couple of
specific objects (TARGET_OBJECT_MEMORY and TARGET_OBJECT_LIBRARIES),
this layer's xfer_partial method delegates the xfer of other objects
to the target beneath:

    default:
      return beneath->xfer_partial (object, annex,
                                    readbuf, writebuf, offset, len,
                                    xfered_len);

Unfortunately, there is no "beneath layer" in this case, so
beneath is NULL and dereferencing it leads to the SEGV.

This patch fixes the issue by checking beneath before trying
to delegate the request.

gdb/ChangeLog:

        * windows-nat.c (windows_nat_target::xfer_partial): Return
        TARGET_XFER_E_IO if we need to delegate to the target beneath
        but BENEATH is NULL.

gdb/testsuite/ChangeLog:

        * gdb.mi/list-thread-groups-no-inferior.exp: New testcase.
2018-06-04 16:07:33 -04:00
Alan Hayward 62b74cb8b0 Use ELF_SECTION_IN_SEGMENT to map segments
The macro ELF_SECTION_IN_SEGMENT should be used when calculating if
a section maps to a segment.

gdb/
	* elfread.c (elf_symfile_segments): Use ELF_SECTION_IN_SEGMENT.
2018-06-04 17:23:07 +01:00
Simon Marchi baf00c2d75 Add configure.nat as a dependency of config.status
After pulling Alan's change that added aarch64-sve-linux-ptrace.o to
configure.nat, I got an undefined reference to aarch64_sve_get_vq when
doing a "make clean && make".  It turns out that re-running configure
(./config.status --recheck) was needed to re-generate the Makefile with
aarch64-sve-linux-ptrace.o included in the object list.  Putting
configure.nat in the dependencies of config.status would make sure that
when we modify configure.nat, the configure script is re-ran.  I think
it also makes sense because configure.tgt and configure.host are also
there.

gdb/ChangeLog:

	* Makefile.in (config.status): Add configure.nat as a
	dependency.
2018-06-04 10:40:27 -04:00
Stan Cox c12a508964 Add client_state struct.
Collect per client specific global data items into struct client_state,
which is similar in purpose to remote.c::remote_state.

gdbserver/ChangeLog
	* server.h (struct client_state): New.
	* server.c (cont_thread, general_thread, multi_process)
	(report_fork_events, report_vfork_events, report_exec_events)
	(report_thread_events, swbreak_feature, hwbreak_feature)
	(vCont_supported, disable_randomization, pass_signals)
	(program_signals, program_signals_p, last_status, last_ptid, own_buf):
	Moved to client_state.
	* remote-utils.c (remote_debug, noack_mode)
	(transport_is_reliable): Moved to client_state.
	* tracepoint.c (current_traceframe): Moved to client_state.

	Update all callers.
	* server.c, remote-utils.c, tracepoint.c, fork-child.c,
	linux-low.c, remote-utils.h, target.c: Use client_state.
2018-06-04 10:20:49 -04:00