aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2014-06-26fix memory errors with demangled name hashTom Tromey2-23/+44
This fixes a regression that Jan pointed out. The bug is that some names were allocated by dwarf2read on the objfile obstack, but then passed to SYMBOL_SET_NAMES with copy_name=0. This violates the invariant that the names must have a lifetime tied to the lifetime of the BFD. The fix is to allocate names on the per-BFD obstack. I looked at all callers, direct or indirect, of SYMBOL_SET_NAMES that pass copy_name=0. Note that only the ELF and DWARF readers do this; other symbol readers were never updated (and perhaps cannot be, depending on the details of the formats). This is why the patch is relatively small. Built and regtested on x86-64 Fedora 20. 2014-06-26 Tom Tromey <tromey@redhat.com> PR symtab/16902: * dwarf2read.c (fixup_go_packaging, dwarf2_compute_name) (dwarf2_physname, read_partial_die) (guess_partial_die_structure_name, fixup_partial_die) (guess_full_die_structure_name, anonymous_struct_prefix) (dwarf2_name): Use per-BFD obstack.
2014-06-26Move local variables to inner blockYao Qi2-4/+8
dummy_frame_sniffer has two local variables dummyframe and this_id, but they are only used in the if block below. This patch is to move them into the inner block. gdb: 2014-06-26 Yao Qi <yao@codesourcery.com> * dummy-frame.c (dummy_frame_sniffer): Move local variables dummyframe and this_id into inner block below.
2014-06-26Typo fix in signal_pass initializationYao Qi2-1/+6
When I read the code, I happen to see this: signal_pass = (unsigned char *) xmalloc (sizeof (signal_program[0]) * numsigs); ^^^^^^^^^^^^^^ It is a typo, and this patch is to fix it. gdb: 2014-06-26 Yao Qi <yao@codesourcery.com> * infrun.c (_initialize_infrun): Replace "signal_program[0]" with "signal_pass[0]" in the initialization of signal_pass.
2014-06-25btrace: pretend we're not replaying when generating a core fileMarkus Metzger4-3/+83
When generating a core file using the "generate-core-file" command while replaying with the btrace record target, we won't be able to access all registers and all memory. This leads to the following assertion: gdb/regcache.c:1034: internal-error: regcache_raw_supply: Assertion `regnum >= 0 && regnum < regcache->descr->nr_raw_registers' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) FAIL: gdb.btrace/gcore.exp: generate-core-file core (GDB internal error) Resyncing due to internal error. Pretend that we are not replaying while generating a core file. This will forward fetch and store registers as well as xfer memory calls to the target beneath. gdb/ * record-btrace.c (record_btrace_generating_corefile) (record_btrace_prepare_to_generate_core) (record_btrace_done_generating_core): New. (record_btrace_xfer_partial, record_btrace_fetch_registers) (record_btrace_store_registers, record_btrace_prepare_to_store): Forward request when generating a core file. (record_btrace_open): Set record_btrace_generating_corefile to zero. (init_record_btrace_ops): Set to_prepare_to_generate_core and to_done_generating_core. testsuite/ * gdb.btrace/gcore.exp: New.
2014-06-25gcore, target: allow target to prepare/cleanup for/after core file generationMarkus Metzger5-5/+95
Add new target functions to_prepare_to_generate_core and to_done_generating_core that are called before and after generating a core file, respectively. This allows targets to prepare for core file generation and to clean up afterwards. gdb/ * target.h (target_ops) <to_prepare_to_generate_core> <to_done_generating_core>: New. (target_prepare_to_generate_core, target_done_generating_core): New. * target.c (target_prepare_to_generate_core) (target_done_generating_core): New. * target-delegates.c: Regenerate. * gcore.c: (write_gcore_file): Rename to ... (write_gcore_file_1): ...this. (write_gcore_file): Call target_prepare_to_generate_core and target_done_generating_core.
2014-06-25make_corefile_notes: have caller free returned memoryMarkus Metzger5-3/+13
The various make_corefile_notes implementations for gdbarch as well as target currently make an xfree cleanup on the data they return. This causes problems when trying to put a TRY_CATCH around the make_corefile_notes call. Specifically, we get a stale cleanup error in restore_my_cleanups. Omit the make_cleanup and have the caller free the memory. gdb/ * fbsd-nat.c (fbsd_make_corefile_notes): Remove make_cleanup call. * gcore.c (write_gcore_file): Free memory returned from make_corefile_notes. * linux-tdep.c (linux_make_corefile_notes): Remove make_cleanup call. * procfs.c (procfs_make_note_section): Remove make_cleanup call.
2014-06-24Minor improvements in manual indexing.Eli Zaretskii2-0/+7
* doc/gdb.texinfo (Screen Size): Add more index entries.
2014-06-24Skip 'bx reg' on arm-linuxYao Qi2-1/+21
In arm-tdep.c, arm_skip_stub is installed to gdbarch skip_trampoline_code, but in arm-linux-tdep.c, find_solib_trampoline_target is installed to skip_trampoline_code. That means gdb configured for arm-linux target doesn't recognize some arm specific trampolines or stubs. Beside handling generic solib trampoline, gdb for arm-linux target should be able to handle arm specific trampolines. This patch is to skip arm specific stubs, if any, and as a fallback, skip the generic solib trampoline. gdb: 2014-06-24 Yao Qi <yao@codesourcery.com> * arm-linux-tdep.c (arm_linux_skip_trampoline_code): New. (arm_linux_init_abi): Set skip_trampoline_code with gdbarch_skip_trampoline_code instead of find_solib_trampoline_target.
2014-06-24Apply stub unwinder to 'bx reg' trampolineYao Qi2-1/+13
In target arm-none-eabi, prologue unwinder is used for trampoline 'bx reg'. However, in target arm-linux, exidx unwinder is selected for trampoline at first, which is not expected. The main function and the trampoline is, 0x00009dfc <main+0>: push {r4, r5, r6, r7, lr} ...... 0x0000ac30 <main+3636>: ldrdeq r3, [r1], -r8 0x0000ac34: bx r2 0x0000ac36: bx r4 and .ARM.exidx is: 0x9dfc <main>: @0xb404 Compact model index: 1 0x97 vsp = r7 0x20 vsp = vsp + 132 0x3f vsp = vsp + 256 0x80 0xf0 pop {r8, r9, r10, r11} 0xab pop {r4, r5, r6, r7, r14} 0xac38 <__aeabi_drsub>: 0x1 [cantunwind] Trampolines 'bx r2' and 'bx r4' doesn't belong to main, but the exidx for main is still selected form them because there is no end address of each exidx entry. Instead of teaching exidx unwinder ignore this trampoline (which looks complicated and error prone), I decide to let stub unwinder to handle trampoline, because stub undwinder is installed before exidx unwinder, and this trampoline can be regarded as a stub too. This patch is to add the code to match 'bx reg' trampoline in the sniffer of stub unwinder. gdb: 2014-06-24 Yao Qi <yao@codesourcery.com> * arm-tdep.c (arm_stub_unwind_sniffer): Return 1 if arm_skip_bx_reg returns non-zero.
2014-06-24Skip 'bx reg' trampoline on arm-none-eabiYao Qi2-1/+72
After this patch <https://gcc.gnu.org/ml/gcc-patches/2005-01/msg00813.html> applied to GCC, a new trampoline is generated but GDB doesn't recognize it. This patch is to teach GDB to understand this trampoline. See details about this trampoline and the heuristics in the comments. gdb: 2014-06-24 Yao Qi <yao@codesourcery.com> * arm-tdep.c (arm_skip_bx_reg): New function. (arm_skip_stub): Call arm_skip_bx_reg.
2014-06-23Add myself as write-after-approval maintainer.Don Breazeal2-0/+5
2014-06-23x86 Linux watchpoints: Couldn't write debug register: Invalid argument.Pedro Alves9-3/+281
This patch fixes this on x86 Linux: (gdb) watch *buf@2 Hardware watchpoint 8: *buf@2 (gdb) si 0x00000000004005a7 34 for (i = 0; i < 100000; i++); /* stepi line */ (gdb) del Delete all breakpoints? (y or n) y (gdb) watch *(buf+1)@1 Hardware watchpoint 9: *(buf+1)@1 (gdb) si 0x00000000004005a7 in main () at ../../../src/gdb/testsuite/gdb.base/watchpoint-reuse-slot.c:34 34 for (i = 0; i < 100000; i++); /* stepi line */ Couldn't write debug register: Invalid argument. (gdb) In the example above the debug registers are being switched from this state: CONTROL (DR7): 0000000000050101 STATUS (DR6): 0000000000000000 DR0: addr=0x0000000000601040, ref.count=1 DR1: addr=0x0000000000000000, ref.count=0 DR2: addr=0x0000000000000000, ref.count=0 DR3: addr=0x0000000000000000, ref.count=0 to this: CONTROL (DR7): 0000000000010101 STATUS (DR6): 0000000000000000 DR0: addr=0x0000000000601041, ref.count=1 DR1: addr=0x0000000000000000, ref.count=0 DR2: addr=0x0000000000000000, ref.count=0 DR3: addr=0x0000000000000000, ref.count=0 That is, before, DR7 was setup for watching a 2 byte region starting at what's in DR0 (0x601040). And after, DR7 is setup for watching a 1 byte region starting at what's in DR0 (0x601041). We always write DR0..DR3 before DR7, because if we enable a slot's bits in DR7, you need to have already written the corresponding DR0..DR3 registers -- the kernel rejects the DR7 write with EINVAL otherwise. The error shown above is the opposite scenario. When we try to write 0x601041 to DR0, DR7's bits still indicate intent of watching a 2-byte region. That DR0/DR7 combination is invalid, because 0x601041 is unaligned. To watch two bytes, we'd have to use two slots. So the kernel errors out with EINVAL. Fix this by always first clearing DR7, then writing DR0..DR3, and then setting DR7's bits. A little optimization -- if we're disabling the last watchpoint, then we can clear DR7 just once. The changes to nat/i386-dregs.c make that easier to detect, and as bonus, they make it a little easier to make sense of DR7 in the debug logs, as we no longer need to remember we're seeing stale bits. Tested on x86_64 Fedora 20, native and GDBserver. This adds an exhaustive test that switches between many different combinations of watchpoint types and addresses and widths. gdb/ 2014-06-23 Pedro Alves <palves@redhat.com> * amd64-linux-nat.c (amd64_linux_prepare_to_resume): Clear DR_CONTROL before setting DR0..DR3. * i386-linux-nat.c (i386_linux_prepare_to_resume): Likewise. * nat/i386-dregs.c (i386_remove_aligned_watchpoint): Clear all bits of DR_CONTROL related to the debug register slot being disabled. If all slots are vacant, clear local slowdown as well, and assert DR_CONTROL is 0. gdb/gdbserver/ 2014-06-23 Pedro Alves <palves@redhat.com> * linux-x86-low.c (x86_linux_prepare_to_resume): Clear DR_CONTROL before setting DR0..DR3. gdb/testsuite/ 2014-06-23 Pedro Alves <palves@redhat.com> * gdb.base/watchpoint-reuse-slot.c: New file. * gdb.base/watchpoint-reuse-slot.exp: New file.
2014-06-23Align behavior of xmethod commands with that of pretty-printer commands.Siva Chandra4-11/+25
Currently, the xmethod commands lookup xmethod matchers in the current progspace even if the locus regular expression matches the progspace's filename. Pretty printer commands do not match the current progspace's filename. gdb/ * python/lib/gdb/command/xmethods.py (get_method_matchers_in_loci): Lookup xmethod matchers in the current progspace only if the string "progspace" matches LOCUS_RE. gdb/testsuite * gdb.python/py-xmethods.exp: Use "progspace" instead of the progspace's filename in 'info', 'enable' and 'disable' command tests.
2014-06-23testsuite: Use istarget and is_lp64_target for 3 testcases.Jan Kratochvil4-2/+13
On x86_64 with -m32 or on i686 it will: Running ./gdb.arch/amd64-stap-special-operands.exp ... gdb compile failed, amd64-stap-triplet.c: Assembler messages: amd64-stap-triplet.c:35: Error: bad register name `%rbp' amd64-stap-triplet.c:38: Error: bad register name `%rsp' amd64-stap-triplet.c:40: Error: bad register name `%rbp)' amd64-stap-triplet.c:41: Error: bad register name `%rsi' amd64-stap-triplet.c:42: Error: bad register name `%rbp)' /tmp/ccjOdmpl.s:63: Error: bad register name `%rbp' 2014-06-23 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.arch/amd64-stap-special-operands.exp: Use is_lp64_target. * gdb.arch/amd64-stap-optional-prefix.exp: Likewise. * gdb.dwarf2/dw2-error.exp: Use istarget and is_lp64_target. Message-ID: <20140622211401.GA3716@host2.jankratochvil.net>
2014-06-20Fix --with-system-readline with readline-6.3 patch 5Jan Kratochvil2-4/+11
I have filed now: --with-system-readline uses bundled readline include files https://sourceware.org/bugzilla/show_bug.cgi?id=17077 To see any effect of the patch below you have to do: rm -rf readline Otherwise readline include files get used the bundled ones from GDB which are currently 6.2 while system readline may be 6.3 already. You also have to use system readline-6.3 including its upstream patch: [Bug-readline] Readline-6.3 Official Patch 5 http://lists.gnu.org/archive/html/bug-readline/2014-04/msg00018.html Message-ID: <140415125618.AA57598.SM@caleb.ins.cwru.edu> In short it happens on Fedora Rawhide since: readline-6.3-1.fc21 https://koji.fedoraproject.org/koji/buildinfo?buildID=538941 The error is: ../../gdb/tui/tui-io.c:132:1: error: 'Function' is deprecated [-Werror=deprecated-declarations] static Function *tui_old_rl_getc_function; ^ ../../gdb/tui/tui-io.c:133:1: error: 'VFunction' is deprecated [-Werror=deprecated-declarations] static VFunction *tui_old_rl_redisplay_function; ^ ../../gdb/tui/tui-io.c:134:1: error: 'VFunction' is deprecated [-Werror=deprecated-declarations] static VFunction *tui_old_rl_prep_terminal; ^ ../../gdb/tui/tui-io.c:135:1: error: 'VFunction' is deprecated [-Werror=deprecated-declarations] static VFunction *tui_old_rl_deprep_terminal; ^ It is since bash change: lib/readline/rltypedefs.h - remove old Function/VFunction/CPFunction/CPPFunction typedefs as suggested by Tom Tromey <tromey@redhat.com> The new typedefs used below are present in readline/rltypedefs.h since: git://git.savannah.gnu.org/bash.git commit 28ef6c316f1aff914bb95ac09787a3c83c1815fd Date: Fri Apr 6 19:14:31 2001 +0000 gdb/ 2014-06-20 Jan Kratochvil <jan.kratochvil@redhat.com> Fix --with-system-readline with readline-6.3 patch 5. * tui/tui-io.c (tui_old_rl_getc_function, tui_old_rl_redisplay_function) (tui_old_rl_prep_terminal, tui_old_rl_deprep_terminal): Use rl_*_t types. Message-ID: <20140620105004.GA22236@host2.jankratochvil.net>
2014-06-20make obstack object allocators more type-safeTom Tromey3-4/+10
This changes OBSTACK_ZALLOC and OBSTACK_CALLOC to cast their value to the correct type. This is more type-safe and also is more in line with the other object-allocation macros in libiberty.h. Making this change revealed one trivial error in dwarf2read.c. On the whole that seems pretty good to me. Tested by rebuilding. 2014-06-20 Tom Tromey <tromey@redhat.com> * dwarf2read.c (dw2_get_real_path): Use correct type in OBSTACK_CALLOC. * gdb_obstack.h (OBSTACK_ZALLOC, OBSTACK_CALLOC): Cast result.
2014-06-20Fix mingw32 build on x86-64 RHEL 6.5Gary Benson4-32/+7
This commit fixes the mingw32 build on x86-64 RHEL 6.5. gdb/gdbserver/ 2014-06-20 Gary Benson <gbenson@redhat.com> * configure.ac (AC_REPLACE_FUNCS) <vasprintf, vsnprintf>: Removed. * configure: Regenerated. * config.in: Likewise.
2014-06-20Move shared native target specific code to gdb/natGary Benson38-74/+117
https://sourceware.org/gdb/wiki/Common describes the following directory structure: gdb/nat/ Native target backend files. Code that interfaces with the host debug API. E.g., ptrace code, Windows debug API code, procfs code should go here. gdb/target/ Host-independent, target vector specific code (target_ops). gdb/common/ All other shared code. This commit moves all native target backend files currently in gdb/common to gdb/nat. gdb/ 2014-06-20 Gary Benson <gbenson@redhat.com> * common/gdb_thread_db.h: Moved to nat. All includes updated. * common/glibc_thread_db.h: Likewise. * common/i386-cpuid.h: Likewise. * common/i386-gcc-cpuid.h: Likewise. * common/linux-btrace.h: Likewise. * common/linux-osdata.h: Likewise. * common/linux-procfs.h: Likewise. * common/linux-ptrace.h: Likewise. * common/mips-linux-watch.h: Likewise. * common/linux-btrace.c: Moved to nat. * common/linux-osdata.c: Likewise. * common/linux-procfs.c: Likewise. * common/linux-ptrace.c: Likewise. * common/mips-linux-watch.c: Likewise. * nat/gdb_thread_db.h: Moved from common. * nat/glibc_thread_db.h: Likewise. * nat/i386-cpuid.h: Likewise. * nat/i386-gcc-cpuid.h: Likewise. * nat/linux-btrace.c: Likewise. * nat/linux-btrace.h: Likewise. * nat/linux-osdata.c: Likewise. * nat/linux-osdata.h: Likewise. * nat/linux-procfs.c: Likewise. * nat/linux-procfs.h: Likewise. * nat/linux-ptrace.c: Likewise. * nat/linux-ptrace.h: Likewise. * nat/mips-linux-watch.c: Likewise. * nat/mips-linux-watch.h: Likewise. * Makefile.in (HFILES_NO_SRCDIR): Reflect new locations. (object file files): Reordered. * gdb/copyright.py (EXCLUDE_LIST): Reflect new location of glibc_thread_db.h. gdb/gdbserver/ 2014-06-20 Gary Benson <gbenson@redhat.com> * Makefile.in (SFILES): Update locations for files moved from common to nat. (object file files): Reordered. gdb/testsuite/ 2014-06-20 Gary Benson <gbenson@redhat.com> * gdb.arch/i386-avx.exp: Fix include file location. * gdb.arch/i386-sse.exp: Likewise.
2014-06-20Vectorize gdbserver x86 debug register accessorsGary Benson8-128/+154
This commit makes gdbserver access the x86 debug register accessor functions via the same function vector as GDB proper. This removes a chunk of conditional code that was previously in i386-{nat,low}.h and leaves a single macro as the only GDB/gdbserver difference in nat/i386-dregs.c. gdb/ 2014-06-20 Gary Benson <gbenson@redhat.com> * i386-nat.h (debug_hw_points): Moved to nat/i386-dregs.c. (i386_dr_low_type): Moved to nat/i386-dregs.h. (i386_dr_low): Likewise. (i386_dr_low_can_set_addr): Moved to nat/i386-dregs.c. (i386_dr_low_set_addr): Likewise. (i386_dr_low_get_addr): Likewise. (i386_dr_low_can_set_control): Likewise. (i386_dr_low_set_control): Likewise. (i386_dr_low_get_control): Likewise. (i386_dr_low_get_status): Likewise. (i386_get_debug_register_length): Likewise. * nat/i386-dregs.h (i386_dr_low_type): Moved from i386-nat.h. (i386_dr_low): Likewise. * nat/i386-dregs.c (i386-low.h): Remove include. (i386-nat.h): Likewise. (nat/i386-dregs.h): New include. (i386_dr_low_can_set_addr): Moved from i386-nat.h. (i386_dr_low_set_addr): Likewise. (i386_dr_low_get_addr): Likewise. (i386_dr_low_can_set_control): Likewise. (i386_dr_low_set_control): Likewise. (i386_dr_low_get_control): Likewise. (i386_dr_low_get_status): Likewise. (i386_get_debug_register_length): Likewise. (debug_hw_points): Likewise. gdb/gdbserver/ 2014-06-20 Gary Benson <gbenson@redhat.com> * i386-low.h (i386_dr_low_can_set_addr): Removed. (i386_dr_low_set_addr): Likewise. (i386_dr_low_get_addr): Likewise. (i386_dr_low_can_set_control): Likewise. (i386_dr_low_set_control): Likewise. (i386_dr_low_get_control): Likewise. (i386_dr_low_get_status): Likewise. (i386_get_debug_register_length): Likewise. * linux-x86-low.c (i386_dr_low_set_addr): Changed signature. Made static. (i386_dr_low_get_addr): Likewise. (i386_dr_low_set_control): Likewise. (i386_dr_low_get_control): Likewise. (i386_dr_low_get_status): Likewise. (i386_dr_low): New global variable. * win32-i386-low.c (i386_dr_low_set_addr): Changed signature. Made static. (i386_dr_low_get_addr): Likewise. (i386_dr_low_set_control): Likewise. (i386_dr_low_get_control): Likewise. (i386_dr_low_get_status): Likewise. (i386_dr_low): New global variable.
2014-06-20Fix gdbserver cross build.Marcus Shawcroft4-0/+102
The recent libiberty patch caused issues when cross building gdbserver. The Makefile ends invoking the build machine's "ar" instead of the --host version: ar ./libiberty.a \ ./regex.o (...) ar: illegal option -- . Usage: ar [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file... ar -M [<mri-script] The libiberty configure script does probe for and finds an appropriate AR. However, gdbserver's configure does not probe for AR and overrides the AR used in the libiberty build by explicitly passing AR to the sub-builds. gdb/gdbserver/ 2014-06-20 Marcus Shawcroft <marcus.shawcroft@arm.com> * configure.ac: Invoke. AC_CHECK_TOOL(AR, ar). * Makefile.in (AR, AR_FLAGS): Define. * configure: Regenerate.
2014-06-19Initial pass at D language expression parser support.Iain Buclaw7-8/+1808
gdb/ 2014-06-05 Iain Buclaw <ibuclaw@gdcproject.org> * Makefile.in (SFILES): Add d-exp.y. (YYFILES): Add d-exp.c. (YYOBJ): Add d-exp.o. (local-maintainer-clean): Delete d-exp.c. * d-exp.y: New file. * d-lang.h (d_parse): New declaration. (d_error): New declaration. * d-lang.c (d_op_print_tab): Add entry for BINOP_CONCAT and BINOP_EXP. Set BINOP_EQUAL and BINOP_NOTEQUAL to same precedence as other PREC_ORDER operators. (d_language_defn): Use d_parse, d_error instead of c_parse, c_error. gdb/testsuite/ 2014-06-05 Iain Buclaw <ibuclaw@gdcproject.org> * gdb.dlang/expression.exp: New file.
2014-06-19Remove any_runningYao Qi3-15/+5
Function any_running isn't used. This patch is to remove it. Rebuild GDB for linux and mingw. gdb: 2014-06-19 Yao Qi <yao@codesourcery.com> * gdbthread.h (any_running): Remove the declaration. * thread.c (any_running): Remove.
2014-06-19Use enum thread_stateYao Qi2-8/+11
This patch is to change field state's type to 'enum thread_state', and replace RUNNING with THREAD_RUNNING and STOPPED with THREAD_STOPPED respectively in comments. gdb: 2014-06-19 Yao Qi <yao@codesourcery.com> * gdbthread.h (struct thread_info) <state>: Change its type to 'enum thread_state'. Update comments.
2014-06-19Fix next over threaded execl with "set scheduler-locking step".Pedro Alves9-30/+69
Running gdb.threads/thread-execl.exp with scheduler-locking set to "step" reveals a problem: (gdb) next^M [Thread 0x7ffff7fda700 (LWP 27168) exited]^M [New LWP 27168]^M [Thread 0x7ffff74ee700 (LWP 27174) exited]^M process 27168 is executing new program: /home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.threads/thread-execl^M [Thread debugging using libthread_db enabled]^M Using host libthread_db library "/lib64/libthread_db.so.1".^M infrun.c:5225: internal-error: switch_back_to_stepped_thread: Assertion `!schedlock_applies (1)' failed.^M A problem internal to GDB has been detected,^M further debugging may prove unreliable.^M Quit this debugging session? (y or n) FAIL: gdb.threads/thread-execl.exp: schedlock step: get to main in new image (GDB internal error) The assertion is correct. The issue is that GDB is mistakenly trying to switch back to an exited thread, that was previously stepping when it exited. This is exactly the sort of thing the test wants to make sure doesn't happen: # Now set a breakpoint at `main', and step over the execl call. The # breakpoint at main should be reached. GDB should not try to revert # back to the old thread from the old image and resume stepping it We don't see this bug with schedlock off only because a different sequence of events makes GDB manage to delete the thread instead of marking it exited. This particular internal error can be fixed by making the loop over all threads in switch_back_to_stepped_thread skip exited threads. But, looking over other ALL_THREADS users, all either can or should be skipping exited threads too. So for simplicity, this patch replaces ALL_THREADS with a new macro that skips exited threads itself, and updates everything to use it. Tested on x86_64 Fedora 20. gdb/ 2014-06-19 Pedro Alves <palves@redhat.com> * gdbthread.h (ALL_THREADS): Delete. (ALL_NON_EXITED_THREADS): New macro. * btrace.c (btrace_free_objfile): Use ALL_NON_EXITED_THREADS instead of ALL_THREADS. * infrun.c (find_thread_needs_step_over) (switch_back_to_stepped_thread): Use ALL_NON_EXITED_THREADS instead of ALL_THREADS. * record-btrace.c (record_btrace_open) (record_btrace_stop_recording, record_btrace_close) (record_btrace_is_replaying, record_btrace_resume) (record_btrace_find_thread_to_move, record_btrace_wait): Likewise. * remote.c (append_pending_thread_resumptions): Likewise. * thread.c (thread_apply_all_command): Likewise. gdb/testsuite/ 2014-06-19 Pedro Alves <palves@redhat.com> * gdb.threads/thread-execl.exp (do_test): New procedure, factored out from ... (top level): ... here. Iterate running tests under different scheduler-locking settings.
2014-06-19Directly call i386-dregs functionsGary Benson2-6/+21
Three target_ops functions in i386-nat.c call other local target_ops functions. This commit changes those functions to call the functions in i386-dregs.c directly. gdb/ 2014-06-19 Gary Benson <gbenson@redhat.com> * i386-nat.c (i386_stopped_by_watchpoint): Use i386_dr_stopped_by_watchpoint. (i386_insert_hw_breakpoint): Use i386_dr_insert_watchpoint. (i386_remove_hw_breakpoint): Use i386_dr_remove_watchpoint.
2014-06-19Create nat/i386-dregs.cGary Benson19-1133/+752
This commit moves code to be shared from i386-{nat,low}.[ch] into a new file, nat/i386-dregs.c. gdb/ 2014-06-19 Gary Benson <gbenson@redhat.com> * nat/i386-dregs.c: New file. * Makefile.in (i386-dregs.o): New rule. * config/i386/cygwin.mh (NATDEPFILES): Add i386-dregs.o. * config/i386/cygwin64.mh (NATDEPFILES): Likewise. * config/i386/darwin.mh (NATDEPFILES): Likewise. * config/i386/fbsd.mh (NATDEPFILES): Likewise. * config/i386/fbsd64.mh (NATDEPFILES): Likewise. * config/i386/go32.mh (NATDEPFILES): Likewise. * config/i386/linux.mh (NATDEPFILES): Likewise. * config/i386/linux64.mh (NATDEPFILES): Likewise. * config/i386/mingw.mh (NATDEPFILES): Likewise. * config/i386/mingw64.mh (NATDEPFILES): Likewise. * i386-nat.h (debug_hw_points): New declaration. * i386-nat.c (breakpoint.h): Remove include. (command.h): Likewise. (target.h): Likewise. (gdb_assert.h): Likewise. (debug_hw_points): Made nonstatic. (debug_printf): Now in i386-dregs.c. (TARGET_HAS_DR_LEN_8): Likewise. (DR_CONTROL_SHIFT): Likewise. (DR_CONTROL_SIZE): Likewise. (DR_RW_EXECUTE): Likewise. (DR_RW_WRITE): Likewise. (DR_RW_READ): Likewise. (DR_RW_IORW): Likewise. (DR_LEN_1): Likewise. (DR_LEN_2): Likewise. (DR_LEN_4): Likewise. (DR_LEN_8): Likewise. (DR_LOCAL_ENABLE_SHIFT): Likewise. (DR_GLOBAL_ENABLE_SHIFT): Likewise. (DR_ENABLE_SIZE): Likewise. (DR_LOCAL_SLOWDOWN): Likewise. (DR_GLOBAL_SLOWDOWN): Likewise. (DR_CONTROL_RESERVED): Likewise. (I386_DR_CONTROL_MASK): Likewise. (I386_DR_VACANT): Likewise. (I386_DR_LOCAL_ENABLE): Likewise. (I386_DR_GLOBAL_ENABLE): Likewise. (I386_DR_DISABLE): Likewise. (I386_DR_SET_RW_LEN): Likewise. (I386_DR_GET_RW_LEN): Likewise. (I386_DR_WATCH_HIT): Likewise. (i386_wp_op_t): Likewise. (i386_show_dr): Likewise. (i386_length_and_rw_bits): Likewise. (i386_insert_aligned_watchpoint): Likewise. (i386_remove_aligned_watchpoint): Likewise. (i386_handle_nonaligned_watchpoint): Likewise. (i386_update_inferior_debug_regs): Likewise. (i386_insert_watchpoint): Use i386_dr_insert_watchpoint. (i386_remove_watchpoint): Use i386_dr_remove_watchpoint. (i386_region_ok_for_watchpoint): Use i386_dr_region_ok_for_watchpoint. (i386_stopped_data_address): Use i386_dr_stopped_data_address. gdb/gdbserver/ 2014-06-19 Gary Benson <gbenson@redhat.com> * Makefile.in (i386-dregs.o): New rule. * configure.srv: Add i386-dregs.o to all targets using i386-low.o. * i386-low.c (target.h): Remove include. (TARGET_HAS_DR_LEN_8): Now in i386-dregs.c. (DR_CONTROL_SHIFT): Likewise. (DR_CONTROL_SIZE): Likewise. (DR_RW_EXECUTE): Likewise. (DR_RW_WRITE): Likewise. (DR_RW_READ): Likewise. (DR_RW_IORW): Likewise. (DR_LEN_1): Likewise. (DR_LEN_2): Likewise. (DR_LEN_4): Likewise. (DR_LEN_8): Likewise. (DR_LOCAL_ENABLE_SHIFT): Likewise. (DR_GLOBAL_ENABLE_SHIFT): Likewise. (DR_ENABLE_SIZE): Likewise. (DR_LOCAL_SLOWDOWN): Likewise. (DR_GLOBAL_SLOWDOWN): Likewise. (DR_CONTROL_RESERVED): Likewise. (I386_DR_CONTROL_MASK): Likewise. (I386_DR_VACANT): Likewise. (I386_DR_LOCAL_ENABLE): Likewise. (I386_DR_GLOBAL_ENABLE): Likewise. (I386_DR_DISABLE): Likewise. (I386_DR_SET_RW_LEN): Likewise. (I386_DR_GET_RW_LEN): Likewise. (I386_DR_WATCH_HIT): Likewise. (i386_wp_op_t): Likewise. (i386_show_dr): Likewise. (i386_length_and_rw_bits): Likewise. (i386_insert_aligned_watchpoint): Likewise. (i386_remove_aligned_watchpoint): Likewise. (i386_handle_nonaligned_watchpoint): Likewise. i386_update_inferior_debug_regs(): Likewise. (i386_dr_insert_watchpoint): Likewise. (i386_dr_remove_watchpoint): Likewise. (i386_dr_region_ok_for_watchpoint): Likewise. (i386_dr_stopped_data_address): Likewise. (i386_dr_stopped_by_watchpoint): Likewise.
2014-06-19Refactor i386_{insert,remove}_hw_breakpointGary Benson2-34/+11
This commit refactors i386_{insert,remove}_hw_breakpoint to call i386_{insert,remove}_watchpoint rather than duplicating functionality. gdb/ 2014-06-19 Gary Benson <gbenson@redhat.com> * i386-nat.c (i386_insert_hw_breakpoint): Use i386_insert_watchpoint. (i386_remove_hw_breakpoint): Use i386_remove_watchpoint.
2014-06-19Partially revert 4be83cc2b28ea09aa8ff789839e6520df60836f8Gary Benson5-112/+107
The above commit did two things: 1) A number of functions were renamed and made nonstatic. 2) A number of other functions were renamed only. This commit reverts #1 but not #2. In addition, prototypes for functions now remade static have been removed from i386-dregs.h. gdb/ 2014-06-19 Gary Benson <gbenson@redhat.com> * i386-nat.c (i386_dr_show): Renamed to i386_show_dr and made static. All uses updated. (i386_dr_length_and_rw_bits): Renamed to i386_length_and_rw_bits and made static. All uses updated. (i386_dr_insert_aligned_watchpoint): Renamed to i386_insert_aligned_watchpoint and made static. All uses updated. (i386_dr_remove_aligned_watchpoint): Renamed to i386_remove_aligned_watchpoint and made static. All uses updated. (i386_dr_update_inferior_debug_regs): Renamed to i386_update_inferior_debug_regs and made static. All uses updated. * nat/i386-dregs.h (i386_dr_show): Removed. (i386_dr_length_and_rw_bits): Likewise. (i386_dr_insert_aligned_watchpoint): Likewise. (i386_dr_remove_aligned_watchpoint): Likewise. (i386_dr_update_inferior_debug_regs): Likewise. gdb/gdbserver/ 2014-06-19 Gary Benson <gbenson@redhat.com> * i386-low.c (i386_dr_show): Renamed to i386_show_dr and made static. All uses updated. (i386_dr_length_and_rw_bits): Renamed to i386_length_and_rw_bits and made static. All uses updated. (i386_dr_insert_aligned_watchpoint): Renamed to i386_insert_aligned_watchpoint and made static. All uses updated. (i386_dr_remove_aligned_watchpoint): Renamed to i386_remove_aligned_watchpoint and made static. All uses updated. (i386_dr_update_inferior_debug_regs): Renamed to i386_update_inferior_debug_regs and made static. All uses updated.
2014-06-19Demangler crash handlerGary Benson8-3/+214
This commit wraps calls to the demangler with a segmentation fault handler. The first time a segmentation fault is caught a core file is generated and the user is prompted to file a bug and offered the choice to exit or to continue their GDB session. A maintainence option is provided to allow the user to disable the crash handler if required. gdb/ 2014-06-19 Gary Benson <gbenson@redhat.com> * configure.ac [AC_CHECK_FUNCS] <sigaltstack>: New check. * configure: Regenerate. * config.in: Likewise. * main.c (signal.h): New include. (setup_alternate_signal_stack): New function. (captured_main): Call the above. * cp-support.c (signal.h): New include. (catch_demangler_crashes): New flag. (SIGJMP_BUF): New define. (SIGSETJMP): Likewise. (SIGLONGJMP): Likewise. (gdb_demangle_jmp_buf): New static global. (gdb_demangle_attempt_core_dump): Likewise. (gdb_demangle_signal_handler): New function. (gdb_demangle): If catch_demangler_crashes is set, install the above signal handler before calling bfd_demangle, and restore the original signal handler afterwards. Display the offending symbol and call demangler_warning the first time a segmentation fault is caught. (_initialize_cp_support): New maint set/show command. gdb/doc/ 2014-06-19 Gary Benson <gbenson@redhat.com> * gdb.texinfo (Maintenance Commands): Document new "maint set/show catch-demangler-crashes" option.
2014-06-19Refactor and expose core-dumping functionalityGary Benson3-12/+80
This commit exposes the functions that dump core outside utils.c. can_dump_core gains a new parameter, "limit_kind", to allow either the soft or hard limit to be checked, and its printing has separated into the new function warn_cant_dump_core. The new function can_dump_core_warn does what can_dump_core previously did (print and warn). gdb/ 2014-06-19 Gary Benson <gbenson@redhat.com> * utils.h (resource_limit_kind): New enum. (can_dump_core): New declaration. (warn_cant_dump_core): Likewise. (dump_core): Likewise. * utils.c (dump_core): Made nonstatic. Added new parameter "limit_kind". (can_dump_core): Made nonstatic. Moved printing code to... (warn_cant_dump_core): New function. (can_dump_core_warn): Likewise. (internal_vproblem): Replace calls to can_dump_core with calls to can_dump_core_warn. Supply new argument to each.
2014-06-19Add new internal problem for demangler warningsGary Benson6-46/+134
This commit adds a new category of internal problem for demangler warnings. Demangler warnings behave in much the same way as internal warnings except that they do not create core files and no option to change this is presented to the user. gdb/ 2014-06-19 Gary Benson <gbenson@redhat.com> * utils.h (demangler_vwarning): New declaration. (demangler_warning): Likewise. * utils.c (struct internal_problem) <user_settable_should_quit>: New field. <user_settable_should_dump_core>: Likewise (internal_error_problem): Add values for above new fields. (internal_warning_problem): Likewise. (demangler_warning_problem): New static global. (demangler_vwarning): New function. (demangler_warning): Likewise. (add_internal_problem_command): Selectively add commands. (_initialize_utils): New internal problem command. * maint.c (maintenance_demangler_warning): New function. (_initialize_maint_cmds): New command. gdb/doc/ 2014-06-19 Gary Benson <gbenson@redhat.com> * gdb.texinfo (Maintenance Commands): Document new "maint demangler-warning" command and new "maint set/show demangler-warning" option.
2014-06-19The testcase was generating DW_AT_high_pc and DW_AT_low_pc entriesLuis Machado2-6/+11
with type DW_FORM_string, which is wrong. GDB was using that information to load data as strings, and then proceeded to use the string pointers as addresses. Even then, the test was passing just fine, because we were lucky enough to have the low_pc string pointer smaller than the high_pc string pointer. Two issues are fixed. The first one is the DW_FORM_string type. The second one is adjusting the addresses so that they are non-zero, since GDB doesn't like seeing 0 in these fields due to a check contained in dwarf2_get_pc_bounds: if (low == 0 && !dwarf2_per_objfile->has_section_at_zero) return 0; With both fixes, the testcase passes deterministically. 2014-06-19 Luis Machado <lgustavo@codesourcery.com> * gdb.cp/nsalias.exp: Set type of low_pc and high_pc entries to DW_FORM_addr and use non-zero addresses.
2014-06-18make common_block constTom Tromey3-2/+8
This changes general_symbol_info to make "common_block" const. 2014-06-18 Tom Tromey <tromey@redhat.com> * f-valprint.c (info_common_command_for_block): Update. * symtab.h (struct general_symbol_info) <common_block>: Now const.
2014-06-18constify some blockvector APIsTom Tromey18-52/+89
Generally, the blockvector ought to be readonly. So, this patch makes the blockvector const in the symtab, and also changes various blockvector APIs to be const. This patch has a couple of spots that cast away const. I consider these to be ok because they occur in mdebugread and are used while constructing the blockvector. I have added comments at these spots. 2014-06-18 Tom Tromey <tromey@redhat.com> * symtab.h (struct symtab) <blockvector>: Now const. * ada-lang.c (ada_add_global_exceptions): Update. * buildsym.c (augment_type_symtab): Update. * dwarf2read.c (dw2_lookup_symbol): Update. * jit.c (finalize_symtab): Update. * jv-lang.c (add_class_symtab_symbol): Update. * mdebugread.c (parse_symbol, add_block, sort_blocks, new_symtab): Update. * objfiles.c (objfile_relocate1): Update. * psymtab.c (lookup_symbol_aux_psymtabs) (maintenance_check_psymtabs): Update. * python/py-symtab.c (stpy_global_block, stpy_static_block): Update. * spu-tdep.c (spu_catch_start): Update. * symmisc.c (dump_symtab_1): Update. * symtab.c (lookup_global_symbol_from_objfile) (lookup_symbol_aux_objfile, lookup_symbol_aux_quick) (basic_lookup_transparent_type_quick) (basic_lookup_transparent_type, find_pc_sect_symtab) (find_pc_sect_line, search_symbols): Update. * block.c (find_block_in_blockvector): Make "bl" const. (blockvector_for_pc_sect, blockvector_for_pc): Make return type const. (blockvector_contains_pc): Make "bv" const. (block_for_pc_sect): Update. * block.h (blockvector_for_pc, blockvector_for_pc_sect) (blockvector_contains_pc): Update. * breakpoint.c (resolve_sal_pc): Update. * inline-frame.c (block_starting_point_at): Update.
2014-06-18constify complete_lineTom Tromey3-2/+7
This changes complete_line to take a const parameter. 2014-06-18 Tom Tromey <tromey@redhat.com> * completer.c (complete_line): Make "line_buffer" const. * completer.h (complete_line): Update.
2014-06-18remove unneeded cast in symtab.cTom Tromey2-1/+5
This removes an unneeded const cast from symtab.c:add_macro_name. 2014-06-18 Tom Tromey <tromey@redhat.com> * symtab.c (add_macro_name): Remove unneeded cast.
2014-06-18constify parse_cli_boolean_valueTom Tromey3-2/+7
This changes a parameter of parse_cli_boolean_value to be const. 2014-06-18 Tom Tromey <tromey@redhat.com> * cli/cli-setshow.h (parse_cli_boolean_value): Update. * cli/cli-setshow.c (parse_cli_boolean_value): Make "arg" const.
2014-06-18constify probe.c functionTom Tromey3-5/+11
This constifies an argument to info_probes_for_ops. 2014-06-18 Tom Tromey <tromey@redhat.com> * probe.c (info_probes_for_ops): Make "arg" const. * probe.h (info_probes_for_ops): Update.
2014-06-18constify struct block in some placesTom Tromey32-75/+133
This makes some spots in gdb, particularly general_symbol_info, use a "const struct block", then fixes the fallout. The justification is that, ordinarily, blocks ought to be readonly. Note though that we can't add "const" in the blockvector due to block relocation. This can be done once blocks are made independent of the program space. 2014-06-18 Tom Tromey <tromey@redhat.com> * varobj.c (varobj_create): Update. * valops.c (value_of_this): Update. * tracepoint.c (add_local_symbols, scope_info): Update. * symtab.h (struct general_symbol_info) <block>: Now const. * symtab.c (skip_prologue_sal) (default_make_symbol_completion_list_break_on) (skip_prologue_using_sal): Update. * stack.h (iterate_over_block_locals) (iterate_over_block_local_vars): Update. * stack.c (print_frame_args): Update. (iterate_over_block_locals, iterate_over_block_local_vars): Make parameter const. (get_selected_block): Make return type const. * python/py-frame.c (frapy_block): Update. * python/py-block.c (gdbpy_block_for_pc): Update. * p-exp.y (%union) <bval>: Now const. * mi/mi-cmd-stack.c (list_args_or_locals): Update. * mdebugread.c (mylookup_symbol, parse_procedure): Update. * m2-exp.y (%union) <bval>: Now const. * linespec.c (get_current_search_block): Make return type const. (create_sals_line_offset, find_label_symbols): Update. * inline-frame.c (inline_frame_sniffer, skip_inline_frames): Update. (block_starting_point_at): Make "block" const. * infrun.c (insert_exception_resume_breakpoint): Make "b" const. (check_exception_resume): Update. * guile/scm-frame.c (gdbscm_frame_block): Update. * guile/scm-block.c (gdbscm_lookup_block): Update. * frame.h (get_frame_block): Update. (get_selected_block): Make return type const. * frame.c (frame_id_inner): Update. * f-valprint.c (info_common_command_for_block) (info_common_command): Update. * dwarf2loc.c (dwarf2_find_location_expression) (dwarf_expr_frame_base, dwarf2_compile_expr_to_ax) (locexpr_describe_location_piece): Update. * c-exp.y (%union) <bval>: Now const. * breakpoint.c (resolve_sal_pc): Update. * blockframe.c (get_frame_block):Make return type const. (get_pc_function_start, get_frame_function, find_pc_sect_function) (block_innermost_frame): Update. * block.h (blockvector_for_pc, blockvector_for_pc_sect) (block_for_pc, block_for_pc_sect): Update. * block.c (blockvector_for_pc_sect, blockvector_for_pc): Make 'pblock' const. (block_for_pc_sect, block_for_pc): Make return type const. * ax-gdb.c (gen_expr): Update. * alpha-mdebug-tdep.c (find_proc_desc): Update. * ada-lang.c (ada_read_renaming_var_value): Make 'block' const. (ada_make_symbol_completion_list, ada_add_exceptions_from_frame) (ada_read_var_value): Update. * ada-exp.y (struct name_info) <block>: Now const. (%union): Likewise. (block_lookup): Constify.
2014-06-18Make xmethods tests not to depend on inferior IO.Siva Chandra3-25/+70
gdb/testsuite/ PR gdb/17017 * gdb.python/py-xmethods.cc: Add global function call counters and increment them in their respective functions. Remove "cout" statements. * gdb.python/py-xmethods.exp: Make tests check the global function call counters instead of depending on inferior IO.
2014-06-18Move macros from i386-{nat,low}.c to i386-{nat,low}.hGary Benson5-24/+46
This commit moves macros required by the soon-to-be-created nat/i386-dregs.c into i386-{nat,low}.h.
2014-06-18Create nat/i386-dregs.hGary Benson8-100/+173
This commit moves code to be shared from i386-{nat,low}.[ch] into a new file, nat/i386-dregs.h. gdb/ 2014-06-18 Gary Benson <gbenson@redhat.com> * nat/i386-dregs.h: New file. * Makefile.in (HFILES_NO_SRCDIR): Add the above. * i386-nat.h (i386-dregs.h): New include. (DR_FIRSTADDR): Now in i386-dregs.h. (DR_LASTADDR): Likewise. (DR_NADDR): Likewise. (DR_STATUS): Likewise. (DR_CONTROL): Likewise. (i386_debug_reg_state): Likewise. * i386-nat.c (ALL_DEBUG_REGISTERS): Likewise. gdb/gdbserver/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-low.h (i386-dregs.h): New include. (DR_FIRSTADDR): Now in i386-dregs.h. (DR_LASTADDR): Likewise. (DR_NADDR): Likewise. (DR_STATUS): Likewise. (DR_CONTROL): Likewise. (i386_debug_reg_state): Likewise. (i386_dr_insert_watchpoint): Likewise. (i386_dr_remove_watchpoint): Likewise. (i386_dr_region_ok_for_watchpoint): Likewise. (i386_dr_stopped_data_address): Likewise. (i386_dr_stopped_by_watchpoint): Likewise. * i386-low.c (ALL_DEBUG_REGISTERS): Likewise.
2014-06-18Symptom:Luis Machado5-72/+182
Using the test program gdb.base/foll-fork.c, with follow-fork-mode set to "child" and detach-on-fork set to "off", stepping or running past the fork call results in the child process running to completion, when it should just finish the single step. In addition, the breakpoint is not removed from the parent process, so if it is resumed it receives a SIGTRAP. Cause: No matter what the setting for detach-on-fork, when stepping past a fork, the single-step breakpoint (step_resume_breakpoint) is not handled correctly in the parent. The SR breakpoint is cloned for the child process, but before the clone is associated with the child it is treated as a duplicate of the original, associated wth the parent. This results in the insertion state of the original SR breakpoint and the clone being "swapped" by breakpoint.c:update_global_location_list, so that the clone is marked as inserted. In the case where the parent is not detached, the two breakpoints remain in that state. The breakpoint is never inserted in the child, because although the cloned SR breakpoint is associated with the child, it is marked as inserted. When the child is resumed, it runs to completion. The breakpoint is never removed from the parent, so that if it is resumed after the child exits, it gets a SIGTRAP. Here is the sequence of events: 1) handle_inferior_event: FORK event is recognized. 2) handle_inferior_event: detach_breakpoints removes all breakpoints from the child. 3) follow_fork: the parent SR breakpoint is cloned. Part of this procedure is to call update_global_location_list, which swaps the insertion state of the original and cloned SR breakpoints as part of ensuring that duplicate breakpoints are only inserted once. At this point the original SR breakpoint is not marked as inserted, and the clone is. The breakpoint is actually inserted in the parent but not the child. 4) follow_fork: the original breakpoint is deleted by calling delete_step_resume_breakpoint. Since the original is not marked as inserted, the actual breakpoint remains in the parent process. update_global_location_list is called again as part of the deletion. The clone is still associated with the parent, but since it is marked as enabled and inserted, the breakpoint is left in the parent. 5) follow_fork: if detach-on-fork is 'on', the actual breakpoint will be removed from the parent in target_detach, based on the cloned breakpoint still associated with the parent. Then the clone is no longer marked as inserted. In follow_inferior_reset_breakpoints the clone is associated with the child, and can be inserted. If detach-on-fork is 'off', the actual breakpoint in the parent is never removed (although the breakpoint had been deleted from the list). Since the clone continues to be marked 'inserted', the SR breakpoint is never inserted in the child. Fix: Set the cloned breakpoint as disabled from the moment it is created. This is done by modifying clone_momentary_breakpoint to take an additional argument, LOC_ENABLED, which is used as the value of the bp_location->enabled member. The clone must be disabled at that point because clone_momentary_breakpoint calls update_global_location_list, which will swap treat the clone as a duplicate of the original breakpoint if it is enabled. All the calls to clone_momentary_breakpoint had to be modified to pass '1' or '0'. I looked at implementing an enum for the enabled member, but concluded that readability would suffer because there are so many places it is used as a boolean, e.g. "if (bl->enabled)". In follow_inferior_reset_breakpoints the clone is set to enabled once it has been associated with the child process. With this, the bp_location 'inserted' member is maintained correctly throughout the follow-fork procedure and the behavior is as expected. The same treatment is given to the exception_resume_breakpoint when following a fork. Testing: Ran 'make check' on Linux x64. Along with the fix above, the coverage of the follow-fork test gdb.base/foll-fork.exp was expanded to: 1) cover all the combinations of values for follow-fork-mode and detach-on-fork 2) make sure that both user breakpoints and single-step breakpoints are propagated correctly to the child 3) check that the inferior list has the expected contents after following the fork. 4) check that unfollowed, undetached inferiors can be resumed. gdb/ 2014-06-18 Don Breazeal <donb@codesourcery.com> * breakpoint.c (set_longjmp_breakpoint): Call momentary_breakpoint_from_master with additional argument. (set_longjmp_breakpoint_for_call_dummy): Call momentary_breakpoint_from_master with additional argument. (set_std_terminate_breakpoint): Call momentary_breakpoint_from_master with additional argument. (momentary_breakpoint_from_master): Add argument to function definition and use it to initialize structure member flag. (clone_momentary_breakpoint): Call momentary_breakpoint_from_master with additional argument. * infrun.c (follow_inferior_reset_breakpoints): Clear structure member flags set in momentary_breakpoint_from_master. gdb/testsuite/ 2014-06-18 Don Breazeal <donb@codesourcery.com> * gdb.base/foll-fork.exp (default_fork_parent_follow): Deleted procedure. (explicit_fork_parent_follow): Deleted procedure. (explicit_fork_child_follow): Deleted procedure. (test_follow_fork): New procedure. (do_fork_tests): Replace calls to deleted procedures with calls to test_follow_fork and reset GDB for subsequent procedure calls.
2014-06-18Rename functions and make nonstatic as necessaryGary Benson7-105/+160
This commit renames the functions that are to be shared. Functions to be shared that were static are made nonstatic. gdb/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-nat.c (i386_show_dr): Renamed to i386_dr_show and made nonstatic. All uses updated. (i386_length_and_rw_bits): Renamed to i386_dr_length_and_rw_bits and made nonstatic. All uses updated. (i386_insert_aligned_watchpoint): Renamed to i386_dr_insert_aligned_watchpoint and made nonstatic. All uses updated. (i386_remove_aligned_watchpoint): Renamed to i386_dr_remove_aligned_watchpoint and made nonstatic. All uses updated. (i386_update_inferior_debug_regs): Renamed to i386_dr_update_inferior_debug_regs and made nonstatic. All uses updated. gdb/gdbserver/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-low.h (i386_low_insert_watchpoint): Renamed to i386_dr_insert_watchpoint. (i386_low_remove_watchpoint): Renamed to i386_dr_remove_watchpoint. (i386_low_region_ok_for_watchpoint): Renamed to i386_dr_region_ok_for_watchpoint. (i386_low_stopped_data_address): Renamed to i386_dr_stopped_data_address. (i386_low_stopped_by_watchpoint): Renamed to i386_dr_stopped_by_watchpoint. * i386-low.c (i386_show_dr): Renamed to i386_dr_show and made nonstatic. All uses updated. (i386_length_and_rw_bits): Renamed to i386_dr_length_and_rw_bits and made nonstatic. All uses updated. (i386_insert_aligned_watchpoint): Renamed to i386_dr_insert_aligned_watchpoint and made nonstatic. All uses updated. (i386_remove_aligned_watchpoint): Renamed to i386_dr_remove_aligned_watchpoint and made nonstatic. All uses updated. (i386_update_inferior_debug_regs): Renamed to i386_dr_update_inferior_debug_regs and made nonstatic. All uses updated. (i386_low_insert_watchpoint): Renamed to i386_dr_insert_watchpoint. All uses updated. (i386_low_remove_watchpoint): Renamed to i386_dr_remove_watchpoint. All uses updated. (i386_low_region_ok_for_watchpoint): Renamed to i386_dr_region_ok_for_watchpoint. All uses updated. (i386_low_stopped_data_address): Renamed to i386_dr_stopped_data_address. All uses updated. (i386_low_stopped_by_watchpoint): Renamed to i386_dr_stopped_by_watchpoint. All uses updated.
2014-06-18Abstract i386_dr_low accessGary Benson4-6/+44
This commit adds macros to abstract access to the i386_dr_low function vector used by i386-nat.c. The macros are named so as to match the names of the functions that do the same work in gdbserver. gdb/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-nat.c (i386_dr_low_can_set_addr): New macro. (i386_dr_low_can_set_control): Likewise. (i386_dr_low_set_addr): Likewise. (i386_dr_low_set_control): Likewise. (i386_dr_low_get_addr): Likewise. (i386_dr_low_get_status): Likewise. (i386_dr_low_get_control): Likewise. (i386_insert_aligned_watchpoint): Use new macros. (i386_update_inferior_debug_regs): Likewise. (i386_stopped_data_address): Likewise. gdb/gdbserver/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-low.c (i386_dr_low_can_set_addr): New macro. (i386_dr_low_can_set_control): Likewise. (i386_insert_aligned_watchpoint): New check.
2014-06-18Merge i386_update_inferior_debug_regsGary Benson4-15/+24
This commit synchronizes the i386_update_inferior_debug_regs functions in i386-nat.c and i386-low.c. gdb/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-nat.c (i386_update_inferior_debug_regs) <state>: New parameter. All uses updated. gdb/gdbserver/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-low.c (i386_update_inferior_debug_regs) <inf_state>: Renamed to state.
2014-06-18Rename maint_show_dr to debug_hw_pointsGary Benson2-10/+15
This commit renames maint_show_dr to debug_hw_points in i386-nat.c. gdb/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-nat.c (maint_show_dr): Renamed to debug_hw_points. All uses updated.
2014-06-18Merge error handlingGary Benson2-9/+16
This commit makes all error handling in i386-low.c use internal_error rather than fatal and error. gdb/gdbserver/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-low.c (i386_length_and_rw_bits): Use internal_error instead of fatal and error. (i386_handle_nonaligned_watchpoint): Likewise.
2014-06-18Merge printing codeGary Benson4-47/+73
This commit synchronizes the debug printing code in i386-nat.c and i386-low.c. gdb/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-nat.c (debug_printf): New macro. (i386_get_debug_register_length): Likewise. (TARGET_HAS_DR_LEN_8): Use above macro. (i386_show_dr): Use debug_printf instead of puts_unfiltered and printf_unfiltered. Use phex to format values. gdb/gdbserver/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-low.c (i386_get_debug_register_length): New macro. (TARGET_HAS_DR_LEN_8): Remove conditional. Use above macro. (i386_show_dr): Use debug_printf instead of fprintf. Use phex to format values.
2014-06-18Add a constGary Benson2-1/+6
This commit adds a const that was in i386-low.c but not in i386-nat.c. gdb/ 2014-06-18 Gary Benson <gbenson@redhat.com> * i386-nat.c (i386_handle_nonaligned_watchpoint) <size_try_array>: Make const.