Commit Graph

38347 Commits

Author SHA1 Message Date
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
Yao Qi 62df7e210e Skip testing structures with floating points
This patch skips some tests related to floating point in structs.exp
if gdb_skip_float_test return false.

gdb/testsuite:

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

	* gdb.base/structs.exp: Invoke gdb_skip_float_test, and do
	floating point tests if $skip_float_test is false.
2016-10-13 15:36:57 +01:00
Tom Tromey af533a5f8b Use std::string in macho_symfile_read_all_oso
This changes macho_symfile_read_all_oso to use std::string.  This
avoids a cleanup.

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

	* machoread.c (macho_symfile_read_all_oso): Use std::string.
2016-10-12 19:59:29 -06:00
Tom Tromey d1a760cbb7 Remove unnecessary null_cleanup
This patch removes an unnecessary null_cleanup.

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

	* tracepoint.c (trace_dump_command): Remove unnecessary
	null_cleanup.
2016-10-12 19:59:29 -06:00
Tom Tromey cda6c55bd3 Turn wchar iterator into a class
This changes wchar_iterator from charset.c into a real C++ class, then
updates the users to use the class.  This lets us remove some cleanups
in favor of the class' destructor.

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

	* valprint.c (generic_emit_char, count_next_character)
	(generic_printstr): Update.
	* charset.c (struct wchar_iterator): Move to charset.h.
	(wchar_iterator::wchar_iterator): Rename from
	make_wchar_iterator, turn into a constructor.
	(wchar_iterator::~wchar_iterator): Rename from
	do_cleanup_iterator, turn into a destructor.
	(make_cleanup_wchar_iterator): Remove.
	(wchar_iterator::iterate): Rename from wchar_iterate.  Remove
	"iter" argument.  Update.
	* charset.h: Include <vector>.
	(class wchar_iterator): New class, from old struct
	wchar_iterator.
	(make_wchar_iterator, make_cleanup_wchar_iterator): Don't
	declare.
2016-10-12 19:43:16 -06:00
Tom Tromey 816d7b5304 Change selttest.c to use use std::vector
This patch changes selftest.c to use std::vector rather than VEC.
I think this is a small net plus.

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

	* selftest.c: Include <vector>, not "vec.h".
	(self_test_function_ptr): Remove.
	(tests): Now a std::vector.
	(register_self_test, run_self_tests): Update.
2016-10-12 19:43:16 -06:00
Pedro Alves bfd282882d Convert tid_range_parser and get_number_or_range to classes
This converts tid_range_parser and get_number_or_range to be classes.
The various tid_range_parser_* and get_number_or_range_* functions
become methods on the respective classes.  Then it updates the users
to follow.

The rationale for the change is that this provides better
encapsulation.  For example, this forced me to think of a better
interface between tid_range_parser and get_number_or_range, since the
former peeked into the latter's internals a bit too much.  That ended
up resulting mostly in these two not-just-straight-1-1 changes:

  void
 -tid_range_parser_skip (struct tid_range_parser *parser)
 +tid_range_parser::skip_range ()
  {
 ...

 -  tid_range_parser_init (parser, parser->range_parser.end_ptr,
 -			 parser->default_inferior);
 +  m_range_parser.skip_range ();
 +  init (m_range_parser.string (), m_default_inferior);
  }

 and:

    /* If we successfully parsed a thread number or finished parsing a
       thread range, switch back to assuming the next TID is
       inferior-qualified.  */
 -  if (parser->range_parser.end_ptr == NULL
 -      || parser->range_parser.string == parser->range_parser.end_ptr)
 +  if (!m_range_parser.in_range ())
      {

For the same reason (encapsulation), this moves the enum
tid_range_state definition to within the tid_parser class's scope,
since that is private implementation detail.

While at it, switch to use "bool" for booleans.

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

	* tid-parse.h (tid_range_parser): New class.
	(enum tid_range_state): Move into tid_range_parser's scope.
	Remove TID_RANGE_ prefix from all values.
	(tid_range_parser_get_tid, tid_range_parser_get_tid_range)
	(tid_range_parser_star_range, tid_range_parser_finished)
	(tid_range_parser_skip, tid_range_parser_qualified): Don't
	declare.
	(tid_is_in_list): Update comment.
	* tid-parse.c (tid_range_parser::tid_range_parser): New.
	(init, finished, get_string, skip, tid_is_qualified)
	(get_tid_or_range, get_tid_range, get_tid, star_range): Rename;
	turn into methods.
	(tid_is_in_list): Adjust.
	* cli/cli-utils.h (number_or_range_parser): New class.
	(init_number_or_range, get_number_or_range)
	(number_range_setup_range): Don't declare.
	* cli/cli-utils.c
	(number_or_range_parser::number_or_range_parser): New.
	(init_number_or_range, get_number_or_range)
	(number_range_setup_range): Rename; turn into methods.
	(number_is_in_list): Adjust.
	* breakpoint.c (map_breakpoint_numbers): Adjust.  Use bool.
	(trace_pass_command, get_tracepoint_by_number): Adjust.
	* breakpoint.h (get_tracepoint_by_number): Adjust.
	* inferior.c (detach_inferior_command, kill_inferior_command)
	(remove_inferior_command): Adjust.
	* linespec.c (decode_line_2): Adjust.
	* memattr.c (mem_enable_command, mem_disable_command)
	(mem_delete_command): Adjust.
	* printcmd.c (map_display_numbers): Adjust.
	* reverse.c (delete_bookmark_command, bookmarks_info): Adjust.
	* thread.c (thread_apply_command): Adjust.
2016-10-13 01:54:07 +01:00
Luis Machado 4dac951e11 Fixup gdb.python/py-value.exp for bare-metal aarch64-elf
I noticed that testing aarch64-elf gdb with a physical board
ran into issues with gdb.python/py-value.exp. Further investigation showed
that we were actually trying to dereference a NULL pointer (argv) when trying
to access argv[0].

Being bare-metal, argv is not guaranteed to be valid. So we need to make sure
argv is sane before accessing argv[0].

The following patch fixes up the test program to check for a NULL argv and also
improves the testcase a bit so it doesn't have to work with a hardcoded argc
value.

Regression-tested on x86-64 Ubuntu 16.04.

gdb/testsuite/ChangeLog:

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

	* gdb.python/py-value.c (main): Check if argv is NULL before using it.
	* gdb.python/py-value.exp (test_value_in_inferior): Don't use hardcoded
	argc values.
	Add 1 to argc so we guarantee distinct initial/modified argc values.
2016-10-12 10:10:03 -05:00
Anton Kolesov 4a2f482690 arc: Add support for Newlib
Add support for Newlib as an OS/ABI.  The only thing that is specific to it
relatively to "generic" baremetal target is location of PC register in jump
buffer for longjump support.

Sniffer uses .ivt section to decide if ELF file is for ARC Newlib or not.

gdb/ChangeLog:

	* arc-newlib-tdep.c: New file.
	* configure.tgt: Add newlib support for ARC.
2016-10-12 14:48:18 +03:00
Anton Kolesov aaf43c4882 arc: Add evaluation of long jump targets
Standard get_longjmp_target implementation, similar to what is in arm-tdep.c.
Actual value of jb_pc should be set in init_osabi methods of particular OS/ABI
implementations.

gdb/ChangeLog:

	* arc-tdep.h (struct gdbarch_tdep) <jb_pc>: New field.
	* arc-tdep.c (arc_get_longjmp_target): New function.
	(arc_gdbarch_init): Set get_longjmp_target if jb_pc is non-negative.
	(arc_dump_tdep): Print jb_pc.
2016-10-12 14:47:45 +03:00
Anton Kolesov b845c31ecc arc: Add a gdbarch_tdep structure
Add target-specific structure gdbarch_tdep for ARC.

gdb/ChangeLog:

	* arc-tdep.h (struct gdbarch_tdep): New.
	* arc-tdep.c (arc_gdbarch_init): Allocate gdbarch_tdep.
2016-10-12 14:47:09 +03:00
Yao Qi 187f5d00ac [AArch64] Track FP registers in prologue analyzer
We don't track FP registers in aarch64 prologue analyzer, so this causes
an internal error when FP registers are saved by "stp" instruction in
prologue (stp	d8, d9, [sp,#128]),

 tbreak _Unwind_RaiseException^M
 aarch64-tdep.c:335: internal-error: CORE_ADDR aarch64_analyze_prologue(gdbarch*, CORE_ADDR, CORE_ADDR, aarch64_prologue_cache*): Assertion `inst.operands[0].type == AARCH64_OPND_Rt' failed.^M
 A problem internal to GDB has been detected,

This patch teaches GDB to track FP registers (D registers) in prologue
analyzer.

gdb:

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

	PR tdep/20682
	* aarch64-tdep.c: Replace 32 with AARCH64_D_REGISTER_COUNT.
	(aarch64_analyze_prologue): Extend array 'regs' for D registers.
	Assert that operand 0 and 1 can be X or D registers.  Update
	register number for D registers.  Update registers in frame
	cache.
	* aarch64-tdep.h (AARCH64_D_REGISTER_COUNT): New macro.
2016-10-12 12:33:53 +01:00
Jan Kratochvil 8f1a8fc4df testsuite: Fix gdb.arch/powerpc-prologue.c compilation
gcc-6.2.1

gdb compile failed, gdb/testsuite/gdb.arch/powerpc-prologue.c: In function 'main':
gdb/testsuite/gdb.arch/powerpc-prologue.c:32:3: warning: implicit declaration of function 'optimized_1' [-Wimplicit-function-declaration]
   optimized_1 ();
   ^~~~~~~~~~~

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

	* gdb.arch/powerpc-prologue.c (optimized_1): New declaration.
2016-10-11 19:09:05 +02:00