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

Side by Side Diff: gdb/disasm.c

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 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/disasm.h ('k') | gdb/doc/ChangeLog » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Disassemble support for GDB. 1 /* Disassemble support for GDB.
2 2
3 Copyright (C) 2000-2005, 2007-2012 Free Software Foundation, Inc. 3 Copyright (C) 2000-2013 Free Software Foundation, Inc.
4 4
5 This file is part of GDB. 5 This file is part of GDB.
6 6
7 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or 9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details. 15 GNU General Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 19
20 #include "defs.h" 20 #include "defs.h"
21 #include "target.h" 21 #include "target.h"
22 #include "value.h" 22 #include "value.h"
23 #include "ui-out.h" 23 #include "ui-out.h"
24 #include "gdb_string.h" 24 #include <string.h>
25 #include "disasm.h" 25 #include "disasm.h"
26 #include "gdbcore.h" 26 #include "gdbcore.h"
27 #include "dis-asm.h" 27 #include "dis-asm.h"
28 28
29 /* Disassemble functions. 29 /* Disassemble functions.
30 FIXME: We should get rid of all the duplicate code in gdb that does 30 FIXME: We should get rid of all the duplicate code in gdb that does
31 the same thing: disassemble_command() and the gdbtk variation. */ 31 the same thing: disassemble_command() and the gdbtk variation. */
32 32
33 /* This Structure is used to store line number information. 33 /* This Structure is used to store line number information.
34 We need a different sort of line table from the normal one cuz we can't 34 We need a different sort of line table from the normal one cuz we can't
35 depend upon implicit line-end pc's for lines to do the 35 depend upon implicit line-end pc's for lines to do the
36 reordering in this function. */ 36 reordering in this function. */
37 37
38 struct dis_line_entry 38 struct dis_line_entry
39 { 39 {
40 int line; 40 int line;
41 CORE_ADDR start_pc; 41 CORE_ADDR start_pc;
42 CORE_ADDR end_pc; 42 CORE_ADDR end_pc;
43 }; 43 };
44 44
45 /* Like target_read_memory, but slightly different parameters. */ 45 /* Like target_read_memory, but slightly different parameters. */
46 static int 46 static int
47 dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr, unsigned int len, 47 dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr, unsigned int len,
48 struct disassemble_info *info) 48 struct disassemble_info *info)
49 { 49 {
50 return target_read_memory (memaddr, myaddr, len); 50 return target_read_code (memaddr, myaddr, len);
51 } 51 }
52 52
53 /* Like memory_error with slightly different parameters. */ 53 /* Like memory_error with slightly different parameters. */
54 static void 54 static void
55 dis_asm_memory_error (int status, bfd_vma memaddr, 55 dis_asm_memory_error (int status, bfd_vma memaddr,
56 struct disassemble_info *info) 56 struct disassemble_info *info)
57 { 57 {
58 memory_error (status, memaddr); 58 memory_error (status, memaddr);
59 } 59 }
60 60
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 115
116 QUIT; 116 QUIT;
117 if (how_many >= 0) 117 if (how_many >= 0)
118 { 118 {
119 if (num_displayed >= how_many) 119 if (num_displayed >= how_many)
120 break; 120 break;
121 else 121 else
122 num_displayed++; 122 num_displayed++;
123 } 123 }
124 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); 124 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
125 ui_out_text (uiout, pc_prefix (pc)); 125
126 if ((flags & DISASSEMBLY_OMIT_PC) == 0)
127 » ui_out_text (uiout, pc_prefix (pc));
126 ui_out_field_core_addr (uiout, "address", gdbarch, pc); 128 ui_out_field_core_addr (uiout, "address", gdbarch, pc);
127 129
128 if (!build_address_symbolic (gdbarch, pc, 0, &name, &offset, &filename, 130 if (!build_address_symbolic (gdbarch, pc, 0, &name, &offset, &filename,
129 &line, &unmapped)) 131 &line, &unmapped))
130 { 132 {
131 /* We don't care now about line, filename and 133 /* We don't care now about line, filename and
132 unmapped. But we might in the future. */ 134 unmapped. But we might in the future. */
133 ui_out_text (uiout, " <"); 135 ui_out_text (uiout, " <");
134 if ((flags & DISASSEMBLY_OMIT_FNAME) == 0) 136 if ((flags & DISASSEMBLY_OMIT_FNAME) == 0)
135 ui_out_field_string (uiout, "func-name", name); 137 ui_out_field_string (uiout, "func-name", name);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 struct symtab *symtab, 199 struct symtab *symtab,
198 int how_many, int flags, struct ui_file *stb) 200 int how_many, int flags, struct ui_file *stb)
199 { 201 {
200 int newlines = 0; 202 int newlines = 0;
201 struct dis_line_entry *mle; 203 struct dis_line_entry *mle;
202 struct symtab_and_line sal; 204 struct symtab_and_line sal;
203 int i; 205 int i;
204 int out_of_order = 0; 206 int out_of_order = 0;
205 int next_line = 0; 207 int next_line = 0;
206 int num_displayed = 0; 208 int num_displayed = 0;
209 enum print_source_lines_flags psl_flags = 0;
207 struct cleanup *ui_out_chain; 210 struct cleanup *ui_out_chain;
208 struct cleanup *ui_out_tuple_chain = make_cleanup (null_cleanup, 0); 211 struct cleanup *ui_out_tuple_chain = make_cleanup (null_cleanup, 0);
209 struct cleanup *ui_out_list_chain = make_cleanup (null_cleanup, 0); 212 struct cleanup *ui_out_list_chain = make_cleanup (null_cleanup, 0);
210 213
214 if (flags & DISASSEMBLY_FILENAME)
215 psl_flags |= PRINT_SOURCE_LINES_FILENAME;
216
211 mle = (struct dis_line_entry *) alloca (nlines 217 mle = (struct dis_line_entry *) alloca (nlines
212 * sizeof (struct dis_line_entry)); 218 * sizeof (struct dis_line_entry));
213 219
214 /* Copy linetable entries for this function into our data 220 /* Copy linetable entries for this function into our data
215 structure, creating end_pc's and setting out_of_order as 221 structure, creating end_pc's and setting out_of_order as
216 appropriate. */ 222 appropriate. */
217 223
218 /* First, skip all the preceding functions. */ 224 /* First, skip all the preceding functions. */
219 225
220 for (i = 0; i < nlines - 1 && le[i].pc < low; i++); 226 for (i = 0; i < nlines - 1 && le[i].pc < low; i++);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 if (mle[i].line >= next_line) 274 if (mle[i].line >= next_line)
269 { 275 {
270 if (next_line != 0) 276 if (next_line != 0)
271 { 277 {
272 /* Just one line to print. */ 278 /* Just one line to print. */
273 if (next_line == mle[i].line) 279 if (next_line == mle[i].line)
274 { 280 {
275 ui_out_tuple_chain 281 ui_out_tuple_chain
276 = make_cleanup_ui_out_tuple_begin_end (uiout, 282 = make_cleanup_ui_out_tuple_begin_end (uiout,
277 "src_and_asm_line"); 283 "src_and_asm_line");
278 » » print_source_lines (symtab, next_line, mle[i].line + 1, 0); 284 » » print_source_lines (symtab, next_line, mle[i].line + 1, psl_fl ags);
279 } 285 }
280 else 286 else
281 { 287 {
282 /* Several source lines w/o asm instructions associated. */ 288 /* Several source lines w/o asm instructions associated. */
283 for (; next_line < mle[i].line; next_line++) 289 for (; next_line < mle[i].line; next_line++)
284 { 290 {
285 struct cleanup *ui_out_list_chain_line; 291 struct cleanup *ui_out_list_chain_line;
286 struct cleanup *ui_out_tuple_chain_line; 292 struct cleanup *ui_out_tuple_chain_line;
287 293
288 ui_out_tuple_chain_line 294 ui_out_tuple_chain_line
289 = make_cleanup_ui_out_tuple_begin_end (uiout, 295 = make_cleanup_ui_out_tuple_begin_end (uiout,
290 "src_and_asm_line "); 296 "src_and_asm_line ");
291 print_source_lines (symtab, next_line, next_line + 1, 297 print_source_lines (symtab, next_line, next_line + 1,
292 » » » » » 0); 298 » » » » » psl_flags);
293 ui_out_list_chain_line 299 ui_out_list_chain_line
294 = make_cleanup_ui_out_list_begin_end (uiout, 300 = make_cleanup_ui_out_list_begin_end (uiout,
295 "line_asm_insn"); 301 "line_asm_insn");
296 do_cleanups (ui_out_list_chain_line); 302 do_cleanups (ui_out_list_chain_line);
297 do_cleanups (ui_out_tuple_chain_line); 303 do_cleanups (ui_out_tuple_chain_line);
298 } 304 }
299 /* Print the last line and leave list open for 305 /* Print the last line and leave list open for
300 asm instructions to be added. */ 306 asm instructions to be added. */
301 ui_out_tuple_chain 307 ui_out_tuple_chain
302 = make_cleanup_ui_out_tuple_begin_end (uiout, 308 = make_cleanup_ui_out_tuple_begin_end (uiout,
303 "src_and_asm_line"); 309 "src_and_asm_line");
304 » » print_source_lines (symtab, next_line, mle[i].line + 1, 0); 310 » » print_source_lines (symtab, next_line, mle[i].line + 1, psl_fl ags);
305 } 311 }
306 } 312 }
307 else 313 else
308 { 314 {
309 ui_out_tuple_chain 315 ui_out_tuple_chain
310 = make_cleanup_ui_out_tuple_begin_end (uiout, 316 = make_cleanup_ui_out_tuple_begin_end (uiout,
311 "src_and_asm_line"); 317 "src_and_asm_line");
312 » print_source_lines (symtab, mle[i].line, mle[i].line + 1, 0); 318 » print_source_lines (symtab, mle[i].line, mle[i].line + 1, psl_flag s);
313 } 319 }
314 320
315 next_line = mle[i].line + 1; 321 next_line = mle[i].line + 1;
316 ui_out_list_chain 322 ui_out_list_chain
317 = make_cleanup_ui_out_list_begin_end (uiout, "line_asm_insn"); 323 = make_cleanup_ui_out_list_begin_end (uiout, "line_asm_insn");
318 } 324 }
319 325
320 num_displayed += dump_insns (gdbarch, uiout, di, 326 num_displayed += dump_insns (gdbarch, uiout, di,
321 mle[i].start_pc, mle[i].end_pc, 327 mle[i].start_pc, mle[i].end_pc,
322 how_many, flags, stb); 328 how_many, flags, stb);
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 int 526 int
521 gdb_buffered_insn_length (struct gdbarch *gdbarch, 527 gdb_buffered_insn_length (struct gdbarch *gdbarch,
522 const gdb_byte *insn, int max_len, CORE_ADDR addr) 528 const gdb_byte *insn, int max_len, CORE_ADDR addr)
523 { 529 {
524 struct disassemble_info di; 530 struct disassemble_info di;
525 531
526 gdb_buffered_insn_length_init_dis (gdbarch, &di, insn, max_len, addr); 532 gdb_buffered_insn_length_init_dis (gdbarch, &di, insn, max_len, addr);
527 533
528 return gdbarch_print_insn (gdbarch, addr, &di); 534 return gdbarch_print_insn (gdbarch, addr, &di);
529 } 535 }
OLDNEW
« no previous file with comments | « gdb/disasm.h ('k') | gdb/doc/ChangeLog » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698