Commit Graph

88735 Commits

Author SHA1 Message Date
GDB Administrator
a6bbedbad3 Automatic date update in version.in 2016-11-11 00:00:08 +00:00
Nick Clifton
a18590c386 Provide a more helpful error message when the BFD library is unable to load an extremely large section.
PR target/20737
	* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Bind defined
	symbol locally in PIE.
2016-11-10 12:26:53 +00:00
Jiong Wang
ac33b731d2 [AArch64] Bind defined symbol locally in PIE
bfd/
	PR target/20737
	* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Bind defined
	symbol locally in PIE.

ld/
	* testsuite/ld-aarch64/pie-bind-locally-a.s: New test source.
	* testsuite/ld-aarch64/pie-bind-locally-b.s: Likewise.
	* testsuite/ld-aarch64/pie-bind-locally.d: New testcase.
	* testsuite/ld-aarch64/aarch64-elf.exp: Run new testcase.
2016-11-10 09:25:17 +00:00
Tom Tromey
9b9720149d Use unique_xmalloc_ptr in Python code
This changes some utility functions in the Python code to return
unique_xmalloc_ptr, and then fixes up the callers.

I chose unique_xmalloc_ptr rather than std::string because at a few
call points the xmalloc'd string is released and ownership transferred
elsewhere.

This patch found a few existing memory leaks.  For example,
py-unwind.c called gdbpy_obj_to_string but never freed the result.

Built and regression tested on the buildbot.

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

	* varobj.h (varobj_get_display_hint): Change return type.
	* varobj.c (varobj_get_display_hint): Return unique_xmalloc_ptr.
	(varobj_value_get_print_value): Update.
	* python/python.c (gdbpy_before_prompt_hook, gdbpy_print_stack)
	(gdbpy_apply_type_printers): Update.
	* python/python-internal.h (unicode_to_target_string)
	(python_string_to_target_string, python_string_to_host_string)
	(gdbpy_obj_to_string, gdbpy_exception_to_string)
	(gdbpy_get_display_hint): Change return types.
	* python/py-varobj.c (py_varobj_iter_next): Update.
	* python/py-value.c (valpy_getitem, convert_value_from_python):
	Update.
	* python/py-utils.c (unicode_to_encoded_string)
	(unicode_to_target_string, python_string_to_target_string)
	(python_string_to_host_string, gdbpy_obj_to_string)
	(gdbpy_exception_to_string): Return unique_xmalloc_ptr.
	* python/py-unwind.c (pyuw_parse_register_id): Update.
	* python/py-type.c (typy_getitem): Update.
	* python/py-prettyprint.c (gdbpy_get_display_hint)
	(print_stack_unless_memory_error, print_children)
	(gdbpy_apply_val_pretty_printer): Update.
	* python/py-param.c (set_parameter_value): Update.
	(get_doc_string, call_doc_function): Return unique_xmalloc_ptr.
	(get_set_value, get_show_value, compute_enum_values, parmpy_init):
	Update.
	* python/py-infthread.c (thpy_set_name): Update.
	* python/py-function.c (fnpy_call, fnpy_init): Update.
	* python/py-framefilter.c (extract_sym): Change "name" to
	unique_xmalloc_ptr.
	(enumerate_args, enumerate_locals): Update.
	(py_print_frame): Use unique_xmalloc_ptr.
	* python/py-frame.c (frapy_read_var): Update.  Remove cleanup.
	* python/py-cmd.c (cmdpy_function, cmdpy_completer, cmdpy_init):
	Update.
	* python/py-breakpoint.c (bppy_set_condition): Use
	unique_xmalloc_ptr.
	(bppy_init): Likewise.  Remove cleanup.
	(local_setattro): Update.
	* mi/mi-cmd-var.c (print_varobj, mi_cmd_var_list_children)
	(varobj_update_one): Update.
2016-11-09 19:40:12 -07:00
GDB Administrator
4e9d215322 Automatic date update in version.in 2016-11-10 00:00:17 +00:00
H.J. Lu
60227d64dd X86: Remove the .s suffix from EVEX vpextrw
The .s suffix indicates that the instruction is encoded by swapping
2 register operands.  Since vpextrw takes an XMM register and an
integer register, the .s suffix should be ignored for EVEX vpextrw.

gas/

	PR binutils/20799
	* testsuite/gas/i386/opcode.s: Add a test for EVEX vpextrw.
	* testsuite/gas/i386/opcode-intel.d: Updated.
	* testsuite/gas/i386/opcode-suffix.d: Likewise.
	* testsuite/gas/i386/opcode.d: Likewise.
	* testsuite/gas/i386/x86-64-avx512bw-opts.s: Remove vpextrw
	tests.
	* testsuite/gas/i386/x86-64-avx512bw-opts-intel.d: Updated.
	* testsuite/gas/i386/x86-64-avx512bw-opts.d: Likewise.

opcodes/

	PR binutils/20799
	* i386-dis-evex.h (evex_table): Replace EdqwS with Edqw.
	* i386-dis.c (EdqwS): Removed.
	(dqw_swap_mode): Likewise.
	(intel_operand_size): Don't check dqw_swap_mode.
	(OP_E_register): Likewise.
	(OP_E_memory): Likewise.
	(OP_G): Likewise.
	(OP_EX): Likewise.
	* i386-opc.tbl: Remove "S" from EVEX vpextrw.
	* i386-tbl.h: Regerated.
2016-11-09 14:00:18 -08:00
H.J. Lu
1032d6ebdc Update opcodes/ChangeLog 2016-11-09 13:44:42 -08:00
H.J. Lu
7766fd1002 X86: Update opcode-suffix.d
PR binutils/20754
	* testsuite/gas/i386/opcode-suffix.d: Updated.
2016-11-09 12:11:50 -08:00
Pedro Alves
fad0c9fb7d Further cleanup/modernization of gdb.base/commands.exp
- Use multi_line for matching multi-line GDB output.

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

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

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

 - Remove gdb_stop_suppressing_tests uses.

 - tighten a few regexps.

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

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

	* gdb.base/commands.exp (runto_or_return): New procedure.
	(gdbvar_simple_if_test, gdbvar_simple_while_test)
	(gdbvar_complex_if_while_test, progvar_simple_if_test)
	(progvar_simple_while_test, progvar_complex_if_while_test)
	(if_while_breakpoint_command_test)
	(infrun_breakpoint_command_test, breakpoint_command_test)
	(user_defined_command_test, watchpoint_command_test)
	(test_command_prompt_position, redefine_hook_test)
	(stray_arg0_test, error_clears_commands_left, redefine_hook_test)
	(redefine_backtrace_test): Use runto_or_return, $valnum_re,
	multi_line_input and multi_line.  Remove gdb_expect and
	gdb_stop_suppressing_tests uses.
	* lib/gdb.exp (valnum_re): New global.
	* lib/gdb.exp (valnum_re): New global.
	(multi_line_input): New procedure.
2016-11-09 18:48:25 +00:00
H.J. Lu
7efeed176a X86: Merge AVX512F vmovq
AVX512F vmovq doesn't support masking.  We can't swap register operand
in AVX512F vmovq with Reg64 since Reg64 != RegXMM.  This patch merges
AVX512F vmovq.

	* i386-opc.tbl: Merge AVX512F vmovq.
2016-11-09 10:20:13 -08:00
Simon Marchi
8354c62cd1 Make gdb.mi/user-selected-context-sync.exp use proc_with_prefix
Pedro's patch provides a cleaner way to prefix tests with the proc name,
so let's use that.

gdb/testsuite/ChangeLog:

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

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

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

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

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

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

	* gdb.base/commands.exp (gdbvar_simple_if_test)
	(gdbvar_simple_while_test, gdbvar_complex_if_while_test)
	(progvar_simple_if_test, progvar_simple_while_test)
	(progvar_complex_if_while_test, if_while_breakpoint_command_test)
	(infrun_breakpoint_command_test, breakpoint_command_test)
	(user_defined_command_test, watchpoint_command_test)
	(test_command_prompt_position, deprecated_command_test)
	(bp_deleted_in_command, temporary_breakpoint_commands)
	(stray_arg0_test, source_file_with_indented_comment)
	(recursive_source_test, if_commands_test)
	(error_clears_commands_left, redefine_hook_test)
	(redefine_backtrace_test): Use proc_with_prefix.
	* lib/gdb.exp (proc_with_prefix): New proc.
2016-11-09 15:12:11 +00:00
Pedro Alves
2806dc7eec Fix formattting of gdb/ChangeLog and gdb/testsuite/ChangeLog enties
Leading tab/spaces.  Missing periods.  Duplicate date.
2016-11-09 15:09:31 +00:00
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
GDB Administrator
4c1d4908aa Automatic date update in version.in 2016-11-09 00:00:27 +00:00
H.J. Lu
1f334aeb22 X86: Remove the THREE_BYTE_0F7A entry
Remove the THREE_BYTE_0F7A entry which is leftover from SSE5.

	PR binutils/20701
	* i386-dis.c (THREE_BYTE_0F7A): Removed.
	(dis386_twobyte): Don't use THREE_BYTE_0F7A.
	(three_byte_table): Remove THREE_BYTE_0F7A.
2016-11-08 11:03:06 -08: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