aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2014-03-12inf-child.c: Update comments.Pedro Alves2-10/+21
This file is no longer used exclusively by Unix targets anymore. gdb/ 2014-03-12 Pedro Alves <palves@redhat.com> * inf-child.c: Update top comment to not mention Unix. Add generic comment describing how this target is meant to be used. (inf_child_post_attach, inf_child_post_startup_inferior) (inf_child_follow_fork, inf_child_pid_to_exec_file): Don't mention Unix in comment.
2014-03-12Make the nto-procfs.c target inherit inf-child.c.Pedro Alves2-73/+59
So that all native targets inherit a single "superclass". Target methods that are set to or do the same as inf-child.c's are removed. Not tested. gdb/ 2014-03-12 Pedro Alves <palves@redhat.com> * nto-procfs.c: Include inf-child.h. (procfs_ops): Delete global. (procfs_can_run): Delete method. (procfs_detach, procfs_mourn_inferior): Unpush the passed in target pointer instead of referencing procfs_ops. (procfs_prepare_to_store): Delete. (init_procfs_ops): Delete function. (procfs_target): New function, based on init_procfs_ops, but inherit inf_child_target. (_initialize_procfs): Use procfs_target.
2014-03-12Make the windows-nat.c target inherit inf-child.c.Pedro Alves2-78/+58
So that all native targets inherit a single "superclass". Target methods that are set to or do the same as inf-child.c's are removed. Tested by cross building on Fedora 17, and then confirming that ./gdb.exe ./gdb.exe -ex "set pagination off" -ex "start" under Wine still works. Also, Joel tested this with Adacore's internal testsuite. gdb/ 2014-03-12 Pedro Alves <palves@redhat.com> * windows-nat.c: Include inf-child.h. (windows_ops): Delete global. (windows_open, windows_prepare_to_store, windows_can_run): Delete methods. (init_windows_ops): Delete function. (windows_target): New function, based on init_windows_ops, but inherit inf_child_target. (_initialize_windows_nat): Use windows_target. Install x86 specific target methods here.
2014-03-12Mention PR gdb/16696 in corresponding ChangeLog entry.Pedro Alves1-0/+1
2014-03-12Add myself as the maintainer for the MSP430 sim.Nick Clifton2-0/+5
2014-03-12Fix compile time warnings about unused variables 'yyinput' and 'input'.Dmitry Gorbachev2-2/+7
PR binutils/16567 * deflex.l: Add noinput and nounput options.
2014-03-12autoreconfAlan Modra19-14/+64
Regenerate Makefile.in in bfd, binutils, gas, gold, gprof, ld, opcodes. Regenerate gas/config.in.
2014-03-12objcopy/strip ELF program header p_vaddr confusionAlan Modra2-2/+9
copy_elf_program_header has logic to reject non-alloc sections when calculating p_vaddr offset for padding, but blithely assumed the first section in a segment was allocated. PR 16690 * elf.c (copy_elf_program_header): Ignore first section lma if non-alloc.
2014-03-12daily updateAlan Modra1-1/+1
2014-03-11intptr_t type definition neededAlan Modra3-0/+8
coffcode.h uses an intptr_t cast inside an #ifdef RS6000COFF_C, so ensure that intptr_t is defined. We don't see this when cross-compiling from linux due to intptr_t being provided by unistd.h. PR 16686 * coff-rs6000.c: Include stdint.h. * coff64-rs6000.c: Likewise.
2014-03-11 * guile/guile.c (call_initialize_gdb_module): New function.Doug Evans2-10/+24
(initialize_guile): Replace call to scm_init_guile with call to scm_with_guile.
2014-03-10sim: msp430: start a test frameworkMike Frysinger9-0/+120
The current sim lacks any sort of tests. Start a basic framework and add a simple one to test the add insn.
2014-03-10sim: msp430: set initial PC to ELF entry if availableMike Frysinger2-1/+11
If we want to run a simple ELF, the reset vector isn't set up, so starting at address 0 doesn't make sense. Use the ELF's entry point instead.
2014-03-10sim: msp430: fix build time warningsMike Frysinger2-2/+7
This fix is simple: msp430-sim.c: In function 'maybe_perform_syscall': msp430-sim.c:898:10: warning: format '%d' expects argument of type 'int', but argument 5 has type 'long int' [-Wformat] This one we change to use casts like everyone else does in the code base: msp430-sim.c: In function 'msp430_step_once': msp430-sim.c:985:7: warning: passing argument 3 of 'init_disassemble_info' from incompatible pointer type [enabled by default] include/dis-asm.h:368:13: note: expected 'fprintf_ftype' but argument is of type 'int (*)(struct FILE * __restrict__, const char * __restrict__)'
2014-03-10sim: constify arg to sim_do_commandMike Frysinger32-29/+100
It is rare for people to want to modify the cmd arg. In general, they really shouldn't be, but a few still do. For those who misbehave, dupe the string locally so they can bang on it.
2014-03-11daily updateAlan Modra1-1/+1
2014-03-10Add function to set non-visibility part of st_other.Cary Coutant2-0/+9
2014-03-10 Sasa Stankovic <Sasa.Stankovic@imgtec.com> gold/ * symtab.h (Symbol::set_nonvis): New function.
2014-03-10Add explicit instantiations for Sized_symbol::init_output_data.Cary Coutant2-0/+32
2014-03-10 Sasa Stankovic <Sasa.Stankovic@imgtec.com> gold/ * symtab.cc (Sized_symbol<32>::init_output_data): Instantiate the template. (Sized_symbol<64>::init_output_data): Likewise.
2014-03-10Allow target to adjust dynamic symbol value.Cary Coutant3-0/+19
2014-03-10 Sasa Stankovic <Sasa.Stankovic@imgtec.com> gold/ * symtab.cc (Symbol_table::sized_write_globals): Allow a target to adjust dynamic symbol value. * target.h (Target::adjust_dyn_symbol): New function. (Target::do_adjust_dyn_symbol): New function.
2014-03-10Allow target to add custom dynamic table entries.Cary Coutant4-1/+38
2014-03-10 Sasa Stankovic <Sasa.Stankovic@imgtec.com> gold/ * output.cc (Output_data_dynamic::Dynamic_entry::write): Get the value of DYNAMIC_CUSTOM dynamic entry. * output.h (Output_data_dynamic::add_custom): New function. (Dynamic_entry::Dynamic_entry): New constructor for DYNAMIC_CUSTOM dynamic entry. (enum Dynamic_entry::Classification): Add DYNAMIC_CUSTOM. * target.h (Target::dynamic_tag_custom_value): New function. (Target::do_dynamic_tag_custom_value): New function.
2014-03-10Allow target to set dynsym indexes.Cary Coutant3-0/+57
2014-03-10 Sasa Stankovic <Sasa.Stankovic@imgtec.com> gold/ * symtab.cc (Symbol_table::set_dynsym_indexes): Allow a target to set dynsym indexes. * target.h (Target::has_custom_set_dynsym_indexes): New function. (Target::do_has_custom_set_dynsym_indexes): New function. (Target::set_dynsym_indexes): New function. (Target::do_set_dynsym_indexes): New function.
2014-03-10Remove bfd/ticoff.h (unused)Tristan Gingold2-121/+4
2013-12-03 Tristan Gingold <gingold@adacore.com> * ticoff.h: Remove.
2014-03-10Missing space before '(' in ada-lang.c::ada_evaluate_subexpJoel Brobecker2-3/+8
gdb/ChangeLog: * ada-lang.c (ada_evaluate_subexp): Add missing space before '(' in call to TYPE_CODE macro.
2014-03-10Minor style change in the previous commits' ChangeLog entry.Joel Brobecker1-2/+2
2014-03-10[Ada] Full view of tagged type with ptypeJerome Guitton7-10/+162
When evaluating an expression, if it is of a tagged type, GDB reads the tag in memory and deduces the full view. At parsing time, however, this operation is done only in the case of OP_VAR_VALUE. ptype does not go through a full evaluation of expressions so it may return some odd results: (gdb) print c.menu_name $1 = 0x0 (gdb) ptype $ type = system.strings.string_access (gdb) ptype c.menu_name type = <void> This change removes this peculiarity by extending the tag resolution to UNOP_IND and STRUCTOP_STRUCT. As in the case of OP_VAR_VALUE, this implies switching from EVAL_AVOID_SIDE_EFFECTS to EVAL_NORMAL when a tagged type is dereferenced. gdb/ * ada-lang.c (ada_evaluate_subexp): Resolve tagged types to full view in the case of UNOP_IND and STRUCTOP_STRUCT. gdb/testsuite/ * gdb.ada/tagged_access: New testcase.
2014-03-10Remove "hardware" from comments of "target_insert_breakpoint"Hui Zhu2-1/+6
This function is for simple breakpoint. So I post a patch to remove "hardware". Thanks, Hui 2014-03-10 Hui Zhu <hui@codesourcery.com> * target.h (target_insert_breakpoint): Remove "hardware" from its comments.
2014-03-10daily updateAlan Modra1-1/+1
2014-03-09daily updateAlan Modra1-1/+1
2014-03-08Better overflow checking for powerpc32 relocationsAlan Modra2-159/+189
Similar to the powerpc64 patch, this improves overflow checking in elf32-ppc.c. Many reloc "howto" entries needed fixes, some just cosmetic. The patch also fixes the R_PPC_VLE_SDA21 reloc application code, which was horribly broken. In fact, it may still be broken since Power ISA 2.07 says e_li behaves as RT <- EXTS(li20 1:4 || li20 5:8 || li20 0 || li20 9:19) where li20 is a field taken from bits 17..20, 11..15, 21..31 of the instruction. Freescale VLEPEM says differently, and I assume correctly, that RT <- EXTS(li20 0:3 || li20 4:8 || li20 9:19) The VLE_SDA21 relocation description matches this too. Now the VLE_SDA21 relocation specifies in the case where e_addi16 is converted to e_li for symbols in .PPC.EMB.sdata0 or .PPC.EMB.sbss0 (no base register), that the field is restricted to 16 bits, with the sign bit being propagated to the top 4 bits. I don't see the sense in restricting the value like this, so have allowed the full 20 bit signed value. This of course is compatible with the reloc description in that values in the 16 bit signed range will result in exactly the same insn field as when the reloc description is followed to the letter. * elf32-ppc.c (ppc_elf_howto_raw): Correct overflow check for many relocations. Correct bitsize and rightshift too for a number of VLE relocs. Describe R_PPC_VLE_SDA21 and R_PPC_VLE_SDA21_LO. Correct dst_mask on R_PPC_VLE_SDA21_LO. (ppc_elf_vle_split16): Tidy, delete unnecessary prototype. (ppc_elf_relocate_section): Modify overflow test for 16-bit fields in instructions to signed/unsigned according to whether the field takes a signed or unsigned value. Tidy vle split16 code. Correct R_PPC_VLE_SDA21 and R_PPC_VLE_SDA21_LO handling.
2014-03-08Better overflow checking for powerpc64 relocationsAlan Modra4-38/+132
R_PPC64_ADDR16 is used in three contexts: - .short data relocation - 16-bit signed insn fields, eg. addi - 16-bit unsigned insn fields, eg. ori In the first case we want to allow both signed and unsigned 16-bit values, the latter two ought to error if the field exceeds the range of values allowed for 16-bit signed and unsigned integers respectively. These conflicting requirements meant that ld had to choose the least restrictive overflow checks, and thus it is possible to construct testcases where an addi field overflows but is not reported by ld. Many relocations dealing with 16-bit insn fields have this problem. What's more, some relocations that are only ever used for signed fields of instructions woodenly copied the lax overflow checking of R_PPC64_ADDR16. bfd/ * elf64-ppc.c (ppc64_elf_howto_raw): Use complain_overflow_signed for R_PPC64_ADDR14, R_PPC64_ADDR14_BRTAKEN, R_PPC64_ADDR14_BRNTAKEN, R_PPC64_SECTOFF, R_PPC64_ADDR16_DS, R_PPC64_SECTOFF_DS, R_PPC64_REL16 entries. Use complain_overflow_dont for R_PPC64_TOC. (ppc64_elf_relocate_section): Modify overflow test for 16-bit fields in instructions to signed/unsigned according to whether the field takes a signed or unsigned value. gold/ * powerpc.cc (Powerpc_relocate_functions::Overflow_check): Add CHECK_UNSIGNED, CHECK_LOW_INSN, CHECK_HIGH_INSN. (Powerpc_relocate_functions::has_overflow_unsigned): New function. (Powerpc_relocate_functions::has_overflow_bitfield, overflowed): Use the above. (Target_powerpc::Relocate::relocate): Correct overflow checking for a number of relocations. Modify overflow test for 16-bit fields in instructions to signed/unsigned according to whether the field takes a signed or unsigned value.
2014-03-07* dwarf2read.c (read_str_index): Rename local dwo_name to objf_name.Doug Evans2-5/+9
2014-03-07read_cutu_die_from_dwo: Misc minor cleanups.Doug Evans2-4/+9
* dwarf2read.c (read_cutu_die_from_dwo): Fix function comment. Remove unused local comp_dir_attr. Assert exactly one of stub_comp_unit_die, stub_comp_dir is non-NULL.
2014-03-07target.h: Expands complete_target_initialization and add_target comments.Joel Brobecker2-1/+10
Expand a bit the comments to answer some questions I had when looking at why a target of mine would not have some default methods set. gdb/ChangeLog: * target.h (complete_target_initialization, add_target): Add comment.
2014-03-08daily updateAlan Modra1-1/+1
2014-03-07Make the go32-nat.c target inherit inf-child.c.Pedro Alves2-89/+71
So that all native targets inherit a single "superclass". Target methods that are set to or do the same as inf-child.c's are removed. Tested by cross building on Fedora 17. gdb/ 2014-03-07 Pedro Alves <palves@redhat.com> * go32-nat.c: Include inf-child.h. (go32_ops): Delete global. (go32_close, go32_detach, go32_prepare_to_store, go32_can_run): Delete methods. (go32_create_inferior): Push the passed in target pointer instead of referencing go32_ops. (init_go32_ops): Delete function. Moved parts to _initialize_go32_nat. (go32_target): New function, based on init_go32_ops, but inherit inf_child_target. (_initialize_go32_nat): Use go32_target. Move parts of init_go32_ops here.
2014-03-07AIX 32-bit core loading, high section addresses.Pedro Alves2-2/+7
I noticed GDB was failing to enable threading support for 32-bit AIX cores. I traced it to failure to read variables from libpthreads.a. The issue is that data for that library is loaded at a high address, and bfd is sign extending the section addresses: (gdb) info files Symbols from "/home/palves/crash". Local core dump file: `/home/palves/core', file type aixcoff-rs6000. 0x2ff22000 - 0x2ff23000 is .stack 0x20000000 - 0x200316e0 is .data 0x20000e90 - 0x200016c0 is .data 0xfffffffff0254000 - 0xfffffffff0297920 is .data 0xfffffffff07b46a8 - 0xfffffffff07b47c8 is .data 0xfffffffff0298000 - 0xfffffffff029bfcc is .data 0xfffffffff06dafe0 - 0xfffffffff07b3838 is .data Local exec file: `/home/palves/crash', file type aixcoff-rs6000. Entry point: 0x20001394 0x10000150 - 0x10000e90 is .text 0x20000e90 - 0x2000149c is .data 0x2000149c - 0x200016c0 is .bss 0xd053b124 - 0xd053e15f is .text in /usr/lib/libpthreads.a(shr_comm.o) 0xf0254000 - 0xf0297920 is .data in /usr/lib/libpthreads.a(shr_comm.o) 0xf0254450 - 0xf0297920 is .bss in /usr/lib/libpthreads.a(shr_comm.o) 0xd053a280 - 0xd053aabe is .text in /usr/lib/libcrypt.a(shr.o) 0xf07b46a8 - 0xf07b47c8 is .data in /usr/lib/libcrypt.a(shr.o) 0xf07b47c8 - 0xf07b47c8 is .bss in /usr/lib/libcrypt.a(shr.o) 0xd04fb180 - 0xd053917e is .text in /usr/lib/libpthreads.a(shr_xpg5.o) 0xf0298000 - 0xf029bfcc is .data in /usr/lib/libpthreads.a(shr_xpg5.o) 0xf029bf64 - 0xf029bfcc is .bss in /usr/lib/libpthreads.a(shr_xpg5.o) 0xd0100900 - 0xd04fa39c is .text in /usr/lib/libc.a(shr.o) 0xf06dafe0 - 0xf07b3838 is .data in /usr/lib/libc.a(shr.o) 0xf0751e94 - 0xf07b3838 is .bss in /usr/lib/libc.a(shr.o) Notice: ... 0xfffffffff0298000 - 0xfffffffff029bfcc is .data ... Those are the bfd section start/end addresses. It't not visible here: ... 0xf0298000 - 0xf029bfcc is .data in /usr/lib/libpthreads.a(shr_xpg5.o) ... ... just because GDB trims that number to 32-bit when printing. GDB then fails to find the memory for libpthreads.a variables in the core, and falls back to reading it directly from the executable (which yields the values as originally initialized in the code). E.g.: (gdb) p &__n_pthreads $2 = (<data variable, no debug info> *) 0xf074fda8 <__n_pthreads> (gdb) p __n_pthreads $1 = -1 That should have returned 2 instead of -1. bfd/ 2014-03-07 Pedro Alves <palves@redhat.com> * rs6000-core.c (rs6000coff_core_p): Cast pointers to bfd_vma through ptr_to_uint instead of through long.
2014-03-07btrace, test: fix gdb.btrace/data testMarkus Metzger2-2/+6
The format of the output changed. Fix the test. testsuite/ * gdb.btrace/data.exp: Update expected output.
2014-03-07daily updateAlan Modra1-1/+1
2014-03-06Apply ld-arm/gc-hidden-1 to all ELF targets, not just *eabi* targetsRoland McGrath2-8/+15
ld/testsuite/ * ld-arm/gc-hidden-1.d: Remove target, add not-target to match other ELF-only tests in this directory. Loosen regexps so they don't care what the exact addresses are.
2014-03-06Disable --long-plt test for arm-nacl targets.Roland McGrath2-4/+9
ld/testsuite/ * ld-arm/arm-elf.exp (armelftests_common): Move long-plt case ... (armelftests_nonacl): ... here.
2014-03-06Fix sol-thread.c build failure.Joel Brobecker2-3/+13
Some updates where needed after the minimal symbol handling got changed a little. This patch makes those changes. gdb/ChangeLog: * sol-thread.c: #include "symtab.h", "minsym.h" and "objfiles.h". (ps_pglobal_lookup): Use BMSYMBOL_VALUE_ADDRESS instead of SYMBOL_VALUE_ADDRESS. (info_cb): MSYMBOL_PRINT_NAME instead of SYMBOL_PRINT_NAME.
2014-03-06 * gas/tc-avr.c: Add new devicesDenis Chertykov3-37/+108
avr25: ata5272, attiny828 avr35: ata5505, attiny1634 avr4: atmega8a, ata6285, ata6286, atmega48pa avr5: at90pwm161, ata5790, ata5795, atmega164pa, atmega165pa, atmega168pa, atmega32a, atmega64rfr2, atmega644rfr2, atmega64a, atmega16hva2 avr51: atmega128a, atmega1284 avrxmega2: atxmega16a4u, atxmega16c4, atxmega32a4u, atxmega32c4, atxmega32e5, atxmega16e5, atxmega8e5 avrxmega4: atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3, atxmega64c3, atxmega64d4 avrxmega6: atxmega128a3u, atxmega128b3, atxmega128c3, atxmega128d4, atxmega192a3u, atxmega192c3, atxmega256a3u, atxmega256c3, atxmega384c3, atxmega384d3 avrxmega7: atxmega128a4u * doc/c-avr.texi: Ditto.
2014-03-06Patch for PR binutils/16664 which triggers a seg-fault when attempting toNick Clifton4-12/+34
display the contents of a corrupt attribute section. * readelf.c (process_attributes): Add checks for corrupt attribute section names. * elf-attrs.c (_bfd_elf_parse_attributes): Add checks for corrupt attribute section names.
2014-03-06Remove argument optional_p from get_tracepoint_by_numberYao Qi4-17/+17
This patch is to remove parameter optional_p as it is always true, in order to simplify get_tracepoint_by_number. 'optional_p' was added by this change, 1999-11-18 Tom Tromey <tromey@cygnus.com> * tracepoint.h (get_tracepoint_by_number): Updated declaration. * tracepoint.c (trace_pass_command): Better error message. Fixed logic when `all' not specified. (get_tracepoint_by_number): Added `optional_p' argument. Fixed all callers. but after this patch, FYI: remove `static's from cli-utils.c https://sourceware.org/ml/gdb-patches/2011-03/msg00636.html 'optional_p' passed to get_tracepoint_by_number become always true. gdb: 2014-03-06 Yao Qi <yao@codesourcery.com> * breakpoint.c (get_tracepoint_by_number): Remove argument optional_p. All callers updated. Adjust comments. Update output message. * breakpoint.h (get_tracepoint_by_number): Update declaration.
2014-03-06Handle parse number error in goto_bookmark_commandYao Qi2-1/+11
In GDB mainline, the error message for goto-bookmark isn't perfect. (gdb) goto-bookmark 1.1 goto-bookmark: no bookmark found for ''. This patch tweaks the error message by checking the return value of get_number. With patch applied, it becomes: (gdb) goto-bookmark 1.1 goto-bookmark: invalid bookmark number '1.1'. gdb: 2014-03-06 Yao Qi <yao@codesourcery.com> * reverse.c (goto_bookmark_command): Add local 'p'. Emit error early if get_number returns zero. Use 'p' instead of 'args'.
2014-03-06Add a newline in output messagesYao Qi2-1/+6
Hi, GDB prints two warnings in one single line, as below: (gdb) p 1.2 $1 = 1.2 (gdb) enable $1.2 History value must have integer type.Bad breakpoint number '$1' This patch adds '\n' at the end of message. gdb: 2014-03-06 Yao Qi <yao@codesourcery.com> * cli/cli-utils.c (get_number_trailer): Add '\n' at the end of message.
2014-03-06Fix PR16508Yao Qi6-17/+97
This patch fixes PR16508, which is about MI "-trace-find frame-number 0" behaves differently from CLI "tfind 0". In CLI, we check both status->running and status->filename, but in MI, we only check status->running, which looks wrong to me. This patch moves the code of checking to a new function check_trace_running, and use it in both CLI and MI. This patch also adds a test case pr16508.exp, which fails without this fix, and passes with the fix applied. FAIL: gdb.trace/pr16508.exp: interpreter-exec mi "-trace-find frame-number 0" gdb: 2014-03-06 Yao Qi <yao@codesourcery.com> PR breakpoints/16508 * tracepoint.c (check_trace_running): New function. (trace_find_command): Move code to check_trace_running and call check_trace_running. (trace_find_pc_command): Likewise. (trace_find_tracepoint_command): Likewise. (trace_find_line_command): Likewise. (trace_find_range_command): Likewise. * tracepoint.h (check_trace_running): Likewise. * mi/mi-main.c (mi_cmd_trace_find): Call check_trace_running. gdb/testsuite: 2014-03-06 Yao Qi <yao@codesourcery.com> * gdb.trace/pr16508.exp: New file.
2014-03-06Change the default implementation of to_traceframe_info to tcomplainYao Qi3-2/+8
This patch is to change the default implementation of to_traceframe_info from 'return NULL' to tcomplain, which is intended. If new target supports tracepoint, this method should be implemented, otherwise, an error is thrown. gdb: 2014-03-06 Yao Qi <yao@codesourcery.com> * target.h (struct target_ops) <to_traceframe_info>: Use TARGET_DEFAULT_NORETURN (tcomplain ()). * target-delegates.c: Regenerated.
2014-03-06daily updateAlan Modra1-1/+1
2014-03-05PR gdb/16575: stale breakpoint instructions in the code cachePedro Alves6-104/+127
In non-stop mode, or rather, breakpoints always-inserted mode, the code cache can easily end up with stale breakpoint instructions: All it takes is filling a cache line when breakpoints already exist in that memory region, and then delete the breakpoint. Vis. (from the new test): (gdb) set breakpoint always-inserted on (gdb) b 23 Breakpoint 2 at 0x400540: file ../../../src/gdb/testsuite/gdb.base/breakpoint-shadow.c, line 23. (gdb) b 24 Breakpoint 3 at 0x400547: file ../../../src/gdb/testsuite/gdb.base/breakpoint-shadow.c, line 24. disass main Dump of assembler code for function main: 0x000000000040053c <+0>: push %rbp 0x000000000040053d <+1>: mov %rsp,%rbp => 0x0000000000400540 <+4>: movl $0x1,-0x4(%rbp) 0x0000000000400547 <+11>: movl $0x2,-0x4(%rbp) 0x000000000040054e <+18>: mov $0x0,%eax 0x0000000000400553 <+23>: pop %rbp 0x0000000000400554 <+24>: retq End of assembler dump. So far so good. Now flush the code cache: (gdb) set code-cache off (gdb) set code-cache on Requesting a disassembly works as expected, breakpoint shadowing is applied: (gdb) disass main Dump of assembler code for function main: 0x000000000040053c <+0>: push %rbp 0x000000000040053d <+1>: mov %rsp,%rbp => 0x0000000000400540 <+4>: movl $0x1,-0x4(%rbp) 0x0000000000400547 <+11>: movl $0x2,-0x4(%rbp) 0x000000000040054e <+18>: mov $0x0,%eax 0x0000000000400553 <+23>: pop %rbp 0x0000000000400554 <+24>: retq End of assembler dump. However, now delete the breakpoints: (gdb) delete Delete all breakpoints? (y or n) y And disassembly shows the old breakpoint instructions: (gdb) disass main Dump of assembler code for function main: 0x000000000040053c <+0>: push %rbp 0x000000000040053d <+1>: mov %rsp,%rbp => 0x0000000000400540 <+4>: int3 0x0000000000400541 <+5>: rex.RB cld 0x0000000000400543 <+7>: add %eax,(%rax) 0x0000000000400545 <+9>: add %al,(%rax) 0x0000000000400547 <+11>: int3 0x0000000000400548 <+12>: rex.RB cld 0x000000000040054a <+14>: add (%rax),%al 0x000000000040054c <+16>: add %al,(%rax) 0x000000000040054e <+18>: mov $0x0,%eax 0x0000000000400553 <+23>: pop %rbp 0x0000000000400554 <+24>: retq End of assembler dump. Those breakpoint instructions are no longer installed in target memory they're stale in the code cache. Easily confirmed by just disabling the code cache: (gdb) set code-cache off (gdb) disass main Dump of assembler code for function main: 0x000000000040053c <+0>: push %rbp 0x000000000040053d <+1>: mov %rsp,%rbp => 0x0000000000400540 <+4>: movl $0x1,-0x4(%rbp) 0x0000000000400547 <+11>: movl $0x2,-0x4(%rbp) 0x000000000040054e <+18>: mov $0x0,%eax 0x0000000000400553 <+23>: pop %rbp 0x0000000000400554 <+24>: retq End of assembler dump. I stumbled upon this when writing a patch to infrun.c, that made handle_inferior_event & co fill in the cache before breakpoints were removed from the target. Recall that wait_for_inferior flushes the dcache for every event. So in that case, always-inserted mode was not necessary to trigger this. It's just a convenient way to expose the issue. The dcache works at the raw memory level. We need to update it whenever memory is written, no matter what kind of target memory object was originally passed down by the caller. The issue is that the dcache update code isn't reached when a caller explicitly writes raw memory. Breakpoint insertion/removal is one such case -- mem-break.c uses target_write_read_memory/target_write_raw_memory. The fix is to move the dcache update code from memory_xfer_partial_1 to raw_memory_xfer_partial so that it's always reachable. When we do that, we can actually simplify a series of things. memory_xfer_partial_1 no longer needs to handle writes for any kind of memory object, and therefore dcache_xfer_memory no longer needs to handle writes either. So the latter (dcache_xfer_memory) and its callees can be simplified to only care about reads. While we're touching dcache_xfer_memory's prototype, might as well rename it to reflect that fact that it only handles reads, and make it follow the new target_xfer_status/xfered_len style. This made me notice that dcache_xfer_memory loses the real error status if a memory read fails: we could have failed to read due to TARGET_XFER_E_UNAVAILABLE, for instance, but we always return TARGET_XFER_E_IO, hence the FIXME note. I felt that fixing that fell out of the scope of this patch. Currently dcache_xfer_memory handles the case of a write failing. The whole cache line is invalidated when that happens. However, dcache_update, the sole mechanism for handling writes that will remain after the patch, does not presently handle that scenario. That's a bug. The patch makes it handle that, by passing down the target_xfer_status status from the caller, so that it can better decide what to do itself. While I was changing the function's prototype, I constified the myaddr parameter, getting rid of the need for the cast as seen in its existing caller. Tested on x86_64 Fedora 17, native and gdbserver. gdb/ 2014-03-05 Pedro Alves <palves@redhat.com> PR gdb/16575 * dcache.c (dcache_poke_byte): Constify ptr parameter. Return void. Update comment. (dcache_xfer_memory): Delete. (dcache_read_memory_partial): New, based on the read bits of dcache_xfer_memory. (dcache_update): Add status parameter. Use ULONGEST for len, and adjust. Discard cache lines if the reason for the update was error. * dcache.h (dcache_xfer_memory): Delete declaration. (dcache_read_memory_partial): New declaration. (dcache_update): Update prototype. * target.c (raw_memory_xfer_partial): Update the dcache here. (memory_xfer_partial_1): Don't handle dcache writes here. gdb/testsuite/ 2014-03-05 Pedro Alves <palves@redhat.com> PR gdb/16575 * gdb.base/breakpoint-shadow.exp (compare_disassembly): New procedure. (top level): Adjust to use it. Add tests that exercise breakpoint interaction with the code-cache.