2015-02-27 01:31:29 +00:00
|
|
|
|
2015-02-26 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* gdbtypes.c (internal_type_vptr_fieldno): Add missing call to
|
|
|
|
|
CHECK_TYPEDEF.
|
|
|
|
|
(set_type_vptr_fieldno): Ditto.
|
|
|
|
|
(internal_type_vptr_basetype, set_type_vptr_basetype): Ditto.
|
|
|
|
|
* gnu-v3-abi.c (gnuv3_dynamic_class): Ditto.
|
|
|
|
|
|
2015-02-26 18:29:12 +00:00
|
|
|
|
2015-02-26 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* auto-load.h (file_is_auto_load_safe): Add ATTRIBUTE_PRINTF.
|
|
|
|
|
* complaints.c (vcomplaint): Pass argument FMT directly to
|
|
|
|
|
printf-like functions instead of complaint->fmt.
|
|
|
|
|
* ctf.c (ctf_save_write_metadata): Add ATTRIBUTE_PRINTF.
|
|
|
|
|
* darwin-nat.c (inferior_debug): Add ATTRIBUTE_PRINTF.
|
|
|
|
|
* compile/compile-loc2c.c (pushf, unary, binary): Add
|
|
|
|
|
ATTRIBUTE_PRINTF.
|
|
|
|
|
(do_compile_dwarf_expr_to_c): Pass string literal as format string
|
|
|
|
|
to pushf.
|
|
|
|
|
(BINARY): Pass string literal as format string to 'binary'.
|
|
|
|
|
* compile/compile-object-load.c (link_callbacks_einfo): Add
|
|
|
|
|
ATTRIBUTE_PRINTF.
|
|
|
|
|
* guile/guile-internal.h (gdbscm_printf): Add ATTRIBUTE_PRINTF.
|
|
|
|
|
|
2015-02-26 17:13:58 +00:00
|
|
|
|
2015-02-26 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* windows-termcap.c: Rename to ...
|
|
|
|
|
* stub-termcap.c: ... this. Adjust header line.
|
|
|
|
|
* Makefile.in (SFILES): Refer to stub-termcap.c instead of
|
|
|
|
|
windows-termcap.c.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
* configure.ac: Refer to stub-termcap.o instead of
|
|
|
|
|
windows-termcap.o.
|
|
|
|
|
* gdb_curses.h: Mention stub-termcap.c instead of
|
|
|
|
|
windows-termcap.c.
|
|
|
|
|
|
2015-02-26 16:40:57 +00:00
|
|
|
|
2015-02-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* compile/compile-c-symbols.c (convert_one_symbol, convert_symbol_bmsym)
|
|
|
|
|
(gcc_symbol_address): Call gnu_ifunc_resolve_addr.
|
|
|
|
|
|
2015-02-25 16:00:01 +00:00
|
|
|
|
2015-02-26 Antoine Tremblay <antoine.tremblay@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* gdb/infcmd.c (print_return_value): use type_to_string to print type.
|
|
|
|
|
|
2015-02-26 13:08:01 +00:00
|
|
|
|
2015-02-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* elfread.c (elf_read_minimal_symbols): Use bfd_alloc for
|
|
|
|
|
bfd_canonicalize_symtab.
|
|
|
|
|
|
2015-02-25 14:51:42 +00:00
|
|
|
|
2015-02-25 John Baldwin <jhb@FreeBSD.org>
|
|
|
|
|
|
|
|
|
|
* amd64fbsd-nat.c: Include sys/user.h.
|
|
|
|
|
(_initialize_amd64fbsd_nat): Use the KERN_PROC_SIGTRAMP sysctl
|
|
|
|
|
instead of KERN_PS_STRINGS to locate the signal trampoline.
|
|
|
|
|
* i386fbsd-nat.c: Include sys/user.h.
|
|
|
|
|
(_initialize_i386fbsd_nat): Use the KERN_PROC_SIGTRAMP sysctl
|
|
|
|
|
instead of KERN_PS_STRINGS to locate the signal trampoline.
|
|
|
|
|
* amd64fbsd-tdep.c (amd64fbsd_sigtramp_code): New.
|
|
|
|
|
(amd64fbsd_sigtramp_p): New.
|
|
|
|
|
(amd64fbsd_sigtramp_start_addr, amd64fbsd_sigtramp_end_addr): No
|
|
|
|
|
longer set default values.
|
|
|
|
|
(amd64fbsd_init_abi): Set "sigtramp_p" to "amd64fbsd_sigtramp_p".
|
|
|
|
|
* i386fbsd-tdep.c (i386fbsd_sigtramp_start)
|
|
|
|
|
(i386fbsd_sigtramp_middle, i386fbsd_sigtramp_end)
|
|
|
|
|
(i386fbsd_freebsd4_sigtramp_start)
|
|
|
|
|
(i386fbsd_freebsd4_sigtramp_middle)
|
|
|
|
|
(i386fbsd_freebsd4_sigtramp_end, i386fbsd_osigtramp_start)
|
|
|
|
|
(i386fbsd_osigtramp_middle, i386fbsd_osigtramp_end): New.
|
|
|
|
|
(i386fbsd_sigtramp_p): New.
|
|
|
|
|
(i386fbsd_sigtramp_start_addr, i386fbsd_sigtramp_end_addr): No
|
|
|
|
|
longer set default values.
|
|
|
|
|
(i386fbsd_init_abi): Set "sigtramp_p" to "i386fbsd_sigtramp_p".
|
|
|
|
|
|
2015-02-26 11:07:57 +00:00
|
|
|
|
2015-02-25 John Baldwin <jhb@freebsd.org>
|
|
|
|
|
|
|
|
|
|
* amd64fbsd-tdep.c (amd64fbsd_sigcontext_addr): Use
|
|
|
|
|
get_frame_register instead of frame_unwind_register_unsigned.
|
|
|
|
|
|
2015-02-26 10:50:08 +00:00
|
|
|
|
2015-02-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR build/18033
|
|
|
|
|
* compile/compile-c-support.c (c_compute_program): Change // comment.
|
|
|
|
|
* compile/compile-object-load.c (setup_sections): Change // comment.
|
|
|
|
|
|
2015-02-26 09:42:04 +00:00
|
|
|
|
2015-02-26 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
PR build/18033:
|
|
|
|
|
* iq2000-tdep.c (iq2000_frame_cache): Delete C++-style comment.
|
|
|
|
|
|
remote.c: simplify parsing stop reasons in T stop replies
We need to be careful with parsing optional stop reasons that start
with an hex character ("awatch", "core"), as GDBs that aren't aware of
them parse them as real numbers. That's silly of course, given that
there should be a colon after those magic "numbers". So if strtol on
"abbz:" doesn't return "first invalid char" pointing to the colon, we
know that "abbz" isn't really a register number. It must be optional
stop info we don't know about. This adjusts GDB to work that way,
removing the need for the special casing done upfront:
/* If this packet is an awatch packet, don't parse the 'a'
as a register number. */
if (strncmp (p, "awatch", strlen("awatch")) != 0
&& strncmp (p, "core", strlen ("core") != 0))
For as long as we care about compatibility with GDB 7.9, we'll need to
continue to be careful about this, so I added a comment.
Tested on x86_64 Fedora 20, native gdbserver.
gdb/ChangeLog:
2015-02-23 Pedro Alves <palves@redhat.com>
* remote.c (skip_to_semicolon): New function.
(remote_parse_stop_reply) <T stop reply>: Use it. Don't
special case the stop reasons that look like hex numbers
upfront. Instead handle real register numbers after matching
all the known stop reasons.
2015-02-23 16:45:39 +00:00
|
|
|
|
2015-02-23 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* remote.c (skip_to_semicolon): New function.
|
|
|
|
|
(remote_parse_stop_reply) <T stop reply>: Use it. Don't
|
|
|
|
|
special case the stop reasons that look like hex numbers
|
|
|
|
|
upfront. Instead handle real register numbers after matching
|
|
|
|
|
all the known stop reasons.
|
|
|
|
|
|
2015-02-22 05:58:31 +00:00
|
|
|
|
2015-02-21 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
PR c++/17976, symtab/17821
|
|
|
|
|
* cp-namespace.c (cp_search_static_and_baseclasses): New parameter
|
|
|
|
|
is_in_anonymous. All callers updated.
|
|
|
|
|
(find_symbol_in_baseclass): Ditto.
|
|
|
|
|
(cp_lookup_nested_symbol_1): Ditto. Don't search all static blocks
|
|
|
|
|
for symbols in an anonymous namespace.
|
|
|
|
|
* dwarf2read.c (namespace_name): Don't call dwarf2_name, fetch
|
|
|
|
|
DW_AT_name directly.
|
|
|
|
|
(dwarf2_name): Convert missing namespace name to
|
|
|
|
|
CP_ANONYMOUS_NAMESPACE_STR.
|
|
|
|
|
|
GNU/Linux: Stop using libthread_db/td_ta_thr_iter
TL;DR - GDB can hang if something refreshes the thread list out of the
target while the target is running. GDB hangs inside td_ta_thr_iter.
The fix is to not use that libthread_db function anymore.
Long version:
Running the testsuite against my all-stop-on-top-of-non-stop series is
still exposing latent non-stop bugs.
I was originally seeing this with the multi-create.exp test, back when
we were still using libthread_db thread event breakpoints. The
all-stop-on-top-of-non-stop series forces a thread list refresh each
time GDB needs to start stepping over a breakpoint (to pause all
threads). That test hits the thread event breakpoint often, resulting
in a bunch of step-over operations, thus a bunch of thread list
refreshes while some threads in the target are running.
The commit adds a real non-stop mode test that triggers the issue,
based on multi-create.exp, that does an explicit "info threads" when a
breakpoint is hit. IOW, it does the same things the as-ns series was
doing when testing multi-create.exp.
The bug is a race, so it unfortunately takes several runs for the test
to trigger it. In fact, even when setting the test running in a loop,
it sometimes takes several minutes for it to trigger for me.
The race is related to libthread_db's td_ta_thr_iter. This is
libthread_db's entry point for walking the thread list of the
inferior.
Sometimes, when GDB refreshes the thread list from the target,
libthread_db's td_ta_thr_iter can somehow see glibc's thread list as a
cycle, and get stuck in an infinite loop.
The issue is that when a thread exits, its thread control structure in
glibc is moved from a "used" list to a "cache" list. These lists are
simply circular linked lists where the "next/prev" pointers are
embedded in the thread control structure itself. The "next" pointer
of the last element of the list points back to the list's sentinel
"head". There's only one set of "next/prev" pointers for both lists;
thus a thread can only be in one of the lists at a time, not in both
simultaneously.
So when thread C exits, simplifying, the following happens. A-C are
threads. stack_used and stack_cache are the list's heads.
Before:
stack_used -> A -> B -> C -> (&stack_used)
stack_cache -> (&stack_cache)
After:
stack_used -> A -> B -> (&stack_used)
stack_cache -> C -> (&stack_cache)
td_ta_thr_iter starts by iterating at the list's head's next, and
iterates until it sees a thread whose next pointer points to the
list's head again. Thus in the before case above, C's next points to
stack_used, indicating end of list. In the same case, the stack_cache
list is empty.
For each thread being iterated, td_ta_thr_iter reads the whole thread
object out of the inferior. This includes the thread's "next"
pointer.
In the scenario above, it may happen that td_ta_thr_iter is iterating
thread B and has already read B's thread structure just before thread
C exits and its control structure moves to the cached list.
Now, recall that td_ta_thr_iter is running in the context of GDB, and
there's no locking between GDB and the inferior. From it's local copy
of B, td_ta_thr_iter believes that the next thread after B is thread
C, so it happilly continues iterating to C, a thread that has already
exited, and is now in the stack cache list.
After iterating C, td_ta_thr_iter finds the stack_cache head, which
because it is not stack_used, td_ta_thr_iter assumes it's just another
thread. After this, unless the reverse race triggers, GDB gets stuck
in td_ta_thr_iter forever walking the stack_cache list, as no thread
in thatlist has a next pointer that points back to stack_used (the
terminating condition).
Before fully understanding the issue, I tried adding cycle detection
to GDB's td_ta_thr_iter callback. However, td_ta_thr_iter skips
calling the callback in some cases, which means that it's possible
that the callback isn't called at all, making it impossible for GDB to
break the loop. I did manage to get GDB stuck in that state more than
once.
Fortunately, we can avoid the issue altogether. We don't really need
td_ta_thr_iter for live debugging nowadays, given PTRACE_EVENT_CLONE.
We already know how to map and lwp id to a thread id without iterating
(thread_from_lwp), so use that more.
gdb/ChangeLog:
2015-02-20 Pedro Alves <palves@redhat.com>
* linux-nat.c (linux_handle_extended_wait): Call
thread_db_notice_clone whenever a new clone LWP is detected.
(linux_stop_and_wait_all_lwps, linux_unstop_all_lwps): New
functions.
* linux-nat.h (thread_db_attach_lwp): Delete declaration.
(thread_db_notice_clone, linux_stop_and_wait_all_lwps)
(linux_unstop_all_lwps): Declare.
* linux-thread-db.c (struct thread_get_info_inout): Delete.
(thread_get_info_callback): Delete.
(thread_from_lwp): Use td_thr_get_info and record_thread.
(thread_db_attach_lwp): Delete.
(thread_db_notice_clone): New function.
(try_thread_db_load_1): If /proc is mounted and shows the
process'es task list, walk over all LWPs and call thread_from_lwp
instead of relying on td_ta_thr_iter.
(attach_thread): Don't call check_thread_signals here. Split the
tail part of the function (which adds the thread to the core GDB
thread list) to ...
(record_thread): ... this function. Call check_thread_signals
here.
(thread_db_wait): Don't call thread_db_find_new_threads_1. Always
call thread_from_lwp.
(thread_db_update_thread_list): Rename to ...
(thread_db_update_thread_list_org): ... this.
(thread_db_update_thread_list): New function.
(thread_db_find_thread_from_tid): Delete.
(thread_db_get_ada_task_ptid): Simplify.
* nat/linux-procfs.c: Include <sys/stat.h>.
(linux_proc_task_list_dir_exists): New function.
* nat/linux-procfs.h (linux_proc_task_list_dir_exists): Declare.
gdb/gdbserver/ChangeLog:
2015-02-20 Pedro Alves <palves@redhat.com>
* thread-db.c: Include "nat/linux-procfs.h".
(thread_db_init): Skip listing new threads if the kernel supports
PTRACE_EVENT_CLONE and /proc/PID/task/ is accessible.
gdb/testsuite/ChangeLog:
2015-02-20 Pedro Alves <palves@redhat.com>
* gdb.threads/multi-create-ns-info-thr.exp: New file.
2015-02-20 20:21:59 +00:00
|
|
|
|
2015-02-20 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (linux_handle_extended_wait): Call
|
|
|
|
|
thread_db_notice_clone whenever a new clone LWP is detected.
|
|
|
|
|
(linux_stop_and_wait_all_lwps, linux_unstop_all_lwps): New
|
|
|
|
|
functions.
|
|
|
|
|
* linux-nat.h (thread_db_attach_lwp): Delete declaration.
|
|
|
|
|
(thread_db_notice_clone, linux_stop_and_wait_all_lwps)
|
|
|
|
|
(linux_unstop_all_lwps): Declare.
|
|
|
|
|
* linux-thread-db.c (struct thread_get_info_inout): Delete.
|
|
|
|
|
(thread_get_info_callback): Delete.
|
|
|
|
|
(thread_from_lwp): Use td_thr_get_info and record_thread.
|
|
|
|
|
(thread_db_attach_lwp): Delete.
|
|
|
|
|
(thread_db_notice_clone): New function.
|
|
|
|
|
(try_thread_db_load_1): If /proc is mounted and shows the
|
|
|
|
|
process'es task list, walk over all LWPs and call thread_from_lwp
|
|
|
|
|
instead of relying on td_ta_thr_iter.
|
|
|
|
|
(attach_thread): Don't call check_thread_signals here. Split the
|
|
|
|
|
tail part of the function (which adds the thread to the core GDB
|
|
|
|
|
thread list) to ...
|
|
|
|
|
(record_thread): ... this function. Call check_thread_signals
|
|
|
|
|
here.
|
|
|
|
|
(thread_db_wait): Don't call thread_db_find_new_threads_1. Always
|
|
|
|
|
call thread_from_lwp.
|
|
|
|
|
(thread_db_update_thread_list): Rename to ...
|
|
|
|
|
(thread_db_update_thread_list_org): ... this.
|
|
|
|
|
(thread_db_update_thread_list): New function.
|
|
|
|
|
(thread_db_find_thread_from_tid): Delete.
|
|
|
|
|
(thread_db_get_ada_task_ptid): Simplify.
|
|
|
|
|
* nat/linux-procfs.c: Include <sys/stat.h>.
|
|
|
|
|
(linux_proc_task_list_dir_exists): New function.
|
|
|
|
|
* nat/linux-procfs.h (linux_proc_task_list_dir_exists): Declare.
|
|
|
|
|
|
linux-nat.c: fix a few lin_lwp_attach_lwp issues
This function has a few latent bugs that are triggered by a non-stop
mode test that will be added in a subsequent patch.
First, as described in the function's intro comment, the function is
supposed to return 1 if we're already auto attached to the thread, but
haven't processed the PTRACE_EVENT_CLONE event of its parent thread
yet.
Then, we may find that we're trying to attach to a clone child that
hasn't yet stopped for its initial stop, and therefore 'waitpid(...,
WNOHANG)' returns 0. In that case, we're currently adding the LWP to
the stopped_pids list, which results in linux_handle_extended_wait
skipping the waitpid call on the child, and thus confusing things
later on when the child eventually reports the stop.
Then, the tail end of lin_lwp_attach_lwp always sets the
last_resume_kind of the LWP to resume_stop, which is wrong given that
the user may be doing "info threads" while some threads are running.
And then, the else branch of lin_lwp_attach_lwp always sets the
stopped flag of the LWP. This branch is reached if the LWP is the
main LWP, which may well be running at this point (to it's wrong to
set its 'stopped' flag).
AFAICS, there's no reason anymore for special-casing the main/leader
LWP here:
- For the "attach" case, linux_nat_attach already adds the main LWP to
the lwp list, and sets its 'stopped' flag.
- For the "run" case, after linux_nat_create_inferior, end up in
linux_nat_wait_1 here:
/* The first time we get here after starting a new inferior, we may
not have added it to the LWP list yet - this is the earliest
moment at which we know its PID. */
if (ptid_is_pid (inferior_ptid))
{
/* Upgrade the main thread's ptid. */
thread_change_ptid (inferior_ptid,
ptid_build (ptid_get_pid (inferior_ptid),
ptid_get_pid (inferior_ptid), 0));
lp = add_initial_lwp (inferior_ptid);
lp->resumed = 1;
}
... which adds the LWP to the LWP list already, before
lin_lwp_attach_lwp can ever be reached.
gdb/ChangeLog:
2015-02-20 Pedro Alves <palves@redhat.com>
* linux-nat.c (lin_lwp_attach_lwp): No longer special case the
main LWP. Handle the case of waitpid returning 0 if we're already
attached to the LWP. Don't set the LWP's last_resume_kind to
resume_stop if we already knew about the LWP.
(linux_nat_filter_event): Add debug logs.
2015-02-20 20:21:59 +00:00
|
|
|
|
2015-02-20 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (lin_lwp_attach_lwp): No longer special case the
|
|
|
|
|
main LWP. Handle the case of waitpid returning 0 if we're already
|
|
|
|
|
attached to the LWP. Don't set the LWP's last_resume_kind to
|
|
|
|
|
resume_stop if we already knew about the LWP.
|
|
|
|
|
(linux_nat_filter_event): Add debug logs.
|
|
|
|
|
|
2015-02-19 20:48:49 +00:00
|
|
|
|
2015-02-20 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* target.h (forward_target_decr_pc_after_break): Delete
|
|
|
|
|
declaration.
|
|
|
|
|
|
PR18006: internal error if threaded program calls clone(CLONE_VM)
On GNU/Linux, if a pthreaded program has a thread call clone(CLONE_VM)
directly, and then that clone LWP hits a debug event (breakpoint,
etc.) GDB internal errors. Threaded programs shouldn't really be
calling clone directly, but GDB shouldn't crash either.
The crash looks like this:
(gdb) break clone_fn
Breakpoint 2 at 0x4007d8: file clone-thread_db.c, line 35.
(gdb) r
...
[Thread debugging using libthread_db enabled]
...
src/gdb/linux-nat.c:1030: internal-error: lin_lwp_attach_lwp: Assertion `lwpid > 0' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
The problem is that 'clone' ends up clearing the parent thread's tid
field in glibc's thread data structure. For x86_64, the glibc code in
question is here:
sysdeps/unix/sysv/linux/x86_64/clone.S:
...
testq $CLONE_THREAD, %rdi
jne 1f
testq $CLONE_VM, %rdi
movl $-1, %eax <----
jne 2f
movl $SYS_ify(getpid), %eax
syscall
2: movl %eax, %fs:PID
movl %eax, %fs:TID <----
1:
When GDB refreshes the thread list out of libthread_db, it finds a
thread with LWP with pid -1 (the clone's parent), which naturally
isn't yet on the thread list. GDB then tries to attach to that bogus
LWP id, which is caught by that assertion.
The fix is to detect the bad PID early.
Tested on x86-64 Fedora 20. GDBserver doesn't need any fix.
gdb/ChangeLog:
2015-02-20 Pedro Alves <palves@redhat.com>
PR threads/18006
* linux-thread-db.c (thread_get_info_callback): Return early if
the thread's lwp id is -1.
gdb/testsuite/ChangeLog:
2015-02-20 Pedro Alves <palves@redhat.com>
PR threads/18006
* gdb.threads/clone-thread_db.c: New file.
* gdb.threads/clone-thread_db.exp: New file.
2015-02-20 19:00:21 +00:00
|
|
|
|
2015-02-20 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR threads/18006
|
|
|
|
|
* linux-thread-db.c (thread_get_info_callback): Return early if
|
|
|
|
|
the thread's lwp id is -1.
|
|
|
|
|
|
2015-02-20 17:20:23 +00:00
|
|
|
|
2015-02-20 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
GDB 7.9 released.
|
|
|
|
|
|
2015-02-19 22:42:37 +00:00
|
|
|
|
2015-02-19 Steve Ellcey <sellcey@imgtec.com>
|
|
|
|
|
|
|
|
|
|
* dtrace-probe.c (dtrace_process_dof_probe): Initialize arg.expr.
|
|
|
|
|
(dtrace_get_probes) Change type of variable 'dof'.
|
|
|
|
|
|
2015-02-12 19:55:08 +00:00
|
|
|
|
2015-02-19 Antoine Tremblay <antoine.tremblay@ericsson.com>
|
|
|
|
|
|
|
|
|
|
PR breakpoints/16812
|
|
|
|
|
* linux-nat.c (linux_nat_filter_event): Report SIGTRAP,SIGILL,SIGSEGV.
|
|
|
|
|
* nat/linux-ptrace.c (linux_wstatus_maybe_breakpoint): Add.
|
|
|
|
|
* nat/linux-ptrace.h: Add linux_wstatus_maybe_breakpoint.
|
|
|
|
|
|
[gdb/ax] small "setv" fix and documentation's adjustment.
gdb/doc/agentexpr.texi documents the "setv" opcode as follow:
@item @code{setv} (0x2d) @var{n}: @result{} @var{v}
Set trace state variable number @var{n} to the value found on the top
of the stack. The stack is unchanged, so that the value is readily
available if the assignment is part of a larger expression. The
handling of @var{n} is as described for @code{getv}.
The @item line is incorrect (and does not match with its
description), so this patch fixes it.
Additionally, in gdb/common/ax.def we find the line:
DEFOP (setv, 2, 0, 0, 1, 0x2d)
From the comment earlier in the file:
Each line is of the form:
DEFOP (name, size, data_size, consumed, produced, opcode)
[...]
CONSUMED is the number of stack elements consumed.
PRODUCED is the number of stack elements produced.
which is saying that nothing is consumed and one item is produced.
Both should be 0 or both should be 1.
This patch sets them both to 1, which seems better since if nothing
is on the stack an error will occur.
gdb/ChangeLog:
* common/ax.def (setv): Fix consumed entry in setv DEFOP.
gdb/doc/ChangeLog:
* agentexpr.texi (Bytecode Descriptions): Fix summary line for setv.
Tested on x86_64-linux.
2015-02-19 14:53:50 +00:00
|
|
|
|
2015-02-19 David Taylor <dtaylor@emc.com>
|
|
|
|
|
|
|
|
|
|
* common/ax.def (setv): Fix consumed entry in setv DEFOP.
|
|
|
|
|
|
2015-02-18 23:50:51 +00:00
|
|
|
|
2015-02-18 Patrick Palka <patrick@parcs.ath.cx>
|
|
|
|
|
|
|
|
|
|
* tui/tui-io.c (tui_handle_resize_during_io): Remove this
|
|
|
|
|
function.
|
|
|
|
|
(tui_putc): Don't call tui_handle_resize_during_io.
|
|
|
|
|
(tui_getc): Likewise.
|
|
|
|
|
(tui_mld_getc): Likewise.
|
|
|
|
|
* tui/tui-win.c: Include event-loop.h and tui/tui-io.h.
|
|
|
|
|
(tui_sigwinch_token): New static variable.
|
|
|
|
|
(tui_initialize_win): Adjust documentation. Set
|
|
|
|
|
tui_sigwinch_token.
|
|
|
|
|
(tui_async_resize_screen): New asynchronous callback.
|
|
|
|
|
(tui_sigwinch_handler): Adjust documentation. Asynchronously
|
|
|
|
|
invoke tui_async_resize_screen.
|
|
|
|
|
|
2015-02-18 12:52:53 +00:00
|
|
|
|
2015-02-18 Jose E. Marchesi <jose.marchesi@oracle.com>
|
|
|
|
|
|
|
|
|
|
* configure: Regenerated.
|
|
|
|
|
* configure.ac: Use GDB_AC_TRANSFORM.
|
|
|
|
|
* Makefile.in (aclocal_m4_deps): Added transform.m4.
|
|
|
|
|
* acinclude.m4: sinclude transform.m4.
|
|
|
|
|
* transform.m4: New file.
|
|
|
|
|
(GDB_AC_TRANSFORM): New macro.
|
|
|
|
|
|
2015-02-17 15:43:48 +00:00
|
|
|
|
2015-02-17 Jose E. Marchesi <jose.marchesi@oracle.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Announce the support for DTrace SDT probes.
|
|
|
|
|
|
2015-02-17 15:04:01 +00:00
|
|
|
|
2015-02-17 Jose E. Marchesi <jose.marchesi@oracle.com>
|
|
|
|
|
|
|
|
|
|
* amd64-linux-tdep.c: Include "parser-defs.h" and "user-regs.h".
|
|
|
|
|
(amd64_dtrace_parse_probe_argument): New function.
|
|
|
|
|
(amd64_dtrace_probe_is_enabled): Likewise.
|
|
|
|
|
(amd64_dtrace_enable_probe): Likewise.
|
|
|
|
|
(amd64_dtrace_disable_probe): Likewise.
|
|
|
|
|
(amd64_linux_init_abi): Register the
|
|
|
|
|
`gdbarch_dtrace_probe_argument', `gdbarch_dtrace_enable_probe',
|
|
|
|
|
`gdbarch_dtrace_disable_probe' and
|
|
|
|
|
`gdbarch_dtrace_probe_is_enabled' hooks.
|
|
|
|
|
(amd64_dtrace_disabled_probe_sequence_1): New constant.
|
|
|
|
|
(amd64_dtrace_disabled_probe_sequence_2): Likewise.
|
|
|
|
|
(amd64_dtrace_enable_probe_sequence): Likewise.
|
|
|
|
|
(amd64_dtrace_disable_probe_sequence): Likewise.
|
|
|
|
|
|
2015-02-17 15:03:22 +00:00
|
|
|
|
2015-01-17 Jose E. Marchesi <jose.marchesi@oracle.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (BREAK_ARGS_HELP): Help string updated to mention
|
|
|
|
|
the -probe-dtrace new vpossible value for PROBE_MODIFIER.
|
|
|
|
|
* configure.ac (CONFIG_OBS): dtrace-probe.o added if BFD can
|
|
|
|
|
handle ELF files.
|
|
|
|
|
* Makefile.in (SFILES): dtrace-probe.c added.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
* dtrace-probe.c: New file.
|
|
|
|
|
(SHT_SUNW_dof): New constant.
|
|
|
|
|
(dtrace_probe_type): New enum.
|
|
|
|
|
(dtrace_probe_arg): New struct.
|
|
|
|
|
(dtrace_probe_arg_s): New typedef.
|
|
|
|
|
(struct dtrace_probe_enabler): New struct.
|
|
|
|
|
(dtrace_probe_enabler_s): New typedef.
|
|
|
|
|
(dtrace_probe): New struct.
|
|
|
|
|
(dtrace_probe_is_linespec): New function.
|
|
|
|
|
(dtrace_dof_sect_type): New enum.
|
|
|
|
|
(dtrace_dof_dofh_ident): Likewise.
|
|
|
|
|
(dtrace_dof_encoding): Likewise.
|
|
|
|
|
(DTRACE_DOF_ENCODE_LSB): Likewise.
|
|
|
|
|
(DTRACE_DOF_ENCODE_MSB): Likewise.
|
|
|
|
|
(dtrace_dof_hdr): New struct.
|
|
|
|
|
(dtrace_dof_sect): Likewise.
|
|
|
|
|
(dtrace_dof_provider): Likewise.
|
|
|
|
|
(dtrace_dof_probe): Likewise.
|
|
|
|
|
(DOF_UINT): New macro.
|
|
|
|
|
(DTRACE_DOF_PTR): Likewise.
|
|
|
|
|
(DTRACE_DOF_SECT): Likewise.
|
|
|
|
|
(dtrace_process_dof_probe): New function.
|
|
|
|
|
(dtrace_process_dof): Likewise.
|
|
|
|
|
(dtrace_build_arg_exprs): Likewise.
|
|
|
|
|
(dtrace_get_arg): Likewise.
|
|
|
|
|
(dtrace_get_probes): Likewise.
|
|
|
|
|
(dtrace_get_probe_argument_count): Likewise.
|
|
|
|
|
(dtrace_can_evaluate_probe_arguments): Likewise.
|
|
|
|
|
(dtrace_evaluate_probe_argument): Likewise.
|
|
|
|
|
(dtrace_compile_to_ax): Likewise.
|
|
|
|
|
(dtrace_probe_destroy): Likewise.
|
|
|
|
|
(dtrace_gen_info_probes_table_header): Likewise.
|
|
|
|
|
(dtrace_gen_info_probes_table_values): Likewise.
|
|
|
|
|
(dtrace_probe_is_enabled): Likewise.
|
|
|
|
|
(dtrace_probe_ops): New variable.
|
|
|
|
|
(info_probes_dtrace_command): New function.
|
|
|
|
|
(_initialize_dtrace_probe): Likewise.
|
|
|
|
|
(dtrace_type_name): Likewise.
|
|
|
|
|
|
2015-02-17 14:54:44 +00:00
|
|
|
|
2015-02-17 Jose E. Marchesi <jose.marchesi@oracle.com>
|
|
|
|
|
|
|
|
|
|
* gdbarch.sh (dtrace_parse_probe_argument): New.
|
|
|
|
|
(dtrace_probe_is_enabled): Likewise.
|
|
|
|
|
(dtrace_enable_probe): Likewise.
|
|
|
|
|
(dtrace_disable_probe): Likewise.
|
|
|
|
|
* gdbarch.c: Regenerate.
|
|
|
|
|
* gdbarch.h: Regenerate.
|
|
|
|
|
|
2015-02-17 14:51:07 +00:00
|
|
|
|
2015-02-17 Jose E. Marchesi <jose.marchesi@oracle.com>
|
|
|
|
|
|
|
|
|
|
* stap-probe.c (stap_probe_ops): Add NULLs in the static
|
|
|
|
|
stap_probe_ops for `enable_probe' and `disable_probe'.
|
|
|
|
|
* probe.c (enable_probes_command): New function.
|
|
|
|
|
(disable_probes_command): Likewise.
|
|
|
|
|
(_initialize_probe): Define the cli commands `enable probe' and
|
|
|
|
|
`disable probe'.
|
|
|
|
|
(parse_probe_linespec): New function.
|
|
|
|
|
(info_probes_for_ops): Use parse_probe_linespec.
|
|
|
|
|
* probe.h (probe_ops): New hooks `enable_probe' and
|
|
|
|
|
`disable_probe'.
|
|
|
|
|
|
2015-02-17 14:50:19 +00:00
|
|
|
|
2015-02-17 Jose E. Marchesi <jose.marchesi@oracle.com>
|
|
|
|
|
|
|
|
|
|
* probe.c (compute_probe_arg): Moved from stap-probe.c
|
|
|
|
|
(compile_probe_arg): Likewise.
|
|
|
|
|
(probe_funcs): Likewise.
|
|
|
|
|
* stap-probe.c (compute_probe_arg): Moved to probe.c.
|
|
|
|
|
(compile_probe_arg): Likewise.
|
|
|
|
|
(probe_funcs): Likewise.
|
|
|
|
|
|
2015-02-17 14:49:12 +00:00
|
|
|
|
2015-02-17 Jose E. Marchesi <jose.marchesi@oracle.com>
|
|
|
|
|
|
|
|
|
|
* probe.c (print_ui_out_not_applicables): New function.
|
|
|
|
|
(exists_probe_with_pops): Likewise.
|
|
|
|
|
(info_probes_for_ops): Do not include column headers for probe
|
|
|
|
|
types for which no probe has been actually found on any object.
|
|
|
|
|
Also invoke `print_ui_out_not_applicables' in order to match the
|
|
|
|
|
column rows with the header when probes of several types are
|
|
|
|
|
listed.
|
|
|
|
|
Print the "Type" column.
|
|
|
|
|
* probe.h (probe_ops): Added a new probe operation `type_name'.
|
|
|
|
|
* stap-probe.c (stap_probe_ops): Add `stap_type_name'.
|
|
|
|
|
(stap_type_name): New function.
|
|
|
|
|
|
2015-02-17 13:06:10 +00:00
|
|
|
|
2015-02-17 Patrick Palka <patrick@parcs.ath.cx>
|
|
|
|
|
|
|
|
|
|
* tui/tui-io.c (tui_getc): Don't call key_is_command_char.
|
|
|
|
|
(key_is_command_char): Delete.
|
|
|
|
|
|
TUI: resize windows to new terminal size before displaying them
If the user:
#1 - disables the TUI
#2 - resizes the terminal
#3 - and then re-enables the TUI
the next wgetch() returns KEY_RESIZE. This indicates to the ncurses
client that ncurses detected that the terminal has been resized. We
don't handle KEY_RESIZE anywhere, so it gets passed on to readline
which interprets it as a multibyte character, and then the end result
is that the first key press after enabling the TUI is misinterpreted.
We shouldn't really need to handle KEY_RESIZE (and not all ncurses
implementations have that). We have our own SIGWINCH handler, and,
when we re-enable the TUI, we explicitly detect terminal resizes and
resize all windows. The reason ncurses currently does detects a
resize is that something within tui_enable forces a refresh/display of
some window before we get to do the actual resizing. Setting a break
on ncurses' 'resizeterm' function helps find the culprit(s):
(top-gdb) bt
#0 resizeterm (ToLines=28, ToCols=114) at ../../ncurses/base/resizeterm.c:462
#1 0x0000003b42812f3f in _nc_update_screensize (sp=0x2674730) at ../../ncurses/tinfo/lib_setup.c:443
#2 0x0000003b0821cbe0 in doupdate () at ../../ncurses/tty/tty_update.c:726
#3 0x0000003b08215539 in wrefresh (win=0x2a7bc00) at ../../ncurses/base/lib_refresh.c:65
#4 0x00000000005257cb in tui_refresh_win (win_info=0xd73d60 <_locator>) at /home/pedro/gdb/mygit/src/gdb/tui/tui-wingeneral.c:60
#5 0x000000000052265b in tui_show_locator_content () at /home/pedro/gdb/mygit/src/gdb/tui/tui-stack.c:269
#6 0x00000000005273a6 in tui_set_key_mode (mode=TUI_COMMAND_MODE) at /home/pedro/gdb/mygit/src/gdb/tui/tui.c:321
#7 0x00000000005278c7 in tui_enable () at /home/pedro/gdb/mygit/src/gdb/tui/tui.c:494
#8 0x0000000000527011 in tui_rl_switch_mode (notused1=1, notused2=1) at /home/pedro/gdb/mygit/src/gdb/tui/tui.c:108
That is, tui_enable calls tui_set_key_mode before we've resized all
windows, and that refreshes a window as side effect.
And if we're already debugging something (there's a frame), then we'll
instead show a window from within tui_show_frame_info:
(top-gdb) bt
#0 resizeterm (ToLines=28, ToCols=114) at ../../ncurses/base/resizeterm.c:462
#1 0x0000003b42812f3f in _nc_update_screensize (sp=0x202e6c0) at ../../ncurses/tinfo/lib_setup.c:443
#2 0x0000003b0821cbe0 in doupdate () at ../../ncurses/tty/tty_update.c:726
#3 0x0000003b08215539 in wrefresh (win=0x2042890) at ../../ncurses/base/lib_refresh.c:65
#4 0x00000000005257cb in tui_refresh_win (win_info=0xd73d60 <_locator>) at /home/pedro/gdb/mygit/src/gdb/tui/tui-wingeneral.c:60
#5 0x000000000052265b in tui_show_locator_content () at /home/pedro/gdb/mygit/src/gdb/tui/tui-stack.c:269
#6 0x0000000000522931 in tui_show_frame_info (fi=0x16b9cc0) at /home/pedro/gdb/mygit/src/gdb/tui/tui-stack.c:364
#7 0x00000000005278ba in tui_enable () at /home/pedro/gdb/mygit/src/gdb/tui/tui.c:491
#8 0x0000000000527011 in tui_rl_switch_mode (notused1=1, notused2=1) at /home/pedro/gdb/mygit/src/gdb/tui/tui.c:108
The fix is to resize windows earlier.
gdb/ChangeLog:
2015-02-17 Pedro Alves <palves@redhat.com>
* tui/tui.c (tui_enable): Resize windows before anything
might show a window.
2015-02-17 10:05:52 +00:00
|
|
|
|
2015-02-17 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* tui/tui.c (tui_enable): Resize windows before anything
|
|
|
|
|
might show a window.
|
|
|
|
|
|
2015-02-16 16:24:53 +00:00
|
|
|
|
2015-02-17 Max Ostapenko <m.ostapenko@partner.samsung.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/17984
|
|
|
|
|
* aarch64-linux-nat.c: Don't include features/aarch64.c anymore.
|
|
|
|
|
(aarch64_linux_read_description): Remove initialize_tdesc_aarch64
|
|
|
|
|
call.
|
|
|
|
|
* aarch64-tdep.h (tdesc_aarch64): Declare.
|
|
|
|
|
|
2015-02-12 15:51:53 +00:00
|
|
|
|
2015-02-12 Mark Wielaard <mjw@redhat.com>
|
|
|
|
|
|
|
|
|
|
* contrib/ari/gdb_ari.sh: Remove checks for "true" and "false".
|
|
|
|
|
|
2015-02-13 20:03:50 +00:00
|
|
|
|
2015-02-13 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* cp-namespace.c (cp_basic_lookup_symbol): Rename parameter
|
|
|
|
|
anonymous_namespace to is_in_anonymous for consistency with the rest
|
|
|
|
|
of the file.
|
|
|
|
|
(cp_lookup_bare_symbol): Fix typo in comment.
|
|
|
|
|
(cp_search_static_and_baseclasses): Ditto.
|
|
|
|
|
(search_symbol_list): Use vertical space in comment better.
|
|
|
|
|
(reset_directive_searched): Ditto. Fix typo.
|
|
|
|
|
(cp_lookup_nested_symbol_1): Clarify contents of NESTED_NAME parameter.
|
|
|
|
|
|
2015-02-13 10:23:16 +00:00
|
|
|
|
2015-02-13 Yao Qi <yao.qi@arm.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS: Update my email address.
|
|
|
|
|
|
2015-02-12 21:32:36 +00:00
|
|
|
|
2015-02-12 Doug Evans <dje@google.com>
|
|
|
|
|
|
2015-02-23 21:39:45 +00:00
|
|
|
|
* symtab.c (completion_list_add_name): Fix memory leak.
|
2015-02-12 21:32:36 +00:00
|
|
|
|
|
2015-02-12 20:19:31 +00:00
|
|
|
|
2015-02-12 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* completer.c (complete_line): Remove incorrect comment.
|
|
|
|
|
|
2015-02-11 13:50:09 +00:00
|
|
|
|
2015-02-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* python/py-framefilter.c (py_print_single_arg, enumerate_locals)
|
|
|
|
|
(py_print_frame): Use RETURN_MASK_ERROR.
|
|
|
|
|
|
2015-02-11 13:44:00 +00:00
|
|
|
|
2015-02-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* python/py-framefilter.c (py_print_frame): Mention RETURN_QUIT in
|
|
|
|
|
function comment. Wrap all function that can throw in cleanups.
|
|
|
|
|
(gdbpy_apply_frame_filter): Wrap all function that can throw in
|
|
|
|
|
cleanups.
|
|
|
|
|
|
2015-02-11 13:40:14 +00:00
|
|
|
|
2015-02-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* python/py-framefilter.c (py_print_frame): Substitute goto error.
|
|
|
|
|
Remove the error label.
|
|
|
|
|
|
2015-02-11 13:37:40 +00:00
|
|
|
|
2015-02-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* python/py-framefilter.c (py_print_frame): Put conditional code paths
|
|
|
|
|
with goto first, indent the former else codepath left. Put variable
|
|
|
|
|
'elided' to a new inner block.
|
|
|
|
|
|
2015-02-11 13:33:48 +00:00
|
|
|
|
2015-02-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* python/py-framefilter.c (py_print_frame): Whitespacing fixes.
|
|
|
|
|
|
2015-02-10 11:01:21 +00:00
|
|
|
|
2015-02-11 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* xcoffread.c (within_function): Delete.
|
|
|
|
|
|
Fix redefinition errors in C++ mode
In C, we can forward declare static structure instances. That doesn't
work in C++ though. C++ treats these as definitions. So then the
compiler complains about symbol redefinition, like:
src/gdb/elfread.c:1569:29: error: redefinition of ‘const sym_fns elf_sym_fns_lazy_psyms’
src/gdb/elfread.c:53:29: error: ‘const sym_fns elf_sym_fns_lazy_psyms’ previously declared here
The intent of static here is naturally to avoid making these objects
visible outside the compilation unit. The equivalent in C++ would be
to instead define the objects in the anonymous namespace. But given
that it's desirable to leave the codebase compiling as both C and C++
for a while, this just makes the objects extern.
(base_breakpoint_ops is already declared in breakpoint.h, so we can
just remove the forward declare from breakpoint.c)
gdb/ChangeLog:
2015-02-11 Tom Tromey <tromey@redhat.com>
Pedro Alves <palves@redhat.com>
* breakpoint.c (base_breakpoint_ops): Delete.
* dwarf2loc.c (dwarf_expr_ctx_funcs): Make extern.
* elfread.c (elf_sym_fns_gdb_index, elf_sym_fns_lazy_psyms): Make extern.
* guile/guile.c (guile_extension_script_ops, guile_extension_ops): Make extern.
* ppcnbsd-tdep.c (ppcnbsd2_sigtramp): Make extern.
* python/py-arch.c (arch_object_type): Make extern.
* python/py-block.c (block_syms_iterator_object_type): Make extern.
* python/py-bpevent.c (breakpoint_event_object_type): Make extern.
* python/py-cmd.c (cmdpy_object_type): Make extern.
* python/py-continueevent.c (continue_event_object_type)
* python/py-event.h (GDBPY_NEW_EVENT_TYPE): Remove 'qual'
parameter. Update all callers.
* python/py-evtregistry.c (eventregistry_object_type): Make extern.
* python/py-exitedevent.c (exited_event_object_type): Make extern.
* python/py-finishbreakpoint.c (finish_breakpoint_object_type): Make extern.
* python/py-function.c (fnpy_object_type): Make extern.
* python/py-inferior.c (inferior_object_type, membuf_object_type): Make extern.
* python/py-infevents.c (call_pre_event_object_type)
(inferior_call_post_event_object_type).
(memory_changed_event_object_type): Make extern.
* python/py-infthread.c (thread_object_type): Make extern.
* python/py-lazy-string.c (lazy_string_object_type): Make extern.
* python/py-linetable.c (linetable_entry_object_type)
(linetable_object_type, ltpy_iterator_object_type): Make extern.
* python/py-newobjfileevent.c (new_objfile_event_object_type)
(clear_objfiles_event_object_type): Make extern.
* python/py-objfile.c (objfile_object_type): Make extern.
* python/py-param.c (parmpy_object_type): Make extern.
* python/py-progspace.c (pspace_object_type): Make extern.
* python/py-signalevent.c (signal_event_object_type): Make extern.
* python/py-symtab.c (symtab_object_type, sal_object_type): Make extern.
* python/py-type.c (type_object_type, field_object_type)
(type_iterator_object_type): Make extern.
* python/python.c (python_extension_script_ops)
(python_extension_ops): Make extern.
* stap-probe.c (stap_probe_ops): Make extern.
2015-02-11 11:20:21 +00:00
|
|
|
|
2015-02-11 Tom Tromey <tromey@redhat.com>
|
|
|
|
|
Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (base_breakpoint_ops): Delete.
|
|
|
|
|
* dwarf2loc.c (dwarf_expr_ctx_funcs): Make extern.
|
|
|
|
|
* elfread.c (elf_sym_fns_gdb_index, elf_sym_fns_lazy_psyms): Make extern.
|
|
|
|
|
* guile/guile.c (guile_extension_script_ops, guile_extension_ops): Make extern.
|
|
|
|
|
* ppcnbsd-tdep.c (ppcnbsd2_sigtramp): Make extern.
|
|
|
|
|
* python/py-arch.c (arch_object_type): Make extern.
|
|
|
|
|
* python/py-block.c (block_syms_iterator_object_type): Make extern.
|
|
|
|
|
* python/py-bpevent.c (breakpoint_event_object_type): Make extern.
|
|
|
|
|
* python/py-cmd.c (cmdpy_object_type): Make extern.
|
|
|
|
|
* python/py-continueevent.c (continue_event_object_type)
|
|
|
|
|
* python/py-event.h (GDBPY_NEW_EVENT_TYPE): Remove 'qual'
|
|
|
|
|
parameter. Update all callers.
|
|
|
|
|
* python/py-evtregistry.c (eventregistry_object_type): Make extern.
|
|
|
|
|
* python/py-exitedevent.c (exited_event_object_type): Make extern.
|
|
|
|
|
* python/py-finishbreakpoint.c (finish_breakpoint_object_type): Make extern.
|
|
|
|
|
* python/py-function.c (fnpy_object_type): Make extern.
|
|
|
|
|
* python/py-inferior.c (inferior_object_type, membuf_object_type): Make extern.
|
|
|
|
|
* python/py-infevents.c (call_pre_event_object_type)
|
|
|
|
|
(inferior_call_post_event_object_type).
|
|
|
|
|
(memory_changed_event_object_type): Make extern.
|
|
|
|
|
* python/py-infthread.c (thread_object_type): Make extern.
|
|
|
|
|
* python/py-lazy-string.c (lazy_string_object_type): Make extern.
|
|
|
|
|
* python/py-linetable.c (linetable_entry_object_type)
|
|
|
|
|
(linetable_object_type, ltpy_iterator_object_type): Make extern.
|
|
|
|
|
* python/py-newobjfileevent.c (new_objfile_event_object_type)
|
|
|
|
|
(clear_objfiles_event_object_type): Make extern.
|
|
|
|
|
* python/py-objfile.c (objfile_object_type): Make extern.
|
|
|
|
|
* python/py-param.c (parmpy_object_type): Make extern.
|
|
|
|
|
* python/py-progspace.c (pspace_object_type): Make extern.
|
|
|
|
|
* python/py-signalevent.c (signal_event_object_type): Make extern.
|
|
|
|
|
* python/py-symtab.c (symtab_object_type, sal_object_type): Make extern.
|
|
|
|
|
* python/py-type.c (type_object_type, field_object_type)
|
|
|
|
|
(type_iterator_object_type): Make extern.
|
|
|
|
|
* python/python.c (python_extension_script_ops)
|
|
|
|
|
(python_extension_ops): Make extern.
|
|
|
|
|
* stap-probe.c (stap_probe_ops): Make extern.
|
|
|
|
|
|
Fix adjust_pc_after_break, remove still current thread check
On decr_pc_after_break targets, GDB adjusts the PC incorrectly if a
background single-step stops somewhere where PC-$decr_pc has a
breakpoint, and the thread that finishes the step is not the current
thread, like:
ADDR1 nop <-- breakpoint here
ADDR2 jmp PC
IOW, say thread A is stepping ADDR2's line in the background (an
infinite loop), and the user switches focus to thread B. GDB's
adjust_pc_after_break logic confuses the single-step stop of thread A
for a hit of the breakpoint at ADDR1, and thus adjusts thread A's PC
to point at ADDR1 when it should not, and reports a breakpoint hit,
when thread A did not execute the instruction at ADDR1 at all.
The test added by this patch exercises exactly that.
I can't find any reason we'd need the "thread to be examined is still
the current thread" condition in adjust_pc_after_break, at least
nowadays; it might have made sense in the past. Best just remove it,
and rely on currently_stepping().
Here's the test's log of a run with an unpatched GDB:
35 while (1);
(gdb) PASS: gdb.threads/step-bg-decr-pc-switch-thread.exp: next over nop
next&
(gdb) PASS: gdb.threads/step-bg-decr-pc-switch-thread.exp: next& over inf loop
thread 1
[Switching to thread 1 (Thread 0x7ffff7fc2740 (LWP 29027))](running)
(gdb)
PASS: gdb.threads/step-bg-decr-pc-switch-thread.exp: switch to main thread
Breakpoint 2, thread_function (arg=0x0) at ...src/gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.c:34
34 NOP; /* set breakpoint here */
FAIL: gdb.threads/step-bg-decr-pc-switch-thread.exp: no output while stepping
gdb/ChangeLog:
2015-02-11 Pedro Alves <pedro@codesourcery.com>
* infrun.c (adjust_pc_after_break): Don't adjust the PC just
because the event thread is not the current thread.
gdb/testsuite/ChangeLog:
2015-02-11 Pedro Alves <pedro@codesourcery.com>
* gdb.threads/step-bg-decr-pc-switch-thread.c: New file.
* gdb.threads/step-bg-decr-pc-switch-thread.exp: New file.
2015-02-11 09:45:41 +00:00
|
|
|
|
2015-02-11 Pedro Alves <pedro@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* infrun.c (adjust_pc_after_break): Don't adjust the PC just
|
|
|
|
|
because the event thread is not the current thread.
|
|
|
|
|
|
2015-02-11 05:18:59 +00:00
|
|
|
|
2015-02-11 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* gdbtypes.c (internal_type_self_type): If TYPE_SPECIFIC_FIELD hasn't
|
|
|
|
|
been initialized yet, return NULL.
|
|
|
|
|
|
2015-02-11 01:01:37 +00:00
|
|
|
|
2015-02-11 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* symfile.h (new_symfile_objfile): Delete.
|
|
|
|
|
* symfile.c (finish_new_objfile): Renamed from new_symfile_objfile.
|
|
|
|
|
All callers updated.
|
|
|
|
|
|
2015-02-10 23:45:10 +00:00
|
|
|
|
2015-02-11 Patrick Palka <patrick@parcs.ath.cx>
|
|
|
|
|
|
|
|
|
|
* tui/tui-io.c (tui_handle_resize_during_io): Call
|
|
|
|
|
tui_update_gdb_sizes() after resizing the screen.
|
|
|
|
|
* tui/tui.c (tui_enable): Resize the terminal before
|
|
|
|
|
calling tui_update_gdb_sizes().
|
|
|
|
|
|
2015-02-10 23:44:56 +00:00
|
|
|
|
2015-02-11 Patrick Palka <patrick@parcs.ath.cx>
|
|
|
|
|
|
|
|
|
|
* tui/tui-io.c (tui_getc): Move cursor to the end of the command
|
|
|
|
|
line before printing a newline.
|
|
|
|
|
|
2015-02-10 23:45:31 +00:00
|
|
|
|
2015-02-11 Mark Wielaard <mjw@redhat.com>
|
|
|
|
|
|
|
|
|
|
* utils.c (producer_is_gcc): Return true or false.
|
|
|
|
|
|
2015-02-10 23:44:56 +00:00
|
|
|
|
2015-02-10 Mark Wielaard <mjw@redhat.com>
|
2015-02-04 17:14:33 +00:00
|
|
|
|
|
|
|
|
|
* utils.h (producer_is_gcc): Change return type to bool. Add major
|
|
|
|
|
argument.
|
|
|
|
|
* utils.c (producer_is_gcc): Likewise.
|
|
|
|
|
(producer_is_gcc_ge_4): Adjust producer_is_gcc call.
|
|
|
|
|
* dwarf2read.c (check_producer): Likewise.
|
|
|
|
|
|
2015-02-10 19:13:31 +00:00
|
|
|
|
2015-02-10 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* infrun.c (displaced_step_fixup): Switch to the event thread
|
|
|
|
|
before calling gdbarch_displaced_step_fixup.
|
|
|
|
|
|
2015-02-10 18:29:36 +00:00
|
|
|
|
2015-02-10 Antoine Tremblay <antoine.tremblay@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Write After Approval): Add Antoine Tremblay.
|
|
|
|
|
|
2015-02-10 15:46:12 +00:00
|
|
|
|
2015-02-10 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* ada-varobj.c (ada_name_of_child): Constify parent.
|
|
|
|
|
(ada_path_expr_of_child): Same.
|
|
|
|
|
(ada_value_of_child): Same.
|
|
|
|
|
(ada_type_of_child): Same.
|
|
|
|
|
* c-varobj.c (c_is_path_expr_parent): Same.
|
|
|
|
|
(c_describe_child): Same.
|
|
|
|
|
(c_name_of_child): Same.
|
|
|
|
|
(c_value_of_child): Same.
|
|
|
|
|
(c_type_of_child): Same.
|
|
|
|
|
(cplus_number_of_children): Same.
|
|
|
|
|
(cplus_describe_child): Constify var.
|
|
|
|
|
(cplus_name_of_child): Constify parent.
|
|
|
|
|
(cplus_value_of_child): Same.
|
|
|
|
|
(cplus_type_of_child): Same.
|
|
|
|
|
* jv-varobj.c (java_name_of_child): Same.
|
|
|
|
|
(java_value_of_child): Same.
|
|
|
|
|
(java_type_of_child): Same.
|
|
|
|
|
* varobj.c (value_of_child): Same.
|
|
|
|
|
(varobj_default_is_path_expr_parent): Constify var, parent and return
|
|
|
|
|
value.
|
|
|
|
|
(varobj_get_path_expr): Constify var, modify path_expr through
|
|
|
|
|
mutable_var.
|
|
|
|
|
(install_new_value): Constify parent.
|
|
|
|
|
(value_of_child): Constify parent.
|
|
|
|
|
* varobj.h (struct varobj): Constify parent.
|
|
|
|
|
(struct lang_varobj_ops): Constify name_of_child, value_of_child and
|
|
|
|
|
type_of_child.
|
|
|
|
|
(varobj_get_path_expr): Constify var.
|
|
|
|
|
(varobj_get_path_expr_parent): Constify var and return value.
|
|
|
|
|
|
2015-02-10 11:46:11 +00:00
|
|
|
|
2015-02-10 Luis Machado <lgustavo@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* arm-tdep.c (arm_prologue_unwind_stop_reason): New function.
|
|
|
|
|
(arm_prologue_this_id): Move PC and SP limit checks to
|
|
|
|
|
arm_prologue_unwind_stop_reason.
|
|
|
|
|
(arm_prologue_unwind) <stop_reason> : Set to
|
|
|
|
|
arm_prologue_unwind_stop_reason.
|
|
|
|
|
|
2015-02-09 22:14:38 +00:00
|
|
|
|
2015-02-09 Mark Wielaard <mjw@redhat.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2read.c (set_cu_language): Recognize DW_LANG_Fortran03 and
|
|
|
|
|
DW_LANG_Fortran08 as language_fortran.
|
|
|
|
|
|
2015-02-09 23:58:12 +00:00
|
|
|
|
2015-02-09 Sergio Durigan Junior <sergiodj@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR remote/17946
|
|
|
|
|
* gdb/remote.c (remote_parse_stop_reply): Fix wrong comparison
|
|
|
|
|
of pointer against char.
|
|
|
|
|
|
2015-02-09 13:58:25 +00:00
|
|
|
|
2015-02-09 Mark Wielaard <mjw@redhat.com>
|
|
|
|
|
|
|
|
|
|
* c-typeprint.c (cp_type_print_method_args): Handle '_Atomic'.
|
|
|
|
|
(c_type_print_modifier): Likewise.
|
|
|
|
|
* dwarf2read.c (read_tag_atomic_type): New function.
|
|
|
|
|
(read_type_die_1): Handle DW_TAG_atomic_type.
|
|
|
|
|
* gdbtypes.c (make_atomic_type): New function.
|
|
|
|
|
(recursive_dump_type): Handle TYPE_ATOMIC.
|
|
|
|
|
* gdbtypes.h (enum type_flag_values): Renumber.
|
|
|
|
|
(enum type_instance_flag_value): Add TYPE_INSTANCE_FLAG_ATOMIC.
|
|
|
|
|
(TYPE_ATOMIC): New macro.
|
|
|
|
|
(make_atomic_type): Declare.
|
|
|
|
|
|
record-btrace: indicate gaps
Indicate gaps in the trace due to decode errors. Internally, a gap is
represented as a btrace function segment without instructions and with a
non-zero format-specific error code.
Show the gap when traversing the instruction or function call history.
Also indicate gaps in "info record".
It looks like this:
(gdb) info record
Active record target: record-btrace
Recording format: Branch Trace Store.
Buffer size: 64KB.
Recorded 32 instructions in 5 functions (1 gaps) for thread 1 (process 7182).
(gdb) record function-call-history /cli
1 fib inst 1,9 at src/fib.c:9,14
2 fib inst 10,20 at src/fib.c:6,14
3 [decode error (1): instruction overflow]
4 fib inst 21,28 at src/fib.c:11,14
5 fib inst 29,33 at src/fib.c:6,9
(gdb) record instruction-history 20,22
20 0x000000000040062f <fib+47>: sub $0x1,%rax
[decode error (1): instruction overflow]
21 0x0000000000400613 <fib+19>: add $0x1,%rax
22 0x0000000000400617 <fib+23>: mov %rax,0x200a3a(%rip)
(gdb)
Gaps are ignored during reverse execution and replay.
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
* btrace.c (ftrace_find_call): Skip gaps.
(ftrace_new_function): Initialize level.
(ftrace_new_call, ftrace_new_tailcall, ftrace_new_return)
(ftrace_new_switch): Update
level computation.
(ftrace_new_gap): New.
(ftrace_update_function): Create new function after gap.
(btrace_compute_ftrace_bts): Create gap on error.
(btrace_stitch_bts): Update parameters. Clear trace if it
becomes empty.
(btrace_stitch_trace): Update parameters. Update callers.
(btrace_clear): Reset the number of gaps.
(btrace_insn_get): Return NULL if the iterator points to a gap.
(btrace_insn_number): Return zero if the iterator points to a gap.
(btrace_insn_end): Allow gaps at the end.
(btrace_insn_next, btrace_insn_prev, btrace_insn_cmp): Handle gaps.
(btrace_find_insn_by_number): Assert that the found iterator does
not point to a gap.
(btrace_call_next, btrace_call_prev): Assert that the last function
is not a gap.
* btrace.h (btrace_bts_error): New.
(btrace_function): Update comment.
(btrace_function) <insn, insn_offset, number>: Update comment.
(btrace_function) <errcode>: New.
(btrace_thread_info) <ngaps>: New.
(btrace_thread_info) <replay>: Update comment.
(btrace_insn_get): Update comment.
* record-btrace.c (btrace_ui_out_decode_error): New.
(record_btrace_info): Print number of gaps.
(btrace_insn_history, btrace_call_history): Call
btrace_ui_out_decode_error for gaps.
(record_btrace_step_thread, record_btrace_start_replaying): Skip gaps.
testsuite/
* gdb.btrace/buffer-size.exp: Update "info record" output.
* gdb.btrace/delta.exp: Update "info record" output.
* gdb.btrace/enable.exp: Update "info record" output.
* gdb.btrace/finish.exp: Update "info record" output.
* gdb.btrace/instruction_history.exp: Update "info record" output.
* gdb.btrace/next.exp: Update "info record" output.
* gdb.btrace/nexti.exp: Update "info record" output.
* gdb.btrace/step.exp: Update "info record" output.
* gdb.btrace/stepi.exp: Update "info record" output.
* gdb.btrace/nohist.exp: Update "info record" output.
2014-01-30 08:51:10 +00:00
|
|
|
|
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* btrace.c (ftrace_find_call): Skip gaps.
|
|
|
|
|
(ftrace_new_function): Initialize level.
|
|
|
|
|
(ftrace_new_call, ftrace_new_tailcall, ftrace_new_return)
|
|
|
|
|
(ftrace_new_switch): Update
|
|
|
|
|
level computation.
|
|
|
|
|
(ftrace_new_gap): New.
|
|
|
|
|
(ftrace_update_function): Create new function after gap.
|
|
|
|
|
(btrace_compute_ftrace_bts): Create gap on error.
|
|
|
|
|
(btrace_stitch_bts): Update parameters. Clear trace if it
|
|
|
|
|
becomes empty.
|
|
|
|
|
(btrace_stitch_trace): Update parameters. Update callers.
|
|
|
|
|
(btrace_clear): Reset the number of gaps.
|
|
|
|
|
(btrace_insn_get): Return NULL if the iterator points to a gap.
|
|
|
|
|
(btrace_insn_number): Return zero if the iterator points to a gap.
|
|
|
|
|
(btrace_insn_end): Allow gaps at the end.
|
|
|
|
|
(btrace_insn_next, btrace_insn_prev, btrace_insn_cmp): Handle gaps.
|
|
|
|
|
(btrace_find_insn_by_number): Assert that the found iterator does
|
|
|
|
|
not point to a gap.
|
|
|
|
|
(btrace_call_next, btrace_call_prev): Assert that the last function
|
|
|
|
|
is not a gap.
|
|
|
|
|
* btrace.h (btrace_bts_error): New.
|
|
|
|
|
(btrace_function): Update comment.
|
|
|
|
|
(btrace_function) <insn, insn_offset, number>: Update comment.
|
|
|
|
|
(btrace_function) <errcode>: New.
|
|
|
|
|
(btrace_thread_info) <ngaps>: New.
|
|
|
|
|
(btrace_thread_info) <replay>: Update comment.
|
|
|
|
|
(btrace_insn_get): Update comment.
|
|
|
|
|
* record-btrace.c (btrace_ui_out_decode_error): New.
|
|
|
|
|
(record_btrace_info): Print number of gaps.
|
|
|
|
|
(btrace_insn_history, btrace_call_history): Call
|
|
|
|
|
btrace_ui_out_decode_error for gaps.
|
|
|
|
|
(record_btrace_step_thread, record_btrace_start_replaying): Skip gaps.
|
|
|
|
|
|
2014-02-14 08:25:40 +00:00
|
|
|
|
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* common/btrace-common.h (btrace_cpu_vendor, btrace_cpu): New.
|
|
|
|
|
* nat/linux-btrace.c: (btrace_this_cpu): New.
|
|
|
|
|
(cpu_supports_bts): Call btrace_this_cpu.
|
|
|
|
|
(intel_supports_bts): Add cpu parameter.
|
|
|
|
|
|
2014-01-29 11:56:09 +00:00
|
|
|
|
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* btrace.h (btrace_insn_class): New.
|
|
|
|
|
(btrace_insn) <size, iclass>: New.
|
|
|
|
|
* btrace.c (ftrace_find_call): Update parameters. Update users.
|
|
|
|
|
Use instruction classification.
|
|
|
|
|
(ftrace_new_return): Update parameters. Update users.
|
|
|
|
|
(ftrace_update_function): Update parameters. Update users. Use
|
|
|
|
|
instruction classification.
|
|
|
|
|
(ftrace_update_insns): Update parameters. Update users.
|
|
|
|
|
(ftrace_classify_insn): New.
|
|
|
|
|
(btrace_compute_ftrace_bts): Fill in new btrace_insn fields. Add
|
|
|
|
|
TRY_CATCH around call to gdb_insn_length.
|
|
|
|
|
|
2014-01-29 10:12:06 +00:00
|
|
|
|
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* btrace.c (btrace_compute_ftrace_bts, btrace_compute_ftrace):
|
|
|
|
|
Update parameters. Update users.
|
|
|
|
|
|
2013-11-28 15:39:12 +00:00
|
|
|
|
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* btrace.c (parse_xml_btrace_conf_bts): Add size.
|
|
|
|
|
(btrace_conf_bts_attributes): New.
|
|
|
|
|
(btrace_conf_children): Add attributes.
|
|
|
|
|
* common/btrace-common.h (btrace_config_bts): New.
|
|
|
|
|
(btrace_config)<bts>: New.
|
|
|
|
|
(btrace_config): Update comment.
|
|
|
|
|
* nat/linux-btrace.c (linux_enable_btrace, linux_enable_bts):
|
|
|
|
|
Use config.
|
|
|
|
|
* features/btrace-conf.dtd: Increment version. Add size
|
|
|
|
|
attribute to bts element.
|
|
|
|
|
* record-btrace.c (set_record_btrace_bts_cmdlist,
|
|
|
|
|
show_record_btrace_bts_cmdlist): New.
|
|
|
|
|
(record_btrace_adjust_size, record_btrace_print_bts_conf,
|
|
|
|
|
record_btrace_print_conf, cmd_set_record_btrace_bts,
|
|
|
|
|
cmd_show_record_btrace_bts): New.
|
|
|
|
|
(record_btrace_info): Call record_btrace_print_conf.
|
|
|
|
|
(_initialize_record_btrace): Add commands.
|
|
|
|
|
* remote.c: Add PACKET_Qbtrace_conf_bts_size enum.
|
|
|
|
|
(remote_protocol_features): Add Qbtrace-conf:bts:size packet.
|
|
|
|
|
(btrace_sync_conf): Synchronize bts size.
|
|
|
|
|
(_initialize_remote): Add Qbtrace-conf:bts:size packet.
|
|
|
|
|
* NEWS: Announce new commands and new packets.
|
|
|
|
|
|
2013-11-28 14:44:13 +00:00
|
|
|
|
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (XMLFILES): Add btrace-conf.dtd.
|
|
|
|
|
* x86-linux-nat.c (x86_linux_enable_btrace): Update parameters.
|
|
|
|
|
(x86_linux_btrace_conf): New.
|
|
|
|
|
(x86_linux_create_target): Initialize to_btrace_conf.
|
|
|
|
|
* nat/linux-btrace.c (linux_enable_btrace): Update parameters.
|
|
|
|
|
Check format. Split into this and ...
|
|
|
|
|
(linux_enable_bts): ... this.
|
|
|
|
|
(linux_btrace_conf): New.
|
|
|
|
|
(perf_event_skip_record): Renamed into ...
|
|
|
|
|
(perf_event_skip_bts_record): ... this. Updated users.
|
|
|
|
|
(linux_disable_btrace): Split into this and ...
|
|
|
|
|
(linux_disable_bts): ... this.
|
|
|
|
|
(linux_read_btrace): Check format.
|
|
|
|
|
* nat/linux-btrace.h (linux_enable_btrace): Update parameters.
|
|
|
|
|
(linux_btrace_conf): New.
|
|
|
|
|
(btrace_target_info)<ptid>: Moved.
|
|
|
|
|
(btrace_target_info)<conf>: New.
|
|
|
|
|
(btrace_target_info): Split into this and ...
|
|
|
|
|
(btrace_tinfo_bts): ... this. Updated users.
|
|
|
|
|
* btrace.c (btrace_enable): Update parameters.
|
|
|
|
|
(btrace_conf, parse_xml_btrace_conf_bts, parse_xml_btrace_conf)
|
|
|
|
|
(btrace_conf_children, btrace_conf_attributes)
|
|
|
|
|
(btrace_conf_elements): New.
|
|
|
|
|
* btrace.h (btrace_enable): Update parameters.
|
|
|
|
|
(btrace_conf, parse_xml_btrace_conf): New.
|
|
|
|
|
* common/btrace-common.h (btrace_config): New.
|
|
|
|
|
* feature/btrace-conf.dtd: New.
|
|
|
|
|
* record-btrace.c (record_btrace_conf): New.
|
|
|
|
|
(record_btrace_cmdlist): New.
|
|
|
|
|
(record_btrace_enable_warn, record_btrace_open): Pass
|
|
|
|
|
&record_btrace_conf.
|
|
|
|
|
(record_btrace_info): Print recording format.
|
|
|
|
|
(cmd_record_btrace_bts_start): New.
|
|
|
|
|
(cmd_record_btrace_start): Call cmd_record_btrace_bts_start.
|
|
|
|
|
(_initialize_record_btrace): Add "record btrace bts" subcommand.
|
|
|
|
|
Add "record bts" alias command.
|
|
|
|
|
* remote.c (remote_state)<btrace_config>: New.
|
|
|
|
|
(remote_btrace_reset, PACKET_qXfer_btrace_conf): New.
|
|
|
|
|
(remote_protocol_features): Add qXfer:btrace-conf:read.
|
|
|
|
|
(remote_open_1): Call remote_btrace_reset.
|
|
|
|
|
(remote_xfer_partial): Handle TARGET_OBJECT_BTRACE_CONF.
|
|
|
|
|
(btrace_target_info)<conf>: New.
|
|
|
|
|
(btrace_sync_conf, btrace_read_config): New.
|
|
|
|
|
(remote_enable_btrace): Update parameters. Call btrace_sync_conf and
|
|
|
|
|
btrace_read_conf.
|
|
|
|
|
(remote_btrace_conf): New.
|
|
|
|
|
(init_remote_ops): Initialize to_btrace_conf.
|
|
|
|
|
(_initialize_remote): Add qXfer:btrace-conf packet.
|
|
|
|
|
* target.c (target_enable_btrace): Update parameters.
|
|
|
|
|
(target_btrace_conf): New.
|
|
|
|
|
* target.h (target_enable_btrace): Update parameters.
|
|
|
|
|
(target_btrace_conf): New.
|
|
|
|
|
(target_object)<TARGET_OBJECT_BTRACE_CONF>: New.
|
|
|
|
|
(target_ops)<to_enable_btrace>: Update parameters and comment.
|
|
|
|
|
(target_ops)<to_btrace_conf>: New.
|
|
|
|
|
* target-delegates: Regenerate.
|
|
|
|
|
* target-debug.h (target_debug_print_const_struct_btrace_config_p)
|
|
|
|
|
(target_debug_print_const_struct_btrace_target_info_p): New.
|
|
|
|
|
* NEWS: Announce new command and new packet.
|
|
|
|
|
|
2014-01-17 13:40:02 +00:00
|
|
|
|
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* nat/linux-btrace.h (perf_event_buffer): New.
|
|
|
|
|
(btrace_target_info) <buffer, size, data_head>: Replace with ...
|
|
|
|
|
<bts>: ... this.
|
|
|
|
|
* nat/linux-btrace.c (perf_event_header, perf_event_mmap_size)
|
|
|
|
|
(perf_event_buffer_size, perf_event_buffer_begin)
|
|
|
|
|
(perf_event_buffer_end, linux_btrace_has_changed): Removed.
|
|
|
|
|
Updated users.
|
|
|
|
|
(perf_event_new_data): New.
|
|
|
|
|
|
2014-01-17 12:29:19 +00:00
|
|
|
|
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* btrace.c (btrace_enable): Pass BTRACE_FORMAT_BTS.
|
|
|
|
|
* record-btrace.c (record_btrace_open): Remove call to
|
|
|
|
|
target_supports_btrace.
|
|
|
|
|
* remote.c (remote_supports_btrace): Update parameters.
|
|
|
|
|
* target.c (target_supports_btrace): Update parameters.
|
|
|
|
|
* target.h (to_supports_btrace, target_supports_btrace): Update
|
|
|
|
|
parameters.
|
|
|
|
|
* target-delegates.c: Regenerate.
|
|
|
|
|
* target-debug.h (target_debug_print_enum_btrace_format): New.
|
|
|
|
|
* nat/linux-btrace.c
|
|
|
|
|
(kernel_supports_btrace): Rename into ...
|
|
|
|
|
(kernel_supports_bts): ... this. Update users. Update warning text.
|
|
|
|
|
(intel_supports_btrace): Rename into ...
|
|
|
|
|
(intel_supports_bts): ... this. Update users.
|
|
|
|
|
(cpu_supports_btrace): Rename into ...
|
|
|
|
|
(cpu_supports_bts): ... this. Update users.
|
|
|
|
|
(linux_supports_btrace): Update parameters. Split into this and ...
|
|
|
|
|
(linux_supports_bts): ... this.
|
|
|
|
|
* nat/linux-btrace.h (linux_supports_btrace): Update parameters.
|
|
|
|
|
|
2013-11-13 14:31:07 +00:00
|
|
|
|
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (SFILES): Add common/btrace-common.c.
|
|
|
|
|
(COMMON_OBS): Add common/btrace-common.o.
|
|
|
|
|
(btrace-common.o): Add build rules.
|
|
|
|
|
* btrace.c (parse_xml_btrace): Update parameters.
|
|
|
|
|
(parse_xml_btrace_block): Set format field.
|
|
|
|
|
(btrace_add_pc, btrace_fetch): Use struct btrace_data.
|
|
|
|
|
(do_btrace_data_cleanup, make_cleanup_btrace_data): New.
|
|
|
|
|
(btrace_compute_ftrace): Split into this and...
|
|
|
|
|
(btrace_compute_ftrace_bts): ...this.
|
|
|
|
|
(btrace_stitch_trace): Split into this and...
|
|
|
|
|
(btrace_stitch_bts): ...this.
|
|
|
|
|
* btrace.h (parse_xml_btrace): Update parameters.
|
|
|
|
|
(make_cleanup_btrace_data): New.
|
|
|
|
|
* common/btrace-common.c: New.
|
|
|
|
|
* common/btrace-common.h: Include common-defs.h.
|
|
|
|
|
(btrace_block_s): Update comment.
|
|
|
|
|
(btrace_format): New.
|
|
|
|
|
(btrace_format_string): New.
|
|
|
|
|
(btrace_data_bts): New.
|
|
|
|
|
(btrace_data): New.
|
|
|
|
|
(btrace_data_init, btrace_data_fini, btrace_data_empty): New.
|
|
|
|
|
* remote.c (remote_read_btrace): Update parameters.
|
|
|
|
|
* target.c (target_read_btrace): Update parameters.
|
|
|
|
|
* target.h (target_read_btrace): Update parameters.
|
|
|
|
|
(target_ops)<to_read_btrace>: Update parameters.
|
|
|
|
|
* x86-linux-nat.c (x86_linux_read_btrace): Update parameters.
|
|
|
|
|
* target-delegates.c: Regenerate.
|
|
|
|
|
* target-debug (target_debug_print_struct_btrace_data_p): New.
|
|
|
|
|
* nat/linux-btrace.c (linux_read_btrace): Split into this and...
|
|
|
|
|
(linux_read_bts): ...this.
|
|
|
|
|
* nat/linux-btrace.h (linux_read_btrace): Update parameters.
|
|
|
|
|
|
2015-02-06 20:17:21 +00:00
|
|
|
|
2015-02-06 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* remote-m32r-sdi.c: Include symfile.h.
|
|
|
|
|
|
2015-02-06 19:32:01 +00:00
|
|
|
|
2015-02-06 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* symtab.h (clear_symtab_users, deduce_language_from_filename): Move
|
|
|
|
|
* symfile.h (clear_symtab_users, deduce_language_from_filename): ...
|
|
|
|
|
to here.
|
|
|
|
|
|
2015-01-26 17:52:25 +00:00
|
|
|
|
2015-02-06 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-thread-db.c (find_new_threads_callback): Add debug output.
|
|
|
|
|
|
2015-02-02 19:57:31 +00:00
|
|
|
|
2015-02-06 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/15678
|
|
|
|
|
* breakpoint.c (map_breakpoint_numbers): Check for empty args string.
|
|
|
|
|
(enable_count_command): Check args for NULL value.
|
|
|
|
|
|
2015-02-06 07:31:05 +00:00
|
|
|
|
2015-02-05 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* guile/scm-frame.c: Fix spelling errors in a comment.
|
|
|
|
|
|
2015-02-04 19:31:17 +00:00
|
|
|
|
2015-02-04 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* python/python-internal.h (Py_hash_t): Define it for Python <3.2.
|
|
|
|
|
* python/py-value.c (valpy_fetch_lazy): Use it. Remove cast to the
|
|
|
|
|
return type.
|
|
|
|
|
|
2015-02-04 18:13:28 +00:00
|
|
|
|
2015-02-04 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (handle_extended_wait): Don't resume LWPs here.
|
|
|
|
|
(wait_lwp): Don't call wait_lwp if linux_handle_extended_wait
|
|
|
|
|
returns true.
|
|
|
|
|
(resume_stopped_resumed_lwps): Don't check whether the thread is
|
|
|
|
|
marked as executing.
|
|
|
|
|
(linux_nat_wait_1): Use resume_stopped_resumed_lwps.
|
|
|
|
|
|
2015-01-15 10:20:45 +00:00
|
|
|
|
2015-02-04 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* regset.h (struct regset): Add flags field.
|
|
|
|
|
(REGSET_VARIABLE_SIZE): New value for a regset's flags field.
|
|
|
|
|
* corelow.c (get_core_register_section): Add warning if the size
|
|
|
|
|
exceeds the requested size and the regset does not have the
|
|
|
|
|
REGSET_VARIABLE_SIZE flag set.
|
|
|
|
|
* alphanbsd-tdep.c (alphanbsd_gregset): Add REGSET_VARIABLE_SIZE
|
|
|
|
|
flag.
|
|
|
|
|
* armbsd-tdep.c (armbsd_gregset): Likewise.
|
|
|
|
|
* hppa-hpux-tdep.c (hppa_hpux_regset): Likewise.
|
|
|
|
|
* hppaobsd-tdep.c (hppaobsd_gregset): Likewise.
|
|
|
|
|
* m68kbsd-tdep.c (m68kbsd_gregset): Likewise.
|
|
|
|
|
* mipsnbsd-tdep.c (mipsnbsd_gregset): Likewise.
|
|
|
|
|
|
2015-01-14 17:53:23 +00:00
|
|
|
|
2015-02-04 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
* amd64-linux-tdep.c (amd64_linux_iterate_over_regset_sections):
|
|
|
|
|
For ".reg-xstate", explicitly specify the requested section size
|
|
|
|
|
via X86_XSTATE_SIZE instead of just 0 on input and
|
|
|
|
|
X86_XSTATE_MAX_SIZE on output.
|
|
|
|
|
* i386-linux-tdep.c (i386_linux_iterate_over_regset_sections):
|
|
|
|
|
Likewise.
|
|
|
|
|
|
2015-01-14 12:01:38 +00:00
|
|
|
|
2015-02-04 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
|
|
|
|
|
|
|
|
|
PR corefiles/17808:
|
|
|
|
|
* gdbarch.sh (iterate_over_regset_sections_cb): Document this
|
|
|
|
|
function type, particularly its SIZE parameter.
|
|
|
|
|
* gdbarch.h: Regenerate.
|
|
|
|
|
* amd64-tdep.c (amd64_supply_fpregset): In gdb_assert, compare
|
|
|
|
|
actual against required size using ">=" instead of "==".
|
|
|
|
|
(amd64_collect_fpregset): Likewise.
|
|
|
|
|
* i386-tdep.c (i386_supply_gregset): Likewise.
|
|
|
|
|
(i386_collect_gregset): Likewise.
|
|
|
|
|
(i386_supply_fpregset): Likewise.
|
|
|
|
|
(i386_collect_fpregset): Likewise.
|
|
|
|
|
* mips-linux-tdep.c (mips_supply_gregset_wrapper): Likewise.
|
|
|
|
|
(mips_fill_gregset_wrapper): Likewise.
|
|
|
|
|
(mips_supply_fpregset_wrapper): Likewise.
|
|
|
|
|
(mips_fill_fpregset_wrapper): Likewise.
|
|
|
|
|
(mips64_supply_gregset_wrapper): Likewise.
|
|
|
|
|
(mips64_fill_gregset_wrapper): Likewise.
|
|
|
|
|
(mips64_supply_fpregset_wrapper): Likewise.
|
|
|
|
|
(mips64_fill_fpregset_wrapper): Likewise.
|
|
|
|
|
* mn10300-linux-tdep.c (am33_supply_gregset_method): Likewise.
|
|
|
|
|
(am33_supply_fpregset_method): Likewise.
|
|
|
|
|
(am33_collect_gregset_method): Likewise.
|
|
|
|
|
(am33_collect_fpregset_method): Likewise.
|
|
|
|
|
|
2015-02-04 11:27:28 +00:00
|
|
|
|
2015-02-04 Doug Evans <dje@google.com>
|
|
|
|
|
Pedro Alves <palves@redhat.com>
|
|
|
|
|
Eli Zaretskii <eliz@gnu.org>
|
|
|
|
|
|
|
|
|
|
PR tui/17810
|
|
|
|
|
* tui/tui-command.c (tui_refresh_cmd_win): New function.
|
|
|
|
|
* tui/tui-command.c (tui_refresh_cmd_win): Declare.
|
|
|
|
|
* tui/tui-file.c: #include tui/tui-command.h.
|
|
|
|
|
(tui_file_fputs): Refresh command window if stream is not gdb_stdout.
|
|
|
|
|
(tui_file_flush): Refresh command window if stream is gdb_stdout.
|
|
|
|
|
* tui/tui-io.c (tui_puts): Remove calls to wrefresh, fflush.
|
|
|
|
|
|
2015-02-04 10:05:58 +00:00
|
|
|
|
2015-02-04 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
Fix build breakage.
|
|
|
|
|
* event-loop.c (gdb_do_one_event): Add default switch case.
|
|
|
|
|
|
2015-02-03 17:17:02 +00:00
|
|
|
|
2015-02-03 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
Filter out inferior gcc option -fpreprocessed.
|
|
|
|
|
* compile/compile.c (filter_args): New function.
|
|
|
|
|
(get_args): Use it.
|
|
|
|
|
|
Simplify event-loop core, remove two-step event processing
Even with the previous patch installed, we'll still see
sigall-reverse.exp occasionally fail. The problem is that the event
loop's event handling processing is done in two steps:
#1 - poll all event sources, and push new event objects to the event
queue, until all event sources are drained.
#2 - go through the event queue, processing each event object at a
time. For each event, call the associated callback, and deletes the
event object from the queue.
and then bad things happen if between #1 and #2 something decides that
events from an event source that has already queued events shouldn't
be processed yet. To do that, we either remove the event source from
the list of event sources, or clear its "have events" flag. However,
if an event for that source has meanwhile already been pushed in the
event queue, #2 will still process it and call the associated
callback...
One way to fix it that I considered was to do something to the event
objects already in the event queue when an event source is no longer
interesting. But then I couldn't find any good reason for the
two-step process in the first place. It's much simpler (and less
code) to call the event source callbacks as we poll the sources and
find events.
Tested on x86-64 Fedora 20, native and gdbserver.
gdb/
2015-02-03 Pedro Alves <palves@redhat.com>
* event-loop.c: Don't declare nor define a queue type for
gdb_event_p.
(event_queue): Delete.
(create_event, create_file_event, gdb_event_xfree)
(initialize_event_loop, process_event): Delete.
(gdb_do_one_event): Return as soon as one event is handled.
(handle_file_event): Change prototype. Used the passed in
file_handler pointer and ready_mask instead of looping over all
file handlers.
(gdb_wait_for_event): Update the poll/select timeouts before
blocking. Run event handlers directly instead of queueing events.
Return as soon as one event is handled.
(struct async_event_handler_data): Delete.
(invoke_async_event_handler): Delete.
(check_async_event_handlers): Change return type to int. Run
event handlers directly instead of queueing events. Return as
soon as one event is handled.
(handle_timer_event): Delete.
(update_wait_timeout): New function, factored out from
poll_timers.
(poll_timers): Reimplement.
* event-loop.h (initialize_event_loop): Delete declaration.
* top.c (gdb_init): Don't call initialize_event_loop.
2015-02-03 15:07:54 +00:00
|
|
|
|
2015-02-03 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-loop.c: Don't declare nor define a queue type for
|
|
|
|
|
gdb_event_p.
|
|
|
|
|
(event_queue): Delete.
|
|
|
|
|
(create_event, create_file_event, gdb_event_xfree)
|
|
|
|
|
(initialize_event_loop, process_event): Delete.
|
|
|
|
|
(gdb_do_one_event): Return as soon as one event is handled.
|
|
|
|
|
(handle_file_event): Change prototype. Used the passed in
|
|
|
|
|
file_handler pointer and ready_mask instead of looping over all
|
|
|
|
|
file handlers.
|
|
|
|
|
(gdb_wait_for_event): Update the poll/select timeouts before
|
|
|
|
|
blocking. Run event handlers directly instead of queueing events.
|
|
|
|
|
Return as soon as one event is handled.
|
|
|
|
|
(struct async_event_handler_data): Delete.
|
|
|
|
|
(invoke_async_event_handler): Delete.
|
|
|
|
|
(check_async_event_handlers): Change return type to int. Run
|
|
|
|
|
event handlers directly instead of queueing events. Return as
|
|
|
|
|
soon as one event is handled.
|
|
|
|
|
(handle_timer_event): Delete.
|
|
|
|
|
(update_wait_timeout): New function, factored out from
|
|
|
|
|
poll_timers.
|
|
|
|
|
(poll_timers): Reimplement.
|
|
|
|
|
* event-loop.h (initialize_event_loop): Delete declaration.
|
|
|
|
|
* top.c (gdb_init): Don't call initialize_event_loop.
|
|
|
|
|
|
When disabling target async, remove all target event sources from the event loop
The sigall-reverse.exp test occasionally fails with something like this:
(gdb) PASS: gdb.reverse/sigall-reverse.exp: send signal TERM
continue
Continuing.
The next instruction is syscall exit_group. It will make the program exit. Do you want to stop the program?([y] or n) FAIL: gdb.reverse/sigall-reverse.exp: continue to signal exit (timeout)
FAIL: gdb.reverse/sigall-reverse.exp: reverse to handler of TERM (timeout)
FAIL: gdb.reverse/sigall-reverse.exp: reverse to gen_TERM (timeout)
This is another event-loop/async related problem exposed by the patch
that made 'query' use gdb_readline_wrapper (588dcc3edbde19f9).
The problem is that even though gdb_readline_wrapper disables
target-async while the secondary prompt is in progress, the record
target's async event source is left marked. So when
gdb_readline_wrapper nests an event loop to process input, it may
happen that that event loop ends up processing a target event while
GDB is not really ready for it. Here's the relevant part of the
backtrace showing the root issue in action:
...
#14 0x000000000061cb48 in fetch_inferior_event (client_data=0x0) at src/gdb/infrun.c:4158
#15 0x0000000000642917 in inferior_event_handler (event_type=INF_REG_EVENT, client_data=0x0) at src/gdb/inf-loop.c:57
#16 0x000000000077ca5c in record_full_async_inferior_event_handler (data=0x0) at src/gdb/record-full.c:791
#17 0x0000000000640fdf in invoke_async_event_handler (data=...) at src/gdb/event-loop.c:1067
#18 0x000000000063fb01 in process_event () at src/gdb/event-loop.c:339
#19 0x000000000063fb2a in gdb_do_one_event () at src/gdb/event-loop.c:360
#20 0x000000000074d607 in gdb_readline_wrapper (prompt=0x3588f40 "The next instruction is syscall exit_group. It will make the program exit. Do you want to stop the program?([y] or n) ") at src/gdb/top.c:842
#21 0x0000000000750bd9 in defaulted_query (ctlstr=0x8c6588 "The next instruction is syscall exit_group. It will make the program exit. Do you want to stop the program?", defchar=121 'y', args=0x7fff70524410) at src/gdb/utils.c:1279
#22 0x0000000000750e4c in yquery (ctlstr=0x8c6588 "The next instruction is syscall exit_group. It will make the program exit. Do you want to stop the program?") at src/gdb/utils.c:1358
#23 0x00000000004b020e in record_linux_system_call (syscall=gdb_sys_exit_group, regcache=0x3529450, tdep=0xd6c840 <amd64_linux_record_tdep>) at src/gdb/linux-record.c:1933
With my all-stop-on-top-of-non-stop series, I'm also seeing
gdb.server/ext-attach.exp fail occasionally due to the same issue.
The first part of the fix is for target_async implementations to make
sure to remove/unmark all target-related event sources from the event
loop.
Tested on x86_64 Fedora 20, native and gdbserver.
gdb/
2015-02-03 Pedro Alves <palves@redhat.com>
* event-loop.c (clear_async_event_handler): New function.
* event-loop.h (clear_async_event_handler): New declaration.
* record-btrace.c (record_btrace_async): New function.
(init_record_btrace_ops): Install record_btrace_async.
* record-full.c (record_full_async): New function.
(record_full_resume): Don't mark the async event source here.
(init_record_full_ops): Install record_full_async.
(record_full_core_resume): Don't mark the async event source here.
(init_record_full_core_ops): Install record_full_async.
* remote.c (remote_async): Mark and clear the async stop reply
queue event-loop token as appropriate.
2015-02-03 15:07:54 +00:00
|
|
|
|
2015-02-03 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* event-loop.c (clear_async_event_handler): New function.
|
|
|
|
|
* event-loop.h (clear_async_event_handler): New declaration.
|
|
|
|
|
* record-btrace.c (record_btrace_async): New function.
|
|
|
|
|
(init_record_btrace_ops): Install record_btrace_async.
|
|
|
|
|
* record-full.c (record_full_async): New function.
|
|
|
|
|
(record_full_resume): Don't mark the async event source here.
|
|
|
|
|
(init_record_full_ops): Install record_full_async.
|
|
|
|
|
(record_full_core_resume): Don't mark the async event source here.
|
|
|
|
|
(init_record_full_core_ops): Install record_full_async.
|
|
|
|
|
* remote.c (remote_async): Mark and clear the async stop reply
|
|
|
|
|
queue event-loop token as appropriate.
|
|
|
|
|
|
2015-02-03 15:07:53 +00:00
|
|
|
|
2015-02-03 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (linux_child_follow_fork, linux_nat_wait_1): Use
|
|
|
|
|
target_is_async_p instead of target_can_async.
|
|
|
|
|
(linux_nat_wait): Use target_is_async_p instead of
|
|
|
|
|
target_can_async. Don't enable async here.
|
|
|
|
|
* remote.c (interrupt_query, remote_wait, putpkt_binary): Use
|
|
|
|
|
target_is_async_p instead of target_can_async.
|
|
|
|
|
|
2015-02-02 18:17:08 +00:00
|
|
|
|
2015-02-02 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* varobj.h (lang_varobj_ops): Mention which return values need
|
|
|
|
|
to be freed.
|
|
|
|
|
|
2015-02-02 03:54:02 +00:00
|
|
|
|
2015-02-02 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2loc.c (dwarf2_evaluate_property): Add i18n marker.
|
|
|
|
|
|
2015-02-02 03:28:12 +00:00
|
|
|
|
2015-02-02 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/17856:
|
|
|
|
|
* ada-lang.c (ada_lookup_symbol_list_worker): Do not re-cache
|
|
|
|
|
results found in the cache.
|
|
|
|
|
|
2015-02-02 03:20:58 +00:00
|
|
|
|
2015-02-02 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/17854:
|
|
|
|
|
* ada-lang.c (ada_get_symbol_cache): Set pspace_data->sym_cache
|
|
|
|
|
when allocating a new one.
|
|
|
|
|
|
2015-02-01 18:59:27 +00:00
|
|
|
|
2015-02-01 Tom Tromey <tom@tromey.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS: Remove myself.
|
|
|
|
|
|
Move vptr_{fieldno,basetype} out of main_type, and update everything accordingly.
Every type has to pay the price in memory usage for their presence.
The proper place for them is in the type_specific field which exists
for this purpose.
gdb/ChangeLog:
* dwarf2read.c (process_structure_scope): Update setting of
TYPE_VPTR_BASETYPE, TYPE_VPTR_FIELDNO.
* gdbtypes.c (internal_type_vptr_fieldno): New function.
(set_type_vptr_fieldno): New function.
(internal_type_vptr_basetype): New function.
(set_type_vptr_basetype): New function.
(get_vptr_fieldno): Update setting of TYPE_VPTR_FIELDNO,
TYPE_VPTR_BASETYPE.
(allocate_cplus_struct_type): Initialize vptr_fieldno.
(recursive_dump_type): Printing of vptr_fieldno, vptr_basetype ...
(print_cplus_stuff): ... moved here.
(copy_type_recursive): Don't copy TYPE_VPTR_BASETYPE.
* gdbtypes.h (struct main_type): Members vptr_fieldno, vptr_basetype
moved to ...
(struct cplus_struct_type): ... here. All uses updated.
(TYPE_VPTR_FIELDNO, TYPE_VPTR_BASETYPE): Rewrite.
(internal_type_vptr_fieldno, set_type_vptr_fieldno): Declare.
(internal_type_vptr_basetype, set_type_vptr_basetype): Declare.
* stabsread.c (read_tilde_fields): Update setting of
TYPE_VPTR_FIELDNO, TYPE_VPTR_BASETYPE.
gdb/testsuite/ChangeLog:
* gdb.base/maint.exp <maint print type argc>: Update expected output.
2015-02-01 05:40:57 +00:00
|
|
|
|
2015-01-31 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2read.c (process_structure_scope): Update setting of
|
|
|
|
|
TYPE_VPTR_BASETYPE, TYPE_VPTR_FIELDNO.
|
|
|
|
|
* gdbtypes.c (internal_type_vptr_fieldno): New function.
|
|
|
|
|
(set_type_vptr_fieldno): New function.
|
|
|
|
|
(internal_type_vptr_basetype): New function.
|
|
|
|
|
(set_type_vptr_basetype): New function.
|
|
|
|
|
(get_vptr_fieldno): Update setting of TYPE_VPTR_FIELDNO,
|
|
|
|
|
TYPE_VPTR_BASETYPE.
|
|
|
|
|
(allocate_cplus_struct_type): Initialize vptr_fieldno.
|
|
|
|
|
(recursive_dump_type): Printing of vptr_fieldno, vptr_basetype ...
|
|
|
|
|
(print_cplus_stuff): ... moved here.
|
|
|
|
|
(copy_type_recursive): Don't copy TYPE_VPTR_BASETYPE.
|
|
|
|
|
* gdbtypes.h (struct main_type): Members vptr_fieldno, vptr_basetype
|
|
|
|
|
moved to ...
|
|
|
|
|
(struct cplus_struct_type): ... here. All uses updated.
|
|
|
|
|
(TYPE_VPTR_FIELDNO, TYPE_VPTR_BASETYPE): Rewrite.
|
|
|
|
|
(internal_type_vptr_fieldno, set_type_vptr_fieldno): Declare.
|
|
|
|
|
(internal_type_vptr_basetype, set_type_vptr_basetype): Declare.
|
|
|
|
|
* stabsread.c (read_tilde_fields): Update setting of
|
|
|
|
|
TYPE_VPTR_FIELDNO, TYPE_VPTR_BASETYPE.
|
|
|
|
|
|
Move TYPE_SELF_TYPE into new field type_specific.
This patch moves TYPE_SELF_TYPE into new field type_specific.self_type
for MEMBERPTR,METHODPTR types, and into type_specific.func_stuff
for METHODs, and then updates everything to use that.
TYPE_CODE_METHOD could share some things with TYPE_CODE_FUNC
(e.g. TYPE_NO_RETURN) and it seemed simplest to keep them together.
Moving TYPE_SELF_TYPE into type_specific.func_stuff for TYPE_CODE_METHOD
is also nice because when we allocate space for function types we assume
they're TYPE_CODE_FUNCs. If TYPE_CODE_METHODs don't need or use that
space then that space would be wasted, and cleaning that up would involve
more invasive changes.
In order to catch errant uses I've added accessor functions
that do some checking.
One can no longer assign to TYPE_SELF_TYPE like this:
TYPE_SELF_TYPE (foo) = bar;
One instead has to do:
set_type_self_type (foo, bar);
But I've left reading of the type to the macro:
bar = TYPE_SELF_TYPE (foo);
In order to discourage bypassing the TYPE_SELF_TYPE macro
I've named the underlying function that implements it
internal_type_self_type.
While testing this I found the stabs reader leaving methods
as TYPE_CODE_FUNCs, hitting my newly added asserts.
Since the dwarf reader smashes functions to methods (via
smash_to_method) I've done a similar thing for stabs.
gdb/ChangeLog:
* cp-valprint.c (cp_find_class_member): Rename parameter domain_p
to self_p.
(cp_print_class_member): Rename local domain to self_type.
* dwarf2read.c (quirk_gcc_member_function_pointer): Rename local
domain_type to self_type.
(set_die_type) <need_gnat_info>: Handle
TYPE_CODE_METHODPTR, TYPE_CODE_MEMBERPTR, TYPE_CODE_METHOD.
* gdb-gdb.py (StructMainTypePrettyPrinter): Handle
TYPE_SPECIFIC_SELF_TYPE.
* gdbtypes.c (internal_type_self_type): New function.
(set_type_self_type): New function.
(smash_to_memberptr_type): Rename parameter domain to self_type.
Update setting of TYPE_SELF_TYPE.
(smash_to_methodptr_type): Update setting of TYPE_SELF_TYPE.
(smash_to_method_type): Rename parameter domain to self_type.
Update setting of TYPE_SELF_TYPE.
(check_stub_method): Call smash_to_method_type.
(recursive_dump_type): Handle TYPE_SPECIFIC_SELF_TYPE.
(copy_type_recursive): Ditto.
* gdbtypes.h (enum type_specific_kind): New value
TYPE_SPECIFIC_SELF_TYPE.
(struct main_type) <type_specific>: New member self_type.
(struct cplus_struct_type) <fn_field.type>: Update comment.
(TYPE_SELF_TYPE): Rewrite.
(internal_type_self_type, set_type_self_type): Declare.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Rename local domain to
self_type.
(gnuv3_method_ptr_to_value): Rename local domain_type to self_type.
* m2-typeprint.c (m2_range): Replace TYPE_SELF_TYPE with
TYPE_TARGET_TYPE.
* stabsread.c (read_member_functions): Mark methods with
TYPE_CODE_METHOD, not TYPE_CODE_FUNC. Update setting of
TYPE_SELF_TYPE.
2015-02-01 05:21:01 +00:00
|
|
|
|
2015-01-31 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* cp-valprint.c (cp_find_class_member): Rename parameter domain_p
|
|
|
|
|
to self_p.
|
|
|
|
|
(cp_print_class_member): Rename local domain to self_type.
|
|
|
|
|
* dwarf2read.c (quirk_gcc_member_function_pointer): Rename local
|
|
|
|
|
domain_type to self_type.
|
|
|
|
|
(set_die_type) <need_gnat_info>: Handle
|
|
|
|
|
TYPE_CODE_METHODPTR, TYPE_CODE_MEMBERPTR, TYPE_CODE_METHOD.
|
|
|
|
|
* gdb-gdb.py (StructMainTypePrettyPrinter): Handle
|
|
|
|
|
TYPE_SPECIFIC_SELF_TYPE.
|
|
|
|
|
* gdbtypes.c (internal_type_self_type): New function.
|
|
|
|
|
(set_type_self_type): New function.
|
|
|
|
|
(smash_to_memberptr_type): Rename parameter domain to self_type.
|
|
|
|
|
Update setting of TYPE_SELF_TYPE.
|
|
|
|
|
(smash_to_methodptr_type): Update setting of TYPE_SELF_TYPE.
|
|
|
|
|
(smash_to_method_type): Rename parameter domain to self_type.
|
|
|
|
|
Update setting of TYPE_SELF_TYPE.
|
|
|
|
|
(check_stub_method): Call smash_to_method_type.
|
|
|
|
|
(recursive_dump_type): Handle TYPE_SPECIFIC_SELF_TYPE.
|
|
|
|
|
(copy_type_recursive): Ditto.
|
|
|
|
|
* gdbtypes.h (enum type_specific_kind): New value
|
|
|
|
|
TYPE_SPECIFIC_SELF_TYPE.
|
|
|
|
|
(struct main_type) <type_specific>: New member self_type.
|
|
|
|
|
(struct cplus_struct_type) <fn_field.type>: Update comment.
|
|
|
|
|
(TYPE_SELF_TYPE): Rewrite.
|
|
|
|
|
(internal_type_self_type, set_type_self_type): Declare.
|
|
|
|
|
* gnu-v3-abi.c (gnuv3_print_method_ptr): Rename local domain to
|
|
|
|
|
self_type.
|
|
|
|
|
(gnuv3_method_ptr_to_value): Rename local domain_type to self_type.
|
|
|
|
|
* m2-typeprint.c (m2_range): Replace TYPE_SELF_TYPE with
|
|
|
|
|
TYPE_TARGET_TYPE.
|
|
|
|
|
* stabsread.c (read_member_functions): Mark methods with
|
|
|
|
|
TYPE_CODE_METHOD, not TYPE_CODE_FUNC. Update setting of
|
|
|
|
|
TYPE_SELF_TYPE.
|
|
|
|
|
|
2015-02-01 05:17:05 +00:00
|
|
|
|
2015-01-31 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* gdbtypes.h (TYPE_SELF_TYPE): Renamed from TYPE_DOMAIN_TYPE.
|
|
|
|
|
All uses updated.
|
|
|
|
|
|
2015-02-01 05:14:17 +00:00
|
|
|
|
2015-01-31 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* gnu-v3-abi.c (gnuv3_dynamic_class): Assert only passed structs
|
|
|
|
|
or unions. Return zero if union.
|
|
|
|
|
(gnuv3_get_vtable): Call check_typedef. Assert only passed structs.
|
|
|
|
|
(gnuv3_rtti_type): Pass already-check_typedef'd value to
|
|
|
|
|
gnuv3_get_vtable.
|
|
|
|
|
(compute_vtable_size): Assert only passed structs.
|
|
|
|
|
(gnuv3_print_vtable): Don't call gnuv3_get_vtable for non-structs.
|
|
|
|
|
|
2015-02-01 05:13:02 +00:00
|
|
|
|
2015-01-31 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* gdbtypes.c (copy_type_recursive): Handle all TYPE_SPECIFIC_FIELD
|
|
|
|
|
kinds.
|
|
|
|
|
|
2015-01-31 23:24:26 +00:00
|
|
|
|
2015-01-31 Gary Benson <gbenson@redhat.com>
|
|
|
|
|
Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
PR cli/9007
|
|
|
|
|
PR cli/11920
|
|
|
|
|
PR cli/15548
|
|
|
|
|
* cli/cli-cmds.c (complete_command): Notify user if max-completions
|
|
|
|
|
reached.
|
|
|
|
|
* common/common-exceptions.h (enum errors)
|
|
|
|
|
<MAX_COMPLETIONS_REACHED_ERROR>: New value.
|
|
|
|
|
* completer.h (get_max_completions_reached_message): New declaration.
|
|
|
|
|
(max_completions): Likewise.
|
|
|
|
|
(completion_tracker_t): New typedef.
|
|
|
|
|
(new_completion_tracker): New declaration.
|
|
|
|
|
(make_cleanup_free_completion_tracker): Likewise.
|
|
|
|
|
(maybe_add_completion_enum): New enum.
|
|
|
|
|
(maybe_add_completion): New declaration.
|
|
|
|
|
(throw_max_completions_reached_error): Likewise.
|
|
|
|
|
* completer.c (max_completions): New global variable.
|
|
|
|
|
(new_completion_tracker): New function.
|
|
|
|
|
(free_completion_tracker): Likewise.
|
|
|
|
|
(make_cleanup_free_completion_tracker): Likewise.
|
|
|
|
|
(maybe_add_completions): Likewise.
|
|
|
|
|
(throw_max_completions_reached_error): Likewise.
|
|
|
|
|
(complete_line): Remove duplicates and limit result to max_completions
|
|
|
|
|
entries.
|
|
|
|
|
(get_max_completions_reached_message): New function.
|
|
|
|
|
(gdb_display_match_list): Handle max_completions.
|
|
|
|
|
(_initialize_completer): New declaration and function.
|
|
|
|
|
* symtab.c: Include completer.h.
|
|
|
|
|
(completion_tracker): New static variable.
|
|
|
|
|
(completion_list_add_name): Call maybe_add_completion.
|
|
|
|
|
(default_make_symbol_completion_list_break_on_1): Renamed from
|
|
|
|
|
default_make_symbol_completion_list_break_on. Maintain
|
|
|
|
|
completion_tracker across calls to completion_list_add_name.
|
|
|
|
|
(default_make_symbol_completion_list_break_on): New function.
|
|
|
|
|
* top.c (init_main): Set rl_completion_display_matches_hook.
|
|
|
|
|
* tui/tui-io.c: Include completer.h.
|
|
|
|
|
(tui_old_rl_display_matches_hook): New static global.
|
|
|
|
|
(tui_rl_display_match_list): Notify user if max-completions reached.
|
|
|
|
|
(tui_setup_io): Save/restore rl_completion_display_matches_hook.
|
|
|
|
|
* NEWS (New Options): Mention set/show max-completions.
|
|
|
|
|
|
2015-01-31 22:48:29 +00:00
|
|
|
|
2015-01-31 Gary Benson <gbenson@redhat.com>
|
|
|
|
|
|
|
|
|
|
* symtab.c (struct add_name_data) <code>: New field.
|
|
|
|
|
Updated comments.
|
|
|
|
|
(add_symtab_completions): New function.
|
|
|
|
|
(symtab_expansion_callback): Likewise.
|
|
|
|
|
(default_make_symbol_completion_list_break_on): Set datum.code.
|
|
|
|
|
Move minimal symbol scan before calling expand_symtabs_matching.
|
|
|
|
|
Scan known primary symtabs for externs and statics before calling
|
|
|
|
|
expand_symtabs_matching. Pass symtab_expansion_callback as
|
|
|
|
|
expansion_notify argument to expand_symtabs_matching. Do not scan
|
|
|
|
|
primary symtabs for externs and statics after calling
|
|
|
|
|
expand_symtabs_matching.
|
|
|
|
|
|
2015-01-31 22:45:26 +00:00
|
|
|
|
2015-01-31 Gary Benson <gbenson@redhat.com>
|
|
|
|
|
|
|
|
|
|
* symfile.h (expand_symtabs_exp_notify_ftype): New typedef.
|
|
|
|
|
(struct quick_symbol_functions) <expand_symtabs_matching>:
|
|
|
|
|
New argument expansion_notify. All uses updated.
|
|
|
|
|
(expand_symtabs_matching): New argument expansion_notify.
|
|
|
|
|
All uses updated.
|
|
|
|
|
* symfile-debug.c (debug_qf_expand_symtabs_matching):
|
|
|
|
|
Also print expansion notify.
|
|
|
|
|
* symtab.c (expand_symtabs_matching_via_partial): Call
|
|
|
|
|
expansion_notify whenever a partial symbol table is expanded.
|
|
|
|
|
* dwarf2read.c (dw2_expand_symtabs_matching): Call
|
|
|
|
|
expansion_notify whenever a symbol table is instantiated.
|
|
|
|
|
|
Unify CLI/TUI interface to readline tab completion.
This copies a lot of code from readline, but this is temporary.
Readline currently doesn't export what we need.
The plan is to have something that has been working for awhile,
and then we'll have a complete story to present to the readline
maintainers.
gdb/ChangeLog:
* cli-out.c: #include completer.h, readline/readline.h.
(cli_mld_crlf, cli_mld_putch, cli_mld_puts): New functions.
(cli_mld_flush, cld_mld_erase_entire_line): Ditto.
(cli_mld_beep, cli_mld_read_key, cli_display_match_list): Ditto.
* cli-out.h (cli_display_match_list): Declare.
* completer.c (MB_INVALIDCH, MB_NULLWCH): New macros.
(ELLIPSIS_LEN): Ditto.
(gdb_get_y_or_n, gdb_display_match_list_pager): New functions.
(gdb_path_isdir, gdb_printable_part, gdb_fnwidth): Ditto.
(gdb_fnprint, gdb_print_filename): Ditto.
(gdb_complete_get_screenwidth, gdb_display_match_list_1): Ditto.
(gdb_display_match_list): Ditto.
* completer.h (mld_crlf_ftype, mld_putch_ftype): New typedefs.
(mld_puts_ftype, mld_flush_ftype, mld_erase_entire_line_ftype): Ditto.
(mld_beep_ftype, mld_read_key_ftype): Ditto.
(match_list_displayer): New struct.
(gdb_display_match_list): Declare.
* top.c (init_main): Set rl_completion_display_matches_hook.
* tui/tui-io.c: #include completer.h.
(printable_part, PUTX, print_filename, get_y_or_n): Delete.
(tui_mld_crlf, tui_mld_putch, tui_mld_puts): New functions.
(tui_mld_flush, tui_mld_erase_entire_line, tui_mld_beep): Ditto.
(tui_mld_getc, tui_mld_read_key): Ditto.
(tui_rl_display_match_list): Rewrite.
(tui_handle_resize_during_io): New arg for_completion. All callers
updated.
2015-01-31 22:11:54 +00:00
|
|
|
|
2015-01-31 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* cli-out.c: #include completer.h, readline/readline.h.
|
|
|
|
|
(cli_mld_crlf, cli_mld_putch, cli_mld_puts): New functions.
|
|
|
|
|
(cli_mld_flush, cld_mld_erase_entire_line): Ditto.
|
|
|
|
|
(cli_mld_beep, cli_mld_read_key, cli_display_match_list): Ditto.
|
|
|
|
|
* cli-out.h (cli_display_match_list): Declare.
|
|
|
|
|
* completer.c (MB_INVALIDCH, MB_NULLWCH): New macros.
|
|
|
|
|
(ELLIPSIS_LEN): Ditto.
|
|
|
|
|
(gdb_get_y_or_n, gdb_display_match_list_pager): New functions.
|
|
|
|
|
(gdb_path_isdir, gdb_printable_part, gdb_fnwidth): Ditto.
|
|
|
|
|
(gdb_fnprint, gdb_print_filename): Ditto.
|
|
|
|
|
(gdb_complete_get_screenwidth, gdb_display_match_list_1): Ditto.
|
|
|
|
|
(gdb_display_match_list): Ditto.
|
|
|
|
|
* completer.h (mld_crlf_ftype, mld_putch_ftype): New typedefs.
|
|
|
|
|
(mld_puts_ftype, mld_flush_ftype, mld_erase_entire_line_ftype): Ditto.
|
|
|
|
|
(mld_beep_ftype, mld_read_key_ftype): Ditto.
|
|
|
|
|
(match_list_displayer): New struct.
|
|
|
|
|
(gdb_display_match_list): Declare.
|
|
|
|
|
* top.c (init_main): Set rl_completion_display_matches_hook.
|
|
|
|
|
* tui/tui-io.c: #include completer.h.
|
|
|
|
|
(printable_part, PUTX, print_filename, get_y_or_n): Delete.
|
|
|
|
|
(tui_mld_crlf, tui_mld_putch, tui_mld_puts): New functions.
|
|
|
|
|
(tui_mld_flush, tui_mld_erase_entire_line, tui_mld_beep): Ditto.
|
|
|
|
|
(tui_mld_getc, tui_mld_read_key): Ditto.
|
|
|
|
|
(tui_rl_display_match_list): Rewrite.
|
|
|
|
|
(tui_handle_resize_during_io): New arg for_completion. All callers
|
|
|
|
|
updated.
|
|
|
|
|
|
Add symbol lookup cache.
gdb/ChangeLog:
Add symbol lookup cache.
* NEWS: Document new options and commands.
* symtab.c (symbol_cache_key): New static global.
(DEFAULT_SYMBOL_CACHE_SIZE, MAX_SYMBOL_CACHE_SIZE): New macros.
(SYMBOL_LOOKUP_FAILED): New macro.
(symbol_cache_slot_state): New enum.
(block_symbol_cache): New struct.
(symbol_cache): New struct.
(new_symbol_cache_size, symbol_cache_size): New static globals.
(hash_symbol_entry, eq_symbol_entry): New functions.
(symbol_cache_byte_size, resize_symbol_cache): New functions.
(make_symbol_cache, free_symbol_cache): New functions.
(get_symbol_cache, symbol_cache_cleanup): New function.
(set_symbol_cache_size, set_symbol_cache_size_handler): New functions.
(symbol_cache_lookup, symbol_cache_clear_slot): New function.
(symbol_cache_mark_found, symbol_cache_mark_not_found): New functions.
(symbol_cache_flush, symbol_cache_dump): New functions.
(maintenance_print_symbol_cache): New function.
(maintenance_flush_symbol_cache): New function.
(symbol_cache_stats): New function.
(maintenance_print_symbol_cache_statistics): New function.
(symtab_new_objfile_observer): New function.
(symtab_free_objfile_observer): New function.
(lookup_static_symbol, lookup_global_symbol): Use symbol cache.
(_initialize_symtab): Init symbol_cache_key. New parameter
maint symbol-cache-size. New maint commands print symbol-cache,
print symbol-cache-statistics, flush-symbol-cache.
Install new_objfile, free_objfile observers.
gdb/doc/ChangeLog:
* gdb.texinfo (Symbols): Document new commands
"maint print symbol-cache", "maint print symbol-cache-statistics",
"maint flush-symbol-cache". Document new option
"maint set symbol-cache-size".
2015-01-31 21:29:33 +00:00
|
|
|
|
2015-01-31 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
Add symbol lookup cache.
|
|
|
|
|
* NEWS: Document new options and commands.
|
|
|
|
|
* symtab.c (symbol_cache_key): New static global.
|
|
|
|
|
(DEFAULT_SYMBOL_CACHE_SIZE, MAX_SYMBOL_CACHE_SIZE): New macros.
|
|
|
|
|
(SYMBOL_LOOKUP_FAILED): New macro.
|
|
|
|
|
(symbol_cache_slot_state): New enum.
|
|
|
|
|
(block_symbol_cache): New struct.
|
|
|
|
|
(symbol_cache): New struct.
|
|
|
|
|
(new_symbol_cache_size, symbol_cache_size): New static globals.
|
|
|
|
|
(hash_symbol_entry, eq_symbol_entry): New functions.
|
|
|
|
|
(symbol_cache_byte_size, resize_symbol_cache): New functions.
|
|
|
|
|
(make_symbol_cache, free_symbol_cache): New functions.
|
|
|
|
|
(get_symbol_cache, symbol_cache_cleanup): New function.
|
|
|
|
|
(set_symbol_cache_size, set_symbol_cache_size_handler): New functions.
|
|
|
|
|
(symbol_cache_lookup, symbol_cache_clear_slot): New function.
|
|
|
|
|
(symbol_cache_mark_found, symbol_cache_mark_not_found): New functions.
|
|
|
|
|
(symbol_cache_flush, symbol_cache_dump): New functions.
|
|
|
|
|
(maintenance_print_symbol_cache): New function.
|
|
|
|
|
(maintenance_flush_symbol_cache): New function.
|
|
|
|
|
(symbol_cache_stats): New function.
|
|
|
|
|
(maintenance_print_symbol_cache_statistics): New function.
|
|
|
|
|
(symtab_new_objfile_observer): New function.
|
|
|
|
|
(symtab_free_objfile_observer): New function.
|
|
|
|
|
(lookup_static_symbol, lookup_global_symbol): Use symbol cache.
|
|
|
|
|
(_initialize_symtab): Init symbol_cache_key. New parameter
|
|
|
|
|
maint symbol-cache-size. New maint commands print symbol-cache,
|
|
|
|
|
print symbol-cache-statistics, flush-symbol-cache.
|
|
|
|
|
Install new_objfile, free_objfile observers.
|
|
|
|
|
|
2015-01-31 20:43:02 +00:00
|
|
|
|
2015-01-31 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
PR symtab/17855
|
|
|
|
|
* symfile.c (clear_symtab_users): Move call to breakpoint_re_set
|
|
|
|
|
to end.
|
|
|
|
|
|
2015-01-31 20:01:13 +00:00
|
|
|
|
2015-01-31 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention inlined scripts in .debug_gdb_scripts section.
|
|
|
|
|
* auto-load.c: #include ctype.h.
|
|
|
|
|
(struct auto_load_pspace_info): Replace member loaded_scripts with
|
|
|
|
|
new members loaded_script_files, loaded_script_texts.
|
|
|
|
|
(auto_load_pspace_data_cleanup): Update.
|
|
|
|
|
(init_loaded_scripts_info): Update.
|
|
|
|
|
(get_auto_load_pspace_data_for_loading): Update.
|
|
|
|
|
(maybe_add_script_file): Renamed from maybe_add_script. All callers
|
|
|
|
|
updated.
|
|
|
|
|
(maybe_add_script_text): New function.
|
|
|
|
|
(clear_section_scripts): Update.
|
|
|
|
|
(source_script_file, execute_script_contents): New functions.
|
|
|
|
|
(source_section_scripts): Add support for
|
|
|
|
|
SECTION_SCRIPT_ID_PYTHON_TEXT, SECTION_SCRIPT_ID_GUILE_TEXT.
|
|
|
|
|
(print_scripts): New function.
|
|
|
|
|
(auto_load_info_scripts): Also print inlined scripts.
|
|
|
|
|
(maybe_print_unsupported_script_warning): Renamed from
|
|
|
|
|
unsupported_script_warning_print. All callers updated.
|
|
|
|
|
(maybe_print_script_not_found_warning): Renamed from
|
|
|
|
|
script_not_found_warning_print. All callers updated.
|
|
|
|
|
* extension-priv.h (struct extension_language_script_ops): New member
|
|
|
|
|
objfile_script_executor.
|
|
|
|
|
* extension.c (ext_lang_objfile_script_executor): New function.
|
|
|
|
|
* extension.h (objfile_script_executor_func): New typedef.
|
|
|
|
|
(ext_lang_objfile_script_executor): Declare.
|
|
|
|
|
* guile/guile-internal.h (gdbscm_execute_objfile_script): Declare.
|
|
|
|
|
* guile/guile.c (guile_extension_script_ops): Update.
|
|
|
|
|
* guile/scm-objfile.c (gdbscm_execute_objfile_script): New function.
|
|
|
|
|
* python/python.c (python_extension_script_ops): Update.
|
|
|
|
|
(gdbpy_execute_objfile_script): New function.
|
|
|
|
|
|
2015-01-31 08:47:14 +00:00
|
|
|
|
2015-01-31 Eli Zaretskii <eliz@gnu.org>
|
|
|
|
|
|
|
|
|
|
* tui/tui-io.c (tui_expand_tabs): New function.
|
|
|
|
|
(tui_puts, tui_redisplay_readline): Expand TABs into the
|
|
|
|
|
appropriate number of spaces.
|
|
|
|
|
* tui/tui-regs.c: Include tui-io.h.
|
|
|
|
|
(tui_register_format): Call tui_expand_tabs to expand TABs into
|
|
|
|
|
the appropriate number of spaces.
|
|
|
|
|
* tui/tui-io.h: Add prototype for tui_expand_tabs.
|
|
|
|
|
|
2015-01-31 04:49:51 +00:00
|
|
|
|
2015-01-30 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: "info source" command now display producer string if present.
|
|
|
|
|
* source.c (source_info): Print producer string if present.
|
|
|
|
|
|
2015-01-30 20:16:43 +00:00
|
|
|
|
2015-01-30 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* varobj.c (varobj_delete): Fix comment.
|
|
|
|
|
|
2015-01-30 20:14:46 +00:00
|
|
|
|
2015-01-30 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* varobj.c (create_child): Modify comment.
|
|
|
|
|
|
2015-01-30 20:07:15 +00:00
|
|
|
|
2015-01-30 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* ada-varobj.c (ada_number_of_children): Constify struct varobj *
|
|
|
|
|
parameter.
|
|
|
|
|
(ada_name_of_variable): Same.
|
|
|
|
|
(ada_path_expr_of_child): Same.
|
|
|
|
|
(ada_value_of_variable): Same.
|
|
|
|
|
(ada_value_is_changeable_p): Same.
|
|
|
|
|
(ada_value_has_mutated): Same.
|
|
|
|
|
* c-varobj.c (varobj_is_anonymous_child): Same.
|
|
|
|
|
(c_is_path_expr_parent): Same.
|
|
|
|
|
(c_number_of_children): Same.
|
|
|
|
|
(c_name_of_variable): Same.
|
|
|
|
|
(c_path_expr_of_child): Same.
|
|
|
|
|
(get_type): Same.
|
|
|
|
|
(c_value_of_variable): Same.
|
|
|
|
|
(cplus_number_of_children): Same.
|
|
|
|
|
(cplus_name_of_variable): Same.
|
|
|
|
|
(cplus_path_expr_of_child): Same.
|
|
|
|
|
(cplus_value_of_variable): Same.
|
|
|
|
|
* jv-varobj.c (java_number_of_children): Same.
|
|
|
|
|
(java_name_of_variable): Same.
|
|
|
|
|
(java_path_expr_of_child): Same.
|
|
|
|
|
(java_value_of_variable): Same.
|
|
|
|
|
* varobj.c (number_of_children): Same.
|
|
|
|
|
(name_of_variable): Same.
|
|
|
|
|
(is_root_p): Same.
|
|
|
|
|
(varobj_ensure_python_env): Same.
|
|
|
|
|
(varobj_get_objname): Same.
|
|
|
|
|
(varobj_get_expression): Same.
|
|
|
|
|
(varobj_get_display_format): Same.
|
|
|
|
|
(varobj_get_display_hint): Same.
|
|
|
|
|
(varobj_has_more): Same.
|
|
|
|
|
(varobj_get_thread_id): Same.
|
|
|
|
|
(varobj_get_frozen): Same.
|
|
|
|
|
(dynamic_varobj_has_child_method): Same.
|
|
|
|
|
(varobj_get_gdb_type): Same.
|
|
|
|
|
(is_path_expr_parent): Same.
|
|
|
|
|
(varobj_default_is_path_expr_parent): Same.
|
|
|
|
|
(varobj_get_language): Same.
|
|
|
|
|
(varobj_get_attributes): Same.
|
|
|
|
|
(varobj_is_dynamic_p): Same.
|
|
|
|
|
(varobj_get_child_range): Same.
|
|
|
|
|
(varobj_value_has_mutated): Same.
|
|
|
|
|
(varobj_get_value_type): Same.
|
|
|
|
|
(number_of_children): Same.
|
|
|
|
|
(name_of_variable): Same.
|
|
|
|
|
(check_scope): Same.
|
|
|
|
|
(varobj_editable_p): Same.
|
|
|
|
|
(varobj_value_is_changeable_p): Same.
|
|
|
|
|
(varobj_floating_p): Same.
|
|
|
|
|
(varobj_default_value_is_changeable_p): Same.
|
|
|
|
|
|
2015-01-30 19:43:59 +00:00
|
|
|
|
2015-01-30 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* varobj.c (varobj_get_path_expr): Set var->path_expr.
|
|
|
|
|
* c-varobj.c (c_path_expr_of_child): Set local var instead of
|
|
|
|
|
child->path_expr.
|
|
|
|
|
(cplus_path_expr_of_child): Same.
|
|
|
|
|
|
2015-01-30 18:56:56 +00:00
|
|
|
|
2015-01-30 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* mi-cmd-var.c (print_varobj): Free varobj_get_expression
|
|
|
|
|
result.
|
|
|
|
|
(mi_cmd_var_info_expression): Same.
|
|
|
|
|
* varobj.c (varobj_get_expression): Mention in the comment that
|
|
|
|
|
the result must by freed by the caller.
|
|
|
|
|
|
2015-01-30 18:54:50 +00:00
|
|
|
|
2015-01-30 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
* mi/mi-cmd-var.c (mi_cmd_var_info_type): Free result of
|
|
|
|
|
varobj_get_type.
|
|
|
|
|
(varobj_update_one): Same.
|
|
|
|
|
* varobj.c (update_type_if_necessary): Free curr_type_str and
|
|
|
|
|
new_type_str.
|
|
|
|
|
(varobj_get_type): Specify in comment that the result needs to be
|
|
|
|
|
freed by the caller.
|
|
|
|
|
|
2015-01-29 18:26:38 +00:00
|
|
|
|
2015-01-29 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
PR symtab/17890
|
|
|
|
|
* dwarf2read.c (dwarf_decode_line_header): Punt if version > 4.
|
|
|
|
|
|
2015-01-25 10:20:39 +00:00
|
|
|
|
2015-01-25 Mark Wielaard <mjw@redhat.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2read.c (checkproducer): Call producer_is_gcc.
|
|
|
|
|
* utils.c (producer_is_gcc_ge_4): Likewise.
|
|
|
|
|
(producer_is_gcc): New function.
|
|
|
|
|
* utils.h (producer_is_gcc): New declaration.
|
|
|
|
|
|
gdb/DWARF: Support for arrays whose bound is a discriminant.
Consider the following declarations:
type Array_Type is array (Integer range <>) of Integer;
type Record_Type (N : Integer) is record
A : Array_Type (1 .. N);
end record;
R : Record_Type := Get (10);
It defines what Ada programers call a "discriminated record", where
"N" is a component of that record called a "discriminant", and where
"A" is a component defined as an array type whose upper bound is
equal to the value of the discriminant.
So far, we rely on a number of fairly complex GNAT-specific encodings
to handle this situation. This patch is to enhance GDB to be able to
print this record in the case where the compiler has been modified
to replace those encodings by pure DWARF constructs.
In particular, the debugging information generated for the record above
looks like the following. "R" is a record..
.uleb128 0x10 # (DIE (0x13e) DW_TAG_structure_type)
.long .LASF17 # DW_AT_name: "foo__record_type"
... whose is is of course dynamic (not our concern here)...
.uleb128 0xd # DW_AT_byte_size
.byte 0x97 # DW_OP_push_object_address
.byte 0x94 # DW_OP_deref_size
.byte 0x4
.byte 0x99 # DW_OP_call4
.long 0x19b
.byte 0x23 # DW_OP_plus_uconst
.uleb128 0x7
.byte 0x9 # DW_OP_const1s
.byte 0xfc
.byte 0x1a # DW_OP_and
.byte 0x1 # DW_AT_decl_file (foo.adb)
.byte 0x6 # DW_AT_decl_line
... and then has 2 members, fist "n" (our discriminant);
.uleb128 0x11 # (DIE (0x153) DW_TAG_member)
.ascii "n\0" # DW_AT_name
.byte 0x1 # DW_AT_decl_file (foo.adb)
.byte 0x6 # DW_AT_decl_line
.long 0x194 # DW_AT_type
.byte 0 # DW_AT_data_member_location
... and "A"...
.uleb128 0x11 # (DIE (0x181) DW_TAG_member)
.ascii "a\0" # DW_AT_name
.long 0x15d # DW_AT_type
.byte 0x4 # DW_AT_data_member_location
... which is an array ...
.uleb128 0x12 # (DIE (0x15d) DW_TAG_array_type)
.long .LASF18 # DW_AT_name: "foo__record_type__T4b"
.long 0x194 # DW_AT_type
... whose lower bound is implicitly 1, and the upper bound
a reference to DIE 0x153 = "N":
.uleb128 0x13 # (DIE (0x16a) DW_TAG_subrange_type)
.long 0x174 # DW_AT_type
.long 0x153 # DW_AT_upper_bound
This patch enhanced GDB to understand references to other DIEs
where the DIE's address is at an offset of its enclosing type.
The difficulty was that the address used to resolve the array's
type (R's address + 4 bytes) is different from the address used
as the base to compute N's address (an offset to R's address).
We're solving this issue by using a stack of addresses rather
than a single address when trying to resolve a type. Each address
in the stack corresponds to each containing level. For instance,
if resolving the field of a struct, the stack should contain
the address of the field at the top, and then the address of
the struct. That way, if the field makes a reference to an object
of the struct, we can retrieve the address of that struct, and
properly resolve the dynamic property references that struct.
gdb/ChangeLog:
* gdbtypes.h (struct dynamic_prop): New PROP_ADDR_OFFSET enum
kind.
* gdbtypes.c (resolve_dynamic_type_internal): Replace "addr"
parameter by "addr_stack" parameter.
(resolve_dynamic_range): Replace "addr" parameter by
"stack_addr" parameter. Update function documentation.
Update code accordingly.
(resolve_dynamic_array, resolve_dynamic_union)
(resolve_dynamic_struct, resolve_dynamic_type_internal): Likewise.
(resolve_dynamic_type): Update code, following the changes made
to resolve_dynamic_type_internal's interface.
* dwarf2loc.h (struct property_addr_info): New.
(dwarf2_evaluate_property): Replace "address" parameter
by "addr_stack" parameter. Adjust function documentation.
(struct dwarf2_offset_baton): New.
(struct dwarf2_property_baton): Update documentation of
field "referenced_type" to be more general. New field
"offset_info" in union data field.
* dwarf2loc.c (dwarf2_evaluate_property): Replace "address"
parameter by "addr_stack" parameter. Adjust code accordingly.
Add support for PROP_ADDR_OFFSET properties.
* dwarf2read.c (attr_to_dynamic_prop): Add support for
DW_AT_data_member_location attributes as well. Use case
statements instead of if/else condition.
gdb/testsuite/ChangeLog:
* gdb.ada/disc_arr_bound: New testcase.
Tested on x86_64-linux, no regression.
2015-01-05 10:32:36 +00:00
|
|
|
|
2015-01-29 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* gdbtypes.h (struct dynamic_prop): New PROP_ADDR_OFFSET enum
|
|
|
|
|
kind.
|
|
|
|
|
* gdbtypes.c (resolve_dynamic_type_internal): Replace "addr"
|
|
|
|
|
parameter by "addr_stack" parameter.
|
|
|
|
|
(resolve_dynamic_range): Replace "addr" parameter by
|
|
|
|
|
"stack_addr" parameter. Update function documentation.
|
|
|
|
|
Update code accordingly.
|
|
|
|
|
(resolve_dynamic_array, resolve_dynamic_union)
|
|
|
|
|
(resolve_dynamic_struct, resolve_dynamic_type_internal): Likewise.
|
|
|
|
|
(resolve_dynamic_type): Update code, following the changes made
|
|
|
|
|
to resolve_dynamic_type_internal's interface.
|
|
|
|
|
* dwarf2loc.h (struct property_addr_info): New.
|
|
|
|
|
(dwarf2_evaluate_property): Replace "address" parameter
|
|
|
|
|
by "addr_stack" parameter. Adjust function documentation.
|
|
|
|
|
(struct dwarf2_offset_baton): New.
|
|
|
|
|
(struct dwarf2_property_baton): Update documentation of
|
|
|
|
|
field "referenced_type" to be more general. New field
|
|
|
|
|
"offset_info" in union data field.
|
|
|
|
|
* dwarf2loc.c (dwarf2_evaluate_property): Replace "address"
|
|
|
|
|
parameter by "addr_stack" parameter. Adjust code accordingly.
|
|
|
|
|
Add support for PROP_ADDR_OFFSET properties.
|
|
|
|
|
* dwarf2read.c (attr_to_dynamic_prop): Add support for
|
|
|
|
|
DW_AT_data_member_location attributes as well. Use case
|
|
|
|
|
statements instead of if/else condition.
|
|
|
|
|
|
[Ada/varobj] number of children of null pointer to dynamic array.
This is preparation work to avoid a regression in the Ada/varobj.
An upcoming patch is going to add support for types in DWARF
which have dynamic properties whose value is a reference to another
DIE.
Consider for instance the following declaration:
type Variant_Type (N : Int := 0) is record
F : String(1 .. N) := (others => 'x');
end record;
type Variant_Type_Access is access all Variant_Type;
VTA : Variant_Type_Access := null;
This declares a variable "VTA" which is an access (=pointer)
to a variant record Variant_Type. This record contains two
components, the first being "N" (the discriminant), and the
second being "F", an array whose lower bound is 1, and whose
upper bound depends on the value of "N" (the discriminant).
Of interest to us, here, is that second component ("F"), and
in particular its bounds. The debugging info, and in particular
the info for the array looks like the following...
.uleb128 0x9 # (DIE (0x91) DW_TAG_array_type)
.long .LASF16 # DW_AT_name: "bar__variant_type__T2b"
.long 0xac # DW_AT_GNAT_descriptive_type
.long 0x2cb # DW_AT_type
.long 0xac # DW_AT_sibling
.uleb128 0xa # (DIE (0xa2) DW_TAG_subrange_type)
.long 0xc4 # DW_AT_type
.long 0x87 # DW_AT_upper_bound
.byte 0 # end of children of DIE 0x91
... where the upper bound of the array's subrange type is a reference
to "n"'s DIE (0x87):
.uleb128 0x8 # (DIE (0x87) DW_TAG_member)
.ascii "n\0" # DW_AT_name
[...]
Once the patch to handle this dynamic property gets applied,
this is what happens when creating a varobj for variable "VTA"
(whose value is null), and then trying to list its children:
(gdb)
-var-create vta * vta
^done,name="vta",numchild="2",value="0x0",
type="bar.variant_type_access",has_more="0"
(gdb)
-var-list-children 1 vta
^done,numchild="2",
children=[child={name="vta.n",[...]},
child={name="vta.f",exp="f",
numchild="43877616", <<<<-----
value="[43877616]", <<<<-----
type="array (1 .. n) of character"}],
has_more="0"
It has an odd number of children.
In this case, we cannot really determine the number of children,
since that number depends on the value of a field in a record
for which we do not have a value. Up to now, the value we've been
displaying is zero - meaning we have an empty array.
What happens in this case, is that, because the VTA is a null pointer,
we're not able to resolve the pointer's target type, and therefore
end up asking ada_varobj_get_array_number_of_children to return
the number of elements in that array; for that, it relies blindly
on get_array_bounds, which assumes the type is no longer dynamic,
and therefore the reads the bound without seeing that it's value
is actually a reference rather than a resolved constant.
This patch prevents the issue by explicitly handling the case of
dynamic arrays, and returning zero child in that case.
gdb/ChangeLog:
* ada-varobj.c (ada_varobj_get_array_number_of_children):
Return zero if PARENT_VALUE is NULL and parent_type's
range type is dynamic.
gdb/testsuite/ChangeLog:
* gdb.ada/mi_var_array: New testcase.
Tested on x86_64-linux.
2015-01-14 14:39:24 +00:00
|
|
|
|
2015-01-29 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* ada-varobj.c (ada_varobj_get_array_number_of_children):
|
|
|
|
|
Return zero if PARENT_VALUE is NULL and parent_type's
|
|
|
|
|
range type is dynamic.
|
|
|
|
|
|
gdb/DWARF: dynamic subrange type of dynamic subrange type.
Consider the following code:
type Record_Type (N : Integer) is record
A : Array_Type (1 .. N);
end record;
[...]
R : Record_Type := Get (10);
Trying to print the bounds of the array R.A yielded:
(gdb) p r.a'last
$4 = cannot find reference address for offset property
A slightly different example, but from the same cause:
(gdb) ptype r
type = <ref> record
n: integer;
a: array (cannot find reference address for offset property
Looking at the debugging info, "A" is described as...
.uleb128 0x11 # (DIE (0x181) DW_TAG_member)
.ascii "a\0" # DW_AT_name
.long 0x15d # DW_AT_type
[...]
... which is an array...
.uleb128 0x12 # (DIE (0x15d) DW_TAG_array_type)
.long .LASF18 # DW_AT_name: "foo__record_type__T4b"
.long 0x194 # DW_AT_type
.long 0x174 # DW_AT_sibling
... whose bounds are described as:
.uleb128 0x13 # (DIE (0x16a) DW_TAG_subrange_type)
.long 0x174 # DW_AT_type
.long 0x153 # DW_AT_upper_bound
.byte 0 # end of children of DIE 0x15d
We can see above that the range has an implict lower value of
1, and an upper value which is a reference 0x153="n". All Good.
But looking at the array's subrange subtype, we see...
.uleb128 0x14 # (DIE (0x174) DW_TAG_subrange_type)
.long 0x153 # DW_AT_upper_bound
.long .LASF19 # DW_AT_name: "foo__record_type__T3b"
.long 0x18d # DW_AT_type
... another subrange type whose bounds are exactly described
the same way. So we have a subrange of a subrange, both with
one bound that's dynamic.
What happens in the case above is that GDB's resolution of "R.A"
yields a array whose index type has static bounds. However, the
subtype of the array's index type was left untouched, so, when
taking the subtype of the array's subrange type, we were left
with the unresolved subrange type, triggering the error above.
gdb/ChangeLog:
* gdbtypes.c (is_dynamic_type_internal) <TYPE_CODE_RANGE>: Return
nonzero if the type's subtype is dynamic.
(resolve_dynamic_range): Also resolve the range's subtype.
Tested on x86_64-linux, no regression.
2015-01-05 14:39:02 +00:00
|
|
|
|
2015-01-29 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* gdbtypes.c (is_dynamic_type_internal) <TYPE_CODE_RANGE>: Return
|
|
|
|
|
nonzero if the type's subtype is dynamic.
|
|
|
|
|
(resolve_dynamic_range): Also resolve the range's subtype.
|
|
|
|
|
|
2015-01-29 08:10:12 +00:00
|
|
|
|
2015-01-29 Alexander Klimov <alserkli@inbox.ru> (tiny patch)
|
2015-01-27 17:56:45 +00:00
|
|
|
|
|
2015-01-29 08:10:12 +00:00
|
|
|
|
Pushed by Joel Brobecker <brobecker@adacore.com>.
|
2015-01-27 17:56:45 +00:00
|
|
|
|
* symfile.c (unmap_overlay_command): Initialize sec to NULL.
|
|
|
|
|
|
2015-01-27 18:13:52 +00:00
|
|
|
|
2015-01-27 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* NEWS: Mention gdb.Objfile.username.
|
|
|
|
|
* python/py-objfile.c (objfpy_get_username): New function.
|
|
|
|
|
(objfile_getset): Add "username".
|
|
|
|
|
|
2015-01-24 14:08:32 +00:00
|
|
|
|
2015-01-24 Mark Wielaard <mjw@redhat.com>
|
|
|
|
|
|
|
|
|
|
* stack.c (return_command): Markup warning message with _.
|
|
|
|
|
|
2015-01-24 19:17:08 +00:00
|
|
|
|
2015-01-24 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* gdbtypes.h (TYPE_TYPE_SPECIFIC): Delete.
|
|
|
|
|
|
Fix 100x slowdown regression on DWZ files
Since Fedora started to use DWZ DWARF compressor:
http://fedoraproject.org/wiki/Features/DwarfCompressor
GDB has slowed down a lot. To make it clear - DWZ is DWARF structure
rearrangement, "compressor" does not mean any zlib style data compression.
This patch reduces LibreOffice backtrace from 5 minutes to 3 seconds (100x)
and it also reduces memory consumption 20x.
[ benchmark is at the bottom of this mail ]
Example of DWZ output:
------------------------------------------------------------------------------
Compilation Unit @ offset 0xc4:
<0><cf>: Abbrev Number: 17 (DW_TAG_partial_unit)
<d0> DW_AT_stmt_list : 0x0
<d4> DW_AT_comp_dir : (indirect string, offset: 0x6f): /usr/src/debug/gdb-7.7.1/build-x86_64-redhat-linux-gnu/gdb
<1><d8>: Abbrev Number: 9 (DW_TAG_typedef)
<d9> DW_AT_name : (indirect string, offset: 0x827dc): size_t
<dd> DW_AT_decl_file : 4
<de> DW_AT_decl_line : 212
<df> DW_AT_type : <0xae>
Compilation Unit @ offset 0xe4:
<0><ef>: Abbrev Number: 13 (DW_TAG_partial_unit)
<f0> DW_AT_stmt_list : 0x0
<f4> DW_AT_comp_dir : (indirect string, offset: 0x6f): /usr/src/debug/gdb-7.7.1/build-x86_64-redhat-linux-gnu/gdb
<1><f8>: Abbrev Number: 45 (DW_TAG_typedef)
<f9> DW_AT_name : (indirect string, offset: 0x251): __off_t
<fd> DW_AT_decl_file : 3
<fe> DW_AT_decl_line : 131
<ff> DW_AT_type : <0x68>
Compilation Unit @ offset 0x62d9f9:
<0><62da04>: Abbrev Number: 20 (DW_TAG_compile_unit)
[...]
<62da12> DW_AT_low_pc : 0x807e10
<62da1a> DW_AT_high_pc : 134
<62da1c> DW_AT_stmt_list : 0xf557e
<1><62da20>: Abbrev Number: 7 (DW_TAG_imported_unit)
<62da21> DW_AT_import : <0xcf> [Abbrev Number: 17]
------------------------------------------------------------------------------
One can see all DW_TAG_partial_unit have DW_AT_stmt_list 0x0 which causes
repeated decoding of that .debug_line unit on each DW_TAG_imported_unit.
This was OK before as each DW_TAG_compile_unit has its own .debug_line unit.
But since the introduction of DW_TAG_partial_unit by DWZ one should cache
read-in DW_AT_stmt_list .debug_line units.
Fortunately one does not need to cache whole
struct linetable *symtab->linetable
and other data from .debug_line mapping PC<->lines
------------------------------------------------------------------------------
Line Number Statements:
Extended opcode 2: set Address to 0x45c880
Advance Line by 25 to 26
Copy
------------------------------------------------------------------------------
as the only part of .debug_line which GDB needs for DW_TAG_partial_unit is:
------------------------------------------------------------------------------
The Directory Table:
../../gdb
/usr/include/bits
[...]
The File Name Table:
Entry Dir Time Size Name
1 1 0 0 gdb.c
2 2 0 0 string3.h
[...]
------------------------------------------------------------------------------
specifically referenced in GDB for DW_AT_decl_file at a single place:
------------------------------------------------------------------------------
fe = &cu->line_header->file_names[file_index - 1];
SYMBOL_SYMTAB (sym) = fe->symtab;
------------------------------------------------------------------------------
This is because for some reason DW_TAG_partial_unit never contains PC-related
DWARF information. I do not know exactly why, the compression ratio is a bit
lower due to it but thanksfully currently it is that way:
dwz.c:
------------------------------------------------------------------------------
/* These attributes reference code, prevent moving
DIEs with them. */
case DW_AT_low_pc:
case DW_AT_high_pc:
case DW_AT_entry_pc:
case DW_AT_ranges:
die->die_ck_state = CK_BAD;
+
/* State of checksum computation. Not computed yet, computed and
suitable for moving into partial units, currently being computed
and finally determined unsuitable for moving into partial units. */
enum { CK_UNKNOWN, CK_KNOWN, CK_BEING_COMPUTED, CK_BAD } die_ck_state : 2;
------------------------------------------------------------------------------
I have also verified also real-world Fedora debuginfo files really comply with
that assumption with dwgrep
https://github.com/pmachata/dwgrep
using:
------------------------------------------------------------------------------
dwgrep -e 'entry ?DW_TAG_partial_unit child* ( ?DW_AT_low_pc , ?DW_AT_high_pc , ?DW_AT_ranges )' /usr/lib/debug/**
------------------------------------------------------------------------------
BTW I think GDB already does not support the whole DW_TAG_imported_unit and
DW_TAG_partial_unit usage possibilities as specified by the DWARF standard.
I think GDB would not work if DW_TAG_imported_unit was used in some inner
level and not at the CU level (readelf -wi level <1>) - this is how DWZ is
using DW_TAG_imported_unit. Therefore I do not think further assumptions
about DW_TAG_imported_unit and DW_TAG_partial_unit usage by DWZ are a problem
for GDB.
One could save the whole .debug_line decoded PC<->lines mapping (and not just
the DW_AT_decl_file table) but:
* there are some problematic corner cases so one could do it incorrectly
* there are no real world data to really test such patch extension
* such extension could be done perfectly incrementally on top of this patch
------------------------------------------------------------------------------
benchmark - on Fedora 20 x86_64 and FSF GDB HEAD:
echo -e 'thread apply all bt\nset confirm no\nq'|./gdb -p `pidof soffice.bin` -ex 'set pagination off' -ex 'maintenance set per-command
space' -ex 'maintenance set per-command symtab' -ex 'maintenance set per-command time'
FSF GDB HEAD ("thread apply all bt"):
Command execution time: 333.693000 (cpu), 335.587539 (wall)
---sec
Space used: 1736404992 (+1477189632 for this command)
----MB
vs.
THIS PATCH ("thread apply all bt"):
Command execution time: 2.595000 (cpu), 2.607573 (wall)
-sec
Space used: 340058112 (+85917696 for this command)
--MB
FSF GDB HEAD ("thread apply all bt full"):
Command execution time: 466.751000 (cpu), 468.345837 (wall)
---sec
Space used: 2330132480 (+2070974464 for this command)
----MB
vs.
THIS PATCH ("thread apply all bt full"):
Command execution time: 18.907000 (cpu), 18.964125 (wall)
--sec
Space used: 364462080 (+110325760 for this command)
---MB
------------------------------------------------------------------------------
gdb/ChangeLog
2015-01-24 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix 100x slowdown regression on DWZ files.
* dwarf2read.c (struct dwarf2_per_objfile): Add line_header_hash.
(struct line_header): Add offset and offset_in_dwz.
(dwarf_decode_lines): Add parameter decode_mapping to the declaration.
(free_line_header_voidp): New declaration.
(line_header_hash, line_header_hash_voidp, line_header_eq_voidp): New
functions.
(dwarf2_build_include_psymtabs): Update dwarf_decode_lines caller.
(handle_DW_AT_stmt_list): Use line_header_hash.
(free_line_header_voidp): New function.
(dwarf_decode_line_header): Initialize offset and offset_in_dwz.
(dwarf_decode_lines): New parameter decode_mapping, use it.
(dwarf2_free_objfile): Free line_header_hash.
2015-01-24 14:44:52 +00:00
|
|
|
|
2015-01-24 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
Fix 100x slowdown regression on DWZ files.
|
|
|
|
|
* dwarf2read.c (struct dwarf2_per_objfile): Add line_header_hash.
|
|
|
|
|
(struct line_header): Add offset and offset_in_dwz.
|
|
|
|
|
(dwarf_decode_lines): Add parameter decode_mapping to the declaration.
|
|
|
|
|
(free_line_header_voidp): New declaration.
|
|
|
|
|
(line_header_hash, line_header_hash_voidp, line_header_eq_voidp): New
|
|
|
|
|
functions.
|
|
|
|
|
(dwarf2_build_include_psymtabs): Update dwarf_decode_lines caller.
|
|
|
|
|
(handle_DW_AT_stmt_list): Use line_header_hash.
|
|
|
|
|
(free_line_header_voidp): New function.
|
|
|
|
|
(dwarf_decode_line_header): Initialize offset and offset_in_dwz.
|
|
|
|
|
(dwarf_decode_lines): New parameter decode_mapping, use it.
|
|
|
|
|
(dwarf2_free_objfile): Free line_header_hash.
|
|
|
|
|
|
2015-01-23 17:59:24 +00:00
|
|
|
|
2015-01-23 Simon Marchi <simon.marchi@ericsson.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/17416
|
|
|
|
|
* valops.c (value_rtti_indirect_type): Catch exception thrown by
|
|
|
|
|
value_ind.
|
|
|
|
|
|
2014-12-09 10:45:41 +00:00
|
|
|
|
2015-01-15 Mark Wielaard <mjw@redhat.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2read.c (read_subroutine_type): Set TYPE_NO_RETURN from
|
|
|
|
|
DW_AT_noreturn.
|
|
|
|
|
* gdbtypes.h (struct func_type): Add is_noreturn field flag. Make
|
|
|
|
|
calling_convention an 8 bit bit field.
|
|
|
|
|
(TYPE_NO_RETURN): New macro.
|
|
|
|
|
* infcmd.c (finish_command): Query if function does not return
|
|
|
|
|
normally.
|
|
|
|
|
* stack.c (return_command): Likewise.
|
|
|
|
|
|
2015-01-23 11:12:39 +00:00
|
|
|
|
2015-01-23 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (linux_is_async_p): New macro.
|
|
|
|
|
(linux_nat_is_async_p):
|
|
|
|
|
(linux_nat_terminal_inferior): Check whether the target can async
|
|
|
|
|
instead of whether it is already async.
|
|
|
|
|
(linux_nat_terminal_ours): Don't check whether the target is
|
|
|
|
|
async.
|
|
|
|
|
(linux_async_pipe): Use linux_is_async_p.
|
|
|
|
|
|
2015-01-22 20:04:53 +00:00
|
|
|
|
2015-01-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* NEWS (Changes since GDB 7.9): Add 'thread apply all' option
|
|
|
|
|
'-ascending'.
|
|
|
|
|
* thread.c (tp_array_compar_ascending, tp_array_compar): New.
|
|
|
|
|
(thread_apply_all_command): Parse CMD for tp_array_compar_ascending.
|
|
|
|
|
Sort tp_array using tp_array_compar.
|
|
|
|
|
(_initialize_thread): Extend thread_apply_all_command help.
|
|
|
|
|
|
2015-01-22 20:02:24 +00:00
|
|
|
|
2015-01-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* corelow.c (core_open): Call also thread_command.
|
|
|
|
|
* gdbthread.h (thread_command): New prototype moved from ...
|
|
|
|
|
* thread.c (thread_command): ... here.
|
|
|
|
|
(thread_command): Make it global.
|
|
|
|
|
|
2015-01-22 18:30:01 +00:00
|
|
|
|
2015-01-22 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* configure.ac [*mingw32*]: Check $curses_found instead of
|
|
|
|
|
$prefer_curses.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
* windows-termcap.c: Remove HAVE_CURSES_H, HAVE_NCURSES_H and
|
|
|
|
|
HAVE_NCURSES_NCURSES_H checks.
|
|
|
|
|
|
2015-01-22 18:23:12 +00:00
|
|
|
|
2015-01-22 Eli Zaretskii <eliz@gnu.org>
|
|
|
|
|
|
2015-01-23 07:13:49 +00:00
|
|
|
|
* tui/tui.c (tui_enable) [__MINGW32__]: If the call to 'newterm'
|
2015-01-22 18:23:12 +00:00
|
|
|
|
fails with the 1st arg NULL, try again with "unknown". Don't test
|
|
|
|
|
the "cup" capability: it isn't supported by the Windows port of
|
|
|
|
|
ncurses, but the Windows console driver is still capable of
|
|
|
|
|
supporting TUI.
|
|
|
|
|
|
2015-01-22 18:18:16 +00:00
|
|
|
|
2015-01-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
* compile/compile.c (_initialize_compile): Use -fPIE for compile_args.
|
|
|
|
|
|
2015-01-22 18:05:59 +00:00
|
|
|
|
2015-01-22 Eli Zaretskii <eliz@gnu.org>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (HFILES_NO_SRCDIR): Remove ada-varobj.h.
|
|
|
|
|
(ALLDEPFILES): Remove irix5-nat.c. These two are part of the
|
|
|
|
|
reason that "make TAGS" is broken.
|
|
|
|
|
|
2015-01-22 12:47:10 +00:00
|
|
|
|
2015-01-22 Chen Gang <gang.chen.5i5j@gmail.com>
|
|
|
|
|
|
|
|
|
|
* hppa-tdep.c (inst_saves_gr): Fix logical working flow issues
|
|
|
|
|
and check additional store instructions.
|
|
|
|
|
|
2015-01-20 16:07:50 +00:00
|
|
|
|
2015-01-21 Wei-cheng Wang <cole945@gmail.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Write After Approval): Add "Wei-cheng Wang".
|
|
|
|
|
|
Add missing comments in rs6000-tdep.c, ppc64-tdep.c and ppc-linux-tdep.c.
gdb/ChangeLog:
* ppc-linux-tdep.c (ppc_skip_trampoline_code,
ppc_canonicalize_syscall, ppc_linux_syscall_record,
ppc_linux_record_signal, ppc_init_linux_record_tdep): Add comments.
* ppc64-tdep.c (ppc64_skip_trampoline_code): Likewise.
* rs6000-tdep.c (rs6000_epilogue_frame_cache,
rs6000_epilogue_frame_this_id, rs6000_epilogue_frame_prev_register,
rs6000_epilogue_frame_sniffer, ppc_record_vsr, ppc_process_record_op4,
ppc_process_record_op19, ppc_process_record_op31,
ppc_process_record_op59, ppc_process_record_op60,
ppc_process_record_op63): Likewise.
2015-01-19 15:34:07 +00:00
|
|
|
|
2015-01-21 Wei-cheng Wang <cole945@gmail.com>
|
|
|
|
|
|
|
|
|
|
* ppc-linux-tdep.c (ppc_skip_trampoline_code,
|
|
|
|
|
ppc_canonicalize_syscall, ppc_linux_syscall_record,
|
|
|
|
|
ppc_linux_record_signal, ppc_init_linux_record_tdep): Add comments.
|
|
|
|
|
* ppc64-tdep.c (ppc64_skip_trampoline_code): Likewise.
|
|
|
|
|
* rs6000-tdep.c (rs6000_epilogue_frame_cache,
|
|
|
|
|
rs6000_epilogue_frame_this_id, rs6000_epilogue_frame_prev_register,
|
|
|
|
|
rs6000_epilogue_frame_sniffer, ppc_record_vsr, ppc_process_record_op4,
|
|
|
|
|
ppc_process_record_op19, ppc_process_record_op31,
|
|
|
|
|
ppc_process_record_op59, ppc_process_record_op60,
|
|
|
|
|
ppc_process_record_op63): Likewise.
|
|
|
|
|
|
2015-01-20 17:38:23 +00:00
|
|
|
|
2015-01-20 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* nat/linux-ptrace.c (linux_ptrace_attach_fail_reason_string)
|
|
|
|
|
(linux_ptrace_test_ret_to_nx): Use safe_strerror instead of
|
|
|
|
|
strerror.
|
|
|
|
|
|
2015-01-20 18:04:26 +00:00
|
|
|
|
2015-01-20 Wei-cheng Wang <cole945@gmail.com>
|
2015-01-18 07:20:46 +00:00
|
|
|
|
|
|
|
|
|
* rs6000-tdep.c (ppc_process_record_op4, ppc_process_record_op19,
|
|
|
|
|
ppc_process_record_op31, ppc_process_record_op59,
|
|
|
|
|
ppc_process_record_op60, ppc_process_record_op63,
|
|
|
|
|
ppc_process_record): Fix -Wformat warning.
|
|
|
|
|
* rs6000-tdep.c (rs6000_epilogue_frame_cache, ppc_process_record_op60):
|
|
|
|
|
Remove unused variables.
|
|
|
|
|
|
2015-01-20 14:17:09 +00:00
|
|
|
|
2015-01-20 Chen Gang <gang.chen.5i5j@gmail.com>
|
|
|
|
|
|
|
|
|
|
* MAINTAINERS (Write After Approval): Add "Chen Gang".
|
|
|
|
|
|
2015-01-19 15:34:29 +00:00
|
|
|
|
2015-01-19 Eli Zaretskii <eliz@gnu.org>
|
|
|
|
|
|
|
|
|
|
* configure.ac [*mingw32*]: Only add windows-termcap.o to
|
|
|
|
|
CONFIG_OBS if not building with a curses library.
|
|
|
|
|
* configure: Regenerate.
|
|
|
|
|
|
|
|
|
|
* windows-termcap.c: Include defs.h. Make the whole body empty if
|
|
|
|
|
either one of HAVE_CURSES_H or HAVE_NCURSES_H or
|
|
|
|
|
HAVE_NCURSES_NCURSES_H is defined.
|
|
|
|
|
|
2015-01-19 07:51:05 +00:00
|
|
|
|
2015-01-19 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* rs6000-tdep.c (rs6000_gdbarch_init): Move divide operator
|
|
|
|
|
from end of line to start of next line.
|
|
|
|
|
|
2015-01-17 06:30:59 +00:00
|
|
|
|
2015-01-17 Wei-cheng Wang <cole945@gmail.com>
|
|
|
|
|
|
|
|
|
|
* ppc-linux-tdep.c (ppc_skip_trampoline_code):
|
|
|
|
|
Scan PLT stub backward for reverse debugging.
|
|
|
|
|
* ppc64-tdep.c (ppc64_skip_trampoline_code): Likewise.
|
|
|
|
|
|
2015-01-17 06:30:33 +00:00
|
|
|
|
2015-01-17 Wei-cheng Wang <cole945@gmail.com>
|
|
|
|
|
Ulrich Weigand <uweigand@de.ibm.com>
|
|
|
|
|
|
|
|
|
|
* configure.tgt (powerpc*-*-linux): Add linux-record.o to
|
|
|
|
|
gdb_target_obs.
|
|
|
|
|
(ppc_linux_record_tdep, ppc64_linux_record_tdep): New for linux syscall
|
|
|
|
|
record.
|
|
|
|
|
(ppc_canonicalize_syscall, ppc_linux_syscall_record,
|
|
|
|
|
ppc_linux_record_signal, ppc_init_linux_record_tdep): New functions.
|
|
|
|
|
(ppc_linux_init_abi): Set process_record, process_record_signal.
|
|
|
|
|
* ppc-tdep.h (struct gdbarch_tdep): Add ppc_syscall_record and
|
|
|
|
|
ppc_linux_record_tdep to gdbarch_tdep.
|
|
|
|
|
(ppc_process_record): New declaration.
|
|
|
|
|
* rs6000-tdep.c (ppc_record_vsr, ppc_process_record_op4,
|
|
|
|
|
ppc_process_record_op19, ppc_process_record_op31,
|
|
|
|
|
ppc_process_record_op59, ppc_process_record_op60,
|
|
|
|
|
ppc_process_record_op63, ppc_process_record): New functions.
|
|
|
|
|
|
2015-01-17 06:29:16 +00:00
|
|
|
|
2015-01-17 Wei-cheng Wang <cole945@gmail.com>
|
|
|
|
|
|
|
|
|
|
* rs6000-tdep.c (rs6000_in_function_epilogue_p): Rename to
|
|
|
|
|
rs6000_in_function_epilogue_frame_p and add an argument
|
|
|
|
|
for frame_info.
|
|
|
|
|
(rs6000_epilogue_frame_cache, rs6000_epilogue_frame_this_id,
|
|
|
|
|
rs6000_epilogue_frame_prev_register, rs6000_epilogue_frame_sniffer):
|
|
|
|
|
New functions.
|
|
|
|
|
(rs6000_epilogue_frame_unwind): New.
|
|
|
|
|
(rs6000_gdbarch_init): Append epilogue unwinder.
|
|
|
|
|
|
2015-01-16 16:42:28 +00:00
|
|
|
|
2015-01-16 Sergio Durigan Junior <sergiodj@redhat.com>
|
|
|
|
|
|
|
|
|
|
* nat/linux-personality.c: Replace "#ifndef
|
|
|
|
|
HAVE_DECL_ADDR_NO_RANDOMIZE" by "#if
|
|
|
|
|
!HAVE_DECL_ADDR_NO_RANDOMIZE", fixing a regression in RHEL-5
|
|
|
|
|
systems.
|
|
|
|
|
|
2015-01-16 11:24:20 +00:00
|
|
|
|
2015-01-16 Eli Zaretskii <eliz@gnu.org>
|
|
|
|
|
|
2015-01-16 16:24:16 +00:00
|
|
|
|
* tui/tui-win.c (tui_rehighlight_all, tui_set_var_cmd): New
|
|
|
|
|
functions.
|
|
|
|
|
(_initialize_tui_win) <border-kind, border-mode>:
|
|
|
|
|
<active-border-mode>: Use tui_set_var_cmd as the "set" function.
|
2015-01-16 16:32:42 +00:00
|
|
|
|
(tui_set_tab_width_command): Fix the commentary.
|
|
|
|
|
|
2015-01-16 16:24:16 +00:00
|
|
|
|
* tui/tui-win.h: Add prototype for tui_rehighlight_all.
|
|
|
|
|
|
2015-01-16 11:31:36 +00:00
|
|
|
|
* tui/tui-win.c (tui_scroll_left_command, tui_scroll_right_command):
|
|
|
|
|
Doc fix.
|
2015-01-16 15:46:12 +00:00
|
|
|
|
(tui_set_tab_width_command): Delete and recreate the source and
|
|
|
|
|
the disassembly windows, to show the effect of the changed tab
|
|
|
|
|
size immediately.
|
2015-01-16 11:31:36 +00:00
|
|
|
|
|
2015-01-16 11:24:20 +00:00
|
|
|
|
* tui/tui-data.h (LINE_PREFIX): Make shorter
|
|
|
|
|
(MAX_PID_WIDTH): Enlarge from 14 to 19, to leave enough space for
|
|
|
|
|
"Thread NNNNN.XXXX" thread ID notation on Windows.
|
|
|
|
|
|
2015-01-16 05:39:47 +00:00
|
|
|
|
2015-01-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
|
|
|
|
|
|
|
|
Fix gcc-5 compilation.
|
|
|
|
|
* hppa-tdep.c (inst_saves_gr): Fix parentheses typo.
|
|
|
|
|
|
2015-01-15 20:10:49 +00:00
|
|
|
|
2015-01-15 Sergio Durigan Junior <sergiodj@redhat.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (HFILES_NO_SRCDIR): Add nat/linux-personality.h.
|
|
|
|
|
(linux-personality.o): New rule.
|
|
|
|
|
* common/common-defs.h: Include <stdint.h>.
|
|
|
|
|
* config/aarch64/linux.mh (NATDEPFILES): Include
|
|
|
|
|
linux-personality.o.
|
|
|
|
|
* config/alpha/alpha-linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/arm/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/i386/linux64.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/i386/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/ia64/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/m32r/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/m68k/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/mips/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/pa/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/powerpc/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/powerpc/spu-linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/s390/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/sparc/linux64.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/sparc/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/tilegx/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* config/xtensa/linux.mh (NATDEPFILES): Likewise.
|
|
|
|
|
* defs.h: Remove #include <stdint.h> (moved to
|
|
|
|
|
common/common-defs.h).
|
|
|
|
|
* linux-nat.c: Include nat/linux-personality.h. Remove #include
|
|
|
|
|
<sys/personality.h>; do not define ADDR_NO_RANDOMIZE (moved to
|
|
|
|
|
nat/linux-personality.c).
|
|
|
|
|
(linux_nat_create_inferior): Remove code to disable address space
|
|
|
|
|
randomization (moved to nat/linux-personality.c). Create cleanup
|
|
|
|
|
to disable address space randomization.
|
|
|
|
|
* nat/linux-personality.c: New file.
|
|
|
|
|
* nat/linux-personality.h: Likewise.
|
|
|
|
|
|
2015-01-15 20:09:15 +00:00
|
|
|
|
2015-01-15 Sergio Durigan Junior <sergiodj@redhat.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (ALLDEPFILES): Including common/mingw-strerror.c and
|
|
|
|
|
common/posix-strerror.c.
|
|
|
|
|
(posix-strerror.o): New rule.
|
|
|
|
|
(mingw-strerror.o): Likewise.
|
|
|
|
|
* common/common-utils.h (safe_strerror): Move prototype to here,
|
|
|
|
|
from utils.h.
|
|
|
|
|
* common/common.host: New file.
|
|
|
|
|
* common/mingw-strerror.c: Likewise.
|
|
|
|
|
* common/posix-strerror.c: Likewise.
|
|
|
|
|
* configure: Regenerated.
|
|
|
|
|
* configure.ac: Source common/common.host. Add variable
|
|
|
|
|
common_host_obs to gdb_host_obs.
|
|
|
|
|
* contrib/ari/gdb_ari.sh: Mention gdb/common/mingw-strerror.c and
|
|
|
|
|
gdb/common/posix-strerror.c when warning about the use of
|
|
|
|
|
strerror.
|
|
|
|
|
* mingw-hdep.c (safe_strerror): Remove definition; move it to
|
|
|
|
|
common/mingw-strerror.c.
|
|
|
|
|
* posix-hdep.c (safe_strerror): Remove definition; move it to
|
|
|
|
|
common/posix-hdep.c.
|
|
|
|
|
* utils.h (safe_strerror): Remove prototype; move to
|
|
|
|
|
common/common-utils.h.
|
|
|
|
|
|
2015-01-15 11:10:36 +00:00
|
|
|
|
2015-01-15 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
GDB 7.8.2 released.
|
|
|
|
|
|
[Ada] 'first/'last/'length of array whose bound is a discriminant
Consider the following code:
type Table is array (Positive range <>) of Integer;
type Object (N : Integer) is record
Data : Table (1 .. N);
end record;
My_Object : Object := (N => 3, Data => (3, 5, 8));
Trying to print the range and length of the My_Object.Data array yields:
(gdb) print my_object.data'first
$1 = 1
(gdb) print my_object.data'last
$2 = 0
(gdb) print my_object.data'length
$3 = 0
The first one is correct, and that is thanks to the fact that
the lower bound is statically known. However, for the upper
bound, and consequently the array's length, the values are incorrect.
It should be:
(gdb) print my_object.data'last
$2 = 3
(gdb) print my_object.data'length
$3 = 3
What happens here is that ada_array_bound_from_type sees that
our array has a parallel "___XA" type, and therefore tries to
use it. In particular, it described our array's index type as:
[...]___XDLU_1__n, which means lower bound = 1, and upper bound
is value of "n". Unfortunately, ada_array_bound_from_type does
not have access to the discriminant, and is therefore unable to
compute the bound correctly.
Fortunately, at this stage, the bound has already been computed
a while ago, and therefore doesn't need to be re-computed here.
This patch fixes the issue by ignoring that ___XA type if the array
is marked as already fixed.
This also fixes the same issue with packed arrays.
gdb/ChangeLog:
* ada-lang.c (ada_array_bound_from_type): Ignore array's parallel
___XA type if the array has already been fixed.
gdb/testsuite/ChangeLog:
* gdb.ada/var_arr_attrs: New testcase.
2015-01-15 06:09:32 +00:00
|
|
|
|
2015-01-15 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* ada-lang.c (ada_array_bound_from_type): Ignore array's parallel
|
|
|
|
|
___XA type if the array has already been fixed.
|
|
|
|
|
|
2014-11-28 01:18:26 +00:00
|
|
|
|
2015-01-14 Yao Qi <yao@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (ppc-linux.o): New rule.
|
|
|
|
|
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Add ppc-linux.o.
|
|
|
|
|
* configure.ac: AC_CHECK_FUNCS(getauxval).
|
|
|
|
|
* config.in: Re-generated.
|
|
|
|
|
* configure: Re-generated.
|
|
|
|
|
* nat/ppc-linux.h [__powerpc64__] (ppc64_64bit_inferior_p):
|
|
|
|
|
Declare.
|
|
|
|
|
* nat/ppc-linux.c: New file.
|
|
|
|
|
* ppc-linux-nat.c (ppc_linux_target_wordsize) [__powerpc64__]:
|
|
|
|
|
Call ppc64_64bit_inferior_p.
|
|
|
|
|
|
Move some ppc macros to nat/ppc-linux.h
When I use PPC_FEATURE_BOOKE in GDBserver, I find it is defined in GDB
but not in GDBserver. After taking a further look, I find some macros
are duplicated between ppc-linux-nat.c and linux-ppc-low.c, so this
patch is to move them into nat/ppc-linux.h.
gdb/gdbserver:
2015-01-14 Yao Qi <yao@codesourcery.com>
* linux-ppc-low.c: Include "nat/ppc-linux.h".
(PPC_FEATURE_HAS_VSX): Move to nat/ppc-linux.h.
(PPC_FEATURE_HAS_ALTIVEC, PPC_FEATURE_HAS_SPE): Likewise.
(PT_ORIG_R3, PT_TRAP): Likewise.
(PTRACE_GETVSXREGS, PTRACE_SETVSXREGS): Likewise.
(PTRACE_GETVRREGS, PTRACE_SETVRREGS): Likewise.
(PTRACE_GETEVRREGS, PTRACE_SETEVRREGS): Likewise.
gdb:
2015-01-14 Yao Qi <yao@codesourcery.com>
* ppc-linux-nat.c (PT_ORIG_R3, PT_TRAP): Move to
nat/ppc-linux.h.
(PPC_FEATURE_CELL, PPC_FEATURE_BOOKE): Likewise.
(PPC_FEATURE_HAS_DFP): Likewise.
(PTRACE_GETVRREGS, PTRACE_SETVRREGS): Likewise.
(PTRACE_GETVSXREGS, PTRACE_SETVSXREGS): Likewise.
(PTRACE_GETEVRREGS, PTRACE_SETEVRREGS): Likewise.
Include "nat/ppc-linux.h".
* nat/ppc-linux.h: New file.
* Makefile.in (HFILES_NO_SRCDIR): Add nat/ppc-linux.h.
2015-01-08 09:23:55 +00:00
|
|
|
|
2015-01-14 Yao Qi <yao@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* ppc-linux-nat.c (PT_ORIG_R3, PT_TRAP): Move to
|
|
|
|
|
nat/ppc-linux.h.
|
|
|
|
|
(PPC_FEATURE_CELL, PPC_FEATURE_BOOKE): Likewise.
|
|
|
|
|
(PPC_FEATURE_HAS_DFP): Likewise.
|
|
|
|
|
(PTRACE_GETVRREGS, PTRACE_SETVRREGS): Likewise.
|
|
|
|
|
(PTRACE_GETVSXREGS, PTRACE_SETVSXREGS): Likewise.
|
|
|
|
|
(PTRACE_GETEVRREGS, PTRACE_SETEVRREGS): Likewise.
|
|
|
|
|
Include "nat/ppc-linux.h".
|
|
|
|
|
* nat/ppc-linux.h: New file.
|
|
|
|
|
* Makefile.in (HFILES_NO_SRCDIR): Add nat/ppc-linux.h.
|
|
|
|
|
|
PR17525 - breakpoint commands not executed when program run from -x script
Executing a gdb script that runs the inferior (from the command line
with -x), and has it hit breakpoints with breakpoint commands that
themselves run the target, is currently broken on async targets
(Linux, remote).
While we're executing a command list or a script, we force the
interpreter to be sync, which results in some functions nesting an
event loop and waiting for the target to stop, instead of returning
immediately and having the top level event loop handle the stop.
The issue with this bug is simply that bpstat_do_actions misses
checking whether the interpreter is sync. When we get here, in the
case of executing a script (or, when the interpreter is sync), the
program has already advanced to the next breakpoint, through
maybe_wait_sync_command_done. We need to process its breakpoints
immediately, just like with a sync target.
Tested on x86_64 Fedora 20.
gdb/
2015-01-14 Pedro Alves <palves@redhat.com>
PR gdb/17525
* breakpoint.c: Include "interps.h".
(bpstat_do_actions_1): Also check whether the interpreter is
async.
gdb/testsuite/
2015-01-14 Pedro Alves <palves@redhat.com>
Joel Brobecker <brobecker@adacore.com>
PR gdb/17525
* gdb.base/bp-cmds-execution-x-script.c: New file.
* gdb.base/bp-cmds-execution-x-script.exp: New file.
* gdb.base/bp-cmds-execution-x-script.gdb: New file.
2015-01-12 19:30:08 +00:00
|
|
|
|
2015-01-14 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/17525
|
|
|
|
|
* breakpoint.c: Include "interps.h".
|
|
|
|
|
(bpstat_do_actions_1): Also check whether the interpreter is
|
|
|
|
|
async.
|
|
|
|
|
|
PR cli/17828: -batch -ex r breaks terminal
Commit d3d4baed (PR python/17372 - Python hangs when displaying
help()) had the side effect of causing 'gdb -batch' to leave the
terminal in the wrong state if the program was run. E.g,.
$ echo 'main(){*(int*)0=0;}' | gcc -x c -; ./gdb/gdb -batch -ex r ./a.out
Program received signal SIGSEGV, Segmentation fault.
0x00000000004004ff in main ()
$
If you start typing the next command, seemingly nothing happens - GDB
left the terminal with echo disabled.
The issue is that that "r" ends up in fetch_inferior_event, which
calls reinstall_readline_callback_handler_cleanup, which causes
readline to prep the terminal (raw, echo disabled). But "-batch"
causes GDB to exit before the top level event loop is first started,
and then nothing de-preps the terminal.
The reinstall_readline_callback_handler_cleanup function's intro
comment mentions:
"Need to do this as we go back to the event loop, ready to process
further input."
but the implementation forgets the case of when the interpreter is
sync, which indicates we won't return to the event loop yet, or as in
the case of -batch, we have not started it yet.
The fix is to not install the readline callback in that case.
For the test, in this case, checking that command echo still works is
sufficient. Comparing stty output before/after running GDB is even
better. Because stty may not be available, the test tries both ways.
In any case, since expect's spawn (what we use to start gdb) creates a
new pseudo tty, another expect spawn or tcl exec after GDB exits would
not see the wrong terminal settings. So instead, the test spawns a
shell and runs stty and GDB in it.
Tested on x86_64 Fedora 20.
gdb/
2015-01-14 Pedro Alves <palves@redhat.com>
PR cli/17828
* infrun.c (reinstall_readline_callback_handler_cleanup): Don't
reinstall if the interpreter is sync.
gdb/testsuite/
2015-01-14 Pedro Alves <palves@redhat.com>
PR cli/17828
* gdb.base/batch-preserve-term-settings.c: New file.
* gdb.base/batch-preserve-term-settings.exp: New file.
2015-01-14 11:51:06 +00:00
|
|
|
|
2015-01-14 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
PR cli/17828
|
|
|
|
|
* infrun.c (reinstall_readline_callback_handler_cleanup): Don't
|
|
|
|
|
reinstall if the interpreter is sync.
|
|
|
|
|
|
2015-01-14 01:00:31 +00:00
|
|
|
|
2015-01-13 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* objfiles.c (objfile_filename): New function.
|
|
|
|
|
* objfiles.h (objfile_filename): Declare it.
|
|
|
|
|
(objfile_name): Add function comment.
|
|
|
|
|
* python/py-objfile.c (objfpy_lookup_objfile_by_name): Try both the
|
|
|
|
|
bfd file name (which may be realpath'd), and the original name.
|
|
|
|
|
|
2015-01-13 12:24:45 +00:00
|
|
|
|
2015-01-13 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.
|
|
|
|
|
|
2015-01-13 12:16:07 +00:00
|
|
|
|
2015-01-13 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
GDB 7.9 branch created (92fc2e6978d9a7c8324c7e851dbee59e22ec7a37):
|
|
|
|
|
* version.in: Bump version to 7.9.50.DATE-cvs.
|
|
|
|
|
|
2015-01-13 10:36:34 +00:00
|
|
|
|
2015-01-13 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* nat/linux-procfs.c (linux_proc_attach_tgid_threads):
|
|
|
|
|
Remove trailing new-line in argument of call to warning.
|
|
|
|
|
|
2015-01-13 10:35:49 +00:00
|
|
|
|
2015-01-13 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (attach_proc_task_lwp_callback): Remove trailing
|
|
|
|
|
new-line in argument of call to "warning".
|
|
|
|
|
|
2015-01-12 11:46:34 +00:00
|
|
|
|
2015-01-13 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* ada-lang.c (ada_lookup_symbol_nonlocal): If name not found
|
|
|
|
|
in static block, then try searching for primitive types.
|
|
|
|
|
|
2015-01-12 22:51:33 +00:00
|
|
|
|
2015-01-12 Patrick Palka <patrick@parcs.ath.cx>
|
|
|
|
|
|
|
|
|
|
* top.h (gdb_add_history): Declare.
|
|
|
|
|
* top.c (command_count): New variable.
|
|
|
|
|
(gdb_add_history): New function.
|
|
|
|
|
(gdb_safe_append_history): New static function.
|
|
|
|
|
(quit_force): Call it.
|
|
|
|
|
(command_line_input): Use gdb_add_history instead of
|
|
|
|
|
add_history.
|
|
|
|
|
* event-top.c (command_line_handler): Likewise.
|
|
|
|
|
|
2015-01-12 17:13:54 +00:00
|
|
|
|
2015-01-12 James Clarke <jrtc27@jrtc27.com> (tiny patch)
|
|
|
|
|
|
|
|
|
|
PR gdb/17046
|
|
|
|
|
* darwin-nat.c: Replace <machine/setjmp.h> #include by
|
|
|
|
|
<setjmp.h> #include.
|
|
|
|
|
|
2015-01-12 00:39:46 +00:00
|
|
|
|
2015-01-11 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2read.c (compute_delayed_physnames): Use TYPE_FN_FIELD_PHYSNAME.
|
|
|
|
|
|
2015-01-11 22:06:34 +00:00
|
|
|
|
2015-01-11 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
PR gdb/15830
|
|
|
|
|
* NEWS: The "maint demangle" command is renamed as "demangle".
|
|
|
|
|
* demangle.c: #include cli/cli-utils.h, language.h.
|
|
|
|
|
(demangle_command): New function.
|
|
|
|
|
(_initialize_demangle): Add new command "demangle".
|
|
|
|
|
* maint.c (maintenance_demangle): Stub out.
|
|
|
|
|
(_initialize_maint_cmds): Update help text for "maint demangle",
|
|
|
|
|
and mark as deprecated.
|
|
|
|
|
|
2015-01-11 21:16:11 +00:00
|
|
|
|
2015-01-11 Mark Kettenis <kettenis@gnu.org>
|
|
|
|
|
|
|
|
|
|
* inf-ptrace.c (inf_ptrace_follow_fork): Adjust now that
|
|
|
|
|
inferior_thread is a function.
|
|
|
|
|
|
2014-11-30 16:47:16 +00:00
|
|
|
|
2015-01-09 Patrick Palka <patrick@parcs.ath.cx>
|
|
|
|
|
|
|
|
|
|
* Makefile.in (.y.c): Don't munge yacc's #line
|
|
|
|
|
directives.
|
|
|
|
|
|
2015-01-09 18:27:56 +00:00
|
|
|
|
2015-01-09 Patrick Palka <patrick@parcs.ath.cx>
|
|
|
|
|
|
|
|
|
|
* utils.c (defaulted_query): Rewrite to use gdb_readline_wrapper
|
|
|
|
|
to prompt for input.
|
|
|
|
|
* tui/tui-hooks.c (tui_query_hook): Remove.
|
|
|
|
|
(tui_install_hooks): Don't set deprecated_query_hook.
|
|
|
|
|
* tui/tui-io.c (tui_redisplay_readline): Fix off-by-one error in
|
|
|
|
|
height calculation. Always update the command window's cur_line.
|
|
|
|
|
|
linux-nat.c: better starvation avoidance, handle non-stop mode too
Running the testsuite with a series that reimplements user-visible
all-stop behavior on top of a target running in non-stop mode revealed
problems related to event starvation avoidance.
For example, I see
gdb.threads/signal-while-stepping-over-bp-other-thread.exp failing.
What happens is that GDB core never gets to see the signal event. It
ends up processing the events for the same threads over an over,
because Linux's waitpid(-1, ...) returns that first task in the task
list that has an event, starving threads on the tail of the task list.
So I wrote a non-stop mode test originally inspired by
signal-while-stepping-over-bp-other-thread.exp, to stress this
independently of all-stop on top of non-stop. Fixing it required the
changes described below. The test will be added in a following
commit.
1) linux-nat.c has code in place that picks an event LWP at random out
of all that have had events. This is because on the kernel side,
"waitpid(-1, ...)" just walks the task list linearly looking for the
first that had an event. But, this code is currently only used in
all-stop mode. So with a multi-threaded program that has multiple
events triggering debug events in parallel, GDB ends up starving some
threads.
To make the event randomization work in non-stop mode too, the patch
makes us pull out all the already pending events on the kernel side,
with waitpid, before deciding which LWP to report to the core.
There's some code in linux_wait that takes care of leaving events
pending if they were for LWPs the caller is not interested in. The
patch moves that to linux_nat_filter_event, so that we only have one
place that leaves events pending. With that in place, conceptually,
the flow is simpler and more normalized:
#1 - walk the LWP list looking for an LWP with a pending event to report.
#2 - if no pending event, pull events out of the kernel, and store
them in the LWP structures as pending.
#3- goto #1.
2) Then, currently the event randomization code only considers SIGTRAP
(or trap-like) events. That means that if e.g., have have multiple
threads stepping in parallel that hit a breakpoint that needs stepping
over, and one gets a signal, the signal may end up never getting
processed, because GDB will always be giving priority to the SIGTRAPs.
The patch fixes this by making the randomization code consider all
kinds of pending events.
3) If multiple threads hit a breakpoint, we report one of those, and
"cancel" the others. Cancelling means decrementing the PC, and
discarding the event. If the next time the LWP is resumed the
breakpoint is still installed, the LWP should hit it again, and we'll
report the hit then. The problem I found is that this delays threads
from advancing too much, with the kernel potentially ending up
scheduling the same threads over and over, and others not advancing.
So the patch switches away from cancelling the breakpoints, and
instead remembering that the LWP had stopped for a breakpoint. If on
resume the breakpoint is still installed, we report it. If it's no
longer installed, we discard the pending event then. This is actually
how GDBserver used to handle this before d50171e4 (Teach linux
gdbserver to step-over-breakpoints), but with the difference that back
then we'd delay adjusting the PC until resuming, which made it so that
"info threads" could wrongly see threads with unadjusted PCs.
gdb/
2015-01-09 Pedro Alves <palves@redhat.com>
* breakpoint.c (hardware_breakpoint_inserted_here_p): New
function.
* breakpoint.h (hardware_breakpoint_inserted_here_p): New
declaration.
* linux-nat.c (linux_nat_status_is_event): Move higher up in file.
(linux_resume_one_lwp): Store the thread's PC. Adjust to clear
stop_reason.
(check_stopped_by_watchpoint): New function.
(save_sigtrap): Reimplement.
(linux_nat_stopped_by_watchpoint): Adjust.
(linux_nat_lp_status_is_event): Delete.
(stop_wait_callback): Only call save_sigtrap after storing the
pending status.
(status_callback): If the thread had been stopped for a breakpoint
that has since been removed, discard the event and resume the LWP.
(count_events_callback, select_event_lwp_callback): Use
lwp_status_pending_p instead of linux_nat_lp_status_is_event.
(cancel_breakpoint): Rename to ...
(check_stopped_by_breakpoint): ... this. Record whether the LWP
stopped for a software breakpoint or hardware breakpoint.
(select_event_lwp): Only give preference to the stepping LWP in
all-stop mode. Adjust comments.
(stop_and_resume_callback): Remove references to new_pending_p.
(linux_nat_filter_event): Likewise. Leave exit events of the
leader thread pending here. Handle signal short circuiting here.
Only call save_sigtrap after storing the pending waitstatus.
(linux_nat_wait_1): Remove 'retry' label. Remove references to
new_pending. Don't handle leaving events the caller is not
interested in pending here, nor handle signal short-circuiting
here. Also give equal priority to all LWPs that have had events
in non-stop mode. If reporting a software breakpoint event,
unadjust the LWP's PC.
* linux-nat.h (enum lwp_stop_reason): New.
(struct lwp_info) <stop_pc>: New field.
(struct lwp_info) <stopped_by_watchpoint>: Delete field.
(struct lwp_info) <stop_reason>: New field.
* x86-linux-nat.c (x86_linux_prepare_to_resume): Adjust.
2015-01-07 12:48:32 +00:00
|
|
|
|
2015-01-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (hardware_breakpoint_inserted_here_p): New
|
|
|
|
|
function.
|
|
|
|
|
* breakpoint.h (hardware_breakpoint_inserted_here_p): New
|
|
|
|
|
declaration.
|
|
|
|
|
* linux-nat.c (linux_nat_status_is_event): Move higher up in file.
|
|
|
|
|
(linux_resume_one_lwp): Store the thread's PC. Adjust to clear
|
|
|
|
|
stop_reason.
|
|
|
|
|
(check_stopped_by_watchpoint): New function.
|
|
|
|
|
(save_sigtrap): Reimplement.
|
|
|
|
|
(linux_nat_stopped_by_watchpoint): Adjust.
|
|
|
|
|
(linux_nat_lp_status_is_event): Delete.
|
|
|
|
|
(stop_wait_callback): Only call save_sigtrap after storing the
|
|
|
|
|
pending status.
|
|
|
|
|
(status_callback): If the thread had been stopped for a breakpoint
|
|
|
|
|
that has since been removed, discard the event and resume the LWP.
|
|
|
|
|
(count_events_callback, select_event_lwp_callback): Use
|
|
|
|
|
lwp_status_pending_p instead of linux_nat_lp_status_is_event.
|
|
|
|
|
(cancel_breakpoint): Rename to ...
|
|
|
|
|
(check_stopped_by_breakpoint): ... this. Record whether the LWP
|
|
|
|
|
stopped for a software breakpoint or hardware breakpoint.
|
|
|
|
|
(select_event_lwp): Only give preference to the stepping LWP in
|
|
|
|
|
all-stop mode. Adjust comments.
|
|
|
|
|
(stop_and_resume_callback): Remove references to new_pending_p.
|
|
|
|
|
(linux_nat_filter_event): Likewise. Leave exit events of the
|
|
|
|
|
leader thread pending here. Handle signal short circuiting here.
|
|
|
|
|
Only call save_sigtrap after storing the pending waitstatus.
|
|
|
|
|
(linux_nat_wait_1): Remove 'retry' label. Remove references to
|
|
|
|
|
new_pending. Don't handle leaving events the caller is not
|
|
|
|
|
interested in pending here, nor handle signal short-circuiting
|
|
|
|
|
here. Also give equal priority to all LWPs that have had events
|
|
|
|
|
in non-stop mode. If reporting a software breakpoint event,
|
|
|
|
|
unadjust the LWP's PC.
|
|
|
|
|
* linux-nat.h (enum lwp_stop_reason): New.
|
|
|
|
|
(struct lwp_info) <stop_pc>: New field.
|
|
|
|
|
(struct lwp_info) <stopped_by_watchpoint>: Delete field.
|
|
|
|
|
(struct lwp_info) <stop_reason>: New field.
|
|
|
|
|
* x86-linux-nat.c (x86_linux_prepare_to_resume): Adjust.
|
|
|
|
|
|
linux-nat.c: always mark execing LWP as resumed
A subsequent patch will make the Linux backend's target_wait method
pull all events out of the kernel (with waitpid) and store them as
pending status in the LWP structure if no pending status was already
available. Then, the backend goes over the pending statuses and pick
one to report to the core.
With that, the existing thread-execl.exp test exposes a bug, like:
(gdb) set scheduler-locking on
(gdb) PASS: gdb.threads/thread-execl.exp: schedlock on: set scheduler-locking on
next
FAIL: gdb.threads/thread-execl.exp: schedlock on: get to main in new image (timeout)
Recall that when the non-leader thread execs, all threads in the
process die, the execing thread changes its pid to the tgid, and then
waitpid returns an exec event to the tgid. If GDB didn't resume the
leader LWP, then GDB sees an event for an LWP that was supposedly
stopped, and thus not marked as resumed. Because the code that picks
a pending event to report to the core ignores not-resumed LWPs:
/* Return non-zero if LP has a wait status pending. */
static int
status_callback (struct lwp_info *lp, void *data)
{
/* Only report a pending wait status if we pretend that this has
indeed been resumed. */
if (!lp->resumed)
return 0;
the event ends up pending forever, thus the timeout.
gdb/
2015-01-09 Pedro Alves <palves@redhat.com>
* linux-nat.c (linux_handle_extended_wait) <PTRACE_EVENT_EXEC>:
Set the LWP's 'resumed' flag.
2014-12-29 19:41:06 +00:00
|
|
|
|
2015-01-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (linux_handle_extended_wait) <PTRACE_EVENT_EXEC>:
|
|
|
|
|
Set the LWP's 'resumed' flag.
|
|
|
|
|
|
2015-01-07 19:41:06 +00:00
|
|
|
|
2015-01-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (linux_resume_one_lwp): New function.
|
|
|
|
|
(resume_lwp): Use lwp_status_pending_p and linux_resume_one_lwp.
|
|
|
|
|
(linux_nat_resume): Use lwp_status_pending_p and
|
|
|
|
|
linux_resume_one_lwp.
|
|
|
|
|
(linux_handle_syscall_trap): Use linux_resume_one_lwp.
|
|
|
|
|
(linux_handle_extended_wait): Use linux_resume_one_lwp.
|
|
|
|
|
(status_callback, running_callback): Use lwp_status_pending_p.
|
|
|
|
|
(lwp_status_pending_p): New function.
|
|
|
|
|
(stop_and_resume_callback): Use lwp_status_pending_p.
|
|
|
|
|
(linux_nat_filter_event): Use linux_resume_one_lwp.
|
|
|
|
|
(linux_nat_wait_1): Always use status_callback to look for an LWP
|
|
|
|
|
with a pending status. Use linux_resume_one_lwp.
|
|
|
|
|
(resume_stopped_resumed_lwps): Use lwp_status_pending_p and
|
|
|
|
|
linux_resume_one_lwp.
|
|
|
|
|
|
2014-12-29 19:41:05 +00:00
|
|
|
|
2015-01-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* breakpoint.c (bp_location_inserted_here_p): New function,
|
|
|
|
|
factored out from ...
|
|
|
|
|
(breakpoint_inserted_here_p): ... here. Use
|
|
|
|
|
ALL_BP_LOCATIONS_AT_ADDR.
|
|
|
|
|
(software_breakpoint_inserted_here_p): Use
|
|
|
|
|
bp_location_inserted_here_p and ALL_BP_LOCATIONS_AT_ADDR.
|
|
|
|
|
|
Linux: Skip thread_db thread event reporting if PTRACE_EVENT_CLONE is supported
[A test I wrote stumbled on a libthread_db issue related to thread
event breakpoints. See glibc PR17705:
[nptl_db: stale thread create/death events if debugger detaches]
https://sourceware.org/bugzilla/show_bug.cgi?id=17705
This patch avoids that whole issue by making GDB stop using thread
event breakpoints in the first place, which is good for other reasons
as well, anyway.]
Before PTRACE_EVENT_CLONE (Linux 2.6), the only way to learn about new
threads in the inferior (to attach to them) or to learn about thread
exit was to coordinate with the inferior's glibc/runtime, using
libthread_db. That works by putting a breakpoint at a magic address
which is called when a new thread is spawned, or when a thread is
about to exit. When that breakpoint is hit, all threads are stopped,
and then GDB coordinates with libthread_db to read data structures out
of the inferior to learn about what happened. Then the breakpoint is
single-stepped, and then all threads are re-resumed. This isn't very
efficient (stops all threads) and is more fragile (inferior's thread
list in memory may be corrupt; libthread_db bugs, etc.) than ideal.
When the kernel supports PTRACE_EVENT_CLONE (which we already make use
of), there's really no need to use libthread_db's event reporting
mechanism to learn about new LWPs. And if the kernel supports that,
then we learn about LWP exits through regular WIFEXITED wait statuses,
so no need for the death event breakpoint either.
GDBserver has been likewise skipping the thread_db events for a long
while:
https://sourceware.org/ml/gdb-patches/2007-10/msg00547.html
There's one user-visible difference: we'll no longer print about
threads being created and exiting while the program is running, like:
[Thread 0x7ffff7dbb700 (LWP 30670) exited]
[New Thread 0x7ffff7db3700 (LWP 30671)]
[Thread 0x7ffff7dd3700 (LWP 30667) exited]
[New Thread 0x7ffff7dab700 (LWP 30672)]
[Thread 0x7ffff7db3700 (LWP 30671) exited]
[Thread 0x7ffff7dcb700 (LWP 30668) exited]
This is exactly the same behavior as when debugging against remote
targets / gdbserver. I actually think that's a good thing (and as
such have listed this in the local/remote parity wiki page a while
ago), as the printing slows down the inferior. It's also a
distraction to keep bothering the user about short-lived threads that
she won't be able to interact with anyway. Instead, the user (and
frontend) will be informed about new threads that currently exist in
the program when the program next stops:
(gdb) c
...
* ctrl-c *
[New Thread 0x7ffff7963700 (LWP 7797)]
[New Thread 0x7ffff796b700 (LWP 7796)]
Program received signal SIGINT, Interrupt.
[Switching to Thread 0x7ffff796b700 (LWP 7796)]
clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:81
81 testq %rax,%rax
(gdb) info threads
A couple of tests had assumptions on GDB thread numbers that no longer
hold.
Tested on x86_64 Fedora 20.
gdb/
2014-01-09 Pedro Alves <palves@redhat.com>
Skip enabling event reporting if the kernel supports
PTRACE_EVENT_CLONE.
* linux-thread-db.c: Include "nat/linux-ptrace.h".
(thread_db_use_events): New function.
(try_thread_db_load_1): Check thread_db_use_events before enabling
event reporting.
(update_thread_state): New function.
(attach_thread): Use it. Check thread_db_use_events before
enabling event reporting.
(thread_db_detach): Check thread_db_use_events before disabling
event reporting.
(find_new_threads_callback): Check thread_db_use_events before
enabling event reporting. Update the thread's state if not using
libthread_db events.
gdb/testsuite/
2014-01-09 Pedro Alves <palves@redhat.com>
* gdb.threads/fork-thread-pending.exp: Switch to the main thread
instead of to thread 2.
* gdb.threads/signal-command-multiple-signals-pending.c (main):
Add barrier around each pthread_create call instead of around all
calls.
* gdb.threads/signal-command-multiple-signals-pending.exp (test):
Set a break on thread_function and have the child threads hit it
one at at a time.
2014-12-16 16:12:25 +00:00
|
|
|
|
2014-01-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
Skip enabling event reporting if the kernel supports
|
|
|
|
|
PTRACE_EVENT_CLONE.
|
|
|
|
|
* linux-thread-db.c: Include "nat/linux-ptrace.h".
|
|
|
|
|
(thread_db_use_events): New function.
|
|
|
|
|
(try_thread_db_load_1): Check thread_db_use_events before enabling
|
|
|
|
|
event reporting.
|
|
|
|
|
(update_thread_state): New function.
|
|
|
|
|
(attach_thread): Use it. Check thread_db_use_events before
|
|
|
|
|
enabling event reporting.
|
|
|
|
|
(thread_db_detach): Check thread_db_use_events before disabling
|
|
|
|
|
event reporting.
|
|
|
|
|
(find_new_threads_callback): Check thread_db_use_events before
|
|
|
|
|
enabling event reporting. Update the thread's state if not using
|
|
|
|
|
libthread_db events.
|
|
|
|
|
|
libthread_db: Skip attaching to terminated and joined threads
I wrote a test that attaches to a program that constantly spawns
short-lived threads, which exposed several issues. This is one of
them.
On GNU/Linux, attaching to a multi-threaded program sometimes prints
out warnings like:
...
[New LWP 20700]
warning: unable to open /proc file '/proc/-1/status'
[New LWP 20850]
[New LWP 21019]
...
That happens because when a thread exits, and is joined, glibc does:
nptl/pthread_join.c:
pthread_join ()
{
...
if (__glibc_likely (result == 0))
{
/* We mark the thread as terminated and as joined. */
pd->tid = -1;
...
/* Free the TCB. */
__free_tcb (pd);
}
So if we attach or interrupt the program (which does an implicit "info
threads") at just the right (or rather, wrong) time, we can find and
return threads in the libthread_db/pthreads thread list with kernel
thread ID -1. I've filed glibc PR nptl/17707 for this. You'll find
more info there.
This patch handles this as a special case in GDB.
This is actually more than just a cosmetic issue. lin_lwp_attach_lwp
will think that this -1 is an LWP we're not attached to yet, and after
failing to attach will try to check we were already attached to the
process, using a waitpid call, which in this case ends up being
"waitpid (-1, ...", which obviously results in GDB potentially
discarding an event when it shouldn't...
Tested on x86_64 Fedora 20, native and gdbserver.
gdb/gdbserver/
2015-01-09 Pedro Alves <palves@redhat.com>
* thread-db.c (find_new_threads_callback): Ignore thread if the
kernel thread ID is -1.
gdb/
2015-01-09 Pedro Alves <palves@redhat.com>
* linux-nat.c (lin_lwp_attach_lwp): Assert that the lwp id we're
about to wait for is > 0.
* linux-thread-db.c (find_new_threads_callback): Ignore thread if
the kernel thread ID is -1.
2014-12-16 16:12:24 +00:00
|
|
|
|
2015-01-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (lin_lwp_attach_lwp): Assert that the lwp id we're
|
|
|
|
|
about to wait for is > 0.
|
|
|
|
|
* linux-thread-db.c (find_new_threads_callback): Ignore thread if
|
|
|
|
|
the kernel thread ID is -1.
|
|
|
|
|
|
Linux: on attach, attach to lwps listed under /proc/$pid/task/
... instead of relying on libthread_db.
I wrote a test that attaches to a program that constantly spawns
short-lived threads, which exposed several issues. This is one of
them.
On Linux, we need to attach to all threads of a process (thread group)
individually. We currently rely on libthread_db to list the threads,
but that is problematic, because libthread_db relies on reading data
structures out of the inferior (which may well be corrupted). If
threads are being created or exiting just while we try to attach, we
may trip on inconsistencies in the inferior's thread list. To work
around that, when we see a seemingly corrupt list, we currently retry
a few times:
static void
thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new)
{
...
if (until_no_new)
{
/* Require 4 successive iterations which do not find any new threads.
The 4 is a heuristic: there is an inherent race here, and I have
seen that 2 iterations in a row are not always sufficient to
"capture" all threads. */
...
That heuristic may well fail, and when it does, we end up with threads
in the program that aren't under GDB's control. That's obviously bad
and results in quite mistifying failures, like e.g., the process dying
for seeminly no reason when a thread that wasn't attached trips on a
breakpoint.
There's really no reason to rely on libthread_db for this nowadays
when we have /proc mounted. In that case, which is the usual case, we
can list the LWPs from /proc/PID/task/. In fact, GDBserver is already
doing this. The patch factors out that code that knows to walk the
task/ directory out of GDBserver, and makes GDB use it too.
Like GDBserver, the patch makes GDB attach to LWPs and _not_ wait for
them to stop immediately. Instead, we just tag the LWP as having an
expected stop. Because we can only set the ptrace options when the
thread stops, we need a new flag in the lwp structure to keep track of
whether we've already set the ptrace options, just like in GDBserver.
Note that nothing issues any ptrace command to the threads between the
PTRACE_ATTACH and the stop, so this is safe (unlike one scenario
described in gdbserver's linux-low.c).
When we attach to a program that has threads exiting while we attach,
it's easy to race with a thread just exiting as we try to attach to
it, like:
#1 - get current list of threads
#2 - attach to each listed thread
#3 - ooops, attach failed, thread is already gone
As this is pretty normal, we shouldn't be issuing a scary warning in
step #3.
When #3 happens, PTRACE_ATTACH usually fails with ESRCH, but sometimes
we'll see EPERM as well. That happens when the kernel still has the
thread in its task list, but the thread is marked as dead.
Unfortunately, EPERM is ambiguous and we'll get it also on other
scenarios where the thread isn't dead, and in those cases, it's useful
to get a warning. To distiguish the cases, when we get an EPERM
failure, we open /proc/PID/status, and check the thread's state -- if
the /proc file no longer exists, or the state is "Z (Zombie)" or "X
(Dead)", we ignore the EPERM error silently; otherwise, we'll warn.
Unfortunately, there seems to be a kernel race here. Sometimes I get
EPERM, and then the /proc state still indicates "R (Running)"... If
we wait a bit and retry, we do end up seeing X or Z state, or get an
ESRCH. I thought of making GDB retry the attach a few times, but even
with a 500ms wait and 4 retries, I still see the warning sometimes. I
haven't been able to identify the kernel path that causes this yet,
but in any case, it looks like a kernel bug to me. As this just
results failure to suppress a warning that we've been printing since
about forever anyway, I'm just making the test cope with it, and issue
an XFAIL.
gdb/gdbserver/
2015-01-09 Pedro Alves <palves@redhat.com>
* linux-low.c (linux_attach_fail_reason_string): Move to
nat/linux-ptrace.c, and rename.
(linux_attach_lwp): Update comment.
(attach_proc_task_lwp_callback): New function.
(linux_attach): Adjust to rename and use
linux_proc_attach_tgid_threads.
(linux_attach_fail_reason_string): Delete declaration.
gdb/
2015-01-09 Pedro Alves <palves@redhat.com>
* linux-nat.c (attach_proc_task_lwp_callback): New function.
(linux_nat_attach): Use linux_proc_attach_tgid_threads.
(wait_lwp, linux_nat_filter_event): If not set yet, set the lwp's
ptrace option flags.
* linux-nat.h (struct lwp_info) <must_set_ptrace_flags>: New
field.
* nat/linux-procfs.c: Include <dirent.h>.
(linux_proc_get_int): New parameter "warn". Handle it.
(linux_proc_get_tgid): Adjust.
(linux_proc_get_tracerpid): Rename to ...
(linux_proc_get_tracerpid_nowarn): ... this.
(linux_proc_pid_get_state): New function, factored out from
(linux_proc_pid_has_state): ... this. Add new parameter "warn"
and handle it.
(linux_proc_pid_is_gone): New function.
(linux_proc_pid_is_stopped): Adjust.
(linux_proc_pid_is_zombie_maybe_warn)
(linux_proc_pid_is_zombie_nowarn): New functions.
(linux_proc_pid_is_zombie): Use
linux_proc_pid_is_zombie_maybe_warn.
(linux_proc_attach_tgid_threads): New function.
* nat/linux-procfs.h (linux_proc_get_tgid): Update comment.
(linux_proc_get_tracerpid): Rename to ...
(linux_proc_get_tracerpid_nowarn): ... this, and update comment.
(linux_proc_pid_is_gone): New declaration.
(linux_proc_pid_is_zombie): Update comment.
(linux_proc_pid_is_zombie_nowarn): New declaration.
(linux_proc_attach_lwp_func): New typedef.
(linux_proc_attach_tgid_threads): New declaration.
* nat/linux-ptrace.c (linux_ptrace_attach_fail_reason): Adjust to
use nowarn functions.
(linux_ptrace_attach_fail_reason_string): Move here from
gdbserver/linux-low.c and rename.
(ptrace_supports_feature): If the current ptrace options are not
known yet, check them now, instead of asserting.
* nat/linux-ptrace.h (linux_ptrace_attach_fail_reason_string):
Declare.
2014-12-16 16:12:24 +00:00
|
|
|
|
2015-01-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-nat.c (attach_proc_task_lwp_callback): New function.
|
|
|
|
|
(linux_nat_attach): Use linux_proc_attach_tgid_threads.
|
|
|
|
|
(wait_lwp, linux_nat_filter_event): If not set yet, set the lwp's
|
|
|
|
|
ptrace option flags.
|
|
|
|
|
* linux-nat.h (struct lwp_info) <must_set_ptrace_flags>: New
|
|
|
|
|
field.
|
|
|
|
|
* nat/linux-procfs.c: Include <dirent.h>.
|
|
|
|
|
(linux_proc_get_int): New parameter "warn". Handle it.
|
|
|
|
|
(linux_proc_get_tgid): Adjust.
|
|
|
|
|
(linux_proc_get_tracerpid): Rename to ...
|
|
|
|
|
(linux_proc_get_tracerpid_nowarn): ... this.
|
|
|
|
|
(linux_proc_pid_get_state): New function, factored out from
|
|
|
|
|
(linux_proc_pid_has_state): ... this. Add new parameter "warn"
|
|
|
|
|
and handle it.
|
|
|
|
|
(linux_proc_pid_is_gone): New function.
|
|
|
|
|
(linux_proc_pid_is_stopped): Adjust.
|
|
|
|
|
(linux_proc_pid_is_zombie_maybe_warn)
|
|
|
|
|
(linux_proc_pid_is_zombie_nowarn): New functions.
|
|
|
|
|
(linux_proc_pid_is_zombie): Use
|
|
|
|
|
linux_proc_pid_is_zombie_maybe_warn.
|
|
|
|
|
(linux_proc_attach_tgid_threads): New function.
|
|
|
|
|
* nat/linux-procfs.h (linux_proc_get_tgid): Update comment.
|
|
|
|
|
(linux_proc_get_tracerpid): Rename to ...
|
|
|
|
|
(linux_proc_get_tracerpid_nowarn): ... this, and update comment.
|
|
|
|
|
(linux_proc_pid_is_gone): New declaration.
|
|
|
|
|
(linux_proc_pid_is_zombie): Update comment.
|
|
|
|
|
(linux_proc_pid_is_zombie_nowarn): New declaration.
|
|
|
|
|
(linux_proc_attach_lwp_func): New typedef.
|
|
|
|
|
(linux_proc_attach_tgid_threads): New declaration.
|
|
|
|
|
* nat/linux-ptrace.c (linux_ptrace_attach_fail_reason): Adjust to
|
|
|
|
|
use nowarn functions.
|
|
|
|
|
(linux_ptrace_attach_fail_reason_string): Move here from
|
|
|
|
|
gdbserver/linux-low.c and rename.
|
|
|
|
|
(ptrace_supports_feature): If the current ptrace options are not
|
|
|
|
|
known yet, check them now, instead of asserting.
|
|
|
|
|
* nat/linux-ptrace.h (linux_ptrace_attach_fail_reason_string):
|
|
|
|
|
Declare.
|
|
|
|
|
|
2014-12-16 16:12:23 +00:00
|
|
|
|
2015-01-09 Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* linux-thread-db.c (thread_db_find_new_threads_silently)
|
|
|
|
|
(try_thread_db_load_1, try_thread_db_load, thread_db_load_search)
|
|
|
|
|
(find_new_threads_once): Print debug output on gdb_stdlog.
|
|
|
|
|
|
2015-01-09 10:09:03 +00:00
|
|
|
|
2015-01-09 Chen Gang <gang.chen.5i5j@gmail.com>
|
|
|
|
|
Pedro Alves <palves@redhat.com>
|
|
|
|
|
|
|
|
|
|
* compile/compile.c: Include "gdb_wait.h".
|
|
|
|
|
(do_rmdir): Check return value, and free 'zap'.
|
|
|
|
|
|
2014-12-28 08:12:53 +00:00
|
|
|
|
2015-01-08 Pedro Alves <palves@redhat.com>
|
|
|
|
|
Yao Qi <yao@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2loc.c (indirect_pieced_value): Don't call
|
|
|
|
|
gdb_sign_extend. Call extract_signed_integer instead.
|
|
|
|
|
* utils.c (gdb_sign_extend): Remove.
|
|
|
|
|
* utils.h (gdb_sign_extend): Remove declaration.
|
|
|
|
|
|
2015-01-08 07:53:26 +00:00
|
|
|
|
2015-01-07 Pierre Muller <muller@sourceware.org>
|
|
|
|
|
|
|
|
|
|
PR symtab/17811
|
|
|
|
|
* stabsread.c (define_symbol): Set language for C++ special symbols.
|
|
|
|
|
|
2015-01-07 21:23:39 +00:00
|
|
|
|
2015-01-07 Patrick Palka <patrick@parcs.ath.cx>
|
|
|
|
|
|
|
|
|
|
* inflow.c (initial_gdb_ttystate): Tweak comment.
|
|
|
|
|
|
2015-01-07 14:49:49 +00:00
|
|
|
|
2015-01-07 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* inflow.c (set_initial_gdb_ttystate): Add empty line after
|
|
|
|
|
comment documenting function.
|
|
|
|
|
|
Don't propagate our current terminal state to the inferior
Currently when we start an inferior we have the inferior inherit our
terminal state. Under TUI, our terminal is highly modified by ncurses
and readline. So when starting an inferior under TUI, the inferior will
have a highly modified terminal state which will interfere with standard
I/O. For example,
$ gdb gdb
(gdb) break main
(gdb) run
(gdb) print puts ("a\nb")
a
b
$1 = 4
(gdb) [enter TUI mode]
(gdb) run
(gdb) [exit TUI mode]
(gdb) print puts ("a\nb")
a
b
$2 = 4
(gdb) print puts ("a\r\nb\r")
a
b
$3 = 6
As you can see, when we start the inferior under the regular interface,
puts() prints the text properly. But when we start the inferior under
TUI, puts() does not print the text properly. This is because when we
start the inferior under TUI it inherits our current terminal state
which has been modified by ncurses to, among other things, require an
explicit \r\n to print a new line. As a result the inferior performs
standard I/O in an unexpected way.
Because of this discrepancy, it doesn't seem like a good idea to have
the inferior inherit our _current_ terminal state for it may have been
modified by readline and/or ncurses. Instead, we should have the
inferior inherit a pristine snapshot of our terminal state taken before
readline or ncurses have had a chance to alter it. This enables the
inferior to run in a more accurate way, more closely mimicking the
program's behavior had it run standalone. And it fixes the above
mentioned issue.
Tested on x86_64-unknown-linux-gnu.
gdb/ChangeLog:
* terminal.h (set_initial_gdb_ttystate): Declare.
* inflow.c (initial_gdb_ttystate): New static variable.
(set_initial_gdb_ttystate): New setter.
(child_terminal_init_with_pgrp): Copy initial_gdb_ttystate
instead of our current terminal state.
* top.c (gdb_init): Call set_initial_gdb_ttystate.
2014-11-22 19:12:49 +00:00
|
|
|
|
2015-01-07 Patrick Palka <patrick@parcs.ath.cx>
|
|
|
|
|
|
|
|
|
|
* terminal.h (set_initial_gdb_ttystate): Declare.
|
|
|
|
|
* inflow.c (initial_gdb_ttystate): New static variable.
|
|
|
|
|
(set_initial_gdb_ttystate): New setter.
|
|
|
|
|
(child_terminal_init_with_pgrp): Copy initial_gdb_ttystate
|
|
|
|
|
instead of our current terminal state.
|
|
|
|
|
* top.c (gdb_init): Call set_initial_gdb_ttystate.
|
|
|
|
|
|
2015-01-07 03:34:29 +00:00
|
|
|
|
2015-01-07 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* guile/scm-type.c (tyscm_array_1): Add comment.
|
|
|
|
|
* python/py-type.c (typy_array_1): Add comment.
|
|
|
|
|
|
2015-01-06 14:37:53 +00:00
|
|
|
|
2015-01-06 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* guile/scm-type.c (tyscm_array_1): Do not raise out-of-range
|
|
|
|
|
error if N2 is equal to N1 - 1.
|
|
|
|
|
|
2015-01-06 14:30:53 +00:00
|
|
|
|
2015-01-06 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* python/py-type.c (typy_array_1): Do not raise negative-length
|
|
|
|
|
exception if N2 is equal to N1 - 1.
|
|
|
|
|
|
2015-01-03 20:01:29 +00:00
|
|
|
|
2015-01-03 Doug Evans <xdje42@gmail.com>
|
|
|
|
|
|
|
|
|
|
* c-exp.y: Whitespace cleanup.
|
|
|
|
|
(classify_inner_name): Remove extra ;.
|
|
|
|
|
|
2015-01-02 23:36:05 +00:00
|
|
|
|
2015-01-02 Maciej W. Rozycki <macro@codesourcery.com>
|
|
|
|
|
|
|
|
|
|
* mips-tdep.c (mips32_scan_prologue): Keep the extracted stack
|
|
|
|
|
offset signed.
|
|
|
|
|
|
2015-01-02 19:49:14 +00:00
|
|
|
|
2015-01-02 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* dwarf2read.c (setup_type_unit_groups): Remove outdated comment.
|
|
|
|
|
|
2015-01-02 19:02:31 +00:00
|
|
|
|
2015-01-02 Doug Evans <dje@google.com>
|
|
|
|
|
|
|
|
|
|
* symtab.h (struct symbol): Fix typo in comment.
|
|
|
|
|
|
2015-01-01 09:32:14 +00:00
|
|
|
|
2015-01-01 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
Update year range in copyright notice of all files.
|
|
|
|
|
|
2015-01-01 09:24:41 +00:00
|
|
|
|
2015-01-01 Joel Brobecker <brobecker@adacore.com>
|
|
|
|
|
|
|
|
|
|
* top.c (print_gdb_version): Update copyright year to 2015.
|
|
|
|
|
|
2015-01-01 09:21:14 +00:00
|
|
|
|
2015-01-01 Joel Brobecker <brobecker@adacore.com>
|
2014-12-30 07:36:53 +00:00
|
|
|
|
|
2015-01-01 09:21:14 +00:00
|
|
|
|
* config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2014.
|
2014-12-30 07:36:53 +00:00
|
|
|
|
|
2015-01-01 09:21:14 +00:00
|
|
|
|
For older changes see ChangeLog-2014.
|
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:
|