]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
7 years agoFix compile errors with GCC 4.2.
Cary Coutant [Wed, 11 Jan 2017 19:47:27 +0000 (11:47 -0800)] 
Fix compile errors with GCC 4.2.

gold/
PR gold/21040
* x86_64.cc (Output_data_plt_x86_64_bnd::do_fill_first_plt_entry):
Remove unnecessary 'typename' keyword.
(Output_data_plt_x86_64_bnd::do_fill_plt_entry): Likewise.
(Output_data_plt_x86_64_bnd::do_fill_tlsdesc_entry): Likewise.
(Output_data_plt_x86_64_bnd::fill_aplt_entry): Likewise.
* testsuite/copy_test_relro_1.cc (p, b, c, q): Add separate extern
declarations.

7 years agoFix test cases to work for i386.
Cary Coutant [Wed, 11 Jan 2017 19:26:26 +0000 (11:26 -0800)] 
Fix test cases to work for i386.

gold/
PR gold/21039
* testsuite/script_test_13.sh: Adjust patterns to work for i386.
* testsuite/script_test_15a.sh: Likewise.
* testsuite/script_test_15b.sh: Likewise.
* testsuite/script_test_15c.sh: Likewise.

7 years agox86-64: Correct unwind info for the BND PLT
H.J. Lu [Wed, 11 Jan 2017 17:16:44 +0000 (09:16 -0800)] 
x86-64: Correct unwind info for the BND PLT

Since the BND PLT has

 230: 68 00 00 00 00        pushq  $0x0
 235: f2 e9 e5 ff ff ff     bnd jmpq 220 <.plt>
 23b: 0f 1f 44 00 00        nopl   0x0(%rax,%rax,1)

instead of

 230: ff 25 e2 0d 20 00     jmpq   *0x200de2(%rip)        # 201018
<func>
 236: 68 00 00 00 00        pushq  $0x0
 23b: e9 e0 ff ff ff        jmpq   220 <.plt>

its unwind info should be

DW_CFA_def_cfa_expression (DW_OP_breg7 (rsp): 8; DW_OP_breg16 (rip): 0;
DW_OP_lit15; DW_OP_and; DW_OP_lit5; DW_OP_ge; DW_OP_lit3; DW_OP_shl;
DW_OP_plus)

bfd/

PR ld/21038
* elf64-x86-64.c (elf_x86_64_eh_frame_bnd_plt): New.
(elf_x86_64_bnd_arch_bed): Use elf_x86_64_eh_frame_bnd_plt and
elf_x86_64_eh_frame_plt_got.
(elf_x86_64_size_dynamic_sections): Get unwind info from
elf_x86_64_bnd_arch_bed for the BND PLT.

ld/

PR ld/21038
* testsuite/ld-x86-64/pr21038a.d: New file.
* testsuite/ld-x86-64/pr21038a.s: Likewise.
* testsuite/ld-x86-64/pr21038b.d: Likewise.
* testsuite/ld-x86-64/pr21038b.s: Likewise.
* testsuite/ld-x86-64/x86-64.exp: Run pr21038a and pr21038b.

7 years agoFix typo in lookup_cmd_1 comment
Simon Marchi [Wed, 11 Jan 2017 16:15:26 +0000 (11:15 -0500)] 
Fix typo in lookup_cmd_1 comment

gdb/ChangeLog:

* cli/cli-decode.c (lookup_cmd_1): Fix typo in comment.

7 years agoAdd support for x86/64 redox target.
Jeremy Soller [Wed, 11 Jan 2017 15:05:53 +0000 (15:05 +0000)] 
Add support for x86/64 redox target.

bfd * config.bfd: Add entries for i686-redox and x86_64-redox.

gas * configure.tgt: Add entry for i386-redox.

ld * configure.tgt: Add entries for x86-redox and x86_64-redox.

7 years agoAdd constructor and destructor to demangle_parse_info
Tom Tromey [Tue, 29 Nov 2016 04:39:47 +0000 (21:39 -0700)] 
Add constructor and destructor to demangle_parse_info

This adds a constructor and destructor to demangle_parse_info, and
then changes all the users to use them.  This removes
make_cleanup_cp_demangled_name_parse_free and its single use.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-type.c (typy_legacy_template_argument): Update.
* cp-support.h (struct demangle_parse_info) (demangle_parse_info,
~demangle_parse_info): Declare new members.
(cp_demangled_name_to_comp): Return unique_ptr.
(cp_demangled_name_parse_free)
(make_cleanup_cp_demangled_name_parse_free)
(cp_new_demangle_parse_info): Remove.
* cp-support.c (do_demangled_name_parse_free_cleanup)
(make_cleanup_cp_demangled_name_parse_free): Remove.
(inspect_type, cp_canonicalize_string_full)
(cp_canonicalize_string): Update.
(mangled_name_to_comp): Change return type.
(cp_class_name_from_physname, method_name_from_physname)
(cp_func_name, cp_remove_params): Update.
* cp-name-parser.y (demangle_parse_info): New constructor, from
cp_new_demangle_parse_info.
(~demangle_parse_info): New destructor, from
cp_demangled_name_parse_free.
(cp_merge_demangle_parse_infos): Update.
(cp_demangled_name_to_comp): Change return type.

7 years agoRemove cleanups from execute_gdb_command
Tom Tromey [Tue, 29 Nov 2016 04:11:53 +0000 (21:11 -0700)] 
Remove cleanups from execute_gdb_command

This replaces a cleanup in execute_gdb_command with an instance of
std::string.

Testing showed that this originally missed a cleanup that was returned
by prevent_dont_repeat.  This version of the patch changes
prevent_dont_repeat to return a scoped_restore rather than a cleanup.

2017-01-10  Tom Tromey  <tom@tromey.com>

* top.c (prevent_dont_repeat): Change return type.
* python/python.c (execute_gdb_command): Use std::string.
Update.
* guile/guile.c (gdbscm_execute_gdb_command): Update.
* command.h (prevent_dont_repeat): Change return type.
* breakpoint.c (bpstat_do_actions_1): Update.

7 years agoUse scoped_value_mark in dwarf2_evaluate_loc_desc_full
Tom Tromey [Tue, 22 Nov 2016 04:04:59 +0000 (21:04 -0700)] 
Use scoped_value_mark in dwarf2_evaluate_loc_desc_full

This changes dwarf2_evaluate_loc_desc_full to use scoped_value_mark.

Note that this function previously called do_cleanup using the same
cleanup multiple times.  I had thought this was buggy, but re-reading
make_my_cleanup2 indicates that it is not.  Nevertheless it is
surprising, and at least one of the calls (the one that is completely
removed in this patch) seems to have been done under the assumption
that it would still have some effect.

2017-01-10  Tom Tromey  <tom@tromey.com>

* value.h (scoped_value_mark::~scoped_value_mark): Call
free_to_mark.
(scoped_value_mark::free_to_mark): New method.
* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use
scoped_value_mark.

7 years agoAdd scoped_value_mark
Tom Tromey [Tue, 22 Nov 2016 01:02:11 +0000 (18:02 -0700)] 
Add scoped_value_mark

This adds a scoped_value_mark class, that records the value mark in
the constructor and then calls value_free_to_mark in the destructor.
It then updates various spots in gdb to use this class, rather than a
cleanup.

It would be better overall to replace "struct value *" with a
shared_ptr, maybe eliminating the need for this class (watchpoints
would perhaps need some new mechanism as well).  However, that's
difficult to do.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-value.c (valpy_dereference, valpy_referenced_value)
(valpy_reference_value, valpy_const_value, valpy_get_address)
(valpy_get_dynamic_type, valpy_lazy_string, valpy_do_cast)
(valpy_getitem, valpy_call, valpy_binop_throw, valpy_negative)
(valpy_absolute, valpy_richcompare_throw): Use scoped_value_mark.
* dwarf2loc.c (dwarf2_loc_desc_get_symbol_read_needs): Use
scoped_value_mark.
* dwarf2-frame.c (execute_stack_op): Use scoped_value_mark.
* value.h (scoped_value_mark): New class.

7 years agoRemove make_cleanup_discard_psymtabs
Tom Tromey [Mon, 21 Nov 2016 23:50:20 +0000 (16:50 -0700)] 
Remove make_cleanup_discard_psymtabs

This removes make_cleanup_discard_psymtabs in favor of a new class.

2017-01-10  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (dwarf2_build_psymtabs): Use psymtab_discarder.
* psympriv.h (make_cleanup_discard_psymtabs): Don't declare.
* psymtab.c (discard_psymtabs_upto): Remove.
(make_cleanup_discard_psymtabs): Remove.
(struct psymtab_state): Remove.

7 years agoIntroduce and use gdb::unlinker
Tom Tromey [Mon, 21 Nov 2016 23:26:20 +0000 (16:26 -0700)] 
Introduce and use gdb::unlinker

This introduces a new class, gdb::unlinker, that unlinks a file in the
destructor.  The user of this class has the option to preserve the
file instead, by calling the "keep" method.

This patch then changes the spots in gdb that use unlink in a cleanup
to use this class instead.  In one spot I went ahead and removed all
the cleanups from the function.

This fixes one latent bug -- do_bfd_delete_cleanup could refer to
freed memory, by decref'ing the BFD before using its filename.

2017-01-10  Tom Tromey  <tom@tromey.com>

* record-full.c (record_full_save_cleanups): Remove.
(record_full_save): Use gdb::unlinker.
* gcore.c (do_bfd_delete_cleanup): Remove.
(gcore_command): Use gdb::unlinker, unique_xmalloc_ptr.  Remove
cleanups.
* dwarf2read.c (unlink_if_set): Remove.
(write_psymtabs_to_index): Use gdb::unlinker.
* common/gdb_unlinker.h: New file.

7 years agoUse class to manage BFD reference counts
Tom Tromey [Mon, 21 Nov 2016 18:12:23 +0000 (11:12 -0700)] 
Use class to manage BFD reference counts

This introduces a new specialization of gdb::ref_ptr that can be used
to manage BFD reference counts.  Then it changes most places in gdb to
use this new class, rather than explicit reference-counting or
cleanups.  This patch removes make_cleanup_bfd_unref.

If you look you will see a couple of spots using "release" where a use
of gdb_bfd_ref_ptr would be cleaner.  These will be fixed in the next
patch.

I think this patch fixes some latent bugs.  For example, it seems to
me that previously objfpy_add_separate_debug_file leaked a BFD.

I'm not 100% certain that the macho_symfile_read_all_oso change is
correct.  The existing code here is hard for me to follow.  One goal
of this sort of automated reference counting, though, is to make it
more difficult to make logic errors; so hopefully the code is clear
now.

2017-01-10  Tom Tromey  <tom@tromey.com>

* windows-tdep.c (windows_xfer_shared_library): Update.
* windows-nat.c (windows_make_so): Update.
* utils.h (make_cleanup_bfd_unref): Remove.
* utils.c (do_bfd_close_cleanup, make_cleanup_bfd_unref): Remove.
* symfile.h (symfile_bfd_open)
(find_separate_debug_file_in_section): Return gdb_bfd_ref_ptr.
* symfile.c (read_symbols, symbol_file_add)
(separate_debug_file_exists): Update.
(symfile_bfd_open): Return gdb_bfd_ref_ptr.
(generic_load, reread_symbols): Update.
* symfile-mem.c (symbol_file_add_from_memory): Update.
* spu-linux-nat.c (spu_bfd_open): Return gdb_bfd_ref_ptr.
(spu_symbol_file_add_from_memory): Update.
* solist.h (struct target_so_ops) <bfd_open>: Return
gdb_bfd_ref_ptr.
(solib_bfd_fopen, solib_bfd_open): Return gdb_bfd_ref_ptr.
* solib.c (solib_bfd_fopen, solib_bfd_open): Return
gdb_bfd_ref_ptr.
(solib_map_sections, reload_shared_libraries_1): Update.
* solib-svr4.c (enable_break): Update.
* solib-spu.c (spu_bfd_fopen): Return gdb_bfd_ref_ptr.
* solib-frv.c (enable_break2): Update.
* solib-dsbt.c (enable_break): Update.
* solib-darwin.c (gdb_bfd_mach_o_fat_extract): Return
gdb_bfd_ref_ptr.
(darwin_solib_get_all_image_info_addr_at_init): Update.
(darwin_bfd_open): Return gdb_bfd_ref_ptr.
* solib-aix.c (solib_aix_bfd_open): Return gdb_bfd_ref_ptr.
* record-full.c (record_full_save): Update.
* python/py-objfile.c (objfpy_add_separate_debug_file): Update.
* procfs.c (insert_dbx_link_bpt_in_file): Update.
* minidebug.c (find_separate_debug_file_in_section): Return
gdb_bfd_ref_ptr.
* machoread.c (macho_add_oso_symfile): Change abfd to
gdb_bfd_ref_ptr.
(macho_symfile_read_all_oso): Update.
(macho_check_dsym): Return gdb_bfd_ref_ptr.
(macho_symfile_read): Update.
* jit.c (bfd_open_from_target_memory): Return gdb_bfd_ref_ptr.
(jit_bfd_try_read_symtab): Update.
* gdb_bfd.h (gdb_bfd_open, gdb_bfd_fopen, gdb_bfd_openr)
(gdb_bfd_openw, gdb_bfd_openr_iovec)
(gdb_bfd_openr_next_archived_file, gdb_bfd_fdopenr): Return
gdb_bfd_ref_ptr.
(gdb_bfd_ref_policy): New struct.
(gdb_bfd_ref_ptr): New typedef.
* gdb_bfd.c (gdb_bfd_open, gdb_bfd_fopen, gdb_bfd_openr)
(gdb_bfd_openw, gdb_bfd_openr_iovec)
(gdb_bfd_openr_next_archived_file, gdb_bfd_fdopenr): Return
gdb_bfd_ref_ptr.
* gcore.h (create_gcore_bfd): Return gdb_bfd_ref_ptr.
* gcore.c (create_gcore_bfd): Return gdb_bfd_ref_ptr.
(gcore_command): Update.
* exec.c (exec_file_attach): Update.
* elfread.c (elf_symfile_read): Update.
* dwarf2read.c (dwarf2_get_dwz_file): Update.
(try_open_dwop_file, open_dwo_file): Return gdb_bfd_ref_ptr.
(open_and_init_dwo_file): Update.
(open_dwp_file): Return gdb_bfd_ref_ptr.
(open_and_init_dwp_file): Update.
* corelow.c (core_open): Update.
* compile/compile-object-load.c (compile_object_load): Update.
* common/gdb_ref_ptr.h (ref_ptr::operator->): New operator.
* coffread.c (coff_symfile_read): Update.
* cli/cli-dump.c (bfd_openr_or_error, bfd_openw_or_error): Return
gdb_bfd_ref_ptr.  Rename.
(dump_bfd_file, restore_command): Update.
* build-id.h (build_id_to_debug_bfd): Return gdb_bfd_ref_ptr.
* build-id.c (build_id_to_debug_bfd): Return gdb_bfd_ref_ptr.
(find_separate_debug_file_by_buildid): Update.

7 years agoAdd gdb_ref_ptr.h
Tom Tromey [Mon, 21 Nov 2016 00:48:31 +0000 (17:48 -0700)] 
Add gdb_ref_ptr.h

This adds a new gdb_ref_ptr.h, that implements a reference-counting
smart pointer class, where the user of the class supplies a
reference-counting policy object.

This class will be used in the next patch, which changes most explicit
BFD reference counts to use this new type.  Meanwhile, this patch
changes gdbpy_ref to be a specialization of this new class.

This change required adding new nullptr_t overloads some operators in
gdb_ref_ptr.h.  I suspect this was needed because some Python header
redefines NULL, but I'm not certain.

2017-01-10  Tom Tromey  <tom@tromey.com>

* common/gdb_ref_ptr.h: New file.
* python/py-ref.h (struct gdbpy_ref_policy): New.
(gdbpy_ref): Now a typedef.

7 years agoRemove make_cleanup_htab_delete
Tom Tromey [Sun, 20 Nov 2016 20:20:32 +0000 (13:20 -0700)] 
Remove make_cleanup_htab_delete

This removes make_cleanup_htab_delete in favor of destructors,
building on an earlier patch that added the htab_up typedef.

Testing revealed that more cleanup-removal work was needed in
dwarf2loc.c, so this version of the patch changes code there to use
unordered_set and vector, removing some more cleanups.

2017-01-10  Tom Tromey  <tom@tromey.com>

* utils.h (make_cleanup_htab_delete): Don't declare.
* utils.c (do_htab_delete_cleanup, make_cleanup_htab_delete):
Remove.
* linespec.c (decode_compound_collector): Add constructor,
destructor.
(lookup_prefix_sym): Remove cleanup.
(symtab_collector): Add constructor, destructor.
(collect_symtabs_from_filename): Remove cleanup.
* disasm.c (do_mixed_source_and_assembly): Use htab_up.
* compile/compile-c-symbols.c (generate_c_for_variable_locations):
Use htab_up.
* gnu-v3-abi.c (gnuv3_print_vtable): Use htab_up.
* dwarf2read.c (dw2_expand_symtabs_matching)
(dw2_map_symbol_filenames, dwarf_decode_macros)
(write_psymtabs_to_index): Use htab_up.
* dwarf2loc.c (func_verify_no_selftailcall)
(call_site_find_chain_1, func_verify_no_selftailcall)
(chain_candidate, call_site_find_chain_1): Use std::unordered_set,
std::vector, gdb::unique_xmalloc_ptr.
(call_sitep): Remove typedef.
(dwarf2_locexpr_baton_eval): Remove unused variable.

7 years agoRemove make_cleanup_py_decref and make_cleanup_py_xdecref
Tom Tromey [Sun, 20 Nov 2016 18:16:41 +0000 (11:16 -0700)] 
Remove make_cleanup_py_decref and make_cleanup_py_xdecref

make_cleanup_py_decref and make_cleanup_py_xdecref are now unused, so
this patch removes themm.  Future Python changes should use gdbpy_ref
instead.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python-internal.h (make_cleanup_py_decref)
(make_cleanup_py_xdecref): Don't declare.
* python/py-utils.c (py_decref, make_cleanup_py_decref)
(py_xdecref, make_cleanup_py_xdecref): Remove.

7 years agoUse gdbpy_ref rather than make_cleanup_py_decref
Tom Tromey [Sun, 20 Nov 2016 18:04:40 +0000 (11:04 -0700)] 
Use gdbpy_ref rather than make_cleanup_py_decref

This changes some spots in py-framefilter.c to use gdbpy_ref rather
than make_cleanup_py_decref or make_cleanup_py_xdecref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-framefilter.c (py_mi_print_variables): Use gdbpy_ref.
(py_print_locals, enumerate_locals, py_print_args): Use gdbpy_ref.

7 years agoUse gdbpy_ref in enumerate_args
Tom Tromey [Sun, 20 Nov 2016 17:57:28 +0000 (10:57 -0700)] 
Use gdbpy_ref in enumerate_args

This changes enumerate_args to use gdbpy_ref, and gets rid of many
gotos.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-framefilter.c (enumerate_args): Use gdbpy_ref.

7 years agoUse gdbpy_ref in py-utils.c
Tom Tromey [Sun, 20 Nov 2016 17:52:25 +0000 (10:52 -0700)] 
Use gdbpy_ref in py-utils.c

This changes more places in py-utils.c to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-utils.c (unicode_to_encoded_string)
(python_string_to_target_string)
(python_string_to_target_python_string)
(python_string_to_host_string, gdbpy_obj_to_string)
(get_addr_from_python): Use gdbpy_ref.

7 years agoUse gdbpy_ref in pyuw_object_attribute_to_pointer
Tom Tromey [Sun, 20 Nov 2016 17:48:51 +0000 (10:48 -0700)] 
Use gdbpy_ref in pyuw_object_attribute_to_pointer

This changes pyuw_object_attribute_to_pointer to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-unwind.c (pyuw_object_attribute_to_pointer): Use
gdbpy_ref.

7 years agoUse gdbpy_ref in python.c
Tom Tromey [Sun, 20 Nov 2016 17:46:23 +0000 (10:46 -0700)] 
Use gdbpy_ref in python.c

This changes more places in python.c to use gdbpy_ref.

Additionally, previously gdbpy_apply_type_printers would return
EXT_LANG_RC_ERROR if a type printer returned None.  However, that
doesn't seem correct to me; this patch changes it to return
EXT_LANG_RC_NOP in this case.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python.c (eval_python_command, gdbpy_decode_line)
(gdbpy_run_events, gdbpy_start_type_printers)
(gdbpy_apply_type_printers): Use gdbpy_ref.

7 years agoUse gdbpy_ref in py-param.c
Tom Tromey [Sun, 20 Nov 2016 17:34:34 +0000 (10:34 -0700)] 
Use gdbpy_ref in py-param.c

This changes py-param.c to use gdbpy_ref in a couple more spots.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-param.c (get_doc_string, compute_enum_values): Use
gdbpy_ref.

7 years agoUse gdbpy_ref in py-inferior.c
Tom Tromey [Sun, 20 Nov 2016 17:31:17 +0000 (10:31 -0700)] 
Use gdbpy_ref in py-inferior.c

This changes py-inferior.c to use gdbpy_ref in more places.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-inferior.c (find_thread_object, build_inferior_list):
Use gdbpy_ref.

7 years agoUse gdbpy_ref in py_print_frame
Tom Tromey [Sun, 20 Nov 2016 17:27:59 +0000 (10:27 -0700)] 
Use gdbpy_ref in py_print_frame

This changes py_print_frame to use gdbpy_ref in more places.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-framefilter.c (py_print_frame): Use gdbpy_ref.

7 years agoUse gdbpy_ref in bpfinishpy_out_of_scope
Tom Tromey [Sun, 20 Nov 2016 17:25:29 +0000 (10:25 -0700)] 
Use gdbpy_ref in bpfinishpy_out_of_scope

This changes bpfinishpy_out_of_scope to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-finishbreakpoint.c (bpfinishpy_out_of_scope): Use
gdbpy_ref.

7 years agoUse gdbpy_ref in py-cmd.c
Tom Tromey [Sun, 20 Nov 2016 17:23:08 +0000 (10:23 -0700)] 
Use gdbpy_ref in py-cmd.c

This changes py-cmd.c to use gdbpy_ref in more places.  This also
fixes a latent memory leak in cmdpy_completer_helper, which
unnecessarily increfs the result of PyObject_CallMethodObjArgs.  This
is not needed because that function returns a new reference.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-cmd.c (cmdpy_completer_helper): Use gdbpy_ref.  Remove
extra incref.
(cmdpy_completer_handle_brkchars, cmdpy_completer, cmdpy_init):
Use gdbpy_ref.

7 years agoUse gdbpy_ref in gdbpy_breakpoint_cond_says_stop
Tom Tromey [Sun, 20 Nov 2016 17:13:31 +0000 (10:13 -0700)] 
Use gdbpy_ref in gdbpy_breakpoint_cond_says_stop

This changes gdbpy_breakpoint_cond_says_stop to use gdbpy_ref rather
than explicit reference management.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-breakpoint.c (gdbpy_breakpoint_cond_says_stop): Use
gdbpy_ref.

7 years agoUse gdbpy_ref in archpy_disassemble
Tom Tromey [Sun, 20 Nov 2016 17:10:58 +0000 (10:10 -0700)] 
Use gdbpy_ref in archpy_disassemble

This changes archpy_disassemble to use gdbpy_ref.  It also fixes a
latent bug where archpy_disassemble was decref'ing the results of a
all to PyArg_ParseTupleAndKeywords.  This is incorrect because
PyArg_ParseTupleAndKeywords returns borrowed references.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-arch.c (archpy_disassemble): Use gdbpy_ref.  Don't
decref results of PyArg_ParseTupleAndKeywords.

7 years agoChange python_run_simple_file to use gdbpy_ref
Tom Tromey [Sat, 12 Nov 2016 19:08:17 +0000 (12:08 -0700)] 
Change python_run_simple_file to use gdbpy_ref

This changes python_run_simple_file to use gdbpy_ref and
unique_xmalloc_ptr.  Thi fixes a latent bug in this function, where
the error path previously ran the cleanups and then referred to one of
the objects just freed.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python.c (python_run_simple_file): Use
unique_xmalloc_ptr, gdbpy_ref.

7 years agoUse gdbpy_ref in py-prettyprint.c
Tom Tromey [Sat, 12 Nov 2016 19:07:16 +0000 (12:07 -0700)] 
Use gdbpy_ref in py-prettyprint.c

This changes some spots in py-prettyprint.c to use gdbpy_ref.  It also
changes push_dummy_python_frame to be a class, rather than having it
create a cleanup.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-prettyprint.c (print_stack_unless_memory_error)
(print_string_repr, print_children): Use gdbpy_ref.
(dummy_python_frame): New class.
(dummy_python_frame::dummy_python_frame): Rename from
push_dummy_python_frame.
(py_restore_tstate): Remove.

7 years agoUse gdbpy_ref in py_print_frame
Tom Tromey [Sat, 12 Nov 2016 18:57:45 +0000 (11:57 -0700)] 
Use gdbpy_ref in py_print_frame

This changes py_print_frame to use gdbpy_ref in a few spots.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-framefilter.c (py_print_frame): Use gdbpy_ref.

7 years agoRemove ensure_python_env
Tom Tromey [Sat, 12 Nov 2016 18:53:50 +0000 (11:53 -0700)] 
Remove ensure_python_env

All of gdb has been converted away from ensure_python_env and
varobj_ensure_python_env now; so remove them.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python.c (ensure_python_env, restore_python_env):
Remove.
* python/python-internal.h (ensure_python_env): Don't declare.
* varobj.h (varobj_ensure_python_env): Don't declare.
* varobj.c (varobj_ensure_python_env): Remove.

7 years agoUse gdbpy_enter_varobj in varobj_value_get_print_value
Tom Tromey [Sat, 12 Nov 2016 18:51:59 +0000 (11:51 -0700)] 
Use gdbpy_enter_varobj in varobj_value_get_print_value

This changes the last function in varobj.c to use gdbpy_enter_varobj.

2017-01-10  Tom Tromey  <tom@tromey.com>

* varobj.c (varobj_value_get_print_value): Use
gdbpy_enter_varobj.

7 years agoChange type of encoding argument to gdbpy_extract_lazy_string
Tom Tromey [Sat, 12 Nov 2016 18:48:48 +0000 (11:48 -0700)] 
Change type of encoding argument to gdbpy_extract_lazy_string

This changes gdbpy_extract_lazy_string's "encoding" argument to be a
unique_xmalloc_ptr.  I chose this rather than std::string because it
can sometimes be NULL.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-prettyprint.c (print_string_repr, print_children):
Update.
* python/py-lazy-string.c (gdbpy_extract_lazy_string): Change type
of "encoding".
* varobj.c (varobj_value_get_print_value): Update.
* python/python-internal.h (gdbpy_extract_lazy_string): Update.

7 years agoUse gdbpy_enter_varobj in more of varobj.c
Tom Tromey [Sat, 12 Nov 2016 18:37:52 +0000 (11:37 -0700)] 
Use gdbpy_enter_varobj in more of varobj.c

This converts most of the remaining functions in varobj.c to use
gdbpy_enter_varobj.

2017-01-10  Tom Tromey  <tom@tromey.com>

* varobj.c (varobj_get_display_hint)
(dynamic_varobj_has_child_method, install_new_value_visualizer)
(varobj_set_visualizer, free_variable): Use
gdbpy_enter_varobj.

7 years agoUse gdbpy_enter in python.c
Tom Tromey [Sat, 12 Nov 2016 18:32:05 +0000 (11:32 -0700)] 
Use gdbpy_enter in python.c

This changes the last functions in python.c to use gdbpy_enter.  I
split gdbpy_finish_initialization into two functions in order to avoid
some "goto"s.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python.c (python_command): Use gdbpy_enter, gdbpy_ref.
(do_finish_initialization): New function.  Use gdbpy_ref.
(gdbpy_finish_initialization): Use gdbpy_enter.  Call
do_finish_initialization.

7 years agoUse gdbpy_enter in py-param.c
Tom Tromey [Sat, 12 Nov 2016 18:23:36 +0000 (11:23 -0700)] 
Use gdbpy_enter in py-param.c

This converts the remaining functions in py-param.c to use
gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-param.c (get_set_value, get_show_value): Use
gdbpy_enter, gdbpy_ref.

7 years agoUse gdbpy_enter in fnpy_call
Tom Tromey [Sat, 12 Nov 2016 18:15:46 +0000 (11:15 -0700)] 
Use gdbpy_enter in fnpy_call

This changes fnpy_call to use gdbpy_enter and gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-function.c (fnpy_call): Use gdbpy_enter, gdbpy_ref.

7 years agoUse gdbpy_enter in cmdpy_function
Tom Tromey [Sat, 12 Nov 2016 18:12:41 +0000 (11:12 -0700)] 
Use gdbpy_enter in cmdpy_function

This changes cmdpy_function to use gdbpy_enter and gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-cmd.c (cmdpy_function): Use gdbpy_enter, gdbpy_ref.

7 years agoUse gdbpy_enter_varobj in py-varobj.c
Tom Tromey [Wed, 9 Nov 2016 03:14:32 +0000 (20:14 -0700)] 
Use gdbpy_enter_varobj in py-varobj.c

This converts the remaining functions in py-varobj.c to use
gdbpy_enter_varobj.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-varobj.c (py_varobj_iter_dtor, py_varobj_iter_next):
Use gdbpy_enter_varobj.

7 years agoIntroduce gdbpy_enter_varobj and use it
Tom Tromey [Tue, 8 Nov 2016 23:18:24 +0000 (16:18 -0700)] 
Introduce gdbpy_enter_varobj and use it

This introduces gdbpy_enter_varobj, a subclass of gdbpy_enter; then
changes one function in py-varobj.c to use it.  gdbpy_enter_varobj
takes a varobj as an argument, similar to varobj_ensure_python_env.

2017-01-10  Tom Tromey  <tom@tromey.com>

* varobj.c (gdbpy_enter_varobj): New constructor.
* python/python-internal.h (gdbpy_enter_varobj): New class.
* python/py-varobj.c (py_varobj_get_iterator): Use
gdbpy_enter_varobj.

7 years agoUse gdbpy_enter in py-xmethod.c
Tom Tromey [Tue, 8 Nov 2016 22:47:39 +0000 (15:47 -0700)] 
Use gdbpy_enter in py-xmethod.c

This changes the remaining functions in py-xmethod.c to use
gdbpy_enter; using gdbpy_ref and unique_xmalloc_ptr as
appropriate.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-xmethods.c (gdbpy_get_xmethod_result_type): Use
gdbpy_enter, gdbpy_ref, unique_xmalloc_ptr.
(gdbpy_invoke_xmethod): Use gdbpy_ref, gdbpy_enter.
(gdbpy_get_xmethod_arg_types): Use gdbpy_ref,
unique_xmalloc_ptr.
(gdbpy_get_xmethod_arg_types): Use gdbpy_ref, gdbpy_enter.

7 years agoUse gdbpy_ref in invoke_match_method
Tom Tromey [Tue, 8 Nov 2016 22:35:24 +0000 (15:35 -0700)] 
Use gdbpy_ref in invoke_match_method

Change invoke_match_method to use gdbpy_ref.
I neglected to convert this function in my earlier series.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-xmethods.c (invoke_match_method): Use
gdbpy_ref.

7 years agoUse gdbpy_enter in gdbpy_get_matching_xmethod_workers
Tom Tromey [Tue, 8 Nov 2016 22:34:55 +0000 (15:34 -0700)] 
Use gdbpy_enter in gdbpy_get_matching_xmethod_workers

Change gdbpy_get_matching_xmethod_workers to use gdbpy_enter and
gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): use
gdbpy_enter, gdbpy_ref.

7 years agoUse gdbpy_enter in python_interactive_command
Tom Tromey [Tue, 8 Nov 2016 22:15:01 +0000 (15:15 -0700)] 
Use gdbpy_enter in python_interactive_command

This changes python_interactive_command to use gdbpy_enter.
Previously this function was leaving a dangling cleanup -- this is
sort of ok in a command function, but IMO it's still better to clean
up.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python.c (python_interactive_command): Use gdbpy_enter.

7 years agoUse gdbpy_enter in gdbpy_before_prompt_hook
Tom Tromey [Tue, 8 Nov 2016 22:13:49 +0000 (15:13 -0700)] 
Use gdbpy_enter in gdbpy_before_prompt_hook

Change gdbpy_before_prompt_hook to use gdbpy_enter and gdbpy_ref.
This also rearranges the function a tiny bit to make it more clear.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python.c (gdbpy_before_prompt_hook): Use gdbpy_enter,
gdbpy_ref.

7 years agoUse gdbpy_enter in py-prettyprint.c
Tom Tromey [Tue, 8 Nov 2016 18:38:22 +0000 (11:38 -0700)] 
Use gdbpy_enter in py-prettyprint.c

Change py-prettyprint.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Use
gdbpy_enter, gdbpy_ref, unique_xmalloc_ptr.

7 years agoIntroduce htab_up and use gdbpy_enter in py-framefilter.c
Tom Tromey [Tue, 8 Nov 2016 18:11:55 +0000 (11:11 -0700)] 
Introduce htab_up and use gdbpy_enter in py-framefilter.c

This introduces a new "htab_up" typedef, which is a std::unique_ptr
that can call htab_delete.  Then it changes some code in
py-framefilter.c to use both gdbpy_enter and the new htab_up.

2017-01-10  Tom Tromey  <tom@tromey.com>

* utils.h (htab_deleter): New struct.
(htab_up): New typedef.
* python/py-framefilter.c (gdbpy_apply_frame_filter): Use
gdbpy_enter, gdbpy_ref, htab_up.

7 years agoUse gdbpy_enter in py-unwind.c
Tom Tromey [Tue, 8 Nov 2016 03:41:50 +0000 (20:41 -0700)] 
Use gdbpy_enter in py-unwind.c

Change py-unwind.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-unwind.c (pending_frame_invalidate): Remove.
(pyuw_sniffer): Use gdbpy_enter and gdbpy_ref.

7 years agoUse gdbpy_enter in py-xmethods.c
Tom Tromey [Mon, 7 Nov 2016 23:13:40 +0000 (16:13 -0700)] 
Use gdbpy_enter in py-xmethods.c

Change the simple parts of py-xmethods.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-xmethods.c (gdbpy_free_xmethod_worker_data)
(gdbpy_clone_xmethod_worker_data): Use gdbpy_enter.

7 years agoUse gdbpy_enter in py-type.c
Tom Tromey [Mon, 7 Nov 2016 23:12:17 +0000 (16:12 -0700)] 
Use gdbpy_enter in py-type.c

Change py-type.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-type.c (save_objfile_types): Use gdbpy_enter.

7 years agoUse gdbpy_enter in python.c
Tom Tromey [Mon, 7 Nov 2016 23:11:37 +0000 (16:11 -0700)] 
Use gdbpy_enter in python.c

Change the simple parts of python.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python.c (gdbpy_eval_from_control_command)
(gdbpy_source_script, gdbpy_run_events)
(gdbpy_source_objfile_script, gdbpy_execute_objfile_script)
(gdbpy_free_type_printers, gdbpy_finish_initialization): Use
gdbpy_enter.

7 years agoUse gdbpy_enter in py-progspace.c
Tom Tromey [Mon, 7 Nov 2016 23:08:36 +0000 (16:08 -0700)] 
Use gdbpy_enter in py-progspace.c

Change py-progspace.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-progspace.c (py_free_pspace): Use gdbpy_enter.

7 years agoUse gdbpy_enter in py-objfile.c
Tom Tromey [Mon, 7 Nov 2016 23:07:53 +0000 (16:07 -0700)] 
Use gdbpy_enter in py-objfile.c

Change py-objfile.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-objfile.c (py_free_objfile): Use gdbpy_enter.

7 years agoUse gdbpy_enter in py-inferior.c
Tom Tromey [Mon, 7 Nov 2016 23:06:26 +0000 (16:06 -0700)] 
Use gdbpy_enter in py-inferior.c

Change py-inferior.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-inferior.c (python_on_normal_stop, python_on_resume)
(python_on_inferior_call_pre, python_on_inferior_call_post)
(python_on_memory_change, python_on_register_change)
(python_inferior_exit, python_new_objfile, add_thread_object)
(delete_thread_object, py_free_inferior): Use gdbpy_enter.

7 years agoUse gdbpy_enter in py-finishbreakpoint.c
Tom Tromey [Mon, 7 Nov 2016 23:03:10 +0000 (16:03 -0700)] 
Use gdbpy_enter in py-finishbreakpoint.c

Change py-finishbreakpoint.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-finishbreakpoint.c (bpfinishpy_handle_stop)
(bpfinishpy_handle_exit): Use gdbpy_enter.

7 years agoUse gdbpy_enter in py-cmd.c
Tom Tromey [Mon, 7 Nov 2016 23:02:16 +0000 (16:02 -0700)] 
Use gdbpy_enter in py-cmd.c

Change py-cmd.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-cmd.c (cmdpy_destroyer)
(cmdpy_completer_handle_brkchars, cmdpy_completer): Use
gdbpy_enter.

7 years agoUse gdbpy_enter in py-breakpoint.c
Tom Tromey [Mon, 7 Nov 2016 22:59:41 +0000 (15:59 -0700)] 
Use gdbpy_enter in py-breakpoint.c

Change py-breakpoint.c to use gdbpy_enter.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-breakpoint.c (gdbpy_breakpoint_cond_says_stop): Use
gdbpy_enter.
(gdbpy_breakpoint_has_cond): Likewise.

7 years agoIntroduce gdbpy_enter
Tom Tromey [Mon, 7 Nov 2016 22:56:57 +0000 (15:56 -0700)] 
Introduce gdbpy_enter

This introduces gdbpy_enter, a class that can be used to acquire and
release the Python GIL, and also set other Python-related globals used
by gdb.  ensure_python_env is rewritten in terms of this new class.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python.c (gdbpy_enter): New constructor.
(~gdbpy_enter): New destructor.
(restore_python_env, ensure_python_env): Rewrite.
* python/python-internal.h (gdbpy_enter): New class.

7 years agoUse gdbpy_ref in gdbpy_lookup_symbol
Tom Tromey [Mon, 7 Nov 2016 04:51:20 +0000 (21:51 -0700)] 
Use gdbpy_ref in gdbpy_lookup_symbol

This changes gdbpy_lookup_symbol to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-symbol.c (gdbpy_lookup_symbol): Use gdbpy_ref.

7 years agoUse gdbpy_ref in py-value.c
Tom Tromey [Mon, 7 Nov 2016 04:50:36 +0000 (21:50 -0700)] 
Use gdbpy_ref in py-value.c

This changes a few functions in py-value.c to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-value.c (value_has_field, get_field_flag)
(get_field_type, valpy_getitem, convert_value_from_python): Use
gdbpy_ref.

7 years agoUse gdbpy_ref in python.c
Tom Tromey [Mon, 7 Nov 2016 04:49:34 +0000 (21:49 -0700)] 
Use gdbpy_ref in python.c

This changes a couple of functions in python.c to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/python.c (gdbpy_progspaces, gdbpy_objfiles): Use
gdbpy_ref.

7 years agoUse gdbpy_ref in py-prettyprint.c
Tom Tromey [Mon, 7 Nov 2016 04:37:01 +0000 (21:37 -0700)] 
Use gdbpy_ref in py-prettyprint.c

This changes several functions in py-prettyprint.c to use
gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-prettyprint.c (search_pp_list)
(find_pretty_printer_from_objfiles)
(find_pretty_printer_from_progspace)
(find_pretty_printer_from_gdb, find_pretty_printer)
(gdbpy_get_display_hint, gdbpy_get_varobj_pretty_printer): Use
gdbpy_ref.

7 years agoUse gdbpy_ref in call_doc_function
Tom Tromey [Mon, 7 Nov 2016 04:29:12 +0000 (21:29 -0700)] 
Use gdbpy_ref in call_doc_function

This changes call_doc_function to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-param.c (call_doc_function): Use gdbpy_ref.

7 years agoUse gdbpy_ref in py-linetable.c
Tom Tromey [Mon, 7 Nov 2016 04:25:34 +0000 (21:25 -0700)] 
Use gdbpy_ref in py-linetable.c

This changes some code in py-linetable.c to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-linetable.c (build_line_table_tuple_from_pcs)
(ltpy_get_all_source_lines): Use gdbpy_ref.

7 years agoUse gdbpy_ref in py-framefilter.c
Tom Tromey [Mon, 7 Nov 2016 04:25:31 +0000 (21:25 -0700)] 
Use gdbpy_ref in py-framefilter.c

This changes some code in py-framefilter.c to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-framefilter.c (extract_sym, extract_value)
(get_py_iter_from_func, bootstrap_python_frame_filters): Use
gdbpy_ref.

7 years agoUse gdbpy_ref in gdbpy_breakpoints
Tom Tromey [Mon, 7 Nov 2016 04:25:22 +0000 (21:25 -0700)] 
Use gdbpy_ref in gdbpy_breakpoints

This changes gdbpy_breakpoints to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-breakpoint.c (gdbpy_breakpoints): Use gdbpy_ref.

7 years agoUse gdbpy_ref in gdbpy_inferiors
Tom Tromey [Mon, 7 Nov 2016 04:23:31 +0000 (21:23 -0700)] 
Use gdbpy_ref in gdbpy_inferiors

This changes gdbpy_inferiors to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-inferior.c (gdbpy_inferiors): Use gdbpy_ref.

7 years agoUse gdbpy_ref in py-function.c
Tom Tromey [Mon, 7 Nov 2016 04:21:14 +0000 (21:21 -0700)] 
Use gdbpy_ref in py-function.c

This changes some code in py-function.c to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-function.c (convert_values_to_python, fnpy_init): Use
gdbpy_ref.

7 years agoUse gdbpy_ref in gdbpy_string_to_argv
Tom Tromey [Mon, 7 Nov 2016 04:10:18 +0000 (21:10 -0700)] 
Use gdbpy_ref in gdbpy_string_to_argv

This chanes gdbpy_string_to_argv to use gdbpy_ref.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-cmd.c (gdbpy_string_to_argv): Use gdbpy_ref.

7 years agoUse gdbpy_ref in py-type.c
Tom Tromey [Mon, 7 Nov 2016 03:59:51 +0000 (20:59 -0700)] 
Use gdbpy_ref in py-type.c

This changes py-type.c to use gdbpy_ref.
This results in simpler logic and the removal of "goto"s.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-type.c (convert_field, make_fielditem, typy_fields)
(typy_range): Use gdbpy_ref.

7 years agoChange event code to use gdbpy_ref
Tom Tromey [Mon, 7 Nov 2016 03:42:32 +0000 (20:42 -0700)] 
Change event code to use gdbpy_ref

This changes the event code in the Python layer to use
gdbpy_ref, simplifying the logic in many places.

It also changes evpy_emit_event not to steal a reference to its
argument.  This is simpler to do now that gdbpy_ref is in use;
it's also a reasonable cleanup in its own right.  While doing this I
realized that evpy_emit_event should not be calling gdbpy_print_stack
(all the outermost callers do this if needed), so I removed this as
well.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-threadevent.c (create_thread_event_object): Use
gdbpy_ref.
* python/py-stopevent.c (create_stop_event_object): Simplify.
(emit_stop_event): Use gdbpy_ref.
* python/py-signalevent.c (create_signal_event_object): Use
gdbpy_ref.
* python/py-newobjfileevent.c (create_new_objfile_event_object)
(emit_new_objfile_event, create_clear_objfiles_event_object)
(emit_clear_objfiles_event): Use gdbpy_ref.
* python/py-infevents.c (create_inferior_call_event_object)
(create_register_changed_event_object)
(create_memory_changed_event_object, emit_inferior_call_event)
(emit_memory_changed_event, emit_register_changed_event): Use
gdbpy_ref.
* python/py-exitedevent.c (create_exited_event_object)
(emit_exited_event): Use gdbpy_ref.
* python/py-event.h (evpy_emit_event): Remove
CPYCHECKER_STEALS_REFERENCE_TO_ARG annotation.
* python/py-event.c (evpy_emit_event): Use gdbpy_ref.
* python/py-continueevent.c (emit_continue_event): Use
gdbpy_ref.
* python/py-breakpoint.c (gdbpy_breakpoint_created)
(gdbpy_breakpoint_deleted, gdbpy_breakpoint_modified): Use
gdbpy_ref.
* python/py-bpevent.c (create_breakpoint_event_object): Use
gdbpy_ref.

7 years agoIntroduce py-ref.h
Tom Tromey [Sat, 5 Nov 2016 19:43:23 +0000 (13:43 -0600)] 
Introduce py-ref.h

This patch introduces class gdbpy_ref, which is a sort of smart
pointer that owns a single Python reference to a PyObject.  This class
acts a bit like unique_ptr, but also a bit like shared_ptr (in that
copies do what you might expect); I considered going solely with
unique_ptr but it seemed quite strange to have a unique_ptr that
actually manages a shared resource.

Subsequent patches use this new class to simplify logic in the Python
layer.

2017-01-10  Tom Tromey  <tom@tromey.com>

* python/py-ref.h: New file.

7 years agoAutomatic date update in version.in
GDB Administrator [Wed, 11 Jan 2017 00:00:35 +0000 (00:00 +0000)] 
Automatic date update in version.in

7 years agoi386/x32: Align .eh_frame section to 4 bytes
H.J. Lu [Tue, 10 Jan 2017 22:18:11 +0000 (14:18 -0800)] 
i386/x32: Align .eh_frame section to 4 bytes

.eh_frame section covering PLT sections should be aligned to 4 bytes
for i386 and x32.

bfd/

* elf32-i386.c (elf_i386_check_relocs): Align .eh_frame section
to 4 bytes.
* elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Align
.eh_frame section to 4 bytes for x32.
(elf_x86_64_check_relocs): Likewise.

ld/

* testsuite/ld-x86-64/pr20830b.d: Updated.

7 years agoX32: Place .plt.got section after .plt section
H.J. Lu [Tue, 10 Jan 2017 21:57:39 +0000 (13:57 -0800)] 
X32: Place .plt.got section after .plt section

This patch places .plt.got section after .plt section for x32.

* emulparams/elf32_x86_64.sh (TINY_READONLY_SECTION): New.
* testsuite/ld-x86-64/pr20830.d: Renamed to ...
* testsuite/ld-x86-64/pr20830a.d: This.  Updated.
* testsuite/ld-x86-64/pr20830b.d: New file.
* testsuite/ld-x86-64/x86-64.exp: Rename pr20830 to pr20830a.
Run pr20830b.

7 years agoi386/x86-64: Add unwind info for .plt.got section
H.J. Lu [Tue, 10 Jan 2017 21:31:59 +0000 (13:31 -0800)] 
i386/x86-64: Add unwind info for .plt.got section

When there are both PLT and GOT references to the same function symbol,
linker combines GOTPLT and GOT slots into a single GOT slot and create
an entry in .plt.got section for PLT access via the GOT slot.  This
patch adds unwind info for .plt.got section.

bfd/

PR ld/20830
* elf32-i386.c (elf_i386_eh_frame_plt_got): New.
(PLT_GOT_FDE_LENGTH): Likewise.
(elf_i386_plt_layout): Add eh_frame_plt_got and
eh_frame_plt_got_size.
(elf_i386_plt): Updated.
(elf_i386_link_hash_table): Add plt_got_eh_frame.
(elf_i386_check_relocs): Create .eh_frame section for .plt.got.
(elf_i386_size_dynamic_sections): Allocate and initialize
.eh_frame section for .plt.got.
(elf_i386_finish_dynamic_sections): Adjust .eh_frame section for
.plt.got.
(elf_i386_nacl_plt): Add FIXME for eh_frame_plt_got and
eh_frame_plt_got_size.
* elf64-x86-64.c (elf_x86_64_eh_frame_plt_got): New.
(PLT_GOT_FDE_LENGTH): Likewise.
(elf_x86_64_backend_data): Add eh_frame_plt_got and
eh_frame_plt_got_size.
(elf_x86_64_arch_bed): Updated.
(elf_x86_64_bnd_arch_bed): Add FIXME for eh_frame_plt_got and
eh_frame_plt_got_size.
(elf_x86_64_nacl_arch_bed): Likewise.
(elf_x86_64_link_hash_table): Add plt_got_eh_frame.
(elf_x86_64_check_relocs): Create .eh_frame section for .plt.got.
(elf_x86_64_size_dynamic_sections): Allocate and initialize
.eh_frame section for .plt.got.
(elf_x86_64_finish_dynamic_sections): Adjust .eh_frame section
for .plt.got.

ld/

PR ld/20830
* testsuite/ld-i386/i386.exp: Run pr20830.
* testsuite/ld-x86-64/x86-64.exp: Likewise.
* testsuite/ld-i386/pr20830.d: New file.
* testsuite/ld-i386/pr20830.s: Likewise.
* testsuite/ld-x86-64/pr20830.d: Likewise.
* testsuite/ld-x86-64/pr20830.s: Likewise.

7 years ago[GOLD] PowerPC64 TOC indirect to TOC relative code editing
Alan Modra [Tue, 10 Jan 2017 21:11:53 +0000 (07:41 +1030)] 
[GOLD] PowerPC64 TOC indirect to TOC relative code editing

Doesn't yet trim off the unused TOC entries.

* powerpc.cc (class Powerpc_copy_relocs): New.
(Powerpc_copy_relocs::emit): New function.
(Powerpc_relobj::relatoc_, toc_, no_toc_opt_): New variables.
(Powerpc_relobj::toc_shndx, set_no_toc_opt, no_toc_opt): New inlines.
(Powerpc_relobj::do_relocate_sections): New function.
(Powerpc_relobj::make_toc_relative): Likewise.
(Powerpc_relobj::do_find_special_sections): Stash away .rela.toc
and .toc too.
(ok_lo_toc_insn): Move earlier, and handle more insns.
(Target_powerpc::Scan::local): If optimizing toc accesses, set
no_toc_opt for entries we can't edit.  Check insn validity.
Emit "toc optimization is not supported" warning, downgraded
from error.
(Target_powerpc::Scan::global): Likewise.
(Target_powerpc::Relocate::relocate): Edit TOC indirect code
to TOC relative.  Don't emit "toc optimization is not supported"
error here.

7 years agoDon't use elf_i386_eh_frame_plt directly
H.J. Lu [Tue, 10 Jan 2017 19:30:25 +0000 (11:30 -0800)] 
Don't use elf_i386_eh_frame_plt directly

Use eh_frame_plt_size and eh_frame_plt from elf_i386_plt_layout for
.eh_frame covering the .plt section.

* elf32-i386.c (elf_i386_size_dynamic_sections): Set
plt_eh_frame->size to eh_frame_plt_size and use eh_frame_plt.

7 years agoi386: Pass -Wl,-R,tmpdir/-Wl --as-needed to $CC
H.J. Lu [Tue, 10 Jan 2017 18:54:39 +0000 (10:54 -0800)] 
i386: Pass -Wl,-R,tmpdir/-Wl --as-needed to $CC

Since linker tests were changed to use $CC, instead of $LD, we need
to pass -Wl,-R,tmpdir and -Wl,--as-needed to $CC.

* testsuite/ld-i386/i386.exp: Pass -Wl,-R,tmpdir to GCC driver.
* testsuite/ld-i386/tls.exp: Likewise.

7 years agoChange return type of ui_out redirect to void
Simon Marchi [Tue, 10 Jan 2017 16:30:47 +0000 (11:30 -0500)] 
Change return type of ui_out redirect to void

All implementations of redirect/do_redirect in the ui_out subsystem
always return 0 (success).  We can therefore clean it up and make them
return void.

gdb/ChangeLog:

* cli-out.c (cli_ui_out::do_redirect): Change return type to
void.
* cli-out.h (cli_ui_out::do_redirect): Likewise.
* mi/mi-out.c (mi_ui_out::do_redirect): Likewise.
* mi/mi-out.h (mi_ui_out::do_redirect): Likewise.
* ui-out.c (ui_out::redirect): Likewise.
* ui-out.h (ui_out::redirect, ui_out::do_redirect): Likewise.
* cli/cli-logging.c (set_logging_redirect): Update call site of
ui_out::redirect.
(handle_redirections): Likewise.
* scm-ports.c (ioscm_with_output_to_port_worker): Likewise.
* top.c (execute_command_to_string): Likewise.
* utils.c (do_ui_out_redirect_pop): Likewise.

7 years agoRefactor Sized_relobj_file::do_relocate_sections.
Cary Coutant [Tue, 10 Jan 2017 15:46:30 +0000 (07:46 -0800)] 
Refactor Sized_relobj_file::do_relocate_sections.

gold/
* aarch64.cc (AArch64_relobj::do_relocate_sections): Call
Sized_relobj_file::relocate_section_range().
* arm.cc (Arm_relobj::do_relocate_sections): Likewise.
* object.h (Sized_relobj_file::relocate_section_range): New method.
* reloc.cc (Sized_relobj_file::do_relocate_sections): Move
implementation...
(Sized_relobj_file::relocate_section_range): ...to new method.

7 years agoUpdate help of the "frame" command
Simon Marchi [Tue, 10 Jan 2017 15:16:26 +0000 (10:16 -0500)] 
Update help of the "frame" command

The help message of the "frame" command states that nothing is printed
if the command is executed from the command file or user-defined
command.  My testing leads me to think that this is not true (at least
today).

  (gdb) bt
  #0  bar (n=17) at test.c:9
  #1  0x00000000004006e0 in foo (v=17) at test.c:13
  #2  0x00000000004006f0 in main () at test.c:21
  (gdb) frame
  #0  bar (n=17) at test.c:9
  9     baz(n);
  (gdb) define foo
  Type commands for definition of "foo".
  End with a line saying just "end".
  >frame 1
  >end
  (gdb) foo
  #1  0x00000000004006e0 in foo (v=17) at test.c:13
  13     bar(v);

This patch simply removes that bit from the help message.  I didn't find
anything corresponding to this in the documentation that needs to be
fixed.

The behavior change corresponding to this documentation change was done
in commit b00771232fab861fb31e42dfd5f6643ba1b43cc9.

gdb/ChangeLog:

* stack.c (_initialize_stack): Update "frame" command help message.

7 years agoFix sleb128-8 regressions.
Tristan Gingold [Tue, 10 Jan 2017 13:43:01 +0000 (14:43 +0100)] 
Fix sleb128-8 regressions.

gas/
* testsuite/gas/all/sleb128-8.d: Adjust test.
* testsuite/gas/all/gas.exp (test_cond): Likewise.

7 years agoFix compile time warning about pointer comparison.
Nick Clifton [Tue, 10 Jan 2017 11:45:12 +0000 (11:45 +0000)] 
Fix compile time warning about pointer comparison.

PR 21034
* stabs.c (parse_stab_members): Fix thinko checking for g++
version 1 stabs information.

7 years agoUpdated Swedish translations for GAS and LD
Nick Clifton [Tue, 10 Jan 2017 11:28:36 +0000 (11:28 +0000)] 
Updated Swedish translations for GAS and LD

7 years ago[ARC] Add new linker emulation for nps
Graham Markall [Thu, 8 Dec 2016 16:58:23 +0000 (16:58 +0000)] 
[ARC] Add new linker emulation for nps

The arc700 nps variant uses some specific named sections to
facilitate its CMEM based instructions, which operate on memory
regions fixed at specific addresses.

This commit adds the arclinux_nps emulation, which is based on the
arclinux emulation. The new emulation uses the OTHER_SECTIONS
variable in the emulation parameters script to provide symbols
mapping to various locations in the CMEM space on nps.

The accompanying test ensures that all symbols are provided at the
correct address in the linker script.

ld/ChangeLog:

  * Makefile.am: Add earclinux_nps.c target and add to
  ALL_EMULATION_SOURCES.
  * Makefile.in: Likewise, regenerated.
  * configure.tgt: Add arclinux_nps as an extra emulation for
  arc*-*-elf* and arc*-*-linux*.
  * emulparams/arc-nps.sh: New file.
  * emulparams/arclinux_nps.sh: New file.
  * testsuite/ld-arc/arclinux-nps.d,
  * testsuite/ld-arc/arclinux-nps.s: New test.

7 years agoThis patch ensure same output for sleb128 with large number.
Tristan Gingold [Mon, 9 Jan 2017 14:50:32 +0000 (15:50 +0100)] 
This patch ensure same output for sleb128 with large number.

gas/
* read.c (emit_leb128_expr): Extended unsigned big number for
sleb128.
* testsuite/gas/all/gas.exp (test_cond): Add sleb128-8 test.
* testsuite/gas/all/sleb128.d: New test.
* testsuite/gas/all/sleb128.s: New test source.

7 years ago[GOLD] Fix tests for powerpc64
Alan Modra [Mon, 9 Jan 2017 23:58:20 +0000 (10:28 +1030)] 
[GOLD] Fix tests for powerpc64

PowerPC64 defines .TOC. rather than _GLOBAL_OFFSET_TABLE_, and
what's more, doesn't define it at all unless referenced.  For ELFv1
ABI the symbol isn't normally referenced, so modify the test to accept
.TOC. as a variant of _GLOBAL_OFFSET_TABLE_ and 0 or 1 occurrences.

copy_test_relro as written doesn't need copy relocs on PowerPC64.
PowerPC64 is always PIC.  So, modify copy_test_relro to test that the
existing vars are in fact read-only directly by deliberately causing a
sigsegv, and add another couple of vars that do cause copy relocs even
when PIC.

* testsuite/ver_test_8.sh: Accept .TOC. in lieu of
_GLOBAL_OFFSET_TABLE_.  Allow zero count.
* testsuite/copy_test_relro_1.cc (c, q): New vars.
* testsuite/copy_test_relro.cc: Rewrite to test read-only
status of variables directly.  Reference new vars in
read-only data.

7 years ago[GOLD] Add --secure-plt option for ppc32
Alan Modra [Mon, 9 Jan 2017 23:54:09 +0000 (10:24 +1030)] 
[GOLD] Add --secure-plt option for ppc32

Added just to accept, and ignore.  gcc since 2015-10-21, when
configured with --enable-secureplt passes this option to the linker.
As powerpc gold cannot link --bss-plt code successfully, gold needs to
accept the option or the gcc specs file needs to be changed.

The patch also make gold detect --bss-plt code and error out rather
than producing a binary that crashes.

* options.h: Add --secure-plt option.
* powerpc.cc (Target_powerpc::Scan::local): Detect and error
on -fPIC -mbss-plt code.
(Target_powerpc::Scan::global): Likewise.

7 years agoAutomatic date update in version.in
GDB Administrator [Tue, 10 Jan 2017 00:00:22 +0000 (00:00 +0000)] 
Automatic date update in version.in

7 years agoFix problems with the implementation of the uzp1 and uzp2 instructions.
Jim Wilson [Mon, 9 Jan 2017 23:44:57 +0000 (15:44 -0800)] 
Fix problems with the implementation of the uzp1 and uzp2 instructions.

sim/aarch64/
* simulator.c (do_vec_UZP): Rewrite.
sim/testsuite/sim/aarch64/
* uzp.s: New.

7 years agoFix inferior memory reading in GDBServer for arm/aarch32
Antoine Tremblay [Mon, 9 Jan 2017 17:39:07 +0000 (12:39 -0500)] 
Fix inferior memory reading in GDBServer for arm/aarch32

Before this patch, some functions would read the inferior memory with
(*the_target)->read_memory, which returns the raw memory, rather than the
shadowed memory.

This is wrong since these functions do not expect to read a breakpoint
instruction and can lead to invalid behavior.

Use of raw memory in get_next_pcs_read_memory_unsigned_integer for example
could lead to get_next_pc returning an invalid pc.

Here's how this would happen:

In non-stop:

the user issues:

thread 1
step&
thread 2
step&
thread 3
step&

In a similar way as non-stop-fair-events.exp (threads are looping).

GDBServer:

 linux_resume is called
 GDBServer has pending events,
 threads are not resumed and single-step breakpoint for thread 1 not installed.

 linux_wait_1 is called with a pending event on thread 2 at pc A
 GDBServer handles the event and calls proceed_all_lwps
 This calls proceed_one_lwp and installs single-step breakpoints on all
 the threads that need one.

 Now since thread 1 needs to install a single-step breakpoint and is at pc B
 (different than thread 2), a step-over is not initiated and get_next_pc
 is called to figure out the next instruction from pc B.

 However it may just be that thread 3 as a single step breakpoint at pc
 B. And thus get_next_pc fails.

This situation is tested with non-stop-fair-events.exp.

In other words, single-step breakpoints are installed in proceed_one_lwp
for each thread.  GDBserver proceeds two threads for resume_step, as
requested by GDB, and the thread proceeded later may see the single-step
breakpoints installed for the thread proceeded just now.

Tested on gdbserver-native/-m{thumb,arm} no regressions.

gdb/gdbserver/ChangeLog:

* linux-aarch32-low.c (arm_breakpoint_kind_from_pc): Use
target_read_memory.
* linux-arm-low.c (get_next_pcs_read_memory_unsigned_integer): Likewise.
(get_next_pcs_syscall_next_pc): Likewise.

7 years agoRISC-V/GAS: Support more relocs against constant addresses
Andrew Waterman [Thu, 22 Dec 2016 02:05:28 +0000 (18:05 -0800)] 
RISC-V/GAS: Support more relocs against constant addresses

Previously, some pseudoinstructions like "call" only accepted
symbolic addresses and rejected constant addresses with an
esoteric internal error.  This patch enables them by deferring
application of constant relocations to md_apply_fix, rather than
eagerly applying them during instruction assembly.

gas/ChangeLog

2017-01-09  Andrew Waterman <andrew@sifive.com>

* config/tc-riscv.c (append_insn): Don't eagerly apply relocations
against constants.
(md_apply_fix): Mark relocations against constants as "done."

7 years agoRISC-V/GAS: Improve handling of invalid relocs
Andrew Waterman [Wed, 21 Dec 2016 20:47:13 +0000 (12:47 -0800)] 
RISC-V/GAS: Improve handling of invalid relocs

TLS relocs against constants previously segfaulted, and illegal
symbol subtractions were silently ignored.

The previous behavior was to segfault.

gas/ChangeLog

2017-01-09  Andrew Waterman <andrew@sifive.com>

* config/tc-riscv.c (md_apply_fix): Report TLS relocations against
constants.  Report disallowed symbol subtractions.

7 years agoRemove some custom sections from RISC-V's default linker scripts
Palmer Dabbelt [Fri, 30 Dec 2016 01:29:53 +0000 (17:29 -0800)] 
Remove some custom sections from RISC-V's default linker scripts

This was added so compressed loads could have smaller offsets for
accessing the data section, but the result was that writable sections
ended up in INITIAL_READONLY_SECTIONS.  This is a bad idea.  The fix is
to just remove this micro-optimization.

Thanks to Alan Morda for finding the problem!

ld/ChangeLog

2017-01-09  Palmer Dabbelt <palmer@dabbelt.com>
            Kito Cheng <kito.cheng@gmail.com>

        * emulparams/elf32lriscv-defs.sh (INITIAL_READONLY_SECTIONS):
        Removed.
        (SDATA_START_SYMBOLS): Likewise.

7 years agoSpeed up objdump when displaying disassembly mixed with line number and source code...
Nick Clifton [Mon, 9 Jan 2017 16:49:48 +0000 (16:49 +0000)] 
Speed up objdump when displaying disassembly mixed with line number and source code information.

bfd * dwarf2.c (lookup_address_in_function_table): Return early if
there are no functions in the given comp unit, or if the high
address of the last function in the comp unit is less than the
desired address.

binutils * objdump.c (display_file): Add new parameter 'last_file'.  If
last_file is true, do not call bfd_close at the end of the
function.
(main): Set the value of the last_file parameter when calling
display_file.

7 years agoAdd Swedish translation for GAS.
Nick Clifton [Mon, 9 Jan 2017 10:11:50 +0000 (10:11 +0000)] 
Add Swedish translation for GAS.

* po/sv.po: New Swedish translation.
* configure.ac (ALL_LINGUAS): Add sv.
* configure: Regenerate.

7 years agoImprove objdump's behaviour when it encounters a corrupt binary with an excessively...
Nick Clifton [Mon, 9 Jan 2017 09:27:46 +0000 (09:27 +0000)] 
Improve objdump's behaviour when it encounters a corrupt binary with an excessively large symbol table.

PR binutils/21013
* coffgen.c (_bfd_coff_get_external_symbols): Generate an error
message if there are too many symbols to load.

7 years agoRISC-V/GAS: Correct branch relaxation for weak symbols.
Andrew Waterman [Mon, 9 Jan 2017 09:22:33 +0000 (09:22 +0000)] 
RISC-V/GAS: Correct branch relaxation for weak symbols.

* config/tc-riscv.c (relaxed_branch_length): Use the long
sequence when the target is a weak symbol.

7 years ago[GOLD] Set sh_info of .rela.plt for powerpc
Alan Modra [Mon, 9 Jan 2017 00:16:23 +0000 (10:46 +1030)] 
[GOLD] Set sh_info of .rela.plt for powerpc

* powerpc.cc (Target_powerpc::make_plt_section): Point sh_info of
".rela.plt" at ".plt".