Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(289)

Side by Side Diff: gdb/mem-break.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gdb/mdebugread.c ('k') | gdb/mep-tdep.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Simulate breakpoints by patching locations in the target system, for GDB. 1 /* Simulate breakpoints by patching locations in the target system, for GDB.
2 2
3 Copyright (C) 1990-1993, 1995, 1997-2000, 2002, 2007-2012 Free 3 Copyright (C) 1990-1993, 1995, 1997-2000, 2002, 2007-2012 Free
4 Software Foundation, Inc. 4 Software Foundation, Inc.
5 5
6 Contributed by Cygnus Support. Written by John Gilmore. 6 Contributed by Cygnus Support. Written by John Gilmore.
7 7
8 This file is part of GDB. 8 This file is part of GDB.
9 9
10 This program is free software; you can redistribute it and/or modify 10 This program is free software; you can redistribute it and/or modify
(...skipping 11 matching lines...) Expand all
22 22
23 #include "defs.h" 23 #include "defs.h"
24 24
25 /* This file is only useful if BREAKPOINT_FROM_PC is set. If not, we 25 /* This file is only useful if BREAKPOINT_FROM_PC is set. If not, we
26 punt. */ 26 punt. */
27 27
28 #include "symtab.h" 28 #include "symtab.h"
29 #include "breakpoint.h" 29 #include "breakpoint.h"
30 #include "inferior.h" 30 #include "inferior.h"
31 #include "target.h" 31 #include "target.h"
32 #include "gdb_string.h"
32 33
33 34
34 /* Insert a breakpoint on targets that don't have any better 35 /* Insert a breakpoint on targets that don't have any better
35 breakpoint support. We read the contents of the target location 36 breakpoint support. We read the contents of the target location
36 and stash it, then overwrite it with a breakpoint instruction. 37 and stash it, then overwrite it with a breakpoint instruction.
37 BP_TGT->placed_address is the target location in the target 38 BP_TGT->placed_address is the target location in the target
38 machine. BP_TGT->shadow_contents is some memory allocated for 39 machine. BP_TGT->shadow_contents is some memory allocated for
39 saving the target contents. It is guaranteed by the caller to be 40 saving the target contents. It is guaranteed by the caller to be
40 long enough to save BREAKPOINT_LEN bytes (this is accomplished via 41 long enough to save BREAKPOINT_LEN bytes (this is accomplished via
41 BREAKPOINT_MAX). */ 42 BREAKPOINT_MAX). */
42 43
43 int 44 int
44 default_memory_insert_breakpoint (struct gdbarch *gdbarch, 45 default_memory_insert_breakpoint (struct gdbarch *gdbarch,
45 struct bp_target_info *bp_tgt) 46 struct bp_target_info *bp_tgt)
46 { 47 {
47 int val; 48 int val;
48 const unsigned char *bp; 49 const unsigned char *bp;
50 gdb_byte *readbuf;
49 51
50 /* Determine appropriate breakpoint contents and size for this address. */ 52 /* Determine appropriate breakpoint contents and size for this address. */
51 bp = gdbarch_breakpoint_from_pc 53 bp = gdbarch_breakpoint_from_pc
52 (gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size); 54 (gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
53 if (bp == NULL) 55 if (bp == NULL)
54 error (_("Software breakpoints not implemented for this target.")); 56 error (_("Software breakpoints not implemented for this target."));
55 57
56 /* Save the memory contents. */ 58 /* Save the memory contents in the shadow_contents buffer and then
59 write the breakpoint instruction. */
57 bp_tgt->shadow_len = bp_tgt->placed_size; 60 bp_tgt->shadow_len = bp_tgt->placed_size;
58 val = target_read_memory (bp_tgt->placed_address, bp_tgt->shadow_contents, 61 readbuf = alloca (bp_tgt->placed_size);
62 val = target_read_memory (bp_tgt->placed_address, readbuf,
59 bp_tgt->placed_size); 63 bp_tgt->placed_size);
60
61 /* Write the breakpoint. */
62 if (val == 0) 64 if (val == 0)
63 val = target_write_raw_memory (bp_tgt->placed_address, bp, 65 {
64 » » » » bp_tgt->placed_size); 66 memcpy (bp_tgt->shadow_contents, readbuf, bp_tgt->placed_size);
67 val = target_write_raw_memory (bp_tgt->placed_address, bp,
68 » » » » bp_tgt->placed_size);
69 }
65 70
66 return val; 71 return val;
67 } 72 }
68 73
69 74
70 int 75 int
71 default_memory_remove_breakpoint (struct gdbarch *gdbarch, 76 default_memory_remove_breakpoint (struct gdbarch *gdbarch,
72 struct bp_target_info *bp_tgt) 77 struct bp_target_info *bp_tgt)
73 { 78 {
74 return target_write_raw_memory (bp_tgt->placed_address, bp_tgt->shadow_content s, 79 return target_write_raw_memory (bp_tgt->placed_address, bp_tgt->shadow_content s,
75 bp_tgt->placed_size); 80 bp_tgt->placed_size);
76 } 81 }
77 82
78 83
79 int 84 int
80 memory_insert_breakpoint (struct gdbarch *gdbarch, 85 memory_insert_breakpoint (struct gdbarch *gdbarch,
81 struct bp_target_info *bp_tgt) 86 struct bp_target_info *bp_tgt)
82 { 87 {
83 return gdbarch_memory_insert_breakpoint (gdbarch, bp_tgt); 88 return gdbarch_memory_insert_breakpoint (gdbarch, bp_tgt);
84 } 89 }
85 90
86 int 91 int
87 memory_remove_breakpoint (struct gdbarch *gdbarch, 92 memory_remove_breakpoint (struct gdbarch *gdbarch,
88 struct bp_target_info *bp_tgt) 93 struct bp_target_info *bp_tgt)
89 { 94 {
90 return gdbarch_memory_remove_breakpoint (gdbarch, bp_tgt); 95 return gdbarch_memory_remove_breakpoint (gdbarch, bp_tgt);
91 } 96 }
OLDNEW
« no previous file with comments | « gdb/mdebugread.c ('k') | gdb/mep-tdep.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698