2016-08-05 19:54:11 +01:00
|
|
|
|
2016-08-05 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR remote/20398
|
|
|
|
|
* remote-fileio.c (remote_fileio_quit_handler): Check the quit
|
|
|
|
|
flag before calling quit.
|
|
|
|
|
|
2016-08-05 17:09:31 +01:00
|
|
|
|
2016-08-05 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention that GDB and GDBserver build with a C++ compiler
|
|
|
|
|
by default.
|
|
|
|
|
|
2016-08-05 16:54:29 +01:00
|
|
|
|
2016-08-05 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* build-with-cxx.m4: Change help string to be in terms of
|
|
|
|
|
--disable-build-with-cxx.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
|
Determine target description for native aarch64
I find the following test fail when I test native aarch64 gdb with
arm program,
(gdb) PASS: gdb.base/attach-pie-noexec.exp: attach
set architecture arm^M
warning: Selected architecture arm is not compatible with reported target architecture aarch64^M
Architecture `arm' not recognized.^M
The target architecture is set automatically (currently aarch64)^M
(gdb) FAIL: gdb.base/attach-pie-noexec.exp: set architecture arm
GDB thinks the target is aarch64, but it isn't. Nowadays, we are
using some entries AT_PHENT and AT_HWCAP in auxv to determine whether
the process is a 32-bit arm one or 64-bit aarch64 one, and get the
right gdbarch. However, in the process of parsing auxv (in
inf_ptrace_auxv_parse), the size of int and data pointer of
target_gdbarch is used. If debug program exists (in most of cases),
target_gdbarch is already set according to the debug program, which
is arm in my case. Then, GDB can parse auxv successfully. However,
in gdb.base/attach-pie-noexec.exp, the debug program is removed,
target_gdbarch is aarch64 when GDB parse auxv, so GDB can't parse
it successfully.
Instead of using auxv, we check the return value of ptrace NT_ARM_VFP.
If the program is an arm process, NT_ARM_VFP is OK, otherwise, error
is returned.
Additionally, we only return tdesc_arm_with_neon for arm process,
because neon is mandatory on ARMv8.
gdb:
2016-08-04 Yao Qi <yao.qi@linaro.org>
* aarch64-linux-nat.c (tdesc_arm_with_vfpv3): Remove the
declaration.
(aarch64_linux_read_description): Remove code on getting
auxv and select target description on it. Select target
description by the result of NT_ARM_VFP ptrace request.
2016-08-04 11:37:57 +01:00
|
|
|
|
2016-08-04 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* aarch64-linux-nat.c (tdesc_arm_with_vfpv3): Remove the
|
|
|
|
|
declaration.
|
|
|
|
|
(aarch64_linux_read_description): Remove code on getting
|
|
|
|
|
auxv and select target description on it. Select target
|
|
|
|
|
description by the result of NT_ARM_VFP ptrace request.
|
|
|
|
|
|
2016-06-12 20:45:29 -06:00
|
|
|
|
2016-08-03 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/18565:
|
|
|
|
|
* python/py-frame.c (frapy_function): Use find_frame_funname.
|
|
|
|
|
|
2016-08-03 08:27:56 -06:00
|
|
|
|
2016-08-03 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* stack.c (find_frame_funname): Avoid any possible leak in case
|
|
|
|
|
cp_remove_params can throw.
|
|
|
|
|
|
2016-08-02 16:52:59 -06:00
|
|
|
|
2016-08-03 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention new Python breakpoint events.
|
|
|
|
|
|
2016-08-02 16:58:37 -06:00
|
|
|
|
2016-08-02 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Core): Add self as Rust maintainer.
|
|
|
|
|
|
2016-08-01 08:28:26 -07:00
|
|
|
|
2016-08-01 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Create a new section for the next release branch.
|
|
|
|
|
Rename the section of the current branch, now that it has
|
|
|
|
|
been cut.
|
|
|
|
|
|
2016-08-01 08:23:20 -07:00
|
|
|
|
2016-08-01 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
GDB 7.12 branch created (41bfcd638a4e0e48b96ce4de2845372dea481322):
|
|
|
|
|
* version.in: Bump version to 7.12.50.DATE-git.
|
|
|
|
|
|
2016-07-27 09:00:03 +09:30
|
|
|
|
2016-07-27 Alan Modra <amodra@gmail.com>
|
|
|
|
|
|
|
|
|
|
* amd64-darwin-tdep.c: Don't include libbfd.h.
|
|
|
|
|
* i386-darwin-tdep.c: Likewise.
|
|
|
|
|
* rs6000-nat.c: Likewise.
|
|
|
|
|
* rs6000-tdep.c: Likewise.
|
|
|
|
|
|
PR python/20190 - compute TLS symbol without a frame
PR python/20190 arose from an exception I noticed when trying to use
the Python unwinder for Spider Monkey in Firefox.
The problem is that the unwinder wants to examine the value of a
thread-local variable. However, sympy_value rejects this because
symbol_read_needs_frame returns true for a TLS variable.
This problem arose once before, though in a different context:
https://sourceware.org/bugzilla/show_bug.cgi?id=11803
At the time Pedro and Daniel pointed out a simpler way to fix that bug
(see links in 20190 if you are interested); but for this new bug I
couldn't think of a similar fix and ended up implementing Daniel's
other suggestion:
https://sourceware.org/ml/gdb-patches/2010-07/msg00393.html
That is, this patch makes it possible to detect whether a symbol needs
a specific frame, or whether it just needs the inferior to have
registers.
Built and regtested on x86-64 Fedora 24.
2016-07-26 Tom Tromey <tom@tromey.com>
* symtab.c (register_symbol_computed_impl): Update.
PR python/20190:
* value.h (symbol_read_needs): Declare.
(symbol_read_needs_frame): Add comment.
* symtab.h (struct symbol_computed_ops) <read_variable>: Update
comment.
<get_symbol_read_needs>: Rename. Change return type.
* findvar.c (symbol_read_needs): New function.
(symbol_read_needs_frame): Rewrite.
(default_read_var_value): Use symbol_read_needs.
* dwarf2loc.c (struct symbol_needs_baton): Rename.
<needs>: Renamed from needs_frame. Changed type.
(needs_frame_read_addr_from_reg, symbol_needs_get_reg_value)
(symbol_needs_read_mem, symbol_needs_frame_base)
(symbol_needs_frame_cfa, symbol_needs_tls_address)
(symbol_needs_dwarf_call): Rename.
(needs_dwarf_reg_entry_value): Update.
(symbol_needs_ctx_funcs, dwarf2_loc_desc_get_symbol_read_needs):
Rename and update.
(locexpr_get_symbol_read_needs, loclist_symbol_needs): Likewise.
(dwarf2_locexpr_funcs, dwarf2_loclist_funcs): Update.
* defs.h (enum symbol_needs_kind): New.
2016-07-26 Tom Tromey <tom@tromey.com>
PR python/20190:
* gdb.threads/tls.exp (check_thread_local): Add python symbol
test.
2016-06-03 14:11:08 -06:00
|
|
|
|
2016-07-26 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* symtab.c (register_symbol_computed_impl): Update.
|
|
|
|
|
PR python/20190:
|
|
|
|
|
* value.h (symbol_read_needs): Declare.
|
|
|
|
|
(symbol_read_needs_frame): Add comment.
|
|
|
|
|
* symtab.h (struct symbol_computed_ops) <read_variable>: Update
|
|
|
|
|
comment.
|
|
|
|
|
<get_symbol_read_needs>: Rename. Change return type.
|
|
|
|
|
* findvar.c (symbol_read_needs): New function.
|
|
|
|
|
(symbol_read_needs_frame): Rewrite.
|
|
|
|
|
(default_read_var_value): Use symbol_read_needs.
|
|
|
|
|
* dwarf2loc.c (struct symbol_needs_baton): Rename.
|
|
|
|
|
<needs>: Renamed from needs_frame. Changed type.
|
|
|
|
|
(needs_frame_read_addr_from_reg, symbol_needs_get_reg_value)
|
|
|
|
|
(symbol_needs_read_mem, symbol_needs_frame_base)
|
|
|
|
|
(symbol_needs_frame_cfa, symbol_needs_tls_address)
|
|
|
|
|
(symbol_needs_dwarf_call): Rename.
|
|
|
|
|
(needs_dwarf_reg_entry_value): Update.
|
|
|
|
|
(symbol_needs_ctx_funcs, dwarf2_loc_desc_get_symbol_read_needs):
|
|
|
|
|
Rename and update.
|
|
|
|
|
(locexpr_get_symbol_read_needs, loclist_symbol_needs): Likewise.
|
|
|
|
|
(dwarf2_locexpr_funcs, dwarf2_loclist_funcs): Update.
|
|
|
|
|
* defs.h (enum symbol_needs_kind): New.
|
|
|
|
|
|
2016-07-26 19:35:40 +01:00
|
|
|
|
2016-07-26 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* nat/linux-ptrace.c: Include "gregset.h".
|
|
|
|
|
(linux_ptrace_test_ret_to_nx): Use PTRACE_GETREGS instead of
|
|
|
|
|
PTRACE_PEEKUSER.
|
|
|
|
|
|
2016-07-26 19:35:40 +01:00
|
|
|
|
2016-07-26 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* amd64-linux-nat.c (amd64_linux_siginfo_fixup): Rename 'native'
|
|
|
|
|
parameter to 'ptrace'.
|
|
|
|
|
* nat/amd64-linux-siginfo.c (GDB_SI_SIZE): New define.
|
|
|
|
|
(nat_uptr_t): New an unsigned long.
|
|
|
|
|
(nat_clock_t): Remove attribute __aligned__.
|
|
|
|
|
(struct nat_timeval): Delete.
|
|
|
|
|
(nat_siginfo_t): Remove attribute __aligned__.
|
|
|
|
|
(ptrace_siginfo_t): Define.
|
|
|
|
|
(compat_siginfo_from_siginfo, siginfo_from_compat_siginfo)
|
|
|
|
|
(compat_x32_siginfo_from_siginfo)
|
|
|
|
|
(siginfo_from_compat_x32_siginfo): Make 'from' parameter const.
|
|
|
|
|
Convert through a ptrace_siginfo_t instead of a nat_siginfo_t.
|
|
|
|
|
Remove casts.
|
|
|
|
|
(amd64_linux_siginfo_fixup_common): Rename 'native' parameter to
|
|
|
|
|
'ptrace'. Remove static assertions.
|
|
|
|
|
(top level): New static assertions.
|
|
|
|
|
|
2016-07-25 11:01:54 -04:00
|
|
|
|
2016-07-25 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* top.h (make_delete_ui_cleanup): New declaration.
|
|
|
|
|
* top.c (delete_ui_cleanup): New function.
|
|
|
|
|
(make_delete_ui_cleanup): New function.
|
|
|
|
|
(new_ui_command): Create restore_ui cleanup earlier, create a
|
|
|
|
|
delete_ui cleanup and discard it on success.
|
|
|
|
|
|
2016-07-25 12:42:18 +01:00
|
|
|
|
2016-07-25 Pedro Alves <palves@redhat.com>
|
|
|
|
|
Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* nat/linux-procfs.c (parse_proc_status_state): Handle lowercase
|
|
|
|
|
't'.
|
|
|
|
|
|
2016-07-25 12:42:17 +01:00
|
|
|
|
2016-07-25 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* nat/linux-procfs.c (enum proc_state): New enum.
|
|
|
|
|
(parse_proc_status_state): New function.
|
|
|
|
|
(linux_proc_pid_get_state): Replace output string buffer parameter
|
|
|
|
|
with an output proc_state parameter. Use parse_proc_status_state.
|
|
|
|
|
(linux_proc_pid_is_gone): Adjust to use proc_state values.
|
|
|
|
|
(linux_proc_pid_has_state): Change type of 'state' parameter; now
|
|
|
|
|
an enum proc_state. Adjust to linux_proc_pid_get_state interface
|
|
|
|
|
change.
|
|
|
|
|
(linux_proc_pid_is_stopped)
|
|
|
|
|
(linux_proc_pid_is_trace_stopped_nowarn)
|
|
|
|
|
(linux_proc_pid_is_zombie_maybe_warn): Adjust to
|
|
|
|
|
linux_proc_pid_get_state interface change.
|
|
|
|
|
|
2016-07-25 11:12:01 +02:00
|
|
|
|
2016-07-25 Tim Wiederhake <tim.wiederhake@intel.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Write After Approval): Add Tim Wiederhake
|
|
|
|
|
|
2016-07-25 10:57:06 +02:00
|
|
|
|
2016-07-25 Tim Wiederhake <tim.wiederhake@intel.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Resume btrace on reconnect.
|
|
|
|
|
* record-btrace.c: Added record-btrace.h include.
|
|
|
|
|
(record_btrace_open): Split into this and ...
|
|
|
|
|
(record_btrace_push_target): ... this.
|
|
|
|
|
(record_btrace_disconnect): New function.
|
|
|
|
|
(init_record_btrace_ops): Use record_btrace_disconnect.
|
|
|
|
|
* record-btrace.h: New file.
|
|
|
|
|
* remote.c: Added record-btrace.h include.
|
|
|
|
|
(remote_start_remote): Check recording status.
|
|
|
|
|
(remote_btrace_maybe_reopen): New function.
|
|
|
|
|
|
2016-07-23 18:38:24 -03:00
|
|
|
|
2016-07-23 Gabriel Krisman Bertazi <gabriel@krisman.be>
|
|
|
|
|
|
|
|
|
|
* xml-syscall.c (get_syscalls_by_group): New.
|
|
|
|
|
(get_syscall_group_names): New.
|
|
|
|
|
(struct syscall_group_desc): New structure to store group data.
|
|
|
|
|
(struct syscalls_info): Include field to store the group list.
|
|
|
|
|
(sysinfo_free_syscall_group_desc): New.
|
|
|
|
|
(free_syscalls_info): Free group list.
|
|
|
|
|
(syscall_group_create_syscall_group_desc): New.
|
|
|
|
|
(syscall_group_add_syscall): New.
|
|
|
|
|
(syscall_create_syscall_desc): Add syscall to its groups.
|
|
|
|
|
(syscall_start_syscall): Load group attribute.
|
|
|
|
|
(syscall_group_get_group_by_name): New.
|
|
|
|
|
(xml_list_syscalls_by_group): New.
|
|
|
|
|
(xml_list_of_groups): New.
|
|
|
|
|
* xml-syscall.h (get_syscalls_by_group): Export function
|
|
|
|
|
to retrieve a list of syscalls filtered by the group name.
|
|
|
|
|
(get_syscall_group_names): Export function to retrieve the list
|
|
|
|
|
of syscall groups.
|
|
|
|
|
* break-catch-syscall.c (catch_syscall_split_args): Verify if
|
|
|
|
|
argument is a syscall group and expand it to a list of syscalls
|
|
|
|
|
when creating catchpoints.
|
|
|
|
|
(catch_syscall_completer): Add word completion for system call
|
|
|
|
|
groups.
|
|
|
|
|
* configure.ac: Include dependency for xsltproc when building
|
|
|
|
|
in maintainer-mode.
|
|
|
|
|
* break-catch-syscall.c (_initialize_breakpoint): Update catch
|
|
|
|
|
syscall command documentation.
|
|
|
|
|
* NEWS: Include section about catching groups of syscalls.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
* data-directory/Makefile.in: Generate syscall xml when building
|
|
|
|
|
in maintainer mode.
|
|
|
|
|
* syscalls/gdb-syscalls.dtd: Include group attribute to the
|
|
|
|
|
syscall element.
|
|
|
|
|
* syscalls/apply-defaults.xsl: New.
|
|
|
|
|
* syscalls/linux-defaults.xml.in: New.
|
|
|
|
|
* syscalls/aarch64-linux.xml: Rename to aarch64-linux.xml.in.
|
|
|
|
|
* syscalls/amd64-linux.xml: Rename to amd64-linux.xml.in.
|
|
|
|
|
* syscalls/arm-linux.xml: Rename to arm-linux.xml.in.
|
|
|
|
|
* syscalls/bfin-linux.xml: Rename to bfin-linux.xml.in.
|
|
|
|
|
* syscalls/i386-linux.xml: Rename to i386-linux.xml.in.
|
|
|
|
|
* syscalls/mips-n32-linux.xml: Rename to mips-n32-linux.xml.in.
|
|
|
|
|
* syscalls/mips-n64-linux.xml: Rename to mips-n64-linux.xml.in.
|
|
|
|
|
* syscalls/mips-o32-linux.xml: Rename to mips-o32-linux.xml.in.
|
|
|
|
|
* syscalls/ppc-linux.xml: Rename to ppc-linux.xml.in.
|
|
|
|
|
* syscalls/ppc64-linux.xml: Rename to ppc64-linux.xml.in.
|
|
|
|
|
* syscalls/s390-linux.xml: Rename to s390-linux.xml.in.
|
|
|
|
|
* syscalls/s390x-linux.xml: Rename to s390x-linux.xml.in.
|
|
|
|
|
* syscalls/sparc-linux.xml: Rename to sparc-linux.xml.in.
|
|
|
|
|
* syscalls/sparc64-linux.xml: Rename to sparc64-linux.xml.in.
|
|
|
|
|
* syscalls/aarch64-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/amd64-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/arm-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/i386-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/mips-n32-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/mips-n64-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/mips-o32-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/ppc-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/ppc64-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/s390-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/s390x-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/sparc-linux.xml: Regenerate.
|
|
|
|
|
* syscalls/sparc64-linux.xml: Regenerate.
|
|
|
|
|
|
2016-07-23 09:56:44 -07:00
|
|
|
|
2016-07-23 Andrew Pinski <apinski@cavium.com>
|
|
|
|
|
|
|
|
|
|
* nat/aarch64-linux-hw-point.c
|
|
|
|
|
(aarch64_linux_get_debug_reg_capacity): Handle
|
|
|
|
|
ARMv8.1 and ARMv8.2 debug versions.
|
|
|
|
|
* nat/aarch64-linux-hw-point.h
|
|
|
|
|
(AARCH64_DEBUG_ARCH_V8_1): New define.
|
|
|
|
|
(AARCH64_DEBUG_ARCH_V8_2): New define.
|
|
|
|
|
|
2016-07-23 11:38:03 +03:00
|
|
|
|
2016-06-30 Руслан Ижбулатов <lrn1986@gmail.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/14529
|
|
|
|
|
* windows-nat.c (signal_event_command): New command 'signal-event'
|
|
|
|
|
for W32 JIT debug support.
|
|
|
|
|
* NEWS: Add an entry about the new 'signal-event' command.
|
|
|
|
|
|
PR rust/20162 - fix gdb regressions caused by rust 1.10
PR rust/20162 started life as a reminder to test gdb with versions of
rust after 1.8; but now concerns some gdb regressions seen with rust
1.10 ("beta") and 1.11 ("nightly").
The failures turn out to be a discrepancy between how rustc emits
DWARF and how gdb interprets it. In particular, rustc will emit DWARF
like:
<2><bc>: Abbrev Number: 9 (DW_TAG_structure_type)
<bd> DW_AT_name : (indirect string, offset: 0x46a): HasMethods
<c1> DW_AT_byte_size : 4
...
<3><cc>: Abbrev Number: 11 (DW_TAG_subprogram)
...
<df> DW_AT_name : (indirect string, offset: 0x514f): new
gdb wants to see a separate top-level DW_TAG_subprogram that refers to
this one via DW_AT_specification; but rustc doesn't emit one. By my
reading of DWARF 4 5.5.7, this is ok, and gdb is incorrect here.
Fixing this involved a new case in scan_partial_symbols, and then a
further change in process_structure_scope to account for the fact
that, in Rust, such functions are not methods and should not be
attached to the structure type.
Next, it turns out that rust is emitting bad values for
DW_AT_linkage_name, e.g.:
<db> DW_AT_linkage_name: (indirect string, offset: 0x422): _ZN7methods8{{impl}}3newE
The the "{{impl}}" stuff is apparently some side effect of a change to
the compiler's internal representation. Oops!
This also had a simple fix -- disregard these mangled names.
With these changes, there are no regressions in the gdb Rust tests
with either 1.10 or 1.11. 1.9, the stable release, is still pretty
broken, but I think there's nothing much to do about that.
These changes are a bit hackish, but no worse, I think, than other
kinds of quirk handling already done in the DWARF parser. I have
reported all the rustc bugs upstream. I plan to remove these hacks
from gdb some suitable time after they have been fixed in released
versions of Rust.
2016-07-22 Tom Tromey <tom@tromey.com>
PR rust/20162:
* dwarf2read.c (scan_partial_symbols) <DW_TAG_structure_type>:
Call scan_partial_symbols for children when reading a Rust CU.
(dwarf2_physname): Ignore invalid DW_AT_linkage_name generated by
rustc.
(process_structure_scope) <DW_TAG_subprogram>: Call
read_func_scope for Rust.
2016-06-26 11:06:44 -06:00
|
|
|
|
2016-07-22 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR rust/20162:
|
|
|
|
|
* dwarf2read.c (scan_partial_symbols) <DW_TAG_structure_type>:
|
|
|
|
|
Call scan_partial_symbols for children when reading a Rust CU.
|
|
|
|
|
(dwarf2_physname): Ignore invalid DW_AT_linkage_name generated by
|
|
|
|
|
rustc.
|
|
|
|
|
(process_structure_scope) <DW_TAG_subprogram>: Call
|
|
|
|
|
read_func_scope for Rust.
|
|
|
|
|
|
2016-07-22 16:31:41 +01:00
|
|
|
|
2016-07-22 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* ctf.c (ctf_traceframe_info): Call bt_ctf_get_uint64 rather than
|
|
|
|
|
bt_ctf_get_int64.
|
|
|
|
|
|
2016-07-11 15:02:10 -06:00
|
|
|
|
2016-07-21 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* rust-lang.c (rust_tuple_struct_type_p): Return false for empty
|
|
|
|
|
structs.
|
|
|
|
|
* rust-exp.y (struct_expr_list): Allow empty elements.
|
|
|
|
|
|
2016-06-06 12:56:42 -06:00
|
|
|
|
2016-07-21 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* configure: Rebuild.
|
|
|
|
|
* warning.m4 (AM_GDB_WARNINGS) <build_warnings>: Add
|
|
|
|
|
-Wunused-but-set-parameter, -Wunused-but-set-variable.
|
|
|
|
|
|
2016-07-21 13:02:34 +01:00
|
|
|
|
2016-07-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* go32-nat.c (go32_create_inferior): Add cast.
|
|
|
|
|
* ser-go32.c (dos_noop): Delete.
|
|
|
|
|
(dos_flush_output, dos_setparity, dos_drain_output): New
|
|
|
|
|
functions.
|
|
|
|
|
(dos_write): Add cast.
|
|
|
|
|
(dos_ops): Use dos_flush_output, dos_setparity and
|
|
|
|
|
dos_drain_output.
|
|
|
|
|
* top.c (do_chdir_cleanup): Add cast.
|
|
|
|
|
|
2016-07-21 12:23:48 +01:00
|
|
|
|
2016-07-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* windows-nat.c (handle_exception): Remove "th".
|
|
|
|
|
|
2016-07-21 15:29:58 +01:00
|
|
|
|
2016-07-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* varobj.c (varobj_value_get_print_value): Move "gdbarch" to block
|
|
|
|
|
scope that uses it.
|
|
|
|
|
|
2016-07-16 10:14:08 -07:00
|
|
|
|
2016-07-20 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c (fbsd_enable_proc_events): Enable "PTRACE_VFORK"
|
|
|
|
|
events.
|
|
|
|
|
(fbsd_pending_vfork_done): Only define if "PTRACE_VFORK" is not
|
|
|
|
|
defined.
|
|
|
|
|
(fbsd_add_vfork_done): Likewise.
|
|
|
|
|
(fbsd_is_vfork_done_pending): Likewise.
|
|
|
|
|
(fbsd_next_vfork_done): Likewise.
|
|
|
|
|
(fbsd_resume): Only ignore pending vfork done events if
|
|
|
|
|
"PTRACE_VFORK" is not defined.
|
|
|
|
|
(fbsd_wait): Only look for pending vfork done events if
|
|
|
|
|
"PTRACE_VFORK" is not defined.
|
|
|
|
|
[PTRACE_VFORK]: Handle "PL_FLAG_VFORKED" and "PL_FLAG_VFORK_DONE"
|
|
|
|
|
events.
|
|
|
|
|
(fbsd_follow_fork): Only fake a vfork done event if "PTRACE_VFORK"
|
|
|
|
|
is not defined.
|
|
|
|
|
|
2016-07-15 17:01:21 -07:00
|
|
|
|
2016-07-20 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c (fbsd_wait): Use "fbsd_enable_proc_events" on
|
|
|
|
|
new child processes.
|
|
|
|
|
|
2016-07-15 14:03:10 -07:00
|
|
|
|
2016-07-20 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c (fbsd_enable_lwp_events): Remove function.
|
|
|
|
|
(fbsd_enable_proc_events): New function.
|
|
|
|
|
(fbsd_enable_follow_fork): Remove function.
|
|
|
|
|
(fbsd_post_startup_inferior): Use "fbsd_enable_proc_events".
|
|
|
|
|
(fbsd_post_attach): Likewise.
|
|
|
|
|
|
2016-07-03 11:56:21 -07:00
|
|
|
|
2016-07-15 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* common/signals.c (gdb_signal_from_host): Handle SIGLIBRT.
|
|
|
|
|
(do_gdb_signal_to_host): Likewise.
|
|
|
|
|
* infrun.c (_initialize_infrun): Pass GDB_SIGNAL_LIBRT through to
|
|
|
|
|
programs.
|
|
|
|
|
* proc-events.c (signal_table): Add entry for SIGLIBRT.
|
|
|
|
|
|
2016-07-14 11:50:55 -06:00
|
|
|
|
2016-07-14 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* python/py-breakpoint.c (gdbpy_breakpoint_deleted): Add missing
|
|
|
|
|
newline.
|
|
|
|
|
|
2016-06-06 14:18:30 -06:00
|
|
|
|
2016-07-14 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* mips-tdep.c (micromips_scan_prologue): Remove "frame_addr".
|
|
|
|
|
(mips_o32_push_dummy_call): Remove "stack_used_p".
|
|
|
|
|
* aarch64-tdep.c (aarch64_record_data_proc_imm): Remove
|
|
|
|
|
"insn_bit28".
|
|
|
|
|
* rust-lang.c (rust_print_type): Remove "len".
|
|
|
|
|
* rust-exp.y (super_name): Remove "current_len".
|
|
|
|
|
* python/py-framefilter.c (py_print_type): Remove "type".
|
|
|
|
|
* mdebugread.c (parse_partial_symbols): Remove
|
|
|
|
|
"past_first_source_file".
|
|
|
|
|
<N_SO>: Remove "valu", "first_so_symnum", "prev_textlow_not_set".
|
|
|
|
|
* m2-valprint.c (m2_print_unbounded_array): Remove
|
|
|
|
|
"content_type".
|
|
|
|
|
(m2_val_print): Remove "i".
|
|
|
|
|
* linespec.c (unexpected_linespec_error): Remove "cleanup".
|
|
|
|
|
* f-valprint.c (f_val_print): Remove "i".
|
|
|
|
|
* elfread.c (elf_symtab_read): Remove "offset".
|
|
|
|
|
* dwarf2-frame.c (dwarf2_fetch_cfa_info): Remove "addr_size".
|
|
|
|
|
* jit.c (jit_dealloc_cache): Remove "i" and "frame_arch".
|
|
|
|
|
|
2016-06-06 14:18:23 -06:00
|
|
|
|
2016-07-14 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* arch-utils.c (default_skip_permanent_breakpoint): Remove
|
|
|
|
|
"bp_insn".
|
|
|
|
|
* disasm.c (do_assembly_only): Remove "num_displayed".
|
|
|
|
|
* dwarf2read.c (read_abbrev_offset): Remove "length".
|
|
|
|
|
(dwarf_decode_macro_bytes) <DW_MACINFO_vendor_ext>: Remove
|
|
|
|
|
"constant".
|
|
|
|
|
* m32c-tdep.c (make_regs): Remove "r2hl", "r3hl", and "intbhl".
|
|
|
|
|
* microblaze-tdep.c (microblaze_frame_cache): Remove "func".
|
|
|
|
|
* tracefile.c (trace_save): Remove "status".
|
|
|
|
|
|
2016-06-06 13:45:59 -06:00
|
|
|
|
2016-07-14 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* symfile.c (simple_overlay_update_1): Remove initialization
|
|
|
|
|
of "size", and commented-out code.
|
|
|
|
|
(simple_overlay_update): Likewise.
|
|
|
|
|
|
2016-06-28 14:25:49 -06:00
|
|
|
|
2016-07-14 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* tui/tui-winsource.c (tui_show_source_line): Use getcurx.
|
|
|
|
|
* tui/tui-io.c (tui_puts): Use getcurx.
|
|
|
|
|
(tui_redisplay_readline): Likewise.
|
|
|
|
|
|
2016-06-06 13:43:50 -06:00
|
|
|
|
2016-07-14 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* inflow.c (child_terminal_ours_1): Use ATTRIBUTE_UNUSED.
|
|
|
|
|
|
2016-06-06 13:01:52 -06:00
|
|
|
|
2016-07-14 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* corefile.c (reopen_exec_file): Only examine st.st_mtime if stat
|
|
|
|
|
succeeded.
|
|
|
|
|
|
PR python/15620, PR python/18620 - breakpoint events in Python
This patch adds some breakpoint events to Python. In particular,
there is a creation event that is emitted when a breakpoint is
created; a modification event that is emitted when a breakpoint
changes somehow; and a deletion event that is emitted when a
breakpoint is deleted.
In this patch, the event's payload is the breakpoint itself. I
considered making a new event type to hold the breakpoint, but I
didn't see a need. Still, I thought I would mention this as a spot
where some other choice is possible.
Built and regtested on x86-64 Fedora 23.
2016-07-13 Tom Tromey <tom@tromey.com>
PR python/15620, PR python/18620:
* python/py-evts.c (gdbpy_initialize_py_events): Call
add_new_registry for new events.
* python/py-events.h (events_object) <breakpoint_created,
breakpoint_deleted, breakpoint_modified>: New fields.
* python/py-breakpoint.c (gdbpy_breakpoint_created): Emit the
breakpoint changed event.
(gdbpy_breakpoint_deleted): Emit the breakpoint deleted event.
(gdbpy_breakpoint_modified): New function.
(gdbpy_initialize_breakpoints): Attach to the breakpoint modified
observer.
2016-07-13 Tom Tromey <tom@tromey.com>
PR python/15620, PR python/18620:
* python.texi (Events In Python): Document new breakpoint events.
2016-07-13 Tom Tromey <tom@tromey.com>
PR python/15620, PR python/18620:
* gdb.python/py-breakpoint.exp (connect_event, check_last_event)
(test_bkpt_events): New procs.
2015-05-04 21:49:11 -06:00
|
|
|
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/15620, PR python/18620:
|
|
|
|
|
* python/py-evts.c (gdbpy_initialize_py_events): Call
|
|
|
|
|
add_new_registry for new events.
|
|
|
|
|
* python/py-events.h (events_object) <breakpoint_created,
|
|
|
|
|
breakpoint_deleted, breakpoint_modified>: New fields.
|
|
|
|
|
* python/py-breakpoint.c (gdbpy_breakpoint_created): Emit the
|
|
|
|
|
breakpoint changed event.
|
|
|
|
|
(gdbpy_breakpoint_deleted): Emit the breakpoint deleted event.
|
|
|
|
|
(gdbpy_breakpoint_modified): New function.
|
|
|
|
|
(gdbpy_initialize_breakpoints): Attach to the breakpoint modified
|
|
|
|
|
observer.
|
|
|
|
|
|
2016-05-19 15:51:00 -06:00
|
|
|
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/17698:
|
|
|
|
|
* NEWS: Update.
|
|
|
|
|
* python/py-breakpoint.c (bppy_get_pending): New function.
|
|
|
|
|
(breakpoint_object_getset): Add entry for "pending".
|
|
|
|
|
* breakpoint.h (pending_breakpoint_p): Declare.
|
|
|
|
|
* breakpoint.c (pending_breakpoint_p): New function.
|
|
|
|
|
|
2016-05-19 15:52:52 -06:00
|
|
|
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* python/py-breakpoint.c (bppy_get_visibility)
|
|
|
|
|
(gdbpy_breakpoint_created): Use user_breakpoint_p.
|
|
|
|
|
|
2015-03-01 20:33:00 -07:00
|
|
|
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR cli/18053:
|
|
|
|
|
* jit.c (jit_reader_load_command): Use tilde_expand.
|
|
|
|
|
(_initialize_jit): Fix help for jit-reader-unload. Set completer
|
|
|
|
|
for new commands.
|
|
|
|
|
|
2016-06-09 15:20:09 -06:00
|
|
|
|
2016-07-12 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/19293:
|
|
|
|
|
* python/lib/gdb/command/unwinders.py (do_enable_unwinder): Call
|
|
|
|
|
gdb.invalidate_cached_frames.
|
|
|
|
|
* python/lib/gdb/unwinder.py (register_unwinder): Call
|
|
|
|
|
gdb.invalidate_cached_frames.
|
|
|
|
|
* python/python.c (gdbpy_invalidate_cached_frames): New function.
|
|
|
|
|
(python_GdbMethods): Add entry for invalidate_cached_frames.
|
|
|
|
|
|
2016-07-07 19:07:36 +02:00
|
|
|
|
2016-07-07 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* cp-namespace.c (cp_lookup_bare_symbol): Initialize
|
|
|
|
|
lang_this.symbol.
|
|
|
|
|
|
2016-07-07 17:33:05 +02:00
|
|
|
|
2016-07-07 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* cp-namespace.c (cp_lookup_bare_symbol): Use language passed as
|
|
|
|
|
parameter to look for the symbol "this".
|
|
|
|
|
|
|
|
|
|
|
2016-06-20 16:16:31 -07:00
|
|
|
|
2016-07-06 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* h8300-tdep.c (h8300_print_register): Remove extraneous parentheses.
|
|
|
|
|
|
2016-06-11 13:18:15 -07:00
|
|
|
|
2016-07-06 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* ada-lang.c (ada_unpack_from_contents): Use unsigned constants with
|
|
|
|
|
left shifts.
|
|
|
|
|
|
2016-06-11 07:43:46 -07:00
|
|
|
|
2016-07-06 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* sh64-tdep.c (sh64_analyze_prologue): Set "uses_fp" when setting
|
|
|
|
|
the MEDIA_FP_REGNUM register.
|
|
|
|
|
|
2016-06-11 07:38:42 -07:00
|
|
|
|
2016-07-06 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* score-tdep.c (score7_malloc_and_get_memblock): Remove check for
|
|
|
|
|
negative size.
|
|
|
|
|
|
2016-07-01 10:18:50 -07:00
|
|
|
|
2016-07-06 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c (fbsd_is_vfork_done_pending): Fix return type.
|
|
|
|
|
|
2016-07-05 15:29:20 +01:00
|
|
|
|
2016-07-06 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_vfp_cprc_sub_candidate): Don't call
|
|
|
|
|
arm_vfp_cprc_sub_candidate for static field.
|
|
|
|
|
|
2016-07-06 10:55:10 +05:30
|
|
|
|
2016-07-06 Manish Goregaokar <manish@mozilla.com>
|
|
|
|
|
|
|
|
|
|
* rust-lang.c (rust_subscript): Allow subscripting pointers
|
|
|
|
|
|
2016-07-05 10:47:18 +02:00
|
|
|
|
2016-07-05 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
* configure.ac (HAVE_LIBBABELTRACE): Fix pos variable dereference.
|
|
|
|
|
|
2016-07-01 11:13:48 -07:00
|
|
|
|
2016-07-01 Don Breazeal <donb@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* remote.c (remote_get_memory_xfer_limit): New function.
|
|
|
|
|
* target-delegates.c: Regenerate.
|
|
|
|
|
* target.c (memory_xfer_partial): Call
|
|
|
|
|
target_ops.to_get_memory_xfer_limit.
|
|
|
|
|
* target.h (struct target_ops) <to_get_memory_xfer_limit>: New
|
|
|
|
|
member.
|
|
|
|
|
|
2016-06-24 21:00:04 -07:00
|
|
|
|
2016-07-01 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c (struct fbsd_fork_child_info): Rename to ...
|
|
|
|
|
(struct fbsd_fork_info): ... this.
|
|
|
|
|
(struct fbsd_fork_info) <child>: Rename to ...
|
|
|
|
|
(struct fbsd_fork_info) <ptid>: ... this.
|
|
|
|
|
(fbsd_pending_children): Update type.
|
|
|
|
|
(fbsd_remember_child): Update type and field name.
|
|
|
|
|
(fbsd_is_child_pending): Likewise.
|
|
|
|
|
(fbsd_pending_vfork_done): New variable.
|
|
|
|
|
(fbsd_is_vfork_done_pending): New function.
|
|
|
|
|
(fbsd_next_vfork_done): New function.
|
|
|
|
|
(fbsd_resume): Don't resume processes with a pending vfork done
|
|
|
|
|
event.
|
|
|
|
|
(fbsd_wait): Report pending vfork done events.
|
|
|
|
|
(fbsd_follow_fork): Delay and record a pending vfork done event
|
|
|
|
|
for a vfork parent when detaching the child.
|
|
|
|
|
|
2016-06-24 21:06:36 -07:00
|
|
|
|
2016-07-01 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c (super_resume): Move earlier next to "super_wait".
|
|
|
|
|
(resume_one_thread_cb): Move below fork following helper code.
|
|
|
|
|
(resume_all_threads_cb): Likewise.
|
|
|
|
|
(fbsd_resume): Likewise.
|
|
|
|
|
|
2016-06-24 18:24:21 -07:00
|
|
|
|
2016-07-01 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c (fbsd_follow_fork): Only detach child if
|
|
|
|
|
"detach_fork" is true.
|
|
|
|
|
|
2016-06-27 17:44:58 -07:00
|
|
|
|
2016-07-01 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* x86bsd-nat.c: Include 'gdbthread.h'.
|
|
|
|
|
(x86bsd_dr_set): Set debug registers on all threads belonging to
|
|
|
|
|
the current inferior.
|
|
|
|
|
|
2016-06-27 13:19:09 -07:00
|
|
|
|
2016-07-01 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* Makefile.in [HFILES_NO_SRCDIR]: Replace 'amd64bsd-nat.h' with
|
|
|
|
|
'x86bsd-nat.h'.
|
|
|
|
|
* amd64bsd-nat.c: Include 'x86bsd-nat.h' instead of
|
|
|
|
|
'amd64bsd-nat.h'.
|
|
|
|
|
(amd64bsd_xsave_len): Rename and move to x86bsd-nat.c.
|
|
|
|
|
(amd64bsd_fetch_inferior_registers): Replace 'amd64bsd_xsave_len'
|
|
|
|
|
with 'x86bsd_xsave_len'.
|
|
|
|
|
(amd64bsd_store_inferior_registers): Likewise.
|
|
|
|
|
(amd64bsd_target): Inherit from x86bsd_target.
|
|
|
|
|
(amd64bsd_dr_get): Rename and move to x86bsd-nat.c.
|
|
|
|
|
(amd64bsd_dr_set): Likewise.
|
|
|
|
|
(amd64bsd_dr_set_control): Likewise.
|
|
|
|
|
(amd64bsd_dr_set_addr): Likewise.
|
|
|
|
|
(amd64bsd_dr_get_addr): Likewise.
|
|
|
|
|
(amd64bsd_dr_get_status): Likewise.
|
|
|
|
|
(amd64bsd_dr_get_control): Likewise.
|
|
|
|
|
* amd64fbsd-nat.c: Include 'x86bsd-nat.h' instead of
|
|
|
|
|
'amd64bsd-nat.h'.
|
|
|
|
|
(super_mourn_inferior): Move to x86bsd-nat.c.
|
|
|
|
|
(amd64fbsd_mourn_inferior): Rename and move to x86bsd-nat.c.
|
|
|
|
|
(amd64fbsd_read_description): Replace 'amd64bsd_xsave_len' with
|
|
|
|
|
'x86bsd_xsave_len'.
|
|
|
|
|
(_initialize_amd64fbsd_nat): Remove x86 watchpoint setup and
|
|
|
|
|
mourn_inferior' target op.
|
|
|
|
|
* config/i386/fbsd.mh (NATDEPFILES): Add x86bsd-nat.o.
|
|
|
|
|
* config/i386/fbsd64.mh: Likewise.
|
|
|
|
|
* config/i386/nbsd64.mh: Likewise.
|
|
|
|
|
* config/i386/nbsdelf.mh: Likewise.
|
|
|
|
|
* config/i386/obsd.mh: Likewise.
|
|
|
|
|
* config/i386/obsd64.mh: Likewise.
|
|
|
|
|
* i386bsd-nat.c: Include 'x86bsd-nat.h'.
|
|
|
|
|
(i386bsd_xsave_len): Rename and move to x86bsd-nat.c.
|
|
|
|
|
(i386bsd_fetch_inferior_registers): Replace 'i386bsd_xsave_len'
|
|
|
|
|
with 'x86bsd_xsave_len'.
|
|
|
|
|
(i386bsd_store_inferior_registers): Likewise.
|
|
|
|
|
(i386bsd_target): Inherit from x86bsd_target.
|
|
|
|
|
(i386bsd_dr_get): Rename and move to x86bsd-nat.c.
|
|
|
|
|
(i386bsd_dr_set): Likewise.
|
|
|
|
|
(i386bsd_dr_set_control): Likewise.
|
|
|
|
|
(i386bsd_dr_set_addr): Likewise.
|
|
|
|
|
(i386bsd_dr_get_addr): Likewise.
|
|
|
|
|
(i386bsd_dr_get_status): Likewise.
|
|
|
|
|
(i386bsd_dr_get_control): Likewise.
|
|
|
|
|
* i386bsd-nat.h (i386bsd_xsave_len): Remove.
|
|
|
|
|
(i386bsd_dr_set_control): Remove.
|
|
|
|
|
(i386bsd_dr_set_addr): Remove.
|
|
|
|
|
(i386bsd_dr_get_addr): Remove.
|
|
|
|
|
(i386bsd_dr_get_status): Remove.
|
|
|
|
|
(i386bsd_dr_get_control): Remove.
|
|
|
|
|
* i386fbsd-nat.c: Include 'x86bsd-nat.h'.
|
|
|
|
|
(i386fbsd_read_description): Replace 'i386bsd_xsave_len' with
|
|
|
|
|
'x86bsd_xsave_len'.
|
|
|
|
|
(_initialize_i386fbsd_nat): Remove x86 watchpoint setup and
|
|
|
|
|
mourn_inferior' target op.
|
|
|
|
|
* x86bsd-nat.c: New file.
|
|
|
|
|
* x86bsd-nat.h: New file.
|
|
|
|
|
|
Extend JIT-reader test and fix GDB problems that exposes
The jit-reader.exp test isn't really exercising the jit-reader's
unwinder API at all. This commit address that, and then fixes GDB
problems exposed.
- The custom JIT reader provided for the jit-reader.exp testcase
always rejects the jitted function's frame...
This is because the custom JIT reader in the testcase never ever
sets state->code_begin/end, so the bounds check in
gdb.base/jitreader.c:unwind_frame:
if (this_ip >= state->code_end || this_ip < state->code_begin)
return GDB_FAIL;
tends to fail, unless you're "lucky" (because it references
uninitialized data).
The result is that GDB is always actually using a built-in unwinder
for the jitted function.
- The provided unwinder doesn't do anything that GDB's built-in
unwinder can't do.
IOW, we can't really tell whether the JIT reader's unwinder is
working or not.
I fixed that by making the jitted function mangle its own stack
pointer with a xor, and then teaching the jit unwinder to demangle
it back (another xor). So now "backtrace" with GDB's built-in
unwinder fails while with the jit unwinder, it succeeds.
- GDB crashes after unloading the JIT reader, and flushing frames...
I made the testcase use the "flushregs" command after unloading the
JIT reader, to force the JIT frames to be flushed. However, that
crashes GDB...
When reinit_frame_cache tears down a frame's cache, it calls its
unwinder's dealloc_cache method, which for JIT frames ends up in
jit.c:jit_dealloc_cache. This function calls each of the frame's
gdb_reg_value's "free" pointer:
for (i = 0; i < gdbarch_num_regs (frame_arch); i++)
if (priv_data->registers[i] && priv_data->registers[i]->free)
priv_data->registers[i]->free (priv_data->registers[i]);
and the problem is these gdb_reg_value instances have been returned
by the JIT reader that has been already unloaded, and their "free"
function pointers likely point to functions in the DSO that has
already been unloaded...
A fix for that could be to call reinit_frame_cache in
jit_reader_unload_command _before_ unloading the jit reader DSO so
that the jit reader is given a chance to clean up the gdb_reg_values
before it is unloaded. However, the fix for the point below makes
this unnecessary, because it stops jit.c from keeping around
gdb_reg_values in the first place.
- However, it still makes sense to clear the frame cache when loading
or unloading a JIT unwinder.
This makes testing a JIT unwinder a bit simpler.
- Not only the frame cache actually -- gdb is not unloading the
jit-registered objfiles when the JIT reader is unloaded, and not
loading the already-registered descriptors when a JIT reader is
loaded.
The new test exercises unloading the jit reader, loading it back
again, and then making sure the JIT reader's unwinder works again.
Without the unload/re-load of already-read descriptors, the newly
loaded JIT would have no idea where the new function is, because
it's stored at symbol read time.
- I added a couple "info frame" calls to the test, and that
crashes GDB...
The problem is that jit_frame_prev_register assumes it'll only be
called for raw registers, so when it gets a pseudo register number,
the "priv->registers[reg]" access is really an out-of-bounds access.
To fix that, I made jit_frame_prev_register use
gdbarch_pseudo_register_read_value for reading the pseudo-registers.
However, that works with a regcache and we don't have one. To fix
that, I made the JIT unwinder store a regcache in its cache instead
of an array of gdb_reg_value pointers.
gdb/ChangeLog:
2016-07-01 Pedro Alves <palves@redhat.com>
Tom Tromey <tom@tromey.com>
* jit.c (jit_reader_load_command): Call reinit_frame_cache and
jit_inferior_created_hook.
(jit_reader_unload_command): Call reinit_frame_cache and
jit_inferior_exit_hook.
* jit.c (struct jit_unwind_private) <registers>: Delete field.
<regcache>: New field.
(jit_unwind_reg_set_impl): Set the register's value in the
regcache. Free the passed-in gdb_reg_value.
(jit_dealloc_cache): Adjust to free the regcache.
(jit_frame_sniffer): Allocate a regcache instead of an array of
gdb_reg_value pointers.
(jit_frame_this_id): Adjust.
(jit_frame_prev_register): Read raw registers off of the regcache
instead of from the gdb_reg_value pointer array. Use
gdbarch_pseudo_register_read_value to read pseudo registers.
* regcache.c (regcache_raw_set_cached_value): New function,
factored out from ...
(regcache_raw_write): ... here.
* regcache.h (regcache_raw_set_cached_value): Declare.
gdb/testsuite/ChangeLog:
2016-07-01 Pedro Alves <palves@redhat.com>
* gdb.base/jit-reader.exp (info_registers_current_frame): New
procedure.
(jit_reader_test): Test the jit reader's unwinder.
* gdb.base/jithost.c (jit_function_00_code): New global.
(main): Use memcpy to fill in the mmapped code, instead of poking
bytes manually here.
* gdb.base/jitreader.c (enum register_mapping) <AMD64_RBP>: New
value.
(read_debug_info): Save the function's range.
(read_sp): New function.
(unwind_frame): Use it. Also unwind RBP.
(get_frame_id): Use read_sp.
(gdb_init_reader): Use calloc instead of malloc.
* lib/gdb.exp (get_hexadecimal_valueof): Add optional 'test'
parameter. Use gdb_test_multiple.
2016-07-01 11:56:39 +01:00
|
|
|
|
2016-07-01 Pedro Alves <palves@redhat.com>
|
|
|
|
|
Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* jit.c (jit_reader_load_command): Call reinit_frame_cache and
|
|
|
|
|
jit_inferior_created_hook.
|
|
|
|
|
(jit_reader_unload_command): Call reinit_frame_cache and
|
|
|
|
|
jit_inferior_exit_hook.
|
|
|
|
|
* jit.c (struct jit_unwind_private) <registers>: Delete field.
|
|
|
|
|
<regcache>: New field.
|
|
|
|
|
(jit_unwind_reg_set_impl): Set the register's value in the
|
|
|
|
|
regcache. Free the passed-in gdb_reg_value.
|
|
|
|
|
(jit_dealloc_cache): Adjust to free the regcache.
|
|
|
|
|
(jit_frame_sniffer): Allocate a regcache instead of an array of
|
|
|
|
|
gdb_reg_value pointers.
|
|
|
|
|
(jit_frame_this_id): Adjust.
|
|
|
|
|
(jit_frame_prev_register): Read raw registers off of the regcache
|
|
|
|
|
instead of from the gdb_reg_value pointer array. Use
|
|
|
|
|
gdbarch_pseudo_register_read_value to read pseudo registers.
|
|
|
|
|
* regcache.c (regcache_raw_set_cached_value): New function,
|
|
|
|
|
factored out from ...
|
|
|
|
|
(regcache_raw_write): ... here.
|
|
|
|
|
* regcache.h (regcache_raw_set_cached_value): Declare.
|
|
|
|
|
|
Fix failure to detach if process exits while detaching on Linux
This commit fixes detaching on Linux when some thread exits the whole
thread group (process) just while we're detaching.
On Linux, a ptracer must detach from each LWP individually, with
PTRACE_DETACH. Since PTRACE_DETACH sets the thread running free, if
one of the already-detached threads causes the whole thread group to
exit (e.g., simply calls exit), the kernel force-kills the other
threads in the group, making them zombie, just as we're still
detaching them. Since PTRACE_DETACH against a zombie thread fails
with ESRCH, and gdb/gdbserver are not expecting this, the detach fails
with an error like: "Can't detach process: No such process.".
This patch detects this detach failure as normal, and instead of
erroring out, reaps the now-dead thread.
New test included, that exercises several different scenarios that
cause GDB/GDBserver to error out when it should not.
Tested on x86-64 GNU/Linux with {unix, native-gdbserver,
native-extended-gdbserver}
Note: without the previous fix, the "single-process + continue"
variant of the new test would fail with:
(gdb) PASS: gdb.threads/process-dies-while-detaching.exp: single-process: continue: watchpoint: switch to parent
continue
Continuing.
Warning:
Could not insert hardware watchpoint 3.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.
Command aborted.
(gdb) FAIL: gdb.threads/process-dies-while-detaching.exp: single-process: continue: watchpoint: continue
gdb/gdbserver/ChangeLog:
2016-07-01 Pedro Alves <palves@redhat.com>
Antoine Tremblay <antoine.tremblay@ericsson.com>
* linux-low.c: Change interface to take the target lwp_info
pointer directly and return void. Handle detaching from a zombie
thread.
(linux_detach_lwp_callback): New function.
(linux_detach): Detach from the leader thread after detaching from
the clone threads.
gdb/ChangeLog:
2016-07-01 Pedro Alves <palves@redhat.com>
Antoine Tremblay <antoine.tremblay@ericsson.com>
* inf-ptrace.c (inf_ptrace_detach_success): New function, factored
out from ...
(inf_ptrace_detach): ... here.
* inf-ptrace.h (inf_ptrace_detach_success): New declaration.
* linux-nat.c (get_pending_status): Rename to ...
(get_detach_signal): ... this, and return a host signal instead of
filling in a wait status.
(detach_one_lwp): New function, factored out from detach_callback
and adjusted to handle detaching from a zombie thread.
(detach_callback): Skip the leader thread.
(linux_nat_detach): No longer defer to inf_ptrace_detach to detach
the leader thread, nor build a signal string to pass down.
Instead, use target_announce_detach, detach_one_lwp and
inf_ptrace_detach_success.
gdb/testsuite/ChangeLog:
2016-07-01 Pedro Alves <palves@redhat.com>
Antoine Tremblay <antoine.tremblay@ericsson.com>
* gdb.threads/process-dies-while-detaching.c: New file.
* gdb.threads/process-dies-while-detaching.exp: New file.
2016-07-01 11:16:33 +01:00
|
|
|
|
2016-07-01 Pedro Alves <palves@redhat.com>
|
|
|
|
|
Antoine Tremblay <antoine.tremblay@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* inf-ptrace.c (inf_ptrace_detach_success): New function, factored
|
|
|
|
|
out from ...
|
|
|
|
|
(inf_ptrace_detach): ... here.
|
|
|
|
|
* inf-ptrace.h (inf_ptrace_detach_success): New declaration.
|
|
|
|
|
* linux-nat.c (get_pending_status): Rename to ...
|
|
|
|
|
(get_detach_signal): ... this, and return a host signal instead of
|
|
|
|
|
filling in a wait status.
|
|
|
|
|
(detach_one_lwp): New function, factored out from detach_callback
|
|
|
|
|
and adjusted to handle detaching from a zombie thread.
|
|
|
|
|
(detach_callback): Skip the leader thread.
|
|
|
|
|
(linux_nat_detach): No longer defer to inf_ptrace_detach to detach
|
|
|
|
|
the leader thread, nor build a signal string to pass down.
|
|
|
|
|
Instead, use target_announce_detach, detach_one_lwp and
|
|
|
|
|
inf_ptrace_detach_success.
|
|
|
|
|
|
Forget watchpoint locations when inferior exits or is killed/detached
If you have two inferiors (or more), set watchpoints in one of the
inferiors, and then that inferior exits, until you manually delete the
watchpoint (or something forces a breakpoint re-set), you can't resume
the other inferior.
This is exercised by the test added by this commit. Without the GDB
fix, this test fails like this:
FAIL: gdb.multi/watchpoint-multi-exit.exp: dispose=kill: continue to marker in inferior 1
FAIL: gdb.multi/watchpoint-multi-exit.exp: dispose=detach: continue to marker in inferior 1
FAIL: gdb.multi/watchpoint-multi-exit.exp: dispose=exit: continue to marker in inferior 1
and gdb.log shows (in all three cases):
(gdb) continue
Continuing.
Warning:
Could not insert hardware watchpoint 2.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.
Command aborted.
(gdb) FAIL: gdb.multi/watchpoint-multi-exit.exp: dispose=kill: continue to marker in inferior 1
The problem is that GDB doesn't forget about the locations of
watchpoints set in the inferior that is now dead. When we try to
continue the inferior that is still alive, we reach
insert_breakpoint_locations, which has the the loop that triggers the
error:
/* If we failed to insert all locations of a watchpoint, remove
them, as half-inserted watchpoint is of limited use. */
That loop finds locations that are not marked inserted, but which
according to should_be_inserted should have been inserted, and so
errors out.
gdb/ChangeLog:
2016-07-01 Pedro Alves <palves@redhat.com>
* breakpoint.c (breakpoint_init_inferior): Discard watchpoint
locations.
* infcmd.c (detach_command): Call breakpoint_init_inferior.
gdb/testsuite/ChangeLog:
2016-07-01 Pedro Alves <palves@redhat.com>
* gdb.multi/watchpoint-multi-exit.c: New file.
* gdb.multi/watchpoint-multi-exit.exp: New file.
2016-07-01 11:16:32 +01:00
|
|
|
|
2016-07-01 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (breakpoint_init_inferior): Discard watchpoint
|
|
|
|
|
locations.
|
|
|
|
|
* infcmd.c (detach_command): Call breakpoint_init_inferior.
|
|
|
|
|
|
2016-07-01 11:16:32 +01:00
|
|
|
|
2016-07-01 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* darwin-nat.c (darwin_detach): Use target_announce_detach.
|
|
|
|
|
* inf-ptrace.c (inf_ptrace_detach): Likewise.
|
|
|
|
|
* nto-procfs.c (procfs_detach): Likewise.
|
|
|
|
|
* remote.c (remote_detach_1): Likewise.
|
|
|
|
|
* target.c (target_announce_detach): New function.
|
|
|
|
|
* target.h (target_announce_detach): New declaration.
|
|
|
|
|
|
2016-06-06 11:21:15 -06:00
|
|
|
|
2016-06-29 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/20129:
|
|
|
|
|
* python/lib/gdb/command/frame_filters.py (_do_enable_frame_filter)
|
|
|
|
|
(SetFrameFilterPriority._set_filter_priority): Use "frame_filter",
|
|
|
|
|
not "name".
|
|
|
|
|
|
2016-06-09 09:46:53 -06:00
|
|
|
|
2016-06-29 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/17210:
|
|
|
|
|
* target.c (free_memory_read_result_vector): Take a pointer to the
|
|
|
|
|
VEC as an argument.
|
|
|
|
|
(read_memory_robust): Install a cleanup for "result".
|
|
|
|
|
* mi/mi-main.c (mi_cmd_data_read_memory_bytes): Update.
|
|
|
|
|
|
2016-06-29 15:42:28 +05:30
|
|
|
|
2016-06-29 Manish Goregaokar <manish@mozilla.com>
|
|
|
|
|
|
2016-06-29 17:09:43 +05:30
|
|
|
|
* rust-lang.c (rust_get_disr_info): Initialize saveptr to NULL.
|
|
|
|
|
|
|
|
|
|
2016-06-29 Manish Goregaokar <manish@mozilla.com>
|
|
|
|
|
|
2016-06-29 15:42:28 +05:30
|
|
|
|
* rust-lang.c (rust_get_disr_info): Use strtok_r instead of strsep.
|
|
|
|
|
|
2016-06-28 17:24:25 +01:00
|
|
|
|
2016-06-28 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* aarch64-tdep.c (aarch64_displaced_step_b): Use int64_t for
|
|
|
|
|
variable new_offset.
|
|
|
|
|
|
2016-06-27 21:16:59 +05:30
|
|
|
|
2016-06-27 Manish Goregaokar <manish@mozilla.com>
|
|
|
|
|
|
2016-06-27 22:24:15 +05:30
|
|
|
|
* rust-lang.c (rust_print_type, rust_decorations): Print unit
|
2016-07-01 11:17:58 +01:00
|
|
|
|
types as "()".
|
|
|
|
|
(rust_print_type): Omit return type for functions returning unit.
|
2016-06-27 21:16:59 +05:30
|
|
|
|
|
2016-06-27 12:11:25 +02:00
|
|
|
|
2016-06-25 Pierre-Marie de Rodat <derodat@adacore.com>
|
|
|
|
|
|
|
|
|
|
* python/py-breakpoint.c (bppy_init): Clear bppy_pending_object
|
|
|
|
|
when there is an error during the breakpoint creation.
|
|
|
|
|
|
2016-06-25 08:41:45 -06:00
|
|
|
|
2016-06-25 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* rust-lang.c (rust_get_disr_info, rust_print_type): Fix
|
|
|
|
|
formatting.
|
|
|
|
|
|
2016-06-25 11:09:23 +05:30
|
|
|
|
2016-06-25 Manish Goregaokar <manish@mozilla.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/20239
|
|
|
|
|
* rust-lang.c (rust_get_disr_info): Correctly interpret
|
|
|
|
|
NonZero-optimized enums of arbitrary depth.
|
|
|
|
|
(rust_print_type): Correctly print NonZero-optimized
|
|
|
|
|
enums.
|
|
|
|
|
|
2016-04-12 15:02:57 -04:00
|
|
|
|
2016-06-24 David Taylor <dtaylor@emc.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/17520 Structure offset wrong when 1/4 GB or greater.
|
|
|
|
|
* c-lang.h: Change all parameters, variables, and struct or union
|
|
|
|
|
members used as struct or union fie3ld offsets from int to
|
|
|
|
|
LONGEST.
|
|
|
|
|
* c-valprint.c: Likewise.
|
|
|
|
|
* cp-abi.c: Likewise.
|
|
|
|
|
* cp-abi.h: Likewise.
|
|
|
|
|
* cp-valprint.c: Likewise.
|
|
|
|
|
* d-valprint.c: Likewise.
|
|
|
|
|
* dwarf2loc.c: Likewise.
|
|
|
|
|
* eval.c: Likewise.
|
|
|
|
|
* extension-priv.h: Likewise.
|
|
|
|
|
* extension.c: Likewise.
|
|
|
|
|
* extension.h: Likewise.
|
|
|
|
|
* findvar.c: Likewise.
|
|
|
|
|
* gdbtypes.h: Likewise.
|
|
|
|
|
* gnu-v2-abi.c: Likewise.
|
|
|
|
|
* gnu-v3-abi.c: Likewise.
|
|
|
|
|
* go-valprint.c: Likewise.
|
|
|
|
|
* guile/guile-internal.h: Likewise.
|
|
|
|
|
* guile/scm-pretty-print.c: Likewise.
|
|
|
|
|
* jv-valprint.c Likewise.
|
|
|
|
|
* opencl-lang.c: Likewise.
|
|
|
|
|
* p-lang.h: Likewise.
|
|
|
|
|
* python/py-prettyprint.c: Likewise.
|
|
|
|
|
* python/python-internal.h: Likewise.
|
|
|
|
|
* spu-tdep.c: Likewise.
|
|
|
|
|
* typeprint.c: Likewise.
|
|
|
|
|
* valarith.c: Likewise.
|
|
|
|
|
* valops.c: Likewise.
|
|
|
|
|
* valprint.c: Likewise.
|
|
|
|
|
* valprint.h: Likewise.
|
|
|
|
|
* value.c: Likewise.
|
|
|
|
|
* value.h: Likewise.
|
|
|
|
|
* p-valprint.c: Likewise.
|
|
|
|
|
* c-typeprint.c (c_type_print_base): When printing offset, use
|
|
|
|
|
plongest, not %d.
|
|
|
|
|
* gdbtypes.c (recursive_dump_type): Ditto.
|
|
|
|
|
|
2016-06-24 17:05:31 -04:00
|
|
|
|
2016-06-24 David Taylor <david.taylor@emc.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Write After Approval): Add David Taylor.
|
|
|
|
|
|
2016-06-12 21:24:42 -07:00
|
|
|
|
2016-06-24 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* configure.ac: Check for support for system call LWP fields on
|
|
|
|
|
FreeBSD.
|
|
|
|
|
* config.in, configure: Rebuild.
|
|
|
|
|
* data-directory/Makefile.in (SYSCALLS_FILES): Add freebsd.xml.
|
|
|
|
|
* fbsd-nat.c (fbsd_wait) [HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE]:
|
|
|
|
|
Report system call events.
|
|
|
|
|
[HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE]
|
|
|
|
|
(fbsd_set_syscall_catchpoint): New function.
|
|
|
|
|
(fbsd_nat_add_target) [HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE]:
|
|
|
|
|
Set "to_set_syscall_catchpoint" to "fbsd_set_syscall_catchpoint".
|
|
|
|
|
* fbsd-tdep.c: Include xml-syscall.h
|
|
|
|
|
(fbsd_get_syscall_number): New function.
|
|
|
|
|
(fbsd_init_abi): Set XML system call file name.
|
|
|
|
|
Add "get_syscall_number" gdbarch method.
|
|
|
|
|
* syscalls/freebsd.xml: New file.
|
|
|
|
|
|
2016-06-15 21:33:42 -07:00
|
|
|
|
2016-06-24 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-tdep.c: Include "auxv.h".
|
|
|
|
|
(fbsd_print_auxv_entry): New function.
|
|
|
|
|
(fbsd_init_abi): Install gdbarch "print_auxv_entry" method.
|
|
|
|
|
|
2016-06-11 15:51:38 -07:00
|
|
|
|
2016-06-24 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* auxv.c (fprint_auxv_entry): New function.
|
|
|
|
|
(default_print_auxv_entry): New function.
|
|
|
|
|
(fprint_target_auxv): Use gdbarch_print_auxv_entry.
|
|
|
|
|
* auxv.h (enum auxv_format): New enum.
|
|
|
|
|
(fprint_auxv_entry): Declare.
|
|
|
|
|
(default_print_auxv_entry): Declare.
|
|
|
|
|
* gdbarch.sh (print_auxv_entry): New.
|
|
|
|
|
* gdbarch.c, gdbarch.h: Re-generated.
|
|
|
|
|
|
2016-06-11 15:07:38 -07:00
|
|
|
|
2016-06-24 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c [KERN_PROC_AUXV] New variable super_xfer_partial.
|
|
|
|
|
(fbsd_xfer_partial): New function.
|
|
|
|
|
(fbsd_nat_add_target) [KERN_PROC_AUXV] Set "to_xfer_partial" to
|
|
|
|
|
"fbsd_xfer_partial".
|
|
|
|
|
|
2016-05-26 15:04:07 -06:00
|
|
|
|
2016-06-23 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* symtab.c (symbol_find_demangled_name): Loop over languages and
|
|
|
|
|
use language_sniff_from_mangled_name.
|
|
|
|
|
* rust-lang.c (rust_sniff_from_mangled_name): New function.
|
|
|
|
|
(rust_language_defn): Update.
|
|
|
|
|
* p-lang.c (pascal_language_defn): Update.
|
|
|
|
|
* opencl-lang.c (opencl_language_defn): Update.
|
|
|
|
|
* objc-lang.c (objc_sniff_from_mangled_name): New function.
|
|
|
|
|
(objc_language_defn): Update.
|
|
|
|
|
* m2-lang.c (m2_language_defn): Update.
|
|
|
|
|
* language.h (struct language_defn) <la_sniff_from_mangled_name>: New
|
|
|
|
|
field.
|
|
|
|
|
(language_sniff_from_mangled_name): Declare.
|
|
|
|
|
* language.c (language_sniff_from_mangled_name): New function.
|
|
|
|
|
(unknown_language_defn, auto_language_defn, local_language_defn):
|
|
|
|
|
Update.
|
|
|
|
|
* jv-lang.c (java_sniff_from_mangled_name): New function.
|
|
|
|
|
(java_language_defn): Use it.
|
|
|
|
|
* go-lang.c (go_sniff_from_mangled_name): New function.
|
|
|
|
|
(go_language_defn): Use it.
|
|
|
|
|
* f-lang.c (f_language_defn): Update.
|
|
|
|
|
* defs.h (enum language): Reorder.
|
|
|
|
|
* d-lang.c (d_sniff_from_mangled_name): New function.
|
|
|
|
|
(d_language_defn): Use it.
|
|
|
|
|
* cp-support.h (gdb_sniff_from_mangled_name): Declare.
|
|
|
|
|
* cp-support.c (gdb_sniff_from_mangled_name): New function.
|
|
|
|
|
* c-lang.c (c_language_defn, cplus_language_defn)
|
|
|
|
|
(asm_language_defn, minimal_language_defn): Update.
|
|
|
|
|
* ada-lang.c (ada_sniff_from_mangled_name): New function.
|
|
|
|
|
(ada_language_defn): Use it.
|
|
|
|
|
|
2016-05-26 10:33:28 -06:00
|
|
|
|
2016-06-23 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* ada-lang.c (ada_extensions): New array.
|
|
|
|
|
(ada_language_defn): Use it.
|
|
|
|
|
* c-lang.c (c_extensions): New array.
|
|
|
|
|
(c_language_defn): Use it.
|
|
|
|
|
(cplus_extensions): New array.
|
|
|
|
|
(cplus_language_defn): Use it.
|
|
|
|
|
(asm_extensions): New array.
|
|
|
|
|
(asm_language_defn): Use it.
|
|
|
|
|
(minimal_language_defn): Update.
|
|
|
|
|
* d-lang.c (d_extensions): New array.
|
|
|
|
|
(d_language_defn): Use it.
|
|
|
|
|
* f-lang.c (f_extensions): New array.
|
|
|
|
|
(f_language_defn): Use it.
|
|
|
|
|
* go-lang.c (go_language_defn): Update.
|
|
|
|
|
* jv-lang.c (java_extensions): New array.
|
|
|
|
|
(java_language_defn): Use it.
|
|
|
|
|
* language.c (add_language): Call add_filename_language.
|
|
|
|
|
(unknown_language_defn, auto_language_defn, local_language_defn):
|
|
|
|
|
Update.
|
|
|
|
|
* language.h (struct language_defn) <la_filename_extensions>: New
|
|
|
|
|
field.
|
|
|
|
|
* m2-lang.c (m2_language_defn): Update.
|
|
|
|
|
* objc-lang.c (objc_extensions): New array.
|
|
|
|
|
(objc_language_defn): Use it.
|
|
|
|
|
* opencl-lang.c (opencl_language_defn): Update.
|
|
|
|
|
* p-lang.c (p_extensions): New array.
|
|
|
|
|
(pascal_language_defn): Use it.
|
|
|
|
|
* rust-lang.c (rust_extensions): New array.
|
|
|
|
|
(rust_language_defn): Use it.
|
|
|
|
|
* symfile.c (add_filename_language): No longer static. Make "ext"
|
|
|
|
|
const.
|
|
|
|
|
(init_filename_language_table): Remove.
|
|
|
|
|
(_initialize_symfile): Update.
|
|
|
|
|
* symfile.h (add_filename_language): Declare.
|
|
|
|
|
|
2016-05-26 10:22:03 -06:00
|
|
|
|
2016-06-23 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* symfile.c (filename_language_table): Now a VEC.
|
|
|
|
|
(fl_table_size, fl_table_next): Remove.
|
|
|
|
|
(add_filename_language): Use VEC_safe_push.
|
|
|
|
|
(set_ext_lang_command, info_ext_lang_command)
|
|
|
|
|
(deduce_language_from_filename): Use VEC_iterate.
|
|
|
|
|
(init_filename_language_table): Use VEC_empty.
|
|
|
|
|
|
2016-06-09 15:07:55 -06:00
|
|
|
|
2016-06-23 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* python/python.c (gdbpy_parameter): Now static.
|
|
|
|
|
* python/python-internal.h (gdbpy_parameter): Don't declare.
|
|
|
|
|
|
2016-06-20 10:28:37 -06:00
|
|
|
|
2016-06-23 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/16483:
|
|
|
|
|
* python/lib/gdb/command/frame_filters.py
|
|
|
|
|
(InfoFrameFilter.list_frame_filters): Rename to print_list. Print
|
|
|
|
|
nothing if no filters found. Return value indicating whether
|
|
|
|
|
filters were printed.
|
|
|
|
|
(InfoFrameFilter.print_list): Remove.
|
|
|
|
|
(InfoFrameFilter.invoke): Print message if no frame filters
|
|
|
|
|
found.
|
|
|
|
|
|
2016-06-21 15:15:04 +02:00
|
|
|
|
2016-06-21 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* f-valprint.c (f_val_print): Add field names for printing
|
|
|
|
|
derived types fields.
|
|
|
|
|
|
2016-06-21 13:26:11 +02:00
|
|
|
|
2016-06-21 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* s390-linux-tdep.c (s390_iterate_over_regset_sections): Fix typo
|
|
|
|
|
in name of last-break regset.
|
|
|
|
|
|
Always switch fork child to the main UI
The following scenario:
- gdb started in normal CLI mode.
- separate MI channel created with new-ui
- inferior output redirected with the "set inferior-tty" command.
- use -exec-run in the MI channel to run the inferior
is presently mishandled.
When we create the inferior, in fork-child.c, right after vfork, we'll
close all the file descriptors in the vfork child, and then dup the
tty to file descriptors 0/1/2, create a session, etc. Note that when
we close all descriptors, we close the file descriptors behind
gdb_stdin/gdb_stdout/gdb_stderr of all secondary UIs... So if
anything goes wrong in the child and it calls warning/error, it'll end
up writting to the current UI's stdout/stderr streams, which are
backed by file descriptors that have since been closed. Because this
happens in a vfork region, the corresponding stdin/stdout/stderr in
the parent/gdb end up corrupted.
The fix is to switch to the main UI right after the vfork, so that
gdb_stdin/gdb_stdout/gdb_stderr are correctly mapped to
stdin/stdout/stderr (and thus to file descriptors 0/1/2), so this code
works as it has always worked.
(Technically, we're doing a lot of stuff we shouldn't be doing after a
vfork, while we should only be calling async-signal-safe functions.)
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* fork-child.c (fork_inferior): Switch the child to the main UI
right after vfork. Save/restore the current UI in the parent.
Flush outputs of the main UI instead of the current UI.
gdb/testsuite/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* gdb.mi/mi-exec-run.exp: New file.
2016-06-21 01:11:57 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* fork-child.c (fork_inferior): Switch the child to the main UI
|
|
|
|
|
right after vfork. Save/restore the current UI in the parent.
|
|
|
|
|
Flush outputs of the main UI instead of the current UI.
|
|
|
|
|
|
Send deleted watchpoint-scope output to all UIs
Testing with:
make check RUNTESTFLAGS="SEPARATE_MI_TTY=1"
shows this, in gdb.mi/mi-watch.exp:
-*stopped,reason="watchpoint-scope",wpnum="2",frame={addr="0x00000000004005cb",
+*stopped,frame={addr="0x00000000004005cb",
(...)
-PASS: gdb.mi/mi-watch.exp: hw: watchpoint trigger
+FAIL: gdb.mi/mi-watch.exp: hw: watchpoint trigger (unknown output after running)
That is, we lose the "watchpoint-scope" output on the MI UI.
This commit fixes it, and makes the test run with MI running as both
main UI and separate UI.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* breakpoint.c (watchpoint_check): Send watchpoint-deleted output
to all UIs.
gdb/testsuite/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* gdb.mi/mi-watch.exp (test_watchpoint_creation_and_listing)
(test_awatch_creation_and_listing)
(test_rwatch_creation_and_listing, test_watchpoint_triggering):
Remove 'type' parameter.
(test_watchpoint_all): New parameter mi_mode. Remove
with_test_prefix.
(top level): Use foreach_with_prefix, and add main/separate UI MI
testing axis.
2016-06-21 01:11:56 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (watchpoint_check): Send watchpoint-deleted output
|
|
|
|
|
to all UIs.
|
|
|
|
|
|
2016-06-21 01:11:55 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention support for running interpreters on separate
|
|
|
|
|
UIs and the new new-ui command.
|
|
|
|
|
|
Add new command to create extra console/mi UIs
With all the previous plumbing in place, it's now easy to add a
command that actually creates a new console/mi UI.
The intended use case is to make it possible and easy for MI frontends
to provide a fully featured GDB console to users, with readline
support, command line editing, history, etc., just like if gdb was
started on the command line. Currently MI frontends have to try to
implement all of that theirselves and make use of "-interpreter-exec
console ...", which is far from perfect. If you ever tried Eclipse's
gdb console window, you'll know what I mean...
Instead of trying to multiplex console through MI, this command let's
just leverage all the built in readline/editing support already inside
gdb.
The plan is for the MI frontend to start GDB in regular console mode,
running inside a terminal emulator widget embedded in Eclipse (which
already exists, for supporting the shell widget; other frontends have
similar widgets), and then tell GDB to run a full MI interpreter on an
specified input/output device, independent of the console.
My original prototype planned to do things the other way around --
start GDB in MI mode, and then start an extra CLI console on separate
tty. I handed over that prototype to Marc Khouzam @ Eclipse CDT, and
after experimentation and discussion, we ended up concluding that
starting GDB in CLI mode instead was both easier and actually also
supported an interesting use case -- connect an Eclipse frontend to a
GDB that is already running outside Eclipse.
The current usage is "new-ui <interpreter> <tty>".
E.g., on a terminal run this scriplet:
$ cat gdb-client
#!/bin/bash
reset
tty
tail -f /dev/null
$ gdb-client
/dev/pts/15
Now run gdb on another terminal, and tell it to start a MI interpreter
on the tty of the other terminal:
...
(gdb) new-ui mi /dev/pts/15
New UI allocated
Now back to the the gdb-client terminal, we'll get an MI prompt, ready
for MI input:
/dev/pts/15
=thread-group-added,id="i1"
(gdb)
You can also start a new UI running a CLI, with:
(gdb) new-ui console /dev/pts/15
Though note that this console won't support readline command editing.
It works as if "set editing off" was entered.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* interps.c (set_top_level_interpreter): New function, factored
out from captured_main.
(interpreter_completer): Make extern.
* interps.h (set_top_level_interpreter, interpreter_completer):
New declarations.
(captured_main): Use set_top_level_interpreter.
* top.c [!O_NOCTTY] (O_NOCTTY): Define as 0.
(open_terminal_stream, new_ui_command): New functions.
(init_main): Install the "new-ui" command.
2016-06-21 01:11:55 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* interps.c (set_top_level_interpreter): New function, factored
|
|
|
|
|
out from captured_main.
|
|
|
|
|
(interpreter_completer): Make extern.
|
|
|
|
|
* interps.h (set_top_level_interpreter, interpreter_completer):
|
|
|
|
|
New declarations.
|
|
|
|
|
(captured_main): Use set_top_level_interpreter.
|
|
|
|
|
* top.c [!O_NOCTTY] (O_NOCTTY): Define as 0.
|
|
|
|
|
(open_terminal_stream, new_ui_command): New functions.
|
|
|
|
|
(init_main): Install the "new-ui" command.
|
|
|
|
|
|
Make stdin be per UI
This commit makes each UI have its own "stdin" stream pointer. This
is used to determine whether the "from_tty" argument to
execute_command, etc. should be true.
Related, this commit makes input_from_terminal_p take an UI parameter,
and then avoids the gdb_has_a_terminal in it. gdb_has_a_terminal only
returns info on gdb's own main/primary terminal (the real stdin).
However, the places that call input_from_terminal_p really want to
know is whether the command came from an interactive tty. This patch
thus renames input_from_terminal_p to input_interactive_p for clarity,
and then makes input_interactive_p check for "set interactive" itself,
along with ISATTY, instead of calling gdb_has_a_terminal. Actually,
quit_force wants to call input_interactive_p _after_ stdin is closed,
we can't call ISATTY that late. So instead we save the result of
ISATTY in a field of the UI.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* cli/cli-script.c (read_next_line): Adjust to per-UI stdin.
(read_command_lines): Use input_interactive_p instead of
input_from_terminal_p.
* defs.h (struct ui): Forward declare.
(input_from_terminal_p): Rename to ...
(input_interactive_p): ... this.
* event-top.c (stdin_event_handler): Pass 0 as from_tty argument
to quit_command.
(command_handler): Adjust to per-UI stdin.
(handle_line_of_input): Adjust to per-UI stdin and use
input_interactive_p instead of ISATTY and input_from_terminal_p.
(gdb_readline_no_editing_callback): Adjust to per-UI stdin.
(command_line_handler): Always pass true as "from_tty" parameter
of handle_line_of_input and execute_command.
(async_sigterm_handler): Pass 0 as from_tty argument to
quit_command.
* inflow.c (interactive_mode, show_interactive_mode): Moved to ...
(gdb_has_a_terminal): Don't check interactive_mode here.
(_initialize_inflow): Don't install "set interactive-mode" here.
* main.c (captured_command_loop): Adjust to per-UI stdin.
* mi/mi-interp.c (mi_execute_command_wrapper): Adjust to per-UI
stdin.
* top.c (new_ui): Save the stdin stream and whether it's a tty.
(dont_repeat): Adjust to per-UI stdin.
(command_line_input): Adjust to per-UI stdin and to use
input_interactive_p.
(quit_force): Write history if any UI supports interactive input.
(interactive_mode, show_interactive_mode): Move here, from
inflow.c.
(input_from_terminal_p): Rename to ...
(input_interactive_p): ... this, and check the "interactive_mode"
global instead of calling gdb_has_a_terminal.
(_initialize_top): Install "set interactive-mode" here.
* top.h (struct ui) <stdin_stream, input_interactive_p>: New
fields.
* utils.c (quit): Pass 0 as from_tty argument to quit_force.
(defaulted_query): Adjust to per-UI stdin and to use
input_interactive_p.
2016-06-21 01:11:54 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-script.c (read_next_line): Adjust to per-UI stdin.
|
|
|
|
|
(read_command_lines): Use input_interactive_p instead of
|
|
|
|
|
input_from_terminal_p.
|
|
|
|
|
* defs.h (struct ui): Forward declare.
|
|
|
|
|
(input_from_terminal_p): Rename to ...
|
|
|
|
|
(input_interactive_p): ... this.
|
|
|
|
|
* event-top.c (stdin_event_handler): Pass 0 as from_tty argument
|
|
|
|
|
to quit_command.
|
|
|
|
|
(command_handler): Adjust to per-UI stdin.
|
|
|
|
|
(handle_line_of_input): Adjust to per-UI stdin and use
|
|
|
|
|
input_interactive_p instead of ISATTY and input_from_terminal_p.
|
|
|
|
|
(gdb_readline_no_editing_callback): Adjust to per-UI stdin.
|
|
|
|
|
(command_line_handler): Always pass true as "from_tty" parameter
|
|
|
|
|
of handle_line_of_input and execute_command.
|
|
|
|
|
(async_sigterm_handler): Pass 0 as from_tty argument to
|
|
|
|
|
quit_command.
|
|
|
|
|
* inflow.c (interactive_mode, show_interactive_mode): Moved to ...
|
|
|
|
|
(gdb_has_a_terminal): Don't check interactive_mode here.
|
|
|
|
|
(_initialize_inflow): Don't install "set interactive-mode" here.
|
|
|
|
|
* main.c (captured_command_loop): Adjust to per-UI stdin.
|
|
|
|
|
* mi/mi-interp.c (mi_execute_command_wrapper): Adjust to per-UI
|
|
|
|
|
stdin.
|
|
|
|
|
* top.c (new_ui): Save the stdin stream and whether it's a tty.
|
|
|
|
|
(dont_repeat): Adjust to per-UI stdin.
|
|
|
|
|
(command_line_input): Adjust to per-UI stdin and to use
|
|
|
|
|
input_interactive_p.
|
|
|
|
|
(quit_force): Write history if any UI supports interactive input.
|
|
|
|
|
(interactive_mode, show_interactive_mode): Move here, from
|
|
|
|
|
inflow.c.
|
|
|
|
|
(input_from_terminal_p): Rename to ...
|
|
|
|
|
(input_interactive_p): ... this, and check the "interactive_mode"
|
|
|
|
|
global instead of calling gdb_has_a_terminal.
|
|
|
|
|
(_initialize_top): Install "set interactive-mode" here.
|
|
|
|
|
* top.h (struct ui) <stdin_stream, input_interactive_p>: New
|
|
|
|
|
fields.
|
|
|
|
|
* utils.c (quit): Pass 0 as from_tty argument to quit_force.
|
|
|
|
|
(defaulted_query): Adjust to per-UI stdin and to use
|
|
|
|
|
input_interactive_p.
|
|
|
|
|
|
2016-06-21 01:11:54 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (stdin_event_handler): Don't quit gdb if it was a
|
|
|
|
|
secondary UI's input stream that closed. Instead, just delete the
|
|
|
|
|
UI.
|
|
|
|
|
|
2016-06-21 01:11:53 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (main_ui_): Delete.
|
|
|
|
|
(main_ui, current_ui, ui_list): No longer initialize here.
|
|
|
|
|
* main.c (captured_main): UI initialization code factored out to
|
|
|
|
|
new new_ui function.
|
|
|
|
|
(gdb_main): Wrap captured_main with TRY/CATCH instead of
|
|
|
|
|
catch_errors.
|
|
|
|
|
* top.c (highest_ui_num): New global.
|
|
|
|
|
(new_ui): New function.
|
|
|
|
|
* top.h (struct ui) <num>: New field.
|
|
|
|
|
(new_ui): New declaration.
|
|
|
|
|
|
2016-06-21 01:11:53 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-interp.c (cli_on_normal_stop): Bail out early if there's
|
|
|
|
|
nothing to print. Use should_print_stop_to_console.
|
|
|
|
|
* tui/tui-interp.c (tui_on_normal_stop): Likewise.
|
|
|
|
|
|
Push thread->control.command_interp to the struct thread_fsm
I noticed that if we step into an inline function, step_1 never
reaches proceed, and thus nevers sets the thread's
tp->control.command_interp. Because of that,
should_print_stop_to_console fails to determine that is should print
stop output to the console.
The fix is to set the thread's command_interp earlier. However, I
realized that we can move that field to the thread_fsm, given that its
lifetime is exactly the same as thread_fsm. So the patch plumbs all
fsms constructors to take the command interp and store it in the
thread_fsm.
We can see the fix in action, with e.g., the gdb.opt/inline-cmds.exp
test, and issuing a step when stopped at line 67:
&"s\n"
^running
*running,thread-id="all"
(gdb)
~"67\t result = func2 ();\n"
*stopped,reason="end-stepping-range",frame={addr="0x00000000004004d0",func="main",args=[],file="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c",fullname="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c",line="67"},thread-id="1",stopped-threads="all",core="0"
(gdb)
s
&"s\n"
^running
*running,thread-id="all"
(gdb)
+ ~"func2 () at /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c:67\n"
+ ~"67\t result = func2 ();\n"
*stopped,reason="end-stepping-range",frame={addr="0x00000000004004d0",func="func2",args=[],file="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c",fullname="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c",line="67"},thread-id="1",stopped-threads="all",core="0"
(gdb)
(The inline-cmds.exp command is adjusted to exercise this.)
(Due to the follow_fork change, this also fixes "next N" across a fork
with "set follow-fork child" with "set detach-on-fork on". Commands
that rely on internal breakpoints, like "finish" will still require
more work to migrate breakpoints etc. to the child thread.)
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* breakpoint.c (new_until_break_fsm): Add 'cmd_interp' parameter.
(until_break_fsm_should_stop, until_break_fsm_clean_up): Add
thread parameter.
(until_break_command): Pass command interpreter to thread fsm
ctor.
* cli/cli-interp.c (should_print_stop_to_console): Adjust.
* gdbthread.h (struct thread_control_state) <command_interp>:
Delete field.
* infcall.c (new_call_thread_fsm): Add 'cmd_interp' parameter.
Pass it down.
(call_thread_fsm_should_stop): Add thread parameter.
(call_function_by_hand_dummy): Pass command interpreter to thread
fsm ctor. Pass thread pointer to fsm clean up method.
* infcmd.c: Include interps.h.
(struct step_command_fsm) <thread>: Delete field.
(new_step_command_fsm): Add 'cmd_interp' parameter. Pass it down.
(step_command_fsm_prepare): Remove references to fsm's thread
field.
(step_1): Pass command interpreter to thread
fsm ctor. Pass thread pointer to fsm clean up method.
(step_command_fsm_should_stop, step_command_fsm_clean_up): Add
thread parameter and use it.
(new_until_next_fsm): Add 'cmd_interp' parameter. Pass it down.
(until_next_fsm_should_stop, until_next_fsm_clean_up): Add thread
parameter and use it.
(until_next_command): Pass command interpreter to thread fsm ctor.
(struct finish_command_fsm) <thread>: Delete field.
(finish_command_fsm_ops): Add NULL slot for should_notify_stop.
(new_finish_command_fsm): Add 'cmd_interp' parameter and pass it
down. Remove thread parameter and adjust.
(finish_command_fsm_should_stop, finish_command_fsm_clean_up): Add
thread parameter and use it.
(finish_command): Pass command interpreter to thread fsm ctor.
Don't pass thread.
* infrun.c (follow_fork): Move thread fsm to child fork instead of
command interpreter, only.
(clear_proceed_status_thread): Remove reference to command_interp.
(proceed): Don't record the thread's command interpreter.
(clean_up_just_stopped_threads_fsms): Pass thread to fsm clean_up
method.
(fetch_inferior_event): Pass thread to fsm should_stop method.
* thread-fsm.c (thread_fsm_ctor): Add 'cmd_interp' parameter.
Store it.
(thread_fsm_clean_up, thread_fsm_should_stop): Add thread
parameter and pass it down.
* thread-fsm.h (struct thread_fsm) <command_interp>: New field.
(struct thread_fsm_ops) <clean_up, should_stop>: Add thread
parameter.
(thread_fsm_ctor): Add 'cmd_interp' parameter.
(thread_fsm_clean_up, thread_fsm_should_stop): Add thread
parameter.
* thread.c (thread_cancel_execution_command): Pass thread to
thread fsm clean_up method.
gdb/testsuite/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* gdb.opt/inline-cmds.c: Add "set mi break here" marker.
* gdb.opt/inline-cmds.exp: Add MI tests.
2016-06-21 01:11:53 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (new_until_break_fsm): Add 'cmd_interp' parameter.
|
|
|
|
|
(until_break_fsm_should_stop, until_break_fsm_clean_up): Add
|
|
|
|
|
thread parameter.
|
|
|
|
|
(until_break_command): Pass command interpreter to thread fsm
|
|
|
|
|
ctor.
|
|
|
|
|
* cli/cli-interp.c (should_print_stop_to_console): Adjust.
|
|
|
|
|
* gdbthread.h (struct thread_control_state) <command_interp>:
|
|
|
|
|
Delete field.
|
|
|
|
|
* infcall.c (new_call_thread_fsm): Add 'cmd_interp' parameter.
|
|
|
|
|
Pass it down.
|
|
|
|
|
(call_thread_fsm_should_stop): Add thread parameter.
|
|
|
|
|
(call_function_by_hand_dummy): Pass command interpreter to thread
|
|
|
|
|
fsm ctor. Pass thread pointer to fsm clean up method.
|
|
|
|
|
* infcmd.c: Include interps.h.
|
|
|
|
|
(struct step_command_fsm) <thread>: Delete field.
|
|
|
|
|
(new_step_command_fsm): Add 'cmd_interp' parameter. Pass it down.
|
|
|
|
|
(step_command_fsm_prepare): Remove references to fsm's thread
|
|
|
|
|
field.
|
|
|
|
|
(step_1): Pass command interpreter to thread
|
|
|
|
|
fsm ctor. Pass thread pointer to fsm clean up method.
|
|
|
|
|
(step_command_fsm_should_stop, step_command_fsm_clean_up): Add
|
|
|
|
|
thread parameter and use it.
|
|
|
|
|
(new_until_next_fsm): Add 'cmd_interp' parameter. Pass it down.
|
|
|
|
|
(until_next_fsm_should_stop, until_next_fsm_clean_up): Add thread
|
|
|
|
|
parameter and use it.
|
|
|
|
|
(until_next_command): Pass command interpreter to thread fsm ctor.
|
|
|
|
|
(struct finish_command_fsm) <thread>: Delete field.
|
|
|
|
|
(finish_command_fsm_ops): Add NULL slot for should_notify_stop.
|
|
|
|
|
(new_finish_command_fsm): Add 'cmd_interp' parameter and pass it
|
|
|
|
|
down. Remove thread parameter and adjust.
|
|
|
|
|
(finish_command_fsm_should_stop, finish_command_fsm_clean_up): Add
|
|
|
|
|
thread parameter and use it.
|
|
|
|
|
(finish_command): Pass command interpreter to thread fsm ctor.
|
|
|
|
|
Don't pass thread.
|
|
|
|
|
* infrun.c (follow_fork): Move thread fsm to child fork instead of
|
|
|
|
|
command interpreter, only.
|
|
|
|
|
(clear_proceed_status_thread): Remove reference to command_interp.
|
|
|
|
|
(proceed): Don't record the thread's command interpreter.
|
|
|
|
|
(clean_up_just_stopped_threads_fsms): Pass thread to fsm clean_up
|
|
|
|
|
method.
|
|
|
|
|
(fetch_inferior_event): Pass thread to fsm should_stop method.
|
|
|
|
|
* thread-fsm.c (thread_fsm_ctor): Add 'cmd_interp' parameter.
|
|
|
|
|
Store it.
|
|
|
|
|
(thread_fsm_clean_up, thread_fsm_should_stop): Add thread
|
|
|
|
|
parameter and pass it down.
|
|
|
|
|
* thread-fsm.h (struct thread_fsm) <command_interp>: New field.
|
|
|
|
|
(struct thread_fsm_ops) <clean_up, should_stop>: Add thread
|
|
|
|
|
parameter.
|
|
|
|
|
(thread_fsm_ctor): Add 'cmd_interp' parameter.
|
|
|
|
|
(thread_fsm_clean_up, thread_fsm_should_stop): Add thread
|
|
|
|
|
parameter.
|
|
|
|
|
* thread.c (thread_cancel_execution_command): Pass thread to
|
|
|
|
|
thread fsm clean_up method.
|
|
|
|
|
|
2016-06-21 01:11:52 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-interp.c: Include gdbthread.h and thread-fsm.h.
|
|
|
|
|
(should_print_stop_to_console): New function, factored out from
|
|
|
|
|
mi_on_normal_stop_1.
|
|
|
|
|
* cli/cli-interp.h (should_print_stop_to_console): Declare.
|
|
|
|
|
* mi/mi-interp.c (mi_on_normal_stop_1): Use
|
|
|
|
|
should_print_stop_to_console. Pass it the current UI's console
|
|
|
|
|
interpreter.
|
|
|
|
|
* mi/mi-main.c (captured_mi_execute_command): Use the
|
|
|
|
|
INTERP_CONSOLE symbol rather than explicit "console".
|
|
|
|
|
|
Fix for spurious prompts in secondary UIs
Running mi-break.exp with MI on a secondary UI reveals that MI emits
spurious prompts compared MI running as primary UI:
-exec-continue
^running
*running,thread-id="all"
(gdb)
=breakpoint-modified,bkpt={number="9",type="breakpoint",disp="keep",enabled="y",func="callee2",line="39",script={"set $i=0","while $i<10","print $i","set $i=$i+1","end","continue"}}
~"\n"
~"Breakpoint 9, callee2 (intarg=2, strarg=0x400730 \"A string argument.\") at ...src/gdb/testsuite/gdb.mi/basics.c:39\n"
~"39\t callee3 (strarg);\n"
*stopped,reason="breakpoint-hit",disp="keep",bkptno="9",frame={addr="0x00000000004005dd",func="callee2",...
*running,thread-id="all"
>> (gdb)
=breakpoint-modified,bkpt={number="9",...
~"\n"
~"Breakpoint 9, callee2 (intarg=2, strarg=0x400730 \"A string argument.\") at ...src/gdb/testsuite/gdb.mi/basics.c:39\n"
~"39\t callee3 (strarg);\n"
*stopped,reason="breakpoint-hit",disp="keep",bkptno="9",...
*running,thread-id="all"
~"[Inferior 1 (process 12639) exited normally]\n"
=thread-exited,id="1",group-id="i1"
=thread-group-exited,id="i1",exit-code="0"
*stopped,reason="exited-normally"
FAIL: gdb.mi/mi-break.exp: intermediate stop and continue
FAIL: gdb.mi/mi-break.exp: test hitting breakpoint with commands (timeout)
Note the line marked >> above.
The test sets a breakpoint that runs "continue", a foreground command.
When we get to run the "continue", we've already emitted the *stopped
event on the MI UI, and set its prompt state to PROMPT_NEEDED (this is
done from within normal_stop). Since inferior events are always
handled with the main UI as current UI, breakpoint commands always run
with the main UI as current UI too. This means that the "continue"
ends up always disabling the prompt on the main UI, instead of the UI
that had just been done with synchronous execution.
I think we'll want to extend this with a concept of "set of
threads/inferiors a UI/interpreter is blocked waiting on", but I'm
leaving that for a separate series.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* infcmd.c (prepare_execution_command): Use
all_uis_on_sync_execution_starting.
* infrun.c (all_uis_on_sync_execution_starting): New function.
* infrun.h (all_uis_on_sync_execution_starting): Declare.
2016-06-21 01:11:52 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* infcmd.c (prepare_execution_command): Use
|
|
|
|
|
all_uis_on_sync_execution_starting.
|
|
|
|
|
* infrun.c (all_uis_on_sync_execution_starting): New function.
|
|
|
|
|
* infrun.h (all_uis_on_sync_execution_starting): Declare.
|
|
|
|
|
|
Replace the sync_execution global with a new enum prompt_state tristate
When sync_execution (a boolean) is true, it means we're running a
foreground command -- we hide the prompt stop listening to input, give
the inferior the terminal, then go to the event loop waiting for the
target to stop.
With multiple independent UIs, we need to track whether each UI is
synchronously blocked waiting for the target. IOW, if you do
"continue" in one console, that console stops accepting commands, but
you should still be free to type other commands in the others
consoles.
Just simply making sync_execution be per-UI alone not sufficient,
because of this in fetch_inferior_event:
/* If the inferior was in sync execution mode, and now isn't,
restore the prompt (a synchronous execution command has finished,
and we're ready for input). */
if (current_ui->async && was_sync && !sync_execution)
observer_notify_sync_execution_done ();
We'd have to record at entry the "was_sync" state for each UI, not
just of the current UI.
This patch instead replaces the sync_execution flag by a per-UI
tristate flag indicating the command line prompt state:
enum prompt_state
{
/* The command line is blocked simulating synchronous execution.
This is used to implement the foreground execution commands
('run', 'continue', etc.). We won't display the prompt and
accept further commands until the execution is actually over. */
PROMPT_BLOCKED,
/* The command finished; display the prompt before returning back to
the top level. */
PROMPT_NEEDED,
/* We've displayed the prompt already, ready for input. */
PROMPTED,
;
I think the end result is _much_ clearer than the current code, and,
it addresses the original motivation too.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* annotate.c: Include top.h.
(async_background_execution_p): Delete.
(print_value_flags): Check the UI's prompt state rather then
async_background_execution_p.
* event-loop.c (start_event_loop): Set the prompt state to
PROMPT_NEEDED.
* event-top.c (display_gdb_prompt, async_enable_stdin)
(async_disable_stdin): Check the current UI's prompt state instead
of the sync_execution global.
(command_line_handler): Set the prompt state to PROMPT_NEEDED
before running a command, and display the prompt if still needed
afterwards.
* infcall.c (struct call_thread_fsm) <waiting_ui>: New field.
(new_call_thread_fsm): New parameter 'waiting_ui'. Store it.
(call_thread_fsm_should_stop): Set the prompt state to
PROMPT_NEEDED.
(run_inferior_call): Adjust to temporarily set the prompt state to
PROMPT_BLOCKED instead of using the sync_execution global.
(call_function_by_hand_dummy): Pass the current UI to
new_call_thread_fsm.
* infcmd.c: Include top.h.
(continue_1): Check the current UI's prompt state instead of the
sync_execution global.
(continue_command): Validate global execution state before calling
prepare_execution_command.
(step_1): Call all_uis_check_sync_execution_done.
(attach_post_wait): Don't call async_enable_stdin here. Remove
reference to sync_execution.
* infrun.c (sync_execution): Delete global.
(follow_fork_inferior)
(reinstall_readline_callback_handler_cleanup): Check the current
UI's prompt state instead of the sync_execution global.
(check_curr_ui_sync_execution_done)
(all_uis_check_sync_execution_done): New functions.
(fetch_inferior_event): Call all_uis_check_sync_execution_done
instead of trying to determine whether the global sync execution
changed.
(handle_no_resumed): Check the prompt state of all UIs.
(normal_stop): Emit the no unwait-for even to all PROMPT_BLOCKED
UIs. Emit the "Switching to" notification to all UIs. Enable
stdin in all UIs.
* infrun.h (sync_execution): Delete.
(all_uis_check_sync_execution_done): Declare.
* main.c (captured_command_loop): Don't call
interp_pre_command_loop if the prompt is blocked.
(catch_command_errors, catch_command_errors_const): Adjust.
(captured_main): Set the initial prompt state to PROMPT_NEEDED.
* mi/mi-interp.c (display_mi_prompt): Set the prompt state to
PROMPTED.
(mi_interpreter_resume): Don't clear sync_execution. Remove hack
comment.
(mi_execute_command_input_handler): Set the prompt state to
PROMPT_NEEDED before executing the command, and only display the
prompt if the prompt state is PROMPT_NEEDED afterwards.
(mi_on_resume_1): Adjust to check the prompt state.
* target.c (target_terminal_inferior): Adjust to check the prompt
state.
* top.c (wait_sync_command_done, maybe_wait_sync_command_done)
(execute_command): Check the current UI's prompt state instead of
sync_execution.
* top.h (enum prompt_state): New.
(struct ui) <prompt_state>: New field.
(ALL_UIS): New macro.
2016-06-21 01:11:51 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* annotate.c: Include top.h.
|
|
|
|
|
(async_background_execution_p): Delete.
|
|
|
|
|
(print_value_flags): Check the UI's prompt state rather then
|
|
|
|
|
async_background_execution_p.
|
|
|
|
|
* event-loop.c (start_event_loop): Set the prompt state to
|
|
|
|
|
PROMPT_NEEDED.
|
|
|
|
|
* event-top.c (display_gdb_prompt, async_enable_stdin)
|
|
|
|
|
(async_disable_stdin): Check the current UI's prompt state instead
|
|
|
|
|
of the sync_execution global.
|
|
|
|
|
(command_line_handler): Set the prompt state to PROMPT_NEEDED
|
|
|
|
|
before running a command, and display the prompt if still needed
|
|
|
|
|
afterwards.
|
|
|
|
|
* infcall.c (struct call_thread_fsm) <waiting_ui>: New field.
|
|
|
|
|
(new_call_thread_fsm): New parameter 'waiting_ui'. Store it.
|
|
|
|
|
(call_thread_fsm_should_stop): Set the prompt state to
|
|
|
|
|
PROMPT_NEEDED.
|
|
|
|
|
(run_inferior_call): Adjust to temporarily set the prompt state to
|
|
|
|
|
PROMPT_BLOCKED instead of using the sync_execution global.
|
|
|
|
|
(call_function_by_hand_dummy): Pass the current UI to
|
|
|
|
|
new_call_thread_fsm.
|
|
|
|
|
* infcmd.c: Include top.h.
|
|
|
|
|
(continue_1): Check the current UI's prompt state instead of the
|
|
|
|
|
sync_execution global.
|
|
|
|
|
(continue_command): Validate global execution state before calling
|
|
|
|
|
prepare_execution_command.
|
|
|
|
|
(step_1): Call all_uis_check_sync_execution_done.
|
|
|
|
|
(attach_post_wait): Don't call async_enable_stdin here. Remove
|
|
|
|
|
reference to sync_execution.
|
|
|
|
|
* infrun.c (sync_execution): Delete global.
|
|
|
|
|
(follow_fork_inferior)
|
|
|
|
|
(reinstall_readline_callback_handler_cleanup): Check the current
|
|
|
|
|
UI's prompt state instead of the sync_execution global.
|
|
|
|
|
(check_curr_ui_sync_execution_done)
|
|
|
|
|
(all_uis_check_sync_execution_done): New functions.
|
|
|
|
|
(fetch_inferior_event): Call all_uis_check_sync_execution_done
|
|
|
|
|
instead of trying to determine whether the global sync execution
|
|
|
|
|
changed.
|
|
|
|
|
(handle_no_resumed): Check the prompt state of all UIs.
|
|
|
|
|
(normal_stop): Emit the no unwait-for even to all PROMPT_BLOCKED
|
|
|
|
|
UIs. Emit the "Switching to" notification to all UIs. Enable
|
|
|
|
|
stdin in all UIs.
|
|
|
|
|
* infrun.h (sync_execution): Delete.
|
|
|
|
|
(all_uis_check_sync_execution_done): Declare.
|
|
|
|
|
* main.c (captured_command_loop): Don't call
|
|
|
|
|
interp_pre_command_loop if the prompt is blocked.
|
|
|
|
|
(catch_command_errors, catch_command_errors_const): Adjust.
|
|
|
|
|
(captured_main): Set the initial prompt state to PROMPT_NEEDED.
|
|
|
|
|
* mi/mi-interp.c (display_mi_prompt): Set the prompt state to
|
|
|
|
|
PROMPTED.
|
|
|
|
|
(mi_interpreter_resume): Don't clear sync_execution. Remove hack
|
|
|
|
|
comment.
|
|
|
|
|
(mi_execute_command_input_handler): Set the prompt state to
|
|
|
|
|
PROMPT_NEEDED before executing the command, and only display the
|
|
|
|
|
prompt if the prompt state is PROMPT_NEEDED afterwards.
|
|
|
|
|
(mi_on_resume_1): Adjust to check the prompt state.
|
|
|
|
|
* target.c (target_terminal_inferior): Adjust to check the prompt
|
|
|
|
|
state.
|
|
|
|
|
* top.c (wait_sync_command_done, maybe_wait_sync_command_done)
|
|
|
|
|
(execute_command): Check the current UI's prompt state instead of
|
|
|
|
|
sync_execution.
|
|
|
|
|
* top.h (enum prompt_state): New.
|
|
|
|
|
(struct ui) <prompt_state>: New field.
|
|
|
|
|
(ALL_UIS): New macro.
|
|
|
|
|
|
2016-06-21 01:11:51 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* top.c (gdb_secondary_prompt_depth): Delete.
|
|
|
|
|
(gdb_in_secondary_prompt_p): Add ui parameter. Use it.
|
|
|
|
|
(gdb_readline_wrapper_cleanup, gdb_readline_wrapper): Adjust to
|
|
|
|
|
per-UI gdb_secondary_prompt_depth.
|
|
|
|
|
* top.h (struct ui) <secondary_prompt_depth>: New field.
|
|
|
|
|
|
2016-06-21 01:11:51 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-interp.c (cli_interpreter_pre_command_loop): New
|
|
|
|
|
function.
|
|
|
|
|
(cli_interp_procs): Install it instead of cli_command_loop.
|
|
|
|
|
* cli/cli-interp.h (cli_interpreter_pre_command_loop): Declare.
|
|
|
|
|
* event-top.c (cli_command_loop): Delete.
|
|
|
|
|
* interps.c (interp_new): Remove reference to command_loop_proc.
|
|
|
|
|
(current_interp_command_loop): Delete.
|
|
|
|
|
(interp_pre_command_loop): New function.
|
|
|
|
|
(interp_command_loop_ftype): Delete.
|
|
|
|
|
* interps.h (interp_pre_command_loop_ftype): New typedef.
|
|
|
|
|
(struct interp_procs) <command_loop_proc>: Delele field.
|
|
|
|
|
<pre_command_loop_proc>: New field.
|
|
|
|
|
(current_interp_command_loop): Delete declaration.
|
|
|
|
|
(interp_pre_command_loop): New declaration.
|
|
|
|
|
* main.c (captured_command_loop): Call interp_pre_command_loop
|
|
|
|
|
instead of current_interp_command_loop and start an event loop.
|
|
|
|
|
* mi/mi-interp.c (mi_command_loop): Delete.
|
|
|
|
|
(mi_interpreter_pre_command_loop): New.
|
|
|
|
|
(mi_interp_procs): Update.
|
|
|
|
|
* tui/tui-interp.c (tui_interp_procs): Install
|
|
|
|
|
cli_interpreter_pre_command_loop instead of cli_command_loop.
|
|
|
|
|
|
2016-06-21 01:11:50 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* interps.c (current_interpreter): New function.
|
|
|
|
|
* interps.h (current_interpreter): New declaration.
|
|
|
|
|
* mi/mi-cmds.h (raw_stdout): Delete declaration.
|
|
|
|
|
* mi/mi-common.h (struct mi_interp) <raw_stdout,
|
|
|
|
|
saved_raw_stdout>: New field.
|
|
|
|
|
* mi/mi-interp.c (display_mi_prompt): New parameter 'mi'. Adjust
|
|
|
|
|
to per-UI raw_stdout.
|
|
|
|
|
(mi_interpreter_init): Adjust to per-UI raw_stdout.
|
|
|
|
|
(mi_on_sync_execution_done, mi_execute_command_input_handler)
|
|
|
|
|
(mi_command_loop): Pass MI instance to display_mi_prompt.
|
|
|
|
|
(mi_on_normal_stop_1, mi_output_running_pid, mi_on_resume_1)
|
|
|
|
|
(mi_on_resume): Adjust to per-UI raw_stdout.
|
|
|
|
|
(saved_raw_stdout): Delete.
|
|
|
|
|
(mi_set_logging): Adjust to per-UI raw_stdout and
|
|
|
|
|
saved_raw_stdout.
|
|
|
|
|
* mi/mi-main.c (raw_stdout): Delete.
|
|
|
|
|
(mi_cmd_gdb_exit, captured_mi_execute_command)
|
|
|
|
|
(mi_print_exception, mi_load_progress): Adjust to per-UI
|
|
|
|
|
raw_stdout.
|
|
|
|
|
(print_diff_now, mi_print_timing_maybe): New ui_file parameter.
|
|
|
|
|
Pass it along.
|
|
|
|
|
(print_diff): New ui_file parameter. Send output there instead of
|
|
|
|
|
raw_stdout.
|
|
|
|
|
* mi/mi-main.h (struct ui_file): Forward declare.
|
|
|
|
|
(mi_print_timing_maybe): Add ui_file parameter.
|
|
|
|
|
|
2016-06-21 01:11:50 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* mi/mi-interp.c (display_mi_prompt): New function.
|
|
|
|
|
|
2016-06-21 01:11:49 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* target.c (target_terminal_inferior): Bail out after
|
|
|
|
|
unregistering input_fd if not on the main UI.
|
|
|
|
|
(target_terminal_ours): Bail out after registering input_fd if not
|
|
|
|
|
on the main UI.
|
|
|
|
|
(target_terminal_ours_for_output): Bail out if not on the main UI.
|
|
|
|
|
|
2016-06-21 01:11:49 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (restore_ui_cleanup): Make extern.
|
|
|
|
|
* infrun.c (fetch_inferior_event): Always switch to the main UI.
|
|
|
|
|
* top.h (restore_ui_cleanup): Declare.
|
|
|
|
|
|
Make command line editing (use of readline) be per UI
Due to the way that readline's API works (based on globals), we can
only have one instance of readline in a process. So the goal of this
patch is to only allow editing in the main UI, and make sure that only
one UI calls into readline. Some MI paths touch readline variables
currently, which is bad as that is changing variables that matter for
the main console UI. This patch fixes those.
This actually fixes a nasty bug -- starting gdb in MI mode ("gdb
-i=mi"), and then doing "set editing on" crashes GDB, because MI is
not prepared to use readline:
set editing on
&"set editing on\n"
=cmd-param-changed,param="editing",value="on"
^done
(gdb)
p 1
readline: readline_callback_read_char() called with no handler!
Aborted (core dumped)
The fix for that was to add an interp_proc method to query the
interpreter whether it actually supports editing. New test included.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
PR mi/20034
* cli/cli-interp.c: Include cli-interp.h and event-top.h.
(cli_interpreter_resume): Pass 1 to gdb_setup_readline. Set the
UI's input_handler here.
(cli_interpreter_supports_command_editing): New function.
(cli_interp_procs): Install it.
* cli/cli-interp.h: New file.
* event-top.c (async_command_editing_p): Rename to ...
(set_editing_cmd_var): ... this.
(change_line_handler): Add parameter 'editing', and use it. Bail
early if the interpreter doesn't support editing. Don't touch
readline state if editing is off.
(gdb_rl_callback_handler_remove, gdb_rl_callback_handler_install)
(gdb_rl_callback_handler_reinstall): Assert the current UI is the
main UI.
(display_gdb_prompt): Don't call gdb_rl_callback_handler_remove if
not using readline. Check whether the current UI is using command
editing instead of checking the async_command_editing_p global.
(set_async_editing_command): Delete.
(gdb_setup_readline): Add 'editing' parameter. Only allow editing
on the main UI. Don't touch readline state if editing is off.
(gdb_disable_readline): Don't touch readline state if editing is
off.
* event-top.h (gdb_setup_readline): Add 'int' parameter.
(set_async_editing_command): Delete declaration.
(change_line_handler, command_line_handler): Declare.
(async_command_editing_p): Rename to ...
(set_editing_cmd_var): ... this.
* infrun.c (reinstall_readline_callback_handler_cleanup): Check
whether the current UI has editing enabled rather than checking
the async_command_editing_p global.
* interps.c (interp_supports_command_editing): New function.
* interps.h (interp_supports_command_editing_ftype): New typedef.
(struct interp_procs) <supports_command_editing_proc>: New field.
(interp_supports_command_editing): Declare.
* mi/mi-interp.c (mi_interpreter_resume): Pass 0 to
gdb_setup_readline. Don't clear the async_command_editing_p
global. Update comments.
* top.c (gdb_readline_wrapper_line, gdb_readline_wrapper): Check
whether the current UI has editing enabled rather than checking
the async_command_editing_p global. Don't touch readline state if
editing is off.
(undo_terminal_modifications_before_exit): Switch to the main UI.
Unconditionally call gdb_disable_readline.
(set_editing): New function.
(show_async_command_editing_p): Rename to ...
(show_editing): ... this. Show the state of the current UI.
(_initialize_top): Adjust.
* top.h (struct ui) <command_editing>: New field.
* tui/tui-interp.c: Include cli/cli-interp.h.
(tui_resume): Pass 1 to gdb_setup_readline. Set the UI's
input_handler.
(tui_interp_procs): Install
cli_interpreter_supports_command_editing.
* tui/tui-io.c (tui_getc): Check whether the current UI has
editing enabled rather than checking the async_command_editing_p
global.
gdb/testsuite/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
PR mi/20034
* gdb.mi/mi-editing.exp: New file.
2016-06-21 01:11:48 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR mi/20034
|
|
|
|
|
* cli/cli-interp.c: Include cli-interp.h and event-top.h.
|
|
|
|
|
(cli_interpreter_resume): Pass 1 to gdb_setup_readline. Set the
|
|
|
|
|
UI's input_handler here.
|
|
|
|
|
(cli_interpreter_supports_command_editing): New function.
|
|
|
|
|
(cli_interp_procs): Install it.
|
|
|
|
|
* cli/cli-interp.h: New file.
|
|
|
|
|
* event-top.c (async_command_editing_p): Rename to ...
|
|
|
|
|
(set_editing_cmd_var): ... this.
|
|
|
|
|
(change_line_handler): Add parameter 'editing', and use it. Bail
|
|
|
|
|
early if the interpreter doesn't support editing. Don't touch
|
|
|
|
|
readline state if editing is off.
|
|
|
|
|
(gdb_rl_callback_handler_remove, gdb_rl_callback_handler_install)
|
|
|
|
|
(gdb_rl_callback_handler_reinstall): Assert the current UI is the
|
|
|
|
|
main UI.
|
|
|
|
|
(display_gdb_prompt): Don't call gdb_rl_callback_handler_remove if
|
|
|
|
|
not using readline. Check whether the current UI is using command
|
|
|
|
|
editing instead of checking the async_command_editing_p global.
|
|
|
|
|
(set_async_editing_command): Delete.
|
|
|
|
|
(gdb_setup_readline): Add 'editing' parameter. Only allow editing
|
|
|
|
|
on the main UI. Don't touch readline state if editing is off.
|
|
|
|
|
(gdb_disable_readline): Don't touch readline state if editing is
|
|
|
|
|
off.
|
|
|
|
|
* event-top.h (gdb_setup_readline): Add 'int' parameter.
|
|
|
|
|
(set_async_editing_command): Delete declaration.
|
|
|
|
|
(change_line_handler, command_line_handler): Declare.
|
|
|
|
|
(async_command_editing_p): Rename to ...
|
|
|
|
|
(set_editing_cmd_var): ... this.
|
|
|
|
|
* infrun.c (reinstall_readline_callback_handler_cleanup): Check
|
|
|
|
|
whether the current UI has editing enabled rather than checking
|
|
|
|
|
the async_command_editing_p global.
|
|
|
|
|
* interps.c (interp_supports_command_editing): New function.
|
|
|
|
|
* interps.h (interp_supports_command_editing_ftype): New typedef.
|
|
|
|
|
(struct interp_procs) <supports_command_editing_proc>: New field.
|
|
|
|
|
(interp_supports_command_editing): Declare.
|
|
|
|
|
* mi/mi-interp.c (mi_interpreter_resume): Pass 0 to
|
|
|
|
|
gdb_setup_readline. Don't clear the async_command_editing_p
|
|
|
|
|
global. Update comments.
|
|
|
|
|
* top.c (gdb_readline_wrapper_line, gdb_readline_wrapper): Check
|
|
|
|
|
whether the current UI has editing enabled rather than checking
|
|
|
|
|
the async_command_editing_p global. Don't touch readline state if
|
|
|
|
|
editing is off.
|
|
|
|
|
(undo_terminal_modifications_before_exit): Switch to the main UI.
|
|
|
|
|
Unconditionally call gdb_disable_readline.
|
|
|
|
|
(set_editing): New function.
|
|
|
|
|
(show_async_command_editing_p): Rename to ...
|
|
|
|
|
(show_editing): ... this. Show the state of the current UI.
|
|
|
|
|
(_initialize_top): Adjust.
|
|
|
|
|
* top.h (struct ui) <command_editing>: New field.
|
|
|
|
|
* tui/tui-interp.c: Include cli/cli-interp.h.
|
|
|
|
|
(tui_resume): Pass 1 to gdb_setup_readline. Set the UI's
|
|
|
|
|
input_handler.
|
|
|
|
|
(tui_interp_procs): Install
|
|
|
|
|
cli_interpreter_supports_command_editing.
|
|
|
|
|
* tui/tui-io.c (tui_getc): Check whether the current UI has
|
|
|
|
|
editing enabled rather than checking the async_command_editing_p
|
|
|
|
|
global.
|
|
|
|
|
|
2016-06-21 01:11:48 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* top.c: Call gen_ret_current_ui_field_ptr for current_uiout.
|
|
|
|
|
* top.h (struct ui) <m_current_uiout>: New field.
|
|
|
|
|
* ui-out.c (current_uiout): Delete.
|
|
|
|
|
* ui-out.h (current_uiout): Delete.
|
|
|
|
|
(current_ui_current_uiout_ptr): New declaration.
|
|
|
|
|
(current_uiout): Reimplement as wrapper around
|
|
|
|
|
current_ui_current_uiout_ptr.
|
|
|
|
|
|
Delete def_uiout
Currently, current_uiout starts out pointing to def_uiout, a dummy
ui_out implementation.
Since we create a replacement uiout early on as soon as we create the
interpreter, we never actually use def_uiout. So this patch removes
it.
The proof that it works is that starting with current_uiout set to
NULL does not crash.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* ui-out.c (default_ui_out_impl): Delete.
(def_uiout): Delete.
(current_uiout): Set to NULL.
(default_table_begin, default_table_body, default_table_end)
(default_table_header, default_begin, default_end)
(default_field_int, default_field_skip, default_field_string)
(default_field_fmt, default_spaces, default_text, default_message)
(default_wrap_hint, default_flush, default_data_destroy): Delete.
2016-06-21 01:11:48 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ui-out.c (default_ui_out_impl): Delete.
|
|
|
|
|
(def_uiout): Delete.
|
|
|
|
|
(current_uiout): Set to NULL.
|
|
|
|
|
(default_table_begin, default_table_body, default_table_end)
|
|
|
|
|
(default_table_header, default_begin, default_end)
|
|
|
|
|
(default_field_int, default_field_skip, default_field_string)
|
|
|
|
|
(default_field_fmt, default_spaces, default_text, default_message)
|
|
|
|
|
(default_wrap_hint, default_flush, default_data_destroy): Delete.
|
|
|
|
|
|
2016-06-21 01:11:47 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (gdb_setup_readline): Pass the UI's outstream and
|
|
|
|
|
errstream to stdout_fileopen and stderr_fileopen.
|
|
|
|
|
* exceptions.c: Include top.h.
|
|
|
|
|
(print_flush): Open the current UI's outstream file descriptor,
|
|
|
|
|
instead of hardcoding file descriptor 1.
|
|
|
|
|
* main.c (captured_main): Save the main UI's out and error
|
|
|
|
|
streams. Adjust stderr_fileopen call.
|
|
|
|
|
* top.h (struct ui) <outstream, errstream>: New fields.
|
|
|
|
|
* ui-file.c (stderr_fileopen): Add stream parameter. Use it
|
|
|
|
|
instead of stderr.
|
|
|
|
|
* ui-file.h (stderr_fileopen): Add stream parameter and update
|
|
|
|
|
comment.
|
|
|
|
|
|
2016-06-21 01:11:47 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (input_fd): Delete.
|
|
|
|
|
(stdin_event_handler): Switch to the UI whose input descriptor got
|
|
|
|
|
the event. Adjust to per-UI input_fd.
|
|
|
|
|
(gdb_setup_readline): Don't set the input_fd global. Adjust to
|
|
|
|
|
per-UI input_fd.
|
|
|
|
|
(gdb_disable_readline): Adjust to per-UI input_fd.
|
|
|
|
|
* event-top.h (input_fd): Delete declaration.
|
|
|
|
|
* linux-nat.c (linux_nat_terminal_inferior): Don't remove input_fd
|
|
|
|
|
from the event-loop here.
|
|
|
|
|
(linux_nat_terminal_ours): Don't register input_fd in the
|
|
|
|
|
event-loop here.
|
|
|
|
|
* main.c (captured_main): Adjust to per-UI input_fd.
|
|
|
|
|
* remote.c (remote_terminal_inferior): Don't remove input_fd from
|
|
|
|
|
the event-loop here.
|
|
|
|
|
(remote_terminal_ours): Don't register input_fd in the event-loop
|
|
|
|
|
here.
|
|
|
|
|
* target.c: Include top.h and event-top.h.
|
|
|
|
|
(target_terminal_inferior): Remove input_fd from the event-loop
|
|
|
|
|
here.
|
|
|
|
|
(target_terminal_ours): Register input_fd in the event-loop.
|
|
|
|
|
* top.h (struct ui) <input_fd>: New field.
|
|
|
|
|
|
Make instream be per UI
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* cli/cli-script.c (execute_user_command, read_next_line)
(read_next_line): Adjust to per-UI instream.
* event-top.c (stdin_event_handler, command_handler)
(handle_line_of_input, command_line_handler)
(gdb_readline_no_editing_callback, async_sigterm_handler)
(gdb_setup_readline): Likewise.
* inflow.c: Include top.h.
(gdb_has_a_terminal, child_terminal_init_with_pgrp)
(gdb_save_tty_state, child_terminal_inferior)
(child_terminal_ours_1, copy_terminal_info): Use the main UI.
(initialize_stdin_serial): Adjust to per-UI instream.
* main.c (captured_command_loop, captured_main): Adjust to per-UI
instream.
* mi/mi-interp.c (mi_execute_command_wrapper): Likewise.
* python/python.c (python_interactive_command): Likewise.
* terminal.h (struct ui): Forward declare.
(initialize_stdin_serial): Add struct ui parameter.
* top.c (instream): Delete.
(do_restore_instream_cleanup, read_command_file, dont_repeat)
(gdb_readline_no_editing, command_line_input)
(input_from_terminal_p, gdb_init): Adjust to per-UI instream.
* top.h (struct ui) <instream>: New field.
(instream): Delete declaration.
(quit): Adjust to per-UI instream.
gdb/testsuite/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* gdb.gdb/selftest.exp (do_steps_and_nexts): Add new regexp.
2016-06-21 01:11:46 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-script.c (execute_user_command, read_next_line)
|
|
|
|
|
(read_next_line): Adjust to per-UI instream.
|
|
|
|
|
* event-top.c (stdin_event_handler, command_handler)
|
|
|
|
|
(handle_line_of_input, command_line_handler)
|
|
|
|
|
(gdb_readline_no_editing_callback, async_sigterm_handler)
|
|
|
|
|
(gdb_setup_readline): Likewise.
|
|
|
|
|
* inflow.c: Include top.h.
|
|
|
|
|
(gdb_has_a_terminal, child_terminal_init_with_pgrp)
|
|
|
|
|
(gdb_save_tty_state, child_terminal_inferior)
|
|
|
|
|
(child_terminal_ours_1, copy_terminal_info): Use the main UI.
|
|
|
|
|
(initialize_stdin_serial): Adjust to per-UI instream.
|
|
|
|
|
* main.c (captured_command_loop, captured_main): Adjust to per-UI
|
|
|
|
|
instream.
|
|
|
|
|
* mi/mi-interp.c (mi_execute_command_wrapper): Likewise.
|
|
|
|
|
* python/python.c (python_interactive_command): Likewise.
|
|
|
|
|
* terminal.h (struct ui): Forward declare.
|
|
|
|
|
(initialize_stdin_serial): Add struct ui parameter.
|
|
|
|
|
* top.c (instream): Delete.
|
|
|
|
|
(do_restore_instream_cleanup, read_command_file, dont_repeat)
|
|
|
|
|
(gdb_readline_no_editing, command_line_input)
|
|
|
|
|
(input_from_terminal_p, gdb_init): Adjust to per-UI instream.
|
|
|
|
|
* top.h (struct ui) <instream>: New field.
|
|
|
|
|
(instream): Delete declaration.
|
|
|
|
|
(quit): Adjust to per-UI instream.
|
|
|
|
|
|
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-loop.c: Include top.h.
|
|
|
|
|
(invoke_async_signal_handlers): Switch to the main UI.
|
|
|
|
|
* event-top.c (main_ui_): Update comment.
|
|
|
|
|
(main_ui): New global.
|
|
|
|
|
* top.h (main_ui): Declare.
|
|
|
|
|
|
Make the intepreters output to all UIs
When we have multiple consoles, MI channels, etc., then we need to
broadcast breakpoint hits, etc. to all UIs. In the past, I've
adjusted most of the run control to communicate events to the
interpreters through observer notifications, so events would be
properly sent to console and MI streams, in sync and async modes.
This patch does the next logical step -- have each interpreter's
observers output interpreter-specific info to _all_ UIs.
Note that when we have multiple instances of active cli/tui
interpreters, then the cli_interp and tui_interp globals no longer
work. This is addressed by this patch.
Also, the interpreters currently register some observers when resumed
and remove them when suspended. If we have multiple instances of the
interpreters, and they can be suspended/resumed at different,
independent times, that no longer works. What we instead do is always
install the observers, and then have the observers themselves know
when to do nothing.
An earlier prototype of this series did the looping over struct UIs in
common code, and then dispatched events to the interpreters through a
matching interp_on_foo method for each observer. That turned out a
lot more complicated than the present solution, as we'd end up with
having to create a new interp method every time some interpreter
wanted to listen to some observer notification, resulting in a lot of
duplicated make-work and more coupling than desirable.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* cli/cli-interp.c (cli_interp): Delete.
(as_cli_interp): New function.
(cli_on_normal_stop, cli_on_signal_received)
(cli_on_end_stepping_range, cli_on_signal_exited, cli_on_exited)
(cli_on_no_history): Send output to all CLI UIs.
(cli_on_sync_execution_done, cli_on_command_error): Skip output if
the top level interpreter is not a CLI.
(cli_interpreter_init): Don't set cli_interp or install observers
here.
(_initialize_cli_interp): Install observers here.
* event-top.c (main_ui_, ui_list): New globals.
(current_ui): Point to main_ui_.
(restore_ui_cleanup, switch_thru_all_uis_init)
(switch_thru_all_uis_cond, switch_thru_all_uis_next): New
functions.
* mi/mi-interp.c (as_mi_interp): New function.
(mi_interpreter_init): Don't install observers here.
(mi_on_sync_execution_done): Skip output if the top level
interpreter is not a MI.
(mi_new_thread, mi_thread_exit, mi_record_changed)
(mi_inferior_added, mi_inferior_appeared, mi_inferior_exit)
(mi_inferior_removed): Send output to all MI UIs.
(find_mi_interpreter, mi_interp_data): Delete.
(find_mi_interp): New function.
(mi_on_signal_received, mi_on_end_stepping_range)
(mi_on_signal_exited, mi_on_exited, mi_on_no_history): Send output
to all MI UIs.
(mi_on_normal_stop): Rename to ...
(mi_on_normal_stop_1): ... this.
(mi_on_normal_stop): Reimplement, sending output to all MI UIs.
(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): Send output to
all MI UIs.
(mi_on_resume): Rename to ...
(mi_on_resume_1): ... this. Don't handle infcalls here.
(mi_on_resume): Reimplement, sending output to all MI UIs.
(mi_solib_loaded, mi_solib_unloaded, mi_command_param_changed)
(mi_memory_changed): Send output to all MI UIs.
(report_initial_inferior): Install observers here.
* top.h (struct ui) <next>: New field.
(ui_list): Declare.
(struct switch_thru_all_uis): New.
(switch_thru_all_uis_init, switch_thru_all_uis_cond)
(switch_thru_all_uis_next): Declare.
(SWITCH_THRU_ALL_UIS): New macro.
* tui/tui-interp.c (tui_interp): Delete global.
(as_tui_interp): New function.
(tui_on_normal_stop, tui_on_signal_received)
(tui_on_end_stepping_range, tui_on_signal_exited, tui_on_exited)
(tui_on_no_history): Send output to all TUI UIs.
(tui_on_sync_execution_done, tui_on_command_error): Skip output if
the top level interpreter is not a TUI.
(tui_init): Don't set tui_interp or install observers here.
(_initialize_tui_interp): Install observers here.
2016-06-21 01:11:45 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-interp.c (cli_interp): Delete.
|
|
|
|
|
(as_cli_interp): New function.
|
|
|
|
|
(cli_on_normal_stop, cli_on_signal_received)
|
|
|
|
|
(cli_on_end_stepping_range, cli_on_signal_exited, cli_on_exited)
|
|
|
|
|
(cli_on_no_history): Send output to all CLI UIs.
|
|
|
|
|
(cli_on_sync_execution_done, cli_on_command_error): Skip output if
|
|
|
|
|
the top level interpreter is not a CLI.
|
|
|
|
|
(cli_interpreter_init): Don't set cli_interp or install observers
|
|
|
|
|
here.
|
|
|
|
|
(_initialize_cli_interp): Install observers here.
|
|
|
|
|
* event-top.c (main_ui_, ui_list): New globals.
|
|
|
|
|
(current_ui): Point to main_ui_.
|
|
|
|
|
(restore_ui_cleanup, switch_thru_all_uis_init)
|
|
|
|
|
(switch_thru_all_uis_cond, switch_thru_all_uis_next): New
|
|
|
|
|
functions.
|
|
|
|
|
* mi/mi-interp.c (as_mi_interp): New function.
|
|
|
|
|
(mi_interpreter_init): Don't install observers here.
|
|
|
|
|
(mi_on_sync_execution_done): Skip output if the top level
|
|
|
|
|
interpreter is not a MI.
|
|
|
|
|
(mi_new_thread, mi_thread_exit, mi_record_changed)
|
|
|
|
|
(mi_inferior_added, mi_inferior_appeared, mi_inferior_exit)
|
|
|
|
|
(mi_inferior_removed): Send output to all MI UIs.
|
|
|
|
|
(find_mi_interpreter, mi_interp_data): Delete.
|
|
|
|
|
(find_mi_interp): New function.
|
|
|
|
|
(mi_on_signal_received, mi_on_end_stepping_range)
|
|
|
|
|
(mi_on_signal_exited, mi_on_exited, mi_on_no_history): Send output
|
|
|
|
|
to all MI UIs.
|
|
|
|
|
(mi_on_normal_stop): Rename to ...
|
|
|
|
|
(mi_on_normal_stop_1): ... this.
|
|
|
|
|
(mi_on_normal_stop): Reimplement, sending output to all MI UIs.
|
|
|
|
|
(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): Send output to
|
|
|
|
|
all MI UIs.
|
|
|
|
|
(mi_on_resume): Rename to ...
|
|
|
|
|
(mi_on_resume_1): ... this. Don't handle infcalls here.
|
|
|
|
|
(mi_on_resume): Reimplement, sending output to all MI UIs.
|
|
|
|
|
(mi_solib_loaded, mi_solib_unloaded, mi_command_param_changed)
|
|
|
|
|
(mi_memory_changed): Send output to all MI UIs.
|
|
|
|
|
(report_initial_inferior): Install observers here.
|
|
|
|
|
* top.h (struct ui) <next>: New field.
|
|
|
|
|
(ui_list): Declare.
|
|
|
|
|
(struct switch_thru_all_uis): New.
|
|
|
|
|
(switch_thru_all_uis_init, switch_thru_all_uis_cond)
|
|
|
|
|
(switch_thru_all_uis_next): Declare.
|
|
|
|
|
(SWITCH_THRU_ALL_UIS): New macro.
|
|
|
|
|
* tui/tui-interp.c (tui_interp): Delete global.
|
|
|
|
|
(as_tui_interp): New function.
|
|
|
|
|
(tui_on_normal_stop, tui_on_signal_received)
|
|
|
|
|
(tui_on_end_stepping_range, tui_on_signal_exited, tui_on_exited)
|
|
|
|
|
(tui_on_no_history): Send output to all TUI UIs.
|
|
|
|
|
(tui_on_sync_execution_done, tui_on_command_error): Skip output if
|
|
|
|
|
the top level interpreter is not a TUI.
|
|
|
|
|
(tui_init): Don't set tui_interp or install observers here.
|
|
|
|
|
(_initialize_tui_interp): Install observers here.
|
|
|
|
|
|
Introduce interpreter factories
If every UI instance has its own set of interpreters, then the current
scheme of creating the interpreters at GDB initialization time no
longer works. We need to create them whenever a new UI instance is
created.
The scheme implemented here has each interpreter register a factory
callback that when called creates a new instance of a specific
interpreter type. Then, when some code in gdb looks up an interpreter
(always by name), if there's none yet, the factory method is called to
construct one.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* cli/cli-interp.c (cli_uiout): Delete, moved into ...
(struct cli_interp): ... this new structure.
(cli_on_normal_stop, cli_on_signal_received)
(cli_on_end_stepping_range, cli_on_signal_exited, cli_on_exited)
(cli_on_no_history): Use interp_ui_out.
(cli_interpreter_init): If top level, set the cli_interp global.
(cli_interpreter_init): Return the interp's data instead of NULL.
(cli_interpreter_resume, cli_interpreter_exec, cli_ui_out): Adjust
to cli_uiout being in the interpreter's data.
(cli_interp_procs): New, factored out from _initialize_cli_interp.
(cli_interp_factory): New function.
(_initialize_cli_interp): Call interp_factory_register.
* interps.c (get_interp_info): New, factored out from ...
(get_current_interp_info): ... this.
(interp_new): Add parameter 'data'. Store it.
(struct interp_factory): New function.
(interp_factory_p): New typedef. Define a VEC_P.
(interpreter_factories): New global.
(interp_factory_register): New function.
(interp_add): Add 'ui' parameter. Use get_interp_info and
interp_lookup_existing.
(interp_lookup): Rename to ...
(interp_lookup_existing): ... this. Add 'ui' parameter. Don't
check for NULL or empty name here.
(interp_lookup): Add 'ui' parameter and reimplement.
(interp_set_temp, interpreter_exec_cmd): Adjust.
(interpreter_completer): Complete on registered interpreter
factories instead of interpreters.
* interps.h (interp_factory_func): New typedef.
(interp_factory_register): Declare.
(interp_new, interp_add): Adjust.
(interp_lookup): Declare.
* main.c (captured_main): Adjust.
* mi/mi-interp.c (mi_cmd_interpreter_exec): Adjust.
(mi_interp_procs): New, factored out from
_initialize_mi_interp.
(mi_interp_factory): New function.
* python/python.c (execute_gdb_command): Adjust.
* tui/tui-interp.c (tui_init): If top level, set the tui_interp
global.
(tui_interp_procs): New.
(tui_interp_factory): New function.
(_initialize_tui_interp): Call interp_factory_register.
2016-06-21 01:11:45 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-interp.c (cli_uiout): Delete, moved into ...
|
|
|
|
|
(struct cli_interp): ... this new structure.
|
|
|
|
|
(cli_on_normal_stop, cli_on_signal_received)
|
|
|
|
|
(cli_on_end_stepping_range, cli_on_signal_exited, cli_on_exited)
|
|
|
|
|
(cli_on_no_history): Use interp_ui_out.
|
|
|
|
|
(cli_interpreter_init): If top level, set the cli_interp global.
|
|
|
|
|
(cli_interpreter_init): Return the interp's data instead of NULL.
|
|
|
|
|
(cli_interpreter_resume, cli_interpreter_exec, cli_ui_out): Adjust
|
|
|
|
|
to cli_uiout being in the interpreter's data.
|
|
|
|
|
(cli_interp_procs): New, factored out from _initialize_cli_interp.
|
|
|
|
|
(cli_interp_factory): New function.
|
|
|
|
|
(_initialize_cli_interp): Call interp_factory_register.
|
|
|
|
|
* interps.c (get_interp_info): New, factored out from ...
|
|
|
|
|
(get_current_interp_info): ... this.
|
|
|
|
|
(interp_new): Add parameter 'data'. Store it.
|
|
|
|
|
(struct interp_factory): New function.
|
|
|
|
|
(interp_factory_p): New typedef. Define a VEC_P.
|
|
|
|
|
(interpreter_factories): New global.
|
|
|
|
|
(interp_factory_register): New function.
|
|
|
|
|
(interp_add): Add 'ui' parameter. Use get_interp_info and
|
|
|
|
|
interp_lookup_existing.
|
|
|
|
|
(interp_lookup): Rename to ...
|
|
|
|
|
(interp_lookup_existing): ... this. Add 'ui' parameter. Don't
|
|
|
|
|
check for NULL or empty name here.
|
|
|
|
|
(interp_lookup): Add 'ui' parameter and reimplement.
|
|
|
|
|
(interp_set_temp, interpreter_exec_cmd): Adjust.
|
|
|
|
|
(interpreter_completer): Complete on registered interpreter
|
|
|
|
|
factories instead of interpreters.
|
|
|
|
|
* interps.h (interp_factory_func): New typedef.
|
|
|
|
|
(interp_factory_register): Declare.
|
|
|
|
|
(interp_new, interp_add): Adjust.
|
|
|
|
|
(interp_lookup): Declare.
|
|
|
|
|
* main.c (captured_main): Adjust.
|
|
|
|
|
* mi/mi-interp.c (mi_cmd_interpreter_exec): Adjust.
|
|
|
|
|
(mi_interp_procs): New, factored out from
|
|
|
|
|
_initialize_mi_interp.
|
|
|
|
|
(mi_interp_factory): New function.
|
|
|
|
|
* python/python.c (execute_gdb_command): Adjust.
|
|
|
|
|
* tui/tui-interp.c (tui_init): If top level, set the tui_interp
|
|
|
|
|
global.
|
|
|
|
|
(tui_interp_procs): New.
|
|
|
|
|
(tui_interp_factory): New function.
|
|
|
|
|
(_initialize_tui_interp): Call interp_factory_register.
|
|
|
|
|
|
Make the interpreters be per UI
Make each UI have its own interpreter list, top level interpreter,
current interpreter, etc. The "interpreter_async" global is not
really specific to an struct interp (it crosses interpreter-exec ...),
so I moved it to "struct ui" directly, while the other globals were
left hidden in interps.c, opaque to the rest of GDB.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* breakpoint.c (bpstat_do_actions_1): Access the current UI's
async field instead of the interpreter_async global.
* cli/cli-script.c (execute_user_command, while_command)
(if_command, script_from_file): Likewise.
* compile/compile.c: Include top.h instead of interps.h.
(compile_file_command, compile_code_command)
(compile_print_command): Access the current UI's async field
instead of the interpreter_async global.
* guile/guile.c: Include top.h instead of interps.h.
(guile_repl_command, guile_command, gdbscm_execute_gdb_command):
Access the current UI's async field instead of the
interpreter_async global.
* guile/scm-ports.c: Include top.h instead of interps.h.
(ioscm_with_output_to_port_worker): Access the current UI's async
field instead of the interpreter_async global.
* inf-loop.c (inferior_event_handler): Likewise.
* infcall.c (run_inferior_call): Likewise.
* infrun.c (reinstall_readline_callback_handler_cleanup)
(fetch_inferior_event): Likewise.
* interps.c (interpreter_async): Delete.
(struct ui_interp_info): New.
(get_current_interp_info): New function.
(interp_list, current_interpreter, top_level_interpreter_ptr):
Delete.
(interp_add, interp_set, interp_lookup, interp_ui_out)
(current_interp_set_logging, interp_set_temp)
(current_interp_named_p): Adjust to per-UI interpreters.
(command_interpreter): Delete.
(command_interp, current_interp_command_loop, interp_quiet_p)
(interp_exec, interpreter_exec_cmd, interpreter_completer)
(top_level_interpreter, top_level_interpreter_data): Adjust to
per-UI interpreters.
* interps.h (interpreter_async): Delete.
* main.c (captured_command_loop): Access the current UI's async
field instead of the interpreter_async global.
* python/python.c (python_interactive_command, python_command)
(execute_gdb_command): Likewise.
* top.c (maybe_wait_sync_command_done, execute_command_to_string):
Access the current UI's async field instead of the
interpreter_async global.
* top.h (struct tl_interp_info): Forward declare.
(struct ui) <interp_info, async>: New fields.
2016-06-21 01:11:45 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (bpstat_do_actions_1): Access the current UI's
|
|
|
|
|
async field instead of the interpreter_async global.
|
|
|
|
|
* cli/cli-script.c (execute_user_command, while_command)
|
|
|
|
|
(if_command, script_from_file): Likewise.
|
|
|
|
|
* compile/compile.c: Include top.h instead of interps.h.
|
|
|
|
|
(compile_file_command, compile_code_command)
|
|
|
|
|
(compile_print_command): Access the current UI's async field
|
|
|
|
|
instead of the interpreter_async global.
|
|
|
|
|
* guile/guile.c: Include top.h instead of interps.h.
|
|
|
|
|
(guile_repl_command, guile_command, gdbscm_execute_gdb_command):
|
|
|
|
|
Access the current UI's async field instead of the
|
|
|
|
|
interpreter_async global.
|
|
|
|
|
* guile/scm-ports.c: Include top.h instead of interps.h.
|
|
|
|
|
(ioscm_with_output_to_port_worker): Access the current UI's async
|
|
|
|
|
field instead of the interpreter_async global.
|
|
|
|
|
* inf-loop.c (inferior_event_handler): Likewise.
|
|
|
|
|
* infcall.c (run_inferior_call): Likewise.
|
|
|
|
|
* infrun.c (reinstall_readline_callback_handler_cleanup)
|
|
|
|
|
(fetch_inferior_event): Likewise.
|
|
|
|
|
* interps.c (interpreter_async): Delete.
|
|
|
|
|
(struct ui_interp_info): New.
|
|
|
|
|
(get_current_interp_info): New function.
|
|
|
|
|
(interp_list, current_interpreter, top_level_interpreter_ptr):
|
|
|
|
|
Delete.
|
|
|
|
|
(interp_add, interp_set, interp_lookup, interp_ui_out)
|
|
|
|
|
(current_interp_set_logging, interp_set_temp)
|
|
|
|
|
(current_interp_named_p): Adjust to per-UI interpreters.
|
|
|
|
|
(command_interpreter): Delete.
|
|
|
|
|
(command_interp, current_interp_command_loop, interp_quiet_p)
|
|
|
|
|
(interp_exec, interpreter_exec_cmd, interpreter_completer)
|
|
|
|
|
(top_level_interpreter, top_level_interpreter_data): Adjust to
|
|
|
|
|
per-UI interpreters.
|
|
|
|
|
* interps.h (interpreter_async): Delete.
|
|
|
|
|
* main.c (captured_command_loop): Access the current UI's async
|
|
|
|
|
field instead of the interpreter_async global.
|
|
|
|
|
* python/python.c (python_interactive_command, python_command)
|
|
|
|
|
(execute_gdb_command): Likewise.
|
|
|
|
|
* top.c (maybe_wait_sync_command_done, execute_command_to_string):
|
|
|
|
|
Access the current UI's async field instead of the
|
|
|
|
|
interpreter_async global.
|
|
|
|
|
* top.h (struct tl_interp_info): Forward declare.
|
|
|
|
|
(struct ui) <interp_info, async>: New fields.
|
|
|
|
|
|
Make gdb_stdout&co be per UI
We need to have these send output to the proper UI.
However, this patch still make them look like globals. Kind of like
__thread variables, if you will. Changing everything throughout to
write something like current_ui->gdb_stdout instead would be massive
overkill, IMNSHO.
This leaves gdb_stdtargin/stdtarg/stdtargerr global, but maybe that was a
mistake, I'm not sure -- IIRC, MI formats target I/O differently, so
if we have a separate MI channel, then I guess target output should go
there instead of to gdb's stdout. OTOH, maybe GDB should send that
instead to "set inferior-tty", instead of multiplexing it over MI. We
can always fix those later when it gets clearer where they should go.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* main.c (gdb_stdout, gdb_stderr, gdb_stdlog, gdb_stdin): Delete
globals.
(gen_ret_current_ui_field_ptr): New macro. Use it to generate
wrappers for gdb_stdout, gdb_stderr, gdb_stdlog and gdb_stdin.
* top.h (struct ui) <m_gdb_stdout, m_gdb_stdin, m_gdb_stderr,
m_gdb_stdlog>: New fields.
(current_ui_gdb_stdout_ptr, current_ui_gdb_stdin_ptr)
(current_ui_gdb_stderr_ptr, current_ui_gdb_stdlog_ptr): Declare.
(gdb_stdout, gdb_stdin, gdb_stderr, gdb_stdlog): Reimplement as
macros.
2016-06-21 01:11:44 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* main.c (gdb_stdout, gdb_stderr, gdb_stdlog, gdb_stdin): Delete
|
|
|
|
|
globals.
|
|
|
|
|
(gen_ret_current_ui_field_ptr): New macro. Use it to generate
|
|
|
|
|
wrappers for gdb_stdout, gdb_stderr, gdb_stdlog and gdb_stdin.
|
|
|
|
|
* top.h (struct ui) <m_gdb_stdout, m_gdb_stdin, m_gdb_stderr,
|
|
|
|
|
m_gdb_stdlog>: New fields.
|
|
|
|
|
(current_ui_gdb_stdout_ptr, current_ui_gdb_stdin_ptr)
|
|
|
|
|
(current_ui_gdb_stderr_ptr, current_ui_gdb_stdlog_ptr): Declare.
|
|
|
|
|
(gdb_stdout, gdb_stdin, gdb_stderr, gdb_stdlog): Reimplement as
|
|
|
|
|
macros.
|
|
|
|
|
|
Introduce "struct ui"
This is a step towards supporting multiple consoles/MIs, each on its
own stdio streams / terminal.
See intro comment in top.h.
(I've had trouble picking a name for this object. I've started out
with "struct console" originally. But then this is about MI as well,
and there's "interpreter-exec console", which is specifically about
the CLI...
So I changed to "struct terminal", but, then we have a terminal object
that works when the input is not a terminal as well ...
Then I sort of gave up and renamed it to "struct top_level". But it
then gets horribly confusing when we talk about the "top level
interpreter that's running on the current top level".
In the end, I realized we're already sort of calling this "ui", in
struct ui_out, struct ui_file, and a few coments here and there.)
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* event-top.c: Update readline-related comments.
(input_handler, call_readline): Delete globals.
(gdb_rl_callback_handler): Call the current UI's input_handler
method.
(change_line_handler): Adjust to set current UI's properties
instead of globals.
(current_ui_, current_ui): New globals.
(get_command_line_buffer): Rewrite to refer to the current UI.
(stdin_event_handler): Adjust to call the call_readline method of
the current UI.
(gdb_readline_no_editing_callback): Adjust to call the current UI's
input_handler method.
(gdb_setup_readline): Adjust to set current UI's properties
instead of globals.
* event-top.h (call_readline, input_handler): Delete declarations.
* mi/mi-interp.c (mi_interpreter_resume): Adjust to set current
UI's properties instead of globals.
* top.c (gdb_readline_wrapper_cleanup): Adjust to set current UI's
properties instead of globals.
(gdb_readline_wrapper): Adjust to call and set current UI's
methods instead of globals.
* top.h: Include buffer.h and event-loop.h.
(struct ui): New struct.
(current_ui): New declaration.
2016-06-21 01:11:44 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c: Update readline-related comments.
|
|
|
|
|
(input_handler, call_readline): Delete globals.
|
|
|
|
|
(gdb_rl_callback_handler): Call the current UI's input_handler
|
|
|
|
|
method.
|
|
|
|
|
(change_line_handler): Adjust to set current UI's properties
|
|
|
|
|
instead of globals.
|
|
|
|
|
(current_ui_, current_ui): New globals.
|
|
|
|
|
(get_command_line_buffer): Rewrite to refer to the current UI.
|
|
|
|
|
(stdin_event_handler): Adjust to call the call_readline method of
|
|
|
|
|
the current UI.
|
|
|
|
|
(gdb_readline_no_editing_callback): Adjust to call the current UI's
|
|
|
|
|
input_handler method.
|
|
|
|
|
(gdb_setup_readline): Adjust to set current UI's properties
|
|
|
|
|
instead of globals.
|
|
|
|
|
* event-top.h (call_readline, input_handler): Delete declarations.
|
|
|
|
|
* mi/mi-interp.c (mi_interpreter_resume): Adjust to set current
|
|
|
|
|
UI's properties instead of globals.
|
|
|
|
|
* top.c (gdb_readline_wrapper_cleanup): Adjust to set current UI's
|
|
|
|
|
properties instead of globals.
|
|
|
|
|
(gdb_readline_wrapper): Adjust to call and set current UI's
|
|
|
|
|
methods instead of globals.
|
|
|
|
|
* top.h: Include buffer.h and event-loop.h.
|
|
|
|
|
(struct ui): New struct.
|
|
|
|
|
(current_ui): New declaration.
|
|
|
|
|
|
[Ada catchpoints] Fix "warning: failed to get exception name: No definition of \"e.full_name\" in current context"
Looking at testsuite results, I noticed this warning in an MI test:
~"\nCatchpoint "
~"2, "
&"warning: failed to get exception name: No definition of \"e.full_name\" in current context.\n"
~"exception at 0x000000000040192d in foo () at /home/pedro/brno/pedro/gdb/mygit/src/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb:20\n"
~"20\t raise Constraint_Error; -- SPOT1\n"
*stopped,reason="breakpoint-hit",disp="keep",bkptno="2",exception-name="CONSTRAINT_ERROR",frame={addr="0x000000000040192d",func="foo",args=[],file="/home/pedro/brno/pedro/gdb/mygit/src/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb",fullname="/home/pedro/brno/pedro/gdb/mygit/src/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb",line="20"},thread-id="1",stopped-threads="all",core="5"
(gdb)
PASS: gdb.ada/mi_catch_ex.exp: continue until CE caught by all-exceptions catchpoint
The problem is that:
- MI prints the breakpoint hit twice: once on the MI stream;
another time on the console stream.
- After printing the Ada catchpoint hit, gdb selects a non-current
frame, from within the catchpoint's print_it routine.
So the second time the breakpoint is printed, the selected frame is no
longer the current frame, and then evaluating e.full_name in
ada_exception_name_addr fails.
This commit fixes the problem and enhances the gdb.ada/mi_catch_ex.exp
test to make sure the catchpoint hit is printed correctly on the
console stream too.
gdb/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* ada-lang.c (ada_exception_name_addr_1): Add comment.
(print_it_exception): Select the current frame.
gdb/testsuite/ChangeLog:
2016-06-21 Pedro Alves <palves@redhat.com>
* gdb.ada/mi_catch_ex.exp (continue_to_exception): New procedure.
(top level): Use it instead of mi_execute_to.
2016-06-21 01:11:43 +01:00
|
|
|
|
2016-06-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ada-lang.c (ada_exception_name_addr_1): Add comment.
|
|
|
|
|
(print_it_exception): Select the current frame.
|
|
|
|
|
|
2016-06-17 15:25:08 +08:00
|
|
|
|
2016-06-17 Yan-Ting Lin <currygt52@gmail.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (ALL_TARGET_OBS): Add nds32-tdep.o.
|
|
|
|
|
(HFILES_NO_SRCDIR): Add nds32-tdep.h.
|
|
|
|
|
(ALLDEPFILES): Add nds32-tdep.c.
|
|
|
|
|
* NEWS: Mention new NDS32 port.
|
|
|
|
|
* configure.tgt: Add NDS32.
|
|
|
|
|
* nds32-tdep.c: New file.
|
|
|
|
|
* nds32-tdep.h: New file.
|
|
|
|
|
* features/Makefile (XMLTOC): Add nds32.xml.
|
|
|
|
|
* features/nds32-core.xml: New file.
|
|
|
|
|
* features/nds32-fpu.xml: New file.
|
|
|
|
|
* features/nds32-system.xml: New file.
|
|
|
|
|
* features/nds32.c: New file (generated).
|
|
|
|
|
* features/nds32.xml: New file.
|
|
|
|
|
|
2016-06-11 13:10:48 -07:00
|
|
|
|
2016-06-14 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* v850-tdep.c (v850_use_struct_convention): Trim type length checks.
|
|
|
|
|
|
2016-06-11 08:15:09 -07:00
|
|
|
|
2016-06-14 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* tui/tui-stack.c (tui_show_frame_info): Fix type mismatch.
|
|
|
|
|
|
2016-06-11 07:26:09 -07:00
|
|
|
|
2016-06-14 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* rs6000-tdep.c (ppc_process_record_op31): Initialize ra.
|
|
|
|
|
|
2016-06-13 14:22:21 +01:00
|
|
|
|
2016-06-13 Nick Clifton <nickc@redhat.com>
|
|
|
|
|
|
|
|
|
|
* gdbtypes.c (replace_type): Fix assertion.
|
|
|
|
|
|
Constify arch_type and friends
While working on the Rust support, I happened to notice that arch_type
and related functions take "char *" arguments, where "const char *"
would be more correct. This patch fixes this oversight. Tested by
rebuilding.
2016-06-10 Tom Tromey <tom@tromey.com>
* gdbtypes.c (arch_type, arch_integer_type, arch_character_type)
(arch_boolean_type, arch_float_type, arch_complex_type)
(arch_flags_type, append_flags_type_field)
(append_flags_type_flag, arch_composite_type)
(append_composite_type_field_raw)
(append_composite_type_field_aligned)
(append_composite_type_field): Make "name" parameter const.
* gdbtypes.h (arch_type, arch_integer_type, arch_character_type)
(arch_boolean_type, arch_float_type, arch_complex_type)
(append_composite_type_field, append_composite_type_field_aligned)
(append_composite_type_field_raw, arch_flags_type)
(append_flags_type_field, append_flags_type_flag): Constify.
2016-06-06 08:06:15 -06:00
|
|
|
|
2016-06-10 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* gdbtypes.c (arch_type, arch_integer_type, arch_character_type)
|
|
|
|
|
(arch_boolean_type, arch_float_type, arch_complex_type)
|
|
|
|
|
(arch_flags_type, append_flags_type_field)
|
|
|
|
|
(append_flags_type_flag, arch_composite_type)
|
|
|
|
|
(append_composite_type_field_raw)
|
|
|
|
|
(append_composite_type_field_aligned)
|
|
|
|
|
(append_composite_type_field): Make "name" parameter const.
|
|
|
|
|
* gdbtypes.h (arch_type, arch_integer_type, arch_character_type)
|
|
|
|
|
(arch_boolean_type, arch_float_type, arch_complex_type)
|
|
|
|
|
(append_composite_type_field, append_composite_type_field_aligned)
|
|
|
|
|
(append_composite_type_field_raw, arch_flags_type)
|
|
|
|
|
(append_flags_type_field, append_flags_type_flag): Constify.
|
|
|
|
|
|
2016-05-18 17:22:30 -06:00
|
|
|
|
2016-06-10 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR rust/20110:
|
|
|
|
|
* rust-exp.y (lex_number): Don't truncate large numbers to i32.
|
|
|
|
|
|
2016-06-04 10:21:01 -06:00
|
|
|
|
2016-06-10 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (COMMON_OBS): Remove rust-exp.o.
|
|
|
|
|
(YYFILES): Add rust-exp.c.
|
|
|
|
|
(YYOBJ): Add rust-exp.o.
|
|
|
|
|
(local-maintainer-clean): Remove rust-exp.c.
|
|
|
|
|
|
Add negative repeat count to 'x' command
This change adds support for specifying a negative repeat count to
all the formats of the 'x' command to examine memory backward.
A new testcase 'examine-backward' is added to cover this new feature.
Here's the example output from the new feature:
<format 'i'>
(gdb) bt
#0 Func1 (n=42, p=0x40432e "hogehoge") at main.cpp:5
#1 0x00000000004041fa in main (argc=1, argv=0x7fffffffdff8) at main.cpp:19
(gdb) x/-4i 0x4041fa
0x4041e5 <main(int, char**)+11>: mov %rsi,-0x10(%rbp)
0x4041e9 <main(int, char**)+15>: lea 0x13e(%rip),%rsi
0x4041f0 <main(int, char**)+22>: mov $0x2a,%edi
0x4041f5 <main(int, char**)+27>: callq 0x404147
<format 'x'>
(gdb) x/-4xw 0x404200
0x4041f0 <main(int, char**)+22>: 0x00002abf 0xff4de800 0x76e8ffff 0xb8ffffff
(gdb) x/-4
0x4041e0 <main(int, char**)+6>: 0x7d8910ec 0x758948fc 0x358d48f0 0x0000013e
gdb/ChangeLog:
* NEWS: Mention that GDB now supports a negative repeat count in
the 'x' command.
* printcmd.c (decode_format): Allow '-' in the parameter
"string_ptr" to accept a negative repeat count.
(find_instruction_backward): New function.
(read_memory_backward): New function.
(integer_is_zero): New function.
(find_string_backward): New function.
(do_examine): Use new functions to examine memory backward.
(_initialize_printcmd): Mention that 'x' command supports a negative
repeat count.
gdb/doc/ChangeLog:
* gdb.texinfo (Examining Memory): Document negative repeat
count in the 'x' command.
gdb/testsuite/ChangeLog:
* gdb.base/examine-backward.c: New file.
* gdb.base/examine-backward.exp: New file.
2016-06-09 22:47:42 -07:00
|
|
|
|
2016-06-09 Toshihito Kikuchi <k.toshihito@yahoo.de>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention that GDB now supports a negative repeat count in
|
|
|
|
|
the 'x' command.
|
|
|
|
|
* printcmd.c (decode_format): Allow '-' in the parameter
|
|
|
|
|
"string_ptr" to accept a negative repeat count.
|
|
|
|
|
(find_instruction_backward): New function.
|
|
|
|
|
(read_memory_backward): New function.
|
|
|
|
|
(integer_is_zero): New function.
|
|
|
|
|
(find_string_backward): New function.
|
|
|
|
|
(do_examine): Use new functions to examine memory backward.
|
|
|
|
|
(_initialize_printcmd): Mention that 'x' command supports a negative
|
|
|
|
|
repeat count.
|
|
|
|
|
|
2016-06-09 21:59:04 -07:00
|
|
|
|
2016-06-09 Toshihito Kikuchi <k.toshihito@yahoo.de>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Write After Approval): Add Toshihito Kikuchi.
|
|
|
|
|
|
2016-06-09 10:43:01 -06:00
|
|
|
|
2016-06-09 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/19819:
|
|
|
|
|
* python/py-xmethods.c (invoke_method_name)
|
|
|
|
|
(py_get_result_type_method_name, py_invoke_method_name): Remove.
|
|
|
|
|
(gdbpy_initialize_xmethods): Don't initialize
|
|
|
|
|
py_invoke_method_name, py_get_result_type_method_name.
|
|
|
|
|
|
2016-06-07 10:02:42 -04:00
|
|
|
|
2016-06-07 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* mi/mi-interp.c (mi_record_changed): Add missing braces.
|
|
|
|
|
|
2016-06-07 13:36:05 +02:00
|
|
|
|
2016-06-07 Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
|
|
|
|
|
* findvar.c (follow_static_link): Check for valid pointer.
|
|
|
|
|
|
Add method/format information to =record-started
Eclipse CDT now supports enabling execution recording using two methods
(full and btrace) and both formats for btrace (bts and pt). In the
event that recording is enabled behind the back of the GUI (by the user
on the command line, or a script), we need to know which method/format
are being used, so it can be correctly reflected in the interface. This
patch adds this information to the =record-started async record.
Before:
=record-started,thread-group="i1"
After:
=record-started,thread-group="i1",method="btrace",format="bts"
=record-started,thread-group="i1",method="btrace",format="pt"
=record-started,thread-group="i1",method="full"
The "format" field is only present when the current method supports
multiple formats (only the btrace method as of now).
gdb/ChangeLog:
* NEWS: Mention the new fields in =record-started.
* common/btrace-common.h (btrace_format_short_string): New function
declaration.
* common/btrace-common.c (btrace_format_short_string): New
function.
* mi/mi-interp.c (mi_record_changed): Output method and format
fields in the =record-started record.
* record-btrace.c (record_btrace_open): Adapt record_changed
notification.
* record-full.c (record_full_open): Likewise.
* record.c (cmd_record_stop): Likewise.
gdb/doc/ChangeLog:
* gdb.texinfo (GDB/MI Async Records): Document method and
format fields in =record-started.
* observer.texi (record_changed): Add method and format
parameters.
gdb/testsuite/ChangeLog:
* gdb.mi/mi-record-changed.exp: Adjust =record-started output
matching.
2016-05-30 17:29:39 -04:00
|
|
|
|
2016-06-06 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention the new fields in =record-started.
|
|
|
|
|
* common/btrace-common.h (btrace_format_short_string): New function
|
|
|
|
|
declaration.
|
|
|
|
|
* common/btrace-common.c (btrace_format_short_string): New
|
|
|
|
|
function.
|
|
|
|
|
* mi/mi-interp.c (mi_record_changed): Output method and format
|
|
|
|
|
fields in the =record-started record.
|
|
|
|
|
* record-btrace.c (record_btrace_open): Adapt record_changed
|
|
|
|
|
notification.
|
|
|
|
|
* record-full.c (record_full_open): Likewise.
|
|
|
|
|
* record.c (cmd_record_stop): Likewise.
|
|
|
|
|
|
2016-06-02 13:34:10 +00:00
|
|
|
|
2016-06-02 Jon Turney <jon.turney@dronecode.org.uk>
|
|
|
|
|
|
|
|
|
|
* windows-nat.c (handle_output_debug_string): Return type of
|
|
|
|
|
gdb_signal_from_host() is gdb_signal, not an int.
|
|
|
|
|
(windows_get_exec_module_filename): Add pointer casts for C++.
|
|
|
|
|
|
2015-09-19 17:45:47 -06:00
|
|
|
|
2016-06-02 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/18984:
|
|
|
|
|
* python/python.c (gdbpy_solib_name): Use GDB_PY_LLU_ARG.
|
|
|
|
|
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 16:34:49 +01:00
|
|
|
|
2016-06-01 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
|
|
|
|
|
(remote_fio_osa)
|
|
|
|
|
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
|
|
|
|
|
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
|
|
|
|
|
Delete.
|
|
|
|
|
(remote_fileio_o_quit_handler): New global.
|
|
|
|
|
(remote_fileio_quit_handler): New function.
|
|
|
|
|
(remote_fileio_reply): Check the quit flag instead of the custom
|
|
|
|
|
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
|
|
|
|
|
of changing the SIGINT handler.
|
|
|
|
|
(do_remote_fileio_request): Override the quit handler instead of
|
|
|
|
|
changing the SIGINT handler.
|
|
|
|
|
|
2016-06-01 11:44:08 +01:00
|
|
|
|
2016-06-01 Nick Clifton <nickc@redhat.com>
|
|
|
|
|
|
|
|
|
|
* common/common-utils.c (xmalloc_failed): New function. Provided
|
|
|
|
|
so that the version in libiberty is not linked in.
|
|
|
|
|
|
2016-05-31 09:03:15 +02:00
|
|
|
|
2016-06-01 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* infcmd.c (skip_finish_frames): New.
|
|
|
|
|
(finish_command): Call skip_finish_frames.
|
|
|
|
|
|
Wake up interruptible_select in remote_fileio ctrl-c handler
As reported in PR 19998, after type ctrl-c, GDB hang there and does
not send interrupt. It causes a fail in gdb.base/interrupt.exp.
All targets support remote fileio should be affected.
When we type ctrc-c, SIGINT is handled by remote_fileio_sig_set,
as shown below,
#0 remote_fileio_sig_set (sigint_func=0x4495d0 <remote_fileio_ctrl_c_signal_handler(int)>) at /home/yao/SourceCode/gnu/gdb/git/gdb/remote-fileio.c:325
#1 0x00000000004495de in remote_fileio_ctrl_c_signal_handler (signo=<optimised out>) at /home/yao/SourceCode/gnu/gdb/git/gdb/remote-fileio.c:349
#2 <signal handler called>
#3 0x00007ffff647ed83 in __select_nocancel () at ../sysdeps/unix/syscall-template.S:81
#4 0x00000000005530ce in interruptible_select (n=10, readfds=readfds@entry=0x7fffffffd730, writefds=writefds@entry=0x0, exceptfds=exceptfds@entry=0x0,
timeout=timeout@entry=0x0) at /home/yao/SourceCode/gnu/gdb/git/gdb/event-top.c:1017
#5 0x000000000061ab20 in stdio_file_read (file=<optimised out>, buf=0x12d02e0 "\n\022-\001", length_buf=16383)
at /home/yao/SourceCode/gnu/gdb/git/gdb/ui-file.c:577
#6 0x000000000044a4dc in remote_fileio_func_read (buf=0x12c0360 "") at /home/yao/SourceCode/gnu/gdb/git/gdb/remote-fileio.c:583
#7 0x0000000000449598 in do_remote_fileio_request (uiout=<optimised out>, buf_arg=buf_arg@entry=0x12c0340)
at /home/yao/SourceCode/gnu/gdb/git/gdb/remote-fileio.c:1179
we don't set quit_serial_event,
do
{
res = gdb_select (n, readfds, writefds, exceptfds, timeout);
}
while (res == -1 && errno == EINTR);
if (res == 1 && FD_ISSET (fd, readfds))
{
errno = EINTR;
return -1;
}
return res;
we can't go out of the loop above, and that is why GDB can't send
interrupt.
Recently, we stop throwing exception from SIGINT handler
(remote_fileio_ctrl_c_signal_handler)
https://sourceware.org/ml/gdb-patches/2016-03/msg00372.html, which
is correct, because gdb_select is interruptible. However, in the
same patch series, we add interruptible_select later as a wrapper
to gdb_select, https://sourceware.org/ml/gdb-patches/2016-03/msg00375.html
and it is not interruptible (because of the loop in it) unless
select/poll-able file descriptors are marked.
This fix in this patch is to call quit_serial_event_set, so that we can
go out of the loop above, return -1 and set errno to EINTR.
2016-06-01 Yao Qi <yao.qi@linaro.org>
PR remote/19998
* remote-fileio.c (remote_fileio_ctrl_c_signal_handler): Call
quit_serial_event_set.
2016-06-01 09:33:40 +01:00
|
|
|
|
2016-06-01 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
PR remote/19998
|
|
|
|
|
* remote-fileio.c (remote_fileio_ctrl_c_signal_handler): Call
|
|
|
|
|
quit_serial_event_set.
|
|
|
|
|
|
2016-05-31 17:49:49 -07:00
|
|
|
|
2016-06-01 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
GDB 7.11.1 released.
|
|
|
|
|
|
[PR gdb/19893] Fix handling of synthetic C++ references
https://sourceware.org/bugzilla/show_bug.cgi?id=19893
I've traced the main source of the problem to pieced_value_funcs.coerce_ref not being
implemented. Since gdb always assumes references are implemented as pointers, this
causes it to think that it's dealing with a NULL pointer, thus breaking any operations
involving synthetic references.
What I did here was implementing pieced_value_funcs.coerce_ref using some of the synthetic
pointer handling code from indirect_pieced_value, as Pedro suggested. I also made a few
adjustments to the reference printing code so that it correctly shows either the address
of the referenced value or (if it's non-addressable) the "<synthetic pointer>" string.
I also wrote some unit tests based on Dwarf::assemble; these took a while to make
because in most cases I needed a synthetic reference to a physical variable. Additionally,
I started working on a unit test for classes that have a vtable, but ran into a few issues
so that'll probably go in a future patch. One thing that should definitely be fixed is that
proc function_range (called for MACRO_AT_func) will always try to compile/link using gcc
with the default options instead of g++, thus breaking C++ compilations that require e.g. libstdc++.
gdb/ChangeLog:
* dwarf2loc.c (coerce_pieced_ref, indirect_synthetic_pointer,
fetch_const_value_from_synthetic_pointer): New functions.
(indirect_pieced_value): Move lower half to indirect_synthetic_pointer.
(pieced_value_funcs): Implement coerce_ref.
* valops.c (value_addr): Call coerce_ref for synthetic references.
* valprint.c (valprint_check_validity): Return true for synthetic
references. Also, don't show "<synthetic pointer>" if they reference
addressable values.
(generic_val_print_ref): Handle synthetic references. Also move some
code to print_ref_address.
(print_ref_address, get_value_addr_contents): New functions.
gdb/testsuite/ChangeLog:
* gdb.dwarf2/implref.exp: Rename to...
* gdb.dwarf2/implref-const.exp: ...this. Also add more test statements.
* gdb.dwarf2/implref-array.c: New file.
* gdb.dwarf2/implref-array.exp: Likewise.
* gdb.dwarf2/implref-global.c: Likewise.
* gdb.dwarf2/implref-global.exp: Likewise.
* gdb.dwarf2/implref-struct.c: Likewise.
* gdb.dwarf2/implref-struct.exp: Likewise.
2016-05-31 15:54:01 -03:00
|
|
|
|
2016-05-31 Martin Galvan <martin.galvan@tallertechnologies.com>
|
|
|
|
|
|
|
|
|
|
PR c++/19893
|
|
|
|
|
* dwarf2loc.c (coerce_pieced_ref, indirect_synthetic_pointer,
|
|
|
|
|
fetch_const_value_from_synthetic_pointer): New functions.
|
|
|
|
|
(indirect_pieced_value): Move lower half to indirect_synthetic_pointer.
|
|
|
|
|
(pieced_value_funcs): Implement coerce_ref.
|
|
|
|
|
* valops.c (value_addr): Call coerce_ref for synthetic references.
|
|
|
|
|
* valprint.c (valprint_check_validity): Return true for synthetic
|
|
|
|
|
references. Also, don't show "<synthetic pointer>" if they reference
|
|
|
|
|
addressable values.
|
|
|
|
|
(generic_val_print_ref): Handle synthetic references. Also move some
|
|
|
|
|
code to print_ref_address.
|
|
|
|
|
(print_ref_address, get_value_addr_contents): New functions.
|
|
|
|
|
|
2016-05-30 14:14:43 +02:00
|
|
|
|
2016-05-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR c++/15231
|
|
|
|
|
* dwarf2read.c (enum pc_bounds_kind): Add PC_BOUNDS_INVALID.
|
|
|
|
|
(process_psymtab_comp_unit_reader, read_func_scope): Adjust callers.
|
|
|
|
|
(read_lexical_block_scope): Import DIEs from bare DW_TAG_lexical_block.
|
|
|
|
|
(read_call_site_scope): Adjust callers.
|
|
|
|
|
(dwarf2_get_pc_bounds): Implement pc_bounds_invalid.
|
|
|
|
|
(dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds): Adjust callers.
|
|
|
|
|
|
2016-05-30 14:11:43 +02:00
|
|
|
|
2016-05-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
Code cleanup: dwarf2_get_pc_bounds: -1/0/+1 -> enum
|
|
|
|
|
* dwarf2read.c (enum pc_bounds_kind) New.
|
|
|
|
|
(dwarf2_get_pc_bounds): Use it in the declaration.
|
|
|
|
|
(process_psymtab_comp_unit_reader): Adjust caller. Rename has_pc_info
|
|
|
|
|
to cu_bounds_kind.
|
|
|
|
|
(read_func_scope, read_lexical_block_scope, read_call_site_scope):
|
|
|
|
|
Adjust callers.
|
|
|
|
|
(dwarf2_get_pc_bounds): Use enum pc_bounds_kind in the definition.
|
|
|
|
|
(dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds): Adjust callers.
|
|
|
|
|
|
2016-05-29 20:45:42 +02:00
|
|
|
|
2016-05-29 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS (QCatchSyscalls): Remove the parameter. Include ...
|
|
|
|
|
(QCatchSyscalls:1 in qSupported) ... this separate entry which got
|
|
|
|
|
deleted.
|
|
|
|
|
|
2016-05-29 18:40:32 +02:00
|
|
|
|
2016-05-29 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS (N stop reply): Remove empty line.
|
|
|
|
|
|
Return void from linker callbacks
The ldmain.c implementation of these linker callback functions always
return true, so any code handling a false return is dead. What's
more, some of the bfd backends abort if ever a false return is seen,
and there seems to be some confusion in gdb's compile-object-load.c.
The return value was never meant to be "oh yes, a multiple_definition
error occurred", but rather "out of memory or other catastrophic
failure".
This patch removes the status return on the callbacks that always
return true. I kept the return status for "notice" because that one
does happen to need to return "out of memory".
include/
* bfdlink.h (struct bfd_link_callbacks): Update comments.
Return void from multiple_definition, multiple_common,
add_to_set, constructor, warning, undefined_symbol,
reloc_overflow, reloc_dangerous and unattached_reloc.
bfd/
* aoutx.h: Adjust linker callback calls throughout file,
removing dead code.
* bout.c: Likewise.
* coff-alpha.c: Likewise.
* coff-arm.c: Likewise.
* coff-h8300.c: Likewise.
* coff-h8500.c: Likewise.
* coff-i960.c: Likewise.
* coff-mcore.c: Likewise.
* coff-mips.c: Likewise.
* coff-ppc.c: Likewise.
* coff-rs6000.c: Likewise.
* coff-sh.c: Likewise.
* coff-tic80.c: Likewise.
* coff-w65.c: Likewise.
* coff-z80.c: Likewise.
* coff-z8k.c: Likewise.
* coff64-rs6000.c: Likewise.
* cofflink.c: Likewise.
* ecoff.c: Likewise.
* elf-bfd.h: Likewise.
* elf-m10200.c: Likewise.
* elf-m10300.c: Likewise.
* elf32-arc.c: Likewise.
* elf32-arm.c: Likewise.
* elf32-avr.c: Likewise.
* elf32-bfin.c: Likewise.
* elf32-cr16.c: Likewise.
* elf32-cr16c.c: Likewise.
* elf32-cris.c: Likewise.
* elf32-crx.c: Likewise.
* elf32-d10v.c: Likewise.
* elf32-epiphany.c: Likewise.
* elf32-fr30.c: Likewise.
* elf32-frv.c: Likewise.
* elf32-ft32.c: Likewise.
* elf32-h8300.c: Likewise.
* elf32-hppa.c: Likewise.
* elf32-i370.c: Likewise.
* elf32-i386.c: Likewise.
* elf32-i860.c: Likewise.
* elf32-ip2k.c: Likewise.
* elf32-iq2000.c: Likewise.
* elf32-lm32.c: Likewise.
* elf32-m32c.c: Likewise.
* elf32-m32r.c: Likewise.
* elf32-m68hc1x.c: Likewise.
* elf32-m68k.c: Likewise.
* elf32-mep.c: Likewise.
* elf32-metag.c: Likewise.
* elf32-microblaze.c: Likewise.
* elf32-moxie.c: Likewise.
* elf32-msp430.c: Likewise.
* elf32-mt.c: Likewise.
* elf32-nds32.c: Likewise.
* elf32-nios2.c: Likewise.
* elf32-or1k.c: Likewise.
* elf32-ppc.c: Likewise.
* elf32-s390.c: Likewise.
* elf32-score.c: Likewise.
* elf32-score7.c: Likewise.
* elf32-sh.c: Likewise.
* elf32-sh64.c: Likewise.
* elf32-spu.c: Likewise.
* elf32-tic6x.c: Likewise.
* elf32-tilepro.c: Likewise.
* elf32-v850.c: Likewise.
* elf32-vax.c: Likewise.
* elf32-visium.c: Likewise.
* elf32-xstormy16.c: Likewise.
* elf32-xtensa.c: Likewise.
* elf64-alpha.c: Likewise.
* elf64-hppa.c: Likewise.
* elf64-ia64-vms.c: Likewise.
* elf64-mmix.c: Likewise.
* elf64-ppc.c: Likewise.
* elf64-s390.c: Likewise.
* elf64-sh64.c: Likewise.
* elf64-x86-64.c: Likewise.
* elflink.c: Likewise.
* elfnn-aarch64.c: Likewise.
* elfnn-ia64.c: Likewise.
* elfxx-mips.c: Likewise.
* elfxx-sparc.c: Likewise.
* elfxx-tilegx.c: Likewise.
* linker.c: Likewise.
* pdp11.c: Likewise.
* pe-mips.c: Likewise.
* reloc.c: Likewise.
* reloc16.c: Likewise.
* simple.c: Likewise.
* vms-alpha.c: Likewise.
* xcofflink.c: Likewise.
* elf32-rl78.c (get_symbol_value, get_romstart, get_ramstart): Delete
status param. Adjust calls to these and linker callbacks throughout.
* elf32-rx.c: (get_symbol_value, get_gp, get_romstart,
get_ramstart): Delete status param. Adjust calls to these and
linker callbacks throughout.
ld/
* ldmain.c (multiple_definition, multiple_common, add_to_set,
constructor_callback, warning_callback, undefined_symbol,
reloc_overflow, reloc_dangerous, unattached_reloc): Return void.
* emultempl/elf32.em: Adjust callback calls.
gdb/
* compile/compile-object-load.c (link_callbacks_multiple_definition,
link_callbacks_warning, link_callbacks_undefined_symbol,
link_callbacks_undefined_symbol, link_callbacks_reloc_overflow,
link_callbacks_reloc_dangerous,
link_callbacks_unattached_reloc): Return void.
2016-05-27 17:20:55 +09:30
|
|
|
|
2016-05-28 Alan Modra <amodra@gmail.com>
|
|
|
|
|
|
|
|
|
|
* compile/compile-object-load.c (link_callbacks_multiple_definition,
|
|
|
|
|
link_callbacks_warning, link_callbacks_undefined_symbol,
|
|
|
|
|
link_callbacks_undefined_symbol, link_callbacks_reloc_overflow,
|
|
|
|
|
link_callbacks_reloc_dangerous,
|
|
|
|
|
link_callbacks_unattached_reloc): Return void.
|
|
|
|
|
|
2016-05-24 16:53:58 +01:00
|
|
|
|
2016-05-27 Andrew Burgess <andrew.burgess@embecosm.com>
|
|
|
|
|
|
|
|
|
|
* opencl-lang.c (evaluate_subexp_opencl): If
|
|
|
|
|
EVAL_AVOID_SIDE_EFFECTS mode, forward the VALUE_LVAL attribute to
|
|
|
|
|
the returned value in the STRUCTOP_STRUCT case.
|
|
|
|
|
|
2016-05-24 16:17:52 +01:00
|
|
|
|
2016-05-27 Andrew Burgess <andrew.burgess@embecosm.com>
|
|
|
|
|
|
|
|
|
|
* eval.c (evaluate_subexp_standard): If EVAL_AVOID_SIDE_EFFECTS
|
|
|
|
|
mode, forward the VALUE_LVAL attribute to the returned value in
|
|
|
|
|
the STRUCTOP_PTR case.
|
|
|
|
|
|
2016-05-25 07:54:44 -06:00
|
|
|
|
2016-05-25 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* python/py-value.c (value_object_as_number): Use correct spelling
|
|
|
|
|
of HAVE_LIBPYTHON2_4.
|
|
|
|
|
|
2016-05-25 08:47:18 +02:00
|
|
|
|
2016-05-25 Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
|
|
|
|
|
* f-typeprint.c (f_type_print_base): Replace 0 by show.
|
|
|
|
|
|
2016-05-25 08:47:17 +02:00
|
|
|
|
2016-05-25 Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
|
|
|
|
|
* f-typeprint.c (f_type_print_base): Decrease show by one.
|
|
|
|
|
|
2016-05-25 08:47:17 +02:00
|
|
|
|
2016-05-25 Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
|
|
|
|
|
* f-typeprint.c (f_type_print_base): Don't print fields when show < 0.
|
|
|
|
|
|
2016-05-25 08:47:16 +02:00
|
|
|
|
2016-05-25 Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
|
|
|
|
|
* f-typeprint.c (f_type_print_base): Take print level into account.
|
|
|
|
|
|
2014-09-13 22:24:50 -06:00
|
|
|
|
2016-05-24 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/17386:
|
|
|
|
|
* python/py-value.c (value_object_as_number): Add
|
|
|
|
|
nb_inplace_floor_divide, nb_inplace_true_divide, nb_index.
|
|
|
|
|
|
2016-05-23 10:58:51 -06:00
|
|
|
|
2016-05-24 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* python/py-value.c (value_object_as_number): Add
|
|
|
|
|
nb_inplace_divide for Python 2.
|
|
|
|
|
|
2016-05-18 21:41:28 -06:00
|
|
|
|
2016-05-23 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/17981:
|
|
|
|
|
* python/py-breakpoint.c (gdbpy_breakpoints): Return a new tuple
|
|
|
|
|
when there are no breakpoints.
|
|
|
|
|
|
Fix PR gdb/19828: gdb -p <process from a container>: internal error
When GDB attaches to a process, it looks at the /proc/PID/task/ dir
for all clone threads of that process, and attaches to each of them.
Usually, if there is more than one clone thread, it means the program
is multi threaded and linked with pthreads. Thus when GDB soon after
attaching finds and loads a libthread_db matching the process, it'll
add a thread to the thread list for each of the initially found
lower-level LWPs.
If, however, GDB fails to find/load a matching libthread_db, nothing
is adding the LWPs to the thread list. And because of that, "detach"
hits an internal error:
(gdb) PASS: gdb.threads/clone-attach-detach.exp: fg attach 1: attach
info threads
Id Target Id Frame
* 1 LWP 6891 "clone-attach-de" 0x00007f87e5fd0790 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:84
(gdb) FAIL: gdb.threads/clone-attach-detach.exp: fg attach 1: info threads shows two LWPs
detach
.../src/gdb/thread.c:1010: internal-error: is_executing: Assertion `tp' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n)
FAIL: gdb.threads/clone-attach-detach.exp: fg attach 1: detach (GDB internal error)
From here:
...
#8 0x00000000007ba7cc in internal_error (file=0x98ea68 ".../src/gdb/thread.c", line=1010, fmt=0x98ea30 "%s: Assertion `%s' failed.")
at .../src/gdb/common/errors.c:55
#9 0x000000000064bb83 in is_executing (ptid=...) at .../src/gdb/thread.c:1010
#10 0x00000000004c23bb in get_pending_status (lp=0x12c5cc0, status=0x7fffffffdc0c) at .../src/gdb/linux-nat.c:1235
#11 0x00000000004c2738 in detach_callback (lp=0x12c5cc0, data=0x0) at .../src/gdb/linux-nat.c:1317
#12 0x00000000004c1a2a in iterate_over_lwps (filter=..., callback=0x4c2599 <detach_callback>, data=0x0) at .../src/gdb/linux-nat.c:899
#13 0x00000000004c295c in linux_nat_detach (ops=0xe7bd30, args=0x0, from_tty=1) at .../src/gdb/linux-nat.c:1358
#14 0x000000000068284d in delegate_detach (self=0xe7bd30, arg1=0x0, arg2=1) at .../src/gdb/target-delegates.c:34
#15 0x0000000000694141 in target_detach (args=0x0, from_tty=1) at .../src/gdb/target.c:2241
#16 0x0000000000630582 in detach_command (args=0x0, from_tty=1) at .../src/gdb/infcmd.c:2975
...
Tested on x86-64 Fedora 23. Also confirmed the test passes against
gdbserver with "maint set target-non-stop".
gdb/ChangeLog:
2016-05-24 Pedro Alves <palves@redhat.com>
PR gdb/19828
* linux-nat.c (attach_proc_task_lwp_callback): Mark the lwp
resumed, and add the thread to GDB's thread list.
testsuite/ChangeLog:
2016-05-24 Pedro Alves <palves@redhat.com>
PR gdb/19828
* gdb.threads/clone-attach-detach.c: New file.
* gdb.threads/clone-attach-detach.exp: New file.
2016-05-24 14:47:57 +01:00
|
|
|
|
2016-05-24 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19828
|
|
|
|
|
* linux-nat.c (attach_proc_task_lwp_callback): Mark the lwp
|
|
|
|
|
resumed, and add the thread to GDB's thread list.
|
|
|
|
|
|
2016-05-24 14:47:57 +01:00
|
|
|
|
2016-05-24 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19828
|
|
|
|
|
* linux-nat.c (get_pending_status): If the thread reported the
|
|
|
|
|
event to the core and it's pending, use the pending status signal
|
|
|
|
|
number.
|
|
|
|
|
|
[Linux] Optimize PID -> struct lwp_info lookup
Hacking the gdb.threads/attach-many-short-lived-threads.exp test to
spawn thousands of threads instead of dozens, and running gdb under
perf, I saw that GDB was spending most of the time in find_lwp_pid:
- captured_main
- 93.61% catch_command_errors
- 87.41% attach_command
- 87.40% linux_nat_attach
- 87.40% linux_proc_attach_tgid_threads
- 82.38% attach_proc_task_lwp_callback
- 81.01% find_lwp_pid
5.30% ptid_get_lwp
+ 0.10% ptid_lwp_p
+ 0.64% add_thread
+ 0.26% set_running
+ 0.24% set_executing
0.12% ptid_get_lwp
+ 0.01% ptrace
+ 0.01% add_lwp
attach_proc_task_lwp_callback is called once for each LWP that we
attach to, found by listing the /proc/PID/task/ directory. In turn,
attach_proc_task_lwp_callback calls find_lwp_pid to check whether the
LWP we're about to try to attach to is already known. Since
find_lwp_pid does a linear walk over the whole LWP list, this becomes
quadratic. We do the /proc/PID/task/ listing until we get two
iterations in a row where we found no new threads. So the second and
following times we walk the /proc/PID/task/ dir, we're going to take
an even worse find_lwp_pid hit.
Fix this by adding a hash table keyed by LWP PID, for fast lookup.
The linked list embedded in the LWP structure itself is kept, and made
a double-linked list, so that removals from that list are O(1). An
earlier version of this patch got rid of this list altogether, but
that revealed hidden dependencies / assumptions on how the list is
sorted. For example, killing a process and then waiting for all the
LWPs status using iterate_over_lwps only works as is because the
leader LWP is always last in the list. So I thought it better to take
an incremental approach and make this patch concern itself _only_ with
the PID lookup optimization.
gdb/ChangeLog:
2016-05-24 Pedro Alves <palves@redhat.com>
PR gdb/19828
* linux-nat.c (lwp_lwpid_htab): New htab.
(lwp_info_hash, lwp_lwpid_htab_eq, lwp_lwpid_htab_create)
(lwp_lwpid_htab_add_lwp): New functions.
(lwp_list): Tweak comment.
(lwp_list_add, lwp_list_remove, lwp_lwpid_htab_remove_pid): New
functions.
(purge_lwp_list): Rewrite, using htab_traverse_noresize.
(add_initial_lwp): Add lwp to htab too. Use lwp_list_add.
(delete_lwp): Use lwp_list_remove. Remove htab too.
(find_lwp_pid): Search in htab.
(_initialize_linux_nat): Call lwp_lwpid_htab_create.
* linux-nat.h (struct lwp_info) <prev>: New field.
2016-05-24 14:47:57 +01:00
|
|
|
|
2016-05-24 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19828
|
|
|
|
|
* linux-nat.c (lwp_lwpid_htab): New htab.
|
|
|
|
|
(lwp_info_hash, lwp_lwpid_htab_eq, lwp_lwpid_htab_create)
|
|
|
|
|
(lwp_lwpid_htab_add_lwp): New functions.
|
|
|
|
|
(lwp_list): Tweak comment.
|
|
|
|
|
(lwp_list_add, lwp_list_remove, lwp_lwpid_htab_remove_pid): New
|
|
|
|
|
functions.
|
|
|
|
|
(purge_lwp_list): Rewrite, using htab_traverse_noresize.
|
|
|
|
|
(add_initial_lwp): Add lwp to htab too. Use lwp_list_add.
|
|
|
|
|
(delete_lwp): Use lwp_list_remove. Remove htab too.
|
|
|
|
|
(find_lwp_pid): Search in htab.
|
|
|
|
|
(_initialize_linux_nat): Call lwp_lwpid_htab_create.
|
|
|
|
|
* linux-nat.h (struct lwp_info) <prev>: New field.
|
|
|
|
|
|
|
|
|
|
2016-05-24 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19828
|
|
|
|
|
* linux-nat.c (lwp_lwpid_htab): New htab.
|
|
|
|
|
(lwp_info_hash, lwp_lwpid_htab_eq, lwp_lwpid_htab_create)
|
|
|
|
|
(lwp_lwpid_htab_add_lwp): New functions.
|
|
|
|
|
(lwp_list): Tweak comment.
|
|
|
|
|
(lwp_list_add, lwp_list_remove, lwp_lwpid_htab_remove_pid): New
|
|
|
|
|
functions.
|
|
|
|
|
(purge_lwp_list): Rewrite, using htab_traverse_noresize.
|
|
|
|
|
(add_initial_lwp): Add lwp to htab too. Use lwp_list_add.
|
|
|
|
|
(delete_lwp): Use lwp_list_remove. Remove htab too.
|
|
|
|
|
(find_lwp_pid): Search in htab.
|
|
|
|
|
(_initialize_linux_nat): Call lwp_lwpid_htab_create.
|
|
|
|
|
* linux-nat.h (struct lwp_info) <prev>: New field.
|
|
|
|
|
|
2016-05-24 14:47:57 +01:00
|
|
|
|
2016-05-24 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19828
|
|
|
|
|
* linux-nat.c (linux_resume_one_lwp_throw): Clear the LWP's core
|
|
|
|
|
field.
|
|
|
|
|
(linux_nat_update_thread_list): Don't fetch the core if already
|
|
|
|
|
known.
|
|
|
|
|
|
[Linux] Read vDSO range from /proc/PID/task/PID/maps instead of /proc/PID/maps
... as it's _much_ faster.
Hacking the gdb.threads/attach-many-short-lived-threads.exp test to
spawn thousands of threads instead of dozens to stress and debug
timeout problems with gdb.threads/attach-many-short-lived-threads.exp,
I saw that GDB would spend several seconds just reading the
/proc/PID/smaps file, to determine the vDSO mapping range. GDB opens
and reads the whole file just once, and caches the result, but even
that is too slow. For example, with almost 8000 threads:
$ ls /proc/3518/task/ | wc -l
7906
reading the /proc/PID/smaps file grepping for "vdso" takes over 15
seconds :
$ time cat /proc/3518/smaps | grep vdso
7ffdbafee000-7ffdbaff0000 r-xp 00000000 00:00 0 [vdso]
real 0m15.371s
user 0m0.008s
sys 0m15.017s
Looking around the web for hints, I found a nice description of the
issue here:
http://backtrace.io/blog/blog/2014/11/12/large-thread-counts-and-slow-process-maps/
The problem is that /proc/PID/smaps wants to show the mappings as
being thread stack, and that has the kernel iterating over all threads
in the thread group, for each mapping.
The fix is to use the "map" file under /proc/PID/task/PID/ instead of
the /proc/PID/ one, as the former doesn't mark thread stacks for all
threads.
That alone drops the timing to the millisecond range on my machine:
$ time cat /proc/3518/task/3518/smaps | grep vdso
7ffdbafee000-7ffdbaff0000 r-xp 00000000 00:00 0 [vdso]
real 0m0.150s
user 0m0.009s
sys 0m0.084s
And since we only need the vdso mapping's address range, we can use
"maps" file instead of "smaps", and it's even cheaper:
/proc/PID/task/PID/maps :
$ time cat /proc/3518/task/3518/maps | grep vdso
7ffdbafee000-7ffdbaff0000 r-xp 00000000 00:00 0 [vdso]
real 0m0.027s
user 0m0.000s
sys 0m0.017s
gdb/ChangeLog:
2016-05-24 Pedro Alves <palves@redhat.com>
PR gdb/19828
* linux-tdep.c (find_mapping_size): Delete.
(linux_vsyscall_range_raw): Rewrite reading from
/proc/PID/task/PID/maps directly instead of using
gdbarch_find_memory_regions.
2016-05-24 14:47:56 +01:00
|
|
|
|
2016-05-24 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19828
|
|
|
|
|
* linux-tdep.c (find_mapping_size): Delete.
|
|
|
|
|
(linux_vsyscall_range_raw): Rewrite reading from
|
|
|
|
|
/proc/PID/task/PID/maps directly instead of using
|
|
|
|
|
gdbarch_find_memory_regions.
|
|
|
|
|
|
2016-05-24 14:47:56 +01:00
|
|
|
|
2016-05-24 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19828
|
|
|
|
|
* linux-nat.c (report_thread_events): New global.
|
|
|
|
|
(linux_handle_extended_wait): Report
|
|
|
|
|
TARGET_WAITKIND_THREAD_CREATED if thread event reporting is
|
|
|
|
|
enabled.
|
|
|
|
|
(wait_lwp, linux_nat_filter_event): Report all thread exits if
|
|
|
|
|
thread event reporting is enabled. Remove comment.
|
|
|
|
|
(filter_exit_event): New function.
|
|
|
|
|
(linux_nat_wait_1): Use it.
|
|
|
|
|
(linux_nat_thread_events): New function.
|
|
|
|
|
(linux_nat_add_target): Install it as target_thread_events method.
|
|
|
|
|
|
2016-05-24 16:41:13 +08:00
|
|
|
|
2016-05-24 Yan-Ting Lin <currygt52@gmail.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Write After Approval): Add "Yan-Ting Lin".
|
|
|
|
|
|
Skip unwritable frames in command "finish"
Nowadays, GDB can't insert breakpoint on the return address of the
exception handler on ARM M-profile, because the address is a magic
one 0xfffffff9,
(gdb) bt
#0 CT32B1_IRQHandler () at ../src/timer.c:67
#1 <signal handler called>
#2 main () at ../src/timer.c:127
(gdb) info frame
Stack level 0, frame at 0x200ffa8:
pc = 0x4ec in CT32B1_IRQHandler (../src/timer.c:67); saved pc = 0xfffffff9
called by frame at 0x200ffc8
source language c.
Arglist at 0x200ffa0, args:
Locals at 0x200ffa0, Previous frame's sp is 0x200ffa8
Saved registers:
r7 at 0x200ffa0, lr at 0x200ffa4
(gdb) x/x 0xfffffff9
0xfffffff9: Cannot access memory at address 0xfffffff9
(gdb) finish
Run till exit from #0 CT32B1_IRQHandler () at ../src/timer.c:67
Ed:15: Target error from Set break/watch: Et:96: Pseudo-address (0xFFFFFFxx) for EXC_RETURN is invalid (GDB error?)
Warning:
Cannot insert hardware breakpoint 0.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.
Command aborted.
even some debug probe can't set hardware breakpoint on the magic
address too,
(gdb) hbreak *0xfffffff9
Hardware assisted breakpoint 2 at 0xfffffff9
(gdb) c
Continuing.
Ed:15: Target error from Set break/watch: Et:96: Pseudo-address (0xFFFFFFxx) for EXC_RETURN is invalid (GDB error?)
Warning:
Cannot insert hardware breakpoint 2.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.
Command aborted.
The problem described above is quite similar to PR 8841, in which GDB
can't set breakpoint on signal trampoline, which is mapped to a read-only
page by kernel. The rationale of this patch is to skip "unwritable"
frames when looking for caller frames in command "finish", and a new
gdbarch method code_of_frame_writable is added. This patch fixes
the problem on ARM cortex-m target, but it can be used to fix
PR 8841 too.
gdb:
2016-05-10 Yao Qi <yao.qi@arm.com>
* arch-utils.c (default_code_of_frame_writable): New function.
* arch-utils.h (default_code_of_frame_writable): Declare.
* arm-tdep.c (arm_code_of_frame_writable): New function.
(arm_gdbarch_init): Install gdbarch method
code_of_frame_writable if the target is M-profile.
* frame.c (skip_unwritable_frames): New function.
* frame.h (skip_unwritable_frames): Declare.
* gdbarch.sh (code_of_frame_writable): New.
* gdbarch.c, gdbarch.h: Re-generated.
* infcmd.c (finish_command): Call skip_unwritable_frames.
2016-05-23 17:32:56 +01:00
|
|
|
|
2016-05-23 Yao Qi <yao.qi@arm.com>
|
|
|
|
|
|
|
|
|
|
* arch-utils.c (default_code_of_frame_writable): New function.
|
|
|
|
|
* arch-utils.h (default_code_of_frame_writable): Declare.
|
|
|
|
|
* arm-tdep.c (arm_code_of_frame_writable): New function.
|
|
|
|
|
(arm_gdbarch_init): Install gdbarch method
|
|
|
|
|
code_of_frame_writable if the target is M-profile.
|
|
|
|
|
* frame.c (skip_unwritable_frames): New function.
|
|
|
|
|
* frame.h (skip_unwritable_frames): Declare.
|
|
|
|
|
* gdbarch.sh (code_of_frame_writable): New.
|
|
|
|
|
* gdbarch.c, gdbarch.h: Re-generated.
|
|
|
|
|
* infcmd.c (finish_command): Call skip_unwritable_frames.
|
|
|
|
|
|
2016-05-18 21:19:17 -06:00
|
|
|
|
2016-05-23 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
PR python/19438, PR python/18393:
|
|
|
|
|
* python/py-objfile.c (objfpy_initialize): Initialize self->dict.
|
|
|
|
|
* python/py-progspace.c (pspy_initialize): Initialize self->dict.
|
|
|
|
|
|
2016-05-23 13:26:47 +01:00
|
|
|
|
2016-05-23 Gary Benson <gbenson@redhat.com>
|
|
|
|
|
|
|
|
|
|
* nat/gdb_thread_db.h (td_thr_validate_ftype): Remove typedef.
|
|
|
|
|
* linux-thread-db.c (struct thread_db_info) <td_thr_validate_p>:
|
|
|
|
|
Remove field.
|
|
|
|
|
(try_thread_db_load_1): Remove td_thr_validate initialization.
|
|
|
|
|
|
2016-05-23 08:46:33 +01:00
|
|
|
|
2016-05-23 Jon Boden <jon@ubuntubsd.org> (tiny change)
|
|
|
|
|
|
|
|
|
|
* configure.ac: Search for libutil-freebsd as alternative to libutil.
|
|
|
|
|
* configure: Re-generated.
|
|
|
|
|
|
2016-05-19 14:43:56 +02:00
|
|
|
|
2016-05-19 Andreas Schwab <schwab@suse.de>
|
|
|
|
|
|
|
|
|
|
* ia64-libunwind-tdep.c (libunwind_descr): Add cast from void *.
|
|
|
|
|
(libunwind_frame_set_descr): Likewise.
|
|
|
|
|
(libunwind_frame_cache): Likewise.
|
|
|
|
|
(libunwind_frame_dealloc_cache): Likewise.
|
|
|
|
|
(libunwind_frame_sniffer): Likewise.
|
|
|
|
|
(libunwind_search_unwind_table): Likewise.
|
|
|
|
|
(libunwind_sigtramp_frame_sniffer): Likewise.
|
|
|
|
|
(libunwind_get_reg_special): Likewise.
|
|
|
|
|
(libunwind_load): Likewise.
|
|
|
|
|
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
|
|
|
|
|
(ia64_linux_store_register): Likewise.
|
|
|
|
|
(ia64_linux_xfer_partial): Likewise.
|
|
|
|
|
* ia64-tdep.c (ia64_access_reg): Likewise.
|
|
|
|
|
(ia64_access_fpreg): Likewise.
|
|
|
|
|
(ia64_access_rse_reg): Likewise.
|
|
|
|
|
(ia64_access_rse_fpreg): Likewise.
|
|
|
|
|
|
2016-05-18 10:48:41 -06:00
|
|
|
|
2016-05-18 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* rust-lang.c (rust_subscript): Initialize "high".
|
|
|
|
|
|
Fix double prompt output after run control MI commands with mi-async on (PR 20045)
When you use a run control command (-exec-run, -exec-continue,
-exec-next, ...) with mi-async on, an extra (gdb) prompt is displayed:
-exec-continue
^running
*running,thread-id="all"
(gdb)
(gdb)
It doesn't seem to be a big problem for front-ends, since this behavior
started in gdb 7.9 and we haven't heard anything about that. However,
it caused me some trouble while writing a test for PR 20039 [1].
The problem comes from an extra (gdb) prompt that we write when running
in mi-async off mode to emulate a past buggy behavior. When executing a
run control command synchronously, previous gdbs always printed a prompt
right away, even though they are not ready to accept new MI commands
until the target stops. Only at this time should they display a prompt.
But to keep backwards compatibility apparently, we print it anyway.
Since commit 198297aaf, the condition that decides whether we should
print that "bogus" prompt or not has become true, even when running with
mi-async on. Since we already print a prompt at the end of the
asynchronous command execution, it results in two prompts for one
command.
The proposed fix is to call target_can_async_p instead of
target_is_async_p, to make the condition:
if (!target_can_async_p () || sync_execution)
... show prompt ...
That shows the prompt if we are emulating a synchronous command on top
of an asynchronous target (sync_execution) or if the target simply can't
run asynchronously (!target_can_async_p ()).
Note that this code is changed and this bug fixed by Pedro's separate
console series, but I think it would be nice to have it fixed in the
mean time.
I ran the gdb.mi directory of the testsuite with mi-async on and off, I
didn't see any regressions.
gdb/ChangeLog:
* mi/mi-main.c (mi_on_resume): Call target_can_async_p instead
of target_is_async_p.
[1] https://sourceware.org/ml/gdb-patches/2016-05/msg00075.html
2016-05-17 17:07:20 -04:00
|
|
|
|
2016-05-17 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/20045
|
|
|
|
|
* mi/mi-main.c (mi_on_resume): Call target_can_async_p instead
|
|
|
|
|
of target_is_async_p.
|
|
|
|
|
|
2016-05-17 16:44:57 -04:00
|
|
|
|
2016-05-17 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/18077
|
|
|
|
|
* mi/mi-main.c (run_one_inferior): Use run target to determine
|
|
|
|
|
whether to run async or not.
|
|
|
|
|
(mi_cmd_exec_run): Likewise.
|
|
|
|
|
|
2016-04-27 10:28:56 -06:00
|
|
|
|
2016-05-17 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* std-operator.def (OP_RANGE): Rename from OP_F90_RANGE.
|
|
|
|
|
* rust-lang.c: Don't include f-lang.h.
|
|
|
|
|
(rust_range, rust_compute_range, rust_subscript)
|
|
|
|
|
(rust_evaluate_subexp): Update.
|
|
|
|
|
* rust-exp.y: Don't include f-lang.h.
|
|
|
|
|
(ast_range, convert_ast_to_expression): Update.
|
|
|
|
|
* parse.c (operator_length_standard): Update.
|
|
|
|
|
* f-lang.h (enum f90_range_type): Move to expression.h.
|
|
|
|
|
* f-exp.y: Use OP_RANGE.
|
|
|
|
|
* expression.h (enum range_type): New enum; renamed from
|
|
|
|
|
f90_range_type.
|
|
|
|
|
* expprint.c: Don't include f-lang.h.
|
|
|
|
|
(print_subexp_standard, dump_subexp_body_standard): Use OP_RANGE.
|
|
|
|
|
* eval.c (value_f90_subarray, evaluate_subexp_standard): Update.
|
|
|
|
|
|
2016-04-26 19:38:56 -06:00
|
|
|
|
2016-05-17 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Add Rust item.
|
|
|
|
|
|
2016-04-26 19:38:08 -06:00
|
|
|
|
2016-05-17 Tom Tromey <tom@tromey.com>
|
|
|
|
|
Manish Goregaokar <manishsmail@gmail.com>
|
|
|
|
|
|
|
|
|
|
* symtab.c (symbol_find_demangled_name): Handle Rust.
|
|
|
|
|
* symfile.c (init_filename_language_table): Treat ".rs" as Rust.
|
|
|
|
|
* std-operator.def (STRUCTOP_ANONYMOUS, OP_RUST_ARRAY): New
|
|
|
|
|
constants.
|
|
|
|
|
* rust-lang.h: New file.
|
|
|
|
|
* rust-lang.c: New file.
|
|
|
|
|
* rust-exp.y: New file.
|
|
|
|
|
* dwarf2read.c (read_file_scope): Add Rust producer sniffing.
|
|
|
|
|
(dwarf2_compute_name, read_func_scope, read_structure_type)
|
|
|
|
|
(read_base_type, read_subrange_type, set_cu_language)
|
|
|
|
|
(new_symbol_full, determine_prefix): Handle Rust.
|
|
|
|
|
* defs.h (enum language) <language_rust>: New constant.
|
|
|
|
|
* Makefile.in (SFILES): Add rust-exp.y, rust-lang.c.
|
|
|
|
|
(COMMON_OBS): Add rust-exp.o, rust-lang.o.
|
|
|
|
|
|
2016-04-26 16:45:21 -06:00
|
|
|
|
2016-05-17 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* valprint.h (struct generic_val_print_array) <array_start,
|
|
|
|
|
array_end>: New fields.
|
|
|
|
|
* valprint.c (generic_val_print_array): Add "decorations"
|
|
|
|
|
parameter. Use "array_start", "array_end".
|
|
|
|
|
(generic_val_print) <TYPE_CODE_ARRAY>: Update.
|
|
|
|
|
* p-valprint.c (p_decorations): Update.
|
|
|
|
|
* m2-valprint.c (m2_decorations): Update.
|
|
|
|
|
* f-valprint.c (f_decorations): Update.
|
|
|
|
|
* c-valprint.c (c_decorations): Update.
|
|
|
|
|
|
2016-04-20 10:09:53 -06:00
|
|
|
|
2016-05-17 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Add "maint selftest" entry.
|
|
|
|
|
* selftest.h: New file.
|
|
|
|
|
* selftest.c: New file.
|
|
|
|
|
* maint.c: Include selftest.h.
|
|
|
|
|
(maintenance_selftest): New function.
|
|
|
|
|
(_initialize_maint_cmds): Add "maint selftest" command.
|
|
|
|
|
* configure.ac (GDB_SELF_TEST): Maybe define.
|
|
|
|
|
* config.in, configure: Rebuild.
|
|
|
|
|
* Makefile.in (SFILES): Add selftest.c.
|
|
|
|
|
(COMMON_OBS): Add selftest.o.
|
|
|
|
|
|
2016-04-20 08:14:16 -06:00
|
|
|
|
2016-05-17 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* expprint.c: Include f-lang.h.
|
|
|
|
|
(print_subexp_standard, dump_subexp_body_standard): Handle
|
|
|
|
|
OP_F90_RANGE.
|
|
|
|
|
|
2016-03-31 14:16:56 -06:00
|
|
|
|
2016-05-17 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (init.c): Search .y files for initialization
|
|
|
|
|
functions.
|
|
|
|
|
|
2016-05-12 09:20:57 -07:00
|
|
|
|
2016-05-12 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
PR symtab/19999
|
|
|
|
|
* dwarf2loc.c (dwarf2_find_location_expression): For DWO files still
|
|
|
|
|
add base_offset.
|
|
|
|
|
|
2016-05-10 21:33:45 -04:00
|
|
|
|
2016-05-10 Trevor Saunders <tbsaunde+binutils@tbsaunde.org>
|
|
|
|
|
|
|
|
|
|
* iq2000-tdep.c (iq2000_scan_prologue): Remove if that shouldn't guard
|
|
|
|
|
anything.
|
|
|
|
|
* linespec.c (add_sal_to_sals): Restore call to symtab_to_fullname.
|
|
|
|
|
|
2016-05-10 16:14:23 +01:00
|
|
|
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_elf_make_msymbol_special): Use
|
|
|
|
|
ARM_GET_SYM_BRANCH_TYPE to get branch type of a symbol.
|
|
|
|
|
|
2016-04-18 13:16:27 -04:00
|
|
|
|
2016-05-07 Trevor Saunders <tbsaunde+binutils@tbsaunde.org>
|
|
|
|
|
|
|
|
|
|
* aarch64-linux-tdep.c (aarch64_linux_sigframe_init): Remove unused
|
|
|
|
|
variables.
|
|
|
|
|
* aarch64-tdep.c (aarch64_skip_prologue): Likewise.
|
|
|
|
|
(aarch64_scan_prologue): Likewise.
|
|
|
|
|
(aarch64_prologue_prev_register): Likewise.
|
|
|
|
|
(aarch64_dwarf2_prev_register): Likewise.
|
|
|
|
|
(pass_in_v): Likewise.
|
|
|
|
|
(aarch64_push_dummy_call): Likewise.
|
|
|
|
|
(aarch64_breakpoint_from_pc): Likewise.
|
|
|
|
|
(aarch64_return_in_memory): Likewise.
|
|
|
|
|
(aarch64_return_value): Likewise.
|
|
|
|
|
(aarch64_displaced_step_b_cond): Likewise.
|
|
|
|
|
(aarch64_displaced_step_cb): Likewise.
|
|
|
|
|
(aarch64_displaced_step_tb): Likewise.
|
|
|
|
|
(aarch64_gdbarch_init): Likewise.
|
|
|
|
|
(aarch64_process_record): Likewise.
|
|
|
|
|
* alpha-mdebug-tdep.c (alpha_mdebug_init_abi): Likewise.
|
|
|
|
|
* alpha-tdep.c (_initialize_alpha_tdep): Likewise.
|
|
|
|
|
* amd64-dicos-tdep.c (amd64_dicos_init_abi): Likewise.
|
|
|
|
|
* amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Likewise.
|
|
|
|
|
* amd64-tdep.c (fixup_riprel): Likewise.
|
|
|
|
|
* amd64-windows-tdep.c (amd64_windows_frame_decode_epilogue): Likewise.
|
|
|
|
|
(amd64_windows_frame_decode_insns): Likewise.
|
|
|
|
|
(amd64_windows_frame_cache): Likewise.
|
|
|
|
|
(amd64_windows_frame_prev_register): Likewise.
|
|
|
|
|
(amd64_windows_frame_this_id): Likewise.
|
|
|
|
|
(amd64_windows_init_abi): Likewise.
|
|
|
|
|
* arm-linux-tdep.c (arm_linux_get_syscall_number): Likewise.
|
|
|
|
|
(arm_linux_get_next_pcs_syscall_next_pc): Likewise.
|
|
|
|
|
* arm-symbian-tdep.c (arm_symbian_init_abi): Likewise.
|
|
|
|
|
* arm-tdep.c (arm_make_epilogue_frame_cache): Likewise.
|
|
|
|
|
(arm_epilogue_frame_prev_register): Likewise.
|
|
|
|
|
(arm_record_vdata_transfer_insn): Likewise.
|
|
|
|
|
(arm_record_exreg_ld_st_insn): Likewise.
|
|
|
|
|
* auto-load.c (execute_script_contents): Likewise.
|
|
|
|
|
(print_scripts): Likewise.
|
|
|
|
|
* avr-tdep.c (avr_frame_prev_register): Likewise.
|
|
|
|
|
(avr_push_dummy_call): Likewise.
|
|
|
|
|
* bfin-linux-tdep.c (bfin_linux_sigframe_init): Likewise.
|
|
|
|
|
* bfin-tdep.c (bfin_gdbarch_init): Likewise.
|
|
|
|
|
* blockframe.c (find_pc_partial_function_gnu_ifunc): Likewise.
|
|
|
|
|
* break-catch-throw.c (fetch_probe_arguments): Likewise.
|
|
|
|
|
* breakpoint.c (breakpoint_xfer_memory): Likewise.
|
|
|
|
|
(breakpoint_init_inferior): Likewise.
|
|
|
|
|
(breakpoint_inserted_here_p): Likewise.
|
|
|
|
|
(software_breakpoint_inserted_here_p): Likewise.
|
|
|
|
|
(hardware_breakpoint_inserted_here_p): Likewise.
|
|
|
|
|
(bpstat_what): Likewise.
|
|
|
|
|
(break_range_command): Likewise.
|
|
|
|
|
(save_breakpoints): Likewise.
|
|
|
|
|
* coffread.c (coff_symfile_read): Likewise.
|
|
|
|
|
* cris-tdep.c (cris_push_dummy_call): Likewise.
|
|
|
|
|
(cris_scan_prologue): Likewise.
|
|
|
|
|
(cris_register_size): Likewise.
|
|
|
|
|
(_initialize_cris_tdep): Likewise.
|
|
|
|
|
* d-exp.y: Likewise.
|
|
|
|
|
* dbxread.c (dbx_read_symtab): Likewise.
|
|
|
|
|
(process_one_symbol): Likewise.
|
|
|
|
|
(coffstab_build_psymtabs): Likewise.
|
|
|
|
|
(elfstab_build_psymtabs): Likewise.
|
|
|
|
|
* dicos-tdep.c (dicos_init_abi): Likewise.
|
|
|
|
|
* disasm.c (do_mixed_source_and_assembly): Likewise.
|
|
|
|
|
(gdb_disassembly): Likewise.
|
|
|
|
|
* dtrace-probe.c (dtrace_process_dof): Likewise.
|
|
|
|
|
* dwarf2read.c (error_check_comp_unit_head): Likewise.
|
|
|
|
|
(build_type_psymtabs_1): Likewise.
|
|
|
|
|
(skip_one_die): Likewise.
|
|
|
|
|
(process_imported_unit_die): Likewise.
|
|
|
|
|
(dwarf2_physname): Likewise.
|
|
|
|
|
(read_file_scope): Likewise.
|
|
|
|
|
(setup_type_unit_groups): Likewise.
|
|
|
|
|
(create_dwo_cu_reader): Likewise.
|
|
|
|
|
(create_dwo_cu): Likewise.
|
|
|
|
|
(create_dwo_unit_in_dwp_v1): Likewise.
|
|
|
|
|
(create_dwo_unit_in_dwp_v2): Likewise.
|
|
|
|
|
(lookup_dwo_unit_in_dwp): Likewise.
|
|
|
|
|
(free_dwo_file): Likewise.
|
|
|
|
|
(check_producer): Likewise.
|
|
|
|
|
(dwarf2_add_typedef): Likewise.
|
|
|
|
|
(dwarf2_add_member_fn): Likewise.
|
|
|
|
|
(read_unsigned_leb128): Likewise.
|
|
|
|
|
(read_signed_leb128): Likewise.
|
|
|
|
|
(dwarf2_const_value): Likewise.
|
|
|
|
|
(follow_die_sig_1): Likewise.
|
|
|
|
|
(dwarf_decode_macro_bytes): Likewise.
|
|
|
|
|
* extension.c (restore_active_ext_lang): Likewise.
|
|
|
|
|
* frv-linux-tdep.c (frv_linux_sigtramp_frame_cache): Likewise.
|
|
|
|
|
* ft32-tdep.c (ft32_analyze_prologue): Likewise.
|
|
|
|
|
* gdbtypes.c (lookup_typename): Likewise.
|
|
|
|
|
(resolve_dynamic_range): Likewise.
|
|
|
|
|
(check_typedef): Likewise.
|
|
|
|
|
* h8300-tdep.c (h8300_is_argument_spill): Likewise.
|
|
|
|
|
(h8300_gdbarch_init): Likewise.
|
|
|
|
|
* hppa-tdep.c (hppa32_push_dummy_call): Likewise.
|
|
|
|
|
(hppa_frame_this_id): Likewise.
|
|
|
|
|
(_initialize_hppa_tdep): Likewise.
|
|
|
|
|
* hppanbsd-tdep.c (hppanbsd_sigtramp_cache_init): Likewise.
|
|
|
|
|
* hppaobsd-tdep.c (hppaobsd_supply_fpregset): Likewise.
|
|
|
|
|
* i386-dicos-tdep.c (i386_dicos_init_abi): Likewise.
|
|
|
|
|
* i386-tdep.c (i386_bnd_type): Likewise.
|
|
|
|
|
(i386_gdbarch_init): Likewise.
|
|
|
|
|
(i386_mpx_bd_base): Likewise.
|
|
|
|
|
* i386nbsd-tdep.c (i386nbsd_sigtramp_cache_init): Likewise.
|
|
|
|
|
* i386obsd-tdep.c (i386obsd_elf_init_abi): Likewise.
|
|
|
|
|
* ia64-tdep.c (examine_prologue): Likewise.
|
|
|
|
|
(ia64_frame_cache): Likewise.
|
|
|
|
|
(ia64_push_dummy_call): Likewise.
|
|
|
|
|
* infcmd.c (finish_command_fsm_async_reply_reason): Likewise.
|
|
|
|
|
(default_print_one_register_info): Likewise.
|
|
|
|
|
* infrun.c (infrun_thread_ptid_changed): Likewise.
|
|
|
|
|
(thread_still_needs_step_over): Likewise.
|
|
|
|
|
(stop_all_threads): Likewise.
|
|
|
|
|
(restart_threads): Likewise.
|
|
|
|
|
(keep_going_stepped_thread): Likewise.
|
|
|
|
|
* iq2000-tdep.c (iq2000_scan_prologue): Likewise.
|
|
|
|
|
* language.c (language_init_primitive_type_symbols): Likewise.
|
|
|
|
|
* linespec.c (add_sal_to_sals): Likewise.
|
|
|
|
|
* linux-nat.c (status_callback): Likewise.
|
|
|
|
|
(kill_unfollowed_fork_children): Likewise.
|
|
|
|
|
(linux_nat_kill): Likewise.
|
|
|
|
|
* linux-tdep.c (linux_fill_prpsinfo): Likewise.
|
|
|
|
|
* linux-thread-db.c (thread_db_notice_clone): Likewise.
|
|
|
|
|
(record_thread): Likewise.
|
|
|
|
|
* location.c (string_to_event_location_basic): Likewise.
|
|
|
|
|
* m32c-tdep.c (m32c_prev_register): Likewise.
|
|
|
|
|
* m32r-linux-tdep.c (m32r_linux_init_abi): Likewise.
|
|
|
|
|
* m32r-tdep.c (decode_prologue): Likewise.
|
|
|
|
|
* m68klinux-tdep.c (m68k_linux_sigtramp_frame_cache): Likewise.
|
|
|
|
|
* machoread.c (macho_symtab_read): Likewise.
|
|
|
|
|
(macho_symfile_read): Likewise.
|
|
|
|
|
(macho_symfile_offsets): Likewise.
|
|
|
|
|
* maint.c (set_per_command_cmd): Likewise.
|
|
|
|
|
* mi/mi-cmd-stack.c (mi_cmd_stack_list_locals): Likewise.
|
|
|
|
|
(mi_cmd_stack_list_variables): Likewise.
|
|
|
|
|
* mi/mi-main.c (mi_cmd_exec_run): Likewise.
|
|
|
|
|
(output_register): Likewise.
|
|
|
|
|
(mi_cmd_execute): Likewise.
|
|
|
|
|
(mi_cmd_trace_define_variable): Likewise.
|
|
|
|
|
(print_variable_or_computed): Likewise.
|
|
|
|
|
* minsyms.c (prim_record_minimal_symbol_full): Likewise.
|
|
|
|
|
* mn10300-tdep.c (mn10300_frame_prev_register): Likewise.
|
|
|
|
|
* msp430-tdep.c (msp430_pseudo_register_write): Likewise.
|
|
|
|
|
* mt-tdep.c (mt_registers_info): Likewise.
|
|
|
|
|
* nios2-tdep.c (nios2_analyze_prologue): Likewise.
|
|
|
|
|
(nios2_push_dummy_call): Likewise.
|
|
|
|
|
(nios2_frame_unwind_cache): Likewise.
|
|
|
|
|
(nios2_stub_frame_cache): Likewise.
|
|
|
|
|
(nios2_stub_frame_sniffer): Likewise.
|
|
|
|
|
(nios2_gdbarch_init): Likewise.
|
|
|
|
|
* ppc-ravenscar-thread.c: Likewise.
|
|
|
|
|
* ppcfbsd-tdep.c (ppcfbsd_sigtramp_frame_cache): Likewise.
|
|
|
|
|
* python/py-evts.c (add_new_registry): Likewise.
|
|
|
|
|
* python/py-finishbreakpoint.c (bpfinishpy_init): Likewise.
|
|
|
|
|
(bpfinishpy_detect_out_scope_cb): Likewise.
|
|
|
|
|
* python/py-framefilter.c (py_print_value): Likewise.
|
|
|
|
|
* python/py-inferior.c (infpy_write_memory): Likewise.
|
|
|
|
|
* python/py-infevents.c (create_inferior_call_event_object): Likewise.
|
|
|
|
|
* python/py-infthread.c (thpy_get_ptid): Likewise.
|
|
|
|
|
* python/py-linetable.c (ltpy_get_pcs_for_line): Likewise.
|
|
|
|
|
(ltpy_get_all_source_lines): Likewise.
|
|
|
|
|
(ltpy_is_valid): Likewise.
|
|
|
|
|
(ltpy_iternext): Likewise.
|
|
|
|
|
* python/py-symtab.c (symtab_and_line_to_sal_object): Likewise.
|
|
|
|
|
* python/py-unwind.c (pyuw_object_attribute_to_pointer): Likewise.
|
|
|
|
|
(unwind_infopy_str): Likewise.
|
|
|
|
|
* python/py-varobj.c (py_varobj_get_iterator): Likewise.
|
|
|
|
|
* ravenscar-thread.c (ravenscar_inferior_created): Likewise.
|
|
|
|
|
* rs6000-aix-tdep.c (rs6000_push_dummy_call): Likewise.
|
|
|
|
|
* rs6000-lynx178-tdep.c (rs6000_lynx178_push_dummy_call): Likewise.
|
|
|
|
|
* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Likewise.
|
|
|
|
|
* s390-linux-tdep.c (s390_supply_tdb_regset): Likewise.
|
|
|
|
|
(s390_frame_prev_register): Likewise.
|
|
|
|
|
(s390_dwarf2_frame_init_reg): Likewise.
|
|
|
|
|
(s390_record_vr): Likewise.
|
|
|
|
|
(s390_process_record): Likewise.
|
|
|
|
|
* score-tdep.c (score_push_dummy_call): Likewise.
|
|
|
|
|
(score3_analyze_prologue): Likewise.
|
|
|
|
|
* sh-tdep.c (sh_extract_return_value_nofpu): Likewise.
|
|
|
|
|
* sh64-tdep.c (sh64_analyze_prologue): Likewise.
|
|
|
|
|
(sh64_push_dummy_call): Likewise.
|
|
|
|
|
(sh64_extract_return_value): Likewise.
|
|
|
|
|
(sh64_do_fp_register): Likewise.
|
|
|
|
|
* solib-aix.c (solib_aix_get_section_offsets): Likewise.
|
|
|
|
|
* solib-darwin.c (darwin_read_exec_load_addr_from_dyld): Likewise.
|
|
|
|
|
(darwin_solib_read_all_image_info_addr): Likewise.
|
|
|
|
|
* solib-dsbt.c (enable_break): Likewise.
|
|
|
|
|
* solib-frv.c (enable_break2): Likewise.
|
|
|
|
|
(frv_fdpic_find_canonical_descriptor): Likewise.
|
|
|
|
|
* solib-svr4.c (svr4_handle_solib_event): Likewise.
|
|
|
|
|
* sparc-tdep.c (sparc_skip_stack_check): Likewise.
|
|
|
|
|
* sparc64-linux-tdep.c (sparc64_linux_get_longjmp_target): Likewise.
|
|
|
|
|
* sparcobsd-tdep.c (sparc32obsd_init_abi): Likewise.
|
|
|
|
|
* spu-tdep.c (info_spu_dma_cmdlist): Likewise.
|
|
|
|
|
* stack.c (read_frame_local): Likewise.
|
|
|
|
|
* symfile.c (symbol_file_add_separate): Likewise.
|
|
|
|
|
(remove_symbol_file_command): Likewise.
|
|
|
|
|
* symmisc.c (maintenance_print_one_line_table): Likewise.
|
|
|
|
|
* symtab.c (symbol_cache_flush): Likewise.
|
|
|
|
|
(basic_lookup_transparent_type): Likewise.
|
|
|
|
|
(sort_search_symbols_remove_dups): Likewise.
|
|
|
|
|
* target.c (target_memory_map): Likewise.
|
|
|
|
|
(target_detach): Likewise.
|
|
|
|
|
(target_resume): Likewise.
|
|
|
|
|
(acquire_fileio_fd): Likewise.
|
|
|
|
|
(target_store_registers): Likewise.
|
|
|
|
|
* thread.c (print_thread_info_1): Likewise.
|
|
|
|
|
* tic6x-tdep.c (tic6x_analyze_prologue): Likewise.
|
|
|
|
|
* tilegx-linux-tdep.c (tilegx_linux_sigframe_init): Likewise.
|
|
|
|
|
* tilegx-tdep.c (tilegx_push_dummy_call): Likewise.
|
|
|
|
|
(tilegx_analyze_prologue): Likewise.
|
|
|
|
|
(tilegx_stack_frame_destroyed_p): Likewise.
|
|
|
|
|
(tilegx_frame_cache): Likewise.
|
|
|
|
|
* tracefile.c (trace_save): Likewise.
|
|
|
|
|
* tracepoint.c (encode_actions_and_make_cleanup): Likewise.
|
|
|
|
|
(start_tracing): Likewise.
|
|
|
|
|
(print_one_static_tracepoint_marker): Likewise.
|
|
|
|
|
* tui/tui.c (tui_enable): Likewise.
|
|
|
|
|
* valops.c (value_struct_elt_bitpos): Likewise.
|
|
|
|
|
(find_overload_match): Likewise.
|
|
|
|
|
(find_oload_champ): Likewise.
|
|
|
|
|
* value.c (value_contents_copy_raw): Likewise.
|
|
|
|
|
* windows-tdep.c (windows_get_tlb_type): Likewise.
|
|
|
|
|
* x86-linux-nat.c (x86_linux_enable_btrace): Likewise.
|
|
|
|
|
* xcoffread.c (record_minimal_symbol): Likewise.
|
|
|
|
|
(scan_xcoff_symtab): Likewise.
|
|
|
|
|
* xtensa-tdep.c (execute_code): Likewise.
|
|
|
|
|
(xtensa_gdbarch_init): Likewise.
|
|
|
|
|
(_initialize_xtensa_tdep): Likewise.
|
|
|
|
|
|
2016-05-04 19:42:09 -04:00
|
|
|
|
2016-05-04 Ulrich Weigand <uweigand@de.ibm.com>
|
|
|
|
|
|
|
|
|
|
* spu-linux-nat.c (spu_bfd_iovec_pread): Add pointer cast for C++.
|
|
|
|
|
(spu_bfd_open): Likewise.
|
|
|
|
|
|
Throw NOT_AVAILABLE_ERROR in read_stack and read_code
Nowadays, read_memory may throw NOT_AVAILABLE_ERROR (it is done by
patch http://sourceware.org/ml/gdb-patches/2013-08/msg00625.html)
however, read_stack and read_code still throws MEMORY_ERROR only. This
causes PR 19947, that is prologue unwinder is unable unwind because
code memory isn't available, but MEMORY_ERROR is thrown, while unwinder
catches NOT_AVAILABLE_ERROR.
#0 memory_error (err=err@entry=TARGET_XFER_E_IO, memaddr=memaddr@entry=140737349781158) at /home/yao/SourceCode/gnu/gdb/git/gdb/corefile.c:217
#1 0x000000000065f5ba in read_code (memaddr=memaddr@entry=140737349781158, myaddr=myaddr@entry=0x7fffffffd7b0 "\340\023<\001", len=len@entry=1)
at /home/yao/SourceCode/gnu/gdb/git/gdb/corefile.c:288
#2 0x000000000065f7b5 in read_code_unsigned_integer (memaddr=memaddr@entry=140737349781158, len=len@entry=1, byte_order=byte_order@entry=BFD_ENDIAN_LITTLE)
at /home/yao/SourceCode/gnu/gdb/git/gdb/corefile.c:363
#3 0x00000000004717e0 in amd64_analyze_prologue (gdbarch=gdbarch@entry=0x13c13e0, pc=140737349781158, current_pc=140737349781165, cache=cache@entry=0xda0cb0)
at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2267
#4 0x0000000000471f6d in amd64_frame_cache_1 (cache=0xda0cb0, this_frame=0xda0bf0) at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2437
#5 amd64_frame_cache (this_frame=0xda0bf0, this_cache=<optimised out>) at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2508
#6 0x000000000047214d in amd64_frame_this_id (this_frame=<optimised out>, this_cache=<optimised out>, this_id=0xda0c50)
at /home/yao/SourceCode/gnu/gdb/git/gdb/amd64-tdep.c:2541
#7 0x00000000006b94c4 in compute_frame_id (fi=0xda0bf0) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:481
#8 get_prev_frame_if_no_cycle (this_frame=this_frame@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1809
#9 0x00000000006bb6c9 in get_prev_frame_always_1 (this_frame=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1983
#10 get_prev_frame_always (this_frame=this_frame@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1999
#11 0x00000000006bbe11 in get_prev_frame (this_frame=this_frame@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:2241
#12 0x00000000006bc13c in unwind_to_current_frame (ui_out=<optimised out>, args=args@entry=0xda0b20) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1485
The fix is to let read_stack and read_code throw NOT_AVAILABLE_ERROR too,
in order to align with read_memory.
gdb:
2016-05-04 Yao Qi <yao.qi@linaro.org>
PR gdb/19947
* corefile.c (read_memory): Rename it to ...
(read_memory_object): ... it. Add parameter object.
(read_memory): Call read_memory_object.
(read_stack): Likewise.
(read_code): Likewise.
2016-05-04 15:04:01 +01:00
|
|
|
|
2016-05-04 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
PR gdb/19947
|
|
|
|
|
* corefile.c (read_memory): Rename it to ...
|
|
|
|
|
(read_memory_object): ... it. Add parameter object.
|
|
|
|
|
(read_memory): Call read_memory_object.
|
|
|
|
|
(read_stack): Likewise.
|
|
|
|
|
(read_code): Likewise.
|
|
|
|
|
|
2016-05-03 16:30:58 -07:00
|
|
|
|
2016-05-03 Yunlian Jiang <yunlian@google.com>
|
|
|
|
|
Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
PR symtab/19914
|
|
|
|
|
* dwarf2read.c (open_and_init_dwp_file): Look at backlink if objfile
|
|
|
|
|
is separate debug file.
|
|
|
|
|
|
2016-05-03 15:54:45 -07:00
|
|
|
|
2016-05-03 Don Breazeal <donb@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* serial.h (gdb_pipe): Fix argument names in comment.
|
|
|
|
|
|
Fix gdb/python/python.c use-after-free
Valgrind shows:
==26964== Invalid read of size 1
==26964== at 0x6E14100: __GI_strcmp (strcmp.S:180)
==26964== by 0x6DB55AA: setlocale (setlocale.c:238)
==26964== by 0x4E0455: _initialize_python() (python.c:1731)
==26964== by 0x786731: initialize_all_files() (init.c:319)
==26964== by 0x72EF0A: gdb_init(char*) (top.c:1929)
==26964== by 0x60BCAC: captured_main(void*) (main.c:863)
==26964== by 0x606AD5: catch_errors(int (*)(void*), void*, char*, return_mask) (exceptions.c:234)
==26964== by 0x60C608: gdb_main(captured_main_args*) (main.c:1165)
==26964== by 0x40CAEC: main (gdb.c:32)
==26964== Address 0x81d30a0 is 0 bytes inside a block of size 181 free'd
==26964== at 0x4C29CF0: free (vg_replace_malloc.c:530)
==26964== by 0x6DB5B65: setname (setlocale.c:201)
==26964== by 0x6DB5B65: setlocale (setlocale.c:388)
==26964== by 0x4E037F: _initialize_python() (python.c:1712)
==26964== by 0x786731: initialize_all_files() (init.c:319)
==26964== by 0x72EF0A: gdb_init(char*) (top.c:1929)
==26964== by 0x60BCAC: captured_main(void*) (main.c:863)
==26964== by 0x606AD5: catch_errors(int (*)(void*), void*, char*, return_mask) (exceptions.c:234)
==26964== by 0x60C608: gdb_main(captured_main_args*) (main.c:1165)
==26964== by 0x40CAEC: main (gdb.c:32)
The problem is doing this:
oldloc = setlocale (LC_ALL, NULL);
setlocale (LC_ALL, "");
...
setlocale (LC_ALL, oldloc);
I.e., the second setlocale call frees 'oldloc'.
From http://pubs.opengroup.org/onlinepubs/9699919799/functions/setlocale.html :
"The returned string pointer might be invalidated or the string
content might be overwritten by a subsequent call to setlocale()."
gdb/ChangeLog:
2016-05-03 Pedro Alves <palves@redhat.com>
PR python/20037
* python/python.c (_initialize_python) [IS_PY3K]: xstrdup/xfree
oldloc.
2016-05-03 12:16:56 +01:00
|
|
|
|
2016-05-03 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR python/20037
|
|
|
|
|
* python/python.c (_initialize_python) [IS_PY3K]: xstrdup/xfree
|
|
|
|
|
oldloc.
|
|
|
|
|
|
2016-05-03 12:16:55 +01:00
|
|
|
|
2016-05-03 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* python/python.c (_initialize_python) [IS_PY3K]: Remove dead
|
|
|
|
|
code.
|
|
|
|
|
|
Fix PR gdb/16818, workaround Python's forcing of -export-dynamic
GDB's use of --dynamic-list to only export the proc-service symbols is
broken due to Python's "python-config --ldflags" saying we should link
with -export-dynamic, causing us to export _all_ extern symbols
anyway. On Fedora 23:
$ python-config --ldflags
-lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
$ python3.4-config --ldflags
-L/usr/lib64 -lpython3.4m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
Having GDB export all its symbols leads to issues such as PR gdb/16818
(GDB crashes when using name for target remote hostname:port), where a
GDB symbol unintentionally preempts a symbol in one of the NSS modules
glibc loads into the process. NSS modules should not define symbols
outside the implementation namespace or the relevant standards, but,
alas, that's a longstanding and hard to fix issue. See libc-alpha
discussion at:
[symbol name space issues with NSS modules]
https://sourceware.org/ml/libc-alpha/2016-04/msg00130.html
Python should instead be either using GCC's symbol visibility feature
or -Wl,--dynamic-list as well, to only export Python API symbols, but,
it doesn't. There are bugs open upstream for that:
[Use -Wl,--dynamic-list=x.list, not -Xlinker -export-dynamic]
http://bugs.python.org/issue10112
[Use GCC visibility attrs in PyAPI_*]
http://bugs.python.org/issue11410
But that's taking a long while to resolve.
I thought of working around this Python issue by making GDB build with
-fvisibility=hidden, as Jan suggests in Python issue 10112, as then
Python's "-Xlinker -export-dynamic" has no effect. However, that
would need to be done in the whole source tree (bfd, libiberty, etc.),
and I think that would break GCC plugins, as I believe those have
access to all of GCCs symbols, by "design". So we'd need a new
configure switch, or have the libraries in the tree detect which of
GCC or GDB is being built, but that doesn't work, because the answer
can be "both" with combined builds...
So this patch instead works around Python's bug, by simply sed'ing
away "-Xlinker -export-dynamic" from the result of python-config.py
--ldflags, making -Wl,--dynamic-list work again as it used to. It's
ugly, but so is the bug...
Note that if -Wl,--dynamic-list doesn't work, we always link with
-rdynamic, so static Python should still work.
Tested on F23 with --python=python (Python 2.7) and
--python=python3.4.
gdb/ChangeLog:y
2016-05-03 Pedro Alves <palves@redhat.com>
* configure.ac (PYTHON_LIBS): Sed away "-Xlinker -export-dynamic".
* configure: Regenerate.
2016-05-03 10:30:51 +01:00
|
|
|
|
2016-05-03 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* configure.ac (PYTHON_LIBS): Sed away "-Xlinker -export-dynamic".
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
|
2016-05-03 10:30:51 +01:00
|
|
|
|
2016-05-03 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* configure.ac (checking for the dynamic export flag): Add
|
|
|
|
|
$PYTHON_CPPFLAGS to CPPFLAGS.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
|
2016-05-03 09:40:54 +01:00
|
|
|
|
2016-05-03 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
|
|
|
|
|
|
|
|
|
* symfile.c (find_pc_overlay): Add braces to avoid -Wparentheses
|
|
|
|
|
warning.
|
|
|
|
|
(find_pc_mapped_section): Likewise.
|
|
|
|
|
(list_overlays_command): Likewise.
|
|
|
|
|
|
2016-05-02 19:37:43 +03:00
|
|
|
|
2016-05-02 Eli Zaretskii <eliz@gnu.org>
|
|
|
|
|
|
|
|
|
|
* windows-nat.c (_initialize_check_for_gdb_ini): Fix off-by-one
|
|
|
|
|
error in allocation of space for "$HOME/.gdbinit" string. This
|
|
|
|
|
caused GDB to abort on startup whenever a '~/gdb.ini' file was
|
|
|
|
|
actually found, because xsnprintf would hit an assertion
|
|
|
|
|
violation.
|
|
|
|
|
|
2016-04-28 14:11:38 -04:00
|
|
|
|
2016-04-28 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-decode.c (help_cmd_list): Do not list commands that
|
|
|
|
|
are deprecated.
|
|
|
|
|
|
2016-04-27 21:27:40 +02:00
|
|
|
|
2016-04-27 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* remote.c (remote_start_remote): Detect PACKET_vFile_setfs.support.
|
|
|
|
|
|
2016-04-27 12:01:14 -03:00
|
|
|
|
2016-04-27 Martin Galvan <martin.galvan@tallertechnologies.com>
|
|
|
|
|
|
|
|
|
|
* c-valprint.c (c_value_print): Always convert val back to reference
|
|
|
|
|
type if we converted it to a pointer type.
|
|
|
|
|
|
2016-04-27 15:52:16 +02:00
|
|
|
|
2016-04-27 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* configure.ac: Enhance configure check for babeltrace to reject
|
|
|
|
|
non-C++-enabled versions.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
|
fort_dyn_array: Use value constructor instead of raw-buffer manipulation.
Instead of pre-computing indices into a fortran array re-use
the value_* interfaces to subscript a fortran array.
The benefit of using the new interface is that it takes care of
dynamic types and resolve them when needed.
This fixes issues when printing structures with dynamic arrays from toplevel.
Before:
(gdb) p twov
$1 = ( (( ( 6352320, 0, -66, -1, 267) ( 343476, 1, -15, 1, 0) ( 5, 0, 5, 0, 1) ...
After:
(gdb) p twov
$1 = ( (( ( 1, 1, 1, 1, 1) ( 1, 1, 321, 1, 1) ( 1, 1, 1, 1, 1) ...
2016-04-26 Sanimir Agovic <sanimir.agovic@intel.com>
Keven Boell <keven.boell@intel.com>
Bernhard Heckel <bernhard.heckel@intel.com>
gdb/Changelog:
* f-valprint.c (f77_create_arrayprint_offset_tbl): Remove
function.
(F77_DIM_SIZE, F77_DIM_OFFSET): Remove macro.
(f77_print_array_1): Use value_subscript to subscript a
value array.
(f77_print_array): Remove call to f77_create_arrayprint_offset_tbl.
(f_val_print): Use value_field to construct a field value.
gdb/testsuite/Changelog:
* vla-type.exp: Print structure from toplevel.
2016-04-26 16:46:48 +02:00
|
|
|
|
2016-04-26 Sanimir Agovic <sanimir.agovic@intel.com>
|
|
|
|
|
Keven Boell <keven.boell@intel.com>
|
|
|
|
|
Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
|
|
|
|
|
* f-valprint.c (f77_create_arrayprint_offset_tbl): Remove
|
|
|
|
|
function.
|
|
|
|
|
(F77_DIM_SIZE, F77_DIM_OFFSET): Remove macro.
|
|
|
|
|
(f77_print_array_1): Use value_subscript to subscript a
|
|
|
|
|
value array.
|
|
|
|
|
(f77_print_array): Remove call to f77_create_arrayprint_offset_tbl.
|
|
|
|
|
(f_val_print): Use value_field to construct a field value.
|
|
|
|
|
|
2016-04-26 16:38:19 +02:00
|
|
|
|
2016-04-26 Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
|
|
|
|
|
* valarith.c (value_address): Resolve dynamic types.
|
|
|
|
|
|
2016-04-26 16:28:43 +02:00
|
|
|
|
2016-04-26 Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
Keven Boell <kevel.boell@intel.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Add new supported features for fortran.
|
|
|
|
|
* gdbtypes.c (remove_dyn_prop): New.
|
|
|
|
|
(resolve_dynamic_struct): Keep type length for fortran structs.
|
|
|
|
|
* gdbtypes.h: Forward declaration of new function.
|
|
|
|
|
* value.c (value_address): Return dynamic resolved location of a value.
|
|
|
|
|
(set_value_component_location): Adjust the value address
|
|
|
|
|
for single value prints.
|
|
|
|
|
(value_primitive_field): Support value types with a dynamic location.
|
|
|
|
|
(set_internalvar): Remove dynamic location property of
|
|
|
|
|
internal variables.
|
|
|
|
|
|
Insert breakpoint even when the raw breakpoint is found
When GDBserver inserts a breakpoint, it looks for raw breakpoint, if
the raw breakpoint is found, increase its refcount, and return. This
doesn't work when it steps over a breakpoint using software single
step and the underneath instruction of breakpoint is branch to self.
When stepping over a breakpoint on ADDR using software single step,
GDBserver uninsert the breakpoint, so the corresponding raw breakpoint
RAW's 'inserted' flag is zero. Then, GDBserver insert single step
breakpoint at the same address ADDR because the instruction is branch
to self, the same raw brekapoint RAW is found, and increase the
refcount. However, the raw breakpoint is not inserted, and the
program won't stop.
gdb/gdbserver:
2016-04-25 Pedro Alves <palves@redhat.com>
Yao Qi <yao.qi@linaro.org>
* mem-break.c (set_raw_breakpoint_at): Create a raw breakpoint
object. Insert it if it is not inserted yet. Increase the
refcount and link it into the proc's raw breakpoint list.
2016-04-25 09:43:36 +01:00
|
|
|
|
2016-04-25 Pedro Alves <palves@redhat.com>
|
|
|
|
|
Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* mem-break.c (set_raw_breakpoint_at): Create a raw breakpoint
|
|
|
|
|
object. Insert it if it is not inserted yet. Increase the
|
|
|
|
|
refcount and link it into the proc's raw breakpoint list.
|
|
|
|
|
|
Force to insert software single step breakpoint
GDB doesn't insert software single step breakpoint if the instruction
branches to itself, so that the program can't stop after command "si".
(gdb) b 32
Breakpoint 2 at 0x8680: file git/gdb/testsuite/gdb.base/branch-to-self.c, line 32.
(gdb) c
Continuing.
Breakpoint 2, main () at gdb/git/gdb/testsuite/gdb.base/branch-to-self.c:32
32 asm (".Lhere: " BRANCH_INSN " .Lhere"); /* loop-line */
(gdb) si
infrun: clear_proceed_status_thread (Thread 3991.3991)
infrun: proceed (addr=0xffffffff, signal=GDB_SIGNAL_DEFAULT)
infrun: step-over queue now empty
infrun: resuming [Thread 3991.3991] for step-over
infrun: skipping breakpoint: stepping past insn at: 0x8680
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sending packet: $Z0,8678,4#f3...Packet received: OK
infrun: skipping breakpoint: stepping past insn at: 0x8680
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sending packet: $Z0,b6fe86c8,4#82...Packet received: OK
infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=1, current thread [Thread 3991.3991] at 0x868
breakpoint.c:should_be_inserted thinks the breakpoint shouldn't be
inserted, which is wrong. This patch restrict the condition that
only skip the non-single-step breakpoints if they are inserted at
the place we are stepping over, however we don't want to skip
single-step breakpoint if its thread is the thread we are stepping
over, so in this patch, I add a thread num in 'struct step_over_info'
to record the thread we're stepping over.
gdb:
2016-04-25 Yao Qi <yao.qi@linaro.org>
* breakpoint.c (should_be_inserted): Return 0 if the location's
owner is not single step breakpoint or single step breakpoint's
thread isn't the thread which is stepping past a breakpoint.
* gdbarch.sh (software_single_step): Update comments.
* gdbarch.h: Regenerated.
* infrun.c (struct step_over_info) <thread>: New field.
(set_step_over_info): New argument 'thread'. Callers updated.
(clear_step_over_info): Set field thread to -1.
(thread_is_stepping_over_breakpoint): New function.
* infrun.h (thread_is_stepping_over_breakpoint): Declaration.
2016-04-25 09:16:21 +01:00
|
|
|
|
2016-04-25 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (should_be_inserted): Return 0 if the location's
|
|
|
|
|
owner is not single step breakpoint or single step breakpoint's
|
|
|
|
|
thread isn't the thread which is stepping past a breakpoint.
|
|
|
|
|
* gdbarch.sh (software_single_step): Update comments.
|
|
|
|
|
* gdbarch.h: Regenerated.
|
|
|
|
|
* infrun.c (struct step_over_info) <thread>: New field.
|
|
|
|
|
(set_step_over_info): New argument 'thread'. Callers updated.
|
|
|
|
|
(clear_step_over_info): Set field thread to -1.
|
|
|
|
|
(thread_is_stepping_over_breakpoint): New function.
|
|
|
|
|
* infrun.h (thread_is_stepping_over_breakpoint): Declaration.
|
|
|
|
|
|
2016-04-22 19:39:12 -03:00
|
|
|
|
2016-04-22 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* ppc-linux-nat.c (ppc_linux_read_description): Use PPC_FEATURE_HAS_VSX
|
|
|
|
|
and PPC_FEATURE_HAS_ALTIVEC to check if such features are available.
|
|
|
|
|
|
2016-04-22 17:18:31 +01:00
|
|
|
|
2016-04-22 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* valops.c (read_value_memory): New local variable 'stack'.
|
|
|
|
|
Set it to either TARGET_OBJECT_STACK_MEMORY or
|
|
|
|
|
TARGET_OBJECT_MEMORY.
|
|
|
|
|
|
Centralize yacc interface names remapping (yyparse, yylex, yyerror, etc)
This factors out all the yy-variables remapping to a single file,
instead of each parser having to do the same, with different prefixes.
With this, a parser just needs to define the prefix they want and
include yy-remap.h, which does the dirty job.
Note this renames the c_error, ada_error, etc. functions. Writing the
remapping pattern as:
#define yyerror GDB_YY_REMAP (error)
instead of:
#define yyerror GDB_YY_REMAP (yyerror)
would have avoided the renaming. However, that would be problematic
if we have a macro 'foo' in scope, when we write:
#define yyfoo GDB_YY_REMAP (foo)
as that would expand 'foo'.
The c_yyerror etc. naming end ups indicating that this is a yacc
related function more clearly, so feels like a good change, anyway.
gdb/ChangeLog:
2016-04-22 Pedro Alves <palves@redhat.com>
* ada-exp.y: Remove all yy symbol remappings.
(GDB_YY_REMAP_PREFIX): Define.
Include "yy-remap.h".
* ada-lang.c (ada_language_defn): Adjust.
* ada-lang.h (ada_error): Rename to ...
(ada_yyerror): ... this.
* c-exp.y: Remove all yy symbol remappings.
(GDB_YY_REMAP_PREFIX): Define.
Include "yy-remap.h".
* c-lang.c (c_language_defn, cplus_language_defn)
(asm_language_defn, minimal_language_defn): Adjust.
* c-lang.h (c_error): Rename to ...
(c_yyerror): ... this.
* d-exp.y: Remove all yy symbol remappings.
(GDB_YY_REMAP_PREFIX): Define.
Include "yy-remap.h".
* d-lang.c (d_language_defn): Adjust.
* d-lang.h (d_error): Rename to ...
(d_yyerror): ... this.
* f-exp.y: Remove all yy symbol remappings.
(GDB_YY_REMAP_PREFIX): Define.
Include "yy-remap.h".
* f-lang.c (f_language_defn): Adjust.
* f-lang.h (f_error): Rename to ...
(f_yyerror): ... this.
* go-exp.y: Remove all yy symbol remappings.
(GDB_YY_REMAP_PREFIX): Define.
Include "yy-remap.h".
* go-lang.c (go_language_defn): Adjust.
* go-lang.h (go_error): Rename to ...
(go_yyerror): ... this.
* jv-exp.y: Remove all yy symbol remappings.
(GDB_YY_REMAP_PREFIX): Define.
Include "yy-remap.h".
* jv-lang.c (java_language_defn): Adjust.
* jv-lang.h (java_error): Rename to ...
(java_yyerror): ... this.
* m2-exp.y: Remove all yy symbol remappings.
(GDB_YY_REMAP_PREFIX): Define.
Include "yy-remap.h".
* m2-lang.c (m2_language_defn): Adjust.
* m2-lang.h (m2_error): Rename to ...
(m2_yyerror): ... this.
* objc-exp.y: Remove all yy symbol remappings.
(GDB_YY_REMAP_PREFIX): Define.
Include "yy-remap.h".
* objc-lang.c (objc_language_defn): Adjust.
* opencl-lang.c (opencl_language_defn): Adjust.
* p-exp.y: Remove all yy symbol remappings.
(GDB_YY_REMAP_PREFIX): Define.
Include "yy-remap.h".
* p-lang.c (pascal_language_defn): Adjust.
* p-lang.h (pascal_error): Rename to ...
(pascal_yyerror): ... this.
* yy-remap.h: New file.
2016-04-22 16:40:33 +01:00
|
|
|
|
2016-04-22 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ada-exp.y: Remove all yy symbol remappings.
|
|
|
|
|
(GDB_YY_REMAP_PREFIX): Define.
|
|
|
|
|
Include "yy-remap.h".
|
|
|
|
|
* ada-lang.c (ada_language_defn): Adjust.
|
|
|
|
|
* ada-lang.h (ada_error): Rename to ...
|
|
|
|
|
(ada_yyerror): ... this.
|
|
|
|
|
* c-exp.y: Remove all yy symbol remappings.
|
|
|
|
|
(GDB_YY_REMAP_PREFIX): Define.
|
|
|
|
|
Include "yy-remap.h".
|
|
|
|
|
* c-lang.c (c_language_defn, cplus_language_defn)
|
|
|
|
|
(asm_language_defn, minimal_language_defn): Adjust.
|
|
|
|
|
* c-lang.h (c_error): Rename to ...
|
|
|
|
|
(c_yyerror): ... this.
|
|
|
|
|
* d-exp.y: Remove all yy symbol remappings.
|
|
|
|
|
(GDB_YY_REMAP_PREFIX): Define.
|
|
|
|
|
Include "yy-remap.h".
|
|
|
|
|
* d-lang.c (d_language_defn): Adjust.
|
|
|
|
|
* d-lang.h (d_error): Rename to ...
|
|
|
|
|
(d_yyerror): ... this.
|
|
|
|
|
* f-exp.y: Remove all yy symbol remappings.
|
|
|
|
|
(GDB_YY_REMAP_PREFIX): Define.
|
|
|
|
|
Include "yy-remap.h".
|
|
|
|
|
* f-lang.c (f_language_defn): Adjust.
|
|
|
|
|
* f-lang.h (f_error): Rename to ...
|
|
|
|
|
(f_yyerror): ... this.
|
|
|
|
|
* go-exp.y: Remove all yy symbol remappings.
|
|
|
|
|
(GDB_YY_REMAP_PREFIX): Define.
|
|
|
|
|
Include "yy-remap.h".
|
|
|
|
|
* go-lang.c (go_language_defn): Adjust.
|
|
|
|
|
* go-lang.h (go_error): Rename to ...
|
|
|
|
|
(go_yyerror): ... this.
|
|
|
|
|
* jv-exp.y: Remove all yy symbol remappings.
|
|
|
|
|
(GDB_YY_REMAP_PREFIX): Define.
|
|
|
|
|
Include "yy-remap.h".
|
|
|
|
|
* jv-lang.c (java_language_defn): Adjust.
|
|
|
|
|
* jv-lang.h (java_error): Rename to ...
|
|
|
|
|
(java_yyerror): ... this.
|
|
|
|
|
* m2-exp.y: Remove all yy symbol remappings.
|
|
|
|
|
(GDB_YY_REMAP_PREFIX): Define.
|
|
|
|
|
Include "yy-remap.h".
|
|
|
|
|
* m2-lang.c (m2_language_defn): Adjust.
|
|
|
|
|
* m2-lang.h (m2_error): Rename to ...
|
|
|
|
|
(m2_yyerror): ... this.
|
|
|
|
|
* objc-exp.y: Remove all yy symbol remappings.
|
|
|
|
|
(GDB_YY_REMAP_PREFIX): Define.
|
|
|
|
|
Include "yy-remap.h".
|
|
|
|
|
* objc-lang.c (objc_language_defn): Adjust.
|
|
|
|
|
* opencl-lang.c (opencl_language_defn): Adjust.
|
|
|
|
|
* p-exp.y: Remove all yy symbol remappings.
|
|
|
|
|
(GDB_YY_REMAP_PREFIX): Define.
|
|
|
|
|
Include "yy-remap.h".
|
|
|
|
|
* p-lang.c (pascal_language_defn): Adjust.
|
|
|
|
|
* p-lang.h (pascal_error): Rename to ...
|
|
|
|
|
(pascal_yyerror): ... this.
|
|
|
|
|
* yy-remap.h: New file.
|
|
|
|
|
|
2016-04-22 16:18:33 +01:00
|
|
|
|
2016-04-22 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* common/common-exceptions.h (GDB_XCPT_TRY): Remove mention of
|
|
|
|
|
the foreign frames issue.
|
|
|
|
|
[__cplusplus] (GDB_XCPT): Define as GDB_XCPT_TRY.
|
|
|
|
|
|
Propagate GDB/C++ exceptions across readline using sj/lj-based TRY/CATCH
If we map GDB'S TRY/CATCH macros to C++ try/catch, GDB breaks on
systems where readline isn't built with exceptions support. The
problem is that readline calls into GDB through the callback
interface, and if GDB's callback throws a C++ exception/error, the
system unwinder won't manage to unwind past the readline frame, and
ends up calling std::terminate(), which aborts the process:
(gdb) whatever-command-that-causes-an-error
terminate called after throwing an instance of 'gdb_exception_RETURN_MASK_ERROR'
Aborted
$
This went unnoticed for so long because:
- the x86-64 ABI requires -fasynchronous-unwind-tables, making it
possible for exceptions to cross readline with no special handling.
But e.g., on ARM or AIX, unless you build readline with
-fexceptions, you trip on the problem.
- TRY/CATCH was mapped to setjmp/longjmp, even in C++ mode, until
quite recently.
The fix is to catch and save any GDB exception that is thrown inside
the GDB readline callback, and then once the callback returns back to
the GDB code that called into readline in the first place, rethrow the
saved GDB exception.
This is similar in spirit to how we catch/map GDB exceptions at the
GDB/Python and GDB/Guile API boundaries.
The next question is then: if we intercept all exceptions within GDB's
readline callback, should we simply return normally to readline? The
callback prototype has no way to signal an error back to readline (*).
The answer is no -- if we return normally, we'll be returning to a
loop inside rl_callback_read_char that continues processing pending
input, calling into GDB again, redisplaying the prompt, etc. Thus if
we want to error out of rl_callback_read_char, we need to long jump
across it, just like we always did before TRY/CATCH were ever mapped
to C++ exceptions.
My first approach built a specialized API to handle this, with a
couple macros to hide the setjmp/longjmp and the struct gdb_exception
saving/rethrowing.
However, I realized that we need to:
- Handle multiple active rl_callback_read_char invocations. If,
while processing input something triggers a secondary prompt, we
end up in a nested rl_callback_read_char call, through
gdb_readline_wrapper.
- Propagate a struct gdb_exception along with the longjmp.
... and that this is exactly what the setjmp/longjmp-based TRY/CATCH
does.
So the fix makes the setjmp/longjmp TRY/CATCH always available under
new TRY_SJLJ/CATCH_SJLJ aliases, even when TRY/CATCH is mapped to C++
try/catch, and then uses TRY_SJLJ/CATCH_SJLJ to propagate GDB
exceptions across the readline callback.
This turns out to be a much better looking fix than my bespoke API
attempt, even. We'll probably be able to simplify TRY_SJLJ/CATCH_SJLJ
when we finally get rid of TRY/CATCH all over the tree, but until
then, this reuse seems quite nice for avoiding a second parallel
setjmp/longjmp mechanism.
(*) - maybe we could propose a readline API change, but we still need
to handle current readline, anyway.
gdb/ChangeLog:
2016-04-22 Pedro Alves <palves@redhat.com>
* common/common-exceptions.c (enum catcher_state, struct catcher)
(current_catcher): Define in C++ mode too.
(exceptions_state_mc_catch): Call throw_exception_sjlj instead of
throw_exception.
(throw_exception_sjlj, throw_exception_cxx): New functions,
factored out from throw_exception.
(throw_exception): Reimplement.
* common/common-exceptions.h (exceptions_state_mc_init)
(exceptions_state_mc_action_iter)
(exceptions_state_mc_action_iter_1, exceptions_state_mc_catch):
Declare in C++ mode too.
(TRY): Rename to ...
(TRY_SJLJ): ... this.
(CATCH): Rename to ...
(CATCH_SJLJ): ... this.
(END_CATCH): Rename to ...
(END_CATCH_SJLJ): ... this.
[GDB_XCPT == GDB_XCPT_SJMP] (TRY, CATCH, END_CATCH): Map to SJLJ
equivalents.
(throw_exception): Update comments.
(throw_exception_sjlj): Declare.
* event-top.c (gdb_rl_callback_read_char_wrapper): Extend intro
comment. Wrap body in TRY_SJLJ/CATCH_SJLJ and rethrow any
intercepted exception.
(gdb_rl_callback_handler): New function.
(gdb_rl_callback_handler_install): Always install
gdb_rl_callback_handler as readline callback.
2016-04-22 16:18:33 +01:00
|
|
|
|
2016-04-22 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* common/common-exceptions.c (enum catcher_state, struct catcher)
|
|
|
|
|
(current_catcher): Define in C++ mode too.
|
|
|
|
|
(exceptions_state_mc_catch): Call throw_exception_sjlj instead of
|
|
|
|
|
throw_exception.
|
|
|
|
|
(throw_exception_sjlj, throw_exception_cxx): New functions,
|
|
|
|
|
factored out from throw_exception.
|
|
|
|
|
(throw_exception): Reimplement.
|
|
|
|
|
* common/common-exceptions.h (exceptions_state_mc_init)
|
|
|
|
|
(exceptions_state_mc_action_iter)
|
|
|
|
|
(exceptions_state_mc_action_iter_1, exceptions_state_mc_catch):
|
|
|
|
|
Declare in C++ mode too.
|
|
|
|
|
(TRY): Rename to ...
|
|
|
|
|
(TRY_SJLJ): ... this.
|
|
|
|
|
(CATCH): Rename to ...
|
|
|
|
|
(CATCH_SJLJ): ... this.
|
|
|
|
|
(END_CATCH): Rename to ...
|
|
|
|
|
(END_CATCH_SJLJ): ... this.
|
|
|
|
|
[GDB_XCPT == GDB_XCPT_SJMP] (TRY, CATCH, END_CATCH): Map to SJLJ
|
|
|
|
|
equivalents.
|
|
|
|
|
(throw_exception): Update comments.
|
|
|
|
|
(throw_exception_sjlj): Declare.
|
|
|
|
|
* event-top.c (gdb_rl_callback_read_char_wrapper): Extend intro
|
|
|
|
|
comment. Wrap body in TRY_SJLJ/CATCH_SJLJ and rethrow any
|
|
|
|
|
intercepted exception.
|
|
|
|
|
(gdb_rl_callback_handler): New function.
|
|
|
|
|
(gdb_rl_callback_handler_install): Always install
|
|
|
|
|
gdb_rl_callback_handler as readline callback.
|
|
|
|
|
|
2016-04-22 16:18:33 +01:00
|
|
|
|
2016-04-22 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (rl_callback_read_char_wrapper): Rename to ...
|
|
|
|
|
(gdb_rl_callback_read_char_wrapper): ... this.
|
|
|
|
|
(change_line_handler, gdb_setup_readline): Adjust.
|
|
|
|
|
|
2016-04-22 15:53:05 +01:00
|
|
|
|
2016-04-22 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* aarch32-linux-nat.c (aarch32_gp_regcache_supply): Clear CPSR
|
|
|
|
|
bits 20 to 23.
|
|
|
|
|
|
2016-04-22 10:16:31 -04:00
|
|
|
|
2016-04-22 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINER: Remove myself as AIX Maintainer.
|
|
|
|
|
|
2016-04-18 14:17:18 +01:00
|
|
|
|
2016-04-22 Maciej W. Rozycki <macro@imgtec.com>
|
|
|
|
|
|
|
|
|
|
* mips-tdep.c (mips_gdbarch_init): For GDB_OSABI_LINUX set
|
|
|
|
|
`num_regs' to 90 rather than 79. Where a target description is
|
|
|
|
|
present adjust the setting appropriately.
|
|
|
|
|
|
2016-04-21 17:28:58 +01:00
|
|
|
|
2016-04-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* common/common-exceptions.h (GDB_XCPT_TRY): Add comment.
|
|
|
|
|
(GDB_XCPT): Always define as GDB_XCPT_SJMP.
|
|
|
|
|
|
Fix AIX gdb build with C++ compiler
We currently get:
../../src/gdb/aix-thread.c: In function 'int pdc_read_data(pthdb_user_t, void*, pthdb_addr_t, size_t)':
../../src/gdb/aix-thread.c:465:46: error: invalid conversion from 'void*' to 'gdb_byte* {aka unsigned char*}' [-fpermissive]
status = target_read_memory (addr, buf, len);
^
../../src/gdb/aix-thread.c: In function 'void aix_thread_resume(target_ops*, ptid_t, int, gdb_signal)':
../../src/gdb/aix-thread.c:1010:46: error: invalid conversion from 'void*' to 'int*' [-fpermissive]
gdb_signal_to_host (sig), (void *) tid);
^
../../src/gdb/aix-thread.c:243:1: error: initializing argument 5 of 'int ptrace64aix(int, int, long long int, int, int*)' [-fpermissive]
ptrace64aix (int req, int id, long long addr, int data, int *buf)
../../src/gdb/rs6000-nat.c: In function 'gdb_byte* rs6000_ptrace_ldinfo(ptid_t)':
../../src/gdb/rs6000-nat.c:596:36: error: invalid conversion from 'void*' to 'gdb_byte* {aka unsigned char*}' [-fpermissive]
gdb_byte *ldi = xmalloc (ldi_size);
^
../../src/gdb/rs6000-nat.c:615:36: error: invalid conversion from 'void*' to 'gdb_byte* {aka unsigned char*}' [-fpermissive]
ldi = xrealloc (ldi, ldi_size);
^
(and more instances of the same).
gdb/ChangeLog:
2016-04-21 Pedro Alves <palves@redhat.com>
* aix-thread.c (pdc_read_data, pdc_write_data): Add cast.
(aix_thread_resume): Use PTRACE_TYPE_ARG5.
* rs6000-nat.c (rs6000_ptrace64): Use PTRACE_TYPE_ARG5.
(rs6000_ptrace_ldinfo): Change type of 'ldi' local to void
pointer, and cast return to gdb_byte pointer.
2016-04-21 14:02:20 +01:00
|
|
|
|
2016-04-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* aix-thread.c (pdc_read_data, pdc_write_data): Add cast.
|
|
|
|
|
(aix_thread_resume): Use PTRACE_TYPE_ARG5.
|
|
|
|
|
* rs6000-nat.c (rs6000_ptrace64): Use PTRACE_TYPE_ARG5.
|
|
|
|
|
(rs6000_ptrace_ldinfo): Change type of 'ldi' local to void
|
|
|
|
|
pointer, and cast return to gdb_byte pointer.
|
|
|
|
|
|
Fix s390 GNU/Linux gdb and gdbserver builds
Now that gdb/gdbserver compile as C++ programs by default, the s390
GNU/Linux build started failing with:
In file included from ../../src/gdb/common/common-defs.h:64:0,
from ../../src/gdb/defs.h:28,
from ../../src/gdb/s390-linux-nat.c:22:
../../src/gdb/s390-linux-nat.c: In function ‘void fetch_regset(regcache*, int, int, int, const regset*)’:
../../src/gdb/../include/libiberty.h:711:38: error: invalid conversion from ‘void*’ to ‘gdb_byte* {aka unsigned char*}’ [-fpermissive]
# define alloca(x) __builtin_alloca(x)
^
../../src/gdb/s390-linux-nat.c:297:19: note: in expansion of macro ‘alloca’
gdb_byte *buf = alloca (regsize);
^
etc.
gdb/ChangeLog:
2016-04-21 Pedro Alves <palves@redhat.com>
* s390-linux-nat.c (fetch_regset, store_regset, check_regset): Use
void * instead of gdb_byte *.
gdb/gdbserver/ChangeLog:
2016-04-21 Pedro Alves <palves@redhat.com>
* linux-s390-low.c (s390_collect_ptrace_register)
(s390_supply_ptrace_register, s390_get_hwcap): Use gdb_byte * and
add casts.
(s390_check_regset): Use void * instead of gdb_byte *.
2016-04-21 06:42:13 -04:00
|
|
|
|
2016-04-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* s390-linux-nat.c (fetch_regset, store_regset, check_regset): Use
|
|
|
|
|
void * instead of gdb_byte *.
|
|
|
|
|
|
2016-04-21 11:34:18 +01:00
|
|
|
|
2016-04-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2read.c (try_open_dwop_file, open_dwo_file)
|
|
|
|
|
(file_file_name, file_full_name): Add char * cast to sentinel in
|
|
|
|
|
concat/reconcat calls.
|
|
|
|
|
* event-top.c (top_level_prompt): Likewise.
|
|
|
|
|
* guile/guile.c (initialize_scheme_side): Likewise.
|
|
|
|
|
* linux-tdep.c (linux_fill_prpsinfo): Likewise.
|
|
|
|
|
* macrotab.c (macro_source_fullname): Likewise.
|
|
|
|
|
* main.c (get_init_files, captured_main): Likewise.
|
|
|
|
|
* psymtab.c (psymtab_to_fullname): Likewise.
|
|
|
|
|
* python/python.c (_initialize_python)
|
|
|
|
|
(gdbpy_finish_initialization): Likewise.
|
|
|
|
|
* source.c (symtab_to_fullname): Likewise.
|
|
|
|
|
|
2016-04-20 23:20:15 +01:00
|
|
|
|
2016-04-20 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* build-with-cxx.m4 (GDB_AC_BUILD_WITH_CXX): Default to yes.
|
|
|
|
|
* configure: Renegerate.
|
|
|
|
|
|
2016-04-20 20:13:23 +01:00
|
|
|
|
2016-04-20 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* darwin-nat.c (darwin_decode_message): Use gdb_signal_from_host.
|
|
|
|
|
|
2016-04-20 20:15:21 +01:00
|
|
|
|
2016-04-20 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* aarch64-tdep.c (aarch64_record_load_store): Change type of
|
|
|
|
|
'reg_rm_val' local to ULONGEST.
|
|
|
|
|
|
gdb/darwin-nat.c: Fix "cast to pointer from integer of different size" warning
Fixes, with gcc 5.3.0:
.../src/gdb/darwin-nat.c: In function 'void darwin_resume_thread(inferior*, darwin_thread_t*, int, int)':
.../src/gdb/darwin-nat.c:731:21: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
(caddr_t)thread->gdb_port, nsignal);
^
.../src/gdb/darwin-nat.c:84:35: note: in definition of macro 'PTRACE'
darwin_ptrace(#CMD, CMD, (PID), (ADDR), (SIG))
^
thread->gdb_port is an unsigned int, caddr_t is a void pointer.
gdb/ChangeLog:
2016-04-20 Pedro Alves <palves@redhat.com>
* darwin-nat.c (darwin_resume_thread): Add uintptr_t cast.
2016-04-20 21:42:57 +01:00
|
|
|
|
2016-04-20 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* darwin-nat.c (darwin_resume_thread): Add uintptr_t cast.
|
|
|
|
|
|
2016-04-20 10:17:12 -07:00
|
|
|
|
2016-04-20 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* symmisc.c (dump_symtab_1): Print owning compunit for identical
|
|
|
|
|
blockvectors.
|
|
|
|
|
|
2016-04-20 15:02:54 +01:00
|
|
|
|
2016-04-20 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* aarch32-linux-nat.c: Include "arch/arm-linux.h".
|
|
|
|
|
|
2016-04-20 12:31:53 +01:00
|
|
|
|
2016-04-20 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-linux-tdep.h (ARM_CPSR_GREGNUM): Move it to ...
|
|
|
|
|
* arch/arm-linux.h: ... here.
|
|
|
|
|
|
2016-01-19 11:02:09 -08:00
|
|
|
|
2016-04-19 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Change xstateregs
|
|
|
|
|
to void *.
|
|
|
|
|
(amd64bsd_store_inferior_registers): Likewise.
|
|
|
|
|
* fbsd-nat.c (resume_one_thread_cb): Explicitly cast data to ptid_t *.
|
|
|
|
|
(resume_all_threads_cb): Likewise.
|
|
|
|
|
* i386bsd-nat.c (i386bsd_supply_gregset): Cast gregs to char *.
|
|
|
|
|
(i386bsd_collect_gregset): Likewise.
|
|
|
|
|
(i386bsd_fetch_inferior_registers): Change xstateregs to void *.
|
|
|
|
|
(i386bsd_store_inferior_registers): Likewise.
|
|
|
|
|
|
2016-04-19 13:51:05 -07:00
|
|
|
|
2016-04-19 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* main.c (setup_alternate_signal_stack): Cast to char *.
|
|
|
|
|
|
2016-04-19 09:52:45 -07:00
|
|
|
|
2016-04-19 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* symmisc.c (dump_symtab_1, dump_symtab): Delete arg objfile.
|
|
|
|
|
All callers updated.
|
|
|
|
|
|
2016-04-19 09:01:44 -07:00
|
|
|
|
2016-04-19 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
2016-04-19 09:57:04 -07:00
|
|
|
|
PR gdb/17911
|
2016-04-19 09:01:44 -07:00
|
|
|
|
* source.c (is_regular_file): New arg errno_ptr.
|
|
|
|
|
All callers updated.
|
|
|
|
|
|
2016-04-19 16:53:40 +02:00
|
|
|
|
2016-04-19 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* linux-record.c (record_linux_system_call): Merge handling for
|
|
|
|
|
readlink/recv/read and pipe/pipe2.
|
|
|
|
|
|
2016-04-19 15:45:50 +02:00
|
|
|
|
2016-04-14 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* features/i386/amd64-mpx-linux.xml: Remove AVX feature.
|
|
|
|
|
* features/i386/amd64-mpx.xml: Remove AVX feature.
|
|
|
|
|
* features/i386/i386-mpx-linux.xml: Remove AVX feature.
|
|
|
|
|
* features/i386/i386-mpx.xml: Remove AVX feature.
|
|
|
|
|
* features/i386/amd64-mpx-linux.c: Regenerate.
|
|
|
|
|
* features/i386/amd64-mpx.c: Regenerate.
|
|
|
|
|
* features/i386/i386-mpx-linux.c: Regenerate.
|
|
|
|
|
* features/i386/i386-mpx.c: Regenerate.
|
|
|
|
|
* regformats/i386/amd64-mpx-linux.dat: Regenerate.
|
|
|
|
|
* regformats/i386/amd64-mpx.dat: Regenerate.
|
|
|
|
|
* regformats/i386/i386-mpx-linux.dat: Regenerate.
|
|
|
|
|
* regformats/i386/i386-mpx.dat: Regenerate.
|
|
|
|
|
|
Add target descriptions for AVX + MPX
The current MPX target descriptions assume that MPX is always combined
with AVX, however that's not correct. We can have machines with MPX
and without AVX; or machines with AVX and without MPX.
This patch adds new target descriptions for machines that support
both MPX and AVX, as duplicates of the existing MPX descriptions.
The following commit will remove AVX from the MPX-only descriptions.
2016-04-16 Walfred Tedeschi <walfred.tedeschi@intel.com>
gdb/ChangeLog:
* amd64-linux-tdep.c (features/i386/amd64-avx-mpx-linux.c):
New include.
(amd64_linux_core_read_description): Add case for
X86_XSTATE_AVX_MPX_MASK.
(_initialize_amd64_linux_tdep): Call initialize_tdesc_amd64_avx_mpx_linux.
* amd64-linux-tdep.h (tdesc_amd64_avx_mpx_linux): New definition.
* amd64-tdep.c (features/i386/amd64-avx-mpx.c): New include.
(amd64_target_description): Add case for X86_XSTATE_AVX_MPX_MASK.
(_initialize_amd64_tdep): Call initialize_tdesc_amd64_avx_mpx.
* common/x86-xstate.h (X86_XSTATE_MPX_MASK): Remove AVX bits.
(X86_XSTATE_AVX_MPX_MASK): New case.
* features/Makefile (i386/i386-avx-mpx, i386/i386-avx-mpx-linux)
(i386/amd64-avx-mpx, i386/amd64-avx-mpx-linux): New rules.
(i386/i386-avx-mpx-expedite, i386/i386-avx-mpx-linux-expedite)
(i386/amd64-avx-mpx-expedite, i386/amd64-avx-mpx-linux-expedite):
New expedites.
* i386-linux-tdep.c (features/i386/i386-avx-mpx-linux.c): New
include.
(i386_linux_core_read_description): Add case
X86_XSTATE_AVX_MPX_MASK.
(_initialize_i386_linux_tdep): Call
initialize_tdesc_i386_avx_mpx_linux.
* i386-linux-tdep.h (tdesc_i386_avx_mpx_linux): New include.
* i386-tdep.c (features/i386/i386-avx-mpx.c): New include.
(i386_target_description): Add case for X86_XSTATE_AVX_MPX_MASK.
* x86-linux-nat.c (x86_linux_read_description): Add case for
X86_XSTATE_AVX_MPX_MASK.
* features/i386/amd64-avx-mpx-linux.xml: New file.
* features/i386/i386-avx-mpx-linux.xml: New file.
* features/i386/i386-avx-mpx.xml: New file.
* features/i386/amd64-avx-mpx.xml: New file.
* features/i386/amd64-avx-mpx-linux.c: Generated.
* features/i386/amd64-avx-mpx.c: Generated.
* features/i386/i386-avx-mpx-linux.c: Generated.
* features/i386/i386-avx-mpx.c: Generated.
* regformats/i386/amd64-avx-mpx-linux.dat: Generated.
* regformats/i386/amd64-avx-mpx.dat: Generated.
* regformats/i386/i386-avx-mpx-linux.dat: Generated.
* regformats/i386/i386-avx-mpx.dat: Generated.
gdb/gdbserver/ChangeLog:
* Makefile.in (clean): Add removal for i386-avx-mpx.c,
i386-avx-mpx-linux.c, amd64-avx-mpx.c and amd64-avx-mpx-linux.c.
(i386-avx-mpx.c, i386-avx-mpx-linux.c, amd64-avx-mpx.c)
(amd64-avx-mpx-linux.c): New rules.
(amd64-avx-mpx-linux-ipa.o, i386-avx-mpx-linux-ipa.o): New rule.
* configure.srv (srv_i386_regobj): Add i386-avx-mpx.o.
(srv_i386_linux_regobj): Add i386-avx-mpx-linux.o.
(srv_amd64_regobj): Add amd64-avx-mpx.o.
(srv_amd64_linux_regobj): Add amd64-avx-mpx-linux.o.
(srv_i386_xmlfiles): Add i386/i386-avx-mpx.xml.
(srv_amd64_xmlfiles): Add i386/amd64-avx-mpx.xml.
(srv_i386_linux_xmlfiles): Add i386/i386-avx-mpx-linux.xml.
(srv_amd64_linux_xmlfiles): Add i386/amd64-avx-mpx-linux.xml.
(ipa_i386_linux_regobj): Add i386-avx-mpx-linux-ipa.o.
(ipa_amd64_linux_regobj): Add amd64-avx-mpx-linux-ipa.o.
* linux-x86-low.c (x86_linux_read_description): Add case for
X86_XSTATE_AVX_MPX_MASK.
(x86_get_ipa_tdesc_idx): Add cases for avx_mpx.
(initialize_low_arch): Call init_registers_amd64_avx_mpx_linux and
init_registers_i386_avx_mpx_linux.
* linux-i386-ipa.c (get_ipa_tdesc): Add case for avx_mpx.
(initialize_low_tracepoint): Call
init_registers_i386_avx_mpx_linux.
* linux-amd64-ipa.c (get_ipa_tdesc): Add case for avx_mpx.
(initialize_low_tracepoint): Call
init_registers_amd64_avx_mpx_linux.
* linux-x86-tdesc.h (X86_TDESC_AVX_MPX): New enum value.
(init_registers_amd64_avx_mpx_linux, tdesc_amd64_avx_mpx_linux)
(init_registers_i386_avx_mpx_linux, tdesc_i386_avx_mpx_linux): New
declarations.
2016-04-19 15:44:32 +02:00
|
|
|
|
2016-04-16 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* amd64-linux-tdep.c (features/i386/amd64-avx-mpx-linux.c):
|
|
|
|
|
New include.
|
|
|
|
|
(amd64_linux_core_read_description): Add case for
|
|
|
|
|
X86_XSTATE_AVX_MPX_MASK.
|
|
|
|
|
(_initialize_amd64_linux_tdep): Call initialize_tdesc_amd64_avx_mpx_linux.
|
|
|
|
|
* amd64-linux-tdep.h (tdesc_amd64_avx_mpx_linux): New definition.
|
|
|
|
|
* amd64-tdep.c (features/i386/amd64-avx-mpx.c): New include.
|
|
|
|
|
(amd64_target_description): Add case for X86_XSTATE_AVX_MPX_MASK.
|
|
|
|
|
(_initialize_amd64_tdep): Call initialize_tdesc_amd64_avx_mpx.
|
|
|
|
|
* common/x86-xstate.h (X86_XSTATE_MPX_MASK): Remove AVX bits.
|
|
|
|
|
(X86_XSTATE_AVX_MPX_MASK): New case.
|
|
|
|
|
* features/Makefile (i386/i386-avx-mpx, i386/i386-avx-mpx-linux)
|
|
|
|
|
(i386/amd64-avx-mpx, i386/amd64-avx-mpx-linux): New rules.
|
|
|
|
|
(i386/i386-avx-mpx-expedite, i386/i386-avx-mpx-linux-expedite)
|
|
|
|
|
(i386/amd64-avx-mpx-expedite, i386/amd64-avx-mpx-linux-expedite):
|
|
|
|
|
New expedites.
|
|
|
|
|
* i386-linux-tdep.c (features/i386/i386-avx-mpx-linux.c): New
|
|
|
|
|
include.
|
|
|
|
|
(i386_linux_core_read_description): Add case
|
|
|
|
|
X86_XSTATE_AVX_MPX_MASK.
|
|
|
|
|
(_initialize_i386_linux_tdep): Call
|
|
|
|
|
initialize_tdesc_i386_avx_mpx_linux.
|
|
|
|
|
* i386-linux-tdep.h (tdesc_i386_avx_mpx_linux): New include.
|
|
|
|
|
* i386-tdep.c (features/i386/i386-avx-mpx.c): New include.
|
|
|
|
|
(i386_target_description): Add case for X86_XSTATE_AVX_MPX_MASK.
|
|
|
|
|
* x86-linux-nat.c (x86_linux_read_description): Add case for
|
|
|
|
|
X86_XSTATE_AVX_MPX_MASK.
|
|
|
|
|
* features/i386/amd64-avx-mpx-linux.xml: New file.
|
|
|
|
|
* features/i386/i386-avx-mpx-linux.xml: New file.
|
|
|
|
|
* features/i386/i386-avx-mpx.xml: New file.
|
|
|
|
|
* features/i386/amd64-avx-mpx.xml: New file.
|
|
|
|
|
* features/i386/amd64-avx-mpx-linux.c: Generated.
|
|
|
|
|
* features/i386/amd64-avx-mpx.c: Generated.
|
|
|
|
|
* features/i386/i386-avx-mpx-linux.c: Generated.
|
|
|
|
|
* features/i386/i386-avx-mpx.c: Generated.
|
|
|
|
|
* regformats/i386/amd64-avx-mpx-linux.dat: Generated.
|
|
|
|
|
* regformats/i386/amd64-avx-mpx.dat: Generated.
|
|
|
|
|
* regformats/i386/i386-avx-mpx-linux.dat: Generated.
|
|
|
|
|
* regformats/i386/i386-avx-mpx.dat: Generated.
|
|
|
|
|
|
Fix PR gdb/19250: ptrace prototype is not detected properly in C++ mode
The ptrace args/return types detection doesn't work properly in C++
mode, on non-GNU/Linux hosts. For example, on gcc70 (NetBSD 5.1),
where the prototype is:
int ptrace(int, __pid_t, void*, int);
configure misdetects it as:
$ grep PTRACE_TYPE config.h
#define PTRACE_TYPE_ARG1 int
#define PTRACE_TYPE_ARG3 int *
#define PTRACE_TYPE_ARG4 int
/* #undef PTRACE_TYPE_ARG5 */
#define PTRACE_TYPE_RET int
resulting in:
../../src/gdb/amd64bsd-nat.c: In function 'void amd64bsd_fetch_inferior_registers(target_ops*, regcache*, int)':
../../src/gdb/amd64bsd-nat.c:56: warning: dereferencing type-punned pointer will break strict-aliasing rules
../../src/gdb/amd64bsd-nat.c: In function 'void amd64bsd_store_inferior_registers(target_ops*, regcache*, int)':
../../src/gdb/amd64bsd-nat.c:104: warning: dereferencing type-punned pointer will break strict-aliasing rules
../../src/gdb/amd64bsd-nat.c:110: warning: dereferencing type-punned pointer will break strict-aliasing rules
We could address this [1], however despite ptrace.m4's claim:
# Needs to be tested in C++ mode, to detect whether we need to cast
# the first argument to enum __ptrace_request.
it appears that there's actually no need to test in C++ mode. Always
running the ptrace tests in C mode works just the same on GNU/Linux.
I remember experimenting with several different ways to handle the
original issue back then, and maybe that was needed in some other
attempt and then I didn't realize it ended up not really necessary.
Confirmed that this fixes the NetBSD 5.1 C++ build, and confirmed that
C and C++ builds on Fedora 23 are unaffected.
[1] - https://sourceware.org/ml/gdb-patches/2016-04/msg00374.html
gdb/ChangeLog:
2016-04-18 Pedro Alves <palves@redhat.com>
* ptrace.m4 (GDB_AC_PTRACE): Don't run tests in C++ mode.
* configure: Regenerate.
gdb/gdbserver/ChangeLog:
2016-04-18 Pedro Alves <palves@redhat.com>
* configure: Regenerate.
2016-04-18 17:42:50 +01:00
|
|
|
|
2016-04-18 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ptrace.m4 (GDB_AC_PTRACE): Don't run tests in C++ mode.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
|
2016-04-18 10:58:14 -03:00
|
|
|
|
2016-04-18 Martin Galvan <martin.galvan@tallertechnologies.com>
|
|
|
|
|
|
|
|
|
|
* valops.c (value_addr): For C++ references, set the copied value's
|
|
|
|
|
enclosing_type as well.
|
|
|
|
|
|
2016-04-18 08:50:09 +01:00
|
|
|
|
2016-04-18 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
Revert:
|
|
|
|
|
2016-04-15 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (thumb_stack_frame_destroyed_p): Return zero if
|
|
|
|
|
PC is far from the end of function.
|
|
|
|
|
|
2016-04-16 01:24:08 +01:00
|
|
|
|
2016-04-16 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ada-exp.y (yydefred): Define as ada_yydefred.
|
|
|
|
|
|
2016-04-15 17:08:53 +01:00
|
|
|
|
2016-04-15 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ada-lang.c (ada_lookup_struct_elt_type): Constify 'type_str' and
|
|
|
|
|
'name_str' locals.
|
|
|
|
|
|
2016-04-15 21:14:07 +01:00
|
|
|
|
2016-04-15 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* btrace.c (pt_btrace_insn_flags): Change return type to
|
|
|
|
|
btrace_insn_flags. Use btrace_insn_flags for local.
|
|
|
|
|
|
2016-04-15 23:52:00 +01:00
|
|
|
|
2016-04-15 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* nat/linux-ptrace.h [__mips__] (GDB_ARCH_IS_TRAP_BRKPT): Also
|
|
|
|
|
accept TRAP_BRKPT.
|
|
|
|
|
[__mips__] (GDB_ARCH_IS_TRAP_HWBKPT): Also accept TRAP_HWBKPT.
|
|
|
|
|
|
2016-04-15 15:30:01 +01:00
|
|
|
|
2016-04-15 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (thumb_stack_frame_destroyed_p): Return zero if
|
|
|
|
|
PC is far from the end of function.
|
|
|
|
|
|
2016-04-14 12:58:03 +01:00
|
|
|
|
2016-04-14 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-cmds.c (alias_usage_error): New function.
|
|
|
|
|
(alias_command): Use it.
|
|
|
|
|
* ctf.c (ctf_save_metadata_header): Inline metadata_fmt local in
|
|
|
|
|
ctf_save_write_metadata call.
|
|
|
|
|
|
2016-04-14 12:58:03 +01:00
|
|
|
|
2016-04-14 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ada-typeprint.c (print_fixed_point_type): Don't pass float as
|
|
|
|
|
argument to function expecting LONGEST.
|
|
|
|
|
* value.c (unpack_long): Add casts to LONGEST.
|
|
|
|
|
|
2016-04-13 15:17:22 -05:00
|
|
|
|
2016-04-13 Luis Machado <lgustavo@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* exec.c (exec_file_locate_attach): Guard a couple functions
|
|
|
|
|
that can throw errors.
|
|
|
|
|
(exception_print_same): New helper function.
|
|
|
|
|
|
2016-04-13 14:34:00 +01:00
|
|
|
|
2016-04-13 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR remote/19840
|
|
|
|
|
* remote.c (struct remote_state) <last_resume_exec_dir>: New
|
|
|
|
|
field.
|
|
|
|
|
(new_remote_state): Default last_resume_exec_dir to EXEC_FORWARD.
|
|
|
|
|
(remote_open_1): Reset last_resume_exec_dir to EXEC_FORWARD.
|
|
|
|
|
(remote_resume): Store the last execution direction.
|
|
|
|
|
(remote_execution_direction): New function.
|
|
|
|
|
(init_remote_ops): Install it as to_execution_direction target_ops
|
|
|
|
|
method.
|
|
|
|
|
|
2016-04-12 17:49:24 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* common/common-exceptions.h (GDB_XCPT_TRY): Update comment.
|
|
|
|
|
[__cplusplus] (GDB_XCPT): Define as GDB_XCPT_TRY.
|
|
|
|
|
|
2016-04-12 17:20:04 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* common/common-exceptions.c (struct catcher) <buf>: Now a
|
|
|
|
|
'jmp_buf' instead of SIGJMP_BUF.
|
|
|
|
|
(exceptions_state_mc_init): Change return type to 'jmp_buf'.
|
|
|
|
|
(throw_exception): Use longjmp instead of SIGLONGJMP.
|
|
|
|
|
* common/common-exceptions.h: Include <setjmp.h> instead of
|
|
|
|
|
"gdb_setjmp.h".
|
|
|
|
|
(exceptions_state_mc_init): Change return type to 'jmp_buf'.
|
|
|
|
|
[GDB_XCPT == GDB_XCPT_SJMP] (TRY): Use setjmp instead of
|
|
|
|
|
SIGSETJMP.
|
|
|
|
|
* cp-support.c: Include "gdb_setjmp.h".
|
|
|
|
|
|
2016-04-12 17:17:13 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* common/common-exceptions.c (exception_rethrow): Remove
|
|
|
|
|
prepare_to_throw_exception call.
|
|
|
|
|
* common/common-exceptions.h (prepare_to_throw_exception): Delete
|
|
|
|
|
declaration.
|
|
|
|
|
* exceptions.c (prepare_to_throw_exception): Delete.
|
|
|
|
|
|
2016-04-12 16:49:32 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* target.c (target_check_pending_interrupt): Delete.
|
|
|
|
|
* target.h (struct target_ops) <to_check_pending_interrupt>:
|
|
|
|
|
Remove method.
|
|
|
|
|
(target_check_pending_interrupt): Remove declaration.
|
|
|
|
|
* target-delegates.c: Regenerate.
|
|
|
|
|
|
2016-04-12 16:49:32 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* defs.h: Update comments on SIGINT handling.
|
|
|
|
|
(immediate_quit): Delete declaration.
|
|
|
|
|
* event-loop.c (call_async_signal_handler): Delete.
|
|
|
|
|
* event-loop.h (call_async_signal_handler): Delete declaration.
|
|
|
|
|
(mark_async_signal_handler): Update comments.
|
|
|
|
|
(gdb_call_async_signal_handler): Delete declaration.
|
|
|
|
|
* event-top.c (handle_sigint): Call mark_async_signal_handler
|
|
|
|
|
instead of gdb_call_async_signal_handler.
|
|
|
|
|
* exceptions.c (prepare_to_throw_exception): Remove reference to
|
|
|
|
|
immediate_quit.
|
|
|
|
|
(exception_fprintf): Remove comments about immediate_quit.
|
|
|
|
|
* mingw-hdep.c (sigint_event, sigint_handler): Delete.
|
|
|
|
|
(gdb_select): Don't wait on sigint_event.
|
|
|
|
|
(gdb_call_async_signal_handler): Delete.
|
|
|
|
|
(_initialize_mingw_hdep): Delete.
|
|
|
|
|
* posix-hdep.c (gdb_call_async_signal_handler): Delete.
|
|
|
|
|
* utils.c (immediate_quit): Delete.
|
|
|
|
|
|
target remote: Don't rely on immediate_quit (introduce quit handlers)
remote.c is the last user of immediate_quit. It's relied on to
immediately break the initial remote connection sync up, if the user
does Ctrl-C, assuming that was because the target isn't responding.
At that stage, since the connection isn't synced yet, disconnecting is
the only safe thing to do. This commit reworks that, to not rely on
throwing from the SIGINT signal handler.
So, this commit:
- Introduces the concept of a "quit handler". This is used to
override what does the QUIT macro do when the quit flag is set.
- Makes the "struct serial" reachar / write code call QUIT in the
partial read/write loops, so the current quit handler is invoked
whenever a serial->read_prim / serial->write_prim returns EINTR.
- Makes the "struct serial" reachar / write code call
interruptible_select instead of gdb_select, so that QUITs are
detected in a race-free manner.
- Stops remote.c from setting immediate_quit during the initial
connection.
- Instead, we install a custom quit handler whenever we're calling
into the serial code. This custom quit handler knows to immediately
throw a quit when we're in the initial connection setup, and
otherwise defer handling the quit/Ctrl-C request to later, when
we're safely out of a packet command/response sequence. This also
is what is now responsible for handling "double Ctrl-C because
target connection is stuck/wedged."
- remote.c no longer installs a specialized SIGINT handlers, and
instead re-uses the quit flag. Since we want to rely on the QUIT
macro, the SIGINT handler must also set the quit. And the easiest
is just to not install custom SIGINT handler in remote.c. Let the
standard SIGINT handler do its job of setting the quit flag.
Centralizing SIGINT handlers seems like a good thing to me, anyway.
gdb/ChangeLog:
2016-04-12 Pedro Alves <palves@redhat.com>
* defs.h (quit_handler_ftype, quit_handler)
(make_cleanup_override_quit_handler, default_quit_handler): New.
(QUIT): Adjust comments.
* event-top.c (default_quit_handler): New function.
(quit_handler): New global.
(struct quit_handler_cleanup_data): New.
(restore_quit_handler, restore_quit_handler_dtor)
(make_cleanup_override_quit_handler): New.
(async_request_quit): Call QUIT.
* remote.c (struct remote_state) <got_ctrlc_during_io>: New field.
(async_sigint_remote_twice_token, async_sigint_remote_token):
Delete.
(remote_close): Update comments.
(remote_start_remote): Don't set immediate_quit. Set starting_up
earlier.
(remote_serial_quit_handler, remote_unpush_and_throw): New
functions.
(remote_open_1): Clear got_ctrlc_during_io. Set
remote_async_terminal_ours_p unconditionally.
(async_initialize_sigint_signal_handler)
(async_handle_remote_sigint, async_handle_remote_sigint_twice)
(remote_check_pending_interrupt, async_remote_interrupt)
(async_remote_interrupt_twice)
(async_cleanup_sigint_signal_handler, ofunc)
(sync_remote_interrupt, sync_remote_interrupt_twice): Delete.
(remote_terminal_inferior, remote_terminal_ours): Remove async
checks.
(remote_wait_as): Don't install a SIGINT handler in sync mode.
(readchar, remote_serial_write): Override the quit handler with
remote_serial_quit_handler.
(getpkt_or_notif_sane_1): Don't call QUIT.
(initialize_remote_ops): Don't install
remote_check_pending_interrupt.
(_initialize_remote): Don't create async_sigint_remote_token and
async_sigint_remote_twice_token.
* ser-base.c (ser_base_wait_for): Call QUIT and use
interruptible_select.
(ser_base_write): Call QUIT.
* ser-go32.c (dos_readchar, dos_write): Call QUIT.
* ser-unix.c (wait_for): Don't use VTIME. Always take the
gdb_select path, but call QUIT and interruptible_select.
* utils.c (maybe_quit): Call the current quit handler. Don't call
target_check_pending_interrupt.
(defaulted_query, prompt_for_continue): Override the quit handler
with the default quit handler.
2016-04-12 16:49:32 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* defs.h (quit_handler_ftype, quit_handler)
|
|
|
|
|
(make_cleanup_override_quit_handler, default_quit_handler): New.
|
|
|
|
|
(QUIT): Adjust comments.
|
|
|
|
|
* event-top.c (default_quit_handler): New function.
|
|
|
|
|
(quit_handler): New global.
|
|
|
|
|
(struct quit_handler_cleanup_data): New.
|
|
|
|
|
(restore_quit_handler, restore_quit_handler_dtor)
|
|
|
|
|
(make_cleanup_override_quit_handler): New.
|
|
|
|
|
(async_request_quit): Call QUIT.
|
|
|
|
|
* remote.c (struct remote_state) <got_ctrlc_during_io>: New field.
|
|
|
|
|
(async_sigint_remote_twice_token, async_sigint_remote_token):
|
|
|
|
|
Delete.
|
|
|
|
|
(remote_close): Update comments.
|
|
|
|
|
(remote_start_remote): Don't set immediate_quit. Set starting_up
|
|
|
|
|
earlier.
|
|
|
|
|
(remote_serial_quit_handler, remote_unpush_and_throw): New
|
|
|
|
|
functions.
|
|
|
|
|
(remote_open_1): Clear got_ctrlc_during_io. Set
|
|
|
|
|
remote_async_terminal_ours_p unconditionally.
|
|
|
|
|
(async_initialize_sigint_signal_handler)
|
|
|
|
|
(async_handle_remote_sigint, async_handle_remote_sigint_twice)
|
|
|
|
|
(remote_check_pending_interrupt, async_remote_interrupt)
|
|
|
|
|
(async_remote_interrupt_twice)
|
|
|
|
|
(async_cleanup_sigint_signal_handler, ofunc)
|
|
|
|
|
(sync_remote_interrupt, sync_remote_interrupt_twice): Delete.
|
|
|
|
|
(remote_terminal_inferior, remote_terminal_ours): Remove async
|
|
|
|
|
checks.
|
|
|
|
|
(remote_wait_as): Don't install a SIGINT handler in sync mode.
|
|
|
|
|
(readchar, remote_serial_write): Override the quit handler with
|
|
|
|
|
remote_serial_quit_handler.
|
|
|
|
|
(getpkt_or_notif_sane_1): Don't call QUIT.
|
|
|
|
|
(initialize_remote_ops): Don't install
|
|
|
|
|
remote_check_pending_interrupt.
|
|
|
|
|
(_initialize_remote): Don't create async_sigint_remote_token and
|
|
|
|
|
async_sigint_remote_twice_token.
|
|
|
|
|
* ser-base.c (ser_base_wait_for): Call QUIT and use
|
|
|
|
|
interruptible_select.
|
|
|
|
|
(ser_base_write): Call QUIT.
|
|
|
|
|
* ser-go32.c (dos_readchar, dos_write): Call QUIT.
|
|
|
|
|
* ser-unix.c (wait_for): Don't use VTIME. Always take the
|
|
|
|
|
gdb_select path, but call QUIT and interruptible_select.
|
|
|
|
|
* utils.c (maybe_quit): Call the current quit handler. Don't call
|
|
|
|
|
target_check_pending_interrupt.
|
|
|
|
|
(defaulted_query, prompt_for_continue): Override the quit handler
|
|
|
|
|
with the default quit handler.
|
|
|
|
|
|
2016-04-12 16:49:32 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* tui/tui-hooks.c (tui_target_has_run): Delete.
|
|
|
|
|
(tui_about_to_proceed): Delete.
|
|
|
|
|
(tui_about_to_proceed_observer): Delete.
|
|
|
|
|
(tui_install_hooks, tui_remove_hooks): Don't install/remove an
|
|
|
|
|
about_to_proceed observer.
|
|
|
|
|
|
Use target_terminal_ours_for_output in MI
The MI code only does output, so leave raw/cooked mode alone, as well
as the SIGINT handler. Restore terminal settings after output, while
at it. Also, a couple events missed calling target_terminal_ours
before output, even.
gdb/ChangeLog:
2016-04-12 Pedro Alves <palves@redhat.com>
* mi/mi-interp.c (mi_new_thread): Put
target_terminal_ours_for_output in effect while outputting.
(mi_thread_exit): Use target_terminal_ours_for_output instead of
target_terminal_ours.
(mi_record_changed, mi_inferior_added, mi_inferior_appeared)
(mi_inferior_exit, mi_inferior_removed, mi_traceframe_changed)
(mi_tsv_created, mi_tsv_deleted, mi_tsv_modified)
(mi_breakpoint_created, mi_breakpoint_deleted)
(mi_breakpoint_modified, mi_solib_loaded, mi_solib_unloaded)
(mi_command_param_changed, mi_memory_changed)
(report_initial_inferior): Use target_terminal_ours_for_output
instead of target_terminal_ours. Restore terminal settings.
* mi/mi-main.c (mi_execute_command): Use
target_terminal_ours_for_output instead of target_terminal_ours.
Restore terminal settings.
2016-04-12 16:49:32 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* mi/mi-interp.c (mi_new_thread): Put
|
|
|
|
|
target_terminal_ours_for_output in effect while outputting.
|
|
|
|
|
(mi_thread_exit): Use target_terminal_ours_for_output instead of
|
|
|
|
|
target_terminal_ours.
|
|
|
|
|
(mi_record_changed, mi_inferior_added, mi_inferior_appeared)
|
|
|
|
|
(mi_inferior_exit, mi_inferior_removed, mi_traceframe_changed)
|
|
|
|
|
(mi_tsv_created, mi_tsv_deleted, mi_tsv_modified)
|
|
|
|
|
(mi_breakpoint_created, mi_breakpoint_deleted)
|
|
|
|
|
(mi_breakpoint_modified, mi_solib_loaded, mi_solib_unloaded)
|
|
|
|
|
(mi_command_param_changed, mi_memory_changed)
|
|
|
|
|
(report_initial_inferior): Use target_terminal_ours_for_output
|
|
|
|
|
instead of target_terminal_ours. Restore terminal settings.
|
|
|
|
|
* mi/mi-main.c (mi_execute_command): Use
|
|
|
|
|
target_terminal_ours_for_output instead of target_terminal_ours.
|
|
|
|
|
Restore terminal settings.
|
|
|
|
|
|
2016-04-12 16:49:32 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19828
|
|
|
|
|
* gnu-nat.c (inf_validate_task_sc): Don't call
|
|
|
|
|
target_terminal_ours / target_terminal_inferior around query.
|
|
|
|
|
* i386-tdep.c (i386_record_lea_modrm, i386_process_record): Don't
|
|
|
|
|
call target_terminal_ours / target_terminal_inferior around
|
|
|
|
|
yquery.
|
|
|
|
|
* linux-record.c (record_linux_system_call): Don't call
|
|
|
|
|
target_terminal_ours / target_terminal_inferior around yquery.
|
|
|
|
|
* nto-procfs.c (interrupt_query): Don't call target_terminal_ours
|
|
|
|
|
/ target_terminal_inferior around query.
|
|
|
|
|
* record-full.c (record_full_check_insn_num): Remove
|
|
|
|
|
'set_terminal' parameter. Don't call target_terminal_ours /
|
|
|
|
|
target_terminal_inferior around query.
|
|
|
|
|
(record_full_message, record_full_registers_change)
|
|
|
|
|
(record_full_xfer_partial): Adjust.
|
|
|
|
|
* remote.c (interrupt_query): Don't call target_terminal_ours /
|
|
|
|
|
target_terminal_inferior around query.
|
|
|
|
|
* utils.c (defaulted_query): Install cleanup to restore target
|
|
|
|
|
terminal. Put target_terminal_ours_for_output in effect while
|
|
|
|
|
defaulted producing, and target_terminal_ours in in effect while
|
|
|
|
|
handling input.
|
|
|
|
|
(prompt_for_continue): Install cleanup to restore target terminal.
|
|
|
|
|
Put target_terminal_ours in in effect while handling input.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* utils.c (defaulted_query, prompt_for_continue): Free temporary
|
|
|
|
|
strings with cleanups, instead of xfree.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* utils.c (vwarning, internal_vproblem): Use
|
|
|
|
|
make_cleanup_restore_target_terminal and
|
|
|
|
|
target_terminal_ours_for_output.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* infcmd.c (post_create_inferior, prepare_one_step): Use
|
|
|
|
|
target_terminal_ours_for_output instead of target_terminal_ours.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* exceptions.c (print_flush): Use target_terminal_ours_for_output
|
|
|
|
|
instead of target_terminal_ours, and restore target terminal with
|
|
|
|
|
a cleanup.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cp-support.c (gdb_demangle): Use target_terminal_ours_for_output
|
|
|
|
|
instead of target_terminal_ours, and restore target terminal with
|
|
|
|
|
a cleanup.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ada-lang.c (type_as_string, type_as_string_and_cleanup): New
|
|
|
|
|
functions.
|
|
|
|
|
(ada_lookup_struct_elt_type): Use type_as_string_and_cleanup.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ser-base.c (fd_event): Retry read_prim on EINTR.
|
|
|
|
|
(do_ser_base_readchar): Retry read_prim on EINTR.
|
|
|
|
|
(ser_base_write): Retry write_prim on EINTR.
|
|
|
|
|
* ser-unix.c (ser_unix_read_prim): Don't retry on EINTR here.
|
|
|
|
|
(ser_unix_write_prim): Remove comment.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* remote.c (remote_pass_ctrlc): New function.
|
|
|
|
|
(init_remote_ops): Install it.
|
|
|
|
|
* target.c (target_terminal_inferior): Pass pending Ctrl-C to the
|
|
|
|
|
target.
|
|
|
|
|
(target_pass_ctrlc, default_target_pass_ctrlc): New functions.
|
|
|
|
|
* target.h (struct target_ops) <to_pass_ctrlc>: New method.
|
|
|
|
|
(target_pass_ctrlc, default_target_pass_ctrlc): New declarations.
|
|
|
|
|
* target-delegates.c: Regenerate.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* infcmd.c (interrupt_target_1): Call target_stop is in non-stop
|
|
|
|
|
mode.
|
|
|
|
|
* linux-nat.c (linux_nat_interrupt): Delete.
|
|
|
|
|
(linux_nat_add_target): Don't install linux_nat_interrupt.
|
|
|
|
|
* remote.c (remote_interrupt_ns): Change return type to void.
|
|
|
|
|
Throw error if interrupting the target is not supported.
|
|
|
|
|
(remote_interrupt): Don't call the remote_stop_ns/remote_stop_as.
|
|
|
|
|
|
2016-04-12 16:49:31 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* defs.h (clear_quit_flag): Remove declaration.
|
|
|
|
|
* extension-priv.h (struct extension_language_ops)
|
|
|
|
|
<clear_quit_flag>: Remove field and update comments.
|
|
|
|
|
* extension.c (clear_quit_flag): Delete.
|
|
|
|
|
* guile/guile.c (guile_extension_ops): Adjust.
|
|
|
|
|
* python/python.c (python_extension_ops): Adjust.
|
|
|
|
|
(gdbpy_clear_quit_flag): Delete.
|
|
|
|
|
|
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* main.c (captured_main): Don't clear the quit flag.
|
|
|
|
|
|
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* exceptions.c (prepare_to_throw_exception): Don't clear the quit
|
|
|
|
|
flag.
|
|
|
|
|
|
Don't call clear_quit_flag in command_handler
This just looks totally wrong to me, for completetly discarding a
user-requested Ctrl-C. I can't think of why we'd want do this here.
Actually, I digged the history, and found out that this has been here
since at least 7b4ac7e1ed2c (gdb-2.4, the initial revision, 1988), at
a time were we had a top level setjmp/longjmp, long before that got
wrapped in throw_exception and friends, and this code was in an
explicit loop, with the quit_flag cleared on every iteration, before
executing a command...
gdb/ChangeLog:
2016-04-12 Pedro Alves <palves@redhat.com>
* event-top.c (command_handler): Don't call clear_quit_flag.
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (command_handler): Don't call clear_quit_flag.
|
|
|
|
|
|
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* remote-sim.c (gdb_os_poll_quit): Don't call clear_quit_flag.
|
|
|
|
|
* remote.c (remote_wait_as): Don't call clear_quit_flag.
|
|
|
|
|
|
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* python/python.c: Include "ser-event.h".
|
|
|
|
|
(gdbpy_event_fds): Delete.
|
|
|
|
|
(gdbpy_serial_event): New.
|
|
|
|
|
(gdbpy_run_events): Change prototype. Use serial_event_clear
|
|
|
|
|
instead of serial_readchar.
|
|
|
|
|
(gdbpy_post_event): Use serial_event_set instead of serial_write.
|
|
|
|
|
(gdbpy_initialize_events): Use make_serial_event instead of
|
|
|
|
|
serial_pipe.
|
|
|
|
|
|
Introduce interruptible_select
We have places where we call a blocking gdb_select expecting that a
Ctrl-C will unblock it. However, if the Ctrl-C is pressed just before
gdb_select, the SIGINT handler runs before gdb_select, and thus
gdb_select won't return.
For example gdb_readline_no_editing:
QUIT;
/* Wait until at least one byte of data is available. Control-C
can interrupt gdb_select, but not fgetc. */
FD_ZERO (&readfds);
FD_SET (fd, &readfds);
if (gdb_select (fd + 1, &readfds, NULL, NULL, NULL) == -1)
and stdio_file_read:
/* For the benefit of Windows, call gdb_select before reading from
the file. Wait until at least one byte of data is available.
Control-C can interrupt gdb_select, but not read. */
{
fd_set readfds;
FD_ZERO (&readfds);
FD_SET (stdio->fd, &readfds);
if (gdb_select (stdio->fd + 1, &readfds, NULL, NULL, NULL) == -1)
return -1;
}
return read (stdio->fd, buf, length_buf);
This is a race classically fixed with either the self-pipe trick, or
by blocking SIGINT and then using pselect instead of select.
Blocking SIGINT most of the time would mean that check_quit_flag (and
thus QUIT) would need to do a syscall every time it is called, which
sounds best avoided, since QUIT is called in many loops. Thus we take
the self-pipe trick route (wrapped in a serial event).
Instead of having all places that need this manually add an extra file
descriptor to the set of gdb_select's watched file descriptors, we
introduce a wrapper, interruptible_select, that does that.
The Windows version of gdb_select actually does not suffer from this,
because mingw-hdep.c:gdb_call_async_signal_handler sets a Windows
event that gdb_select always waits on. So this patch can be seen as
generalization of that technique. We can't remove that extra event
from mingw-hdep.c until we get rid of immediate_quit though.
gdb/ChangeLog:
2016-04-12 Pedro Alves <palves@redhat.com>
* defs.h: Extend QUIT-related comments to mention
interruptible_select.
(quit_serial_event_set, quit_serial_event_clear): Declare.
* event-top.c: Include "ser-event.h" and "gdb_select.h".
(quit_serial_event): New global.
(async_init_signals): Make quit_serial_event.
(quit_serial_event_set, quit_serial_event_clear)
(quit_serial_event_fd, interruptible_select): New functions.
* extension.c (set_quit_flag): Set the quit serial event.
(check_quit_flag): Clear the quit serial event.
* gdb_select.h (interruptible_select): New declaration.
* guile/scm-ports.c (ioscm_input_waiting): Use
interruptible_select instead of gdb_select.
* top.c (gdb_readline_no_editing): Likewise.
* ui-file.c (stdio_file_read): Likewise.
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* defs.h: Extend QUIT-related comments to mention
|
|
|
|
|
interruptible_select.
|
|
|
|
|
(quit_serial_event_set, quit_serial_event_clear): Declare.
|
|
|
|
|
* event-top.c: Include "ser-event.h" and "gdb_select.h".
|
|
|
|
|
(quit_serial_event): New global.
|
|
|
|
|
(async_init_signals): Make quit_serial_event.
|
|
|
|
|
(quit_serial_event_set, quit_serial_event_clear)
|
|
|
|
|
(quit_serial_event_fd, interruptible_select): New functions.
|
|
|
|
|
* extension.c (set_quit_flag): Set the quit serial event.
|
|
|
|
|
(check_quit_flag): Clear the quit serial event.
|
|
|
|
|
* gdb_select.h (interruptible_select): New declaration.
|
|
|
|
|
* guile/scm-ports.c (ioscm_input_waiting): Use
|
|
|
|
|
interruptible_select instead of gdb_select.
|
|
|
|
|
* top.c (gdb_readline_no_editing): Likewise.
|
|
|
|
|
* ui-file.c (stdio_file_read): Likewise.
|
|
|
|
|
|
Fix signal handler/event-loop races
GDB's core signal handling suffers from a classical signal handler /
mainline code race:
int
gdb_do_one_event (void)
{
...
/* First let's see if there are any asynchronous signal handlers
that are ready. These would be the result of invoking any of the
signal handlers. */
if (invoke_async_signal_handlers ())
return 1;
...
/* Block waiting for a new event. (...). */
if (gdb_wait_for_event (1) < 0)
return -1;
...
}
If a signal is delivered while gdb is blocked in the poll/select
inside gdb_wait_for_event, then the select/poll breaks with EINTR,
we'll loop back around and call invoke_async_signal_handlers.
However, if the signal handler runs between
invoke_async_signal_handlers and gdb_wait_for_event,
gdb_wait_for_event will block, until the next unrelated event...
The fix is to a struct serial_event, and register it in the set of
files that select/poll in gdb_wait_for_event waits on. The signal
handlers that defer work to invoke_async_signal_handlers call
mark_async_signal_handler, which is adjusted to also set the new
serial event in addition to setting a flag, and is thus now is
garanteed to immediately unblock the next gdb_select/poll call, up
until invoke_async_signal_handlers is called and the event is cleared.
gdb/ChangeLog:
2016-04-12 Pedro Alves <palves@redhat.com>
* event-loop.c: Include "ser-event.h".
(async_signal_handlers_serial_event): New global.
(async_signals_handler, initialize_async_signal_handlers): New
functions.
(mark_async_signal_handler): Set
async_signal_handlers_serial_event.
(invoke_async_signal_handlers): Clear
async_signal_handlers_serial_event.
* event-top.c (async_init_signals): Call
initialize_async_signal_handlers.
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-loop.c: Include "ser-event.h".
|
|
|
|
|
(async_signal_handlers_serial_event): New global.
|
|
|
|
|
(async_signals_handler, initialize_async_signal_handlers): New
|
|
|
|
|
functions.
|
|
|
|
|
(mark_async_signal_handler): Set
|
|
|
|
|
async_signal_handlers_serial_event.
|
|
|
|
|
(invoke_async_signal_handlers): Clear
|
|
|
|
|
async_signal_handlers_serial_event.
|
|
|
|
|
* event-top.c (async_init_signals): Call
|
|
|
|
|
initialize_async_signal_handlers.
|
|
|
|
|
|
Introduce a serial interface for select'able events
This patch adds a new "event" struct serial type, that is an
abstraction specifically for waking up blocking waits/selects,
implemented on top of a pipe on POSIX, and on top of a native Windows
event (CreateEvent, etc.) on Windows.
This will be used to plug signal handler / mainline code races.
For example, GDB can indefinitely delay handling a quit request if the
user presses Ctrl-C between the last QUIT call and the next (blocking)
gdb_select call in the event loop:
QUIT;
<<< press ctrl-c here and end up blocked in gdb_select
indefinitely.
gdb_select (...); // whoops, SIGINT was already handled, no EINTR.
A global alone (either the quit flag, or the "ready" flag of the async
signal handlers in the event loop) is not sufficient.
To plug races such as these on POSIX systems, we have to register some
waitable file descriptor in the set of files gdb_select waits on, and
write to it from the signal handler. This is classically a pipe, and
the pattern called the self-pipe trick. On Linux, it could be a more
efficient eventfd instead, but I'm sticking with a pipe for
simplifity, as we need it for portability anyway.
(Alternatively, we could use pselect/ppoll, and block signals until
the pselect. The latter is not a design I think GDB could use,
because we want the QUIT macro to be super cheap, as it is used in
loops. Plus, Windows.)
This is a "struct serial" because Windows's gdb_select relies on that.
Windows's gdb_select, our "select" replacement, knows how to wait on
all kinds of handles (regular files, pipes, sockets, console, etc.)
unlike the native Windows "select" function, which can only wait on
sockets. Each file descriptor for a "serial" type that is not
normally waitable with WaitForMultipleObjects must have a
corresponding struct serial instance. gdb_select then internally
looks up the struct serial instance that wraps each file descriptor,
and asks it for the corresponding Windows waitable handle.
We could use serial_pipe() to create a "struct serial"-wrapped pipe
that is usable everywhere, including Windows. That's what currently
python/python.c uses for cross-thread posting of events.
However, serial_write and serial_readchar are not designed to be
async-signal-safe on POSIX hosts. It's easier to bypass those when
setting/clearing the event source.
And writing and a serial pipe is a bit heavy weight on Windows.
gdb_select requires an extra thread to wait on the pipe and several
Windows events, when a single manual-reset Windows event, with no
extra thread is sufficient.
The intended usage is simply:
- Call make_serial_event to create a serial event object.
- From the signal handler call serial_event_set to set the event.
- From mainline code, have select/poll wait for serial_event_fd(), in
addition to whatever other files you're about to wait for.
gdb/ChangeLog:
2016-04-12 Pedro Alves <palves@redhat.com>
* Makefile.in (SFILES): Add ser-event.c.
(HFILES_NO_SRCDIR): Add ser-event.h.
(COMMON_OBS): Add ser-event.o.
* ser-event.c, ser-event.h: New files.
* serial.c (new_serial): New function, factored out from
(serial_fdopen_ops): ... this.
(serial_open_ops_1): New function, factored out from
(serial_open): ... this.
(serial_open_ops): New function.
* serial.h (struct serial): Forware declare.
(serial_open_ops): New declaration.
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (SFILES): Add ser-event.c.
|
|
|
|
|
(HFILES_NO_SRCDIR): Add ser-event.h.
|
|
|
|
|
(COMMON_OBS): Add ser-event.o.
|
|
|
|
|
* ser-event.c, ser-event.h: New files.
|
|
|
|
|
* serial.c (new_serial): New function, factored out from
|
|
|
|
|
(serial_fdopen_ops): ... this.
|
|
|
|
|
(serial_open_ops_1): New function, factored out from
|
|
|
|
|
(serial_open): ... this.
|
|
|
|
|
(serial_open_ops): New function.
|
|
|
|
|
* serial.h (struct serial): Forware declare.
|
|
|
|
|
(serial_open_ops): New declaration.
|
|
|
|
|
|
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* serial.c (serial_open, serial_fdopen_ops, do_serial_close):
|
|
|
|
|
Remove references to name.
|
|
|
|
|
* serial.h (struct serial) <name>: Delete.
|
|
|
|
|
|
Stop remote-fileio.c from throwing from SIGINT handler
This code installs a custom signal handler that throws a quit
exception if remote_fio_no_longjmp is not set.
AFAICS, the only real reason for this might have been to unblock the
ui_file_read call, in remote_fileio_func_read. But ever since:
2009-11-13 Daniel Jacobowitz <dan@codesourcery.com>
* ui-file.c (stdio_file_read): Call gdb_select before read.
at:
https://sourceware.org/ml/gdb-patches/2009-11/msg00321.html
that call is interruptible.
This is not only useful for switching to native C++ exceptions, but
AFAICS, also fixes a potential mess up of the remote protocol
connection, since there are target_read_memory calls done while
remote_fio_no_longjmp is clear. If the user presses ctrl-c while GDB
is sending or receiving a packet, we'll stop the communication
immediately, at a point where it isn't safe.
gdbserver doesn't support the File I/O remote protocol extension so I
can't test this.
gdb/ChangeLog:
2016-04-12 Pedro Alves <palves@redhat.com>
* remote-fileio.c (sigint_fileio_token, remote_fio_no_longjmp):
Delete.
(async_remote_fileio_interrupt): Delete.
(remote_fileio_ctrl_c_signal_handler): Don't call the async signal
handler. Instead just always set the ctrl_c flag.
(remote_fileio_reply): Clear remote_fio_ctrl_c_flag before
re-enabling the SIGINT handler.
(remote_fileio_func_open, remote_fileio_func_close)
(remote_fileio_func_read, remote_fileio_func_write)
(remote_fileio_func_lseek, remote_fileio_func_rename)
(remote_fileio_func_unlink, remote_fileio_func_stat)
(remote_fileio_func_fstat, remote_fileio_func_gettimeofday)
(remote_fileio_func_isatty, remote_fileio_func_system)
(remote_fileio_request): Remove references to
remote_fio_no_longjmp.
(initialize_remote_fileio): Don't create an async signal handler.
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* remote-fileio.c (sigint_fileio_token, remote_fio_no_longjmp):
|
|
|
|
|
Delete.
|
|
|
|
|
(async_remote_fileio_interrupt): Delete.
|
|
|
|
|
(remote_fileio_ctrl_c_signal_handler): Don't call the async signal
|
|
|
|
|
handler. Instead just always set the ctrl_c flag.
|
|
|
|
|
(remote_fileio_reply): Clear remote_fio_ctrl_c_flag before
|
|
|
|
|
re-enabling the SIGINT handler.
|
|
|
|
|
(remote_fileio_func_open, remote_fileio_func_close)
|
|
|
|
|
(remote_fileio_func_read, remote_fileio_func_write)
|
|
|
|
|
(remote_fileio_func_lseek, remote_fileio_func_rename)
|
|
|
|
|
(remote_fileio_func_unlink, remote_fileio_func_stat)
|
|
|
|
|
(remote_fileio_func_fstat, remote_fileio_func_gettimeofday)
|
|
|
|
|
(remote_fileio_func_isatty, remote_fileio_func_system)
|
|
|
|
|
(remote_fileio_request): Remove references to
|
|
|
|
|
remote_fio_no_longjmp.
|
|
|
|
|
(initialize_remote_fileio): Don't create an async signal handler.
|
|
|
|
|
|
Don't set immediate_quit in prompt_for_continue
immediate_quit used to be necessary back when prompt_for_continue used
blocking fread, but nowadays it uses gdb_readline_wrapper, which is
implemented in terms of a nested event loop, which already knows how
to react to SIGINT:
#0 throw_it (reason=RETURN_QUIT, error=GDB_NO_ERROR, fmt=0x9d6d7e "Quit", ap=0x7fffffffcb88)
at .../src/gdb/common/common-exceptions.c:324
#1 0x00000000007bab5d in throw_vquit (fmt=0x9d6d7e "Quit", ap=0x7fffffffcb88) at .../src/gdb/common/common-exceptions.c:366
#2 0x00000000007bac9f in throw_quit (fmt=0x9d6d7e "Quit") at .../src/gdb/common/common-exceptions.c:385
#3 0x0000000000773a2d in quit () at .../src/gdb/utils.c:1039
#4 0x000000000065d81b in async_request_quit (arg=0x0) at .../src/gdb/event-top.c:893
#5 0x000000000065c27b in invoke_async_signal_handlers () at .../src/gdb/event-loop.c:949
#6 0x000000000065aeef in gdb_do_one_event () at .../src/gdb/event-loop.c:280
#7 0x0000000000770838 in gdb_readline_wrapper (prompt=0x7fffffffcd40 "---Type <return> to continue, or q <return> to quit---")
at .../src/gdb/top.c:873
The need for the QUIT in stdin_event_handler is then exposed by the
gdb.base/double-prompt-target-event-error.exp test, which has:
# We're now stopped in a pagination query while handling a
# target event (printing where the program stopped). Quitting
# the pagination should result in only one prompt being
# output.
send_gdb "\003p 1\n"
Without that change we'd get:
Continuing.
---Type <return> to continue, or q <return> to quit---PASS: gdb.base/double-prompt-target-event-error.exp: ctrlc target event: continue: continue to pagination
^CpQuit
(gdb) 1
Undefined command: "1". Try "help".
(gdb) PASS: gdb.base/double-prompt-target-event-error.exp: ctrlc target event: continue: first prompt
ERROR: Undefined command "".
UNRESOLVED: gdb.base/double-prompt-target-event-error.exp: ctrlc target event: continue: no double prompt
Vs:
Continuing.
---Type <return> to continue, or q <return> to quit---PASS: gdb.base/double-prompt-target-event-error.exp: ctrlc target event: continue: continue to pagination
^CQuit
(gdb) p 1
$1 = 1
(gdb) PASS: gdb.base/double-prompt-target-event-error.exp: ctrlc target event: continue: first prompt
PASS: gdb.base/double-prompt-target-event-error.exp: ctrlc target event: continue: no double prompt
gdb/ChangeLog:
2016-04-12 Pedro Alves <palves@redhat.com>
* event-top.c (stdin_event_handler): Call QUIT;
(prompt_for_continue): Don't run with immediate_quit set.
2016-04-12 16:49:30 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (stdin_event_handler): Call QUIT;
|
|
|
|
|
(prompt_for_continue): Don't run with immediate_quit set.
|
|
|
|
|
|
2016-04-12 16:49:29 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* tui/tui-io.c (tui_redisplay_readline): Check
|
|
|
|
|
gdb_in_secondary_prompt_p instead of immediate_quit.
|
|
|
|
|
* tui/tui.c: Include top.h.
|
|
|
|
|
(tui_rl_startup_hook): Check gdb_in_secondary_prompt_p instead of
|
|
|
|
|
immediate_quit.
|
|
|
|
|
|
2016-04-12 16:49:29 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* top.c (read_command_file): Inline command_loop here.
|
|
|
|
|
(command_loop): Delete.
|
|
|
|
|
|
2016-04-12 16:49:29 +01:00
|
|
|
|
2016-04-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* top.c: Include "gdb_select.h".
|
|
|
|
|
(gdb_readline_no_editing): Wait for input with gdb_select instead
|
|
|
|
|
of blocking in fgetc.
|
|
|
|
|
(command_line_input): Don't set immediate_quit.
|
|
|
|
|
|
2016-04-08 15:05:45 -03:00
|
|
|
|
2016-04-08 Martin Galvan <martin.galvan@tallertechnologies.com>
|
|
|
|
|
|
|
|
|
|
* value.c (value_next): Make pass-by-reference parameters const-correct.
|
|
|
|
|
(value_parent): Likewise.
|
|
|
|
|
(value_enclosing_type): Likewise.
|
|
|
|
|
(value_lazy): Likewise.
|
|
|
|
|
(value_stack): Likewise.
|
|
|
|
|
(value_embedded_offset): Likewise.
|
|
|
|
|
(value_pointed_to_offset): Likewise.
|
|
|
|
|
(value_raw_address): Likewise.
|
|
|
|
|
(deprecated_value_modifiable): Likewise.
|
|
|
|
|
(value_free_to_mark): Likewise.
|
|
|
|
|
(value_release_to_mark): Likewise.
|
|
|
|
|
(internalvar_name): Likewise.
|
|
|
|
|
(readjust_indirect_value_type): Likewise.
|
|
|
|
|
(value_initialized): Likewise.
|
|
|
|
|
* value.h (value_next): Likewise.
|
|
|
|
|
(value_parent): Likewise.
|
|
|
|
|
(value_enclosing_type): Likewise.
|
|
|
|
|
(value_lazy): Likewise.
|
|
|
|
|
(value_stack): Likewise.
|
|
|
|
|
(value_embedded_offset): Likewise.
|
|
|
|
|
(value_pointed_to_offset): Likewise.
|
|
|
|
|
(value_raw_address): Likewise.
|
|
|
|
|
(deprecated_value_modifiable): Likewise.
|
|
|
|
|
(value_free_to_mark): Likewise.
|
|
|
|
|
(value_release_to_mark): Likewise.
|
|
|
|
|
(internalvar_name): Likewise.
|
|
|
|
|
(readjust_indirect_value_type): Likewise.
|
|
|
|
|
(value_initialized): Likewise.
|
|
|
|
|
|
Make breakpoint handling in record-full idempotent
Some test fails in gdb.reverse/break-reverse.exp on arm-linux lead me
seeing the following error message,
continue^M
Continuing.^M
Cannot remove breakpoints because program is no longer writable.^M
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Further execution is probably impossible.^M
^M
Breakpoint 3, bar () at /home/yao/SourceCode/gnu/gdb/git/gdb/testsuite/gdb.reverse/break-reverse.c:22^M
22 xyz = 2; /* break in bar */^M
(gdb) PASS: gdb.reverse/break-reverse.exp: continue to breakpoint: bar backward
this is caused by two entries in record_full_breakpoints, and their addr
is the same, but in_target_beneath is different.
during the record, we do continue,
Continuing.
infrun: clear_proceed_status_thread (Thread 13772.13772)
infrun: proceed (addr=0xffffffff, signal=GDB_SIGNAL_DEFAULT)
infrun: step-over queue now empty
infrun: resuming [Thread 13772.13772] for step-over
infrun: skipping breakpoint: stepping past insn at: 0x8620
Sending packet: $Z0,85f4,4#1d...Packet received: OK <----
.....
Sending packet: $vCont;c#a8...infrun: target_wait (-1.0.0, status) =
infrun: -1.0.0 [process -1],
infrun: status->kind = ignore
infrun: TARGET_WAITKIND_IGNORE
infrun: prepare_to_wait
infrun: target_wait (-1.0.0, status) =
infrun: -1.0.0 [process -1],
infrun: status->kind = ignore
infrun: TARGET_WAITKIND_IGNORE
infrun: prepare_to_wait
Packet received: T05swbreak:;0b:9cf5ffbe;0d:9cf5ffbe;0f:f4850000;thread:p35cc.35cc;core:1;
Sending packet: $Z0,85f4,4#1d...Packet received: OK <-----
....
Sending packet: $z0,85f4,4#3d...Packet received: OK <-----
we can see breakpoint on 0x85f4 are inserted *twice*, but only removed
once. That is fine to remote target, because Z/z packets are
idempotent, but there is a leftover in record_full_breakpoints
in record-full target. The flow can be described as below,
record_full_breakpoints remote target
-----------------------------------------------------------------------
forward execution, continue, in_target_beneath 1 breakpoint inserted
insert breakpoints on 0x85f4 in_target_beneath 1
twice
program stops,
remove breakpoint on 0x85f4 in_target_beneath 1 breakpoint removed
reverse execution, continue, in_target_beneath 1 none is requested
insert breakpoints on 0x85f4, in_target_beneath 0
program stops,
remote breakpoint on 0x85f4, in_target_beneath 0 request to remove,
but GDBserver
doesn't know
now, the question is why breakoint on 0x85f4 is inserted twice? One
is the normal breakpoint, and the other is the single step breakpoint.
GDB inserts single step breakpoint to do single step. When program
stops at 0x85f4, both of them are set on 0x85f4, and GDB deletes
single step breakpoint, so in update_global_location_list, this
breakpoint location is no longer found, GDB call
force_breakpoint_reinsertion to mark it condition_updated, and insert
it again.
The reason force_breakpoint_reinsertion is called to update the
conditions in the target side, because the conditions may be
changed. My original fix is to not call force_breakpoint_reinsertion
if OLD_LOC->cond is NULL, but it is not correct if another location
on the same address has condition, GDB doesn't produce condition for
target side, but GDB should do.
Then, I change my mind back to make record-full handling breakpoint
idempotent, to align with remote target. Before insert a new entry
into record_full_breakpoints, look for existing one on the same
address first. I also add an assert on
"bp->in_target_beneath == in_target_beneath", to be safer.
gdb:
2016-04-07 Yao Qi <yao.qi@linaro.org>
* record-full.c (record_full_insert_breakpoint): Return
early if entry on the address is found in
record_full_breakpoints.
2016-04-07 16:47:26 +01:00
|
|
|
|
2016-04-07 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* record-full.c (record_full_insert_breakpoint): Return
|
|
|
|
|
early if entry on the address is found in
|
|
|
|
|
record_full_breakpoints.
|
|
|
|
|
|
2016-04-07 16:47:26 +01:00
|
|
|
|
2016-04-07 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* record-full.c (record_full_insert_breakpoint): Set
|
|
|
|
|
bp_tgt->reqstd_address and bp_tgt->placed_size.
|
|
|
|
|
|
2016-04-06 14:18:31 -07:00
|
|
|
|
2016-04-06 Don Breazeal <donb@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* value.c (value_actual_type): Don't try to get rtti type
|
|
|
|
|
of the value if it has been optimized out.
|
|
|
|
|
(value_optimized_out): If a memory access error occurs,
|
|
|
|
|
just check vaue->optimized_out.
|
|
|
|
|
|
2016-04-06 21:05:16 +02:00
|
|
|
|
2016-04-06 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
Revert the previous commit adding unknown_v_replies_ok.
|
|
|
|
|
|
2016-04-06 17:13:12 +02:00
|
|
|
|
2016-04-06 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* remote.c (struct remote_state): New field unknown_v_replies_ok.
|
|
|
|
|
(packet_config_support): Read it.
|
|
|
|
|
(remote_start_remote): Set it.
|
|
|
|
|
|
2016-04-06 16:48:27 +02:00
|
|
|
|
2016-04-06 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* remote.c: Revert check-in by a mistake in the previous commit.
|
|
|
|
|
|
2016-04-06 15:57:08 +02:00
|
|
|
|
2016-04-06 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* exec.c (exec_file_locate_attach): Print warning for unsupported
|
|
|
|
|
target_pid_to_exec_file.
|
|
|
|
|
* symfile-mem.c (add_vsyscall_page): Remove the "file" command
|
|
|
|
|
message part.
|
|
|
|
|
|
2016-04-04 16:46:36 -04:00
|
|
|
|
2016-04-04 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* cli/cli-decode.c (help_cmd_list): Fix function doc and remove
|
|
|
|
|
trailing spaces.
|
|
|
|
|
|
2016-04-01 16:00:59 +01:00
|
|
|
|
2016-04-01 Artemiy Volkov <artemiyv@acm.org>
|
|
|
|
|
|
|
|
|
|
PR gdb/19820
|
|
|
|
|
* eval.c (evaluate_subexp_standard): Allow TYPE_CODE_ENUM to be
|
|
|
|
|
the type of BINOP_REPEAT's second operand.
|
|
|
|
|
|
2016-03-31 19:28:47 +01:00
|
|
|
|
2016-03-31 Yichao Yu <yyc1992@gmail.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19858
|
|
|
|
|
* jit.c (jit_breakpoint_re_set_internal): Return 0 if we already
|
|
|
|
|
got the breakpoint at the right address.
|
|
|
|
|
(jit_inferior_created): New function.
|
|
|
|
|
(_initialize_jit): Install jit_inferior_created as
|
|
|
|
|
inferior_created observer.
|
|
|
|
|
|
2016-03-31 15:49:25 +02:00
|
|
|
|
2016-03-31 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention support for tracepoints on powerpc*-linux.
|
|
|
|
|
|
2016-02-29 16:16:19 +02:00
|
|
|
|
2016-03-31 Catalin Udma <catalin.udma@freescale.com>
|
|
|
|
|
|
|
|
|
|
PR python/19743
|
|
|
|
|
* python/python.c (execute_gdb_command): Use console uiout
|
|
|
|
|
when executing gdb command.
|
|
|
|
|
* utils.c (restore_ui_out_closure): New structure.
|
|
|
|
|
(do_restore_ui_out): New function.
|
|
|
|
|
(make_cleanup_restore_ui_out): Likewise.
|
|
|
|
|
* utils.h (make_cleanup_restore_ui_out): Declare.
|
|
|
|
|
|
Remove support for "target m32rsdi" and "target mips/pmon/ddb/rockhopper/lsi"
This removes support for:
| target | source |
|-------------------+-----------------------|
| target m32rsdi | gdb/remote-m32r-sdi.c |
| target mips | gdb/remote-mips.c |
| target pmon | gdb/remote-mips.c |
| target ddb | gdb/remote-mips.c |
| target rockhopper | gdb/remote-mips.c |
| target lsi | gdb/remote-mips.c |
That is:
- Remote M32R debugging over SDI.
- Debugging boards using the MIPS remote debugging protocol
over a serial line, PMON, and a few variants.
These are the last non-"target remote" remote targets in the tree, if
you don't count "target sim".
Refs:
https://sourceware.org/ml/gdb/2016-03/msg00004.html
https://sourceware.org/ml/gdb-patches/2016-03/msg00580.html
gdb/ChangeLog:
2016-03-31 Pedro Alves <palves@redhat.com>
* NEWS: Mention that support for "target m32rsdi", "target mips",
"target pmon", "target ddb", "target rockhopper", and "target lsi"
was removed.
* Makefile.in (ALL_TARGET_OBS): Remove remote-m32r-sdi.o and
remote-mips.o.
(ALLDEPFILES): Remove remote-m32r-sdi.c and remote-mips.c.
* configure.tgt: Remove all references to remote-m32r-sdi.o and
remote-mips.o.
* mips-tdep.c (deprecated_mips_set_processor_regs_hack): Delete
function.
* mips-tdep.h (deprecated_mips_set_processor_regs_hack): Delete
declaration.
* remote-m32r-sdi.c, remote-mips.c: Delete files.
* symfile.c (generic_load, generic_load): Remove comments.
gdb/doc/ChangeLog:
2016-03-31 Pedro Alves <palves@redhat.com>
* gdb.texinfo (M32R/SDI): Delete node.
(MIPS Embedded): Remove references to the MIPS remote debugging
protocol, PMON and variants, and the associated commands.
2016-03-31 13:24:34 +01:00
|
|
|
|
2016-03-31 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention that support for "target m32rsdi", "target mips",
|
|
|
|
|
"target pmon", "target ddb", "target rockhopper", and "target lsi"
|
|
|
|
|
was removed.
|
|
|
|
|
* Makefile.in (ALL_TARGET_OBS): Remove remote-m32r-sdi.o and
|
|
|
|
|
remote-mips.o.
|
|
|
|
|
(ALLDEPFILES): Remove remote-m32r-sdi.c and remote-mips.c.
|
|
|
|
|
* configure.tgt: Remove all references to remote-m32r-sdi.o and
|
|
|
|
|
remote-mips.o.
|
|
|
|
|
* mips-tdep.c (deprecated_mips_set_processor_regs_hack): Delete
|
|
|
|
|
function.
|
|
|
|
|
* mips-tdep.h (deprecated_mips_set_processor_regs_hack): Delete
|
|
|
|
|
declaration.
|
|
|
|
|
* remote-m32r-sdi.c, remote-mips.c: Delete files.
|
|
|
|
|
* symfile.c (generic_load, generic_load): Remove comments.
|
|
|
|
|
|
2016-03-30 17:02:46 +01:00
|
|
|
|
2016-03-30 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_epilogue_frame_this_id): Check 'func' against
|
|
|
|
|
0 rather than NULL.
|
|
|
|
|
|
Add arm epilogue unwinder
Nowadays, GDB can't unwind successfully from epilogue on arm,
(gdb) bt
#0 0x76ff65a2 in shr1 () from /home/yao/Source/gnu/build/gdb/testsuite/gdb.reverse/shr1.sl
#1 0x0000869e in main () at /home/yao/Source/gnu/build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.reverse/solib-reverse.c:34
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb) disassemble shr1
Dump of assembler code for function shr1:
....
0x76ff659a <+10>: adds r7, #12
0x76ff659c <+12>: mov sp, r7
0x76ff659e <+14>: ldr.w r7, [sp], #4
0x76ff65a2 <+18>: bx lr
End of assembler dump.
in this case, prologue unwinder is used. It analyzes the prologue and
get the offsets of saved registers to SP. However, in epilogue, the
SP has been restored, prologue unwinder gets the registers from the
wrong address, and even the frame id is wrong.
In reverse debugging, this case (program stops at the last instruction
of function) happens quite frequently due to the reverse execution.
There are many test fails due to missing epilogue unwinder.
This adds epilogue unwinder, but the frame cache is still get by
prologue unwinder except that SP is fixed up separately, because SP
is restored in epilogue.
This patch fixes many fails in solib-precsave.exp, and solib-reverse.exp.
gdb:
2016-03-30 Yao Qi <yao.qi@linaro.org>
* arm-tdep.c: (arm_make_epilogue_frame_cache): New function.
(arm_epilogue_frame_this_id): New function.
(arm_epilogue_frame_prev_register): New function.
(arm_epilogue_frame_sniffer): New function.
(arm_epilogue_frame_unwind): New.
(arm_gdbarch_init): Append unwinder arm_epilogue_frame_unwind.
2016-03-30 16:44:24 +01:00
|
|
|
|
2016-03-30 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c: (arm_make_epilogue_frame_cache): New function.
|
|
|
|
|
(arm_epilogue_frame_this_id): New function.
|
|
|
|
|
(arm_epilogue_frame_prev_register): New function.
|
|
|
|
|
(arm_epilogue_frame_sniffer): New function.
|
|
|
|
|
(arm_epilogue_frame_unwind): New.
|
|
|
|
|
(arm_gdbarch_init): Append unwinder arm_epilogue_frame_unwind.
|
|
|
|
|
|
2016-03-30 16:44:24 +01:00
|
|
|
|
2016-03-30 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_stack_frame_destroyed_p): Rename it ...
|
|
|
|
|
(arm_stack_frame_destroyed_p_1): ... here. Don't call
|
|
|
|
|
arm_pc_is_thumb.
|
|
|
|
|
(arm_stack_frame_destroyed_p): Call
|
|
|
|
|
thumb_stack_frame_destroyed_p and
|
|
|
|
|
arm_stack_frame_destroyed_p_1.
|
|
|
|
|
|
2016-03-29 23:48:35 -07:00
|
|
|
|
2016-03-30 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* python/py-utils.c (host_string_to_python_string): New function.
|
|
|
|
|
* python/python-internal.h (host_string_to_python_string): Declare it.
|
|
|
|
|
* python/py-*.c (*): Update all calls to
|
|
|
|
|
PyString_Decode (str, strlen (str), host_charset (), NULL);
|
|
|
|
|
to use host_string_to_python_string instead.
|
|
|
|
|
|
gdbserver: Handle 'v' packet while processing qSymbol.
On powerpc64, qSymbol query may require gdb to read a function
descriptor, sending a vFile packet to gdbserver. Thus, we need
to handle 'v' packet in look_up_one_symbol.
vFile replies may be quite long, and require reallocating own_buf.
Since handle_v_requests assumes the buffer is the static global own_buf
from server.c and reallocates it, we need to make own_buf global and
use it from look_up_one_symbol instead of using our own auto variable.
I've also done the same change in relocate_instruction, just in case.
On gdb side, in remote_check_symbols, rs->buf may be clobbered by vFile
handling, yet we need its contents for the reply (the symbol name is
stored there). Allocate a new buffer instead.
This broke fast tracepoints on powerpc64, due to errors in reading IPA
symbols.
gdb/ChangeLog:
* remote.c (remote_check_symbols): Allocate own buffer for reply.
gdbserver/ChangeLog:
* remote-utils.c (look_up_one_symbol): Remove own_buf, handle 'v'
packets.
(relocate_instruction): Remove own_buf.
* server.c (own_buf): Make global.
(handle_v_requests): Make global.
* server.h (own_buf): New declaration.
(handle_v_requests): New prototype.
2016-03-12 14:03:26 +01:00
|
|
|
|
2016-03-30 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* remote.c (remote_check_symbols): Allocate own buffer for reply.
|
|
|
|
|
|
2016-03-27 20:45:54 +03:00
|
|
|
|
2016-03-29 Max Filippov <jcmvbkbc@gmail.com>
|
|
|
|
|
|
|
|
|
|
* xtensa-tdep.c (xtensa_frame_cache): Change op1 type to LONGEST.
|
|
|
|
|
Use safe_read_memory_integer instead of read_memory_integer.
|
|
|
|
|
|
2016-03-29 23:18:19 +02:00
|
|
|
|
2016-03-29 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention support for tracepoints on s390*-linux.
|
|
|
|
|
|
2016-03-29 10:27:43 -07:00
|
|
|
|
2016-03-29 Don Breazeal <donb@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* gdb/value.c (value_actual_type): Fix formatting issue.
|
|
|
|
|
|
2016-03-23 11:21:20 +00:00
|
|
|
|
2016-03-23 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* gdbarch.sh (software_single_step): Remove comments.
|
|
|
|
|
* gdbarch.h: Regenerated.
|
|
|
|
|
|
2016-03-21 10:41:38 +00:00
|
|
|
|
2016-03-21 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_record_media): New.
|
|
|
|
|
(arm_record_ld_st_reg_offset): Call arm_record_media.
|
|
|
|
|
|
2016-03-21 10:22:59 +00:00
|
|
|
|
2016-03-21 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-linux-tdep.c (arm_canonicalize_syscall): Canonicalize
|
|
|
|
|
more syscalls.
|
|
|
|
|
|
2016-03-18 15:01:47 +00:00
|
|
|
|
2016-03-18 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* sparc-tdep.c (sparc_software_single_step): Make it static.
|
|
|
|
|
* sparc-tdep.h (sparc_software_single_step): Remove declaration.
|
|
|
|
|
|
2016-03-18 14:39:09 +00:00
|
|
|
|
2016-03-18 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* spu-tdep.c (spu_software_single_step): Throw error when
|
|
|
|
|
target_read_memory fails.
|
|
|
|
|
|
2016-03-17 18:17:30 +01:00
|
|
|
|
2016-03-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-thread-db.c (check_pid_namespace_match): Extend the message.
|
|
|
|
|
|
PR remote/19496, timeout in forking-threads-plus-bkpt
This patch addresses a failure in
gdb.threads/forking-threads-plus-breakpoint.exp:
FAIL: gdb.threads/forking-threads-plus-breakpoint.exp: cond_bp_target=1:
detach_on_fork=on: inferior 1 exited (timeout)
Cause:
A fork event was reported to GDB before GDB knew about the parent
thread, followed immediately by a breakpoint event in a different
thread. The parent thread was subsequently added via
remote_notice_new_inferior in process_stop_reply, but when the thread
was added the thread_info.state was set to THREAD_STOPPED. The fork
event was then handled correctly, but when the fork parent was resumed
via a call to keep_going, the state was unchanged.
The breakpoint event was then handled, which caused all the
non-breakpoint threads to be stopped. When the breakpoint thread was
resumed, all the non-breakpoint threads were resumed via
infrun.c:restart_threads. Our old fork parent wasn't restarted,
because it still had thread_info.state set to THREAD_STOPPED.
Ultimately the program under debug hung waiting for a pthread_join
while the old fork parent was stopped forever by GDB.
Fix:
Since this is non-stop, then the bug is that the thread should have
been added in THREAD_RUNNING state. Consider that infrun may be
pulling target events out of the target_ops backend into its own event
queue, but, not process them immediately. E.g., infrun may be
stopping all threads temporarily for a step-over-breakpoint operation
for thread A (stop_all_threads). The waitstatus of all threads is
thus left pending in the thread structure (save_status), including the
fork event of thread B. Right at this point, if the user does "info
threads", that should show thread B (the fork parent) running, not
stopped, even if internally, gdb is holding it paused for a little
bit.
Thus if in non-stop mode, always add new threads in the external
user-visible THREAD_RUNNING state. Change remote_notice_new_inferior
to accept the internal executing state of the thread instead, with
EXECUTING set to 1 when we discover a thread that is running on the
target (such as through remote_update_thread_list), and 0 when the
thread is really paused (such as when we see a stop reply).
Tested on x86_64 Linux and Nios II Linux target with x86 Linux host.
gdb/ChangeLog:
2016-03-17 Pedro Alves <palves@redhat.com>
Don Breazeal <donb@codesourcery.com>
PR remote/19496
* infcmd.c (notice_new_inferior): Use the 'leave_running' argument
instead of checking the 'non_stop' global.
* remote.c (remote_add_thread): New parameter 'executing'. Use it
to set the new thread's executing state.
(remote_notice_new_inferior): Rename parameter 'running' to
'executing'. Always set the thread state to THREAD_RUNNING in
non-stop mode, and to THREAD_STOPPED in all-stop mode. Pass
EXECUTING to remote_add_thread and notice_new_inferior.
(remote_update_thread_list): Update to pass executing state, not
running state.
2016-03-17 10:21:37 +00:00
|
|
|
|
2016-03-17 Pedro Alves <palves@redhat.com>
|
|
|
|
|
Don Breazeal <donb@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
PR remote/19496
|
|
|
|
|
* infcmd.c (notice_new_inferior): Use the 'leave_running' argument
|
|
|
|
|
instead of checking the 'non_stop' global.
|
|
|
|
|
* remote.c (remote_add_thread): New parameter 'executing'. Use it
|
|
|
|
|
to set the new thread's executing state.
|
|
|
|
|
(remote_notice_new_inferior): Rename parameter 'running' to
|
|
|
|
|
'executing'. Always set the thread state to THREAD_RUNNING in
|
|
|
|
|
non-stop mode, and to THREAD_STOPPED in all-stop mode. Pass
|
|
|
|
|
EXECUTING to remote_add_thread and notice_new_inferior.
|
|
|
|
|
(remote_update_thread_list): Update to pass executing state, not
|
|
|
|
|
running state.
|
|
|
|
|
|
2016-03-17 10:55:55 +01:00
|
|
|
|
2016-03-17 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* syscalls/s390-linux.xml: Add NUMA syscalls and new syscalls up
|
|
|
|
|
to 374.
|
|
|
|
|
* syscalls/s390x-linux.xml: Likewise.
|
|
|
|
|
|
2016-03-17 09:58:57 +01:00
|
|
|
|
2016-03-17 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* linux-record.c (record_mem_at_reg): New helper function.
|
|
|
|
|
(record_linux_system_call): Exploit new helper function where
|
|
|
|
|
applicable.
|
|
|
|
|
|
2016-03-17 09:58:57 +01:00
|
|
|
|
2016-03-17 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* linux-record.c: Fix whitespace issues; tabify, remove trailing
|
|
|
|
|
spaces.
|
|
|
|
|
|
2016-03-17 09:58:56 +01:00
|
|
|
|
2016-03-17 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* linux-record.c (record_linux_system_call): Add missing return
|
|
|
|
|
statements to handling of pipe and pipe2 syscalls.
|
|
|
|
|
|
2016-03-16 10:30:41 -07:00
|
|
|
|
2016-03-16 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* xml-tdesc.c (tdesc_start_enum): Fix c++ build.
|
|
|
|
|
|
2016-03-16 14:55:56 +00:00
|
|
|
|
2016-03-16 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-linux-tdep.c (arm_linux_init_abi): Fix
|
|
|
|
|
arm_linux_record_tdep.arg1, arm_linux_record_tdep.arg2 and
|
|
|
|
|
arm_linux_record_tdep.arg3. Set arm_linux_record_tdep.arg4,
|
|
|
|
|
arm_linux_record_tdep.arg5, arm_linux_record_tdep.arg6, and
|
|
|
|
|
arm_linux_record_tdep.arg7.
|
|
|
|
|
|
2016-03-15 15:18:28 -07:00
|
|
|
|
2016-03-15 Keith Seitz <keiths@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR breakpoints/18303
|
|
|
|
|
* cp-namespace.c (cp_lookup_bare_symbol): Change assertion to
|
|
|
|
|
look for "::" instead of simply ":".
|
|
|
|
|
(cp_search_static_and_baseclasses): Return null_block_symbol for
|
|
|
|
|
malformed input.
|
|
|
|
|
Remove assertions.
|
|
|
|
|
* cp-support.c (cp_find_first_component_aux): Do not return
|
|
|
|
|
a prefix length for ':' unless the next character is also ':'.
|
|
|
|
|
|
2016-03-15 14:43:49 -07:00
|
|
|
|
2016-03-15 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* features/aarch64-core.xml (cpsr_flags): New flags type.
|
|
|
|
|
(cpsr): Use it.
|
|
|
|
|
* features/aarch64.c: Regenerate.
|
|
|
|
|
|
2016-03-15 14:41:52 -07:00
|
|
|
|
2016-03-15 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* features/i386/32bit-core.xml (i386_eflags): Remove "end" spec.
|
|
|
|
|
* features/i386/32bit-sse.xml (i386_eflags): Ditto.
|
|
|
|
|
* features/i386/64bit-core.xml (i386_eflags): Ditto.
|
|
|
|
|
* features/i386/64bit-sse.xml (i386_eflags): Ditto.
|
|
|
|
|
* features/i386/x32-core.xml (i386_eflags): Ditto.
|
|
|
|
|
|
2016-03-15 14:37:29 -07:00
|
|
|
|
2016-03-15 Doug Evans <dje@google.com>
|
2016-03-15 15:02:13 -07:00
|
|
|
|
Wei-cheng Wang <cole945@gmail.com>
|
2016-03-15 14:37:29 -07:00
|
|
|
|
|
|
|
|
|
Extend flags to support multibit and enum bitfields.
|
2016-03-15 15:02:13 -07:00
|
|
|
|
* NEWS: Document new features.
|
2016-03-15 14:37:29 -07:00
|
|
|
|
* c-typeprint.c (c_type_print_varspec_prefix): Handle TYPE_CODE_FLAGS.
|
|
|
|
|
(c_type_print_varspec_suffix, c_type_print_base): Ditto.
|
|
|
|
|
* gdbtypes.c (arch_flags_type): Don't assume all fields are one bit.
|
|
|
|
|
(append_flags_type_field): New function.
|
|
|
|
|
(append_flags_type_flag): Call it.
|
|
|
|
|
* gdbtypes.h (append_flags_type_field): Declare.
|
|
|
|
|
* target-descriptions.c (struct tdesc_type_flag): Delete.
|
|
|
|
|
(enum tdesc_type_kind) <TDESC_TYPE_BOOL>: New enum value.
|
|
|
|
|
(enum tdesc_type_kind) <TDESC_TYPE_ENUM>: Ditto.
|
|
|
|
|
(struct tdesc_type) <u.f>: Delete.
|
|
|
|
|
(tdesc_predefined_types): Add "bool".
|
|
|
|
|
(tdesc_predefined_type): New function.
|
|
|
|
|
(tdesc_gdb_type): Handle TDESC_TYPE_BOOL, TDESC_TYPE_ENUM.
|
|
|
|
|
Update TDESC_TYPE_FLAGS support.
|
|
|
|
|
(tdesc_free_type): Handle TDESC_TYPE_ENUM. Update TDESC_TYPE_FLAGS.
|
|
|
|
|
(tdesc_create_flags): Update.
|
|
|
|
|
(tdesc_create_enum): New function.
|
|
|
|
|
(tdesc_add_field): Initialize start,end to -1.
|
|
|
|
|
(tdesc_add_typed_bitfield): New function.
|
|
|
|
|
(tdesc_add_bitfield): Call it.
|
|
|
|
|
(tdesc_add_flag): Allow TDESC_TYPE_STRUCT. Update.
|
|
|
|
|
(tdesc_add_enum_value): New function.
|
|
|
|
|
(maint_print_c_tdesc_cmd): Fold TDESC_TYPE_FLAGS support into
|
|
|
|
|
TDESC_TYPE_STRUCT. Handle TDESC_TYPE_ENUM.
|
|
|
|
|
* target-descriptions.h (tdesc_create_enum): Declare.
|
|
|
|
|
(tdesc_add_typed_bitfield, tdesc_add_enum_value): Declare.
|
|
|
|
|
* valprint.c (generic_val_print_enum_1): New function.
|
|
|
|
|
(generic_val_print_enum): Call it.
|
|
|
|
|
(val_print_type_code_flags): Make static. Handle multibit bitfields
|
|
|
|
|
and enum bitfields.
|
|
|
|
|
* valprint.h (val_print_type_code_flags): Delete.
|
|
|
|
|
* xml-tdesc.c (struct tdesc_parsing_data) <current_type_is_flags>:
|
|
|
|
|
Delete. All uses removed.
|
|
|
|
|
(tdesc_start_enum): New function.
|
|
|
|
|
(tdesc_start_field): Handle multibit and enum bitfields.
|
|
|
|
|
(tdesc_start_enum_value): New function.
|
|
|
|
|
(enum_value_attributes, enum_children, enum_attributes): New static
|
|
|
|
|
globals.
|
|
|
|
|
(feature_children): Add "enum".
|
|
|
|
|
* features/gdb-target.dtd (enum, evalue): New elements.
|
|
|
|
|
|
2016-03-15 12:57:06 -07:00
|
|
|
|
2016-03-15 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* target-descriptions.c (struct tdesc_type) <u.u.size>: Change type
|
|
|
|
|
from LONGEST to int.
|
|
|
|
|
(struct tdesc_type) <u.f.size>: Ditto.
|
|
|
|
|
(tdesc_set_struct_size): Change type of "size" arg from LONGEST
|
|
|
|
|
to int. Add assertion size > 0.
|
|
|
|
|
(tdesc_create_flags): Ditto.
|
|
|
|
|
* target-descriptions.h (tdesc_set_struct_size): Update.
|
|
|
|
|
(tdesc_create_flags): Update.
|
|
|
|
|
* xml-tdesc.c (MAX_FIELD_SIZE, MAX_FIELD_BITSIZE): New macros.
|
|
|
|
|
(MAX_VECTOR_SIZE): New macro.
|
|
|
|
|
(tdesc_start_struct): Catch conversion errors from LONGEST to int.
|
|
|
|
|
(tdesc_start_flags, tdesc_start_field, tdesc_start_vector): Ditto.
|
|
|
|
|
|
2016-03-15 12:53:55 -07:00
|
|
|
|
2016-03-15 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* target-descriptions.c (maint_print_c_tdesc_cmd): Use "type" for
|
|
|
|
|
TYPE_CODE_FLAGS instead of "field_type", for consistency.
|
|
|
|
|
* features/i386/amd64-avx-linux.c: Regenerate.
|
|
|
|
|
* features/i386/amd64-avx.c: Regenerate.
|
|
|
|
|
* features/i386/amd64-avx512-linux.c: Regenerate.
|
|
|
|
|
* features/i386/amd64-avx512.c: Regenerate.
|
|
|
|
|
* features/i386/amd64-linux.c: Regenerate.
|
|
|
|
|
* features/i386/amd64-mpx-linux.c: Regenerate.
|
|
|
|
|
* features/i386/amd64-mpx.c: Regenerate.
|
|
|
|
|
* features/i386/amd64.c: Regenerate.
|
|
|
|
|
* features/i386/i386-avx-linux.c: Regenerate.
|
|
|
|
|
* features/i386/i386-avx.c: Regenerate.
|
|
|
|
|
* features/i386/i386-avx512-linux.c: Regenerate.
|
|
|
|
|
* features/i386/i386-avx512.c: Regenerate.
|
|
|
|
|
* features/i386/i386-linux.c: Regenerate.
|
|
|
|
|
* features/i386/i386-mmx-linux.c: Regenerate.
|
|
|
|
|
* features/i386/i386-mmx.c: Regenerate.
|
|
|
|
|
* features/i386/i386-mpx-linux.c: Regenerate.
|
|
|
|
|
* features/i386/i386-mpx.c: Regenerate.
|
|
|
|
|
* features/i386/i386.c: Regenerate.
|
|
|
|
|
* features/i386/x32-avx-linux.c: Regenerate.
|
|
|
|
|
* features/i386/x32-avx.c: Regenerate.
|
|
|
|
|
* features/i386/x32-avx512-linux.c: Regenerate.
|
|
|
|
|
* features/i386/x32-avx512.c: Regenerate.
|
|
|
|
|
* features/i386/x32-linux.c: Regenerate.
|
|
|
|
|
* features/i386/x32.c: Regenerate.
|
|
|
|
|
|
2016-03-15 16:33:04 +00:00
|
|
|
|
2016-03-15 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19676
|
|
|
|
|
* linux-thread-db.c (try_thread_db_load_1): Leave
|
|
|
|
|
info->td_ta_thr_iter_p NULL iff debugging a live process and we
|
|
|
|
|
have /proc access.
|
|
|
|
|
(find_new_threads_once): Assert that we have a non-NULL
|
|
|
|
|
info->td_ta_thr_iter_p instead of checking whether the target has
|
|
|
|
|
execution.
|
|
|
|
|
|
Fix PR gdb/19676: Disable displaced stepping if /proc not mounted
On GNU/Linux archs that support displaced stepping, if /proc is not
mounted, GDB gets stuck not able to step past breakpoints:
(gdb) c
Continuing.
dl_main (phdr=<optimized out>, phnum=<optimized out>, user_entry=<optimized out>, auxv=<optimized out>) at rtld.c:2163
2163 LIBC_PROBE (init_complete, 2, LM_ID_BASE, r);
Cannot find AT_ENTRY auxiliary vector entry.
(gdb) c
Continuing.
dl_main (phdr=<optimized out>, phnum=<optimized out>, user_entry=<optimized out>, auxv=<optimized out>) at rtld.c:2163
2163 LIBC_PROBE (init_complete, 2, LM_ID_BASE, r);
Cannot find AT_ENTRY auxiliary vector entry.
(gdb)
That's because GDB can't figure out where the scratch pad is.
This is a regression introduced by the earlier changes to make the
Linux native target always work in non-stop mode.
This commit makes GDB detect the case and fallback to stepping over
breakpoints in-line.
gdb/ChangeLog:
2016-03-15 Pedro Alves <palves@redhat.com>
PR gdb/19676
* infrun.c (displaced_step_prepare): Also disable displaced
stepping on NOT_SUPPORTED_ERROR.
* linux-tdep.c (linux_displaced_step_location): If reading auxv
fails, throw NOT_SUPPORTED_ERROR instead of generic error.
2016-03-15 16:33:04 +00:00
|
|
|
|
2016-03-15 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19676
|
|
|
|
|
* infrun.c (displaced_step_prepare): Also disable displaced
|
|
|
|
|
stepping on NOT_SUPPORTED_ERROR.
|
|
|
|
|
* linux-tdep.c (linux_displaced_step_location): If reading auxv
|
|
|
|
|
fails, throw NOT_SUPPORTED_ERROR instead of generic error.
|
|
|
|
|
|
2015-11-14 23:08:07 +01:00
|
|
|
|
2016-03-13 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* s390-linux-tdep.c (s390_gen_return_address): New function.
|
|
|
|
|
(s390_gdbarch_init): Fill gen_return_address hook.
|
|
|
|
|
|
2016-01-21 11:03:32 +01:00
|
|
|
|
2016-03-11 Andrew Burgess <andrew.burgess@embecosm.com>
|
|
|
|
|
|
|
|
|
|
* symmisc.c (maintenance_info_line_tables): New function.
|
|
|
|
|
(maintenance_print_one_line_table): New function.
|
|
|
|
|
(_initialize_symmisc): Register 'maint info line-table' command.
|
|
|
|
|
* NEWS: Mention new command.
|
|
|
|
|
|
2015-11-14 21:18:18 +01:00
|
|
|
|
2016-03-11 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* s390-linux-tdep.c (s390_ax_pseudo_register_collect): New function.
|
|
|
|
|
(s390_ax_pseudo_register_push_stack): New function.
|
|
|
|
|
(s390_gdbarch_init): Fill ax_pseudo_register_collect and
|
|
|
|
|
ax_pseudo_register_push_stack hooks.
|
|
|
|
|
|
2016-03-10 17:12:30 -05:00
|
|
|
|
2016-03-10 Simon Marchi <simon.marchi@polymtl.ca>
|
|
|
|
|
|
|
|
|
|
* data-directory/Makefile.in (PYTHON_FILE_LIST): Install
|
|
|
|
|
gdb/function/as_string.py.
|
|
|
|
|
* python/lib/gdb/function/as_string.py: New file.
|
|
|
|
|
* NEWS: Mention the new $_as_string function.
|
|
|
|
|
|
2016-03-09 11:17:54 -08:00
|
|
|
|
2016-03-09 Jose E. Marchesi <jose.marchesi@oracle.com>
|
|
|
|
|
|
|
|
|
|
* target.h: Fix doc string of target_can_use_hardware_watchpoint.
|
|
|
|
|
|
2016-03-09 18:25:00 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (more_to_come): Delete.
|
|
|
|
|
(struct readline_input_state): Delete.
|
|
|
|
|
(readline_input_state): Delete.
|
|
|
|
|
(get_command_line_buffer): New function.
|
|
|
|
|
(command_handler): Update comments. Don't handle NULL commands
|
|
|
|
|
here. Do not execute commented lines.
|
|
|
|
|
(command_line_append_input_line): New function.
|
|
|
|
|
(handle_line_of_input): New function, partly based on
|
|
|
|
|
command_line_handler and command_line_input.
|
|
|
|
|
(command_line_handler): Rewrite.
|
|
|
|
|
* event-top.h (command_handler): New declaration.
|
|
|
|
|
(command_loop): Defer command execution to command_handler.
|
|
|
|
|
(command_line_input): Update comments. Simplify, using struct
|
|
|
|
|
buffer and handle_line_of_input.
|
|
|
|
|
* top.h (struct buffer): New forward declaration.
|
|
|
|
|
(handle_line_of_input): New declaration.
|
|
|
|
|
|
2016-03-09 18:25:00 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (command_line_handler): Use xfree + xstrdup instead
|
|
|
|
|
of xrealloc + strcpy.
|
|
|
|
|
* main.c (captured_main): Use xstrdup instead of xmalloc plus
|
|
|
|
|
manual clear.
|
|
|
|
|
* top.c (saved_command_line): Rewrite comment.
|
|
|
|
|
(saved_command_line_size): Delete.
|
|
|
|
|
(command_line_input): Use xfree + xstrdup instead of xrealloc +
|
|
|
|
|
strcpy.
|
|
|
|
|
* top.h (saved_command_line_size): Delete declaration.
|
|
|
|
|
|
2016-03-09 18:25:00 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c: Include buffer.h.
|
|
|
|
|
(gdb_readline_no_editing_callback): Use struct buffer instead
|
|
|
|
|
of xrealloc.
|
|
|
|
|
|
2016-03-09 18:25:00 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* common/buffer.h (buffer_grow_char): New function.
|
|
|
|
|
* top.c: Include buffer.h.
|
|
|
|
|
(gdb_readline_no_editing): Rename 'prompt_arg' parameter to
|
|
|
|
|
'prompt'. Use struct buffer instead of xrealloc.
|
|
|
|
|
|
2016-03-09 18:24:59 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* defs.h (gdb_readline): Delete declaration.
|
|
|
|
|
* top.c (gdb_readline): Rename to ...
|
|
|
|
|
(gdb_readline_no_editing): ... this, and make static.
|
|
|
|
|
|
2016-03-09 18:24:59 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* utils.c (prompt_for_continue): Update comments.
|
|
|
|
|
|
2016-03-09 18:24:59 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (async_annotation_suffix): Delete.
|
|
|
|
|
(top_level_prompt, command_line_handler): Don't use
|
|
|
|
|
'async_annotation_suffix' and simplify.
|
|
|
|
|
* event-top.h (async_annotation_suffix): Delete declaration.
|
|
|
|
|
(init_main): Remove reference to 'async_annotation_suffix'.
|
|
|
|
|
|
2016-03-09 18:24:59 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-top.c (gdb_readline2): Rename to ...
|
|
|
|
|
(gdb_readline_no_editing_callback): ... this.
|
|
|
|
|
(change_line_handler, stdin_event_handler)
|
|
|
|
|
(gdb_setup_readline): Adjust.
|
|
|
|
|
* event-top.h (gdb_readline2): Rename to ...
|
|
|
|
|
(gdb_readline_no_editing_callback): ... this, and move closer to
|
|
|
|
|
other readline-related declarations.
|
|
|
|
|
* mi/mi-interp.c (mi_interpreter_resume): Adjust.
|
|
|
|
|
|
2016-03-09 18:24:59 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* top.c (window_hook): Delete.
|
|
|
|
|
(command_loop): Remove references to window_hook.
|
|
|
|
|
|
2016-03-06 16:38:52 +01:00
|
|
|
|
2016-03-09 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* corefile.c (safe_read_memory_unsigned_integer): New function.
|
|
|
|
|
* gdbcore.h (safe_read_memory_unsigned_integer): New prototype.
|
|
|
|
|
* rs6000-tdep.c (rs6000_frame_cache): Read backchain as unsigned.
|
|
|
|
|
|
2016-01-07 17:24:48 +01:00
|
|
|
|
2016-03-09 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* rs6000-tdep.c: Add "ax.h" and "ax-gdb.h" includes.
|
|
|
|
|
(rs6000_gen_return_address): New function.
|
|
|
|
|
(rs6000_gdbarch_init): Wire in the above.
|
|
|
|
|
|
2016-01-07 17:19:25 +01:00
|
|
|
|
2016-03-09 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* rs6000-tdep.c (rs6000_ax_pseudo_register_collect): New function.
|
|
|
|
|
(rs6000_gdbarch_init): Wire in the above.
|
|
|
|
|
|
2016-03-09 17:12:29 +01:00
|
|
|
|
2016-03-09 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* s390-linux-tdep.c (s390_analyze_prologue): Ignore BRC and BRCL
|
|
|
|
|
instructions that do nothing or are conditional traps.
|
|
|
|
|
|
2016-03-09 17:12:29 +01:00
|
|
|
|
2016-03-09 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* s390-linux-tdep.c (s390_prologue_frame_unwind_cache): Store
|
|
|
|
|
frame func's PC in info->func before any other failure can occur.
|
|
|
|
|
(s390_frame_this_id): Use frame_id_build_unavailable_stack if
|
|
|
|
|
info->func has been filled out.
|
|
|
|
|
|
Avoid spaces in osabi names
It's not possible today to select some of the osabis by name.
Specifically, those that have spaces in their names and then the first
word is ambiguous...
For example:
(gdb) set osabi <TAB>
[...]
FreeBSD ELF
FreeBSD a.out
[...]
(gdb) set osabi FreeBSD ELF
Ambiguous item "FreeBSD ELF".
In reality, because "set osabi" is an enum command, that was
equivalent to trying "set osabi FreeBSD", which is then obviously
ambiguous, because of "FreeBSD ELF" and "FreeBSD a.out".
Also, even if the first word is not ambiguous, we actually ignore
whatever comes after the first word:
(gdb) set osabi GNU/Linux
(gdb) show osabi
The current OS ABI is "GNU/Linux".
The default OS ABI is "GNU/Linux".
(gdb) set osabi Windows SomeNonsense
^^^^^^^^^^^^
(gdb) show osabi
The current OS ABI is "Windows CE".
The default OS ABI is "GNU/Linux".
(gdb)
Fix this by avoiding spaces in osabi names.
We could instead make "set osabi" have a custom set hook, or
alternatively make the enum set hook (in cli-setshow.c) handle values
with spaces, but OTOH, I have a feeling that could cause trouble.
E.g., in cases where we might want to write more than one enum value
in the same line. We could support quoting as workaround, but, not
sure we want that. "No spaces" seems like a simpler rule.
gdb/ChangeLog:
2016-03-09 Pedro Alves <palves@redhat.com>
* osabi.c (gdb_osabi_names): Avoid spaces in osabi names.
2016-03-09 15:52:43 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* osabi.c (gdb_osabi_names): Avoid spaces in osabi names.
|
|
|
|
|
|
2016-03-09 15:46:31 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* frv-tdep.c (frv_gdbarch_init): Handle bfd_mach_fr300.
|
|
|
|
|
|
2016-03-08 01:45:09 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* cris-tdep.c (cris_gdbarch_init): Return 0 if the info's byte
|
|
|
|
|
order is BFD_ENDIAN_BIG or if the cris version is unsupported.
|
|
|
|
|
|
Fix floating conversion buffer overrun when host/target format matches
Running the testsuite with a gdb configured with --enable-libmcheck
reveals a problem:
(gdb) ptype 3 * 2.0
type = <12-byte float>
memory clobbered past end of allocated block
ERROR: Process no longer exists
UNRESOLVED: gdb.ada/ptype_arith_binop.exp: ptype 3 * 2.0
(gdb) PASS: gdb.dlang/expression.exp: ptype 0x1.FFFFFFFFFFFFFp1023
ptype 0x1p-52L
type = real
memory clobbered past end of allocated block
ERROR: Process no longer exists
UNRESOLVED: gdb.dlang/expression.exp: ptype 0x1p-52L
Even though this shows up with Ada and D, it's easy to reproduce in C
too. We just need to print a long double, when the current arch is
32-bit, which is the default when gdb starts up:
$ ./gdb -q -ex "ptype 1.0L"
type = long double
memory clobbered past end of allocated block
Aborted (core dumped)
Valgrind shows:
==22159== Invalid write of size 8
==22159== at 0x8464A9: floatformat_from_doublest (doublest.c:756)
==22159== by 0x846822: store_typed_floating (doublest.c:867)
==22159== by 0x6A7959: value_from_double (value.c:3662)
==22159== by 0x6A9F2D: evaluate_subexp_standard (eval.c:745)
==22159== by 0x7F31AF: evaluate_subexp_c (c-lang.c:716)
==22159== by 0x6A8986: evaluate_subexp (eval.c:79)
==22159== by 0x6A8BA3: evaluate_type (eval.c:174)
==22159== by 0x817CCF: whatis_exp (typeprint.c:456)
==22159== by 0x817EAA: ptype_command (typeprint.c:508)
==22159== by 0x5F267B: do_cfunc (cli-decode.c:105)
==22159== by 0x5F5618: cmd_func (cli-decode.c:1885)
==22159== by 0x83622A: execute_command (top.c:475)
==22159== Address 0x8c6cb28 is 8 bytes inside a block of size 12 alloc'd
==22159== at 0x4C2AA98: calloc (vg_replace_malloc.c:711)
==22159== by 0x87384A: xcalloc (common-utils.c:83)
==22159== by 0x873889: xzalloc (common-utils.c:93)
==22159== by 0x6A34CB: allocate_value_contents (value.c:1036)
==22159== by 0x6A3501: allocate_value (value.c:1047)
==22159== by 0x6A790A: value_from_double (value.c:3656)
==22159== by 0x6A9F2D: evaluate_subexp_standard (eval.c:745)
==22159== by 0x7F31AF: evaluate_subexp_c (c-lang.c:716)
==22159== by 0x6A8986: evaluate_subexp (eval.c:79)
==22159== by 0x6A8BA3: evaluate_type (eval.c:174)
==22159== by 0x817CCF: whatis_exp (typeprint.c:456)
==22159== by 0x817EAA: ptype_command (typeprint.c:508)
==22159==
type = long double
(gdb)
Even if the target and host floating-point formats match, the length
of the types might still be different. On x86, long double is the
80-bit extended precision type on both 32-bit and 64-bit ABIs, but by
default it is stored as 12 bytes on 32-bit, and 16 bytes on 64-bit,
for alignment reasons. Several places in doublest.c already consider
this, but floatformat_to_doublest and floatformat_from_doublest miss
it. E.g., convert_typed_floating and store_typed_floating,
Tested on x86-64 Fedora 23 with --enable-libmcheck, where it fixes the
crashed above.
gdb/ChangeLog:
2016-03-09 Pedro Alves <palves@redhat.com>
* doublest.c: Extend comments.
(floatformat_to_doublest, floatformat_from_doublest): Copy the
floatformat's total size, not the host type's size.
2016-03-09 03:01:06 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* doublest.c: Extend comments.
|
|
|
|
|
(floatformat_to_doublest, floatformat_from_doublest): Copy the
|
|
|
|
|
floatformat's total size, not the host type's size.
|
|
|
|
|
|
2016-03-09 02:29:39 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* doublest.c (floatformat_totalsize_bytes): New function.
|
|
|
|
|
(floatformat_from_type): Assert that the type's length is at least
|
|
|
|
|
as long as the floatformat's totalsize.
|
|
|
|
|
* doublest.h (floatformat_totalsize_bytes): New declaration.
|
|
|
|
|
* gdbtypes.c (arch_float_type): Assert that the type's length is
|
|
|
|
|
at least as long as the floatformat's totalsize.
|
|
|
|
|
|
Fix HP/PA GNU/Linux "long double" format
This:
$ ./gdb -ex "set architecture hppa1.0" -ex "set osabi GNU/Linux" -ex "ptype 1.0L"
Shows that HPPA/Linux support for long doubles is broken. It causes
GDB to access memory out of bounds. With Valgrind, we see:
The target architecture is assumed to be hppa1.0
==4371== Invalid write of size 8
==4371== at 0x4C2F21F: memset (vg_replace_strmem.c:1224)
==4371== by 0x8451C4: convert_doublest_to_floatformat (doublest.c:362)
==4371== by 0x845F86: floatformat_from_doublest (doublest.c:769)
==4371== by 0x84628E: store_typed_floating (doublest.c:873)
==4371== by 0x6A7C3D: value_from_double (value.c:3662)
==4371== by 0x6AA211: evaluate_subexp_standard (eval.c:745)
==4371== by 0x7F306D: evaluate_subexp_c (c-lang.c:716)
==4371== by 0x6A8C6A: evaluate_subexp (eval.c:79)
==4371== by 0x6A8E87: evaluate_type (eval.c:174)
==4371== by 0x817B8D: whatis_exp (typeprint.c:456)
==4371== by 0x817D68: ptype_command (typeprint.c:508)
==4371== by 0x5F2977: do_cfunc (cli-decode.c:105)
==4371== Address 0x8998d18 is 0 bytes after a block of size 8 alloc'd
==4371== at 0x4C2AA98: calloc (vg_replace_malloc.c:711)
==4371== by 0x8732B6: xcalloc (common-utils.c:83)
==4371== by 0x8732F5: xzalloc (common-utils.c:93)
==4371== by 0x6A37AF: allocate_value_contents (value.c:1036)
==4371== by 0x6A37E5: allocate_value (value.c:1047)
==4371== by 0x6A7BEE: value_from_double (value.c:3656)
==4371== by 0x6AA211: evaluate_subexp_standard (eval.c:745)
==4371== by 0x7F306D: evaluate_subexp_c (c-lang.c:716)
==4371== by 0x6A8C6A: evaluate_subexp (eval.c:79)
==4371== by 0x6A8E87: evaluate_type (eval.c:174)
==4371== by 0x817B8D: whatis_exp (typeprint.c:456)
==4371== by 0x817D68: ptype_command (typeprint.c:508)
The trouble is that hppa_linux_init_abi overrides the default
long_double_bit set by the generic hppa-tdep.c:
set_gdbarch_long_double_bit (gdbarch, 128);
set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
with:
/* On hppa-linux, currently, sizeof(long double) == 8. There has been
some discussions to support 128-bit long double, but it requires some
more work in gcc and glibc first. */
set_gdbarch_long_double_bit (gdbarch, 64);
which misses overriding the long_double_format, so we end with a weird
combination of:
set_gdbarch_long_double_bit (gdbarch, 64);
set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
Weird because floatformats_ia64_quad's totalsize is longer than 64-bits.
The floatformat conversion routines use the struct floatformat's
totalsize (in bits) to know how much to copy/convert, thus the buffer
overruns.
gdb/ChangeLog:
2016-03-09 Pedro Alves <palves@redhat.com>
* hppa-linux-tdep.c (hppa_linux_init_abi): Set the long double
format to floatformats_ieee_double.
2016-03-09 01:50:02 +00:00
|
|
|
|
2016-03-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* hppa-linux-tdep.c (hppa_linux_init_abi): Set the long double
|
|
|
|
|
format to floatformats_ieee_double.
|
|
|
|
|
|
Fix "set architecture mips:10000" crash
Fix this GDB crash:
$ gdb -ex "set architecture mips:10000"
Segmentation fault (core dumped)
Backtrace:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000495b1b in mips_gdbarch_init (info=..., arches=0x0) at /home/pedro/gdb/mygit/cxx-convertion/src/gdb/mips-tdep.c:8436
8436 if (bfd_get_flavour (info.abfd) == bfd_target_elf_flavour
(top-gdb) bt
#0 0x0000000000495b1b in mips_gdbarch_init (info=..., arches=0x0) at .../src/gdb/mips-tdep.c:8436
#1 0x00000000007348a6 in gdbarch_find_by_info (info=...) at .../src/gdb/gdbarch.c:5155
#2 0x000000000073563c in gdbarch_update_p (info=...) at .../src/gdb/arch-utils.c:522
#3 0x0000000000735585 in set_architecture (ignore_args=0x0, from_tty=1, c=0x26bc870) at .../src/gdb/arch-utils.c:496
#4 0x00000000005f29fd in do_sfunc (c=0x26bc870, args=0x0, from_tty=1) at .../src/gdb/cli/cli-decode.c:121
#5 0x00000000005fd3f3 in do_set_command (arg=0x7fffffffdcdd "mips:10000", from_tty=1, c=0x26bc870) at .../src/gdb/cli/cli-setshow.c:455
#6 0x0000000000836157 in execute_command (p=0x7fffffffdcdd "mips:10000", from_tty=1) at .../src/gdb/top.c:460
#7 0x000000000071abfb in catch_command_errors (command=0x835f6b <execute_command>, arg=0x7fffffffdccc "set architecture mips:10000", from_tty=1)
at .../src/gdb/main.c:368
#8 0x000000000071bf4f in captured_main (data=0x7fffffffd750) at .../src/gdb/main.c:1132
#9 0x0000000000716737 in catch_errors (func=0x71af44 <captured_main>, func_args=0x7fffffffd750, errstring=0x106b9a1 "", mask=RETURN_MASK_ALL)
at .../src/gdb/exceptions.c:240
#10 0x000000000071bfe6 in gdb_main (args=0x7fffffffd750) at .../src/gdb/main.c:1164
#11 0x000000000040a6ad in main (argc=4, argv=0x7fffffffd858) at .../src/gdb/gdb.c:32
(top-gdb)
We already check whether info.abfd is NULL before all other
bfd_get_flavour calls in the same function. Just this one case was
missing.
(This was exposed by a WIP test that tries all "set architecture ARCH"
values.)
gdb/ChangeLog:
2016-03-07 Pedro Alves <palves@redhat.com>
* mips-tdep.c (mips_gdbarch_init): Check whether info.abfd is NULL
before calling bfd_get_flavour.
2016-03-07 00:10:30 +00:00
|
|
|
|
2016-03-07 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* mips-tdep.c (mips_gdbarch_init): Check whether info.abfd is NULL
|
|
|
|
|
before calling bfd_get_flavour.
|
|
|
|
|
|
2016-03-05 15:17:15 +03:00
|
|
|
|
2016-03-05 Pitchumani Sivanupandi <pitchumani.s@atmel.com>
|
|
|
|
|
|
|
|
|
|
* avr-tdep.c (AVR_LAST_ARG_REGNUM): Define.
|
|
|
|
|
(avr_push_dummy_call): Correct last needed argument register.
|
|
|
|
|
Write MSB of argument into register and subsequent bytes into
|
|
|
|
|
other registers in decreasing order.
|
|
|
|
|
|
2016-03-04 16:02:15 +00:00
|
|
|
|
2016-03-04 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_record_vdata_transfer_insn): Simplify the
|
|
|
|
|
condition check. Record the right D register number.
|
|
|
|
|
|
2016-03-04 15:57:55 +00:00
|
|
|
|
2016-03-04 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_record_extension_space): Remove code
|
|
|
|
|
printing "Process record does not support".
|
|
|
|
|
(arm_record_data_proc_misc_ld_str): Likewise.
|
|
|
|
|
(decode_insn): Call arm_record_extension_space if condition
|
|
|
|
|
is 0xf. Call arm_record_unsupported_insn if ret isn't
|
|
|
|
|
ARM_RECORD_SUCCESS. Use 'ret' instead of 'insn_id' to hold
|
|
|
|
|
the value of thumb2_record_decode_insn_handler.
|
|
|
|
|
|
2016-03-04 10:03:06 -05:00
|
|
|
|
2016-03-04 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* features/feature_to_c.sh: Print the help when passing no
|
|
|
|
|
argument.
|
|
|
|
|
|
2016-03-02 15:40:27 +01:00
|
|
|
|
2016-03-02 Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Write After Approval): Add Bernhard Heckel.
|
|
|
|
|
|
2016-03-02 15:30:05 +01:00
|
|
|
|
2016-03-02 Bernhard Heckel <bernhard.heckel@intel.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2read.c (new_symbol_full): Fix detection of gfortran compilers.
|
|
|
|
|
|
2016-03-01 12:43:55 +01:00
|
|
|
|
2016-03-01 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* s390-linux-tdep.c (s390_backchain_frame_unwind_cache): Avoid
|
|
|
|
|
exception when attempting to access the inferior's backchain.
|
|
|
|
|
|
2016-02-19 15:54:03 +00:00
|
|
|
|
2016-02-29 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* aarch64-linux-tdep.c (aarch64_canonicalize_syscall): Support
|
|
|
|
|
eventfd2, eventfd2, dup3, inotify_init1, fallocate and pipe2.
|
|
|
|
|
Return gdb_sys_epoll_create1 instead of gdb_sys_epoll_create
|
|
|
|
|
for aarch64_sys_epoll_create1.
|
|
|
|
|
|
2016-02-19 15:51:03 +00:00
|
|
|
|
2016-02-29 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* linux-record.h (enum gdb_syscall) <gdb_sys_fallocate>: New.
|
|
|
|
|
<gdb_sys_eventfd2, gdb_sys_epoll_create1, gdb_sys_dup3>: New.
|
|
|
|
|
<gdb_sys_pipe2, gdb_sys_inotify_init1>: New.
|
|
|
|
|
* linux-record.c (record_linux_system_call): Handle them.
|
|
|
|
|
|
2016-02-28 10:25:55 +01:00
|
|
|
|
2016-02-28 Iain Buclaw <ibuclaw@gdcproject.org>
|
|
|
|
|
|
|
|
|
|
* d-namespace.c (d_lookup_symbol_imports): Avoid recursive lookups from
|
|
|
|
|
cyclic imports.
|
|
|
|
|
|
2016-02-26 12:22:24 -08:00
|
|
|
|
2016-02-26 Keith Seitz <keiths@redhat.com>
|
|
|
|
|
|
|
|
|
|
* rs6000-tdep.c (rs6000_frame_cache): Explicitly cast return result
|
|
|
|
|
to avoid invalid conversion from void *.
|
|
|
|
|
|
2016-02-26 15:00:36 +00:00
|
|
|
|
2016-02-26 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_record_exreg_ld_st_insn): Set 'single_reg'
|
|
|
|
|
per bit 8. Check bit 20 instead of bit 4 for VMOV
|
|
|
|
|
instruction. Record D registers for instructions changing
|
|
|
|
|
S registers. Change of the order of length and address
|
|
|
|
|
in record_buf_mem array.
|
|
|
|
|
|
2016-02-26 15:00:36 +00:00
|
|
|
|
2016-02-26 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (thumb_record_ld_st_reg_offset): Fix the register
|
|
|
|
|
number of Rd.
|
|
|
|
|
|
2016-02-25 09:30:22 -08:00
|
|
|
|
2016-02-25 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* remote-m32r-sdi.c (recv_char_data): Initialize val to avoid
|
|
|
|
|
compiler warning.
|
|
|
|
|
(recv_long_data): Ditto.
|
|
|
|
|
|
2016-02-25 11:03:22 -05:00
|
|
|
|
2016-02-25 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* i386-linux-tdep.c (i386_linux_handle_segmentation_fault):
|
|
|
|
|
Initialize variables.
|
|
|
|
|
|
2016-02-24 15:00:17 -05:00
|
|
|
|
2016-02-25 Antoine Tremblay <antoine.tremblay@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* ax-general.c (ax_reg): Call gdbarch_remote_register_number.
|
|
|
|
|
(ax_reg_mask): Likewise.
|
|
|
|
|
|
2016-02-24 22:52:06 +00:00
|
|
|
|
2016-02-24 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (save_sigtrap) Delete.
|
|
|
|
|
(stop_wait_callback): Call save_stop_reason instead of
|
|
|
|
|
save_sigtrap.
|
|
|
|
|
(check_stopped_by_breakpoint): Rename to ...
|
|
|
|
|
(save_stop_reason): ... this. Bits of save_sigtrap folded here.
|
|
|
|
|
Use GDB_ARCH_IS_TRAP_HWBKPT and handle ambiguous
|
|
|
|
|
GDB_ARCH_IS_TRAP_BRKPT / GDB_ARCH_IS_TRAP_HWBKPT. Factor out
|
|
|
|
|
common code between the USE_SIGTRAP_SIGINFO and
|
|
|
|
|
!USE_SIGTRAP_SIGINFO blocks.
|
|
|
|
|
(linux_nat_filter_event): Call save_stop_reason instead of
|
|
|
|
|
save_sigtrap.
|
|
|
|
|
* nat/linux-ptrace.h: Check for both SI_KERNEL and TRAP_BRKPT
|
|
|
|
|
si_code for MIPS.
|
|
|
|
|
* nat/linux-ptrace.h: Fix "TRAP_HWBPT" typo in x86 table. Add
|
|
|
|
|
comments on MIPS behavior.
|
|
|
|
|
(GDB_ARCH_IS_TRAP_HWBKPT): Define for all archs.
|
|
|
|
|
|
2016-02-24 22:00:59 +01:00
|
|
|
|
2016-02-24 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* rs6000-tdep.c (rs6000_frame_cache): Initialize frame and pc to 0
|
|
|
|
|
to avoid spurious warnings.
|
|
|
|
|
|
2016-02-24 11:31:58 +00:00
|
|
|
|
2016-02-24 Gary Benson <gbenson@redhat.com>
|
|
|
|
|
|
|
|
|
|
* exec.c (exec_file_locate_attach): Do not attempt to
|
|
|
|
|
locate main executable locally if not found in sysroot.
|
|
|
|
|
|
2016-02-24 11:07:27 +01:00
|
|
|
|
2016-02-24 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
GDB 7.11 released.
|
|
|
|
|
|
2015-03-31 00:30:31 +08:00
|
|
|
|
2016-02-24 Wei-cheng Wang <cole945@gmail.com>
|
|
|
|
|
|
|
|
|
|
* rs6000-tdep.c (rs6000_frame_cache, rs6000_frame_this_id): Handle
|
|
|
|
|
unavailable PC/SP to build unavailable frame.
|
|
|
|
|
|
Extend "skip" command to support -file, -gfile, -function, -rfunction.
gdb/ChangeLog:
Extend "skip" command to support -file, -gfile, -function, -rfunction.
* NEWS: Document new features.
* skip.c: #include "fnmatch.h", "gdb_regex.h".
(skiplist_entry) <file>: Renamed from filename.
<function>: Renamed from function_name.
<file_is_glob, function_is_regexp>: New members.
<compiled_function_regexp, compiled_function_regexp_is_valid>:
New members.
(make_skip_entry): New function.
(free_skiplist_entry, free_skiplist_entry_cleanup): New functions.
(make_free_skiplist_entry_cleanup): New function.
(skip_file_command): Update.
(skip_function, skip_function_command): Update.
(compile_skip_regexp): New functions.
(skip_command): Add support for new options.
(skip_info): Update.
(skip_file_p, skip_gfile_p): New functions.
(skip_function_p, skip_rfunction_p): New functions.
(function_name_is_marked_for_skip): Update and simplify.
(_initialize_step_skip): Update.
* symtab.c: #include "fnmatch.h".
(compare_glob_filenames_for_search): New function.
* symtab.h (compare_glob_filenames_for_search): Declare.
* utils.c (count_path_elements): New function.
(strip_leading_path_elements): New function.
* utils.h (count_path_elements): Declare.
(strip_leading_path_elements): Declare.
gdb/doc/ChangeLog:
* gdb.texinfo (Skipping Over Functions and Files): Document new
options to "skip" command. Update docs of output of "info skip".
gdb/testsuite/ChangeLog:
* gdb.base/skip.c (test_skip): New function.
(end_test_skip_file_and_function): New function.
(test_skip_file_and_function): New function.
* gdb.base/skip1.c (test_skip): New function.
(skip1_test_skip_file_and_function): New function.
* gdb.base/skip.exp: Add tests for new skip options.
* gdb.base/skip-solib.exp: Update expected output.
* gdb.perf/skip-command.cc: New file.
* gdb.perf/skip-command.exp: New file.
* gdb.perf/skip-command.py: New file.
2016-02-23 13:25:18 -08:00
|
|
|
|
2016-02-23 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
Extend "skip" command to support -file, -gfile, -function, -rfunction.
|
|
|
|
|
* NEWS: Document new features.
|
|
|
|
|
* skip.c: #include "fnmatch.h", "gdb_regex.h".
|
|
|
|
|
(skiplist_entry) <file>: Renamed from filename.
|
|
|
|
|
<function>: Renamed from function_name.
|
|
|
|
|
<file_is_glob, function_is_regexp>: New members.
|
|
|
|
|
<compiled_function_regexp, compiled_function_regexp_is_valid>:
|
|
|
|
|
New members.
|
|
|
|
|
(make_skip_entry): New function.
|
|
|
|
|
(free_skiplist_entry, free_skiplist_entry_cleanup): New functions.
|
|
|
|
|
(make_free_skiplist_entry_cleanup): New function.
|
|
|
|
|
(skip_file_command): Update.
|
|
|
|
|
(skip_function, skip_function_command): Update.
|
|
|
|
|
(compile_skip_regexp): New functions.
|
|
|
|
|
(skip_command): Add support for new options.
|
|
|
|
|
(skip_info): Update.
|
|
|
|
|
(skip_file_p, skip_gfile_p): New functions.
|
|
|
|
|
(skip_function_p, skip_rfunction_p): New functions.
|
|
|
|
|
(function_name_is_marked_for_skip): Update and simplify.
|
|
|
|
|
(_initialize_step_skip): Update.
|
|
|
|
|
* symtab.c: #include "fnmatch.h".
|
|
|
|
|
(compare_glob_filenames_for_search): New function.
|
|
|
|
|
* symtab.h (compare_glob_filenames_for_search): Declare.
|
|
|
|
|
* utils.c (count_path_elements): New function.
|
|
|
|
|
(strip_leading_path_elements): New function.
|
|
|
|
|
* utils.h (count_path_elements): Declare.
|
|
|
|
|
(strip_leading_path_elements): Declare.
|
|
|
|
|
|
2016-02-23 13:21:10 -05:00
|
|
|
|
2016-02-23 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_decode_svc_copro): Remove "to" parameter.
|
|
|
|
|
(thumb_process_displaced_insn): Likewise.
|
|
|
|
|
(arm_process_displaced_insn): Adjust calls.
|
|
|
|
|
|
Process record for aarch64-linux syscall
This patch updates the syscalls in sync with syscalls/aarch64-linux.xml.
Some syscalls are still not supported by gdb/linux-record.c yet. Mark
them UNSUPPORTED_SYSCALL_MAP.
This patch fixes the following test fail,
Process record and replay target doesn't support syscall number 56^M
Process record: failed to record execution log.^M
^M
Program stopped.^M
0x00000020000e9dfc in open () from /lib/aarch64-linux-gnu/libc.so.6^M
(gdb) FAIL: gdb.reverse/fstatat-reverse.exp: continue to breakpoint: marker2
gdb:
2016-02-23 Yao Qi <yao.qi@linaro.org>
* aarch64-linux-tdep.c (enum aarch64_syscall) <aarch64_sys_mknod>:
Remove.
<aarch64_sys_mkdir, aarch64_sys_unlink, aarch64_sys_symlink>: Remove.
<aarch64_sys_link, aarch64_sys_rename, aarch64_sys_faccess>: Remove.
<aarch64_sys_mknodat, aarch64_sys_mkdirat>: New.
<aarch64_sys_unlinkat, aarch64_sys_symlinkat>: New.
<aarch64_sys_linkat, aarch64_sys_renameat, aarch64_sys_faccessat>: New.
<aarch64_sys_open, aarch64_sys_readlink, aarch64_sys_fstatat>: Remove.
<aarch64_sys_openat, aarch64_sys_readlinkat>: New.
<aarch64_sys_newfstatat>: New.
(UNSUPPORTED_SYSCALL_MAP): New macro.
(aarch64_canonicalize_syscall): Add missing syscalls.
2016-02-23 09:21:09 +00:00
|
|
|
|
2016-02-23 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* aarch64-linux-tdep.c (enum aarch64_syscall) <aarch64_sys_mknod>:
|
|
|
|
|
Remove.
|
|
|
|
|
<aarch64_sys_mkdir, aarch64_sys_unlink, aarch64_sys_symlink>: Remove.
|
|
|
|
|
<aarch64_sys_link, aarch64_sys_rename, aarch64_sys_faccess>: Remove.
|
|
|
|
|
<aarch64_sys_mknodat, aarch64_sys_mkdirat>: New.
|
|
|
|
|
<aarch64_sys_unlinkat, aarch64_sys_symlinkat>: New.
|
|
|
|
|
<aarch64_sys_linkat, aarch64_sys_renameat>: New.
|
|
|
|
|
<aarch64_sys_faccessat>: New.
|
|
|
|
|
<aarch64_sys_open, aarch64_sys_readlink, aarch64_sys_fstatat>: Remove.
|
|
|
|
|
<aarch64_sys_openat, aarch64_sys_readlinkat>: New.
|
|
|
|
|
<aarch64_sys_newfstatat>: New.
|
|
|
|
|
(UNSUPPORTED_SYSCALL_MAP): New macro.
|
|
|
|
|
(aarch64_canonicalize_syscall): Add missing syscalls.
|
|
|
|
|
|
2016-02-22 17:15:14 +01:00
|
|
|
|
2016-02-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* gdb-gdb.py (class TypeFlagsPrinter): Use parentheses for print.
|
|
|
|
|
|
2016-02-22 12:08:51 +00:00
|
|
|
|
2016-02-22 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c: Fix code format issues.
|
|
|
|
|
|
2016-02-21 21:38:10 +01:00
|
|
|
|
2016-02-21 Iain Buclaw <ibuclaw@gdcproject.org>
|
|
|
|
|
|
|
|
|
|
* d-namespace.c (d_lookup_symbol_imports): Remove argument
|
|
|
|
|
'search_parents'. All callers updated.
|
|
|
|
|
|
2016-01-23 23:53:41 +01:00
|
|
|
|
2016-02-18 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* s390-linux-tdep.c (s390_guess_tracepoint_registers): New function.
|
|
|
|
|
(s390_gdbarch_init): Fill guess_tracepoint_registers hook.
|
|
|
|
|
|
Intel MPX bound violation handling
With Intel Memory Protection Extensions it was introduced the concept of
boundary violation. A boundary violations is presented to the inferior as
a segmentation fault having SIGCODE 3. This patch adds a
handler for a boundary violation extending the information displayed
when a bound violation is presented to the inferior. In the stop mode
case the debugger will also display the kind of violation: "upper" or
"lower", bounds and the address accessed.
On no stop mode the information will still remain unchanged. Additional
information about bound violations are not meaningful in that case user
does not know the line in which violation occurred as well.
When the segmentation fault handler is stop mode the out puts will be
changed as exemplified below.
The usual output of a segfault is:
Program received signal SIGSEGV, Segmentation fault
0x0000000000400d7c in upper (p=0x603010, a=0x603030, b=0x603050,
c=0x603070, d=0x603090, len=7) at i386-mpx-sigsegv.c:68
68 value = *(p + len);
In case it is a bound violation it will be presented as:
Program received signal SIGSEGV, Segmentation fault
Upper bound violation while accessing address 0x7fffffffc3b3
Bounds: [lower = 0x7fffffffc390, upper = 0x7fffffffc3a3]
0x0000000000400d7c in upper (p=0x603010, a=0x603030, b=0x603050,
c=0x603070, d=0x603090, len=7) at i386-mpx-sigsegv.c:68
68 value = *(p + len);
In mi mode the output of a segfault is:
*stopped,reason="signal-received",signal-name="SIGSEGV",
signal-meaning="Segmentation fault", frame={addr="0x0000000000400d7c",
func="upper",args=[{name="p", value="0x603010"},{name="a",value="0x603030"}
,{name="b",value="0x603050"}, {name="c",value="0x603070"},
{name="d",value="0x603090"},{name="len",value="7"}],
file="i386-mpx-sigsegv.c",fullname="i386-mpx-sigsegv.c",line="68"},
thread-id="1",stopped-threads="all",core="6"
in the case of a bound violation:
*stopped,reason="signal-received",signal-name="SIGSEGV",
signal-meaning="Segmentation fault",
sigcode-meaning="Upper bound violation",
lower-bound="0x603010",upper-bound="0x603023",bound-access="0x60302f",
frame={addr="0x0000000000400d7c",func="upper",args=[{name="p",
value="0x603010"},{name="a",value="0x603030"},{name="b",value="0x603050"},
{name="c",value="0x603070"},{name="d",value="0x603090"},
{name="len",value="7"}],file="i386-mpx-sigsegv.c",
fullname="i386-mpx-sigsegv.c",line="68"},thread-id="1",
stopped-threads="all",core="6"
2016-02-18 Walfred Tedeschi <walfred.tedeschi@intel.com>
gdb/ChangeLog:
* NEWS: Add entry for bound violation.
* amd64-linux-tdep.c (amd64_linux_init_abi_common):
Add handler for segmentation fault.
* gdbarch.sh (handle_segmentation_fault): New.
* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
* i386-linux-tdep.c (i386_linux_handle_segmentation_fault): New.
(SIG_CODE_BONDARY_FAULT): New define.
(i386_linux_init_abi): Use i386_mpx_bound_violation_handler.
* i386-linux-tdep.h (i386_linux_handle_segmentation_fault) New.
* i386-tdep.c (i386_mpx_enabled): Add as external.
* i386-tdep.c (i386_mpx_enabled): Add as external.
* infrun.c (handle_segmentation_fault): New function.
(print_signal_received_reason): Use handle_segmentation_fault.
gdb/testsuite/ChangeLog:
* gdb.arch/i386-mpx-sigsegv.c: New file.
* gdb.arch/i386-mpx-sigsegv.exp: New file.
* gdb.arch/i386-mpx-simple_segv.c: New file.
* gdb.arch/i386-mpx-simple_segv.exp: New file.
gdb/doc/ChangeLog:
* gdb.texinfo (Signals): Add bound violation display hints for
a SIGSEGV.
2016-02-18 17:24:59 +01:00
|
|
|
|
2016-02-18 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Add entry for bound violation.
|
|
|
|
|
* amd64-linux-tdep.c (amd64_linux_init_abi_common):
|
|
|
|
|
Add handler for segmentation fault.
|
|
|
|
|
* gdbarch.sh (handle_segmentation_fault): New.
|
|
|
|
|
* gdbarch.c: Regenerate.
|
|
|
|
|
* gdbarch.h: Regenerate.
|
|
|
|
|
* i386-linux-tdep.c (i386_linux_handle_segmentation_fault): New.
|
|
|
|
|
(SIG_CODE_BONDARY_FAULT): New define.
|
|
|
|
|
(i386_linux_init_abi): Use i386_mpx_bound_violation_handler.
|
|
|
|
|
* i386-linux-tdep.h (i386_linux_handle_segmentation_fault) New.
|
|
|
|
|
* i386-tdep.c (i386_mpx_enabled): Add as external.
|
|
|
|
|
* i386-tdep.c (i386_mpx_enabled): Add as external.
|
|
|
|
|
* infrun.c (handle_segmentation_fault): New function.
|
|
|
|
|
(print_signal_received_reason): Use handle_segmentation_fault.
|
|
|
|
|
|
2016-02-18 09:21:38 +01:00
|
|
|
|
2016-02-18 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* arch-utils.c (default_guess_tracepoint_registers): New function.
|
|
|
|
|
* arch-utils.h (default_guess_tracepoint_registers): New prototype.
|
|
|
|
|
* gdbarch.c: Regenerate.
|
|
|
|
|
* gdbarch.h: Regenerate.
|
|
|
|
|
* gdbarch.sh: Add guess_tracepoint_registers hook.
|
|
|
|
|
* tracefile.c (tracefile_fetch_registers): Use the new gdbarch hook.
|
|
|
|
|
|
2016-02-17 14:38:36 +00:00
|
|
|
|
2016-02-17 Gary Benson <gbenson@redhat.com>
|
|
|
|
|
|
|
|
|
|
* exec.c (exec_file_locate_attach): Add missing cleanup.
|
|
|
|
|
|
PR remote/19496, internal err forking-threads-plus-bkpt
This patch fixes an internal error that occurs in
gdb.threads/forking-threads-plus-breakpoint.exp:
/blah/binutils-gdb/gdb/target.c:2723: internal-error: Can't determine the
current address space of thread Thread 3170.3170
In default_thread_address_space, find_inferior_ptid couldn't find 3170.3170
because it had been overwritten in inferior_appeared, called as follows:
inferior_appeared
remote_add_inferior
remote_notice_new_inferior
remote_update_thread_list
The cause of the problem was the following sequence of events:
* GDB knows only about the main thread
* the first fork event is reported to GDB, saved as pending_event
* qXfer:threads:read gets the threads from the remote.
remove_new_fork_children id's the fork child from the pending event
and removes it from the list reported to GDB. All the rest of the
threads, including the fork parent, are added to the GDB thread list.
* GDB stops all the threads. All the stop events are pushed onto the
stop reply queue behind the pending fork event. The fork waitstatus
is saved in the fork parent thread's pending status field
thread_info.suspend.
* remote_wait_ns calls queued_stop_reply and process_stop_reply to
remove the fork event from the front of the stop reply queue and save
event information in the thread_info structure for the fork parent
thread. Unfortunately, none of the information saved in this way is
the fork-specific information.
* A subsequent qXfer:threads:read packet gets the thread list including
the fork parent and fork child. remove_new_fork_children checks the
thread list to see if there is a fork parent, doesn't find one, checks
the stop reply queue for a pending fork event, doesn't find one, and
allows the fork child thread to be reported to GDB before the fork
event has been handled. remote_update_thread_list calls
remote_notice_new_thread and overwrites the current (main) thread in
inferior_appeared.
So the fork event has been reported out of target_wait but it was left
pending on the infrun side (infrun.c:save_waitstatus). IOW, the fork
event hasn't been processed by handle_inferior_event yet, so it hasn't
made it to tp->pending_follow yet.
The fix is to check thread_info.suspend along with the
thread_info.pending_follow in remote.c:remove_new_fork_children, to
prevent premature reporting of the fork child thread creation.
gdb/ChangeLog:
PR remote/19496
* remote.c (remove_new_fork_children): Check for pending
fork status in thread_info.suspend.
gdb/testsuite/ChangeLog:
PR remote/19496
* gdb.threads/forking-threads-plus-breakpoint.exp (do_test):
Remove kfail for PR remote/19496.
2016-02-16 08:56:06 -08:00
|
|
|
|
2016-02-16 Don Breazeal <donb@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
PR remote/19496
|
|
|
|
|
* remote.c (remove_new_fork_children): Check for pending
|
|
|
|
|
fork status in thread_info.suspend.
|
|
|
|
|
|
2016-02-16 13:53:35 +00:00
|
|
|
|
2016-02-16 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-linux-tdep.c (arm_linux_software_single_step): Assign
|
|
|
|
|
'old_chain' later.
|
|
|
|
|
|
2016-02-16 13:47:17 +00:00
|
|
|
|
2016-02-16 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arch/arm-get-next-pcs.h (struct arm_get_next_pcs_ops)
|
|
|
|
|
<syscall_next_pc>: Remove argument PC. Callers updated.
|
|
|
|
|
* arm-linux-tdep.c (arm_linux_get_next_pcs_syscall_next_pc):
|
|
|
|
|
Remove argument PC. Get pc from regcache_read_pc.
|
|
|
|
|
* arm-tdep.c (arm_get_next_pcs_syscall_next_pc): Remove
|
|
|
|
|
argument PC.
|
|
|
|
|
|
2016-02-15 10:05:56 +00:00
|
|
|
|
2016-02-15 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* aarch64-tdep.c (aarch64_analyze_prologue): Remove "0x".
|
|
|
|
|
|
[ARM] Software single step cross kernel helpers
GDB step cross kernel helpers only works if the kernel helpers are tail
called, which is the case how it is used in glibc. See __aeabi_read_tp
in sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S. In __aeabi_read_tp,
branch/jump to the kernel helper is the last instruction, and the next
instruction address is in LR, which is in caller function. GDB can
handle this correctly. For example, glibc function __GI___ctype_init
calls __aeabi_read_tp
0xb6e19b30 <__GI___ctype_init+4>: ldr r3, [pc, #80] ;
0xb6e19b34 <__GI___ctype_init+8>: bl 0xb6e0a6e0 <__aeabi_read_tp>
0xb6e19b38 <__GI___ctype_init+12>: ldr r3, [pc, r3]
and __aeabi_read_tp calls kernel helper,
(gdb) disassemble __aeabi_read_tp
0xb6fef5d0 <+0>: mvn r0, #61440 ; 0xf000
0xb6fef5d4 <+4>: sub pc, r0, #31
once GDB or GDBserver single step instruction on 0xb6fef5d4, LR is
0xb6e19b38, which is right address of next instruction to set breakpoint
on.
However, if the kernel helpers are not tail-called, the LR is still the
address in the caller function of kernel helper's caller, which isn't
the right address of next instruction to set breakpoint on. For example,
we use kernel helper in main,
(gdb) disassemble main
....
0x00008624 <+32>: mov r3, #4064 ; 0xfe0^M
0x00008628 <+36>: movt r3, #65535 ; 0xffff^M
0x0000862c <+40>: blx r3
0x00008630 <+44>: ldr r3, [r11, #-8]
kernel helper is called on 0x0000862c and the expected next instruction
address is 0x00008630, but the LR now is the return address of main.
The problem here is LR may not have the right address because when we
single step the instruction, it isn't executed yet, so the LR isn't
updated. This patch fix this problem by decoding instruction, if the
instruction updates LR (BL and BLX), the next instruction address is
PC + INSN_SIZE, otherwise, get the address of next instruction from LR.
gdb:
2016-02-12 Yao Qi <yao.qi@linaro.org>
* arch/arm-linux.c (arm_linux_get_next_pcs_fixup): Calculate
nextpc according to instruction.
gdb/testsuite:
2016-02-12 Yao Qi <yao.qi@linaro.org>
* gdb.arch/arm-single-step-kernel-helper.c: New.
* gdb.arch/arm-single-step-kernel-helper.exp: New.
2016-02-10 14:21:38 +00:00
|
|
|
|
2016-02-12 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arch/arm-linux.c (arm_linux_get_next_pcs_fixup): Calculate
|
|
|
|
|
nextpc according to instruction.
|
|
|
|
|
|
[ARM] Fixup PC in software single step
When I exercise GDBserver software single step, I see the following
error, which has been already handled by GDB properly.
In GDBserver log, we can see, GDBserver tries to single step instruction
on 0xb6e0a6e4, and destination address is 0xffff0fe0,
stop pc is 0xb6e0a6e4
Writing f001f0e7 to 0xffff0fe0 in process 7132
Failed to insert breakpoint at 0xffff0fe0 (Input/output error).
Failed to insert breakpoint at 0xffff0fe0 (-1).
(gdb) disassemble __aeabi_read_tp,+8
Dump of assembler code from 0xb6e0a6e0 to 0xb6e0a6e8:
0xb6e0a6e0 <__aeabi_read_tp+0>: mvn r0, #61440 ; 0xf000
0xb6e0a6e4 <__aeabi_read_tp+4>: sub pc, r0, #31
however, it fails inserting breakpoint there. This problem has already
fixed by GDB, see comments in arm-linux-tdep.c:arm_linux_software_single_step
/* The Linux kernel offers some user-mode helpers in a high page. We can
not read this page (as of 2.6.23), and even if we could then we
couldn't set breakpoints in it, and even if we could then the atomic
operations would fail when interrupted. They are all called as
functions and return to the address in LR, so step to there
instead. */
so we need to do the same thing in GDB side as well. This patch adds
a new field fixup in arm_get_next_pcs_ops, so that we can fix up PC
for arm-linux target. In this way, both GDB and GDBserver can single
step instructions going to kernel helpers.
gdb:
2016-02-12 Yao Qi <yao.qi@linaro.org>
* arch/arm-get-next-pcs.c (arm_get_next_pcs): Call
self->ops->fixup if it isn't NULL.
* arch/arm-get-next-pcs.h: Include gdb_vecs.h.
(struct arm_get_next_pcs_ops) <fixup>: New field.
* arch/arm-linux.c: Include common-regcache.h and
arch/arm-get-next-pcs.h.
(arm_linux_get_next_pcs_fixup): New function.
* arch/arm-linux.h (arm_linux_get_next_pcs_fixup): Declare.
* arm-linux-tdep.c (arm_linux_get_next_pcs_ops): Initialize
it with arm_linux_get_next_pcs_fixup.
(arm_linux_software_single_step): Move code to
arm_linux_get_next_pcs_fixup.
* arm-tdep.c (arm_get_next_pcs_ops): Initialize it.
gdb/gdbserver:
2016-02-12 Yao Qi <yao.qi@linaro.org>
* linux-arm-low.c (get_next_pcs_ops): Initialize it with
arm_linux_get_next_pcs_fixup.
2016-02-08 16:05:31 +00:00
|
|
|
|
2016-02-12 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arch/arm-get-next-pcs.c (arm_get_next_pcs): Call
|
|
|
|
|
self->ops->fixup if it isn't NULL.
|
|
|
|
|
* arch/arm-get-next-pcs.h: Include gdb_vecs.h.
|
|
|
|
|
(struct arm_get_next_pcs_ops) <fixup>: New field.
|
|
|
|
|
* arch/arm-linux.c: Include common-regcache.h and
|
|
|
|
|
arch/arm-get-next-pcs.h.
|
|
|
|
|
(arm_linux_get_next_pcs_fixup): New function.
|
|
|
|
|
* arch/arm-linux.h (arm_linux_get_next_pcs_fixup): Declare.
|
|
|
|
|
* arm-linux-tdep.c (arm_linux_get_next_pcs_ops): Initialize
|
|
|
|
|
it with arm_linux_get_next_pcs_fixup.
|
|
|
|
|
(arm_linux_software_single_step): Move code to
|
|
|
|
|
arm_linux_get_next_pcs_fixup.
|
|
|
|
|
* arm-tdep.c (arm_get_next_pcs_ops): Initialize it.
|
|
|
|
|
|
2016-02-11 23:52:44 +01:00
|
|
|
|
2016-02-12 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* xml-tdesc.c (target_fetch_description_xml) [!HAVE_LIBEXPAT]: Warn
|
|
|
|
|
and return NULL.
|
|
|
|
|
|
2016-01-26 14:58:44 +01:00
|
|
|
|
2016-02-12 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* frame.h (skip_tailcall_frames): Update comment.
|
|
|
|
|
* frame.c (skip_artificial_frames, skip_tailcall_frames): Return NULL
|
|
|
|
|
if only artificial frames are found. Update comment.
|
|
|
|
|
(frame_unwind_caller_id): Handle NULL return.
|
|
|
|
|
(frame_unwind_caller_pc, frame_unwind_caller_arch): Assert that
|
|
|
|
|
skip_artificial_frames does not return NULL.
|
|
|
|
|
(frame_pop): Add an error if only tailcall frames are found.
|
|
|
|
|
* infcmd.c (finish_command): Move skip_tailcall_frames call into
|
|
|
|
|
forward-execution case. Add an error if only tailcall frames are
|
|
|
|
|
found.
|
|
|
|
|
|
2016-02-11 11:07:09 +01:00
|
|
|
|
2016-02-12 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* stack.c (frame_info): Check frame_unwind_caller_id.
|
|
|
|
|
|
2016-02-05 09:32:53 +01:00
|
|
|
|
2016-02-12 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* frame.h (skip_tailcall_frames): New.
|
|
|
|
|
* frame.c (skip_tailcall_frames): New.
|
|
|
|
|
(frame_pop): Call skip_tailcall_frames.
|
|
|
|
|
* infcmd.c (finish_command): Call skip_tailcall_frames.
|
|
|
|
|
|
2016-02-11 19:36:39 +00:00
|
|
|
|
2016-02-11 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (check-parallel): New rule.
|
|
|
|
|
|
2016-02-11 14:09:25 -05:00
|
|
|
|
2016-02-11 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_skip_prologue): Remove unused variables.
|
|
|
|
|
(arm_analyze_prologue): Likewise.
|
|
|
|
|
(arm_scan_prologue): Likewise.
|
|
|
|
|
(arm_m_exception_prev_register): Likewise.
|
|
|
|
|
(arm_copy_block_xfer): Likewise.
|
|
|
|
|
(thumb2_copy_block_xfer): Likewise.
|
|
|
|
|
(arm_decode_miscellaneous): Likewise.
|
|
|
|
|
(arm_decode_ld_st_word_ubyte): Likewise.
|
|
|
|
|
(arm_decode_svc_copro): Likewise.
|
|
|
|
|
(thumb2_decode_svc_copro): Likewise.
|
|
|
|
|
(thumb_copy_16bit_ldr_literal): Likewise.
|
|
|
|
|
(thumb_copy_pop_pc_16bit): Likewise.
|
|
|
|
|
(decode_thumb_32bit_ld_mem_hints): Likewise.
|
|
|
|
|
(arm_show_force_mode): Likewise.
|
|
|
|
|
(_initialize_arm_tdep): Likewise.
|
|
|
|
|
(arm_record_strx): Likewise.
|
|
|
|
|
(arm_record_extension_space): Likewise.
|
|
|
|
|
(arm_record_data_proc_misc_ld_str): Likewise.
|
|
|
|
|
(arm_record_exreg_ld_st_insn): Likewise.
|
|
|
|
|
(arm_record_vfp_data_proc_insn): Likewise.
|
|
|
|
|
(arm_record_coproc_data_proc): Likewise.
|
|
|
|
|
(thumb_record_misc): Likewise.
|
|
|
|
|
(thumb_record_ldm_stm_swi): Likewise.
|
|
|
|
|
(thumb2_record_ld_st_dual_ex_tbb): Likewise.
|
|
|
|
|
(thumb2_record_ld_mem_hints): Likewise.
|
|
|
|
|
(thumb2_record_lmul_lmla_div): Likewise.
|
|
|
|
|
(thumb2_record_asimd_struct_ld_st): Likewise.
|
|
|
|
|
(arm_process_record): Likewise.
|
|
|
|
|
|
2016-02-11 14:08:53 -05:00
|
|
|
|
2016-02-11 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_displaced_step_copy_insn): Remove.
|
|
|
|
|
(ARM displaced stepping support): Remove reference to
|
|
|
|
|
arm_displaced_step_copy_insn in comment.
|
|
|
|
|
* arm-tdep.h (arm_displaced_step_copy_insn): Remove.
|
|
|
|
|
* arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Remove
|
|
|
|
|
reference to arm_displaced_step_copy_insn in comment.
|
|
|
|
|
|
2016-02-11 13:21:32 -05:00
|
|
|
|
2016-02-11 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (thumb_copy_unmodified_16bit): Change type of insn.
|
|
|
|
|
(thumb_copy_b): Likewise.
|
|
|
|
|
(arm_decode_b_bl_ldmstm): Likewise.
|
|
|
|
|
(thumb_copy_16bit_ldr_literal): Likewise.
|
|
|
|
|
(thumb_copy_pop_pc_16bit): Likewise.
|
|
|
|
|
|
Use the target architecture when encoding tracepoint actions
This patch uses the target architecture rather then the objfile
architecture when encoding tracepoint actions.
The target architecture may contain additional registers. E.g. ARM VFP
registers. This information is needed to allow their collection. Since we
can never know whether the registers numbers in the target match the
binary's we have to use tdesc here.
One note about combined debuggers / multi-inferior from Pedro Alves:
In the combined debugger case taking Cell as the practical example that
gdb supports currently:
In that case, the main target_gdbarch() will be powerpc, but you may have set a
tracepoint on _spu_ code, which has a different gdbarch. so for that case,
target_gdbarch would be wrong. I think that in that case, we'd need to
find __the_ target/tdesc gdbarch that is (bfd) compatible with the
objfile's gdbarch.
I think cell/spu gdbserver doesn't support tracepoints, so we can ignore
this for now.
The multi-inferior/process case is somewhat related, but its simpler.
each inferior has its own gdbarch.
That is, target_gdbarch depends on the current inferior selected.
In fact, that just returns inferior->gdbarch nowaways.
No regressions, tested on ubuntu 14.04 ARMv7 and x86.
With gdbserver-{native,extended} / { -marm -mthumb }
gdb/ChangeLog:
* tracepoint.c (encode_actions_1): Use target_gdbarch () rather
than loc->gdbarch.
2016-02-11 08:14:12 -05:00
|
|
|
|
2016-02-11 Antoine Tremblay <antoine.tremblay@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* tracepoint.c (encode_actions_1): Use target_gdbarch () rather
|
|
|
|
|
than loc->gdbarch.
|
|
|
|
|
|
2016-02-06 01:49:14 +01:00
|
|
|
|
2016-02-10 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* tracefile-tfile.c (trace_tdesc): New static variable.
|
|
|
|
|
(tfile_open): Clear trace_tdesc, call target_find_description.
|
|
|
|
|
(tfile_interp_line): Recognize tdesc lines.
|
|
|
|
|
(tfile_close): Clear trace_tdesc.
|
|
|
|
|
(tfile_xfer_partial_features): New function.
|
|
|
|
|
(tfile_xfer_partial): Call tfile_xfer_partial_features.
|
|
|
|
|
(tfile_append_tdesc_line): New function.
|
|
|
|
|
|
2016-02-05 21:32:52 +01:00
|
|
|
|
2016-02-10 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* ctf.c (ctf_write_tdesc): New function.
|
|
|
|
|
(ctf_write_ops): Wire in ctf_write_tdesc.
|
|
|
|
|
* tracefile-tfile.c (tfile_write_tdesc): New function.
|
|
|
|
|
(tfile_write_ops): Wire in tfile_write_tdesc.
|
|
|
|
|
* tracefile.c (trace_save): Call write_tdesc method.
|
|
|
|
|
* tracefile.h (struct trace_file_write_ops): Add write_tdesc method.
|
|
|
|
|
* xml-tdesc.c (target_fetch_description_xml): New function.
|
|
|
|
|
* xml-tdesc.h: Add target_fetch_description_xml prototype.
|
|
|
|
|
|
2016-02-10 10:10:18 -05:00
|
|
|
|
2016-02-10 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_copy_extra_ld_st): Fix "unpriveleged" typo.
|
|
|
|
|
(arm_decode_dp_misc): Likewise.
|
|
|
|
|
|
2016-02-06 18:17:07 +01:00
|
|
|
|
2016-02-10 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* amd64-tdep.c (amd64_ax_pseudo_register_collect): New function.
|
|
|
|
|
(amd64_init_abi): Fill ax_pseudo_register_collect hook.
|
|
|
|
|
* gdb/i386-tdep.c (i386_pseudo_register_read_into_value): Remove
|
|
|
|
|
misleading comment.
|
|
|
|
|
(i386_pseudo_register_write): Ditto.
|
|
|
|
|
(i386_ax_pseudo_register_collect): New function.
|
|
|
|
|
(i386_gdbarch_init): Fill ax_pseudo_register_collect hook.
|
|
|
|
|
* i386-tdep.h: Add i386_ax_pseudo_register_collect prototype.
|
|
|
|
|
|
2016-02-06 16:26:07 +01:00
|
|
|
|
2016-02-10 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* tracefile-tfile.c (tfile_fetch_registers): Use g packet order
|
|
|
|
|
instead of gdb order.
|
|
|
|
|
|
2016-02-06 16:30:01 +01:00
|
|
|
|
2016-02-10 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* tracefile-tfile.c (tfile_fetch_registers): Fix off-by-one in bounds
|
|
|
|
|
check.
|
|
|
|
|
|
2016-02-10 07:28:01 +04:00
|
|
|
|
2016-02-10 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Create a new section for the next release branch.
|
|
|
|
|
Rename the section of the current branch, now that it has
|
|
|
|
|
been cut.
|
|
|
|
|
|
2016-02-10 07:20:26 +04:00
|
|
|
|
2016-02-10 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
GDB 7.11 branch created (9ef9e6a6a0dd8f948708cb67c9afcfd0be40cb0a):
|
|
|
|
|
* version.in: Bump version to 7.11.50.DATE-git.
|
|
|
|
|
|
2016-02-08 12:57:22 -08:00
|
|
|
|
2016-02-09 Keith Seitz <keiths@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR breakpoints/19546
|
|
|
|
|
* breakpoint.c (breakpoint_event_location_empty_p): New function.
|
|
|
|
|
(update_breakpoints_after_exec, bkpt_re_set): Use this new function
|
|
|
|
|
instead of event_location_empty_p.
|
|
|
|
|
|
2016-02-09 10:02:54 -08:00
|
|
|
|
2016-02-09 Keith Seitz <keiths@redhat.com>
|
|
|
|
|
|
|
|
|
|
* mi/mi-cmd-break.c (mi_cmd_break_insert_1): Use
|
|
|
|
|
string_to_event_location_basic instead of string_to_event_location.
|
|
|
|
|
|
2016-02-09 10:02:53 -08:00
|
|
|
|
2016-02-09 Keith Seitz <keiths@redhat.com>
|
|
|
|
|
|
|
|
|
|
* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Skip
|
|
|
|
|
leading whitespace and use string_to_event_location_basic instead
|
|
|
|
|
of new_linespec_location.
|
|
|
|
|
|
2016-02-09 10:02:53 -08:00
|
|
|
|
2016-02-09 Keith Seitz <keiths@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR python/19506
|
|
|
|
|
* python/py-breakpoint.c (bppy_init): Use
|
|
|
|
|
string_to_event_location_basic instead of new_linespec_location.
|
|
|
|
|
|
2016-02-09 10:02:53 -08:00
|
|
|
|
2016-02-09 Keith Seitz <keiths@redhat.com>
|
|
|
|
|
|
|
|
|
|
* location.c (string_to_explicit_location): Note that "-p" is
|
|
|
|
|
reserved for probe locations and return NULL for any input
|
|
|
|
|
that starts with that.
|
|
|
|
|
(string_to_event_location): Move "legacy" linespec code to ...
|
|
|
|
|
(string_to_event_location_basic): ... here.
|
|
|
|
|
* location.h (string_to_event_location): Update comment.
|
|
|
|
|
(string_to_event_location_basic): New function.
|
|
|
|
|
|
2016-02-09 09:01:58 -05:00
|
|
|
|
2016-02-09 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* configure.ac: Use AC_CONFIG_FILES instead of passing arguments
|
|
|
|
|
to AC_OUTPUT. Remove "exit 0" at the end.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
|
2016-02-09 12:12:17 +00:00
|
|
|
|
2016-02-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR breakpoints/19548
|
|
|
|
|
* breakpoint.c (create_overlay_event_breakpoint): Don't update
|
|
|
|
|
global location list here.
|
|
|
|
|
(create_longjmp_master_breakpoint)
|
|
|
|
|
(create_std_terminate_master_breakpoint)
|
|
|
|
|
(create_exception_master_breakpoint, create_jit_event_breakpoint)
|
|
|
|
|
(update_breakpoint_locations):
|
|
|
|
|
(breakpoint_re_set): Update global location list after all
|
|
|
|
|
breakpoints are re-set.
|
|
|
|
|
|
2016-02-08 12:57:08 -05:00
|
|
|
|
2016-02-08 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* remote.c (remote_register_number_and_offset): Remove unused
|
|
|
|
|
variable(s).
|
|
|
|
|
(remote_thread_always_alive): Likewise.
|
|
|
|
|
(remote_update_thread_list): Likewise.
|
|
|
|
|
(process_initial_stop_replies): Likewise.
|
|
|
|
|
(remote_start_remote): Likewise.
|
|
|
|
|
(remote_check_symbols): Likewise.
|
|
|
|
|
(discard_pending_stop_replies): Likewise.
|
|
|
|
|
(process_stop_reply): Likewise.
|
|
|
|
|
(putpkt_binary): Likewise.
|
|
|
|
|
(getpkt): Likewise.
|
|
|
|
|
(remote_add_target_side_condition): Likewise.
|
|
|
|
|
(remote_insert_breakpoint): Likewise.
|
|
|
|
|
(remote_supports_stopped_by_sw_breakpoint): Likewise.
|
|
|
|
|
(remote_supports_stopped_by_hw_breakpoint): Likewise.
|
|
|
|
|
(remote_xfer_partial): Likewise.
|
|
|
|
|
(remote_read_btrace): Likewise.
|
|
|
|
|
(remote_async_serial_handler): Likewise.
|
|
|
|
|
(remote_thread_events): Likewise.
|
|
|
|
|
(_initialize_remote): Likewise.
|
|
|
|
|
|
2016-02-07 09:45:02 -05:00
|
|
|
|
2016-02-07 Simon Marchi <simon.marchi@polymtl.ca>
|
|
|
|
|
|
|
|
|
|
* varobj.h (varobj_delete): Remove dellist parameter, update and
|
|
|
|
|
move documentation here.
|
|
|
|
|
* varobj.c (struct cpstack, cppush, cppop): Remove.
|
|
|
|
|
(delete_variable): Remove resultp (first) parameter.
|
|
|
|
|
(delete_variable_1): Likewise.
|
|
|
|
|
(varobj_delete): Remove dellist parameter and unused code.
|
|
|
|
|
(update_dynamic_varobj_children): Adjust varobj_delete call.
|
|
|
|
|
(update_type_if_necessary): Likewise.
|
|
|
|
|
(varobj_set_visualizer): Likewise.
|
|
|
|
|
(varobj_update): Likewise.
|
|
|
|
|
(value_of_root): Likewise.
|
|
|
|
|
(varobj_invalidate_iter): Likewise.
|
|
|
|
|
* mi/mi-cmd-var.c (mi_cmd_var_delete): Likewise.
|
|
|
|
|
|
waiting_for_stop_reply around remote_fileio_request
Hi,
I see this error when GDB connects with qemu,
(gdb) n
....
Sending packet: $vCont;c#a8...Ack
Packet received: Ffstat,00000001,f6fff038
Cannot execute this command while the target is running.
Use the "interrupt" command to stop the target
and then try again.
looks we don't set rs->waiting_for_stop_reply to zero
before handle fileio request,
#10 0x00000000005edb64 in target_write (len=64, offset=4143968312, buf=0x7fffffffd570 "\375\377\377\377", annex=0x0, object=TARGET_OBJECT_MEMORY,
ops=<optimised out>) at /home/yao/SourceCode/gnu/gdb/git/gdb/target.c:1922
#11 target_write_memory (memaddr=memaddr@entry=4143968312, myaddr=myaddr@entry=0x7fffffffd6a0 "", len=len@entry=64)
at /home/yao/SourceCode/gnu/gdb/git/gdb/target.c:1500
#12 0x00000000004b2b41 in remote_fileio_func_fstat (buf=0x127b258 "") at /home/yao/SourceCode/gnu/gdb/git/gdb/remote-fileio.c:1037
#13 0x00000000004b1878 in do_remote_fileio_request (uiout=<optimised out>, buf_arg=buf_arg@entry=0x127b240)
at /home/yao/SourceCode/gnu/gdb/git/gdb/remote-fileio.c:1204
#14 0x00000000005b8c7c in catch_exceptions_with_msg (func_uiout=<optimised out>, func=func@entry=0x4b1800 <do_remote_fileio_request>,
func_args=func_args@entry=0x127b240, gdberrmsg=gdberrmsg@entry=0x0, mask=mask@entry=RETURN_MASK_ALL)
at /home/yao/SourceCode/gnu/gdb/git/gdb/exceptions.c:187
#15 0x00000000005b8dea in catch_exceptions (uiout=<optimised out>, func=func@entry=0x4b1800 <do_remote_fileio_request>, func_args=func_args@entry=0x127b240,
mask=mask@entry=RETURN_MASK_ALL) at /home/yao/SourceCode/gnu/gdb/git/gdb/exceptions.c:167
#16 0x00000000004b2fff in remote_fileio_request (buf=0x127b240 "Xf6fff038,0:", ctrlc_pending_p=0) at /home/yao/SourceCode/gnu/gdb/git/gdb/remote-fileio.c:1255
#17 0x0000000000496f12 in remote_wait_as (ptid=..., status=0x7fffffffdb20, options=1) at /home/yao/SourceCode/gnu/gdb/git/gdb/remote.c:6997
however, we did set rs->waiting_for_stop_reply to zero before Luis's
patch https://sourceware.org/ml/gdb-patches/2015-10/msg00336.html
In fact, Luis's patch v1
https://sourceware.org/ml/gdb-patches/2015-08/msg00809.html is about
setting rs->waiting_for_stop_reply back to one after
remote_fileio_request, which is correct. However during the review, the
patch is changed and ends up with "not setting rs->waiting_for_stop_reply
to zero".
I manually test GDB, but I don't have a way to run regression tests.
gdb:
2016-02-04 Yao Qi <yao.qi@linaro.org>
* remote.c (remote_wait_as): Set rs->waiting_for_stop_reply to
0 before handling 'F' and set it back afterwards.
2016-02-04 15:09:09 +00:00
|
|
|
|
2016-02-04 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* remote.c (remote_wait_as): Set rs->waiting_for_stop_reply to
|
|
|
|
|
0 before handling 'F' and set it back afterwards.
|
|
|
|
|
|
2016-02-02 16:39:06 -05:00
|
|
|
|
2016-02-02 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* ui-out.c (MAX_UI_OUT_LEVELS): Remove.
|
|
|
|
|
|
2016-02-02 12:02:16 +01:00
|
|
|
|
2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* amd64-linux-siginfo.c (nat_siginfo_t, nat_sigval_t, nat_timeval):
|
|
|
|
|
New types.
|
|
|
|
|
(compat_siginfo): New bound fields added.
|
|
|
|
|
(compat_x32_siginfo): New field added.
|
|
|
|
|
(cpt_si_addr_lsb): New define.
|
|
|
|
|
(compat_siginfo_from_siginfo): Use nat_siginfo.
|
|
|
|
|
(siginfo_from_compat_siginfo): Use nat_siginfo.
|
|
|
|
|
(compat_x32_siginfo_from_siginfo): Likewise.
|
|
|
|
|
(siginfo_from_compat_x32_siginfo): Likewise.
|
|
|
|
|
|
2016-02-02 11:58:36 +01:00
|
|
|
|
2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* linux-tdep.c (linux_get_siginfo_type): Add the _addr_bnd
|
|
|
|
|
structure to the siginfo if extra_fields contains
|
|
|
|
|
LINUX_SIGINFO_FIELD_ADDR_BND.
|
|
|
|
|
|
2016-02-02 11:50:17 +01:00
|
|
|
|
2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* linux-tdep.h (linux_get_siginfo_type_with_fields): Make extern.
|
|
|
|
|
* linux-tdep.c (linux_get_siginfo_type_with_fields): Make extern.
|
|
|
|
|
* i386-linux-tdep.h (x86_linux_get_siginfo_type): New
|
|
|
|
|
function.
|
|
|
|
|
* amd64-linux-tdep.c (amd64_linux_init_abi_common): Add
|
|
|
|
|
x86_linux_get_siginfo_type for the amd64 abi.
|
|
|
|
|
* i386-linux-tdep.c (x86_linux_get_siginfo_type): New
|
|
|
|
|
function.
|
|
|
|
|
(i386_linux_init_abi): Add new function at the i386 ABI
|
|
|
|
|
initialization.
|
|
|
|
|
|
2016-02-02 11:46:28 +01:00
|
|
|
|
2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* linux-tdep.h (linux_siginfo_extra_field_values): New enum values.
|
|
|
|
|
(linux_siginfo_extra_fields): New enum type.
|
|
|
|
|
* linux-tdep.c (linux_get_siginfo_type_with_fields): New function.
|
|
|
|
|
(linux_get_siginfo_type): Use new function.
|
|
|
|
|
|
Merge gdb and gdbserver implementations for siginfo
Extract the compatible siginfo handling from amd64-linux-nat.c and
gdbserver/linux-x86-low to a new file nat/amd64-linux-siginfo.c.
2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com>
gdb/ChangeLog:
* nat/amd64-linux-siginfo.c: New file.
* nat/amd64-linux-siginfo.h: New file.
* Makefile.in (HFILES_NO_SRCDIR): Add nat/amd64-linux-siginfo.h.
(amd64-linux-siginfo.o): New rule.
* config/i386/linux64.mh (NATDEPFILES): Add amd64-linux-siginfo.o.
* amd64-linux-nat.c (nat/amd64-linux-siginfo.h): New include.
(compat_siginfo_from_siginfo, siginfo_from_compat_siginfo)
(compat_x32_siginfo_from_siginfo, siginfo_from_compat_x32_siginfo)
(compat_timeval, compat_sigval, compat_x32_clock, cpt_si_pid)
(cpt_si_uid, cpt_si_timerid, cpt_si_overrun, cpt_si_status)
(cpt_si_utime, cpt_si_stime, cpt_si_ptr, cpt_si_addr, cpt_si_band)
(cpt_si_fd, si_timerid, si_overrun): Move to nat/amd64-linux-siginfo.c.
gdb/gdbserver/ChangeLog:
* configure.srv (x86_64-*-linux*): Add amd64-linux-siginfo.o
to srv_tgtobj.
(i[34567]86-*-linux*): Add amd64-linux-siginfo.o
to srv_tgtobj.
* linux-x86-low.c [__x86_64__]: Include
"nat/amd64-linux-siginfo.h".
(compat_siginfo_from_siginfo, siginfo_from_compat_siginfo)
(compat_x32_siginfo_from_siginfo, siginfo_from_compat_x32_siginfo)
(compat_timeval, compat_sigval, compat_x32_clock, cpt_si_pid)
(cpt_si_uid, cpt_si_timerid, cpt_si_overrun, cpt_si_status)
(cpt_si_utime, cpt_si_stime, cpt_si_ptr, cpt_si_addr, cpt_si_band)
(cpt_si_fd, si_timerid, si_overrun): Move from
nat/amd64-linux-siginfo.c.
* Makefile.in (amd64-linux-siginfo.o:): New rule.
2016-02-02 11:42:56 +01:00
|
|
|
|
2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
|
|
|
|
|
|
|
|
|
* nat/amd64-linux-siginfo.c: New file.
|
|
|
|
|
* nat/amd64-linux-siginfo.h: New file.
|
|
|
|
|
* Makefile.in (HFILES_NO_SRCDIR): Add nat/amd64-linux-siginfo.h.
|
|
|
|
|
(amd64-linux-siginfo.o): New rule.
|
|
|
|
|
* config/i386/linux64.mh (NATDEPFILES): Add amd64-linux-siginfo.o.
|
|
|
|
|
* amd64-linux-nat.c (nat/amd64-linux-siginfo.h): New include.
|
|
|
|
|
(compat_siginfo_from_siginfo, siginfo_from_compat_siginfo)
|
|
|
|
|
(compat_x32_siginfo_from_siginfo, siginfo_from_compat_x32_siginfo)
|
|
|
|
|
(compat_timeval, compat_sigval, compat_x32_clock, cpt_si_pid)
|
|
|
|
|
(cpt_si_uid, cpt_si_timerid, cpt_si_overrun, cpt_si_status)
|
|
|
|
|
(cpt_si_utime, cpt_si_stime, cpt_si_ptr, cpt_si_addr, cpt_si_band)
|
|
|
|
|
(cpt_si_fd, si_timerid, si_overrun): Move to nat/amd64-linux-siginfo.c.
|
|
|
|
|
|
2015-12-11 17:37:49 +00:00
|
|
|
|
2016-02-01 Andrew Burgess <andrew.burgess@embecosm.com>
|
|
|
|
|
|
|
|
|
|
* value.c (max_value_size): New variable.
|
|
|
|
|
(MIN_VALUE_FOR_MAX_VALUE_SIZE): New define.
|
|
|
|
|
(set_max_value_size): New function.
|
|
|
|
|
(show_max_value_size): New function.
|
|
|
|
|
(check_type_length_before_alloc): New function.
|
|
|
|
|
(allocate_value_contents): Call check_type_length_before_alloc.
|
|
|
|
|
(set_value_enclosing_type): Likewise.
|
|
|
|
|
(_initialize_values): Add set/show handler for max-value-size.
|
|
|
|
|
* NEWS: Mention new set/show command.
|
|
|
|
|
|
2016-01-31 22:22:19 -05:00
|
|
|
|
2016-01-31 Simon Marchi <simon.marchi@polymtl.ca>
|
|
|
|
|
|
|
|
|
|
* varobj.h (struct varobj): Fix typos in comments.
|
|
|
|
|
(struct lang_varobj_ops): Likewise.
|
|
|
|
|
* varobj.c (VAROBJ_TABLE_SIZE): Likewise.
|
|
|
|
|
(varobj_create): Move misplaced comment.
|
|
|
|
|
|
2016-01-29 15:32:29 -05:00
|
|
|
|
2016-01-29 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* aarch64-tdep.c (aarch64_record_asimd_load_store): Add braces
|
|
|
|
|
to for include additional lines.
|
|
|
|
|
* xcoffread.c (scan_xcoff_symtab): Remove unnecessary braces.
|
|
|
|
|
|
2016-01-28 13:49:46 -05:00
|
|
|
|
2016-01-28 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* gnulib/import/Makefile.am: Regenerate.
|
|
|
|
|
* gnulib/import/Makefile.in: Regenerate.
|
|
|
|
|
* gnulib/import/m4/gnulib-cache.m4: Regenerate.
|
|
|
|
|
* gnulib/update-gnulib.sh (IMPORTED_GNULIB_MODULES): Add rawmemchr.
|
|
|
|
|
|
2016-01-28 10:28:56 -05:00
|
|
|
|
2016-01-28 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* remote.c (skip_to_semicolon): Remove.
|
|
|
|
|
(remote_parse_stop_reply): Use strchrnul instead of
|
|
|
|
|
skip_to_semicolon.
|
|
|
|
|
* gnulib/update-gnulib.sh (IMPORTED_GNULIB_MODULES): Add
|
|
|
|
|
strchrnul.
|
|
|
|
|
* gnulib/aclocal.m4: Regenerate.
|
|
|
|
|
* gnulib/config.in: Regenerate.
|
|
|
|
|
* gnulib/configure: Regenerate.
|
|
|
|
|
* gnulib/import/Makefile.am: Regenerate.
|
|
|
|
|
* gnulib/import/Makefile.in: Regenerate.
|
|
|
|
|
* gnulib/import/m4/gnulib-cache.m4: Regenerate.
|
|
|
|
|
* gnulib/import/m4/gnulib-comp.m4: Regenerate.
|
|
|
|
|
* gnulib/import/m4/rawmemchr.m4: New file.
|
|
|
|
|
* gnulib/import/m4/strchrnul.m4: New file.
|
|
|
|
|
* gnulib/import/rawmemchr.c: New file.
|
|
|
|
|
* gnulib/import/rawmemchr.valgrind: New file.
|
|
|
|
|
* gnulib/import/strchrnul.c: New file.
|
|
|
|
|
* gnulib/import/strchrnul.valgrind: New file.
|
|
|
|
|
|
2016-01-28 14:16:42 +00:00
|
|
|
|
2016-01-28 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (build_target_command_list): Don't call continue
|
|
|
|
|
if aexpr is NULL.
|
|
|
|
|
(build_target_condition_list): Likewise.
|
|
|
|
|
|
rx: Treat scalars larger than 8 bytes as aggregates in rx_push_dummy_call.
This patch fixes the following failures (which are also GDB internal errors)
for the -m64bit-doubles multilib:
FAIL: gdb.base/callfuncs.exp: p t_double_complex_values(dc1, dc2) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: p t_double_complex_values(dc3, dc4) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: p t_double_complex_many_args(dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: p t_double_complex_many_args(dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc1, ldc2) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc3, ldc4) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1,ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: noproto: p t_double_complex_values(dc1, dc2) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: noproto: p t_double_complex_values(dc3, dc4) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: noproto: p t_double_complex_many_args(dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: noproto: p t_double_complex_many_args(dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: noproto: p t_long_double_complex_values(ldc1, ldc2) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: noproto: p t_long_double_complex_values(ldc3, ldc4) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: noproto: p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4) (GDB internal error)
FAIL: gdb.base/callfuncs.exp: noproto: p t_long_double_complex_many_args(ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1,ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1) (GDB internal error)
FAIL: gdb.base/varargs.exp: print find_max_double_real(4, dc1, dc2, dc3, dc4) (GDB internal error)
FAIL: gdb.base/varargs.exp: print find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4) (GDB internal error)
The assertion failure which is tripped is:
gdb_assert (arg_size <= 4);
While it may seem that the patch ought to disallow scalars larger than
4, scalars of size 8 are explicitly handled by the code elsewhere.
This came up because gcc has a complex type that is 16 bytes in length
when 64-bit doubles are used.
gdb/ChangeLog:
* rx-tdep.c (rx_push_dummy_call): Treat scalars larger than 8
bytes as aggregates.
2016-01-23 15:06:08 -07:00
|
|
|
|
2016-01-27 Kevin Buettner <kevinb@redhat.com>
|
|
|
|
|
|
|
|
|
|
* rx-tdep.c (rx_push_dummy_call): Treat scalars larger than 8
|
|
|
|
|
bytes as aggregates.
|
|
|
|
|
|
2016-01-27 13:54:37 +04:00
|
|
|
|
2016-01-27 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Responsible Maintainers): Add Keith Seitz as
|
|
|
|
|
Linespec Maintainers.
|
|
|
|
|
|
2016-01-26 16:30:03 -05:00
|
|
|
|
2016-01-26 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* common/common-utils.c (skip_spaces): Fix comment.
|
|
|
|
|
(skip_to_space_const): Likewise.
|
|
|
|
|
|
2016-01-26 14:08:26 +00:00
|
|
|
|
2016-01-25 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arch/arm-get-next-pcs.c (thumb_deal_with_atomic_sequence_raw):
|
|
|
|
|
Remove argument pc. Get pc by regcache_read_pc. Callers updated.
|
|
|
|
|
(arm_deal_with_atomic_sequence_raw): Likewise.
|
|
|
|
|
(thumb_get_next_pcs_raw): Likewise.
|
|
|
|
|
(arm_get_next_pcs_raw): Likewise.
|
|
|
|
|
(arm_get_next_pcs): Remove argument pc. Callers updated.
|
|
|
|
|
* arch/arm-get-next-pcs.h (arm_get_next_pcs): Update declaration.
|
|
|
|
|
|
2016-01-25 20:29:54 +01:00
|
|
|
|
2016-01-25 Mark Wielaard <mjw@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ada-lang.c (ada_evaluate_subexp): Add proper else block.
|
|
|
|
|
* c-typeprint.c (c_type_print_base): Fix misleading indentation of
|
|
|
|
|
if statement.
|
|
|
|
|
* inflow.c (child_terminal_ours_1): Fix misleading indentation of
|
|
|
|
|
statement block by introducing an else.
|
|
|
|
|
* linux-record.c (record_linux_sockaddr): Fix misleading indentation
|
|
|
|
|
of return statements.
|
|
|
|
|
(record_linux_msghdr): Likewise.
|
|
|
|
|
|
2016-01-25 12:00:20 +00:00
|
|
|
|
2016-01-25 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR threads/19461
|
|
|
|
|
* infrun.c (handle_inferior_event_1) <fork/vfork>: Update
|
|
|
|
|
parent/child running states.
|
|
|
|
|
|
Fix PR 19494: hang when killing unfollowed fork children
linux_nat_kill relies on get_last_target_status to determine whether
the current inferior is stopped at a unfollowed fork/vfork event.
This is bad because many things can happen ever since we caught the
fork/vfork event... This commit rewrites that code to instead walk
the thread list looking for unfollowed fork events, similarly to what
was done for remote.c.
New test included. The main idea of the test is make sure that when
the program stops for a fork catchpoint, and the user kills the
parent, gdb also kills the unfollowed fork child. Since the child
hasn't been added as an inferior at that point, we need some other
portable way to detect that the child is gone. The test uses a pipe
for that. The program forks twice, so you have grandparent, child and
grandchild. The grandchild inherits the write side of the pipe. The
grandparent hangs reading from the pipe, since nothing ever writes to
it. If, when GDB kills the child, it also kills the grandchild, then
the grandparent's pipe read returns 0/EOF and the test passes.
Otherwise, if GDB doesn't kill the grandchild, then the pipe read
never returns and the test times out, like:
FAIL: gdb.base/catch-fork-kill.exp: fork-kind=fork: exit-kind=kill: fork: kill parent (timeout)
FAIL: gdb.base/catch-fork-kill.exp: fork-kind=vfork: exit-kind=kill: vfork: kill parent (timeout)
No regressions on x86_64 Fedora 20. New test passes with gdbserver as
well.
gdb/ChangeLog:
2016-01-25 Pedro Alves <palves@redhat.com>
PR gdb/19494
* linux-nat.c (kill_one_lwp): New, factored out from ...
(kill_callback): ... this.
(kill_wait_callback): New, factored out from ...
(kill_wait_one_lwp): ... this.
(kill_unfollowed_fork_children): New function.
(linux_nat_kill): Use it.
gdb/testsuite/ChangeLog:
2016-01-25 Pedro Alves <palves@redhat.com>
PR gdb/19494
* gdb.base/catch-fork-kill.c: New file.
* gdb.base/catch-fork-kill.exp: New file.
2016-01-25 12:00:20 +00:00
|
|
|
|
2016-01-25 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/19494
|
|
|
|
|
* linux-nat.c (kill_one_lwp): New, factored out from ...
|
|
|
|
|
(kill_callback): ... this.
|
|
|
|
|
(kill_wait_callback): New, factored out from ...
|
|
|
|
|
(kill_wait_one_lwp): ... this.
|
|
|
|
|
(kill_unfollowed_fork_children): New function.
|
|
|
|
|
(linux_nat_kill): Use it.
|
|
|
|
|
|
2016-01-21 09:51:35 -08:00
|
|
|
|
2016-01-22 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c (fbsd_pid_to_str): Adjust string format.
|
|
|
|
|
|
2016-01-22 09:01:09 +00:00
|
|
|
|
2016-01-22 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-linux-nat.c (fetch_fpregs): Call perror_with_name
|
|
|
|
|
instead of warning.
|
|
|
|
|
(store_fpregs, fetch_regs, store_regs): Likewise.
|
|
|
|
|
(fetch_wmmx_regs, store_wmmx_regs): Likewise.
|
|
|
|
|
(fetch_vfp_regs, store_vfp_regs): Likewise.
|
|
|
|
|
|
2016-01-21 17:02:39 -08:00
|
|
|
|
2016-01-21 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (init_breakpoint_sal): Add comment.
|
|
|
|
|
|
2016-01-21 16:58:12 +01:00
|
|
|
|
2016-01-21 Marcin Kościelnicki <koriakin@0x04.net>
|
|
|
|
|
|
|
|
|
|
* ax-gdb.c (gen_traced_pop): Use gen_fetch for string collection.
|
|
|
|
|
|
2016-01-21 12:56:25 +01:00
|
|
|
|
2016-01-21 Andrew Burgess <andrew.burgess@embecosm.com>
|
|
|
|
|
|
|
|
|
|
* disasm.c (maybe_add_dis_line_entry): Rename to...
|
|
|
|
|
(add_dis_line_entry): ...this, and update header comment.
|
|
|
|
|
(do_mixed_source_and_assembly): Now use add_dis_line_entry.
|
|
|
|
|
|
2016-01-21 11:18:45 +00:00
|
|
|
|
2016-01-21 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (COMPILER_CFLAGS): New.
|
|
|
|
|
(CXXFLAGS): Get it from configure.
|
|
|
|
|
(INTERNAL_CFLAGS_BASE, INTERNAL_LDFLAGS): Use COMPILER_CFLAGS
|
|
|
|
|
instead of CFLAGS.
|
|
|
|
|
* build-with-cxx.m4 (GDB_AC_BUILD_WITH_CXX): Set and AC_SUBST
|
|
|
|
|
COMPILER_CFLAGS.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
|
Fix regression introduced in "break *<EXPR>" by explicit location patches.
A relatively recent patch support for explicit locations, and part
of that patch cleaned up the way we parse breakpoint locations.
Unfortunatly, a small regression crept in for "*<EXPR>" breakpoint
locations. In particular, on PIE programs, one can see the issue by
doing the following, with any program:
(gdb) b *main
Breakpoint 1 at 0x51a: file hello.c, line 3.
(gdb) run
Starting program: /[...]/hello
Error in re-setting breakpoint 1: Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x51a
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x51a
Just for the record, this regression was introduced by:
commit a06efdd6effd149a1d392df8d62824e44872003a
Date: Tue Aug 11 17:09:35 2015 -0700
Subject: Explicit locations: introduce address locations
What happens is that the patch makes the implicit assumption that
the address computed the first time is static, as if it was designed
to only support litteral expressions (Eg. "*0x1234"). This allows
the shortcut of not re-computing the breakpoint location's address
when re-setting breakpoints.
However, this does not work in general, as demonstrated in the example
above.
This patch plugs that hole simply by saving the original expression
used to compute the address as part of the address location, so as
to then re-evaluate that expression during breakpoint re-set.
gdb/ChangeLog:
* location.h (new_address_location): Add new parameters
"addr_string" and "addr_string_len".
(get_address_string_location): Add declaration.
* location.c (new_address_location): Add new parameters
"addr_string" and "addr_string_len". If not NULL, store
a copy of the addr_string in the new location as well.
(get_address_string_location): New function.
(string_to_event_location): Update call to new_address_location.
* linespec.c (event_location_to_sals) <ADDRESS_LOCATION>:
Save the event location in the parser's state before
passing it to convert_address_location_to_sals.
* breakpoint.c (create_thread_event_breakpoint): Update call
to new_address_location.
(init_breakpoint_sal): Get the event location's string, if any,
and use it to update call to new_address_location.
* python/py-finishbreakpoint.c (bpfinishpy_init):
Update call to new_address_location.
* spu-tdep.c (spu_catch_start): Likewise.
* config/djgpp/fnchange.lst: Add entries for
gdb/testsuite/gdb.base/break-fun-addr1.c and
gdb/testsuite/gdb.base/break-fun-addr2.c.
gdb/testsuite/ChangeLog:
* gdb.base/break-fun-addr.exp: New file.
* gdb.base/break-fun-addr1.c: New file.
* gdb.base/break-fun-addr2.c: New file.
2015-12-08 19:04:56 +01:00
|
|
|
|
2016-01-21 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* location.h (new_address_location): Add new parameters
|
|
|
|
|
"addr_string" and "addr_string_len".
|
|
|
|
|
(get_address_string_location): Add declaration.
|
|
|
|
|
* location.c (new_address_location): Add new parameters
|
|
|
|
|
"addr_string" and "addr_string_len". If not NULL, store
|
|
|
|
|
a copy of the addr_string in the new location as well.
|
|
|
|
|
(get_address_string_location): New function.
|
|
|
|
|
(string_to_event_location): Update call to new_address_location.
|
|
|
|
|
* linespec.c (event_location_to_sals) <ADDRESS_LOCATION>:
|
|
|
|
|
Save the event location in the parser's state before
|
|
|
|
|
passing it to convert_address_location_to_sals.
|
|
|
|
|
* breakpoint.c (create_thread_event_breakpoint): Update call
|
|
|
|
|
to new_address_location.
|
|
|
|
|
(init_breakpoint_sal): Get the event location's string, if any,
|
|
|
|
|
and use it to update call to new_address_location.
|
|
|
|
|
* python/py-finishbreakpoint.c (bpfinishpy_init):
|
|
|
|
|
Update call to new_address_location.
|
|
|
|
|
* spu-tdep.c (spu_catch_start): Likewise.
|
|
|
|
|
|
|
|
|
|
* config/djgpp/fnchange.lst: Add entries for
|
|
|
|
|
gdb/testsuite/gdb.base/break-fun-addr1.c and
|
|
|
|
|
gdb/testsuite/gdb.base/break-fun-addr2.c.
|
|
|
|
|
|
Detect the arm/thumb mode of code SIGRETURN or RT_SIGRETURN returns to
This patch fixes the following regression introduced by commit d0e59a68
step^M
39 } /* handler */^M
1: x/i $pc^M
=> 0x8740 <handler+80>: sub sp, r11, #0^M
(gdb) step^M
^M
Program received signal SIGSEGV, Segmentation fault.^M
setitimer () at ../sysdeps/unix/syscall-template.S:81^M
81 ../sysdeps/unix/syscall-template.S: No such file or directory.^M
1: x/i $pc^M
=> 0xb6eff9c0 <setitimer>: push {r7}^M
(gdb) FAIL: gdb.base/sigstep.exp: continue to handler, si+advance in handler, step from handler: leave handler
in my test setting, program is compiled in arm mode, but the glibc
is built in thumb mode, so when we do 'step' to step over syscall
instruction svc for SIGRETURN, GDB should set breakpoint for arm mode
in the program, even though the current program in glibc is in thumb
mode. Current GDB doesn't consider the case that the mode of program
SIGRETURN goes to can be different from current program mode.
In fact, GDB has taken care of this arm/thumb mode changes already,
see
/* Copy the value of next pc of sigreturn and rt_sigrturn into PC,
return 1. In addition, set IS_THUMB depending on whether we
will return to ARM or Thumb code. Return 0 if it is not a
rt_sigreturn/sigreturn syscall. */
static int
arm_linux_sigreturn_return_addr (struct frame_info *frame,
unsigned long svc_number,
CORE_ADDR *pc, int *is_thumb)
but in the commit d0e59a68
> - arm_linux_sigreturn_return_addr (frame, svc_number, &return_addr, &is_thumb);
> + if (svc_number == ARM_SIGRETURN || svc_number == ARM_RT_SIGRETURN)
> + next_pc = arm_linux_sigreturn_next_pc (regcache, svc_number);
the IS_THUMB setting is lost, so it is a regression.
gdb:
2016-01-21 Yao Qi <yao.qi@linaro.org>
* arm-linux-tdep.c (arm_linux_sigreturn_next_pc): Add parameter
is_thumb and set it according to CPSR saved on the stack.
(arm_linux_get_next_pcs_syscall_next_pc): Pass is_thumb to
arm_linux_sigreturn_next_pc.
gdb/gdbserver:
2016-01-21 Yao Qi <yao.qi@linaro.org>
* linux-arm-low.c (arm_sigreturn_next_pc): Add parameter
is_thumb and set it according to CPSR saved on the stack.
(get_next_pcs_syscall_next_pc): Pass is_thumb to
arm_sigreturn_next_pc.
2016-01-21 07:48:50 +00:00
|
|
|
|
2016-01-21 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-linux-tdep.c (arm_linux_sigreturn_next_pc): Add parameter
|
|
|
|
|
is_thumb and set it according to CPSR saved on the stack.
|
|
|
|
|
(arm_linux_get_next_pcs_syscall_next_pc): Pass is_thumb to
|
|
|
|
|
arm_linux_sigreturn_next_pc.
|
|
|
|
|
|
Fix sorting of enum values in FlagEnumerationPrinter
The lambda function used to sort the enumerator list does not work
properly. This list consists of tuples, (enum label, enum value). The
key function returns x.enumval. enumval not being defined for a tuple,
we see this exception in the test log:
Python Exception <class 'AttributeError'> 'tuple' object has no attribute 'enumval'
The function should return the second item of the tuple, which is the
enumval.
The pretty-printer still worked mostly correctly, except that the
enumeration values were not sorted. The test still passed because the
enumeration values are already sorted where they are defined. The test
also passed despite the exception being printed, because the right output
was printed after the exception:
print (enum flag_enum) (FLAG_1)
Python Exception <type 'exceptions.AttributeError'> 'tuple' objecthas no attribute 'enumval':M
$7 = 0x1 [FLAG_1]
(gdb) PASS: gdb.python/py-pp-maint.exp: print FLAG_1
New in v2:
- Improved test case, I stole Pedro's example directly. It verifies
that the sorting of enumerators by value works, by checking that
printing FOO_MASK appears as FOO_1 | FOO_2 | FOO_3.
I noticed that I could change the regexps to almost anything and the
tests would still pass. I think it was because of the | in there. I
made them more robust by using string_to_regexp. I used curly braces
{ } instead of quoting marks " " for strings, so that I could use
square brackets [ ] in them without having to escape them all. I also
removed the "message" part of the tests, since they are redundant with
the command, and it's just more maintenance to have to update them.
Tested with Python 2.7 and 3.5.
gdb/ChangeLog:
* python/lib/gdb/printing.py (FlagEnumerationPrinter.__call__):
Fix enumerators sort key function.
gdb/testsuite/ChangeLog:
* gdb.python/py-pp-maint.exp: Change/add enum flag tests.
* gdb.python/py-pp-maint.c (enum flag_enum): Use more complex
enum flag values.
2016-01-20 13:42:53 -05:00
|
|
|
|
2016-01-20 Simon Marchi <simon.marchi@polymtl.ca>
|
|
|
|
|
|
|
|
|
|
* python/lib/gdb/printing.py (FlagEnumerationPrinter.__call__):
|
|
|
|
|
Fix enumerators sort key function.
|
|
|
|
|
|
2016-01-20 08:01:39 +04:00
|
|
|
|
2016-01-20 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
2016-01-20 13:10:41 +00:00
|
|
|
|
* printcmd.c (print_scalar_formatted): Move binary operator from
|
2016-01-20 08:01:39 +04:00
|
|
|
|
end of line to beginning of next line. Adjust formatting
|
|
|
|
|
accordingly.
|
|
|
|
|
|
2016-01-19 10:23:00 -08:00
|
|
|
|
2016-01-19 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-nat.c (fbsd_pid_to_exec_file): Use new "buflen" instead of
|
|
|
|
|
"len" with sysctl.
|
|
|
|
|
|
2015-12-21 16:34:15 -08:00
|
|
|
|
2016-01-19 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd-tdep.c (find_stop_signal): Remove.
|
|
|
|
|
(struct fbsd_collect_regset_section_cb) <lwp>: New field.
|
|
|
|
|
<stop_signal>: New field.
|
|
|
|
|
<abort_iteration>: New field.
|
|
|
|
|
(fbsd_collect_regset_section_cb): Use new fields.
|
|
|
|
|
(fbsd_collect_thread_registers): New function.
|
|
|
|
|
(struct fbsd_corefile_thread_data): New structure.
|
|
|
|
|
(fbsd_corefile_thread): New function.
|
|
|
|
|
(fbsd_make_corefile_notes): Use new function to dump notes for each
|
|
|
|
|
non-exited thread in a process.
|
|
|
|
|
|
2015-04-29 11:53:43 -04:00
|
|
|
|
2016-01-19 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* configure.ac: Check for support for LWP names on FreeBSD.
|
|
|
|
|
* fbsd-nat.c [PT_LWPINFO] New variable debug_fbsd_lwp.
|
|
|
|
|
[TDP_RFPPWAIT || HAVE_STRUCT_PTRACE_LWPINFO_PL_TDNAME]
|
|
|
|
|
(fbsd_fetch_kinfo_proc): Move function earlier.
|
|
|
|
|
[PT_LWPINFO] (fbsd_thread_alive): New function.
|
|
|
|
|
[PT_LWPINFO] (fbsd_pid_to_str): New function.
|
|
|
|
|
[HAVE_STRUCT_PTRACE_LWPINFO_PL_TDNAME] (fbsd_thread_name): New function.
|
|
|
|
|
[PT_LWP_EVENTS] (fbsd_enable_lwp_events): New function.
|
|
|
|
|
[PT_LWPINFO] (fbsd_add_threads): New function.
|
|
|
|
|
[PT_LWPINFO] (fbsd_update_thread_list): New function.
|
|
|
|
|
[PT_LWPINFO] New variable super_resume.
|
|
|
|
|
[PT_LWPINFO] (resume_one_thread_cb): New function.
|
|
|
|
|
[PT_LWPINFO] (resume_all_threads_cb): New function.
|
|
|
|
|
[PT_LWPINFO] (fbsd_resume): New function.
|
|
|
|
|
(fbsd_remember_child): Save full ptid instead of plain pid.
|
|
|
|
|
(fbsd_is_child_pending): Return ptid of saved child process.
|
|
|
|
|
(fbsd_wait): Include lwp in returned ptid and switch to LWP ptid on
|
|
|
|
|
first stop.
|
|
|
|
|
[PT_LWP_EVENTS] Handle LWP events.
|
|
|
|
|
[TDP_RFPPWAIT] Include LWP in child ptid.
|
|
|
|
|
(fbsd_post_startup_inferior) [PT_LWP_EVENTS]: Enable LWP events.
|
|
|
|
|
(fbsd_post_attach) [PT_LWP_EVENTS]: Enable LWP events.
|
|
|
|
|
Add threads for existing processes.
|
|
|
|
|
(fbsd_nat_add_target) [PT_LWPINFO]: Set "to_thread_alive" to
|
|
|
|
|
"fbsd_thread_alive".
|
|
|
|
|
Set "to_pid_to_str" to "fbsd_pid_to_str".
|
|
|
|
|
[HAVE_STRUCT_PTRACE_LWPINFO_PL_TDNAME]: Set "to_thread_name" to
|
|
|
|
|
"fbsd_thread_name".
|
|
|
|
|
[PT_LWPINFO]: Set "to_update_thread_list" to "fbsd_update_thread_list".
|
|
|
|
|
Set "to_has_thread_control" to "tc_schedlock".
|
|
|
|
|
Set "to_resume" to "fbsd_resume".
|
|
|
|
|
(_initialize_fbsd_nat): New function.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
* config.in: Regenerate.
|
|
|
|
|
|
2016-01-15 12:21:07 -08:00
|
|
|
|
2016-01-19 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Use
|
|
|
|
|
get_ptrace_pid.
|
|
|
|
|
(amd64bsd_store_inferior_registers): Use get_ptrace_pid.
|
|
|
|
|
(amd64bsd_dr_get): Use get_ptrace_pid.
|
|
|
|
|
(amd64bsd_dr_set): Use get_ptrace_pid.
|
|
|
|
|
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Use get_ptrace_pid.
|
|
|
|
|
(i386bsd_store_inferior_registers): Use get_ptrace_pid.
|
|
|
|
|
(i386bsd_dr_get): Use get_ptrace_pid.
|
|
|
|
|
(i386bsd_dr_set): Use get_ptrace_pid.
|
|
|
|
|
* inf-ptrace.c (get_ptrace_pid): Export.
|
|
|
|
|
* inf-ptrace.h (get_ptrace_pid): Declare.
|
|
|
|
|
* ppcfbsd-nat.c (ppcfbsd_fetch_inferior_registers): Use lwp id.
|
|
|
|
|
(ppcfbsd_store_inferior_registers): Use lwp id.
|
|
|
|
|
|
2015-12-13 21:49:52 -08:00
|
|
|
|
2016-01-19 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* fbsd_tdep.c (fbsd_core_pid_to_str): New function.
|
|
|
|
|
(fbsd_core_thread_name): New function.
|
|
|
|
|
(fbsd_init_abi): Add "core_pid_to_str" gdbarch method.
|
|
|
|
|
Add "core_thread_name" gdbarch method.
|
|
|
|
|
|
2016-01-18 09:49:23 -08:00
|
|
|
|
2016-01-19 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* corelow.c (core_thread_name): New function.
|
|
|
|
|
(init_core_ops): Use "core_thread_name" for the "to_thread_name"
|
|
|
|
|
target op.
|
|
|
|
|
* gdbarch.sh (core_thread_name): New gdbarch callback.
|
|
|
|
|
* gdbarch.h: Re-generate.
|
|
|
|
|
* gdbarch.c: Re-generate.
|
|
|
|
|
|
Fix enum flag with Python 3
Using Python 3.5 (I assume it's the same with 3.4 and lower, but I didn't
test), I see this:
print (enum flag_enum) (FLAG_1)^M
Python Exception <class 'TypeError'> %x format: an integer is required, not gdb.Value: ^M
$7 = ^M
(gdb) FAIL: gdb.python/py-pp-maint.exp: print FLAG_1
Apparently, this idiom, where v is a gdb.Value, was possible with Python 2,
but not with Python 3:
'%x' % v
In Python 2, it would automatically get converted to an integer. To solve
it, I simply added wrapped v in a call to int().
'%x' % int(v)
In Python 2, the int type is implemented with a "long" in C, so on x86-32 it's
32-bits. I was worried that doing int(v) would truncate the value and give
wrong results for enum values > 32-bits. However, the int type != the int
function. The int function does the right thing, selecting the right integer
type for the given value. I tested with large enum values on x86-32 and
Python 2, and everything works as expected.
gdb/ChangeLog:
* python/lib/gdb/printing.py (_EnumInstance.to_string): Explicitly
convert gdb.Value to integer type using int().
2016-01-19 11:07:07 -05:00
|
|
|
|
2016-01-19 Simon Marchi <simon.marchi@polymtl.ca>
|
|
|
|
|
|
|
|
|
|
* python/lib/gdb/printing.py (_EnumInstance.to_string): Explicitly
|
|
|
|
|
convert gdb.Value to integer type using int().
|
|
|
|
|
|
2016-01-18 11:59:45 -08:00
|
|
|
|
2016-01-19 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* configure.ac: Include <sys/types.h when checking for "r_fs" in
|
|
|
|
|
"struct reg".
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
|
2016-01-20 13:03:40 +00:00
|
|
|
|
2016-01-19 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* ax-gdb.c (agent_command_1): Adjust call to decode_line_full.
|
|
|
|
|
* break-catch-throw.c (re_set_exception_catchpoint): Pass the
|
|
|
|
|
current program space down to linespec decoding and breakpoint
|
|
|
|
|
location updating.
|
|
|
|
|
* breakpoint.c (parse_breakpoint_sals): Adjust calls to
|
|
|
|
|
decode_line_full.
|
|
|
|
|
(until_break_command): Adjust calls to decode_line_1.
|
|
|
|
|
(base_breakpoint_decode_location, bkpt_decode_location): Add
|
|
|
|
|
'search_pspace' parameter. Pass it along.
|
|
|
|
|
(bkpt_probe_create_sals_from_location): Adjust calls to
|
|
|
|
|
parse_probes.
|
|
|
|
|
(tracepoint_decode_location, tracepoint_probe_decode_location)
|
|
|
|
|
(strace_marker_decode_location): Add 'search_pspace' parameter.
|
|
|
|
|
Pass it along.
|
|
|
|
|
(all_locations_are_pending): Rewrite to take a breakpoint and
|
|
|
|
|
program space as arguments instead.
|
|
|
|
|
(hoist_existing_locations): New function.
|
|
|
|
|
(update_breakpoint_locations): Add 'filter_pspace' parameter. Use
|
|
|
|
|
hoist_existing_locations instead of always removing all locations,
|
|
|
|
|
and adjust to all_locations_are_pending change.
|
|
|
|
|
(location_to_sals): Add 'search_pspace' parameter. Pass it along.
|
|
|
|
|
Don't disable the breakpoint if there are other locations in
|
|
|
|
|
another program space.
|
|
|
|
|
(breakpoint_re_set_default): Adjust to pass down the current
|
|
|
|
|
program space as filter program space.
|
|
|
|
|
(decode_location_default): Add 'search_pspace' parameter and pass
|
|
|
|
|
it along.
|
|
|
|
|
(prepare_re_set_context): Don't switch program space here.
|
|
|
|
|
(breakpoint_re_set): Use save_current_space_and_thread instead of
|
|
|
|
|
save_current_program_space.
|
|
|
|
|
* breakpoint.h (struct breakpoint_ops) <decode_location>: Add
|
|
|
|
|
'search_pspace' parameter.
|
|
|
|
|
(update_breakpoint_locations): Add 'filter_pspace' parameter.
|
|
|
|
|
* cli/cli-cmds.c (edit_command, list_command): Adjust calls to
|
|
|
|
|
decode_line_1.
|
|
|
|
|
* elfread.c (elf_gnu_ifunc_resolver_return_stop): Pass the current
|
|
|
|
|
program space as filter program space.
|
|
|
|
|
* linespec.c (struct linespec_state) <search_pspace>: New field.
|
|
|
|
|
(create_sals_line_offset, convert_explicit_location_to_sals)
|
|
|
|
|
(parse_linespec): Pass the search program space down.
|
|
|
|
|
(linespec_state_constructor): Add 'search_pspace' parameter.
|
|
|
|
|
Store it.
|
|
|
|
|
(linespec_parser_new): Add 'search_pspace' parameter and pass it
|
|
|
|
|
along.
|
|
|
|
|
(linespec_lex_to_end): Adjust.
|
|
|
|
|
(decode_line_full, decode_line_1): Add 'search_pspace' parameter
|
|
|
|
|
and pass it along.
|
|
|
|
|
(decode_line_with_last_displayed): Adjust.
|
|
|
|
|
(collect_symtabs_from_filename, symtabs_from_filename): New
|
|
|
|
|
'search_pspace' parameter. Use it.
|
|
|
|
|
(find_function_symbols): Pass the search program space down.
|
|
|
|
|
* linespec.h (decode_line_1, decode_line_full): Add
|
|
|
|
|
'search_pspace' parameter.
|
|
|
|
|
* probe.c (parse_probes_in_pspace): New function, factored out
|
|
|
|
|
from ...
|
|
|
|
|
(parse_probes): ... this. Add 'search_pspace' parameter and use
|
|
|
|
|
it.
|
|
|
|
|
* probe.h (parse_probes): Add pspace' parameter.
|
|
|
|
|
* python/python.c (gdbpy_decode_line): Adjust.
|
|
|
|
|
* tracepoint.c (scope_info): Adjust.
|
|
|
|
|
|
MIPS: Remove remnants of 48-bit microMIPS instruction support
The POOL48A major opcode was defined in early revisions of the 64-bit
microMIPS ISA, has never been implemented, and was removed before the
64-bit microMIPS ISA specification[1] has been finalized.
This complements commit a6c7053929dd ("MIPS/opcodes: Remove microMIPS
48-bit LI instruction").
References:
[1] "MIPS Architecture for Programmers, Volume II-B: The microMIPS64
Instruction Set", MIPS Technologies, Inc., Document Number: MD00594,
Revision 3.06, October 17, 2012, Table 6.2 "microMIPS64 Encoding of
Major Opcode Field", p. 578
gas/
* config/tc-mips.c (micromips_insn_length): Remove the mention
of 48-bit microMIPS instructions.
gdb/
* mips-tdep.c (mips_insn_size): Remove 48-bit microMIPS
instruction support.
(micromips_next_pc): Likewise.
(micromips_scan_prologue): Likewise.
(micromips_deal_with_atomic_sequence): Likewise.
(micromips_stack_frame_destroyed_p): Likewise.
(mips_breakpoint_from_pc): Likewise.
opcodes/
* mips-dis.c (print_insn_micromips): Remove 48-bit microMIPS
instruction support.
2016-01-18 21:29:37 +00:00
|
|
|
|
2016-01-18 Maciej W. Rozycki <macro@imgtec.com>
|
|
|
|
|
|
|
|
|
|
* mips-tdep.c (mips_insn_size): Remove 48-bit microMIPS
|
|
|
|
|
instruction support.
|
|
|
|
|
(micromips_next_pc): Likewise.
|
|
|
|
|
(micromips_scan_prologue): Likewise.
|
|
|
|
|
(micromips_deal_with_atomic_sequence): Likewise.
|
|
|
|
|
(micromips_stack_frame_destroyed_p): Likewise.
|
|
|
|
|
(mips_breakpoint_from_pc): Likewise.
|
|
|
|
|
|
2016-01-18 20:24:34 +00:00
|
|
|
|
2016-01-18 Maciej W. Rozycki <macro@imgtec.com>
|
|
|
|
|
|
|
|
|
|
* mips-tdep.c (micromips_insn_at_pc_has_delay_slot): Pass
|
|
|
|
|
unshifted 16-bit microMIPS instruction word to `mips_insn_size'.
|
|
|
|
|
|
Fix PR threads/19422 - show which thread caused stop
This commit changes GDB like this:
- Program received signal SIGINT, Interrupt.
+ Thread 1 "main" received signal SIGINT, Interrupt.
- Breakpoint 1 at 0x40087a: file threads.c, line 87.
+ Thread 3 "bar" hit Breakpoint 1 at 0x40087a: file threads.c, line 87.
... once the program goes multi-threaded. Until GDB sees a second
thread spawn, the output is still the same as before, per the
discussion back in 2012:
https://www.sourceware.org/ml/gdb/2012-11/msg00010.html
This helps non-stop mode, where you can't easily tell which thread hit
a breakpoint or received a signal:
(gdb) info threads
Id Target Id Frame
* 1 Thread 0x7ffff7fc1740 (LWP 19362) "main" (running)
2 Thread 0x7ffff7fc0700 (LWP 19366) "foo" (running)
3 Thread 0x7ffff77bf700 (LWP 19367) "bar" (running)
(gdb)
Program received signal SIGUSR1, User defined signal 1.
0x0000003616a09237 in pthread_join (threadid=140737353877248, thread_return=0x7fffffffd5b8) at pthread_join.c:92
92 lll_wait_tid (pd->tid);
(gdb) b threads.c:87
Breakpoint 1 at 0x40087a: file threads.c, line 87.
(gdb)
Breakpoint 1, thread_function1 (arg=0x1) at threads.c:87
87 usleep (1); /* Loop increment. */
The best the user can do is run "info threads" and try to figure
things out.
It actually also affects all-stop mode, in case of "handle SIG print
nostop":
...
Program received signal SIGUSR1, User defined signal 1.
Program received signal SIGUSR1, User defined signal 1.
Program received signal SIGUSR1, User defined signal 1.
Program received signal SIGUSR1, User defined signal 1.
...
The above doesn't give any clue that these were different threads
getting the SIGUSR1 signal.
I initially thought of lowercasing "breakpoint" in
"Thread 3 hit Breakpoint 1"
but then after trying it I realized that leaving "Breakpoint"
uppercase helps the eye quickly find the relevant information. It's
also easier to implement not showing anything about threads until the
program goes multi-threaded this way.
Here's a larger example session in non-stop mode:
(gdb) c -a&
Continuing.
(gdb) interrupt -a
(gdb)
Thread 1 "main" stopped.
0x0000003616a09237 in pthread_join (threadid=140737353877248, thread_return=0x7fffffffd5b8) at pthread_join.c:92
92 lll_wait_tid (pd->tid);
Thread 2 "foo" stopped.
0x0000003615ebc6ed in nanosleep () at ../sysdeps/unix/syscall-template.S:81
81 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
Thread 3 "bar" stopped.
0x0000003615ebc6ed in nanosleep () at ../sysdeps/unix/syscall-template.S:81
81 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
b threads.c:87
Breakpoint 4 at 0x40087a: file threads.c, line 87.
(gdb) b threads.c:67
Breakpoint 5 at 0x400811: file threads.c, line 67.
(gdb) c -a&
Continuing.
(gdb)
Thread 3 "bar" hit Breakpoint 4, thread_function1 (arg=0x1) at threads.c:87
87 usleep (1); /* Loop increment. */
Thread 2 "foo" hit Breakpoint 5, thread_function0 (arg=0x0) at threads.c:68
68 (*myp) ++;
info threads
Id Target Id Frame
* 1 Thread 0x7ffff7fc1740 (LWP 31957) "main" (running)
2 Thread 0x7ffff7fc0700 (LWP 31961) "foo" thread_function0 (arg=0x0) at threads.c:68
3 Thread 0x7ffff77bf700 (LWP 31962) "bar" thread_function1 (arg=0x1) at threads.c:87
(gdb) shell kill -SIGINT 31957
(gdb)
Thread 1 "main" received signal SIGINT, Interrupt.
0x0000003616a09237 in pthread_join (threadid=140737353877248, thread_return=0x7fffffffd5b8) at pthread_join.c:92
92 lll_wait_tid (pd->tid);
info threads
Id Target Id Frame
* 1 Thread 0x7ffff7fc1740 (LWP 31957) "main" 0x0000003616a09237 in pthread_join (threadid=140737353877248, thread_return=0x7fffffffd5b8) at pthread_join.c:92
2 Thread 0x7ffff7fc0700 (LWP 31961) "foo" thread_function0 (arg=0x0) at threads.c:68
3 Thread 0x7ffff77bf700 (LWP 31962) "bar" thread_function1 (arg=0x1) at threads.c:87
(gdb) t 2
[Switching to thread 2, Thread 0x7ffff7fc0700 (LWP 31961)]
#0 thread_function0 (arg=0x0) at threads.c:68
68 (*myp) ++;
(gdb) catch syscall
Catchpoint 6 (any syscall)
(gdb) c&
Continuing.
(gdb)
Thread 2 "foo" hit Catchpoint 6 (call to syscall nanosleep), 0x0000003615ebc6ed in nanosleep () at ../sysdeps/unix/syscall-template.S:81
81 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
I'll work on documentation next if this looks agreeable.
This patch applies on top of the star wildcards thread IDs series:
https://sourceware.org/ml/gdb-patches/2016-01/msg00291.html
For convenience, I've pushed this to the
users/palves/show-which-thread-caused-stop branch.
gdb/doc/ChangeLog:
2016-01-18 Pedro Alves <palves@redhat.com>
* gdb.texinfo (Threads): Mention that GDB displays the ID and name
of the thread that hit a breakpoint or received a signal.
gdb/ChangeLog:
2016-01-18 Pedro Alves <palves@redhat.com>
* NEWS: Mention that GDB now displays the ID and name of the
thread that hit a breakpoint or received a signal.
* break-catch-sig.c (signal_catchpoint_print_it): Use
maybe_print_thread_hit_breakpoint.
* break-catch-syscall.c (print_it_catch_syscall): Likewise.
* break-catch-throw.c (print_it_exception_catchpoint): Likewise.
* breakpoint.c (maybe_print_thread_hit_breakpoint): New function.
(print_it_catch_fork, print_it_catch_vfork, print_it_catch_solib)
(print_it_catch_exec, print_it_ranged_breakpoint)
(print_it_watchpoint, print_it_masked_watchpoint, bkpt_print_it):
Use maybe_print_thread_hit_breakpoint.
* breakpoint.h (maybe_print_thread_hit_breakpoint): Declare.
* gdbthread.h (show_thread_that_caused_stop): Declare.
* infrun.c (print_signal_received_reason): Print which thread
received signal.
* thread.c (show_thread_that_caused_stop): New function.
gdb/testsuite/ChangeLog:
2016-01-18 Pedro Alves <palves@redhat.com>
* gdb.base/async-shell.exp: Adjust expected output.
* gdb.base/dprintf-non-stop.exp: Adjust expected output.
* gdb.base/siginfo-thread.exp: Adjust expected output.
* gdb.base/watchpoint-hw-hit-once.exp: Adjust expected output.
* gdb.java/jnpe.exp: Adjust expected output.
* gdb.threads/clone-new-thread-event.exp: Adjust expected output.
* gdb.threads/continue-pending-status.exp: Adjust expected output.
* gdb.threads/leader-exit.exp: Adjust expected output.
* gdb.threads/manythreads.exp: Adjust expected output.
* gdb.threads/pthreads.exp: Adjust expected output.
* gdb.threads/schedlock.exp: Adjust expected output.
* gdb.threads/siginfo-threads.exp: Adjust expected output.
* gdb.threads/signal-command-multiple-signals-pending.exp: Adjust
expected output.
* gdb.threads/signal-delivered-right-thread.exp: Adjust expected
output.
* gdb.threads/sigthread.exp: Adjust expected output.
* gdb.threads/watchpoint-fork.exp: Adjust expected output.
2016-01-18 15:15:18 +00:00
|
|
|
|
2016-01-18 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention that GDB now displays the ID and name of the
|
|
|
|
|
thread that hit a breakpoint or received a signal.
|
|
|
|
|
* break-catch-sig.c (signal_catchpoint_print_it): Use
|
|
|
|
|
maybe_print_thread_hit_breakpoint.
|
|
|
|
|
* break-catch-syscall.c (print_it_catch_syscall): Likewise.
|
|
|
|
|
* break-catch-throw.c (print_it_exception_catchpoint): Likewise.
|
|
|
|
|
* breakpoint.c (maybe_print_thread_hit_breakpoint): New function.
|
|
|
|
|
(print_it_catch_fork, print_it_catch_vfork, print_it_catch_solib)
|
|
|
|
|
(print_it_catch_exec, print_it_ranged_breakpoint)
|
|
|
|
|
(print_it_watchpoint, print_it_masked_watchpoint, bkpt_print_it):
|
|
|
|
|
Use maybe_print_thread_hit_breakpoint.
|
|
|
|
|
* breakpoint.h (maybe_print_thread_hit_breakpoint): Declare.
|
|
|
|
|
* gdbthread.h (show_thread_that_caused_stop): Declare.
|
|
|
|
|
* infrun.c (print_signal_received_reason): Print which thread
|
|
|
|
|
received signal.
|
|
|
|
|
* thread.c (show_thread_that_caused_stop): New function.
|
|
|
|
|
|
2016-01-18 09:45:10 +00:00
|
|
|
|
2016-01-18 Gary Benson <gbenson@redhat.com>
|
|
|
|
|
|
|
|
|
|
* nat/linux-namespaces.c (do_fork): New function.
|
|
|
|
|
(linux_mntns_get_helper): Use the above.
|
|
|
|
|
|
2016-01-06 10:10:39 +04:00
|
|
|
|
2016-01-17 Jonas Hahnfeld <Hahnfeld@itc.rwth-aachen.de> (tiny change)
|
|
|
|
|
|
|
|
|
|
Pushed by Joel Brobecker <brobecker@adacore.com>.
|
|
|
|
|
PR gdb/19208
|
|
|
|
|
* dwarf2read.c (read_partial_die): Do not call set_objfile_main_name
|
|
|
|
|
if the function has no name.
|
|
|
|
|
|
2016-01-15 14:45:19 -08:00
|
|
|
|
2016-01-15 Sandra Loosemore <sandra@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* charset.c [PHONY_ICONV] (GDB_DEFAULT_HOST_CHARSET):
|
|
|
|
|
Conditionalize for Windows host.
|
|
|
|
|
(GDB_DEFAULT_TARGET_CHARSET): Match GDB_DEFAULT_HOST_CHARSET.
|
|
|
|
|
(GDB_DEFAULT_TARGET_WIDE_CHARSET): Use UTF-32.
|
|
|
|
|
(phony_iconv_open): Handle both UTF-32 endiannesses.
|
|
|
|
|
(phony_iconv): Likewise. Check for output overflow and clean up
|
|
|
|
|
out-of-input cases. Correct adjustment to input buffer pointer.
|
|
|
|
|
(set_be_le_names) [PHONY_ICONV]: Use hard-wired names to match
|
|
|
|
|
phony_iconv_open.
|
|
|
|
|
|
2016-01-15 21:46:23 +00:00
|
|
|
|
2016-01-15 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention star wildcard ranges.
|
|
|
|
|
* cli/cli-utils.c (get_number_or_range): Check state->in_range first.
|
|
|
|
|
(number_range_setup_range): New function.
|
|
|
|
|
* cli/cli-utils.h (number_range_setup_range): New declaration.
|
|
|
|
|
* thread.c (thread_apply_command): Support star TID ranges.
|
|
|
|
|
* tid-parse.c (tid_range_parser_finished)
|
|
|
|
|
(tid_range_parser_string, tid_range_parser_skip)
|
|
|
|
|
(get_tid_or_range, get_tid_or_range): Handle
|
|
|
|
|
TID_RANGE_STATE_STAR_RANGE.
|
|
|
|
|
(tid_range_parser_star_range): New function.
|
|
|
|
|
* tid-parse.h (enum tid_range_state) <TID_RANGE_STATE_STAR_RANGE>:
|
|
|
|
|
New value.
|
|
|
|
|
(tid_range_parser_star_range): New declaration.
|
|
|
|
|
|
2016-01-15 21:46:22 +00:00
|
|
|
|
2016-01-15 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* thread.c (thread_apply_command): Use the tid range parser to
|
|
|
|
|
advance past the thread ID list.
|
|
|
|
|
* tid-parse.c (get_positive_number_trailer): New function.
|
|
|
|
|
(parse_thread_id): Use it.
|
|
|
|
|
(get_tid_or_range): Use it. Return 0 instead of throwing invalid
|
|
|
|
|
thread ID error.
|
|
|
|
|
(get_tid_or_range): Detect negative values. Return 0 instead of
|
|
|
|
|
throwing invalid thread ID error.
|
|
|
|
|
|
2016-01-14 14:54:24 +00:00
|
|
|
|
2016-01-14 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arm-linux-tdep.c (arm_linux_get_next_pcs_syscall_next_pc):
|
|
|
|
|
Declare.
|
|
|
|
|
(arm_linux_get_next_pcs_ops): Install
|
|
|
|
|
arm_linux_get_next_pcs_syscall_next_pc.
|
|
|
|
|
(arm_linux_syscall_next_pc): Change to ...
|
|
|
|
|
(arm_linux_get_next_pcs_syscall_next_pc): ... it.
|
|
|
|
|
(arm_linux_init_abi): Don't set tdep->syscall_next_pc.
|
|
|
|
|
* arm-tdep.c (arm_get_next_pcs_syscall_next_pc): Declare.
|
|
|
|
|
(arm_get_next_pcs_syscall_next_pc): Make it static. Don't
|
|
|
|
|
call tdep->syscall_next_pc.
|
|
|
|
|
* arm-tdep.h (struct gdbarch_tdep) <syscall_next_pc>: Remove.
|
|
|
|
|
(arm_get_next_pcs_syscall_next_pc): Remove.
|
|
|
|
|
|
2016-01-14 12:28:02 +00:00
|
|
|
|
2016-01-14 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* remote.c (remote_set_syscall_catchpoint): Cast to char *.
|
|
|
|
|
* thread.c (do_captured_thread_select): Cast to const char *.
|
|
|
|
|
|
[ARM] Make thumb2_breakpoint static again
This patch makes thumb2_breakpoint static. When writing this patch,
I find the only reason we keep thumb2_breakpoint extern is that it
is used as an argument passed to arm_gdbserver_get_next_pcs. However,
field arm_thumb2_breakpoint is only used in a null check in
thumb_get_next_pcs_raw, so I wonder why do need to pass thumb2_breakpoint
to arm_gdbserver_get_next_pcs.
thumb2_breakpoint was added by Daniel Jacobowitz in order to support
single-step IT block
https://sourceware.org/ml/gdb-patches/2010-01/msg00624.html the logic
there was if we have 32-bit thumb-2 breakpoint defined, we can safely
single-step IT block, otherwise, we can't. Daniel didn't want to use
16-bit thumb BKPT instruction, because it triggers even on instruction
which should be executed. Secondly, using 16-bit thumb illegal
instruction on top of 32-bit thumb instruction may break the meaning of
original IT blocks, because the other 16-bit can be regarded as an
instruction. See more explanations from Daniel's kernel patch
http://www.spinics.net/lists/arm-kernel/msg80476.html
Let us back to this patch, GDB/GDBserver can safely single step
IT block if thumb2_breakpoint is defined, but the single step logic
doesn't have to know the thumb-2 breakpoint instruction. Only
breakpoint insertion mechanism decides to use which breakpoint
instruction. In the software single step code, instead of pass
thumb2_breakpoint, we can pass a boolean variable
has_thumb2_breakpoint indicate whether the target has thumb-2
breakpoint defined, which is equivalent to the original code.
Regression tested on arm-linux. No regression.
gdb:
2016-01-14 Yao Qi <yao.qi@linaro.org>
* arch/arm-get-next-pcs.c (arm_get_next_pcs_ctor): Change
argument arm_thumb2_breakpoint to has_thumb2_breakpoint.
(thumb_get_next_pcs_raw): Check has_thumb2_breakpoint
instead.
* arch/arm-get-next-pcs.h (struct arm_get_next_pcs)
<arm_thumb2_breakpoint>: Remove.
<has_thumb2_breakpoint>: New field.
(arm_get_next_pcs_ctor): Update declaration.
* arm-linux-tdep.c (arm_linux_software_single_step): Pass
1 to arm_get_next_pcs_ctor.
* arm-tdep.c (arm_software_single_step): Pass 0 to
arm_get_next_pcs_ctor.
gdb/gdbserver:
2016-01-14 Yao Qi <yao.qi@linaro.org>
* linux-aarch32-low.c (thumb2_breakpoint): Make it static.
* linux-aarch32-low.h (thumb2_breakpoint): Remove declaration.
* linux-arm-low.c (arm_gdbserver_get_next_pcs): Pass 1 to
arm_get_next_pcs_ctor.
2016-01-14 09:36:43 +00:00
|
|
|
|
2016-01-14 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arch/arm-get-next-pcs.c (arm_get_next_pcs_ctor): Change
|
|
|
|
|
argument arm_thumb2_breakpoint to has_thumb2_breakpoint.
|
|
|
|
|
(thumb_get_next_pcs_raw): Check has_thumb2_breakpoint
|
|
|
|
|
instead.
|
|
|
|
|
* arch/arm-get-next-pcs.h (struct arm_get_next_pcs)
|
|
|
|
|
<arm_thumb2_breakpoint>: Remove.
|
|
|
|
|
<has_thumb2_breakpoint>: New field.
|
|
|
|
|
(arm_get_next_pcs_ctor): Update declaration.
|
|
|
|
|
* arm-linux-tdep.c (arm_linux_software_single_step): Pass
|
|
|
|
|
1 to arm_get_next_pcs_ctor.
|
|
|
|
|
* arm-tdep.c (arm_software_single_step): Pass 0 to
|
|
|
|
|
arm_get_next_pcs_ctor.
|
|
|
|
|
|
2016-01-13 18:57:59 +01:00
|
|
|
|
2016-01-13 Ulrich Weigand <uweigand@de.ibm.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS: Add Andreas Arnez as s390 target maintainer.
|
|
|
|
|
|
2016-01-13 16:15:31 +00:00
|
|
|
|
2016-01-13 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arch/arm-get-next-pcs.c (arm_get_next_pcs_raw): Use
|
|
|
|
|
byte_order_for_code to read instruction.
|
|
|
|
|
|
2016-01-13 10:56:10 +00:00
|
|
|
|
2016-01-13 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention $_gthread.
|
|
|
|
|
* gdbthread.h (struct thread_info) <global_num>: Mention
|
|
|
|
|
$_gthread.
|
|
|
|
|
* thread.c (thread_num_make_value_helper): New function.
|
|
|
|
|
(thread_id_make_value): Delete.
|
|
|
|
|
(thread_id_per_inf_num_make_value, global_thread_id_make_value):
|
|
|
|
|
New.
|
|
|
|
|
(thread_funcs): Adjust.
|
|
|
|
|
(gthread_funcs): New.
|
|
|
|
|
(_initialize_thread): Register $_gthread variable.
|
|
|
|
|
|
2016-01-13 10:56:09 +00:00
|
|
|
|
2016-01-13 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention "info threads -gid".
|
|
|
|
|
* gdbthread.h (struct thread_info) <global_num>: Mention "info
|
|
|
|
|
threads -gid".
|
|
|
|
|
* thread.c (info_threads_command): Handle "-gid".
|
|
|
|
|
(_initialize_thread): Adjust "info threads" help string to mention
|
|
|
|
|
-gid.
|
|
|
|
|
|
2016-01-13 10:56:08 +00:00
|
|
|
|
2016-01-13 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention InferiorThread.global_num.
|
|
|
|
|
* python/py-infthread.c (thpy_get_global_num): New function.
|
|
|
|
|
(thread_object_getset): Register "global_num".
|
|
|
|
|
|
Per-inferior/Inferior-qualified thread IDs
This commit changes GDB to track thread numbers per-inferior. Then,
if you're debugging multiple inferiors, GDB displays
"inferior-num.thread-num" instead of just "thread-num" whenever it
needs to display a thread:
(gdb) info inferiors
Num Description Executable
1 process 6022 /home/pedro/gdb/tests/threads
* 2 process 6037 /home/pedro/gdb/tests/threads
(gdb) info threads
Id Target Id Frame
1.1 Thread 0x7ffff7fc2740 (LWP 6022) "threads" (running)
1.2 Thread 0x7ffff77c0700 (LWP 6028) "threads" (running)
1.3 Thread 0x7ffff7fc2740 (LWP 6032) "threads" (running)
2.1 Thread 0x7ffff7fc1700 (LWP 6037) "threads" (running)
2.2 Thread 0x7ffff77c0700 (LWP 6038) "threads" (running)
* 2.3 Thread 0x7ffff7fc2740 (LWP 6039) "threads" (running)
(gdb)
...
(gdb) thread 1.1
[Switching to thread 1.1 (Thread 0x7ffff7fc2740 (LWP 8155))]
(gdb)
...
etc.
You can still use "thread NUM", in which case GDB infers you're
referring to thread NUM of the current inferior.
The $_thread convenience var and Python's InferiorThread.num attribute
are remapped to the new per-inferior thread number. It's a backward
compatibility break, but since it only matters when debugging multiple
inferiors, I think it's worth doing.
Because MI thread IDs need to be a single integer, we keep giving
threads a global identifier, _in addition_ to the per-inferior number,
and make MI always refer to the global thread IDs. IOW, nothing
changes from a MI frontend's perspective.
Similarly, since Python's Breakpoint.thread and Guile's
breakpoint-thread/set-breakpoint-thread breakpoint methods need to
work with integers, those are adjusted to work with global thread IDs
too. Follow up patches will provide convenient means to access
threads' global IDs.
To avoid potencially confusing users (which also avoids updating much
of the testsuite), if there's only one inferior and its ID is "1",
IOW, the user hasn't done anything multi-process/inferior related,
then the "INF." part of thread IDs is not shown. E.g,.:
(gdb) info inferiors
Num Description Executable
* 1 process 15275 /home/pedro/gdb/tests/threads
(gdb) info threads
Id Target Id Frame
* 1 Thread 0x7ffff7fc1740 (LWP 15275) "threads" main () at threads.c:40
(gdb) add-inferior
Added inferior 2
(gdb) info threads
Id Target Id Frame
* 1.1 Thread 0x7ffff7fc1740 (LWP 15275) "threads" main () at threads.c:40
(gdb)
No regressions on x86_64 Fedora 20.
gdb/ChangeLog:
2016-01-13 Pedro Alves <palves@redhat.com>
* NEWS: Mention that thread IDs are now per inferior and global
thread IDs.
* Makefile.in (SFILES): Add tid-parse.c.
(COMMON_OBS): Add tid-parse.o.
(HFILES_NO_SRCDIR): Add tid-parse.h.
* ada-tasks.c: Adjust to use ptid_to_global_thread_id.
* breakpoint.c (insert_breakpoint_locations)
(remove_threaded_breakpoints, bpstat_check_breakpoint_conditions)
(print_one_breakpoint_location, set_longjmp_breakpoint)
(check_longjmp_breakpoint_for_call_dummy)
(set_momentary_breakpoint): Adjust to use global IDs.
(find_condition_and_thread, watch_command_1): Use parse_thread_id.
(until_break_command, longjmp_bkpt_dtor)
(breakpoint_re_set_thread, insert_single_step_breakpoint): Adjust
to use global IDs.
* dummy-frame.c (pop_dummy_frame_bpt): Adjust to use
ptid_to_global_thread_id.
* elfread.c (elf_gnu_ifunc_resolver_stop): Likewise.
* gdbthread.h (struct thread_info): Rename field 'num' to
'global_num. Add new fields 'per_inf_num' and 'inf'.
(thread_id_to_pid): Rename thread_id_to_pid to
global_thread_id_to_ptid.
(pid_to_thread_id): Rename to ...
(ptid_to_global_thread_id): ... this.
(valid_thread_id): Rename to ...
(valid_global_thread_id): ... this.
(find_thread_id): Rename to ...
(find_thread_global_id): ... this.
(ALL_THREADS, ALL_THREADS_BY_INFERIOR): Declare.
(print_thread_info): Add comment.
* tid-parse.h: New file.
* tid-parse.c: New file.
* infcmd.c (step_command_fsm_prepare)
(step_command_fsm_should_stop): Adjust to use the global thread
ID.
(until_next_command, until_next_command)
(finish_command_fsm_should_stop): Adjust to use the global thread
ID.
(attach_post_wait): Adjust to check the inferior number too.
* inferior.h (struct inferior) <highest_thread_num>: New field.
* infrun.c (handle_signal_stop)
(insert_exception_resume_breakpoint)
(insert_exception_resume_from_probe): Adjust to use the global
thread ID.
* record-btrace.c (record_btrace_open): Use global thread IDs.
* remote.c (process_initial_stop_replies): Also consider the
inferior number.
* target.c (target_pre_inferior): Clear the inferior's highest
thread num.
* thread.c (clear_thread_inferior_resources): Adjust to use the
global thread ID.
(new_thread): New inferior parameter. Adjust to use it. Set both
the thread's global ID and the thread's per-inferior ID.
(add_thread_silent): Adjust.
(find_thread_global_id): New.
(find_thread_id): Make static. Adjust to rename.
(valid_thread_id): Rename to ...
(valid_global_thread_id): ... this.
(pid_to_thread_id): Rename to ...
(ptid_to_global_thread_id): ... this.
(thread_id_to_pid): Rename to ...
(global_thread_id_to_ptid): ... this. Adjust.
(first_thread_of_process): Adjust.
(do_captured_list_thread_ids): Adjust to use global thread IDs.
(should_print_thread): New function.
(print_thread_info): Rename to ...
(print_thread_info_1): ... this, and add new show_global_ids
parameter. Handle it. Iterate over inferiors.
(print_thread_info): Reimplement as wrapper around
print_thread_info_1.
(show_inferior_qualified_tids): New function.
(print_thread_id): Use it.
(tp_array_compar): Compare inferior numbers too.
(thread_apply_command): Use tid_range_parser.
(do_captured_thread_select): Use parse_thread_id.
(thread_id_make_value): Adjust.
(_initialize_thread): Adjust "info threads" help string.
* varobj.c (struct varobj_root): Update comment.
(varobj_create): Adjust to use global thread IDs.
(value_of_root_1): Adjust to use global_thread_id_to_ptid.
* windows-tdep.c (display_tib): No longer accept an argument.
* cli/cli-utils.c (get_number_trailer): Make extern.
* cli/cli-utils.h (get_number_trailer): Declare.
(get_number_const): Adjust documentation.
* mi/mi-cmd-var.c (mi_cmd_var_update_iter): Adjust to use global
thread IDs.
* mi/mi-interp.c (mi_new_thread, mi_thread_exit)
(mi_on_normal_stop, mi_output_running_pid, mi_on_resume):
* mi/mi-main.c (mi_execute_command, mi_cmd_execute): Likewise.
* guile/scm-breakpoint.c (gdbscm_set_breakpoint_thread_x):
Likewise.
* python/py-breakpoint.c (bppy_set_thread): Likewise.
* python/py-finishbreakpoint.c (bpfinishpy_init): Likewise.
* python/py-infthread.c (thpy_get_num): Add comment and return the
per-inferior thread ID.
(thread_object_getset): Update comment of "num".
gdb/testsuite/ChangeLog:
2016-01-07 Pedro Alves <palves@redhat.com>
* gdb.base/break.exp: Adjust to output changes.
* gdb.base/hbreak2.exp: Likewise.
* gdb.base/sepdebug.exp: Likewise.
* gdb.base/watch_thread_num.exp: Likewise.
* gdb.linespec/keywords.exp: Likewise.
* gdb.multi/info-threads.exp: Likewise.
* gdb.threads/thread-find.exp: Likewise.
* gdb.multi/tids.c: New file.
* gdb.multi/tids.exp: New file.
gdb/doc/ChangeLog:
2016-01-07 Pedro Alves <palves@redhat.com>
* gdb.texinfo (Threads): Document per-inferior thread IDs,
qualified thread IDs, global thread IDs and thread ID lists.
(Set Watchpoints, Thread-Specific Breakpoints): Adjust to refer to
thread IDs.
(Convenience Vars): Document the $_thread convenience variable.
(Ada Tasks): Adjust to refer to thread IDs.
(GDB/MI Async Records, GDB/MI Thread Commands, GDB/MI Ada Tasking
Commands, GDB/MI Variable Objects): Update to mention global
thread IDs.
* guile.texi (Breakpoints In Guile)
<breakpoint-thread/set-breakpoint-thread breakpoint>: Mention
global thread IDs instead of thread IDs.
* python.texi (Threads In Python): Adjust documentation of
InferiorThread.num.
(Breakpoint.thread): Mention global thread IDs instead of thread
IDs.
2016-01-13 10:56:07 +00:00
|
|
|
|
2016-01-13 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention that thread IDs are now per inferior and global
|
|
|
|
|
thread IDs.
|
|
|
|
|
* Makefile.in (SFILES): Add tid-parse.c.
|
|
|
|
|
(COMMON_OBS): Add tid-parse.o.
|
|
|
|
|
(HFILES_NO_SRCDIR): Add tid-parse.h.
|
|
|
|
|
* ada-tasks.c: Adjust to use ptid_to_global_thread_id.
|
|
|
|
|
* breakpoint.c (insert_breakpoint_locations)
|
|
|
|
|
(remove_threaded_breakpoints, bpstat_check_breakpoint_conditions)
|
|
|
|
|
(print_one_breakpoint_location, set_longjmp_breakpoint)
|
|
|
|
|
(check_longjmp_breakpoint_for_call_dummy)
|
|
|
|
|
(set_momentary_breakpoint): Adjust to use global IDs.
|
|
|
|
|
(find_condition_and_thread, watch_command_1): Use parse_thread_id.
|
|
|
|
|
(until_break_command, longjmp_bkpt_dtor)
|
|
|
|
|
(breakpoint_re_set_thread, insert_single_step_breakpoint): Adjust
|
|
|
|
|
to use global IDs.
|
|
|
|
|
* dummy-frame.c (pop_dummy_frame_bpt): Adjust to use
|
|
|
|
|
ptid_to_global_thread_id.
|
|
|
|
|
* elfread.c (elf_gnu_ifunc_resolver_stop): Likewise.
|
|
|
|
|
* gdbthread.h (struct thread_info): Rename field 'num' to
|
|
|
|
|
'global_num. Add new fields 'per_inf_num' and 'inf'.
|
|
|
|
|
(thread_id_to_pid): Rename thread_id_to_pid to
|
|
|
|
|
global_thread_id_to_ptid.
|
|
|
|
|
(pid_to_thread_id): Rename to ...
|
|
|
|
|
(ptid_to_global_thread_id): ... this.
|
|
|
|
|
(valid_thread_id): Rename to ...
|
|
|
|
|
(valid_global_thread_id): ... this.
|
|
|
|
|
(find_thread_id): Rename to ...
|
|
|
|
|
(find_thread_global_id): ... this.
|
|
|
|
|
(ALL_THREADS, ALL_THREADS_BY_INFERIOR): Declare.
|
|
|
|
|
(print_thread_info): Add comment.
|
|
|
|
|
* tid-parse.h: New file.
|
|
|
|
|
* tid-parse.c: New file.
|
|
|
|
|
* infcmd.c (step_command_fsm_prepare)
|
|
|
|
|
(step_command_fsm_should_stop): Adjust to use the global thread
|
|
|
|
|
ID.
|
|
|
|
|
(until_next_command, until_next_command)
|
|
|
|
|
(finish_command_fsm_should_stop): Adjust to use the global thread
|
|
|
|
|
ID.
|
|
|
|
|
(attach_post_wait): Adjust to check the inferior number too.
|
|
|
|
|
* inferior.h (struct inferior) <highest_thread_num>: New field.
|
|
|
|
|
* infrun.c (handle_signal_stop)
|
|
|
|
|
(insert_exception_resume_breakpoint)
|
|
|
|
|
(insert_exception_resume_from_probe): Adjust to use the global
|
|
|
|
|
thread ID.
|
|
|
|
|
* record-btrace.c (record_btrace_open): Use global thread IDs.
|
|
|
|
|
* remote.c (process_initial_stop_replies): Also consider the
|
|
|
|
|
inferior number.
|
|
|
|
|
* target.c (target_pre_inferior): Clear the inferior's highest
|
|
|
|
|
thread num.
|
|
|
|
|
* thread.c (clear_thread_inferior_resources): Adjust to use the
|
|
|
|
|
global thread ID.
|
|
|
|
|
(new_thread): New inferior parameter. Adjust to use it. Set both
|
|
|
|
|
the thread's global ID and the thread's per-inferior ID.
|
|
|
|
|
(add_thread_silent): Adjust.
|
|
|
|
|
(find_thread_global_id): New.
|
|
|
|
|
(find_thread_id): Make static. Adjust to rename.
|
|
|
|
|
(valid_thread_id): Rename to ...
|
|
|
|
|
(valid_global_thread_id): ... this.
|
|
|
|
|
(pid_to_thread_id): Rename to ...
|
|
|
|
|
(ptid_to_global_thread_id): ... this.
|
|
|
|
|
(thread_id_to_pid): Rename to ...
|
|
|
|
|
(global_thread_id_to_ptid): ... this. Adjust.
|
|
|
|
|
(first_thread_of_process): Adjust.
|
|
|
|
|
(do_captured_list_thread_ids): Adjust to use global thread IDs.
|
|
|
|
|
(should_print_thread): New function.
|
|
|
|
|
(print_thread_info): Rename to ...
|
|
|
|
|
(print_thread_info_1): ... this, and add new show_global_ids
|
|
|
|
|
parameter. Handle it. Iterate over inferiors.
|
|
|
|
|
(print_thread_info): Reimplement as wrapper around
|
|
|
|
|
print_thread_info_1.
|
|
|
|
|
(show_inferior_qualified_tids): New function.
|
|
|
|
|
(print_thread_id): Use it.
|
|
|
|
|
(tp_array_compar): Compare inferior numbers too.
|
|
|
|
|
(thread_apply_command): Use tid_range_parser.
|
|
|
|
|
(do_captured_thread_select): Use parse_thread_id.
|
|
|
|
|
(thread_id_make_value): Adjust.
|
|
|
|
|
(_initialize_thread): Adjust "info threads" help string.
|
|
|
|
|
* varobj.c (struct varobj_root): Update comment.
|
|
|
|
|
(varobj_create): Adjust to use global thread IDs.
|
|
|
|
|
(value_of_root_1): Adjust to use global_thread_id_to_ptid.
|
|
|
|
|
* windows-tdep.c (display_tib): No longer accept an argument.
|
|
|
|
|
* cli/cli-utils.c (get_number_trailer): Make extern.
|
|
|
|
|
* cli/cli-utils.h (get_number_trailer): Declare.
|
|
|
|
|
(get_number_const): Adjust documentation.
|
|
|
|
|
* mi/mi-cmd-var.c (mi_cmd_var_update_iter): Adjust to use global
|
|
|
|
|
thread IDs.
|
|
|
|
|
* mi/mi-interp.c (mi_new_thread, mi_thread_exit)
|
|
|
|
|
(mi_on_normal_stop, mi_output_running_pid, mi_on_resume):
|
|
|
|
|
* mi/mi-main.c (mi_execute_command, mi_cmd_execute): Likewise.
|
|
|
|
|
* guile/scm-breakpoint.c (gdbscm_set_breakpoint_thread_x):
|
|
|
|
|
Likewise.
|
|
|
|
|
* python/py-breakpoint.c (bppy_set_thread): Likewise.
|
|
|
|
|
* python/py-finishbreakpoint.c (bpfinishpy_init): Likewise.
|
|
|
|
|
* python/py-infthread.c (thpy_get_num): Add comment and return the
|
|
|
|
|
per-inferior thread ID.
|
|
|
|
|
(thread_object_getset): Update comment of "num".
|
|
|
|
|
|
Centralize thread ID printing
Add a new function to print a thread ID, in the style of paddress,
plongest, etc. and adjust all CLI-reachable paths to use it.
This gives us a single place to tweak to print inferior-qualified
thread IDs later:
- [Switching to thread 1 (Thread 0x7ffff7fc2740 (LWP 8155))]
+ [Switching to thread 1.1 (Thread 0x7ffff7fc2740 (LWP 8155))]
etc., though for now, this has no user-visible change.
No regressions on x86_64 Fedora 20.
gdb/ChangeLog:
2016-01-13 Pedro Alves <palves@redhat.com>
* breakpoint.c (remove_threaded_breakpoints)
(print_one_breakpoint_location): Use print_thread_id.
* btrace.c (btrace_enable, btrace_disable, btrace_teardown)
(btrace_fetch, btrace_clear): Use print_thread_id.
* common/print-utils.c (CELLSIZE): Delete.
(get_cell): Rename to ...
(get_print_cell): ... this and made extern. Adjust call callers.
Adjust to use PRINT_CELL_SIZE.
* common/print-utils.h (get_print_cell): Declare.
(PRINT_CELL_SIZE): New.
* gdbthread.h (print_thread_id): Declare.
* infcmd.c (signal_command): Use print_thread_id.
* inferior.c (print_inferior): Use print_thread_id.
* infrun.c (handle_signal_stop)
(insert_exception_resume_breakpoint)
(insert_exception_resume_from_probe)
(print_signal_received_reason): Use print_thread_id.
* record-btrace.c (record_btrace_info)
(record_btrace_resume_thread, record_btrace_cancel_resume)
(record_btrace_step_thread, record_btrace_wait): Use
print_thread_id.
* thread.c (thread_apply_all_command): Use print_thread_id.
(print_thread_id): New function.
(thread_apply_command): Use print_thread_id.
(thread_command, thread_find_command, do_captured_thread_select):
Use print_thread_id.
2016-01-13 10:56:06 +00:00
|
|
|
|
2016-01-13 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (remove_threaded_breakpoints)
|
|
|
|
|
(print_one_breakpoint_location): Use print_thread_id.
|
|
|
|
|
* btrace.c (btrace_enable, btrace_disable, btrace_teardown)
|
|
|
|
|
(btrace_fetch, btrace_clear): Use print_thread_id.
|
|
|
|
|
* common/print-utils.c (CELLSIZE): Delete.
|
|
|
|
|
(get_cell): Rename to ...
|
|
|
|
|
(get_print_cell): ... this and made extern. Adjust call callers.
|
|
|
|
|
Adjust to use PRINT_CELL_SIZE.
|
|
|
|
|
* common/print-utils.h (get_print_cell): Declare.
|
|
|
|
|
(PRINT_CELL_SIZE): New.
|
|
|
|
|
* gdbthread.h (print_thread_id): Declare.
|
|
|
|
|
* infcmd.c (signal_command): Use print_thread_id.
|
|
|
|
|
* inferior.c (print_inferior): Use print_thread_id.
|
|
|
|
|
* infrun.c (handle_signal_stop)
|
|
|
|
|
(insert_exception_resume_breakpoint)
|
|
|
|
|
(insert_exception_resume_from_probe)
|
|
|
|
|
(print_signal_received_reason): Use print_thread_id.
|
|
|
|
|
* record-btrace.c (record_btrace_info)
|
|
|
|
|
(record_btrace_resume_thread, record_btrace_cancel_resume)
|
|
|
|
|
(record_btrace_step_thread, record_btrace_wait): Use
|
|
|
|
|
print_thread_id.
|
|
|
|
|
* thread.c (thread_apply_all_command): Use print_thread_id.
|
|
|
|
|
(print_thread_id): New function.
|
|
|
|
|
(thread_apply_command): Use print_thread_id.
|
|
|
|
|
(thread_command, thread_find_command, do_captured_thread_select):
|
|
|
|
|
Use print_thread_id.
|
|
|
|
|
|
2016-01-13 10:56:06 +00:00
|
|
|
|
2016-01-13 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention InferiorThread.inferior.
|
|
|
|
|
* python/py-infthread.c (thpy_get_inferior): New.
|
|
|
|
|
(thread_object_getset): Register "inferior".
|
|
|
|
|
|
2016-01-13 10:56:05 +00:00
|
|
|
|
2016-01-13 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention $_inferior.
|
|
|
|
|
* inferior.c (inferior_id_make_value): New.
|
|
|
|
|
(inferior_funcs): New.
|
|
|
|
|
(_initialize_inferior): Create $_inferior variable.
|
|
|
|
|
|
Fix PR19388: Can't access $_siginfo in breakpoint (catch signal) condition
This commit merges both the registers and $_siginfo "thread
running/executing" checks into a single function.
Accessing $_siginfo from a "catch signal" breakpoint condition doesn't
work. The condition always fails with "Selected thread is running":
(gdb) catch signal
Catchpoint 3 (standard signals)
(gdb)
condition $bpnum $_siginfo.si_signo == 5
(gdb) continue
Continuing.
Error in testing breakpoint condition:
Selected thread is running.
Catchpoint 3 (signal SIGUSR1), 0x0000003615e35877 in __GI_raise (sig=10) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);
(gdb)
When accessing the $_siginfo object, we check whether the thread is
marked running (external/public) state and refuse the access if so.
This is so "print $_siginfo" at the prompt fails nicelly when the
current thread is running. While evaluating breakpoint conditionals,
we haven't decided yet whether the thread is going to stop, so
is_running still returns true, and we thus always error out.
Evaluating an expression that requires registers access is really
conceptually the same -- we could think of $_siginfo as a pseudo
register. However, in that case we check whether the thread is marked
executing (internal/private state), not running (external/public
state). Changing the $_siginfo validation to check is_executing as
well fixes the bug in question.
Note that checking is_executing is not fully correct, not even for
registers. See PR 19389. However, I think this is the lesser of two
evils and ends up as an improvement. We at least now have a single
place to fix.
Tested on x86_64 GNU/Linux.
gdb/ChangeLog:
2016-01-13 Pedro Alves <palves@redhat.com>
PR breakpoints/19388
* frame.c (get_current_frame): Use validate_registers_access.
* gdbthread.h (validate_registers_access): Declare.
* infrun.c (validate_siginfo_access): Delete.
(siginfo_value_read, siginfo_value_write): Use
validate_registers_access.
* thread.c (validate_registers_access): New function.
gdb/testsuite/ChangeLog:
2016-01-13 Pedro Alves <palves@redhat.com>
PR breakpoints/19388
* gdb.base/catch-signal-siginfo-cond.c: New file.
* gdb.base/catch-signal-siginfo-cond.exp: New file.
2016-01-13 10:40:33 +00:00
|
|
|
|
2016-01-13 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR breakpoints/19388
|
|
|
|
|
* frame.c (get_current_frame): Use validate_registers_access.
|
|
|
|
|
* gdbthread.h (validate_registers_access): Declare.
|
|
|
|
|
* infrun.c (validate_siginfo_access): Delete.
|
|
|
|
|
(siginfo_value_read, siginfo_value_write): Use
|
|
|
|
|
validate_registers_access.
|
|
|
|
|
* thread.c (validate_registers_access): New function.
|
|
|
|
|
|
2016-01-12 12:27:27 -08:00
|
|
|
|
2016-01-12 Josh Stone <jistone@redhat.com>
|
|
|
|
|
Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
|
|
|
|
|
|
|
|
|
* NEWS (Changes since GDB 7.10): Mention QCatchSyscalls and the
|
|
|
|
|
syscall_entry and syscall_return stop reasons. Mention GDB
|
|
|
|
|
support for remote catch syscall.
|
|
|
|
|
* remote.c (PACKET_QCatchSyscalls): New enum.
|
|
|
|
|
(remote_set_syscall_catchpoint): New function.
|
|
|
|
|
(remote_protocol_features): New element for QCatchSyscalls.
|
|
|
|
|
(remote_parse_stop_reply): Parse syscall_entry/return stops.
|
|
|
|
|
(init_remote_ops): Install remote_set_syscall_catchpoint.
|
|
|
|
|
(_initialize_remote): Config QCatchSyscalls.
|
|
|
|
|
* linux-nat.h (struct lwp_info) <syscall_state>: Comment typo.
|
|
|
|
|
|
2016-01-12 16:29:30 +00:00
|
|
|
|
2016-01-12 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* nat/linux-ptrace.c (linux_child_function): Cast child_stack
|
|
|
|
|
to gdb_byte * and pass to linux_fork_to_function.
|
|
|
|
|
|
Change function signature passed to clone
I see the following compile error with an old bfin-uclinux gcc to
build GDBserver,
cc1: warnings being treated as errors
gdb/gdbserver/../nat/linux-ptrace.c: In function 'linux_fork_to_function':
gdb/gdbserver/../nat/linux-ptrace.c:283: error: passing argument 1 of 'clone' from incompatible pointer type
in glibc, clone's prototype is like this, and in uClibc, it is the same,
int clone(int (*fn)(void *), void *child_stack,
int flags, void *arg, ...
/* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ );
so this patch changes function signature from 'void (*function) (gdb_byte *)'
to 'int (*function) (void *)'.
Note that I find Pedro advised to change argument type from 'void *'
to 'gdb_byte *' during the patch review
https://sourceware.org/ml/gdb-patches/2013-08/msg00611.html however,
I think fix compile error can justify the change back to 'void *'.
gdb:
2016-01-12 Yao Qi <yao.qi@linaro.org>
* nat/linux-ptrace.c (linux_fork_to_function): Change type
of argument 'function'.
(linux_grandchild_function): Change return type to 'int'.
Change child_stack's type to 'void *'.
(linux_child_function): Likewise.
2016-01-12 15:18:09 +00:00
|
|
|
|
2016-01-12 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* nat/linux-ptrace.c (linux_fork_to_function): Change type
|
|
|
|
|
of argument 'function'.
|
|
|
|
|
(linux_grandchild_function): Change return type to 'int'.
|
|
|
|
|
Change child_stack's type to 'void *'.
|
|
|
|
|
(linux_child_function): Likewise.
|
|
|
|
|
|
2016-01-12 15:03:11 +00:00
|
|
|
|
2016-01-12 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
Remove use of the registered trademark symbol throughout.
|
|
|
|
|
|
2016-01-12 12:53:09 +01:00
|
|
|
|
2016-01-12 Thomas Schwinge <thomas@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* reply_mig_hack.awk: Rewrite one regular expression.
|
|
|
|
|
|
2016-01-07 06:06:04 -05:00
|
|
|
|
2016-01-11 Mike Frysinger <vapier@gentoo.org>
|
|
|
|
|
|
|
|
|
|
* acinclude.m4: Include new warning.m4 file.
|
|
|
|
|
* configure: Regenerated.
|
|
|
|
|
* configure.ac: Move all warning logic ...
|
|
|
|
|
* warning.m4: ... here.
|
|
|
|
|
|
Change SIGINT handler for extension languages only when target terminal is ours
I see a timeout in gdb.base/random-signal.exp,
Continuing.^M
PASS: gdb.base/random-signal.exp: continue
^CPython Exception <type 'exceptions.KeyboardInterrupt'> <type
exceptions.KeyboardInterrupt'>: ^M
FAIL: gdb.base/random-signal.exp: stop with control-c (timeout)
it can be reproduced by running random-signal.exp with native-gdbserver
in a loop, like this, and the fail will be shown in about 20 runs,
$ (set -e; while true; do make check RUNTESTFLAGS="--target_board=native-gdbserver random-signal.exp"; done)
In the test, the program is being single-stepped for software watchpoint,
and in each internal stop, python unwinder sniffer is used,
#0 pyuw_sniffer (self=<optimised out>, this_frame=<optimised out>, cache_ptr=0xd554f8) at /home/yao/SourceCode/gnu/gdb/git/gdb/python/py-unwind.c:608
#1 0x00000000006a10ae in frame_unwind_try_unwinder (this_frame=this_frame@entry=0xd554e0, this_cache=this_cache@entry=0xd554f8, unwinder=0xecd540)
at /home/yao/SourceCode/gnu/gdb/git/gdb/frame-unwind.c:107
#2 0x00000000006a143f in frame_unwind_find_by_frame (this_frame=this_frame@entry=0xd554e0, this_cache=this_cache@entry=0xd554f8)
at /home/yao/SourceCode/gnu/gdb/git/gdb/frame-unwind.c:163
#3 0x000000000069dc6b in compute_frame_id (fi=0xd554e0) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:454
#4 get_prev_frame_if_no_cycle (this_frame=this_frame@entry=0xd55410) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1781
#5 0x000000000069fdb9 in get_prev_frame_always_1 (this_frame=0xd55410) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1955
#6 get_prev_frame_always (this_frame=this_frame@entry=0xd55410) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:1971
#7 0x00000000006a04b1 in get_prev_frame (this_frame=this_frame@entry=0xd55410) at /home/yao/SourceCode/gnu/gdb/git/gdb/frame.c:2213
when GDB goes to python extension, or other language extension, the
SIGINT handler is changed, and is restored when GDB leaves extension
language. GDB only stays in extension language for a very short period
in this case, but if ctrl-c is pressed at that moment, python extension
will handle the SIGINT, and exceptions.KeyboardInterrupt is shown.
Language extension is used in GDB side rather than inferior side,
so GDB should only change SIGINT handler for extension language when
the terminal is ours (not inferior's). This is what this patch does.
With this patch applied, I run random-signal.exp in a loop for 18
hours, and no fail is shown.
gdb:
2016-01-08 Yao Qi <yao.qi@linaro.org>
* extension.c: Include target.h.
(set_active_ext_lang): Only call install_gdb_sigint_handler,
check_quit_flag, and set_quit_flag if target_terminal_is_ours
returns false.
(restore_active_ext_lang): Likewise.
* target.c (target_terminal_is_ours): New function.
* target.h (target_terminal_is_ours): Declare.
2016-01-08 11:06:00 +00:00
|
|
|
|
2016-01-08 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* extension.c: Include target.h.
|
|
|
|
|
(set_active_ext_lang): Only call install_gdb_sigint_handler,
|
|
|
|
|
check_quit_flag, and set_quit_flag if target_terminal_is_ours
|
|
|
|
|
returns false.
|
|
|
|
|
(restore_active_ext_lang): Likewise.
|
|
|
|
|
* target.c (target_terminal_is_ours): New function.
|
|
|
|
|
* target.h (target_terminal_is_ours): Declare.
|
|
|
|
|
|
2016-01-07 19:12:44 +00:00
|
|
|
|
2016-01-07 Maciej W. Rozycki <macro@imgtec.com>
|
|
|
|
|
|
|
|
|
|
* mips-tdep.c (mips_breakpoint_from_pc): Rename local `status'
|
|
|
|
|
to `err' in the little-endian leg.
|
|
|
|
|
|
2016-01-06 15:03:41 +00:00
|
|
|
|
2016-01-06 Yao Qi <yao.qi@linaro.org>
|
|
|
|
|
|
|
|
|
|
* arch/arm-get-next-pcs.c (arm_get_next_pcs): Move it to some
|
|
|
|
|
lines below.
|
|
|
|
|
(thumb_get_next_pcs_raw): Make it static.
|
|
|
|
|
(arm_get_next_pcs_raw): Likewise.
|
|
|
|
|
* arch/arm-get-next-pcs.h (thumb_get_next_pcs_raw): Remove the
|
|
|
|
|
declaration.
|
|
|
|
|
(arm_get_next_pcs_raw): Likewise.
|
|
|
|
|
|
2016-01-05 23:23:52 -05:00
|
|
|
|
2016-01-05 Mike Frysinger <vapier@gentoo.org>
|
|
|
|
|
|
|
|
|
|
* version.in: Change cvs to git.
|
|
|
|
|
|
2016-01-02 03:11:44 -05:00
|
|
|
|
2016-01-05 Mike Frysinger <vapier@gentoo.org>
|
|
|
|
|
|
|
|
|
|
* configure.tgt (score-*-*): Delete gdb_sim assignment.
|
|
|
|
|
|
2016-01-05 11:03:40 +00:00
|
|
|
|
2016-01-05 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR sim/13418
|
|
|
|
|
* configure.ac: Define WITH_PPC_SIM when linking in the sim and
|
|
|
|
|
the target is powerpc*.
|
2016-01-05 11:12:31 +00:00
|
|
|
|
* rs6000-tdep.c (init_sim_regno_table): Check WITH_PPC_SIM instead
|
|
|
|
|
of WITH_SIM.
|
2016-01-05 11:03:40 +00:00
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
* config.in: Regenerate.
|
|
|
|
|
|
2015-12-23 13:53:53 +01:00
|
|
|
|
2016-01-04 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* btrace.c (btrace_pt_readmem_callback): Do not return in TRY/CATCH.
|
|
|
|
|
|
2016-01-02 03:10:57 -05:00
|
|
|
|
2016-01-02 Mike Frysinger <vapier@gentoo.org>
|
|
|
|
|
|
|
|
|
|
* configure.tgt (powerpc*-*-*): Delete test call and
|
|
|
|
|
always assign gdb_sim.
|
|
|
|
|
|
2016-01-01 08:33:14 +04:00
|
|
|
|
2016-01-01 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
Update year range in copyright notice of all files.
|
|
|
|
|
|
2016-01-01 08:22:36 +04:00
|
|
|
|
2016-01-01 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* top.c (print_gdb_version): Change copyright year in version
|
|
|
|
|
message.
|
|
|
|
|
|
2016-01-01 08:19:16 +04:00
|
|
|
|
2016-01-01 Joel Brobecker <brobecker@adacore.com>
|
[win32] cannot automatically find executable file [...] warning at GDB startup
The following change...
commit 43499ea30db2a866412c86952c7e1d7b158d806f
Date: Tue Nov 17 15:17:44 2015 +0000
Subject: [C++/mingw] windows-nat.c casts
... causes a small regression in GDB, where we get the following
warning at startup:
% gdb
C:\[...]\gdb.exe: warning: cannot automatically find executable file or library to read symbols.
Use "file" or "dll" command to load executable/libraries directly.
GNU gdb (GDB) 7.10.50.20151218-cvs (with AdaCore local changes)
[...]
(gdb)
The warning comes from _initialize_loadable which tries to dynamically
load some symbols from kernel32.dll and psapi.dll, and in particular:
hm = LoadLibrary ("psapi.dll");
if (hm)
{
GPA (hm, EnumProcessModules);
GPA (hm, GetModuleInformation);
GPA (hm, GetModuleFileNameEx);
}
The problem is that the new GPA macro assumes that the name of
the variable we use to point to the function, and the name of
its associated symbol are the same. This is mostly the case,
except for GetModuleFileNameEx, where the name is provided by
the GetModuleFileNameEx_name macro (defined differently depending
on whether we are on cygwin or not). As a result, the dynamic
resolution for GetModuleFileNameEx returns NULL, and we trip
the following check which leads to the warning:
if (!EnumProcessModules || !GetModuleInformation || !GetModuleFileNameEx)
{
[...]
warning(_("[...]"));
}
This patch fixes the problem by calling GetProcAddress directly,
rather than through the GPA macro, but in a way which hopefully
avoids the C++ compilation warning that the previous patch was
trying to get rid of.
gdb/ChangeLog:
* windows-nat.c (_initialize_loadable): Fix computing of
GetModuleFileNameEx.
2015-12-19 09:21:01 -05:00
|
|
|
|
|
2016-01-01 08:19:16 +04:00
|
|
|
|
* config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2015.
|
[win32] cannot automatically find executable file [...] warning at GDB startup
The following change...
commit 43499ea30db2a866412c86952c7e1d7b158d806f
Date: Tue Nov 17 15:17:44 2015 +0000
Subject: [C++/mingw] windows-nat.c casts
... causes a small regression in GDB, where we get the following
warning at startup:
% gdb
C:\[...]\gdb.exe: warning: cannot automatically find executable file or library to read symbols.
Use "file" or "dll" command to load executable/libraries directly.
GNU gdb (GDB) 7.10.50.20151218-cvs (with AdaCore local changes)
[...]
(gdb)
The warning comes from _initialize_loadable which tries to dynamically
load some symbols from kernel32.dll and psapi.dll, and in particular:
hm = LoadLibrary ("psapi.dll");
if (hm)
{
GPA (hm, EnumProcessModules);
GPA (hm, GetModuleInformation);
GPA (hm, GetModuleFileNameEx);
}
The problem is that the new GPA macro assumes that the name of
the variable we use to point to the function, and the name of
its associated symbol are the same. This is mostly the case,
except for GetModuleFileNameEx, where the name is provided by
the GetModuleFileNameEx_name macro (defined differently depending
on whether we are on cygwin or not). As a result, the dynamic
resolution for GetModuleFileNameEx returns NULL, and we trip
the following check which leads to the warning:
if (!EnumProcessModules || !GetModuleInformation || !GetModuleFileNameEx)
{
[...]
warning(_("[...]"));
}
This patch fixes the problem by calling GetProcAddress directly,
rather than through the GPA macro, but in a way which hopefully
avoids the C++ compilation warning that the previous patch was
trying to get rid of.
gdb/ChangeLog:
* windows-nat.c (_initialize_loadable): Fix computing of
GetModuleFileNameEx.
2015-12-19 09:21:01 -05:00
|
|
|
|
|
2016-01-01 08:19:16 +04:00
|
|
|
|
For older changes see ChangeLog-2015.
|
1999-04-16 01:35:26 +00:00
|
|
|
|
|
|
|
|
|
Local Variables:
|
|
|
|
|
mode: change-log
|
|
|
|
|
left-margin: 8
|
|
|
|
|
fill-column: 74
|
|
|
|
|
version-control: never
|
2007-08-09 22:44:38 +00:00
|
|
|
|
coding: utf-8
|
1999-04-16 01:35:26 +00:00
|
|
|
|
End:
|