|
|
1.1 root 1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2: ;; gdb code changes
3: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4: /*
5: * Core Problem: when gdb says something like (../src/file.c 1234), the
6: * real file might be in any of the active dirs in use by gdb and thus
7: * emacs can not always find the file at "../src". Emacs cannot just
8: * scan for GDB dir commands because these might be given in the .gdbinit
9: * file or other scripts. The only solution is to have gdb be a bit more
10: * specific when it prints file names.
11: *
12: * Remaining defects:
13: *
14: * 1. Do I really have to open the file to find out if it exists?
15: * There should be a faster way.
16: *
17: * 2. Should there be a bdb command to toggle between short and absolute
18: * forms of the file name?
19: */
20:
21:
22: /* Add this to ~emacs/gdb/source.c after the openp function */
23:
24: char *
25: get_absolute_filename(table)
26: /* Added by Lynn Slater, Silvar-Lisco 10/6/87
27: returns the address of the best possible name to use for the file
28: in the passed symtab. Returns the filename if the path cannot be
29: resolved.
30: Please remember to free the absolute name after use.*/
31: struct symtab *table;
32: {
33: register int desc;
34: char *absolute_name;
35:
36: desc = openp (source_path, 0, table->filename, O_RDONLY, 0, &absolute_name);
37: if (desc < 0)
38: return( savestring(table->filename, strlen(table->filename)));
39:
40: close (desc);
41: return(absolute_name);
42: }
43:
44: /* Replace this fcn in ~emacs/gdb/stack.c */
45: void
46: print_frame_info (fi, level, source, args)
47: struct frame_info *fi;
48: register int level;
49: int source;
50: int args;
51: {
52: register FRAME frame = fi->frame;
53: struct symtab_and_line sal;
54: struct symbol *func;
55: register char *funname = 0;
56: int numargs;
57:
58: sal = find_pc_line (fi->pc, fi->next_frame);
59: func = get_frame_function (frame);
60: if (func)
61: funname = SYMBOL_NAME (func);
62: else
63: {
64: register int misc_index = find_pc_misc_function (fi->pc);
65: if (misc_index >= 0)
66: funname = misc_function_vector[misc_index].name;
67: }
68:
69: if (source >= 0 || !sal.symtab)
70: {
71: /* This avoids a bug in cc on the sun. */
72: struct frame_info tem;
73: tem = *fi;
74:
75: if (level >= 0)
76: printf ("#%-2d ", level);
77: if (fi->pc != sal.pc || !sal.symtab)
78: printf ("0x%x in ", fi->pc);
79: printf ("%s (", funname ? funname : "??");
80: if (args)
81: {
82: FRAME_NUM_ARGS (numargs, tem);
83: print_frame_args (func, FRAME_ARGS_ADDRESS (tem), numargs, stdout);
84: }
85: printf (")");
86: if (sal.symtab)
87: {
88: char * absolute_filename;
89: absolute_filename = (char *) get_absolute_filename(sal.symtab);
90: printf (" (%s line %d)", absolute_filename, sal.line);
91: free(absolute_filename);
92: }
93: printf ("\n");
94: }
95:
96: if (source != 0 && sal.symtab)
97: {
98: if (source < 0 && fi->pc != sal.pc)
99: printf ("0x%x\t", fi->pc);
100: print_source_lines (sal.symtab, sal.line, sal.line + 1);
101: current_source_line = max (sal.line - 5, 1);
102: }
103: if (source != 0)
104: set_default_breakpoint (1, fi->pc, sal.symtab, sal.line);
105:
106: fflush (stdout);
107: }
108:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.