Commit Graph

38559 Commits

Author SHA1 Message Date
Simon Marchi 8354c62cd1 Make gdb.mi/user-selected-context-sync.exp use proc_with_prefix
Pedro's patch provides a cleaner way to prefix tests with the proc name,
so let's use that.

gdb/testsuite/ChangeLog:

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

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

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

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

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

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

	* gdb.base/commands.exp (gdbvar_simple_if_test)
	(gdbvar_simple_while_test, gdbvar_complex_if_while_test)
	(progvar_simple_if_test, progvar_simple_while_test)
	(progvar_complex_if_while_test, if_while_breakpoint_command_test)
	(infrun_breakpoint_command_test, breakpoint_command_test)
	(user_defined_command_test, watchpoint_command_test)
	(test_command_prompt_position, deprecated_command_test)
	(bp_deleted_in_command, temporary_breakpoint_commands)
	(stray_arg0_test, source_file_with_indented_comment)
	(recursive_source_test, if_commands_test)
	(error_clears_commands_left, redefine_hook_test)
	(redefine_backtrace_test): Use proc_with_prefix.
	* lib/gdb.exp (proc_with_prefix): New proc.
2016-11-09 15:12:11 +00:00
Pedro Alves 2806dc7eec Fix formattting of gdb/ChangeLog and gdb/testsuite/ChangeLog enties
Leading tab/spaces.  Missing periods.  Duplicate date.
2016-11-09 15:09:31 +00:00
Pedro Alves 6c73cd95f9 agent_expr_up: gdb::unique_ptr -> std::unique_ptr
Now that we require C++11, use std::unique_ptr directly.  This allows
simplifying collection_list a bit by placing unique pointers in the
vector directly, making the vector own its elements.

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

	* ax-gdb.c (agent_eval_command_one): Use std::move instead of
	gdb::move.
	* ax.h (agent_expr_up): Use std::unique_ptr instead of
	gdb::unique_ptr.
	* breakpoint.c (parse_cond_to_aexpr): Use std::move instead of
	gdb::move.
	* tracepoint.c (collection_list::collect_symbol): Likewise.
	(collection_list::~collection_list): Delete.
	(encode_actions_1): Use std::move instead of gdb::move.
	(collection_list::add_aexpr): Use std::move instead of
	unique_ptr::release.
	* tracepoint.h (collection_list) <~collection_list>: Delete
	declaration.
	<m_aexprs>: Now a vector of agent_ptr_up.
2016-11-09 14:57:55 +00:00
Pedro Alves 7a63494a0d gdb: Use vector::emplace_back
Now that we require C++11, we can use vector::emplace_back to
construct elements in place instead of constructing and then copying.

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

	* main.c (struct cmdarg): Add constructor.
	(captured_main_1): Use vector::emplace_back.
	* tracepoint.c (collection_list::add_memrange): Likewise.
2016-11-09 14:53:58 +00:00
Andreas Arnez 8c84bffb45 tui-winsource: Remove failed-allocation logic
This removes dead code in tui_alloc_source_buffer for handling a NULL
return value from xmalloc.

gdb/ChangeLog:

	* tui/tui-winsource.c (tui_alloc_source_buffer): Remove
	failed-xmalloc handling.
2016-11-09 13:02:13 +01:00
Andreas Arnez 7bc2c8b83e tui-winsource: Allocate for actual lines only
The logic for allocating a TUI source window's content buffer allocates
two more lines than needed, because it does not reduce the window height
by the highlight box's overhead.  However, it does reduce the line width
accordingly.  This patch makes the height and width calculation
consistent and improves the comment.

gdb/ChangeLog:

	* tui/tui-winsource.c (tui_alloc_source_buffer): Subtract
	highlight box's overhead when calculating the content height.
2016-11-09 13:02:13 +01:00
Andreas Arnez f5396833d3 tui-disasm: Fix line buffer size calculation
The code that fills the TUI disassembly window content first calculates
the maximum full length of a displayed disassembly line.  This
calculation typically yields the wrong result.  The result is too large,
so the bug does not cause any run-time failures, but unnecessary
confusion for the reader.  This patch fixes the calculation.

gdb/ChangeLog:

	* tui/tui-disasm.c (tui_set_disassem_content): Fix calculation of
	the longest disassembly line's length.
2016-11-09 13:02:13 +01:00
Andreas Arnez 0bb65f1e7c tui-disasm: Fix window content buffer overrun
A user reported a GDB crash with TUI when trying to debug a function
with a long demangled C++ method name.  It turned out that the logic for
displaying the TUI disassembly window has a bug that can cause a buffer
overrun, possibly overwriting GDB-internal data structures.  In
particular, the logic performs an unguarded strcpy.

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

gdb/ChangeLog:

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

gdb/testsuite/ChangeLog:

	* gdb.base/tui-layout.c: New file.
	* gdb.base/tui-layout.exp: Use tui-layout.c, to ensure that the
	disassembly window contains very long lines.
2016-11-09 13:02:12 +01:00
Tristan Gingold 82b19a4d2f darwin-nat.c: handle Darwin 16 (aka Sierra).
Support message from new task and dead name notification on task of an
existing process.
With Sierra, exec(2) terminate the current task and creates a new one.
'set startup-with-shell off' must still be used on Darwin 16.

2016-11-09  Tristan Gingold  <gingold@adacore.com>

	* darwin-nat.c (find_inferior_task_it): Fix indentation.
	(find_inferior_notify_it): Remove.
	(find_inferior_pid_it): New function.
	(darwin_find_inferior_by_notify): Remove.
	(darwin_find_inferior_by_pid): New function.
	(darwin_find_new_inferior): New function.
	(darwin_check_message_ndr): New function from
	darwin_decode_exception_message.
	(darwin_decode_exception_message): Call darwin_check_message_ndr.
	Handle SIGTRAP addressed to an unknown task (when a task spawned).
	(darwin_decode_notify_message): New function.
	(darwin_decode_message): Handle unknown task.
	(darwin_deallocate_threads): New function from darwin_mourn_inferior.
	(darwin_mourn_inferior): Use darwin_deallocate_threads and
	darwin_deallocate_exception_ports.
	(darwin_deallocate_exception_ports): New function from
	darwin_mourn_inferior.
	(darwin_setup_exceptions): New function from darwin_attach_pid.
	(darwin_setup_request_notification): Likewise.
	(darwin_attach_pid): Call darwin_setup_request_notification and
	darwin_setup_request_notification.
2016-11-09 10:28:53 +01:00
Tom Tromey 7353f2470c Fix py-value.exp failure on Python 3
I happened to notice that one test in py-value.exp did not work
properly with Python 3.  This patch fixes the problem.

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

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

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

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

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

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

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

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

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

	* gdb.python/py-framefilter.py (ElidingFrameDecorator.address):
	New method.
2016-11-08 09:10:57 -07:00
Yao Qi e8b24d9ff5 Remove parameter valaddr from la_val_print
Nowadays, we pass both val and return value of
value_contents_for_printing (val) to la_val_print.  The latter is
unnecessary.  This patch removes the second parameter of la_val_print,
and get valaddr in each language's implementation by calling
value_contents_for_printing.  Since value_contents_for_printing calls
value_fetch_lazy, I also make VAL non-const.

Note that
 - I don't clean up the valaddr usages in each language's routines,
 - I don't remove valaddr from apply_ext_lang_val_pretty_printer, and
   extension language ops apply_val_pretty_printer.

They can be done in followup patches.

gdb:

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

	* ada-lang.h (ada_val_print): Remove second parameter.  Remove
	const from "struct value *".
	* ada-valprint.c (print_field_values): Remove const from
	"struct value *".
	(val_print_packed_array_elements): Likewise.
	(print_variant_part): Likewise.
	(ada_val_print_string): Likewise.
	(ada_val_print_gnat_array): Likewise.
	(ada_val_print_ptr): Likewise.
	(ada_val_print_num): Likewise.
	(ada_val_print_enum): Likewise.
	(ada_val_print_flt): Likewise.
	(ada_val_print_union): Likewise.
	(ada_val_print_struct_union): Likewise.
	(ada_val_print_ref): Likewise.
	(ada_val_print_1): Remove second parameter.  Remove const from
	"struct value *".
	(ada_val_print): Likewise.
	* c-lang.h (c_val_print): Likewise.
	* c-valprint.c (c_val_print_array): Remove const from
	"struct value *".
	(c_val_print_ptr): Likewise.
	(c_val_print_struct): Likewise.
	(c_val_print_union): Likewise.
	(c_val_print_int): Likewise.
	(c_val_print_memberptr): Likewise.
	(c_val_print): Remove second parameter.  Remove const from
	"struct value *".  All callers updated.
	* cp-valprint.c (cp_print_value): Remove const from
	"struct value *".
	(cp_print_value_fields): Likewise.
	(c_val_print_value): Likewise.
	* d-lang.h (d_val_print): Remove second parameter.  Remove const
	from "struct value *".
	* d-valprint.c (dynamic_array_type): Likewise.
	(d_val_print): Likewise.
	* f-lang.h (f_val_print): Likewise.
	* f-valprint.c (f_val_print): Likewise.
	* go-lang.h (go_val_print): Likewise.
	* go-valprint.c (print_go_string): Likewise.
	(go_val_print): Likewise.
	* language.c (unk_lang_val_print): Likewise.
	* language.h (struct language_defn) <la_val_print>: Likewise.
	Update comments.
	(LA_VAL_PRINT): Remove.
	* m2-lang.h (m2_val_print): Remove const from
	"struct value *".
	* m2-valprint.c (m2_print_array_contents): Likewise.
	(m2_val_print): Likewise.
	* p-lang.h (pascal_val_print): Remove second parameter.  Remove
	const from "struct value *".
	(pascal_object_print_value_fields): Likewise.
	* p-valprint.c (pascal_val_print): Likewise.
	(pascal_object_print_value_fields): Likewise.
	(pascal_object_print_value): Likewise.
	* rust-lang.c (rust_get_disr_info): Likewise.
	(val_print_struct): Likewise.
	(rust_val_print): Likewise.
	* valprint.c (generic_val_print_array): Likewise.
	(generic_val_print_ptr): Likewise.
	(generic_val_print_memberptr): Likewise.
	(generic_val_print_ref): Likewise.
	(generic_val_print_enum): Likewise.
	(generic_val_print_flags): Likewise.
	(generic_val_print_func): Likewise.
	(generic_val_print_bool): Likewise.
	(generic_val_print_int): Likewise.
	(generic_val_print_char): Likewise.
	(generic_val_print_float): Likewise.
	(generic_val_print_decfloat): Likewise.
	(generic_val_print_complex): Likewise.
	(generic_val_print): Likewise.
	(val_print): Likewise.
	(common_val_print): Likewise.
	(val_print_type_code_flags): Likewise.
	(val_print_scalar_formatted): Likewise.
	(val_print_array_elements): Likewise.
	* valprint.h (val_print_array_elements): Update declaration.
	(val_print_scalar_formatted): Likewise.
	(generic_val_print): Likewise.
	* value.h (val_print): Likewise.
2016-11-08 16:02:42 +00:00
Yao Qi cc977dc7d5 Use get_frame_register_value instead of deprecated_frame_register_read
This patch calls get_frame_register_value instead of
deprecated_frame_register_read, so that we can pass
value_contents_for_printing to val_print.  Both
get_frame_register_value and deprecated_frame_register_read call
frame_unwind_register_value indirectly, so no functionality is changed
by this patch.

gdb:

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

	* mt-tdep.c (mt_registers_info): Call
	get_frame_register_value instead of
	deprecated_frame_register_read.
	* sh64-tdep.c (sh64_do_register): Likewise.
2016-11-08 15:58:47 +00:00
Pedro Alves 3cde5c42d1 Eliminate agent_expr_p; VEC -> std::vector in struct bp_target_info
After the previous patch, we end up with these two types with quite
similar, and potentially confusing names:

  typedef gdb::unique_ptr<agent_expr> agent_expr_up;

  /* Pointer to an agent_expr structure.  */
  typedef struct agent_expr *agent_expr_p;

The latter is only necessary to put agent_expr pointers in VECs.  So
just eliminate it and use std::vector instead.

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

	* ax.h (agent_expr_p): Delete.
	(DEF_VEC_P (agent_expr_p)): Delete.
	* breakpoint.c (build_target_condition_list)
	(build_target_command_list): Adjust to use of std::vector.
	(bp_location_dtor): Remove now unnecessary VEC_free calls.
	* breakpoint.h: Include <vector>.
	(struct bp_target_info) <conditions, tcommands>: Now
	std::vector's.
	* remote.c (remote_add_target_side_condition): bp_tgt->conditions
	is now a std::vector; adjust.
	(remote_add_target_side_commands, remote_insert_breakpoint):
	bp_tgt->tcommands is now a std::vector; adjust.
2016-11-08 15:26:47 +00:00
Pedro Alves 833177a4a5 'struct agent_expr *' -> unique_ptr<agent_expr>
This patch makes the gen_* functions return a unique_ptr instead of
raw pointer:

  typedef gdb::unique_ptr<agent_expr> agent_expr_up;

and then adjusts the codebase throughout to stop using
make_cleanup_free_agent_expr.

The cond_bytecode and cmd_bytecode fields of struct bp_location are
owning pointers, so they're changed to be unique_ptr's instead of raw
pointers.

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

	* ax-gdb.c (is_nontrivial_conversion): Use agent_expr_up.
	(gen_trace_for_var, gen_trace_for_expr, gen_eval_for_expr)
	(gen_trace_for_return_address, gen_printf): Use and return an
	agent_expr_up.  Don't use make_cleanup_free_agent_expr.
	(agent_eval_command_one, maint_agent_printf_command): Use
	agent_expr_up.  Don't use make_cleanup_free_agent_expr.
	* ax-gdb.h (gen_trace_for_expr, gen_trace_for_var)
	(gen_trace_for_return_address, gen_eval_for_expr, gen_printf): Use
	agent_expr_up.
	* ax-general.c (new_agent_expr): Rename to ...
	(agent_expr::agent_expr): ... this, and now a constructor.
	(free_agent_expr): Rename to ...
	(agent_expr::~agent_exp): ... this, and now a destructor.
	(do_free_agent_expr_cleanup, make_cleanup_free_agent_expr):
	Delete.
	* ax.h (struct agent_expr): Add ctor/dtor.
	(agent_expr_up): New typedef.
	(new_agent_expr, free_agent_expr, make_cleanup_free_agent_expr):
	Delete declarations.
	* breakpoint.c (parse_cond_to_aexpr): Use and return an
	agent_expr_up.  Don't use make_cleanup_free_agent_expr.
	(build_target_condition_list): Adjust to use agent_expr_up.
	(parse_cmd_to_aexpr): Use and return an agent_expr_up.  Don't use
	make_cleanup_free_agent_expr.
	(build_target_command_list): Adjust to use agent_expr_up.
	(force_breakpoint_reinsertion): Adjust to use agent_expr_up.
	(bp_location_dtor): Remove unnecessary free_agent_expr and xfree
	calls.
	* breakpoint.h (struct bp_target_info) <cond_bytecode,
	cmd_bytecode>: Now agent_expr_up's.
	* remote.c (remote_download_tracepoint): Adjust to use
	agent_expr_up and remove use of make_cleanup_free_agent_expr.
	* tracepoint.c (validate_actionline, collect_symbol): Adjust to
	use agent_expr_up and remove uses of make_cleanup_free_agent_expr.
	(collection_list::~collection_list): Call delete instead of
	free_agent_expr.
	(encode_actions_1): Adjust to use agent_expr_up and remove uses of
	make_cleanup_free_agent_expr.
	(add_aexpr): Change parameter type to agent_expr_up; Return a raw
	agent_expr pointer.
2016-11-08 15:26:47 +00:00
Pedro Alves 2f408ecb92 Use ui_file_as_string throughout more
This replaces most of the remaining ui_file_xstrdup calls with
ui_file_as_string calls.  Whenever a call was replaced, that led to a
cascade of other necessary adjustments throughout, to make the code
use std::string instead of raw pointers.  And then whenever I added a
std::string as member of a struct, I needed to adjust
allocation/destruction of said struct to use new/delete instead of
xmalloc/xfree.

The stopping point was once gdb built again.  These doesn't seem to be
a way to reasonably split this out further.

Maybe-not-obvious changes:

 - demangle_for_lookup returns a cleanup today.  To get rid of that,
   and avoid unnecessary string dupping/copying, this introduces a
   demangle_result_storage type that the caller instantiates and
   passes to demangle_for_lookup.

 - Many methods returned a "char *" to indicate that the caller owns
   the memory and must free it.  Those are switched to return a
   std::string instead.  Methods that return a "view" into some
   internal string return a "const char *" instead.  I.e., we only
   copy/allocate when necessary.

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

	* ada-lang.c (ada_name_for_lookup, type_as_string): Use and return
	std::string.
	(type_as_string_and_cleanup): Delete.
	(ada_lookup_struct_elt_type): Use type_as_string.
	* ada-lang.h (ada_name_for_lookup): Now returns std::string.
	* ada-varobj.c (ada_varobj_scalar_image): Return a std::string.
	(ada_varobj_describe_child): Make 'child_name' and
	'child_path_expr' parameters std::string pointers.
	(ada_varobj_describe_struct_child, ada_varobj_describe_ptr_child):
	Likewise, and use string_printf.
	(ada_varobj_describe_simple_array_child)
	(ada_varobj_describe_child): Likewise.
	(ada_varobj_get_name_of_child, ada_varobj_get_path_expr_of_child)
	(ada_varobj_get_value_image)
	(ada_varobj_get_value_of_array_variable)
	(ada_varobj_get_value_of_variable, ada_name_of_variable)
	(ada_name_of_child, ada_path_expr_of_child)
	(ada_value_of_variable): Now returns std::string.  Use
	string_printf.
	(ada_value_of_child): Adjust.
	* break-catch-throw.c (check_status_exception_catchpoint): Adjust
	to use std::string.
	* breakpoint.c (watch_command_1): Adjust to use std::string.
	* c-lang.c (c_get_string): Adjust to use std::string.
	* c-typeprint.c (print_name_maybe_canonical): Use std::string.
	* c-varobj.c (varobj_is_anonymous_child): Use ==/!= std::string
	operators.
	(c_name_of_variable): Now returns a std::string.
	(c_describe_child): The 'cname' and 'cfull_expression' output
	parameters are now std::string pointers.  Adjust.
	(c_name_of_child, c_path_expr_of_child, c_value_of_variable)
	(cplus_number_of_children): Adjust to use std::string and
	string_printf.
	(cplus_name_of_variable): Now returns a std::string.
	(cplus_describe_child): The 'cname' and 'cfull_expression' output
	parameters are now std::string pointers.  Adjust.
	(cplus_name_of_child, cplus_path_expr_of_child)
	(cplus_value_of_variable): Now returns a std::string.
	* cp-abi.c (cplus_typename_from_type_info): Return std::string.
	* cp-abi.h (cplus_typename_from_type_info): Return std::string.
	(struct cp_abi_ops) <get_typename_from_type_info>: Return
	std::string.
	* cp-support.c (inspect_type): Use std::string.
	(cp_canonicalize_string_full, cp_canonicalize_string_no_typedefs)
	(cp_canonicalize_string): Return std::string and adjust.
	* cp-support.h (cp_canonicalize_string)
	(cp_canonicalize_string_no_typedefs, cp_canonicalize_string_full):
	Return std::string.
	* dbxread.c (read_dbx_symtab): Use std::string.
	* dwarf2read.c (dwarf2_canonicalize_name): Adjust to use std::string.
	* gdbcmd.h (lookup_struct_elt_type): Adjust to use std::string.
	* gnu-v3-abi.c (gnuv3_get_typeid): Use std::string.
	(gnuv3_get_typename_from_type_info): Return a std::string and
	adjust.
	(gnuv3_get_type_from_type_info): Adjust to use std::string.
	* guile/guile.c (gdbscm_execute_gdb_command): Adjust to use
	std::string.
	* infcmd.c (print_return_value_1): Adjust to use std::string.
	* linespec.c (find_linespec_symbols): Adjust to
	demangle_for_lookup API change.  Use std::string.
	* mi/mi-cmd-var.c (print_varobj, mi_cmd_var_set_format)
	(mi_cmd_var_info_type, mi_cmd_var_info_path_expression)
	(mi_cmd_var_info_expression, mi_cmd_var_evaluate_expression)
	(mi_cmd_var_assign, varobj_update_one): Adjust to use std::string.
	* minsyms.c (lookup_minimal_symbol): Use std::string.
	* python/py-varobj.c (py_varobj_iter_next): Use new instead of
	XNEW.  vitem->name is a std::string now, adjust.
	* rust-exp.y (convert_ast_to_type, convert_name): Adjust to use
	std::string.
	* stabsread.c (define_symbol): Adjust to use std::string.
	* symtab.c (demangle_for_lookup): Now returns 'const char *'.  Add
	a demangle_result_storage parameter.  Use it for storage.
	(lookup_symbol_in_language)
	(lookup_symbol_in_objfile_from_linkage_name): Adjust to new
	demangle_for_lookup API.
	* symtab.h (struct demangle_result_storage): New type.
	(demangle_for_lookup): Now returns 'const char *'.  Add a
	demangle_result_storage parameter.
	* typeprint.c (type_to_string): Return std::string and use
	ui_file_as_string.
	* value.h (type_to_string): Change return type to std::string.
	* varobj-iter.h (struct varobj_item) <name>: Now a std::string.
	(varobj_iter_delete): Use delete instead of xfree.
	* varobj.c (create_child): Return std::string instead of char * in
	output parameter.
	(name_of_variable, name_of_child, my_value_of_variable): Return
	std::string instead of char *.
	(varobj_create, varobj_get_handle): Constify 'objname' parameter.
	Adjust to std::string fields.
	(varobj_get_objname): Return a const char * instead of a char *.
	(varobj_get_expression): Return a std::string.
	(varobj_list_children): Adjust to use std::string.
	(varobj_get_type): Return a std::string.
	(varobj_get_path_expr): Return a const char * instead of a char *.
	Adjust to std::string fields.
	(varobj_get_formatted_value, varobj_get_value): Return a
	std::string.
	(varobj_set_value): Change type of 'expression' parameter to
	std::string.  Use std::string.
	(install_new_value): Use std::string.
	(delete_variable_1): Adjust to use std::string.
	(create_child): Change the 'name' parameter to a std::string
	reference.  Swap it into the new item's name.
	(create_child_with_value): Swap item's name into the new child's
	name.  Use string_printf.
	(new_variable): Use new instead of XNEW.
	(free_variable): Don't xfree fields that are now std::string.
	(name_of_variable, name_of_child): Now returns std::string.
	(value_of_root): Adjust to use std::string.
	(my_value_of_variable, varobj_value_get_print_value): Return
	and use std::string.
	(varobj_value_get_print_value): Adjust to use ui_file_as_string
	and std::string.
	* varobj.h (struct varobj) <name, path_expr, obj_name,
	print_value>: Now std::string's.
	<name_of_variable, name_of_child, path_expr_of_child,
	value_of_variable>: Return std::string.
	(varobj_create, varobj_get_handle): Constify 'objname' parameter.
	(varobj_get_objname): Return a const char * instead of a char *.
	(varobj_get_expression, varobj_get_type): Return a std::string.
	(varobj_get_path_expr): Return a const char * instead of a char *.
	(varobj_get_formatted_value, varobj_get_value): Return a
	std::string.
	(varobj_set_value): Constify 'expression' parameter.
	(varobj_value_get_print_value): Return a std::string.
2016-11-08 15:26:47 +00:00
Pedro Alves d2af8993a7 Use ui_file_as_string in gdb/language.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* language.c (add_language): Use ui_file_as_string and adjust to
	use std::string.
2016-11-08 15:26:47 +00:00
Pedro Alves 5698084a73 Use ui_file_as_string in gdb/rust-lang.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>
	    Tom Tromey  <tom@tromey.com>

	* rust-lang.c (struct disr_info) <name>: Now a std::string.
	(rust_get_disr_info): Use ui_file_as_string and adjust to use
	std::string.
	(rust_val_print): Adjust to use std::string.
2016-11-08 15:26:46 +00:00
Pedro Alves af1fe7b3b8 Use ui_file_as_string in gdb/infrun.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* infrun.c (print_target_wait_results): Use ui_file_as_string and
	std::string.
2016-11-08 15:26:46 +00:00
Pedro Alves 3b4de39c9d Use ui_file_as_string in gdb/ada-lang.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* ada-lang.c (type_as_string): Use ui_file_as_string and return
	std::string.
	(type_as_string_and_cleanup): Delete.
	(ada_lookup_struct_elt_type): Use type_as_string.
2016-11-08 15:26:46 +00:00
Pedro Alves 6f0302493a Use ui_file_as_string in gdbarch.sh/gdbarch.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* gdbarch.sh (verify_gdbarch): Use ui_file_as_string and
	std::string.
	* gdbarch.c: Regenerate.
2016-11-08 15:26:46 +00:00
Pedro Alves 66bbce5bda Use ui_file_as_string in gdb/c-exp.y
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* c-exp.y (OPERATOR NEW): Adjust to use ui_file_as_string and
	std::string.
2016-11-08 15:26:46 +00:00
Pedro Alves aaee65aea2 Use ui_file_as_string in gdb/compile/
Using ui_file_as_string would imply changing a few prototypes to pass
around source and object file names as std::string.  Instead of that,
wrap those two in a new class.  This ends up eliminating a small
wrinkle: get_new_file_names and compile_object_load have swapped
parameters.  The former takes "source, objfile", while the latter
takes "objfile, source".

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

	* c-lang.h (c_compute_program): Now returns std::string.
	* compile/compile-internal.h (class compile_file_names): New
	class.
	* compile/compile-object-load.c (compile_object_load): Replace
	object_file and source_file parameters with a compile_file_names
	parameter.  Adjust.
	* compile-object-load.h: Include "compile-internal.h".
	(compile_object_load): Replace object_file and source_file
	parameters with a compile_file_names parameter.
	* compile/compile-c-support.c (c_compute_program): Now returns a
	std::string.  Use ui_file_as_string.
	* compile/compile.c (get_new_file_names): Remove parameters and
	return a compile_file_names instead.
	(compile_to_object): Now returns a compile_file_names.  Use
	ui_file_as_string.
	(eval_compile_command): Use compile_file_names.
	* language.h (struct language_defn) <la_compute_program>: Now
	returns std::string.
2016-11-08 15:26:46 +00:00
Pedro Alves 3d8b0d9483 Use ui_file_as_string in gdb/cli/cli-setshow.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* cli/cli-setshow.c (do_show_command): Adjust to use
	ui_file_as_string and std::string.
2016-11-08 15:26:45 +00:00
Pedro Alves b3ced9bad2 Use ui_file_as_string in gdb/remote.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* remote.c (escape_buffer): Use ui_file_as_string and return
	std::string.
	(putpkt_binary, read_frame): Adjust to use std::string.
2016-11-08 15:26:45 +00:00
Pedro Alves c92aed165e Use ui_file_as_string in gdb/python/
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* python/py-arch.c (archpy_disassemble): Use ui_file_as_string and
	std::string.
	* python/py-breakpoint.c (bppy_get_commands): Use
	ui_file_as_string and std::string.
	* python/py-frame.c (frapy_str): Likewise.
	* python/py-type.c (typy_str): Likewise.
	* python/py-unwind.c (unwind_infopy_str): Likewise.
	* python/py-value.c (valpy_str): Likewise.
2016-11-08 15:26:45 +00:00
Pedro Alves 02030646c2 Use ui_file_as_string in gdb/printcmd.c
Yet another cleanup eliminated.

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

	* printcmd.c (eval_command): Use ui_file_as_string and
	std::string.
2016-11-08 15:26:45 +00:00
Pedro Alves 7b01d34b2a Use ui_file_as_string in gdb/top.c
Yet another cleanup is eliminated.

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

	* top.c (quit_confirm): Use ui_file_as_string and std::string.
2016-11-08 15:26:45 +00:00
Pedro Alves db1ec11fff Use ui_file_as_string in execute_command_to_string
... and then return std::string and adjust all callers.

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

	* gdbcmd.h (execute_command_to_string): Now returns std::string.
	(lookup_struct_elt_type): Adjust to use std::string.
	* top.c (execute_command_to_string): Use ui_file_as_string and
	return std::string.
	* guile/guile.c (gdbscm_execute_gdb_command): Adjust to use
	std::string.
	* python/python.c (execute_gdb_command): Adjust to use
	std::string.
2016-11-08 15:26:45 +00:00
Pedro Alves 3ab692db7f Use ui_file_as_string in gdb/guile/
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Use
	ui_file_as_string and adjust to use std::string.
	* guile/scm-disasm.c (gdbscm_arch_disassemble): Likewise.
	* guile/scm-frame.c (frscm_print_frame_smob): Likewise.
	* guile/scm-type.c (tyscm_type_name): Use ui_file_as_string and
	adjust to use std::string.  Throw exception directly instead of
	returning it in EXCP output parameter.
	(tyscm_print_type_smob, gdbscm_type_print_name): Adjust to
	tyscm_type_name interface change.
	* guile/scm-value.c (vlscm_print_value_smob, gdbscm_value_print):
	Use ui_file_as_string and std::string.
2016-11-08 15:26:44 +00:00
Pedro Alves 09b0e4b047 Use ui_file_as_string in gdb/arm-tdep.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* arm-tdep.c (_initialize_arm_tdep): Use ui_file_as_string and
	std::string.
2016-11-08 15:26:44 +00:00
Pedro Alves d16c5475b5 Use ui_file_as_string in gdb/utils.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* utils.c (error_stream): Use ui_file_as_string and std::string.
2016-11-08 15:26:44 +00:00
Pedro Alves 56dbf31760 Use ui_file_as_string in gdb/ui-out.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* ui-out.c (ui_out_field_stream): Use ui_file_as_string.
2016-11-08 15:26:44 +00:00
Pedro Alves 77e1c7426a Use ui_file_as_string in gdb/ada-valprint.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* ada-valprint.c (ada_print_floating): Use ui_file_as_string and
	std::string.
2016-11-08 15:26:44 +00:00
Pedro Alves a0f86e7358 Use ui_file_as_string in gdb/xtensa-tdep.c
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* xtensa-tdep.c (xtensa_verify_config): Use ui_file_as_string and
	std::string.
2016-11-08 15:26:44 +00:00
Pedro Alves 322a851675 Use ui_file_as_string in dwarf2_compute_name
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* dwarf2read.c (dwarf2_compute_name): Use ui_file_as_string and
	std::string.
2016-11-08 15:26:44 +00:00
Pedro Alves 1f45808ead Clean up tracepoint.h/c:collection_list
Noticed we could do this while working on the expression_up change.

The main goal here was getting rid of the
encode_actions_and_make_cleanup / do_clear_collection_list cleanups.

While at it, uncrustify the code:

 - Make collection_list a C++ class, with data members private (and
   thus renamed m_...).

 - Make related functions be member methods.

 - Use std::vector instead of an open coding a vector implementation.

 - Use std::sort instead of qsort.

 - Rename the "list" member of collection_list, which is an incredibly
   obfuscating name.

 - Rename a couple other things here and there for clarify.

 - Use "bool" more.

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

	* mi/mi-main.c (print_variable_or_computed): Constify 'expression'
	parameter.
	(mi_cmd_trace_frame_collected): Call encode_actions instead of
	encode_actions_and_make_cleanup.  Adjust to use std::vector.
	* tracepoint.c (memrange_cmp): Delete.
	(memrange_comp): New.
	(memrange_sortmerge): Take a memrange vector as parameter instead
	of a collection_list.  Use std::sort instead of qsort.
	(add_register): Now a method of collection_list.  Adjust to m_
	prefix of data fields.
	(add_memrange): Now a method of collection_list.  Adjust to m_
	prefix of data fields.  Adjust to use std::vector.
	(collect_symbol): Now a method of collection_list.  Adjust to m_
	prefix of data fields.
	(do_collect_symbol): Adjust.  Call add_wholly_collected instead of
	accessing the vector directly.
	(collection_list::add_wholly_collected): New.
	(add_local_symbols): Now a method of collection_list.
	(add_static_trace_data): Now a method of collection_list.  Adjust
	to use bool.
	(clear_collection_list, do_clear_collection_list): Delete.
	(init_collection_list): Delete.
	(collection_list::collection_list): New.
	(collection_list::~collection_list): New.
	(stringify_collection_list): Rename to ...
	(collection_list::stringify): ... this and adjust to being a
	method of collection_list.  Adjust to use of std::vector.
	(append_exp): Now a method of collection_list.  Use
	ui_file_as_string.  Adjust to std::vector.
	(collection_list::finish): New.
	(encode_actions_1): Adjust.
	(encode_actions_and_make_cleanup): Rename to ...
	(encode_actions)... this.  No longer returns a cleanup.  No longer
	call init_collection_list nor install do_clear_collection_list
	cleanups.  Call collection_list::finish instead of
	memrange_sortmerge directly.
	(encode_actions_rsp): Adjust to call encode_actions instead of
	encode_actions_and_make_cleanup.  Adjust to method renames.
	(add_aexpr): Now a method of collection_list.
	* tracepoint.h: Include <vector> and <string>.
	(struct memrange): Add constructors.
	(struct collection_list): Now a class.
	(class collection_list) <collection_list, ~collection_list,
	add_wholly_collected, append_exp, add_aexpr, add_register,
	add_memrange, collect_symbol, add_local_symbols,
	add_static_trace_data, finish, stringify, wholly_collected, and
	computed>: New methods.
	<regs_mask>: Rename to ...
	<m_regs_mask>: ... this.
	<listsize, next_memrange, list>: Delete fields.
	<m_memranges>: New field.
	<aexpr_listsize, next_aexpr_elt, aexpr_list>: Delete fields.
	<m_aexprs>: New field.
	<strace_data>: Rename to ...
	<m_strace_data>: ... this.  Now a bool.
	<wholly_collected>: Rename to ...
	<m_wholly_collected>: ... this.  Now a std::vector<std::string>.
	<computed>: Rename to ...
	<m_computed>: ... this.  Now a std::vector<std::string>.
	(encode_actions_and_make_cleanup): Delete declaration.
	(encode_actions): New declaration.
2016-11-08 15:26:43 +00:00
Pedro Alves 8de00631b8 Introduce ui_file_as_string
ui_file_as_string is a variant of ui_file_xstrdup that returns a
std::string instead of a xmalloc'ed char *.  The idea is using the new
function to eliminate "make_cleanup (xfree, ...)"  cleanups
throughout.

Following patches will make use of this.

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

	* ui-file.c (do_ui_file_as_string, ui_file_as_string): New
	functions.
	* ui-file.h: Include <string>.
	(ui_file_as_string): New declaration.
2016-11-08 15:26:43 +00:00
Pedro Alves 4d01a485d2 'struct expression *' -> gdb::unique_xmalloc_ptr<expression>
This patch makes parse_expression and friends return a unique_ptr
instead of raw pointer [1]:

  typedef gdb::unique_malloc_ptr<expression> expression_up;

and then adjusts the codebase throughout to stop using cleanups to
manage lifetime of expression pointers.

Whenever I found a structure owning an expression pointer, I made it
store a unique_ptr instead of a raw pointer, which then requires using
new/delete of the holding structure, instead of XNEW/xfree.

[1] - I'd like to set the rule that types named with an "_up" suffix
      are unique_ptr typedefs.

Note I used gdb::unique_xmalloc_ptr instead of gdb::unique_ptr, simply
because we still use xmalloc instead of new to allocate expression
objects.  Once that's changed, all we need to do is change the
expression_up typedef and the smart pointer will then call delete
instead of xfree.

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

	* ada-lang.c (ada_read_renaming_var_value): Use expression_up.
	(struct ada_catchpoint_location) <excep_cond_expr>: Now an
	expression_up.
	(ada_catchpoint_location_dtor): Reset excep_cond_expr instead of
	using xfree.
	(create_excep_cond_exprs): Use expression_up and gdb::move.
	(allocate_location_exception): Use new instead of XNEW.
	(should_stop_exception): Likewise.  Adjust to use expression_up.
	(create_ada_exception_catchpoint): Use new instead of XNEW.
	* ax-gdb.c (agent_eval_command_one): Use expression_up instead of
	cleanups.
	(maint_agent_printf_command): Use expression_up.
	* break-catch-sig.c (create_signal_catchpoint): Use new instead of
	XNEW.
	* break-catch-syscall.c (create_syscall_event_catchpoint):
	Likewise.
	* break-catch-throw.c (handle_gnu_v3_exceptions): Use new instead
	of XCNEW.  Use gdb::unique_ptr instead of cleanups.
	* breakpoint.c (set_breakpoint_condition, update_watchpoint)
	(parse_cmd_to_aexpr, watchpoint_check)
	(bpstat_check_breakpoint_conditions, watchpoint_locations_match):
	Adjust to use expression_up.
	(init_bp_location): Adjust.
	(free_bp_location): Use delete instead of xfree.
	(set_raw_breakpoint_without_location, set_raw_breakpoint)
	(add_solib_catchpoint, create_fork_vfork_event_catchpoint)
	(new_single_step_breakpoint, create_breakpoint_sal): Use new
	instead of XNEW.
	(find_condition_and_thread): Adjust to use expression_up.
	(create_breakpoint): Use new instead of XNEW.
	(dtor_watchpoint): Don't xfree expression pointers, they're
	unique_ptr's now.
	(insert_watchpoint, remove_watchpoint): Adjust.
	(watch_command_1): Use expression_up.  Use new instead of XCNEW.
	(catch_exec_command_1): Use new instead of XNEW.
	(bp_location_dtor): Don't xfree expression pointers, they're
	unique_ptr's now.
	(base_breakpoint_allocate_location)
	(strace_marker_create_breakpoints_sal): Use new instead of XNEW.
	(delete_breakpoint): Use delete instead of xfree.
	* breakpoint.h (struct bp_location) <cond>: Now an
	unique_ptr<expression> instead of a raw pointer.
	(struct watchpoint) <exp, cond_exp>: Likewise.
	* cli/cli-script.c (execute_control_command): Use expression_up
	instead of cleanups.
	* dtrace-probe.c (dtrace_process_dof_probe): Use expression_up.
	* eval.c (parse_and_eval_address, parse_and_eval_long)
	(parse_and_eval, parse_to_comma_and_eval, parse_and_eval_type):
	Use expression_up instead of cleanups.
	* expression.h (expression_up): New typedef.
	(parse_expression, parse_expression_with_language, parse_exp_1):
	Change return type to expression_up.
	* mi/mi-main.c (mi_cmd_data_evaluate_expression)
	(print_variable_or_computed): Use expression_up.
	* objc-lang.c (print_object_command): Use expression_up instead of
	cleanups.
	* parse.c (parse_exp_1, parse_exp_in_context)
	(parse_exp_in_context_1, parse_expression)
	(parse_expression_with_language): Return an expression_up instead
	of a raw pointer.
	(parse_expression_for_completion): Use expression_up.
	* printcmd.c (struct display) <exp>: Now an expression_up instead
	of a raw pointer.
	(print_command_1, output_command_const, set_command, x_command):
	Use expression_up instead of cleanups.
	(display_command): Likewise.  Use new instead of XNEW.
	(free_display): Use delete instead of xfree.
	(do_one_display): Adjust to use expression_up.
	* remote.c (remote_download_tracepoint): Likewise.
	* stack.c (return_command): Likewise.
	* tracepoint.c (validate_actionline, encode_actions_1): Use
	expression_up instead of cleanups.
	* typeprint.c (whatis_exp, maintenance_print_type): Likewise.
	* value.c (init_if_undefined_command): Likewise.
	* varobj.c (struct varobj_root) <exp>: Now an expression_up
	instead of a raw pointer.
	(varobj_create): Adjust.
	(varobj_set_value): Use an expression_up instead of cleanups.
	(new_root_variable): Use new instead of XNEW.
	(free_variable): Use delete instead of xfree.
	(value_of_root_1): Use std::swap.
2016-11-08 15:26:43 +00:00
Pedro Alves b064640146 cli-script.c: Simplify using std::string, eliminate cleanups
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* cli/cli-script.c (execute_control_command): Use std::string
	instead of cleanups.
	(locate_arg): Constify return type.
	(insert_args): Constify paremeter.  Simplify using std::string.
	Return a std::string.
2016-11-08 15:26:43 +00:00
Pedro Alves 896b6bda69 breakpoint.c:commands_command_1 constification and cleanup
This is constification needed for next patch.  Adjust
commands_command_1 to use std::string too because the "arg" parameter
is currently overwritten and then passed to make_cleanup.  The
constification alone would trigger a compile error in the make_cleanup
call otherwise (passing const char * to void * parameter).  Using
std::string gets rid of the cleanup in the first place, resulting in
simpler code.

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

	* breakpoint.c (struct commands_info) <arg>: Constify.
	(commands_command_1): Constify 'arg' parameter.  Use std::string
	and string_printf.
	(commands_from_control_command): Constify 'arg' parameter.
	(map_breakpoint_numbers): Constify 'args' parameter.
	* breakpoint.h (commands_from_control_command): Constify 'arg'
	parameter.
2016-11-08 15:26:43 +00:00
Pedro Alves 4f8ad951f6 cli/cli-script.c: Remove some dead NULL checks
gdb/ChangeLog:
2016-11-08  Pedro Alves  <palves@redhat.com>

	* cli/cli-script.c (execute_control_command): Assume insert_args
	never returns NULL.
	(insert_args): Assume xmalloc never returns NULL.
2016-11-08 15:26:42 +00:00
Pedro Alves d4081a383e Introduce string_printf
This introduces the string_printf function.  Like asprintf, but
returns a std::string.

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

	* Makefile.in (COMMON_OBS): Add utils-selftests.o.
	* common/common-utils.c (string_printf): New function.
	* common/common-utils.h: Include <string>.
	(string_printf): Declare.
	* utils-selftests.c: New file.
2016-11-08 15:26:42 +00:00
Yao Qi 93f9a11fbd gdbarch software_single_step returns VEC (CORE_ADDR) *
This patch changes gdbarch method software_single_step to return a
vector of addresses on which GDB should insert breakpoints, and don't
insert breakpoints.  Instead, the caller of
gdbarch_software_single_step inserts breakpoints if the returned
vector is not NULL.

gdb:

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

	* aarch64-tdep.c (aarch64_software_single_step): Return
	VEC (CORE_ADDR) *.  Return NULL instead of 0.  Don't call
	insert_single_step_breakpoint.
	* alpha-tdep.c (alpha_deal_with_atomic_sequence): Likewise.
	(alpha_software_single_step): Likewise.
	* alpha-tdep.h (alpha_software_single_step): Update declaration.
	* arm-linux-tdep.c (arm_linux_software_single_step): Return
	VEC (CORE_ADDR) *.  Return NULL instead of 0.
	* arm-tdep.c (arm_software_single_step): Return NULL instead of	0.
	* arm-tdep.h (arm_software_single_step): Update declaration.
	* breakpoint.c (insert_single_step_breakpoints): New function.
	* breakpoint.h (insert_single_step_breakpoints): Declare.
	* cris-tdep.c (cris_software_single_step): Return
	VEC (CORE_ADDR) *.  Don't call insert_single_step_breakpoint.
	* gdbarch.sh (software_single_step): Change it to return
	VEC (CORE_ADDR) *.
	* gdbarch.c, gdbarch.h: Regenerated.
	* infrun.c (maybe_software_singlestep): Adjust.
	* mips-tdep.c (mips_deal_with_atomic_sequence): Return
	VEC (CORE_ADDR) *.  Don't call insert_single_step_breakpoint.
	(micromips_deal_with_atomic_sequence): Likewise.
	(deal_with_atomic_sequence): Likewise.
	(mips_software_single_step): Likewise.
	* mips-tdep.h (mips_software_single_step): Update declaration.
	* moxie-tdep.c (moxie_software_single_step): Likewise.
	* nios2-tdep.c (nios2_software_single_step): Likewise.
	* ppc-tdep.h (ppc_deal_with_atomic_sequence): Update
	declaration.
	* record-full.c (record_full_resume): Adjust.
	(record_full_wait_1): Likewise.
	* rs6000-aix-tdep.c (rs6000_software_single_step): Return
	VEC (CORE_ADDR) *.  Don't call insert_single_step_breakpoint.
	* rs6000-tdep.c	(ppc_deal_with_atomic_sequence): Return
	VEC (CORE_ADDR) *.  Don't call insert_single_step_breakpoint.
	* s390-linux-tdep.c (s390_software_single_step): Likewise.
	* sparc-tdep.c (sparc_software_single_step): Likewise.
	* spu-tdep.c (spu_software_single_step): Likewise.
	* tic6x-tdep.c (tic6x_software_single_step): Likewise.
2016-11-08 14:28:32 +00:00
Yao Qi 0bc5d801ec Clear addr bit in next_pcs vector
This patch is to split the loop of calling gdbarch_addr_bits_remove
and insert_single_step_breakpoint into two loops.

gdb:

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

	* arm-linux-tdep.c (arm_linux_software_single_step): Write
	adjusted address back to vector.  Call insert_single_step_breakpoint
	in a new loop.
	* arm-tdep.c (arm_software_single_step): Likewise.
2016-11-08 12:58:33 +00:00
Yao Qi 771da62d67 Remove arm_insert_single_step_breakpoint
This patch is to remove arm_insert_single_step_breakpoint.

gdb:

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

	* arm-linux-tdep.c (arm_linux_software_single_step): Don't
	call arm_insert_single_step_breakpoint, call
	insert_single_step_breakpoint instead.
	* arm-tdep.c (arm_insert_single_step_breakpoint): Remove.
	(arm_software_single_step): Don't call
	arm_insert_single_step_breakpoint, call
	insert_single_step_breakpoint instead.
	* arm-tdep.h (arm_insert_single_step_breakpoint): Remove
	declaration.
2016-11-08 12:47:37 +00:00
Cordian A. Daniluk 53c3572a9f Fix PR breakpoints/20739: Badly formatted adress string in error message
Remove duplicate `0x'-prefix for the hex address printed.  `paddress'
already prepends this, so no need to do it manually.

gdb/ChangeLog:
2016-11-08  Cordian A. Daniluk  <th3c0r1uk@gmail.com>

	PR breakpoints/20739
	* breakpoint.c (check_fast_tracepoint_sals): Don't print duplicate
	0x prefix.
2016-11-08 12:44:45 +00:00
Yao Qi 20955dbf71 Fix indentation
gdb:

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

	* rust-lang.c (val_print_struct): Fix indentation.
2016-11-08 11:32:53 +00:00
Lionel Flandrin 9dc193c3be Check for truncated registers in process_g_packet
While investigating an unrelated issue in remote.c I noticed that the
bound checking for 'g' packets was bogus:

The previous code would only check that the first byte of the register
was within bounds before passing the buffer to regcache_raw_supply.
If it turned out that the register in the 'g' packet was incomplete
then regcache_raw_supply would proceed to memcpy out-of-bounds.

Since the buffer is allocated with alloca it's relatively unlikely to
crash (you just end up dumping gdb's stack into the cache) but it's
still a bit messy.

I changed this logic to check for truncated registers and raise an
error if one is encountered.  Hopefully it should make debugging
remote stubs a bit easier.

gdb/ChangeLog:
2016-11-08  Lionel Flandrin  <lionel@svkt.org>

	* remote.c (process_g_packet): Detect truncated registers in 'g'
	packets and raise an error.
2016-11-08 10:27:36 +00:00
Doug Evans 5996220cfa Fix ext lang calls to value_struct_elt.
gdb/ChangeLog:

	* guile/scm-value.c (gdbscm_value_field): Fix call to value_struct_elt.
	* python/py-value.c (valpy_getitem): Ditto.
2016-11-07 13:31:24 -08:00
Doug Evans ad9eb1fdda i386-tdep.c (i386_gdbarch_init): Add comments.
gdb/ChangeLog:

	* i386-tdep.c (i386_gdbarch_init): Add comments.
2016-11-07 13:27:22 -08:00
Doug Evans bc71081e53 python/py-unwind.c (unwind_infopy_str): Fix use of VEC_iterate.
gdb/ChangeLog:

	* python/py-unwind.c (unwind_infopy_str): Fix use of VEC_iterate.
2016-11-07 13:23:10 -08:00
Doug Evans a57160325e configure.tgt (x86_64-*-elf*): Remove i386bsd-tdep.o.
gdb/ChangeLog:

	* configure.tgt (x86_64-*-elf*): Remove i386bsd-tdep.o.
2016-11-07 13:15:48 -08:00
Simon Marchi 26c4b26f0c Fix a few typos
gdb/ChangeLog:

	* maint.c (scoped_command_stats::scoped_command_stats): Fix typo.
	* ppcnbsd-tdep.c (_initialize_ppcnbsd_tdep): Likewise.
	* ppcobsd-tdep.c (_initialize_ppcobsd_tdep): Likewise.
	* ui-out.c (ui_out_new): Likewise.
	* utils.c (init_page_info): Likewise.
	(reset_prompt_for_continue_wait_time): Likewise.
	* windows-nat.c (windows_init_thread_list): Likewise.
	* xtensa-tdep.c (call0_analyze_prologue): Likewise.
2016-11-04 23:50:35 -04:00
Manish Goregaokar cdf5a07c75 Add support for the sizeof function in Rust
2016-10-29  Manish Goregaokar  <manish@mozilla.com>

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

gdb/testsuite/ChangeLog:
    * gdb.rust/simple.exp: Add tests for `sizeof(expr)`
2016-11-03 15:45:14 -07:00
Manish Goregaokar b96645f1a1 Add support for untagged unions in Rust
2016-10-28  Manish Goregaokar  <manish@mozilla.com>

gdb/ChangeLog:
    * rust-lang.c (rust_union_is_untagged): Add function to
    check if a union is an untagged unioni
    (rust_val_print): Handle printing of untagged union values
    (rust_print_type): Handle printing of untagged union types
    (rust_evaluate_subexp): Handle evaluating field
    access on untagged unions
2016-11-03 15:45:14 -07:00
Manish Goregaokar 51a789c3bf
Fix handling of discriminantless univariant enums in Rust; fix bug with encoded enums
2016-10-27  Manish Goregaokar  <manish@mozilla.com>

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

gdb/testsuite/ChangeLog:
    * simple.rs: Add test for univariant enums without discriminants
    and for encoded struct-like enums
    * simple.exp: Add test expectations
2016-11-03 15:45:05 -07:00
Yao Qi 722bcb33bf Replace YY_NULL with YY_NULLPTR in LANG-exp.c
As we require c++11, GDB fails to build if bison is not new enough.
I see the following error on the system (fedora 19) that bison is
2.6.4,

g++ -std=gnu++11 .... \
	-c -o ada-exp.o -MT ada-exp.o -MMD -MP -MF .deps/ada-exp.Tpo 'if test -f ada-exp.c; then echo ada-exp.c; else echo ../../binutils-gdb/gdb/ada-exp.c; fi`
In file included from ../../binutils-gdb/gdb/ada-exp.y:731:0:
ada-lex.c:113:0: error: "YY_NULL" redefined [-Werror]
 #define YY_NULL 0
 ^
ada-exp.c:158:0: note: this is the location of the previous definition
 #   define YY_NULL nullptr
 ^
cc1plus: all warnings being treated as errors
make: *** [ada-exp.o] Error 1

Both ada-exp.c and ada-lex.c has macro YY_NULL, like this,

 $ cat 1.c
 # ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
 #   define YY_NULL nullptr
 #  else
 #   define YY_NULL 0
 #  endif
 # endif

 #define YY_NULL 0

as we can see, YY_NULL is defined differently (nullptr vs 0)

$ g++ -std=c++11 -Wall 1.c -c
1.c:9:0: warning: "YY_NULL" redefined
 #define YY_NULL 0
 ^
1.c:3:0: note: this is the location of the previous definition
 #   define YY_NULL nullptr
 ^
$ g++ -Wall 1.c -c

bison renames YY_NULL to YY_NULLPTR in 2013 Nov,
https://lists.gnu.org/archive/html/bison-patches/2013-11/msg00002.html
and bison released later than 2013 Nov have this patch.  Bison 3.0.2,
released on 2013 Dec, is OK.

The fix is to replace YY_NULL with YY_NULLPTR via sed.  With old bison,
YY_NULL becomes YY_NULLPTR; with new bison, YY_NULLPTR becomes
YY_NULLPTRPTR,

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* Makefile.in (.y.c): Replace YY_NULL with YY_NULLPTR.
2016-11-03 16:09:42 +00:00
Yao Qi 04180708ef Remove GDBARCH_BREAKPOINT_MANIPULATION and SET_GDBARCH_BREAKPOINT_MANIPULATION
Both of them are used in conversion.  We can remove them since the
conversion is done.

There are many architectures only have one breakpoint instruction,
so their gdbarch methods breakpoint_kind_from_pc and
sw_breakpoint_from_kind look very similar.  Instead of macro, we
use template "template <size_t, const gdb_byte *> struct bp_manipulation"
for these architectures.  In order to use template, I also change
breakpoint instruction of type "static const gdb_byte[]" to
"constexpr gdb_byte[]", and rename them to ARCH_break_insn.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>
	    Pedro Alves <palves@redhat.com>

	* aarch64-tdep.c (aarch64_default_breakpoint): Change it to
	constexpr.  Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(aarch64_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* alpha-tdep.c (break_insn): Rename to alpha_break_insn.
	Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(alpha_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* arc-tdep.c (arc_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* arch-utils.h (GDBARCH_BREAKPOINT_MANIPULATION): Remove.
	(struct bp_manipulation): New.
	(SET_GDBARCH_BREAKPOINT_MANIPULATION): Remove.
	(struct bp_manipulation_endian): New.
	(BP_MANIPULATION): New.
	(BP_MANIPULATION_ENDIAN): New.
	* arm-tdep.c (arm_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* avr-tdep.c (avr_break_insn): Change it constexpr.
	(avr_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* bfin-tdep.c (bfin_gdbarch_init): Likewise.
	* cris-tdep.c (cris_gdbarch_init): Likewise.
	* frv-tdep.c (breakpoint): Rename it to frv_break_insn, and
	change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(frv_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* ft32-tdep.c (breakpoint): Rename it to ft32_break_insn and
	change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(ft32_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* h8300-tdep.c (breakpoint): Rename it to h8300_break_insn.
	Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(h8300_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* hppa-tdep.c (breakpoint): Rename it to h8300_break_insn.
	Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(hppa_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* i386-tdep.c (break_insn): Rename it to i386_break_insn.
	Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(i386_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* iq2000-tdep.c (iq2000_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* lm32-tdep.c (breakpoint): Rename it to lm32_break_insn and
	change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(lm32_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* m32c-tdep.c (break_insn): Rename it to m32c_break_insn and change
	its type to constexpr.  Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(m32c_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* m32r-tdep.c (m32r_gdbarch_init): Likewise.
	* m68hc11-tdep.c (breakpoint): Rename it to m68hc11_break_insn and
	change its type to constexpr.  Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(m68hc11_gdbarch_init): Don't use SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* m68k-tdep.c (break_insn): Rename it to m68k_break_insn and change
	its type to constexpr.  Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(m68k_gdbarch_init):  Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* m88k-tdep.c (break_insn): Rename it to m88k_break_insn and change
	its type to constexpr.  Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(m88k_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* mep-tdep.c (breakpoint): Rename it to mep_break_insn and change
	its type to constexpr.  Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(mep_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* microblaze-tdep.c (break_insn): Rename it to
	microblaze_break_insn and change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(microblaze_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* mips-tdep.c (mips_gdbarch_init): Likewise.
	* mn10300-tdep.c (breakpoint): Rename it to mn10300_break_insn and
	change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(mn10300_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* moxie-tdep.c (breakpoint): Rename it to moxie_break_insn and
	change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(moxie_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* msp430-tdep.c (breakpoint): Rename it to msp430_break_insn
	and change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(msp430_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* mt-tdep.c (mt_gdbarch_init): Likewise.
	* nds32-tdep.c (break_insn): Rename it to nds32_break_insn
	and change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(nds32_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* nios2-tdep.c (nios2_gdbarch_init): Likewise.
	* rl78-tdep.c (breakpoint): Rename it to rl78_break_ins
	and change its type to rl78_break_insn.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(rl78_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* rs6000-tdep.c (big_breakpoint): Change its type to
	constexpr.
	(little_breakpoint): Likewise.
	Don't use GDBARCH_BREAKPOINT_MANIPULATION_ENDIAN.
	(rs6000_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* rx-tdep.c (breakpoint): Rename it to rx_break_insn and
	change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(rx_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* s390-linux-tdep.c (breakpoint): Rename it to s390_break_insn
	and change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION
	(s390_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* score-tdep.c (score_gdbarch_init): Likewise.
	* sh-tdep.c (sh_gdbarch_init): Likewise.
	* sh64-tdep.c (sh64_gdbarch_init): Likewise.
	* sparc-tdep.c (break_insn): Rename it to sparc_break_insn
	and change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(sparc32_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* spu-tdep.c (breakpoint): Rename it to spu_break_insn and change
	its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(spu_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* tic6x-tdep.c (tic6x_gdbarch_init): Likewise.
	* tilegx-tdep.c (breakpoint): Rename it to tilegx_break_insn
	and change its type to constexpr.  Don't use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(tilegx_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* v850-tdep.c (v850_gdbarch_init): Likewise.
	* vax-tdep.c (break_insn): Rename it to vax_break_insn and
	change its type to constexpr.
	Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(vax_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* xstormy16-tdep.c (breakpoint): Rename it to
	xstormy16_break_insn and change its type to constexpr.
	Don't use GDBARCH_BREAKPOINT_MANIPULATION.
	(xstormy16_gdbarch_init): Don't use
	SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* xtensa-tdep.c (xtensa_gdbarch_init): Likewise.
2016-11-03 14:35:14 +00:00
Yao Qi a97c97e8d7 Remove arm_override_mode
GDB can determine the kind of single step breakpoint by gdbarch
breakpoint_kind_from_current_state, so global variable
arm_override_mode is no longer needed.  This patch removes it.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* arm-tdep.c (arm_override_mode): Remove.
	(arm_pc_is_thumb): Update.
	(arm_insert_single_step_breakpoint): Update.
2016-11-03 14:35:14 +00:00
Yao Qi 833b7ab500 Determine the kind of single step breakpoint
This patch adds a new gdbarch method breakpoint_kind_from_current_state
for single step breakpoint, and uses it in breakpoint_kind.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* arch-utils.c (default_breakpoint_kind_from_current_state):
	New function.
	* arch-utils.h (default_breakpoint_kind_from_current_state):
	Declare.
	* arm-tdep.c (arm_breakpoint_kind_from_current_state): New
	function.
	(arm_gdbarch_init): Call
	set_gdbarch_breakpoint_kind_from_current_state.
	* breakpoint.c (breakpoint_kind): Call
	gdbarch_breakpoint_kind_from_current_state for single step
	breakpoint.  Update comments.
	* gdbarch.sh (breakpoint_kind_from_current_state): New.
	* gdbarch.c, gdbarch.h: Regenerate.
2016-11-03 14:35:14 +00:00
Yao Qi 22f13eb869 Add default_breakpoint_from_pc
This patch adds the default implementation of gdbarch breakpoint_from_pc,
which is,

const gdb_byte *
default_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
                           int *lenptr)
{
  int kind = gdbarch_breakpoint_kind_from_pc (gdbarch, pcptr);

  return gdbarch_sw_breakpoint_from_kind (gdbarch, kind, lenptr);
}

so gdbarch can only defines sw_breakpoint_from_kind and
breakpoint_kind_from_pc.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* arch-utils.c (default_breakpoint_from_pc): New function.
	* arch-utils.h (GDBARCH_BREAKPOINT_FROM_PC): Remove.
	(GDBARCH_BREAKPOINT_MANIPULATION): Don't use
	GDBARCH_BREAKPOINT_FROM_PC.
	(SET_GDBARCH_BREAKPOINT_MANIPULATION): Don't call
	set_gdbarch_breakpoint_from_pc.
	(default_breakpoint_from_pc): Remove declaration.
	* gdbarch.sh (breakpoint_from_pc): Add its default implementation.
	* gdbarch.c, gdbarch.h: Regenerate.
	* arm-tdep.c: Don't use GDBARCH_BREAKPOINT_FROM_PC.
	* arc-tdep.c, bfin-tdep.c, cris-tdep.c, iq2000-tdep.c: Likewise.
	* m32r-tdep.c, mips-tdep.c, mt-tdep.c: Likewise.
	* nios2-tdep.c, score-tdep.c, sh-tdep.c: Likewise.
	* sh64-tdep.c, tic6x-tdep.c, v850-tdep.c, xtensa-tdep.c: Likewise.
2016-11-03 14:35:14 +00:00
Yao Qi c0f4a997c2 Remove gdbarch_remote_breakpoint_from_pc
This patch removes gdbarch method remote_breakpoint_from_pc, as it
is no longer used.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* arch-utils.c (default_remote_breakpoint_from_pc): Remove.
	* arch-utils.h (default_remote_breakpoint_from_pc): Remove.
	* arm-tdep.c (arm_remote_breakpoint_from_pc): Remove.
	(arm_gdbarch_init): Don't call
	set_gdbarch_remote_breakpoint_from_pc.
	* gdbarch.sh (remote_breakpoint_from_pc): Remove.
	* gdbarch.c, gdbarch.h: Regenerate.
	* mips-tdep.c (mips_remote_breakpoint_from_pc): Remove.
	(mips_gdbarch_init): Don't call
	set_gdbarch_remote_breakpoint_from_pc.
2016-11-03 14:35:14 +00:00
Yao Qi 579c6ad983 Rename placed_size to kind
This patch renames placed_size to kind.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* breakpoint.h (struct bp_target_info) <placed_size>: Remove.
	<kind>: New field.
	Update all users.
2016-11-03 14:35:13 +00:00
Yao Qi cd6c3b4ffc New gdbarch methods breakpoint_kind_from_pc and sw_breakpoint_from_kind
This patch adds two gdbarch methods breakpoint_kind_from_pc and
sw_breakpoint_from_kind, and uses target_info.placed_size as "kind"
of the breakpoint.  This patch updates the usages of
target_info.placed_size.

The "kind" of a breakpoint is determined by gdbarch rather than
target, so we have gdbarch method breakpoint_kind_from_pc, and we
should set target_info.placed_size out of each implementation of
target to_insert_breakpoint.  In this way, each target doesn't have
to set target_info.placed_size any more.

This patch also sets target_info.placed_address before
target_insert_breakpoint too, so that target to_insert_breakpoint
can use it, see record_full_insert_breakpoint.

Before we call target_insert_breakpoint, we set
target_info.placed_address and target_info.placed_size like this,

      CORE_ADDR addr = bl->target_info.reqstd_address;

      bl->target_info.placed_size = gdbarch_breakpoint_kind_from_pc (bl->gdbarch, &addr);
      bl->target_info.placed_address = addr;

      return target_insert_breakpoint (bl->gdbarch, &bl->target_info);

target_insert_breakpoint may fail, but it doesn't matter to the "kind"
and "placed_address" of a breakpoint.  They should be determined by
gdbarch.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* arch-utils.h (GDBARCH_BREAKPOINT_MANIPULATION): Define
	breakpoint_kind_from_pc and sw_breakpoint_from_kind.
	(GDBARCH_BREAKPOINT_MANIPULATION_ENDIAN): Likewise.
	(SET_GDBARCH_BREAKPOINT_MANIPULATION): Call
	set_gdbarch_breakpoint_kind_from_pc and
	set_gdbarch_sw_breakpoint_from_kind.
	* arm-tdep.c: Add comments.
	* bfin-tdep.c: Likewise.
	* breakpoint.c (breakpoint_kind): New function.
	(insert_bp_location): Set target_info.placed_size and
	target_info.placed_address.
	(bkpt_insert_location): Likewise.
	* cris-tdep.c: Add comments.
	* gdbarch.sh (breakpoint_kind_from_pc): New.
	(sw_breakpoint_from_kind): New.
	* gdbarch.c, gdbarch.h: Regenerated.
	* ia64-tdep.c (ia64_memory_insert_breakpoint): Don't set
	bp_tgt->placed_size.
	(ia64_memory_remove_breakpoint): Don't assert
	bp_tgt->placed_size.
	(ia64_breakpoint_kind_from_pc): New function.
	(ia64_gdbarch_init): Install ia64_breakpoint_kind_from_pc.
	* m32r-tdep.c (m32r_memory_insert_breakpoint): Don't set
	bp_tgt->placed_size.
	* mem-break.c (default_memory_insert_breakpoint): Don't set
	bp_tgt->placed_size.  Call gdbarch_sw_breakpoint_from_kind.
	(default_memory_remove_breakpoint): Call
	gdbarch_sw_breakpoint_from_kind.
	(memory_validate_breakpoint): Don't check bp_tgt->placed_size.
	* mips-tdep.c: Add comments.
	* mt-tdep.c: Likewise.
	* nios2-tdep.c: Likewise.
	* record-full.c (record_full_insert_breakpoint): Don't call
	gdbarch_breakpoint_from_pc.  Don't set bp_tgt->placed_address
	and bp_tgt->placed_size.
	* remote.c (remote_insert_breakpoint): Don't call
	gdbarch_remote_breakpoint_from_pc.  Use bp_tgt->placed_size.
	Don't set bp_tgt->placed_address and bp_tgt->placed_size.
	(remote_insert_hw_breakpoint): Likewise.
	* score-tdep.c: Likewise.
	* sh-tdep.c: Likewise.
	* tic6x-tdep.c: Likewise.
	* v850-tdep.c: Likewise.
	* xtensa-tdep.c: Likewise.
2016-11-03 14:35:13 +00:00
Yao Qi d19280adb5 Split breakpoint_from_pc to breakpoint_kind_from_pc and sw_breakpoint_from_kind
We convert each ARCH_breakpoint_from_pc to ARCH_breakpoint_kind_from_pc
and ARCH_sw_breakpoint_from_kind.  Note that gdbarch doesn't have methods
breakpoint_kind_from_pc and sw_breakpoint_from_kind so far.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* arch-utils.h (GDBARCH_BREAKPOINT_FROM_PC): New macro.
	(GDBARCH_BREAKPOINT_MANIPULATION_ENDIAN): New macro.
	* arm-tdep.c (arm_breakpoint_from_pc): Remove.
	(arm_breakpoint_kind_from_pc): New function.
	(arm_sw_breakpoint_from_kind): New function.
	(arm_breakpoint_from_pc): Call arm_breakpoint_kind_from_pc
	and arm_sw_breakpoint_from_kind.
	Use GDBARCH_BREAKPOINT_FROM_PC.
	(arm_remote_breakpoint_from_pc): Call
	arm_breakpoint_kind_from_pc.
	(arm_gdbarch_init): Replace set_gdbarch_breakpoint_from_pc
	with SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* arc-tdep.c: Likewise.
	* bfin-tdep.c: Likewise.
	* cris-tdep.c: Likewise.
	* iq2000-tdep.c: Likewise.
	* m32r-tdep.c: Likewise.
	* mips-tdep.c: Likewise.
	* mt-tdep.c: Likewise.
	* nios2-tdep.c: Likewise.
	* rs6000-tdep.c: Likewise.
	* score-tdep.c: Likewise.
	* sh-tdep.c: Likewise.
	* sh64-tdep.c: Likewise.
	* tic6x-tdep.c: Likewise.
	* v850-tdep.c: Likewise.
	* xtensa-tdep.c: Likewise.
2016-11-03 14:35:13 +00:00
Yao Qi 44f1c4d7b0 Add enum for mips breakpoint kinds
This patch adds an enum mips_breakpoint_kind to avoid using magic
numbers as much as possible.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* mips-tdep.c (mips_breakpoint_kind): New enum.
	(mips_breakpoint_from_pc): Use it.
	(mips_remote_breakpoint_from_pc): Likewise.
2016-11-03 14:35:13 +00:00
Yao Qi 598cc9dc84 GDBARCH_BREAKPOINT_MANIPULATION and SET_GDBARCH_BREAKPOINT_MANIPULATION
Many archs have only one kind of breakpoint, so their breakpoint_from_pc
implementations are quite similar.  This patch uses macro
GDBARCH_BREAKPOINT_MANIPULATION and SET_GDBARCH_BREAKPOINT_MANIPULATION
for breakpoint_from_pc, so that we can easily switch from
breakpoint_from_pc to breakpoint_kind_from_pc and sw_breakpoint_from_kind
later.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* arch-utils.h (GDBARCH_BREAKPOINT_MANIPULATION): New macro.
	(SET_GDBARCH_BREAKPOINT_MANIPULATION): New macro.
	aarch64-tdep.c (aarch64_breakpoint_from_pc): Remove.  Use
	GDBARCH_BREAKPOINT_MANIPULATION.
	(aarch64_gdbarch_init): Replace set_gdbarch_breakpoint_from_pc
	with SET_GDBARCH_BREAKPOINT_MANIPULATION.
	* alpha-tdep.c: Likewise.
	* avr-tdep.c: Likewise.
	* frv-tdep.c: Likewise.
	* ft32-tdep.c: Likewise.
	* h8300-tdep.c: Likewise.
	* hppa-tdep.c: Likewise.
	* i386-tdep.c: Likewise.
	* lm32-tdep.c: Likewise.
	* m32c-tdep.c: Likewise.
	* m68hc11-tdep.c: Likewise.
	* m68k-tdep.c: Likewise.
	* m88k-tdep.c: Likewise.
	* mep-tdep.c: Likewise.
	* microblaze-tdep.c: Likewise.
	* mn10300-tdep.c: Likewise.
	* moxie-tdep.c: Likewise.
	* msp430-tdep.c: Likewise.
	* rl78-tdep.c: Likewise.
	* rx-tdep.c: Likewise.
	* s390-linux-tdep.c: Likewise.
	* sparc-tdep.c: Likewise.
	* spu-tdep.c: Likewise.
	* tilegx-tdep.c: Likewise.
	* vax-tdep.c: Likewise.
	* xstormy16-tdep.c: Likewise.
2016-11-03 14:35:13 +00:00
Yao Qi 8b55a7e4e5 gdbarch_breakpoint_from_pc doesn't return NULL
gdbarch_breakpoint_from_pc doesn't return NULL except for
ia64_breakpoint_from_pc, and we checked its return value in three
places. In microblaze_linux_memory_remove_breakpoint and
ppc_linux_memory_remove_breakpoint, gdbarch_breakpoint_from_pc never
returns NULL, so we can remove the NULL checking.  In
default_memory_insert_breakpoint, gdbarch_breakpoint_from_pc can't
returns NULL too because ia64 defines its own memory_insert_breakpoint.

gdb:

2016-11-03  Yao Qi  <yao.qi@linaro.org>

	* mem-break.c (default_memory_insert_breakpoint): Don't check
	'bp' against NULL.
	* microblaze-linux-tdep.c (microblaze_linux_memory_remove_breakpoint):
	Likewise.
	* ppc-linux-tdep.c (ppc_linux_memory_remove_breakpoint): Likewise.
2016-11-03 14:35:13 +00:00
Tom Tromey 7d5697f9e2 Fix dwarf_expr_context method regressions
This fixes some regressions found in the patch to convert
dwarf_expr_context to use methods.  Specifically:

* get_base_type could erroneously throw; this was rewritten to move
  the size checks into the only spot needing them.
* Previously the "symbol needs frame" implementation reused th
  "cfa" function for the get_frame_pc slot; this reimplements
  it under the correct name.
* Not enough members were saved and restored in one implementation
  of push_dwarf_reg_entry_value; this patch fixes this oversight
  and also takes the opportunity to remove an extraneous structure
  definition.

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

	* dwarf2loc.c (dwarf_evaluate_loc_desc::get_base_type): Rename
	from impl_get_base_type.  Rewrite.
	(struct dwarf_expr_baton): Remove.
	(dwarf_evaluate_loc_desc::push_dwarf_reg_entry_value): Save and
	restore more fields.
	(symbol_needs_eval_context::get_frame_pc): New method.
	* dwarf2expr.h (dwarf_expr_context::get_base_type): Now public,
	virtual.
	(dwarf_expr_context::impl_get_base_type): Remove.
	* dwarf2expr.c (dwarf_expr_context::get_base_type): Remove.
2016-11-02 16:01:38 -06:00
Maciej W. Rozycki c50730217d Remove IRIX 5 <sys/proc.h> _KMEMUSER workaround
Complement commit 3831839c08 ("Delete IRIX support") and remove the
IRIX 5 <sys/proc.h> _KMEMUSER workaround from the `configure' script, as
IRIX is no longer a supported host configuration.

	gdb/
	* configure.ac <mips-sgi-irix5*>: Remove <sys/proc.h> _KMEMUSER
	workaround.
	* configure: Regenerate.
	* config.in: Regenerate.
2016-10-31 17:06:24 +00:00
Maciej W. Rozycki 7e3d947dd6 MIPS: Remove remains of legacy remote target support
Complement commit f7c382926d ("Remove support for "target m32rsdi" and
"target mips/pmon/ddb/rockhopper/lsi"") and remove dead MIPS target code
which used to support these legacy remote targets.

	gdb/
	* mips-tdep.c (mips_r3041_reg_names): Remove.
	(mips_breakpoint_from_pc): Remove IDT and PMON breakpoint
	encodings.
2016-10-31 16:18:14 +00:00
Maciej W. Rozycki de4bfa865e MIPS: Remove remains of IRIX OS ABI support
Complement commit 3831839c08 ("Delete IRIX support") and remove dead
MIPS target IRIX OS ABI support code.

	gdb/
	* defs.h (gdb_osabi): Remove GDB_OSABI_IRIX enum value.
	* osabi.c (gdb_osabi_names): Remove "Irix" entry.
	* mips-tdep.c (mips_irix_reg_names): Remove.
	(mips_register_type): Remove GDB_OSABI_IRIX code.
	(mips_pseudo_register_type): Likewise.
	(mips_breakpoint_from_pc): Likewise.
	(mips_gdbarch_init): Likewise.
2016-10-31 16:16:41 +00:00
Pedro Alves e6485aafde gdb/NEWS: Clarify C++ requirement
gdb/ChangeLog:
2016-10-29  Pedro Alves  <palves@redhat.com>

	* NEWS: Clarify C++ requirement.
2016-10-29 16:30:34 +01:00
Pedro Alves d294692353 gdb/NEWS: Mention C++11 requirement
gdb/ChangeLog:
2016-10-29  Pedro Alves  <palves@redhat.com>

	* NEWS: Adjust to mention C++11 requirement.
2016-10-29 16:14:36 +01:00
Eli Zaretskii 8ba42bc5da Support command-line redirection in native MS-Windows debugging
gdb/ChangeLog
2016-10-29  Eli Zaretskii  <eliz@gnu.org>

	* NEWS: Mention support for redirection on MS-Windows.

	* windows-nat.c (redir_open, redir_set_redirection)
	(redirect_inferior_handles) [!__CYGWIN__]: New functions.
	(windows_create_inferior) [!__CYGWIN__]: Use
	'redirect_inferior_handles' to redirect standard handles of the
	debuggee if the command line requests that.
2016-10-29 18:10:23 +03:00
Pedro Alves 39402e6c64 gdb/doc: Remove mention of vCont's default actions
Discussion with qemu folks suggests that the vCont description could
be even simpler and clearer.  Given we now say:

 For each inferior thread, the leftmost action with a matching
 thread-id is applied.

There's really no need to even talk about "default" actions, which
raises doubts about whether "default" is special in some way (it's
not).

See <https://lists.gnu.org/archive/html/qemu-devel/2016-10/msg06944.html>.

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

	* gdb.texinfo (Packets) <vCont>: Remove mention of default
	actions.
2016-10-29 16:07:31 +01:00
Pedro Alves 0bcda68539 gdb: Require C++11
Use AX_CXX_COMPILE_STDCXX to detect if the compiler supports C++11,
and if -std=xxx switches are necessary to enable C++11.

We need to tweak AX_CXX_COMPILE_STDCXX a bit though.  Pristine
upstream AX_CXX_COMPILE_STDCXX appends -std=gnu++11 to CXX directly.
That doesn't work for us, because the top level Makefile passes CXX
down to subdirs, and that overrides whatever gdb/Makefile may set CXX
to.  The result would be that a make invocation from the build/gdb/
directory would use "g++ -std=gnu++11" as expected, while a make
invocation at the top level would not.

So instead of having AX_CXX_COMPILE_STDCXX set CXX directly, tweak it
to AC_SUBST a separate variable -- CXX_DIALECT -- and use '$(CXX)
(CXX_DIALECT)' to compile/link.

Confirmed that this enables C++11 starting with gcc 4.8, the first gcc
release with full C++11 support.

Also confirmed that configure errors out gracefully with older GCC
releases:

  checking whether /opt/gcc-4.7/bin/g++ supports C++11 features by default... no
  checking whether /opt/gcc-4.7/bin/g++ supports C++11 features with -std=gnu++11... no
  checking whether /opt/gcc-4.7/bin/g++ supports C++11 features with -std=gnu++0x... no
  checking whether /opt/gcc-4.7/bin/g++ supports C++11 features with -std=c++11... no
  checking whether /opt/gcc-4.7/bin/g++ supports C++11 features with -std=c++0x... no
  checking whether /opt/gcc-4.7/bin/g++ supports C++11 features with +std=c++11... no
  checking whether /opt/gcc-4.7/bin/g++ supports C++11 features with -h std=c++11... no
  configure: error: *** A compiler with support for C++11 language features is required.
  Makefile:9451: recipe for target 'configure-gdb' failed
  make[1]: *** [configure-gdb] Error 1
  make[1]: Leaving directory '/home/pedro/brno/pedro/gdb/mygit/cxx-convertion/build-gcc-4.7'

If we need to revert back to making C++11 optional, all that's
necessary is to change the "mandatory" to "optional" in configure.ac
and regenerate configure (both gdb and gdbserver).

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

	* Makefile.in (CXX_DIALECT): Get from configure.
	(COMPILE.pre, CC_LD): Append $(CXX_DIALECT).
	(FLAGS_TO_PASS): Pass CXX_DIALECT.
	* acinclude.m4: Include ax_cxx_compile_stdcxx.m4.
	* ax_cxx_compile_stdcxx.m4: Add FSF copyright header.  Set and
	AC_SUBST CXX_DIALECT instead of changing CXX/CXXCPP.
	* configure.ac: Call AX_CXX_COMPILE_STDCXX.
	* config.in: Regenerate.
	* configure: Regenerate.

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

	* Makefile.in (CXX_DIALECT): Get from configure.
	(COMPILE.pre, CC_LD): Append $(CXX_DIALECT).
	* acinclude.m4: Include ../ax_cxx_compile_stdcxx.m4.
	* configure.ac: Call AX_CXX_COMPILE_STDCXX.
	* config.in: Regenerate.
	* configure: Regenerate.
2016-10-28 16:03:19 +01:00
Pedro Alves 87106a7b0a gdb: Import AX_CXX_COMPILE_STDCXX from the GNU Autoconf Archive
This macro throws C++11 code at the compiler in order to check whether
it supports C++11.  final/override, rvalue references, static_assert,
decltype, auto, constexpr, etc., and adds -std=gnu++11 to CXX if
necessary.

Nothing uses the macro yet.  Simply adding it as separate preliminary
step because we'll need local changes.

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

	* ax_cxx_compile_stdcxx.m4: New file.
2016-10-28 16:00:38 +01:00
Pedro Alves f610ab6d3c gdb/testsuite: Avoid a buffer overrun in `gdb.base/maint.exp'
Fixes:

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

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

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

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

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

Notice the presence of source file information.

Now, on my local machine, i get this:

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

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

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

gdb/testsuite/ChangeLog:

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

	* gdb.base/foll-exec.exp (do_exec_tests): Make test pattern more
	general.
2016-10-28 08:45:27 -05:00
Pedro Alves 44d83468ec Fix gdb.base/maint.exp regressions
This commit fixes these regressions:

 FAIL: gdb.base/maint.exp: mt set per on for expand-symtabs
 FAIL: gdb.base/maint.exp: maint set per-command on

caused by commit 1e3b796d58 ("Change command stats reporting to use
class").

gdb.log shows that the command stats are now printing garbage:

 (gdb) mt set per on
 Command execution time: -6.-419590 (cpu), 1467139648.-7706296840 (wall)
 Space used: 9809920 (-33276528 for this command)
 (gdb) FAIL: gdb.base/maint.exp: mt set per on for expand-symtabs

while there should have been no output at all.

The stats printing is done from within the scoped_command_stats's
destructor, depending on whether some flags in the object are set.
The problem is simply that scoped_command_stats's ctor misses clearing
those flags on some paths.

Since scoped_command_stats objects are allocated on the stack, whether
you'll see the regression simply depends on whatever happens to
already be on the stack space the object occupies.

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

	* maint.c (scoped_command_stats::scoped_command_stats): Clear
	m_space_enabled, m_time_enabled and m_symtab_enabled.
2016-10-28 12:24:38 +01:00
Markus Metzger d87fdac359 btrace: bridge gaps
Most of the time, the trace should be in one piece.  This case is handled fine
by GDB.  In some cases, however, there may be gaps in the trace.  They result
from trace decode errors or from overflows.

A gap in the trace means we lost an unknown amount of trace.  Gaps can be very
small, such as a few instructions in the same function, or they can be rather
big.  We may, for example, lose a few function calls or returns.  The trace may
continue in a different function and we likely don't know how we got there.

Even though we can't say how the program executed across a gap, higher levels
may not be impacted too much by it.  Let's assume we have functions a-e and a
trace that looks roughly like this:

  a
   \
    b                    b
     \                  /
      c   <gap>        c
                      /
                 d   d
                  \ /
                   e

Even though we can't say for sure, it is likely that b and c are the same
function instance before and after the gap.  This patch is trying to connect
the c and b function segments across the gap.

This will add a to the back trace of b on the right hand side.  The changes are
reflected in GDB's internal representation of the trace and will improve:

  - the output of "record function-call-history /c"
  - the output of "backtrace" in replay mode
  - source stepping in replay mode
    will be improved indirectly via the improved back trace

I don't have an automated test for this patch; decode errors will be fixed and
overflows occur sporadically and are quite rare.  I tested it by hacking GDB to
provoke a decode error and on the expected gap in the gdb.btrace/dlopen.exp
test.

The issue is that we can't predict where we will be able to re-sync in case of
errors.  For the expected decode error in gdb.btrace/dlopen.exp, for example, we
may be able to re-sync somewhere in dlclose, in test, in main, or not at all.

Here's one example run of gdb.btrace/dlopen.exp with and without this patch.

    (gdb) info record
    Active record target: record-btrace
    Recording format: Intel Processor Trace.
    Buffer size: 16kB.
    warning: Non-contiguous trace at instruction 66608 (offset = 0xa83, pc = 0xb7fdcc31).
    warning: Non-contiguous trace at instruction 66652 (offset = 0xa9b, pc = 0xb7fdcc31).
    warning: Non-contiguous trace at instruction 66770 (offset = 0xacb, pc = 0xb7fdcc31).
    warning: Non-contiguous trace at instruction 66966 (offset = 0xb60, pc = 0xb7ff5ee4).
    warning: Non-contiguous trace at instruction 66994 (offset = 0xb74, pc = 0xb7ff5f24).
    warning: Non-contiguous trace at instruction 67334 (offset = 0xbac, pc = 0xb7ff5e6d).
    warning: Non-contiguous trace at instruction 69022 (offset = 0xc04, pc = 0xb7ff60b3).
    warning: Non-contiguous trace at instruction 69116 (offset = 0xc1c, pc = 0xb7ff60b3).
    warning: Non-contiguous trace at instruction 69504 (offset = 0xc74, pc = 0xb7ff605d).
    warning: Non-contiguous trace at instruction 83648 (offset = 0xecc, pc = 0xb7ff6134).
    warning: Decode error (-13) at instruction 83876 (offset = 0xf48, pc = 0xb7fd6380): no memory mapped at this address.
    warning: Non-contiguous trace at instruction 83876 (offset = 0x11b7, pc = 0xb7ff1c70).
    Recorded 83948 instructions in 912 functions (12 gaps) for thread 1 (process 12996).
    (gdb) record instruction-history 83876, +2
    83876   => 0xb7fec46f <call_init.part.0+95>:    call   *%eax
    [decode error (-13): no memory mapped at this address]
    [disabled]
    83877      0xb7ff1c70 <_dl_close_worker.part.0+1584>:   nop

Without the patch, the trace is disconnected and the backtrace is short:

    (gdb) record goto 83876
    #0  0xb7fec46f in call_init.part () from /lib/ld-linux.so.2
    (gdb) backtrace
    #0  0xb7fec46f in call_init.part () from /lib/ld-linux.so.2
    #1  0xb7fec5d0 in _dl_init () from /lib/ld-linux.so.2
    #2  0xb7ff0fe3 in dl_open_worker () from /lib/ld-linux.so.2
    Backtrace stopped: not enough registers or memory available to unwind further
    (gdb) record goto 83877
    #0  0xb7ff1c70 in _dl_close_worker.part.0 () from /lib/ld-linux.so.2
    (gdb) backtrace
    #0  0xb7ff1c70 in _dl_close_worker.part.0 () from /lib/ld-linux.so.2
    #1  0xb7ff287a in _dl_close () from /lib/ld-linux.so.2
    #2  0xb7fc3d5d in dlclose_doit () from /lib/libdl.so.2
    #3  0xb7fec354 in _dl_catch_error () from /lib/ld-linux.so.2
    #4  0xb7fc43dd in _dlerror_run () from /lib/libdl.so.2
    #5  0xb7fc3d98 in dlclose () from /lib/libdl.so.2
    #6  0x0804860a in test ()
    #7  0x08048628 in main ()

With the patch, GDB is able to connect the trace pieces and we get a full
backtrace.

    (gdb) record goto 83876
    #0  0xb7fec46f in call_init.part () from /lib/ld-linux.so.2
    (gdb) backtrace
    #0  0xb7fec46f in call_init.part () from /lib/ld-linux.so.2
    #1  0xb7fec5d0 in _dl_init () from /lib/ld-linux.so.2
    #2  0xb7ff0fe3 in dl_open_worker () from /lib/ld-linux.so.2
    #3  0xb7fec354 in _dl_catch_error () from /lib/ld-linux.so.2
    #4  0xb7ff02e2 in _dl_open () from /lib/ld-linux.so.2
    #5  0xb7fc3c65 in dlopen_doit () from /lib/libdl.so.2
    #6  0xb7fec354 in _dl_catch_error () from /lib/ld-linux.so.2
    #7  0xb7fc43dd in _dlerror_run () from /lib/libdl.so.2
    #8  0xb7fc3d0e in dlopen@@GLIBC_2.1 () from /lib/libdl.so.2
    #9  0xb7ff28ee in _dl_runtime_resolve () from /lib/ld-linux.so.2
    #10 0x0804841c in ?? ()
    #11 0x08048470 in dlopen@plt ()
    #12 0x080485a3 in test ()
    #13 0x08048628 in main ()
    (gdb) record goto 83877
    #0  0xb7ff1c70 in _dl_close_worker.part.0 () from /lib/ld-linux.so.2
    (gdb) backtrace
    #0  0xb7ff1c70 in _dl_close_worker.part.0 () from /lib/ld-linux.so.2
    #1  0xb7ff287a in _dl_close () from /lib/ld-linux.so.2
    #2  0xb7fc3d5d in dlclose_doit () from /lib/libdl.so.2
    #3  0xb7fec354 in _dl_catch_error () from /lib/ld-linux.so.2
    #4  0xb7fc43dd in _dlerror_run () from /lib/libdl.so.2
    #5  0xb7fc3d98 in dlclose () from /lib/libdl.so.2
    #6  0x0804860a in test ()
    #7  0x08048628 in main ()

It worked nicely in this case but it may, of course, also lead to weird
connections; it is a heuristic, after all.

It works best when the gap is small and the trace pieces are long.

gdb/
	* btrace.c (bfun_s): New typedef.
	(ftrace_update_caller): Print caller in debug dump.
	(ftrace_get_caller, ftrace_match_backtrace, ftrace_fixup_level)
	(ftrace_compute_global_level_offset, ftrace_connect_bfun)
	(ftrace_connect_backtrace, ftrace_bridge_gap, btrace_bridge_gaps): New.
	(btrace_compute_ftrace_bts): Pass vector of gaps.  Collect gaps.
	(btrace_compute_ftrace_pt): Likewise.
	(btrace_compute_ftrace): Split into this, ...
	(btrace_compute_ftrace_1): ... this, and ...
	(btrace_finalize_ftrace): ... this.  Call btrace_bridge_gaps.
2016-10-28 11:05:07 +02:00
Markus Metzger 259ba1e8ac btrace: preserve function level for unexpected returns
When encountering a return for which we have not seen a corresponding call, GDB
starts a new back trace from level -1, i.e. from the level of the first function
in the trace.

In the presence of trace gaps, this may cause some rather big jump.

    (gdb) record function-call-history /c 192, +8
    192	                                          sbrk
    193	                                            brk
    194	                                              __x86.get_pc_thunk.bx
    195	                                            brk
    196	                                              __kernel_vsyscall
    197	[disabled]
    198	                                              __kernel_vsyscall
    199	        brk
    200	      sbrk

This doesn't help to make things more clear.  Let's remain on the same level
instead.

    (gdb) record function-call-history /c 192, +8
    192	      sbrk
    193	        brk
    194	          __x86.get_pc_thunk.bx
    195	        brk
    196	          __kernel_vsyscall
    197	[disabled]
    198	          __kernel_vsyscall
    199	        brk
    200	      sbrk

In this case it will look like we were able to connect the trace parts across
the disabled gap.  We were not.  More work is required to achieve this.

In the general case, the function-call history for the two trace parts won't
match.  They may be off by a few levels or they may be entirely different.  All
this patch does is to preserve the indentation level of the record
function-call-history command.

The disabled gap is caused by a sysenter not returning to the next instruction.

    (gdb) record function-call-history /i 196, +1
    196     __kernel_vsyscall       inst 66515,66519
    (gdb) record instruction-history 66515
    66515      0xb7fdcbf8 <__kernel_vsyscall+0>:    push   %ecx
    66516      0xb7fdcbf9 <__kernel_vsyscall+1>:    push   %edx
    66517      0xb7fdcbfa <__kernel_vsyscall+2>:    push   %ebp
    66518      0xb7fdcbfb <__kernel_vsyscall+3>:    mov    %esp,%ebp
    66519      0xb7fdcbfd <__kernel_vsyscall+5>:    sysenter
    [disabled]
    66520      0xb7fdcc08 <__kernel_vsyscall+16>:   pop    %ebp
    66521      0xb7fdcc09 <__kernel_vsyscall+17>:   pop    %edx
    66522      0xb7fdcc0a <__kernel_vsyscall+18>:   pop    %ecx
    66523      0xb7fdcc0b <__kernel_vsyscall+19>:   ret
    66524      0xb7e8e09e <brk+30>: xchg   %ecx,%ebx
    (gdb) disassemble 0xb7fdcbf8, 0xb7fdcc0c
    Dump of assembler code from 0xb7fdcbf8 to 0xb7fdcc0c:
       0xb7fdcbf8 <__kernel_vsyscall+0>:    push   %ecx
       0xb7fdcbf9 <__kernel_vsyscall+1>:    push   %edx
       0xb7fdcbfa <__kernel_vsyscall+2>:    push   %ebp
       0xb7fdcbfb <__kernel_vsyscall+3>:    mov    %esp,%ebp
       0xb7fdcbfd <__kernel_vsyscall+5>:    sysenter
       0xb7fdcbff <__kernel_vsyscall+7>:    nop
       0xb7fdcc00 <__kernel_vsyscall+8>:    nop
       0xb7fdcc01 <__kernel_vsyscall+9>:    nop
       0xb7fdcc02 <__kernel_vsyscall+10>:   nop
       0xb7fdcc03 <__kernel_vsyscall+11>:   nop
       0xb7fdcc04 <__kernel_vsyscall+12>:   nop
       0xb7fdcc05 <__kernel_vsyscall+13>:   nop
       0xb7fdcc06 <__kernel_vsyscall+14>:   int    $0x80
       0xb7fdcc08 <__kernel_vsyscall+16>:   pop    %ebp
       0xb7fdcc09 <__kernel_vsyscall+17>:   pop    %edx
       0xb7fdcc0a <__kernel_vsyscall+18>:   pop    %ecx
       0xb7fdcc0b <__kernel_vsyscall+19>:   ret
    End of assembler dump.

I've seen this on 32-bit Fedora 23.  I have not investigated what causes this
and whether we can avoid the gap in the first place.  Let's first try to make
GDB handle such gaps more gracefully.

gdb/
	* btrace.c (ftrace_new_return): Start from the previous function's level
	if we can't find a matching call for a return.
2016-10-28 11:00:08 +02:00
Markus Metzger 2dfdb47abd btrace: update tail call heuristic
An unconditional jump to the start of a function typically indicates a tail
call.

If we can't determine the start of the function at the destination address, we
used to treat it as a tail call, as well.  This results in lots of tail calls
for code for which we don't have symbol information.

Restrict the heuristic to only consider jumps as tail calls that switch
functions in the case where we can't determine the start of a function.  This
effectively disables tail call detection for code without symbol information.

gdb/
	* btrace.c (ftrace_update_function): Update tail call heuristic.
2016-10-28 10:57:16 +02:00
Markus Metzger b61ce85cc5 btrace: allow leading trace gaps
GDB ignores trace gaps from decode errors or overflows at the beginning of the
trace.  There isn't really a gap in the trace; the trace just starts a bit
later than expected.

In cases where there is no trace at all or where the trace is smaller than
expected, this may hide the reason for the missing trace.

Allow leading trace gaps.  They will be shown as decode warnings and by the
record function-call-history command.

    (gdb) info record
    Active record target: record-btrace
    Recording format: Intel Processor Trace.
    Buffer size: 16kB.
    warning: Decode error (-6) at instruction 0 (offset = 0x58, pc = 0x0): unexpected packet context.
    warning: Decode error (-6) at instruction 0 (offset = 0xb0, pc = 0x0): unexpected packet context.
    warning: Decode error (-6) at instruction 0 (offset = 0x168, pc = 0x0): unexpected packet context.
    warning: Decode error (-6) at instruction 54205 (offset = 0xe08, pc = 0x0): unexpected packet context.
    warning: Decode error (-6) at instruction 54205 (offset = 0xe60, pc = 0x0): unexpected packet context.
    warning: Decode error (-6) at instruction 54205 (offset = 0xed8, pc = 0x0): unexpected packet context.
    Recorded 91582 instructions in 1111 functions (6 gaps) for thread 1 (process 15710).
    (gdb) record function-call-history /c 1
    1       [decode error (-6): unexpected packet context]
    2       [decode error (-6): unexpected packet context]
    3       [decode error (-6): unexpected packet context]
    4           _dl_addr
    5             ??
    6           _dl_addr
    7         ??
    8           ??
    9         ??
    10      ??

Leading trace gaps will not be shown by the record instruction-history command
without further changes.

gdb/
	* btrace.c (btrace_compute_ftrace_bts, ftrace_add_pt): Allow leading gaps.
	* record-btrace.c (record_btrace_single_step_forward)
	(record_btrace_single_step_backward): Jump back to last instruction if
	step ends at a gap.
	(record_btrace_goto_begin): Skip gaps.
2016-10-28 10:53:45 +02:00
Markus Metzger 63ab433e29 btrace: fix gap indication
Trace gaps due to overflows or non-contiguous trace are ignored in the 'info
record' command.  Fix that.

Also add a warning when decoding the trace and print the instruction number
preceding the trace gap in that warning message.  It looks like this:

    (gdb) info record
    Active record target: record-btrace
    Recording format: Intel Processor Trace.
    Buffer size: 16kB.
    warning: Decode error (-13) at instruction 101044 (offset = 0x29f0, pc = 0x7ffff728a642): no memory mapped at this address.
    Recorded 101044 instructions in 2093 functions (1 gaps) for thread 1 (process 5360).
    (gdb) record instruction-history 101044
    101044     0x00007ffff728a640:  pop    %r13
    [decode error (-13): no memory mapped at this address]

Remove the dead code that was supposed to print a gaps warning at the end of
trace decode.  This isn't really needed since we now print a warning for each
gap.

gdb/
	* btrace.c (ftrace_add_pt): Fix gap indication.  Add warning for non-
	contiguous trace and overflow.  Rephrase trace decode warning and print
	instruction number.  Remove dead gaps warning.
	(btrace_compute_ftrace_bts): Rephrase warnings and print instruction
	number.
2016-10-28 10:49:27 +02:00
Yao Qi c38058942e Enable range stepping if software single step is supported
If the target can do software single step, it can do range
stepping.

gdb/gdbserver:

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

	* linux-low.c (linux_supports_agent): Return true if
	can_software_single_step return true.
2016-10-27 16:05:06 +01:00
Yao Qi 8934261877 Get pending events in random
Nowadays, we select events to be reported to GDB in random, however
that is not enough when many GDBserver internal events (not reported
to GDB) are generated.

GDBserver pulls all events out of kernel via waitpid, and leave them
pending.  When goes through threads which have pending events,
GDBserver uses find_inferior to find the first thread which has
pending event, and consumes it.  Note that find_inferior always
iterate threads in a fixed order.  If multiple threads keep hitting
GDBserver breakpoints, range stepping with single-step breakpoint for
example, threads in the head of the thread list are more likely to be
processed and threads in the tail are starved.  This causes some timeout
fails in gdb.threads/non-stop-fair-events.exp when range stepping is
enabled on arm-linux.

This patch fixes this issue by randomly selecting pending events.  It
adds a new function find_inferior_in_random, which iterates threads
which have pending events randomly.

gdb/gdbserver:

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

	* inferiors.c (find_inferior_in_random): New function.
	* inferiors.h (find_inferior_in_random): Declare.
	* linux-low.c (linux_wait_for_event_filtered): Call
	find_inferior_in_random instead of find_inferior.
2016-10-27 16:05:06 +01:00
Yao Qi e3652c8460 Remove single-step breakpoint for GDBserver internal event
This patch removes single-step breakpoints if the event is only
GDBserver internal, IOW, isn't reported back to GDB.

gdb/gdbserver:

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

	* linux-low.c (linux_wait_1): If single-step breakpoints are
	inserted, remove them.
2016-10-27 16:05:06 +01:00
Sandra Loosemore ecf45d2cc7 PR 20569, segv in follow_exec
The following testcases make GDB crash whenever an invalid sysroot is
provided, when GDB is unable to find a valid path to the symbol file:

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

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

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

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

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

Tested on x86_64 Fedora 23, native and gdbserver.

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

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

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

	* gdb.base/exec-invalid-sysroot.exp: New file.
2016-10-26 16:47:46 +01:00
Pedro Alves b15cc25cbe Make symfile_add_flags and objfile->flags strongly typed
This makes these flag types be "enum flag" types.  The benefit is
making use of C++'s stronger typing -- mixing the flags types by
mistake errors at compile time.

This caught one old bug in symbol_file_add_main_1 already, fixed by
this patch as well:

  @@ -1318,7 +1326,7 @@ symbol_file_add_main_1 (const char *args, int from_tty, int flags)
	what is frameless.  */
     reinit_frame_cache ();

  -  if ((flags & SYMFILE_NO_READ) == 0)
  +  if ((add_flags & SYMFILE_NO_READ) == 0)
       set_initial_language ();
   }

Above, "flags" are objfile flags, not symfile_add_flags.  So that was
actually checking for "flag & OBJF_PSYMTABS_READ", which has the same
value as SYMFILE_NO_READ...

I moved the flags definitions to separate files to break circular
dependencies.

Built with --enable-targets=all and tested on x86-64 Fedora 23.

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

	* coffread.c (coff_symfile_read): Use symfile_add_flags.
	* dbxread.c (dbx_symfile_read): Ditto.
	* elfread.c (elf_symfile_read): Ditto.
	* inferior.h: Include symfile-add-flags.h.
	(struct inferior) <symfile_flags>: Now symfile_add_flags.
	* machoread.c (macho_add_oso_symfile, macho_symfile_read_all_oso)
	(macho_symfile_read, mipscoff_symfile_read): Use
	symfile_add_flags.
	* objfile-flags.h: New file.
	* objfiles.c (allocate_objfile): Use objfile_flags.
	* objfiles.h: Include objfile-flags.h.
	(struct objfile) <flags>: Now an objfile_flags.
	(OBJF_REORDERED, OBJF_SHARED, OBJF_READNOW, OBJF_USERLOADED)
	(OBJF_PSYMTABS_READ, OBJF_MAINLINE, OBJF_NOT_FILENAME): Delete.
	Converted to an enum-flags in objfile-flags.h.
	(allocate_objfile): Use objfile_flags.
	* python/py-objfile.c (objfpy_add_separate_debug_file): Remove
	unnecessary local.
	* solib.c (solib_read_symbols, solib_add)
	(reload_shared_libraries_1): Use symfile_add_flags.
	* solib.h: Include "symfile-add-flags.h".
	(solib_read_symbols): Use symfile_add_flags.
	* symfile-add-flags.h: New file.
	* symfile-debug.c (debug_sym_read): Use symfile_add_flags.
	* symfile-mem.c (symbol_file_add_from_memory): Use
	symfile_add_flags.
	* symfile.c (read_symbols, syms_from_objfile_1)
	(syms_from_objfile, finish_new_objfile): Use symfile_add_flags.
	(symbol_file_add_with_addrs): Use symfile_add_flags and
	objfile_flags.
	(symbol_file_add_separate): Use symfile_add_flags.
	(symbol_file_add_from_bfd, symbol_file_add): Use symfile_add_flags
	and objfile_flags.
	(symbol_file_add_main_1): : Use objfile_flags.  Fix add_flags vs
	flags confusion.
	(symbol_file_command): Use objfile_flags.
	(add_symbol_file_command): Use symfile_add_flags and
	objfile_flags.
	(clear_symtab_users): Use symfile_add_flags.
	* symfile.h: Include "symfile-add-flags.h" and "objfile-flags.h".
	(struct sym_fns) <sym_read>: Use symfile_add_flags.
	(clear_symtab_users): Use symfile_add_flags.
	(enum symfile_add_flags): Delete, moved to symfile-add-flags.h and
	converted to enum-flags.
	(symbol_file_add, symbol_file_add_from_bfd)
	(symbol_file_add_separate): Use symfile_add_flags.
	* xcoffread.c (xcoff_initial_scan): Use symfile_add_flags.
2016-10-26 16:47:10 +01:00
Pedro Alves 85ad3aaf40 gdb: Coalesce/aggregate (async) vCont packets/actions
Currently, with "maint set target-non-stop on", that is, when gdb
connects with the non-stop/asynchronous variant of the remote
protocol, even with "set non-stop off", GDB always sends one vCont
packet per thread resumed.  This patch makes GDB aggregate and
coalesce vCont packets, so we send vCont packets like "vCont;s:p1.1;c"
in non-stop mode too.

Basically, this is done by:

  - Adding a new target method target_commit_resume that is called
    after calling target_resume one or more times.  When resuming a
    batch of threads, we'll only call target_commit_resume once after
    calling target_resume for all threads.

  - Making the remote target defer sending the actual vCont packet to
    target_commit_resume.

Special care must be taken to avoid sending a vCont action with a
"wildcard" thread-id (all threads of process / all threads) when that
would resume threads/processes that should not be resumed.  See
remote_commit_resume comments for details.

Unlike all-stop's remote_resume implementation, this handles the case
of too many actions resulting in a too-big vCont packet, by flushing
the vCont packet and starting a new one.

E.g., imagining that the "c" action in:

  vCont;s:1;c

overflows the packet buffer, we split the actions like:

  vCont;s:1
  vCont;c

Tested on x86_64 Fedora 20, with and without "maint set
target-non-stop on".

Also tested with a hack that makes remote_commit_resume flush the vCont
packet after every action appended (which caught a few bugs).

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

	* inferior.h (ALL_NON_EXITED_INFERIORS): New macro.
	* infrun.c (do_target_resume): Call target_commit_resume.
	(proceed): Defer target_commit_resume while looping over threads,
	resuming them.  Call target_commit_resume at the end.
	* record-btrace.c (record_btrace_commit_resume): New function.
	(init_record_btrace_ops): Install it as to_commit_resume method.
	* record-full.c (record_full_commit_resume): New function.
	(record_full_wait_1): Call the beneath target's to_commit_resume
	method.
	(init_record_full_ops): Install record_full_commit_resume as
	to_commit_resume method.
	* remote.c (struct private_thread_info) <last_resume_step,
	last_resume_sig, vcont_resumed>: New fields.
	(remote_add_thread): Set the new thread's vcont_resumed flag.
	(demand_private_info): Delete.
	(get_private_info_thread, get_private_info_ptid): New functions.
	(remote_update_thread_list): Adjust.
	(process_initial_stop_replies): Clear the thread's vcont_resumed
	flag.
	(remote_resume): If connected in non-stop mode, record the resume
	request and return early.
	(struct private_inferior): New.
	(struct vcont_builder): New.
	(vcont_builder_restart, vcont_builder_flush)
	(vcont_builder_push_action): New functions.
	(MAX_ACTION_SIZE): New macro.
	(remote_commit_resume): New function.
	(thread_pending_fork_status, is_pending_fork_parent_thread): New
	functions.
	(check_pending_event_prevents_wildcard_vcont_callback)
	(check_pending_events_prevent_wildcard_vcont): New functions.
	(process_stop_reply): Adjust.  Clear the thread's vcont_resumed
	flag.
	(init_remote_ops): Install remote_commit_resume.
	* target-delegates.c: Regenerate.
	* target.c (defer_target_commit_resume): New global.
	(target_commit_resume, make_cleanup_defer_target_commit_resume):
	New functions.
	* target.h (struct target_ops) <to_commit_resume>: New field.
	(target_resume): Update comments.
	(target_commit_resume): New declaration.
2016-10-26 16:22:50 +01:00
Pedro Alves 5a04c4cf5d gdbserver: Leave already-vCont-resumed threads as they were
Currently GDB never sends more than one action per vCont packet, when
connected in non-stop mode.  A follow up patch will change that, and
it exposed a gdbserver problem with the vCont handling.

For example, this in non-stop mode:

  => vCont;s:p1.1;c
  <= OK

Should be equivalent to:

  => vCont;s:p1.1
  <= OK
  => vCont;c
  <= OK

But gdbserver currently doesn't handle this.  In the latter case,
"vCont;c" makes gdbserver clobber the previous step request.  This
patch fixes that.

Note the server side must ignore resume actions for the thread that
has a pending %Stopped notification (and any other threads with events
pending), until GDB acks the notification with vStopped.  Otherwise,
e.g., the following case is mishandled:

 #1 => g  (or any other packet)
 #2 <= [registers]
 #3 <= %Stopped T05 thread:p1.2
 #4 => vCont s:p1.1;c
 #5 <= OK

Above, the server must not resume thread p1.2 when it processes the
vCont.  GDB can't know that p1.2 stopped until it acks the %Stopped
notification.  (Otherwise it wouldn't send a default "c" action.)

(The vCont documentation already specifies this.)

Finally, special care must also be given to handling fork/vfork
events.  A (v)fork event actually tells us that two processes stopped
-- the parent and the child.  Until we follow the fork, we must not
resume the child.  Therefore, if we have a pending fork follow, we
must not send a global wildcard resume action (vCont;c).  We can still
send process-wide wildcards though.

(The comments above will be added as code comments to gdb in a follow
up patch.)

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

	* linux-low.c (handle_extended_wait): Link parent/child fork
	threads.
	(linux_wait_1): Unlink them.
	(linux_set_resume_request): Ignore resume requests for
	already-resumed and unhandled fork child threads.
	* linux-low.h (struct lwp_info) <fork_relative>: New field.
	* server.c (in_queued_stop_replies_ptid, in_queued_stop_replies):
	New functions.
	(handle_v_requests) <vCont>: Don't call require_running.
	* server.h (in_queued_stop_replies): New declaration.
2016-10-26 16:22:27 +01:00
Pedro Alves ca6eff5908 gdb/doc: Clarify vCont packet description
Specifically, what happens with multiple actions that could match a
thread, and what happens when we get a vCont action that matches a
thread that was already running.  E.g., what does:

 "vCont;s:2"
 "vCont;s:1;c"

mean for thread 2.

(Thread 2 continues stepping.)

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

	* gdb.texinfo (Packets): Clarify vCont packets with multiple
	actions that match a thread, and what happens when an action
	matches a thread that is already running.
2016-10-26 16:22:05 +01:00
Pedro Alves ef4a339527 gdb: Free inferior->priv when inferior exits
(Where "exits" includes being killed or detached.)

Nothing is clearing inferior->priv currently.  This is a problem if we
change the inferior's process_stratum targets in a single debug
session.  This field is currently only used by darwin-nat.c, but a
follow up patch will make remote.c use it too.  Without the fix,
remote.c might end up mistaking the priv object allocated by
darwin-nat.c with its own.

(Found by inspection.)

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

	* inferior.c (exit_inferior_1): Free 'priv'.
2016-10-26 16:21:40 +01:00
Pedro Alves 7b68ffbb32 gdb: Clean up remote.c:remote_resume
Just some refactoring / TLC.  Mainly split the old c/s/C/S packet
handling to a separate function.

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

	* remote.c (remote_resume_with_hc): New function, factored out
	from ...
	(remote_resume): ... this.  Always try vCont first.
	(remote_vcont_resume): Rename to ...
	(remote_resume_with_vcont): ... this.  Bail out if execution
	direction is reverse.
2016-10-26 16:15:28 +01:00
Pedro Alves beb18c865c Make dwarf_expr_context's destructor virtual
Ref: https://sourceware.org/ml/gdb-patches/2016-10/msg00662.html

 $ make WERROR_CFLAGS="-Wnon-virtual-dtor" dwarf2expr.o
 ...
 In file included from .../src/gdb/dwarf2expr.c:28:0:
 .../src/gdb/dwarf2expr.h:68:8: warning: ‘struct dwarf_expr_context’ has virtual functions and accessible non-virtual destructor [-Wnon-virtual-dtor]
  struct dwarf_expr_context
	 ^~~~~~~~~~~~~~~~~~

Happens to not be a problem in practice currently because concrete
subclasses are allocated on the stack.  I.e., we don't ever delete
objects of types that derive from dwarf_expr_context through pointers
to dwarf_expr_context.

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

	* dwarf2expr.h (struct dwarf_expr_context) <~dwarf_expr_context>:
	Make virtual.
2016-10-25 14:32:35 +01:00
Rainer Orth b196bc4cb4 Fix gdb C++ compilation on Solaris (PR build/20712)
gdb 7.12 doesn't compile as C++ (tried with g++ 4.9) on Solaris (tried
10 and 12, sparc and x86).  The following patch (relative to the 7.12
release, though I expect most if not all issues to be present on trunk,
too) fixes this.

Only a few of the changes bear explanation:

* Initially, compilation failed whereever defs.h. was included:

In file included from /vol/src/gnu/gdb/gdb-7.12/gdb/gdb.c:19:0:
/vol/src/gnu/gdb/gdb-7.12/gdb/defs.h:630:33: error: 'double atof(const char*)' conflicts with a previous declaration
 extern double atof (const char *); /* X3.159-1989  4.10.1.1 */
                                 ^
In file included from /usr/include/stdlib.h:17:0,
                 from build-gnulib/import/stdlib.h:36,
                 from /vol/src/gnu/gdb/gdb-7.12/gdb/common/common-defs.h:32,
                 from /vol/src/gnu/gdb/gdb-7.12/gdb/defs.h:28,
                 from /vol/src/gnu/gdb/gdb-7.12/gdb/gdb.c:19:
/vol/gcc-4.9/lib/gcc/i386-pc-solaris2.10/4.9.0/include-fixed/iso/stdlib_iso.h:119:15: note: previous declaration 'double std::atof(const char*)'
 extern double atof(const char *);
               ^

  This is due to this gem in gdb/defs.h which seems to have been present
  like forever:

#ifndef atof
extern double atof (const char *);	/* X3.159-1989  4.10.1.1 */
#endif

  In the Solaris headers, the appropriate functions are in namespace std,
  thus the conflict.  I've wrapped the defs.h declaration in !__cplusplus
  to avoid this; perhaps it can go completely instead.

* All the casts are necessary to appease g++ and should be pretty
  obvious.

* The sol-thread.c changes are here to handle

/vol/src/gnu/gdb/gdb-7.12/gdb/sol-thread.c: In function 'void _initialize_sol_thread()':
/vol/src/gnu/gdb/gdb-7.12/gdb/sol-thread.c:1252:36: error: invalid conversion from 'void*' to 'void (*)(int)' [-fpermissive]
   if (!(p_##X = dlsym (dlhandle, #X))) \
                                    ^
/vol/src/gnu/gdb/gdb-7.12/gdb/sol-thread.c:1255:3: note: in expansion of macro 'resolve'
   resolve (td_log);
   ^

  and are modeled after linux-thread-db.c (try_thread_db_load_1).

The patch allowed both 32 and 64-bit C++ builds on sparc-sun-solaris2.10
and i386-pc-solaris2.10 to complete.  The resulting binary hasn't seen
more than a smoke test (invoke it on itself, b main, run) yet.

When investigating the failure to detect -static-libstdc++
support (more below), I found two more issues which only show up with
-Werror:

/vol/src/gnu/gdb/gdb/local/gdb/procfs.c: In function 'ssd* proc_get_LDT_entry(procinfo*, int)':
/vol/src/gnu/gdb/gdb/local/gdb/procfs.c:2487:19: error: variable 'old_chain' set but not used [-Werror=unused-but-set-variable]
   struct cleanup *old_chain = NULL;
                   ^

Unless I'm mistaken, you need to run do_cleanups on every return from
the function.

Afterwards, I ran a 32-bit compilation, which (after adding
--disable-largefile to avoid

In file included from /usr/include/sys/procfs.h:28:0,
                 from /vol/src/gnu/gdb/gdb/local/gdb/i386-sol2-nat.c:23:
/usr/include/sys/old_procfs.h:39:2: error: #error "Cannot use procfs in the large file compilation environment"
 #error "Cannot use procfs in the large file compilation environment"
  ^

and two more instances) revealed

/vol/src/gnu/gdb/gdb/local/gdb/top.c: In function 'void gdb_safe_append_history()':
/vol/src/gnu/gdb/gdb/local/gdb/top.c:1170:59: error: format '%d' expects argument of type 'int', but argument 3 has type 'pid_t {aka long int}' [-Werror=format=]
     = xstrprintf ("%s-gdb%d~", history_filename, getpid ());
                                                           ^

Fixed by casting pid_t to long and printing it as such.
2016-10-25 15:19:46 +02:00
Pedro Alves b30f354acb common/common-defs.h: Define __STDC_FORMAT_MACROS as well
Ref: https://sourceware.org/ml/gdb-patches/2016-10/msg00694.html

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

	* common/common-defs.h (__STDC_FORMAT_MACROS): Define.
2016-10-25 13:50:20 +01:00
Pedro Alves e4426cb42f new-op.c: Add comment about -fsanitize=address
gdb/ChangeLog:
2016-10-25  Pedro Alves  <palves@redhat.com>

	* common/new-op.c: Add comment about -fsanitize=address.
2016-10-25 13:32:26 +01:00
Pedro Alves 28fe4f87e0 Define __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS again.
Revert commit f6abaf7a40 (gdb: no longer define
__STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS), with the tweak suggested
in that commit's log: the macros are now defined before any system
header is included.

This should fix AIX:
  https://sourceware.org/ml/gdb-patches/2016-10/msg00682.html

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

       * common/common-defs.h (__STDC_CONSTANT_MACROS)
       (__STDC_LIMIT_MACROS): Define.
2016-10-25 11:47:18 +01:00
Yao Qi 3ef9d661f4 Don't override operator new if GDB is built with -fsanitize=address
Nowadays, if we build GDB with -fsanitize=address, we can get the asan
error below,

(gdb) quit
=================================================================
==9723==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete) on 0x60200003bf70
    #0 0x7f88f3837527 in operator delete(void*) (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x55527)
    #1 0xac8e13 in __gnu_cxx::new_allocator<void (*)()>::deallocate(void (**)(), unsigned long) /usr/include/c++/4.9/ext/new_allocator.h:110
    #2 0xac8cc2 in __gnu_cxx::__alloc_traits<std::allocator<void (*)()> >::deallocate(std::allocator<void (*)()>&, void (**)(), unsigned long) /usr/include/c++/4.9/ext/alloc_traits.h:185
....
0x60200003bf70 is located 0 bytes inside of 8-byte region [0x60200003bf70,0x60200003bf78)
allocated by thread T0 here:
    #0 0x7f88f38367ef in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x547ef)
    #1 0xbd2762 in operator new(unsigned long) /home/yao/SourceCode/gnu/gdb/git/gdb/common/new-op.c:42
    #2 0xac8edc in __gnu_cxx::new_allocator<void (*)()>::allocate(unsigned long, void const*) /usr/include/c++/4.9/ext/new_allocator.h:104
    #3 0xac8d81 in __gnu_cxx::__alloc_traits<std::allocator<void (*)()> >::allocate(std::allocator<void (*)()>&, unsigned long) /usr/include/c++/4.9/ext/alloc_traits.h:182

The reason for this is that we override operator new but don't override
operator delete.  This patch does the override if the code is NOT
compiled with asan.

gdb:

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

	PR gdb/20716
	* common/new-op.c (__has_feature): New macro.
	Don't override operator new if asan is used.
2016-10-25 11:13:00 +01:00
Luis Machado b5e1db8789 Fix potential NULL pointer dereference
This patch addresses a potential NULL pointer dereference when we try to
duplicate a string. The input pointer can be NULL and that may lead to
crashes. We simply add a check for that case.

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

	* exec.c (exec_file_locate_attach): Prevent NULL pointer dereference
	when duplicating a string.
2016-10-24 17:51:33 -05:00
Luis Machado 010ece9c47 Fix obvious gotcha in string comparison
This patch fixes a gotcha when comparing exception's messages in
exception_print_same. It should've used the statically-allocated
string versions msg1 and msg2 instead.

As is, it could lead to crashes.

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

	* exec.c (exception_print_same): Fix string comparison to use
	statically-allocated ones.
2016-10-24 17:44:56 -05:00
Jan Kratochvil b8d38ee425 testsuite: Fix false FAIL for gdb.base/morestack.exp
Since
	[commit] [testsuite patch] Fix gcc_compiled for gcc 6 & 7
	https://sourceware.org/ml/gdb-patches/2016-10/msg00620.html

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

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

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

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

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

	* gdb.base/morestack.exp: Try to build it using -fuse-ld=gold first.
2016-10-24 14:13:51 +02:00
Yao Qi cb93dc7f26 [GDBserver] Fix conversion warning
I got the following warning if I build GDBserver for aarch64_be-linux-gnu,

git/gdb/gdbserver/linux-aarch64-low.c:1539:39: error: invalid conversion from 'void*' to 'uint32_t* {aka unsigned int*}' [-fpermissive]
   uint32_t *le_buf = xmalloc (byte_len);
                                       ^
The patch is to fix the warning.

gdb/gdbserver:

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

	PR server/20733
	* linux-aarch64-low.c (append_insns): Cast the return value to
	'uint32_t *'.
2016-10-24 11:07:24 +01:00
Tom Tromey befbff861e Make some dwarf_expr_context methods pure virtual
This patch changes some dwarf_expr_context to be pure virtual, as
mentioned during the discussion of an earlier patch in this series.

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

	* dwarf2expr.h (class dwarf_expr_context)
	<get_frame_base, get_frame_cfa, get_tls_address, dwarf_call,
	push_dwarf_block_entry_value, get_addr_index, get_object_address>:
	Now pure virtual.
	* dwarf2-frame.c (class dwarf_expr_executor)
	<get_frame_base, get_frame_cfa, get_tls_address, dwarf_call,
	push_dwarf_block_entry_value, get_addr_index, get_object_address>:
	New methods.
	<invalid>: New method.
2016-10-21 14:17:40 -06:00
Tom Tromey ce6c454e5a Change minimal_symbol_reader::record_full to take a bool
This changes an "int" to a "bool" in the signature for
minimal_symbol_reader::record_full, and then fixes the callers.

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

	* minsyms.h (minimal_symbol_reader::record_full): "copy_name" now
	a bool.
	(record, record_with_info): Update.
	* minsyms.c (record): Fix indentation.
	(record_full): Fix indentation.  Update for type change.
	* elfread.c (record_minimal_symbol): "copy_name" now a bool.
	(elf_symtab_read): "copy_names" now a bool.
	(elf_rel_plt_read, elf_read_minimal_symbols): Update.
2016-10-21 14:17:39 -06:00
Tom Tromey f60ee22ea1 Remove last cleanup from captured_main_1
An earlier patch split captured_main into two parts.  This patch
removes the last remaining cleanup from captured_main_1, and also
replaces a second hand-rolled VEC-like array with a std::vector.

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

	* main.c: Include <vector>.
	(cmdarg_s): Remove typedef.  Don't define VEC.
	(captured_main_1): Use vector, not VEC.  Remove cleanups.
2016-10-21 14:17:39 -06:00
Tom Tromey 192ca6d8ea Convert dwarf_expr_context_funcs to methods
This patch converts the function pointers in dwarf_expr_context_funcs
into methods on dwarf_expr_context, and then updates the various
implementations and callers to follow.

NB this patch uses "override" (which caught a couple of renaming bugs
during development) -- but this is C++11, so this patch at least has
to wait for Pedro's patch that adds the OVERRIDE macro.

After this patch it would be possible to do one more, that makes
various members of dwarf_expr_context "protected"; but I haven't done
this.

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

	* dwarf2loc.c (struct dwarf_expr_context_funcs): Don't declare.
	(dwarf_expr_read_addr_from_reg, dwarf_expr_get_reg_value)
	(dwarf_expr_read_mem, dwarf_expr_frame_base): Rename; turn into
	methods.
	(get_frame_pc_for_per_cu_dwarf_call): New function.
	(dwarf_expr_frame_cfa, dwarf_expr_frame_pc)
	(dwarf_expr_tls_address): Rename; turn into methods.
	(per_cu_dwarf_call): Remove arguments.  Use
	get_frame_pc_for_per_cu_dwarf_call.
	(dwarf_evaluate_loc_desc): New class.
	(dwarf_expr_dwarf_call, dwarf_expr_context)
	(dwarf_expr_push_dwarf_reg_entry_value)
	(dwarf_expr_get_addr_index, dwarf_expr_get_obj_addr): Rename; turn
	into methods.
	(dwarf_expr_ctx_funcs): Remove.
	(dwarf2_evaluate_loc_desc_full): Update.
	(dwarf2_locexpr_baton_eval): Update.
	(symbol_needs_eval_context): New class.
	(symbol_needs_read_addr_from_reg, symbol_needs_get_reg_value)
	(symbol_needs_read_mem, symbol_needs_frame_base)
	(symbol_needs_frame_cfa, symbol_needs_tls_address)
	(symbol_needs_dwarf_call, needs_dwarf_reg_entry_value): Rename;
	turn into methods.
	(needs_get_addr_index, needs_get_obj_addr): Remove; turn into
	methods.
	(symbol_needs_ctx_funcs): Remove.
	(dwarf2_loc_desc_get_symbol_read_needs): Update.
	* dwarf2expr.h (struct dwarf_expr_context_funcs): Remove; turn
	contents into methods.
	(struct dwarf_expr_context) <baton, funcs>: Remove.
	<read_addr_from_reg, get_reg_value, read_mem, get_frame_base,
	get_frame_cfa, get_frame_pc, get_tls_address, dwarf_call,
	impl_get_base_type, push_dwarf_block_entry_value, get_addr_index,
	get_object_address>: Declare new methods.
	(ctx_no_get_frame_base, ctx_no_get_frame_cfa)
	(ctx_no_get_frame_pc, ctx_no_get_tls_address, ctx_no_dwarf_call)
	(ctx_no_get_base_type, ctx_no_push_dwarf_reg_entry_value)
	(ctx_no_get_addr_index): Don't declare.
	* dwarf2expr.c (get_base_type): Use impl_get_base_type.
	(execute_stack_op): Update.
	(ctx_no_get_frame_base, ctx_no_get_frame_cfa)
	(ctx_no_get_frame_pc, ctx_no_get_tls_address, ctx_no_dwarf_call)
	(ctx_no_get_base_type, ctx_no_push_dwarf_reg_entry_value)
	(ctx_no_get_addr_index): Remove; now methods on
	dwarf_expr_context.
	* dwarf2-frame.c (read_addr_from_reg): Take a frame_info, not a
	baton.
	(class dwarf_expr_executor): New class.
	(get_reg_value, read_mem): Rename, turn into methods.
	(execute_stack_op): Use dwarf_expr_executor.
2016-10-21 14:17:38 -06:00
Tom Tromey 595d2e303c Convert DWARF expr functions to methods
This converts various DWARF expr functions to be members on
dwarf_expr_context, then fixes up the various users.  This results in
somewhat less wordy code and sets the stage for the next patch.

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

	* dwarf2loc.c (per_cu_dwarf_call)
	(dwarf_expr_push_dwarf_reg_entry_value)
	(dwarf2_evaluate_loc_desc_full, dwarf2_locexpr_baton_eval)
	(needs_dwarf_reg_entry_value)
	(dwarf2_loc_desc_get_symbol_read_needs): Update.
	* dwarf2expr.h (dwarf_expr_context) <push_address, eval, fetch,
	fetch_address, fetch_in_stack_memory, address_type, grow_stack,
	push, stack_empty_p, add_piece, get_base_type, execute_stack_op,
	pop>: New method declarations.
	(dwarf_expr_push_address, dwarf_expr_eval, dwarf_expr_fetch)
	(dwarf_expr_fetch_address, dwarf_expr_fetch_in_stack_memory):
	Don't declare.
	* dwarf2expr.c (address_type, grow_stack, push, push_address)
	(pop, fetch, fetch_address, fetch_in_stack_memory)
	(stack_empty_p, add_piece, eval, get_base_type)
	(execute_stack_op): Rename.  Turn into methods.
	* dwarf2-frame.c (execute_stack_op): Update.
2016-10-21 14:17:38 -06:00
Tom Tromey 718b962660 Initial conversion of dwarf_expr_ctx
This is the first step in the conversion of dwarf_expr_ctx to a C++
class.  This conversion is done in steps to make the patches, and the
reviews, a bit simpler.  This patch changes dwarf_expr_ctx to be
stack-allocated and removes the associated cleanup.

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

	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Stack-allocate
	dwarf_expr_context.  Remove cleanups.
	(dwarf2_locexpr_baton_eval)
	(dwarf2_loc_desc_get_symbol_read_needs):  Likewise.
	* dwarf2expr.h (dwarf_expr_context, ~dwarf_expr_context): Add
	constructors and destructors.
	(new_dwarf_expr_context, free_dwarf_expr_context)
	(make_cleanup_free_dwarf_expr_context): Don't declare.
	* dwarf2-frame.c (execute_stack_op): Stack-allocate
	dwarf_expr_context.  Remove cleanups.
	(dwarf_expr_context): Rename from new_dwarf_expr_context.  Turn
	into constructor.
	(free_dwarf_expr_context, free_dwarf_expr_context_cleanup):
	Remove.
	(~dwarf_expr_context): Rename from
	make_cleanup_free_dwarf_expr_context.  Turn into destructor.
2016-10-21 14:17:37 -06:00
Tom Tromey 5841433461 Some cleanup removal in dwarf2loc.c
This removes some cleanups and manual allocation handling in
dwarf2loc.c with std::vector.  Note that this patch has a case where
the vector would normally fall into the "use gdb::unique_ptr"
guidelines -- but here because the vector is immediately initialized,
I moved the initialization into the constructor call, for further
code savings.

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

	* dwarf2loc.c: Include <vector>.
	(read_pieced_value, write_pieced_value)
	(dwarf2_compile_expr_to_ax): Use std::vector.
2016-10-21 14:17:37 -06:00
Tom Tromey 67ad9399e2 Remove make_cleanup_restore_current_uiout
This removes make_cleanup_restore_current_uiout in favor of an
RAII-based class.

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

	* stack.c (print_stack_frame_to_uiout): Use scoped_restore.
	* ui-out.c (make_cleanup_restore_current_uiout)
	(restore_current_uiout_cleanup): Remove.
	* infrun.c (print_stop_event): Use scoped_restore.
	* ui-out.h (make_cleanup_restore_current_uiout): Don't declare.
2016-10-21 14:17:36 -06:00
Tom Tromey d1e4a62469 Use gdb::unique_ptr in elf_read_minimal_symbols
This changes elf_read_minimal_symbols to use gdb::unique_ptr rather
than an explicit allocation.  This removes a cleanup.

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

	* elfread.c (elf_read_minimal_symbols): Use gdb::unique_ptr.
2016-10-21 14:17:36 -06:00
Tom Tromey cd9da5b077 Replace two xmallocs with unique_ptr
This replaces a couple of uses of xmalloc with gdb::unique_ptr, also
removing a couple of cleanups.

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

	* cli/cli-dump.c (dump_memory_to_file): Use gdb::unique_ptr.
	(restore_binary_file): Likewise.
2016-10-21 14:17:35 -06:00
Tom Tromey 1e3b796d58 Change command stats reporting to use class
This removes make_command_stats_cleanup in favor of an RAII class.
The patch is reasonably straightforward, but keeping the same
semantics without excessive reindentation required splitting
captured_main in two.

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

	* maint.h (scoped_command_stats): New class.
	(make_command_stats_cleanup): Don't declare.
	* maint.c (struct cmd_stats): Remove.
	(~scoped_command_stats): Rename from report_command_stats.  Now a
	destructor.
	(scoped_command_stats): Rename from make_command_stats_cleanup.
	Now a constructor.
	* main.c (captured_main_1): New function.  Use
	scoped_command_stats.
	(captured_main): Call captured_main_1.
	* event-top.c (command_handler): Use scoped_command_stats.
2016-10-21 14:17:35 -06:00
Tom Tromey 6fc31fc73b Remove some cleanups in MI
This patch removes a couple of cleanups from MI by using
gdb::unique_ptr.

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

	* mi/mi-main.c (mi_cmd_data_read_memory): Use gdb::unique_ptr.
	Remove some cleanups.
2016-10-21 14:17:34 -06:00
Tom Tromey 0e454242cc Remove make_cleanup_restore_current_ui
This removes make_cleanup_restore_current_ui by converting the last
use.  The last use was in a few functions used to iterate over all
UIs.  This patch replaces these functions with a class, and arranges
for the class destructor to do the needed cleanup.

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

	* tui/tui-interp.c (tui_on_normal_stop, tui_on_signal_received)
	(tui_on_end_stepping_range, tui_on_signal_exited, tui_on_exited)
	(tui_on_no_history, tui_on_user_selected_context_changed):
	Update.
	* top.h (switch_thru_all_uis): New class.
	(SWITCH_THRU_ALL_UIS): Rewrite.
	(make_cleanup_restore_current_ui, switch_thru_all_uis_init)
	(switch_thru_all_uis_cond, switch_thru_all_uis_next): Don't
	declare.
	* mi/mi-interp.c (mi_new_thread, mi_thread_exit)
	(mi_record_changed, mi_inferior_added, mi_inferior_appeared)
	(mi_inferior_exit, mi_inferior_removed, mi_on_signal_received)
	(mi_on_end_stepping_range, mi_on_signal_exited, mi_on_exited)
	(mi_on_no_history, mi_on_normal_stop, mi_traceframe_changed)
	(mi_tsv_created, mi_tsv_deleted, mi_tsv_modified)
	(mi_breakpoint_created, mi_breakpoint_deleted)
	(mi_breakpoint_modified, mi_output_running_pid, mi_on_resume)
	(mi_solib_loaded, mi_solib_unloaded, mi_command_param_changed)
	(mi_memory_changed, mi_user_selected_context_changed): Update.
	* infrun.c (all_uis_check_sync_execution_done)
	(all_uis_on_sync_execution_starting, normal_stop): Update.
	* event-top.c (restore_ui_cleanup)
	(make_cleanup_restore_current_ui, switch_thru_all_uis_init)
	(switch_thru_all_uis_cond, switch_thru_all_uis_next): Remove.
	* cli/cli-interp.c (cli_on_normal_stop, cli_on_signal_received)
	(cli_on_end_stepping_range, cli_on_signal_exited, cli_on_exited)
	(cli_on_no_history, cli_on_user_selected_context_changed):
	Update.
	* breakpoint.c (watchpoint_check): Update.
2016-10-21 14:17:34 -06:00
Tom Tromey 8dddcb8f00 Record minimal symbols directly in reader.
This patch changes minimal symbol creation in two ways.  First, it
removes global variables in favor of members of minimal_symbol_reader.
Second, it changes functions like prim_record_minimal_symbol to be
member functions of minimal_symbol_reader.

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

	* xcoffread.c (record_minimal_symbol, scan_xcoff_symtab): Add
	"reader" argument.  Update.
	(xcoff_initial_scan): Update.
	* symfile.h (mdebug_build_psymtabs): Add "reader" argument.
	* mipsread.c (mipscoff_symfile_read): Update.
	(read_alphacoff_dynamic_symtab): Add "reader" argument.  Update.
	* minsyms.h (minimal_symbol_reader) <record, record_full>:
	Declare.
	<m_msym_bunch, m_msym_bunch_index, m_msym_count>: New members.
	<record_with_info>: New function, renamed from
	prim_record_minimal_symbol_and_info.
	* minsyms.c (msym_bunch, msym_bunch_index, msym_count): Remove
	globals.
	(minimal_symbol_reader): Initialize new members.
	(minimal_symbol_reader::record): Renamed from
	prim_record_minimal_symbol.
	(minimal_symbol_reader::record_full): Renamed from
	prim_record_minimal_symbol_full.
	(prim_record_minimal_symbol_and_info): Move to minsyms.h; rename.
	* mdebugread.c (mdebug_build_psymtabs, parse_partial_symbols)
	(record_minimal_symbol): Add "reader" argument.  Update.
	(elfmdebug_build_psymtabs): Update.
	* machoread.c (macho_symtab_add_minsym, macho_symtab_read): Add
	"reader" argument.  Update.
	(macho_symfile_read): Update.
	* elfread.c (record_minimal_symbol, elf_symtab_read)
	(elf_rel_plt_read): Add "reader" argument.  Update.
	(elf_read_minimal_symbols): Update.
	* dbxread.c (record_minimal_symbol, read_dbx_dynamic_symtab)
	(read_dbx_symtab): Add "reader" argument.  Update.
	(dbx_symfile_read): Update.
	* coffread.c (record_minimal_symbol, coff_symtab_read): Add
	"reader" argument.  Update.
	(coff_symfile_read): Update.
	* coff-pe-read.h (read_pe_exported_syms): Add "reader" argument.
	* coff-pe-read.c (add_pe_exported_sym, add_pe_forwarded_sym)
	(read_pe_exported_syms): Add "reader" argument.  Update.
2016-10-21 14:17:33 -06:00
Tom Tromey d25e871993 Change minimal_symbol_reader to store objfile
This changes minimal_symbol_reader to require the objfile to be
passed to the constructor.  The class now records the objfile and
automatically uses it later in "install".

This is a minor cleanup that will come in useful in the next patch.
It is separate from the first patch to keep that one a bit simpler to
understand.

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

	* xcoffread.c (xcoff_initial_scan): Update.
	* mipsread.c (mipscoff_symfile_read): Update.
	* minsyms.c (minimal_symbol_reader): Add obj argument.
	Initialize member.
	(install): Remove objfile argument.  Update.
	* mdebugread.c (elfmdebug_build_psymtabs): Update.
	* machoread.c (macho_symfile_read): Update.
	* elfread.c (elf_read_minimal_symbols): Update.
	* dbxread.c (dbx_symfile_read): Update.
	* coffread.c (coff_symfile_read): Update.
	* minsyms.h (minimal_symbol_reader): Add m_objfile member.
	(constructor): Add objfile argument.
	(minimal_symbol_reader::install): Remove objfile argument.
2016-10-21 14:17:33 -06:00
Tom Tromey 873a915e0a Introduce minimal_symbol_reader
This patch introduced minimal_symbol_reader, a RAII-based class which
replaces the current make_cleanup_discard_minimal_symbols.

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

	* xcoffread.c (xcoff_initial_scan): Use
	minimal_symbol_reader.
	* mipsread.c (mipscoff_symfile_read): Use
	minimal_symbol_reader.
	* minsyms.h (minimal_symbol_reader): New class.
	(init_minimal_symbol_collection)
	(make_cleanup_discard_minimal_symbols, install_minimal_symbols):
	Don't declare.
	* minsyms.c (minimal_symbol_reader): Renamed from
	init_minimal_symbol_collection, turned into constructor.
	(~minimal_symbol_reader): Renamed from
	do_discard_minimal_symbols_cleanup, turned into destructor.
	(make_cleanup_discard_minimal_symbols): Remove.
	(minimal_symbol_reader::install): Rename form
	install_minimal_symbols.
	* mdebugread.c (elfmdebug_build_psymtabs): Use
	minimal_symbol_reader.
	* machoread.c (macho_symfile_read): Use
	minimal_symbol_reader.
	* elfread.c (elf_read_minimal_symbols): Use
	minimal_symbol_reader.
	* dbxread.c (dbx_symfile_read): Use minimal_symbol_reader.
	* coffread.c (coff_symfile_read): Use
	minimal_symbol_reader.
2016-10-21 14:17:33 -06:00
Tom Tromey 4b6749b9a4 Use scoped_restore for current_ui
This changes most uses of make_cleanup_restore_current_ui to use
scoped_restore.  The use in switch_thru_all_uis_init still remains;
that is dealt with in a later patch by replacing this iterator with a
real class.

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

	* top.c (new_ui_command, wait_sync_command_done)
	(gdb_readline_wrapper): Use scoped_restore.
	* infrun.c (fetch_inferior_event): Use scoped_restore.
	* infcall.c (call_thread_fsm_should_stop): Use scoped_restore.
2016-10-21 14:17:32 -06:00
Tom Tromey 9746809447 Use scoped_restore for ui_file
This replaces all the uses of make_cleanup_restore_ui_file with
scoped_restore.

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

	* utils.c (make_cleanup_restore_ui_file, do_restore_ui_file)
	(struct restore_ui_file_closure): Remove.
	* utils.h (make_cleanup_restore_ui_file): Don't declare.
	* guile/scm-ports.c (ioscm_with_output_to_port_worker): Use
	scoped_restore.
	* top.c (execute_command_to_string): Use scoped_restore.
2016-10-21 14:17:32 -06:00
Tom Tromey b7b633e9b1 Use RAII to save and restore scalars
This patch replaces many (but not all) uses of
make_cleanup_restore_integer with a simple RAII-based template class.
It also removes the similar restore_execution_direction cleanup in
favor of this new class.  Subsequent patches will replace other
similar cleanups with this class.

The class is typically instantiated using make_scoped_restore.  This
allows for template argument deduction.

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

	* common/scoped_restore.h: New file.
	* utils.h: Include scoped_restore.h.
	* top.c (execute_command_to_string): Use scoped_restore.
	* python/python.c (python_interactive_command): Use
	scoped_restore.
	(python_command, execute_gdb_command): Likewise.
	* printcmd.c (do_one_display): Use scoped_restore.
	* mi/mi-main.c (exec_continue): Use scoped_restore.
	* mi/mi-cmd-var.c (mi_cmd_var_assign): Use scoped_restore.
	* linux-fork.c (checkpoint_command): Use scoped_restore.
	* infrun.c (restore_execution_direction): Remove.
	(fetch_inferior_event): Use scoped_restore.
	* compile/compile.c (compile_file_command): Use
	scoped_restore.
	(compile_code_command, compile_print_command): Likewise.
	* cli/cli-script.c (execute_user_command): Use
	scoped_restore.
	(while_command, if_command, script_from_file): Likewise.
	* arm-tdep.c (arm_insert_single_step_breakpoint): Use
	scoped_restore.
2016-10-21 14:17:31 -06:00
Tom Tromey 9a1e3f0031 Fix build failure in xcoffread.c
This changes read_xcoff_symtab to be const-correct.  This fixes a
build failure.

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

	* xcoffread.c (read_xcoff_symtab): Make "filestring" const.
2016-10-21 14:10:39 -06:00
Ulrich Weigand d11261fc63 Fix symbol table file name on AIX
When xlc -qfuncsect or gcc -ffunction-sections options is used in AIX,
each function csect is associated with each psymtab, so each psymtab
will have it's corresponding filename entries set.

If the pst filename isn't set then we will be seeing the below output
when we set a breakpoint.

(gdb) br main
Breakpoint 1 at 0x10000374: file  _start_ , line 18.

With the fix it will be.

(gdb) br main
Breakpoint 1 at 0x10000518: file test.c, line 24.

Attached patch resolve this issue and correct filename will be set.

gdb/
2016-10-21  Sangamesh Mallayya  <sangamesh.swamy@in.ibm.com>
	    Ulrich Weigand  <uweigand@de.ibm.com>

	* xcoffread.c (read_xcoff_symtab): Make name of current file as
	pst->filename instead of _start_ in AIX.

Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
2016-10-21 17:47:15 +02:00
Philipp Rudo 4db41a0a10 Delete target_so_ops->special_symbol_handling hook
No one(!) actually implements this hook. So simply delete it.

gdb/ChangeLog:

	* solist.h (struct target_so_ops): Delete special_symbol_handling
	hook.
	* solib.c (solib_add, reload_shared_libraries): Adjust.
	* solib-aix.c (solib_aix_special_symbol_handling): Delete
	(_initialize_solib_aix): Adjust
	* solib-darwin.c (darwin_special_symbol_handling): Delete
	(_initialize_darwin_solib): Adjust
	* solib-dsbt.c (dsbt_special_symbol_handling): Delete
	(_initialize_dsbt_solib): Adjust
	* solib-frv.c (frv_special_symbol_handling): Delete
	(_initialize_frv_solib): Adjust
	* solib-svr4.c (svr4_special_symbol_handling): Delete
	(_initialize_svr4_solib): Adjust
	* solib-target.c (solib_target_special_symbol_handling): Delete
	(_initialize_solib_target): Adjust
2016-10-21 12:32:52 +02:00
Jan Kratochvil f90fd8c2f1 testsuite: Fix gcc_compiled for gcc 6 & 7
gdb/testsuite/ChangeLog
2016-10-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* lib/gdb.exp (get_compiler_info): Generalize gcc_compile regexp.
2016-10-20 21:58:54 +02:00
Yao Qi 78836e904d Don't configure gdb for vxworks target
VxWorks support was removed in 2004.

commit e84ecc995d
Author: Andrew Cagney <cagney@redhat.com>
Date:   Sat Nov 13 23:10:02 2004 +0000

    2004-11-13  Andrew Cagney  <cagney@gnu.org>

        * configure.tgt: Delete i[34567]86-*-vxworks*, m68*-netx-*,
        m68*-*-vxworks*, mips*-*-vxworks*, powerpc-*-vxworks*, and
        sparc-*-vxworks*.
        * NEWS: Mention that vxworks was deleted.

This patch adds *-*-vxworks* in a list of targets GDB doesn't
support.

gdb:

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

	* configure.tgt: Don't configure if target is *-*-vxworks*.
2016-10-20 11:33:07 +01:00
Maciej W. Rozycki 2d2476aac7 testsuite: Fix gdb.base/killed-outside.exp using irrelevant stale options
Fix a commit 4a556533cf ("Fix PR11094: JIT breakpoint is not properly
recreated on reruns") regression:

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

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

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

	gdb/testsuite/
	* gdb.base/killed-outside.exp: Remove $options from a call to
	`prepare_for_testing'.
2016-10-19 18:23:09 +01:00
Pedro Alves f77a9b4860 Regen gdb/config.in
gdb/ChangeLog:
2016-10-19  Pedro Alves  <palves@redhat.com>

	* config.in: Regenerate.
2016-10-19 14:35:06 +01:00
Pedro Alves f6abaf7a40 gdb: no longer define __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS
My gnulib fix at:
  https://lists.gnu.org/archive/html/bug-gnulib/2015-11/msg00010.html
was merged upstream meanwhile and our gnulib copy now includes it.

As a concidence, Kevin was telling me today that these macros are
causing a build problem on FreeBSD:

common/common-defs.h:47:0: error: "__STDC_CONSTANT_MACROS" redefined [-Werror]
  #define __STDC_CONSTANT_MACROS 1
  /usr/include/sys/cdefs.h:408:0: note: this is the location of the previous definition
  #define __STDC_CONSTANT_MACROS
(and a similar error for __STDC_LIMIT_MACROS)

The problem seems to be that we should be defining these input macros
before including any system header, but, we're not.

So let's just revert e063da6790 ([C++] Define __STDC_CONSTANT_MACROS
/ __STDC_LIMIT_MACROS for stdint.h).  If this causes a problem
somewhere, we can re-define the macros higher up in the file, before
system headers are included.

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

	* common/common-defs.h (__STDC_CONSTANT_MACROS)
	(__STDC_LIMIT_MACROS): Delete.
2016-10-18 20:48:37 +01:00
Pedro Alves 49e4877c54 Update gnulib to current upstream master
I tried building gdb with G++ 4.7 and CXX="g++ -std=gnu+11", and that
tripped on a build error:

  In file included from build-gnulib/import/stdio.h:53:0,
		   from /home/pedro/gdb/mygit/cxx-convertion/src/gdb/common/common-defs.h:31,
		   from /home/pedro/gdb/mygit/cxx-convertion/src/gdb/defs.h:28,
		   from /home/pedro/gdb/mygit/cxx-convertion/src/gdb/armobsd-tdep.c:20:
  build-gnulib/import/stddef.h:104:3: error: conflicting declaration ‘typedef union max_align_t max_align_t’
  In file included from build-gnulib/import/stddef.h:55:0,
		   from build-gnulib/import/stdio.h:53,
		   from /home/pedro/gdb/mygit/cxx-convertion/src/gdb/common/common-defs.h:31,
		   from /home/pedro/gdb/mygit/cxx-convertion/src/gdb/defs.h:28,
		   from /home/pedro/gdb/mygit/cxx-convertion/src/gdb/armobsd-tdep.c:20:
  /opt/gcc-4.7/lib/gcc/x86_64-unknown-linux-gnu/4.7.4/include/stddef.h:426:3: error: ‘max_align_t’ has a previous declaration as ‘typedef struct max_align_t max_align_t’

Updating gnulib to current master fixes it, since it brings in this
fix:

 http://lists.gnu.org/archive/html/bug-gnulib/2016-04/msg00000.html

Our last update was in August 2015.  This doesn't bring in much added
baggage, it's mostly bug fixes.  It pulled in the "limits-h" module as
automatic dependency, and given that looks potentially useful I added
it to the set of modules we require.

Tested on x86_64 Fedora 23, with g++ 4.7 and g++ 5.3, native and gdbserver.

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

	* gnulib/update-gnulib.sh (GNULIB_COMMIT_SHA1): Set to
	2692e23a48e21f6daa029e8af9f1a143b7532f47.
	* gnulib/configure, gnulib/config.in, gnulib/aclocal.m4:
	Regenerate.
	* gnulib/import/Makefile: Update.
	* gnulib/import/alloca: Update.
	* gnulib/import/basename-lgpl: Update.
	* gnulib/import/canonicalize-lgpl: Update.
	* gnulib/import/config: Update.
	* gnulib/import/dirent: Update.
	* gnulib/import/dirfd: Update.
	* gnulib/import/dirname-lgpl: Update.
	* gnulib/import/dirname.h: Update.
	* gnulib/import/dosname.h: Update.
	* gnulib/import/errno: Update.
	* gnulib/import/extra/snippet/arg-nonnull.h: Update.
	* gnulib/import/extra/snippet/c++defs.h: Update.
	* gnulib/import/extra/snippet/warn-on-use.h: Update.
	* gnulib/import/extra/update-copyright: Update.
	* gnulib/import/flexmember.h: Update.
	* gnulib/import/float+.h: Update.
	* gnulib/import/float: Update.
	* gnulib/import/float: Update.
	* gnulib/import/fnmatch: Update.
	* gnulib/import/fnmatch: Update.
	* gnulib/import/fnmatch_loop: Update.
	* gnulib/import/fpucw.h: Update.
	* gnulib/import/frexp: Update.
	* gnulib/import/frexpl: Update.
	* gnulib/import/gettimeofday: Update.
	* gnulib/import/hard-locale: Update.
	* gnulib/import/hard-locale.h: Update.
	* gnulib/import/inttypes: Update.
	* gnulib/import/isnan: Update.
	* gnulib/import/isnand-nolibm.h: Update.
	* gnulib/import/isnand: Update.
	* gnulib/import/isnanl-nolibm.h: Update.
	* gnulib/import/isnanl: Update.
	* gnulib/import/itold: Update.
	* gnulib/import/limits: Update.
	* gnulib/import/localcharset: Update.
	* gnulib/import/localcharset.h: Update.
	* gnulib/import/lstat: Update.
	* gnulib/import/m4/00gnulib: Update.
	* gnulib/import/m4/absolute-header: Update.
	* gnulib/import/m4/alloca: Update.
	* gnulib/import/m4/canonicalize: Update.
	* gnulib/import/m4/codeset: Update.
	* gnulib/import/m4/configmake: Update.
	* gnulib/import/m4/dirent_h: Update.
	* gnulib/import/m4/dirfd: Update.
	* gnulib/import/m4/dirname: Update.
	* gnulib/import/m4/double-slash-root: Update.
	* gnulib/import/m4/eealloc: Update.
	* gnulib/import/m4/errno_h: Update.
	* gnulib/import/m4/exponentd: Update.
	* gnulib/import/m4/exponentl: Update.
	* gnulib/import/m4/extensions: Update.
	* gnulib/import/m4/extern-inline: Update.
	* gnulib/import/m4/fcntl-o: Update.
	* gnulib/import/m4/flexmember: Update.
	* gnulib/import/m4/float_h: Update.
	* gnulib/import/m4/fnmatch: Update.
	* gnulib/import/m4/fpieee: Update.
	* gnulib/import/m4/frexp: Update.
	* gnulib/import/m4/frexpl: Update.
	* gnulib/import/m4/gettimeofday: Update.
	* gnulib/import/m4/glibc21: Update.
	* gnulib/import/m4/gnulib-cache: Update.
	* gnulib/import/m4/gnulib-common: Update.
	* gnulib/import/m4/gnulib-comp: Update.
	* gnulib/import/m4/gnulib-tool: Update.
	* gnulib/import/m4/hard-locale: Update.
	* gnulib/import/m4/include_next: Update.
	* gnulib/import/m4/inttypes-pri: Update.
	* gnulib/import/m4/inttypes: Update.
	* gnulib/import/m4/isnand: Update.
	* gnulib/import/m4/isnanl: Update.
	* gnulib/import/m4/largefile: Update.
	* gnulib/import/m4/limits-h: Update.
	* gnulib/import/m4/localcharset: Update.
	* gnulib/import/m4/locale-fr: Update.
	* gnulib/import/m4/locale-ja: Update.
	* gnulib/import/m4/locale-zh: Update.
	* gnulib/import/m4/longlong: Update.
	* gnulib/import/m4/lstat: Update.
	* gnulib/import/m4/malloc: Update.
	* gnulib/import/m4/malloca: Update.
	* gnulib/import/m4/math_h: Update.
	* gnulib/import/m4/mbrtowc: Update.
	* gnulib/import/m4/mbsinit: Update.
	* gnulib/import/m4/mbsrtowcs: Update.
	* gnulib/import/m4/mbstate_t: Update.
	* gnulib/import/m4/memchr: Update.
	* gnulib/import/m4/memmem: Update.
	* gnulib/import/m4/mmap-anon: Update.
	* gnulib/import/m4/multiarch: Update.
	* gnulib/import/m4/nocrash: Update.
	* gnulib/import/m4/off_t: Update.
	* gnulib/import/m4/pathmax: Update.
	* gnulib/import/m4/rawmemchr: Update.
	* gnulib/import/m4/readlink: Update.
	* gnulib/import/m4/rename: Update.
	* gnulib/import/m4/rmdir: Update.
	* gnulib/import/m4/signal_h: Update.
	* gnulib/import/m4/ssize_t: Update.
	* gnulib/import/m4/stat: Update.
	* gnulib/import/m4/stdbool: Update.
	* gnulib/import/m4/stddef_h: Update.
	* gnulib/import/m4/stdint: Update.
	* gnulib/import/m4/stdio_h: Update.
	* gnulib/import/m4/stdlib_h: Update.
	* gnulib/import/m4/strchrnul: Update.
	* gnulib/import/m4/string_h: Update.
	* gnulib/import/m4/strstr: Update.
	* gnulib/import/m4/strtok_r: Update.
	* gnulib/import/m4/sys_socket_h: Update.
	* gnulib/import/m4/sys_stat_h: Update.
	* gnulib/import/m4/sys_time_h: Update.
	* gnulib/import/m4/sys_types_h: Update.
	* gnulib/import/m4/time_h: Update.
	* gnulib/import/m4/unistd_h: Update.
	* gnulib/import/m4/warn-on-use: Update.
	* gnulib/import/m4/wchar_h: Update.
	* gnulib/import/m4/wchar_t: Update.
	* gnulib/import/m4/wctype_h: Update.
	* gnulib/import/m4/wint_t: Update.
	* gnulib/import/malloc: Update.
	* gnulib/import/malloca: Update.
	* gnulib/import/malloca.h: Update.
	* gnulib/import/math: Update.
	* gnulib/import/math: Update.
	* gnulib/import/mbrtowc: Update.
	* gnulib/import/mbsinit: Update.
	* gnulib/import/mbsrtowcs-impl.h: Update.
	* gnulib/import/mbsrtowcs-state: Update.
	* gnulib/import/mbsrtowcs: Update.
	* gnulib/import/memchr: Update.
	* gnulib/import/memmem: Update.
	* gnulib/import/pathmax.h: Update.
	* gnulib/import/rawmemchr: Update.
	* gnulib/import/readlink: Update.
	* gnulib/import/ref-add.sin: Update.
	* gnulib/import/ref-del.sin: Update.
	* gnulib/import/rename: Update.
	* gnulib/import/rmdir: Update.
	* gnulib/import/same-inode.h: Update.
	* gnulib/import/signal: Update.
	* gnulib/import/stat: Update.
	* gnulib/import/stdbool: Update.
	* gnulib/import/stddef: Update.
	* gnulib/import/stdint: Update.
	* gnulib/import/stdio: Update.
	* gnulib/import/stdlib: Update.
	* gnulib/import/str-two-way.h: Update.
	* gnulib/import/strchrnul: Update.
	* gnulib/import/streq.h: Update.
	* gnulib/import/string: Update.
	* gnulib/import/stripslash: Update.
	* gnulib/import/strnlen1: Update.
	* gnulib/import/strnlen1.h: Update.
	* gnulib/import/strstr: Update.
	* gnulib/import/strtok_r: Update.
	* gnulib/import/sys_stat: Update.
	* gnulib/import/sys_time: Update.
	* gnulib/import/sys_types: Update.
	* gnulib/import/time: Update.
	* gnulib/import/unistd: Update.
	* gnulib/import/unistd: Update.
	* gnulib/import/verify.h: Update.
	* gnulib/import/wchar: Update.
	* gnulib/import/wctype: Update.
	* gnulib/import/flexmember.h: New file.
	* gnulib/import/hard-locale.c: New file.
	* gnulib/import/hard-locale.h: New file.
	* gnulib/import/limits.in.h: New file.
	* gnulib/import/m4/flexmember.m4: New file.
	* gnulib/import/m4/hard-locale.m4: New file.
	* gnulib/import/m4/limits-h.m4: New file.
2016-10-18 17:18:29 +01:00
Pedro Alves da80416474 Introduce gdb::unique_ptr
Many make_cleanup uses in the code base are best eliminated by using a
"owning" smart pointer to manage ownership of the resource
automatically.

The question is _which_ smart pointer.

GDB currently supports building with a C++03 compiler.  We have
std::auto_ptr in C++03, but, as is collective wisdom by now, that's
too easy to misuse, and has therefore been deprecated in C++11 and
finally removed in C++17.

It'd be nice to be able to use std::unique_ptr instead, which is the
modern, safe std::auto_ptr replacement in C++11.

In addition to extra safety -- moving (i.e., transfer of ownership of
the managed pointer between smart pointers) must be explicit --
std::unique_ptr has (among others) one nice feature that std::auto_ptr
doesn't --- ability to specify a custom deleter as template parameter.
In gdb's context, that allows easily creating a smart pointer for
memory allocated with xmalloc -- the smart pointer then knows to
release with xfree instead of delete.  This is particularly
interesting when managing objects allocated in C libraries, and also,
for C++-fying parts of GDB that interact with other parts that still
return objects allocated with xmalloc.

Since std::unique_ptr's API is quite nice, and eventually we'd like to
move to C++11, this patch adds a C++03-compatible smart pointer that
exposes the subset of the std::unique_ptr API that we're interested
in.  An advantage is that whenever we start requiring C++11, we won't
have to learn a new API.  Meanwhile, this allows continuing to support
building with a C++03 compiler.

Since C++03 doesn't support rvalue references (boost gets close to
emulating them, but it's not fully transparent to user code), the
C++03 std::unique_ptr emulation here doesn't try hard to prevent
accidentally moving, which is where most of complication of a more
thorough emulation would be.  Instead, we rely on the fact that GDB
will be usually compiled with a C++11 compiler, and use the real
std::unique_ptr in that case to catch such accidental moves.  IOW, the
goal here is to allow code that would be correct using std::unique_ptr
to be equally correct in C++03 mode, and, just as efficient.

The C++03 version was originally based on GCC 7.0's std::auto_ptr and
then heavily customized to behave more like C++11's std::unique_ptr:

   - Support for custom (stateless) deleters.  (Support for stateful
     deleters could be added, if necessary.)

   - unique_ptr<T[]> partial specialization (auto_ptr<T> does not know
     to use delete[]).

   - Support for all of 'ptr != NULL', 'ptr == NULL' and 'if (ptr)'
     using the safe bool idiom to emulate C++11's explicit bool
     operator.

   - There's no nullptr in C++03, so this allows initialization and
     assignment from NULL instead (std::auto_ptr allows neither).

   - Variable names un-uglified (ie., no leading __ prefix everywhere).

   - Formatting made to follow GDB's coding conventions, including
     comment style.

   - Converting "move" constructors done differently in order to truly
     support:

      unique_ptr<Derived> func_returning_unique_ptr (.....);
      ...
      unique_ptr<Base> ptr = func_returning_unique_ptr (.....);

At this point, it no longer shares much at all with the original file,
but, that's the history.

See comments in the code to find out more.

I thought of putting the "emulation" / shim in the "std" namespace, so
that when we start requiring C++11 at some point, no actual changes to
users of the smart pointer throughout would be necessary.  Putting
things in the std namespace is technically undefined, however in
practice it doesn't cause any issue with any compiler.  However,
thinking that people might be confused with seeing std::unique_ptr and
thinking that we're actually requiring C++11 already, I put the new
types in the "gdb" namespace instead.

For managing xmalloc pointers, this adds a gdb::unique_xmalloc_ptr<T>
"specialization" with a custom xfree deleter.

No actual use of any smart pointer is introduced in this patch.
That'll be done in following patches.

Tested (along with the rest of the series) on:

 - NetBSD 5.1 (gcc70 on the compile farm), w/ gcc 4.1.3
 - x86-64 Fedora 23, gcc 5.3.1 (gnu++03)
 - x86-64 Fedora 23, and gcc 7.0 (gnu++14)

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

	* common/common-defs.h: Include "gdb_unique_ptr.h".
	* common/gdb_unique_ptr.h: New.
2016-10-18 11:42:35 +01:00
Maciej W. Rozycki ae71e7b598 i386-tdep: Verify architecture before proceeding with `set/show mpx'
Make sure the architecture is `bfd_arch_i386' before handling the `set
mpx' and `show mpx' commands, avoiding the issue with `i386_mpx_enabled'
interpreting `gdbarch->tdep' according to the `struct gdbarch_tdep'
definition in i386-tdep.h while indeed in a multi-target configuration
it may have a different layout and cause GDB to crash or at least
misbehave.

	gdb/
	* i386-tdep.c (i386_mpx_info_bounds): Make sure the architecture
	is `bfd_arch_i386' before proceeding.
	(i386_mpx_set_bounds): Likewise.
2016-10-18 04:42:23 +01:00
Maciej W. Rozycki b348d11b70 tilegx-tdep: Correct aliasing errors in `tilegx_analyze_prologue'
Fix a load of aliasing build errors:

cc1plus: warnings being treated as errors
.../gdb/tilegx-tdep.c: In function 'CORE_ADDR tilegx_analyze_prologue(gdbarch*, CORE_ADDR, CORE_ADDR, tilegx_frame_cache*, frame_info*)':
.../gdb/tilegx-tdep.c:609: error: dereferencing pointer 'operands' does break strict-aliasing rules
.../gdb/tilegx-tdep.c:592: error: dereferencing pointer 'operands' does break strict-aliasing rules
.../gdb/tilegx-tdep.c:571: error: dereferencing pointer 'operands' does break strict-aliasing rules
[...]
.../gdb/tilegx-tdep.c:601: error: dereferencing pointer '<anonymous>' does break strict-aliasing rules
.../gdb/tilegx-tdep.c:601: note: initialized from here
cc1plus: error: dereferencing pointer 'operands' does break strict-aliasing rules
cc1plus: error: dereferencing pointer 'operands' does break strict-aliasing rules
.../gdb/tilegx-tdep.c:452: note: initialized from here
cc1plus: error: dereferencing pointer 'pretmp.896' does break strict-aliasing rules
cc1plus: note: initialized from here
cc1plus: error: dereferencing pointer 'pretmp.896' does break strict-aliasing rules
cc1plus: note: initialized from here
make[1]: *** [tilegx-tdep.o] Error 1

from an attempt to cast a `long long' pointer to an `int64_t' pointer,
which may not necessarily be compatible types.  Use the `long long' type
for the auxiliary variable then as this is the type of the structure
member referred.

	gdb/
	* tilegx-tdep.c (tilegx_analyze_prologue): Use the `long long'
	type for `operands'.
2016-10-18 04:41:21 +01:00
Simon Marchi e42b25a040 Fix duplicate test message in mi-trace-save.exp
gdb/testsuite/ChangeLog:

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

gdb/testsuite/ChangeLog:

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

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

gdb/ChangeLog:

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

gdb/testsuite/ChangeLog:

	* gdb.trace/mi-trace-save.exp: New file.
2016-10-17 16:48:25 -04:00
Pedro Alves 5562a44eb4 gdb: Fix phony iconv build
Cross building gdb for mingw32 on Fedora 23 fails with:

  x86_64-w64-mingw32-g++ -g -O2  [...]  ../../src/gdb/charset.c
  In file included from ../../src/gdb/charset.c:21:0:
  ../../src/gdb/charset.h:134:3: error: 'iconv_t' does not name a type
     iconv_t m_desc;
     ^
  ../../src/gdb/charset.c: In constructor 'wchar_iterator::wchar_iterator(const gdb_byte*, size_t, const char*, size_t)':
  ../../src/gdb/charset.c:600:3: error: 'm_desc' was not declared in this scope
     m_desc = iconv_open (INTERMEDIATE_ENCODING, charset);
     ^
  ../../src/gdb/charset.c: In destructor 'wchar_iterator::~wchar_iterator()':
  ../../src/gdb/charset.c:607:7: error: 'm_desc' was not declared in this scope
     if (m_desc != (iconv_t) -1)
	 ^
  ../../src/gdb/charset.c: In member function 'int wchar_iterator::iterate(wchar_iterate_result*, gdb_wchar_t**, const gdb_byte**, size_t*)':
  ../../src/gdb/charset.c:633:25: error: 'm_desc' was not declared in this scope
	 size_t r = iconv (m_desc, &inptr, &m_bytes, &outptr, &out_avail);
			   ^

This is a regression caused by commit cda6c55bd3 (Turn wchar
iterator into a class).  The problem is that iconv_t is now exposed in
gdb/charset.h, while before it was only used in gdb/charset.c.

gdb/charset.c, under #ifdef PHONY_ICONV, does:

 #undef iconv_t
 #define iconv_t int

So it seems the simplest is to use 'int' in the header file too.

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

	* charset.h (class wchar_iterator) [PHONY_ICONV] <m_desc>: Use
	'int' as type.
2016-10-17 17:13:26 +01:00
Simon Marchi be06ba8ceb Fix typos in trace commands doc
gdb/doc/ChangeLog:

	* gdb.texinfo (Using Trace Files): Fix typo.
	(GDB/MI Tracepoint Commands): Likewise.
2016-10-14 11:39:26 -04:00
Simon Marchi 99e61edafe Document -ctf switch of -trace-save
The -trace-save MI command supports saving the trace in the CTF format,
as its CLI counterpart, but it's not documented.

gdb/doc/ChangeLog:

	* gdb.texinfo (GDB/MI Tracepoint Commands): Document -ctf switch
	of -trace-save.
2016-10-14 11:39:26 -04:00
Ulrich Weigand 754c39c2f3 Fix set sysroot command on AIX
set sysroot command on AIX has no effect if a program depends on shared
library archives (.a).  Fixed by using solib_find and solib_bfd_fopen
instead of gdb_bfd_open in solib_aix_bfd_open.

gdb/
2016-10-14  Sangamesh Mallayya  <sangamesh.swamy@in.ibm.com>
	    Ulrich Weigand  <uweigand@de.ibm.com>

	* solib-aix.c (solib_aix_bfd_open): Call solib_find so that sysroot
	path is set properly if program has a dependency on .a archive and
	sysroot is set via set sysroot command.

Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
2016-10-14 15:04:04 +02:00
Markus Metzger afb1110bfa btrace: remove leftover comment
Remove a leftover comment on a function that was removed with commit
0568462bbf.
2016-10-14 09:31:20 +02:00
Eli Zaretskii 8ffc1bb12a Include strings.h where available
gdb/ChangeLog

2016-10-14  Eli Zaretskii  <eliz@gnu.org>

	* common/common-defs.h [HAVE_STRINGS_H]: Include strings.h if
	available, to get prototypes of 'strcasecmp' and 'strncasecmp'.
2016-10-14 10:08:25 +03:00
Pedro Alves 1f2e9c5e3b ARI: Remove true/false checks
These don't make sense with C++.

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

	* contrib/ari/gdb_ari.sh (boolean): Suggest bool instead.
	(false, true): Remove checks.
2016-10-13 18:14:19 +01:00
Yao Qi 5ad9dba751 Share proc get_var_address
This patch moves proc get_var_address into lib/gdb.exp, and remove the
duplicate copy in gdb.base/*.exp files.

gdb/testsuite:

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

	* gdb.base/code_elim.exp (get_var_address): Remove.
	* gdb.base/relocate.exp: Likewise.
	* gdb.base/shreloc.exp: Likewise.
	* lib/gdb.exp (get_var_address): New.
2016-10-13 16:08:17 +01:00