diff options
author | Stan Shebs <shebs@codesourcery.com> | 1994-04-15 21:55:49 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 1994-04-15 21:55:49 +0000 |
commit | fad466eb6de0629edc89081998337fd13566e989 (patch) | |
tree | 0190472f3bd8a3ce36a30ba310c4aa2acfb5cfc0 /gdb/source.c | |
parent | 97ea252ef8065df3fcc039801fcc370aa3e3c00f (diff) | |
download | gdb-fad466eb6de0629edc89081998337fd13566e989.zip gdb-fad466eb6de0629edc89081998337fd13566e989.tar.gz gdb-fad466eb6de0629edc89081998337fd13566e989.tar.bz2 |
Fri Apr 15 11:53:46 1994 Stan Shebs (shebs@andros.cygnus.com)
* source.c (DIRNAME_SEPARATOR): New macro, replaces all references
to : in search path processing.
* defs.h (qsort): Rename argument in prototype.
* symtab.h (SAYMBOL_VALUE): Rename value field, avoids bugs in
some compilers.
* breakpoint.c, exec.c, mdebugread.c, mipsread.c, xcoffexec.c
(false): Eliminate usages.
Diffstat (limited to 'gdb/source.c')
-rw-r--r-- | gdb/source.c | 62 |
1 files changed, 38 insertions, 24 deletions
diff --git a/gdb/source.c b/gdb/source.c index 5a4733f..ec56937 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -25,10 +25,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "gdbcmd.h" #include "frame.h" -#ifdef USG #include <sys/types.h> -#endif - #include <string.h> #include <sys/param.h> #include <sys/stat.h> @@ -38,6 +35,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "symfile.h" #include "objfiles.h" +#ifndef DIRNAME_SEPARATOR +#define DIRNAME_SEPARATOR ':' +#endif + /* Prototypes for local functions. */ static int @@ -237,7 +238,10 @@ forget_cached_source_info () void init_source_path () { - source_path = savestring ("$cdir:$cwd", /* strlen of it */ 10); + char buf[20]; + + sprintf (buf, "$cdir%c$cwd", DIRNAME_SEPARATOR); + source_path = strsave (buf); forget_cached_source_info (); } @@ -288,7 +292,7 @@ mod_path (dirname, which_path) struct stat st; { - char *colon = strchr (name, ':'); + char *colon = strchr (name, DIRNAME_SEPARATOR); char *space = strchr (name, ' '); char *tab = strchr (name, '\t'); if (colon == 0 && space == 0 && tab == 0) @@ -303,7 +307,7 @@ mod_path (dirname, which_path) if (tab != 0 && (p == 0 || tab < p)) p = tab; dirname = p + 1; - while (*dirname == ':' || *dirname == ' ' || *dirname == '\t') + while (*dirname == DIRNAME_SEPARATOR || *dirname == ' ' || *dirname == '\t') ++dirname; } } @@ -378,7 +382,7 @@ mod_path (dirname, which_path) while (1) { if (!strncmp (p, name, len) - && (p[len] == '\0' || p[len] == ':')) + && (p[len] == '\0' || p[len] == DIRNAME_SEPARATOR)) { /* Found it in the search path, remove old copy */ if (p > *which_path) @@ -387,7 +391,7 @@ mod_path (dirname, which_path) goto skip_dup; /* Same dir twice in one cmd */ strcpy (p, &p[len+1]); /* Copy from next \0 or : */ } - p = strchr (p, ':'); + p = strchr (p, DIRNAME_SEPARATOR); if (p != 0) ++p; else @@ -395,6 +399,11 @@ mod_path (dirname, which_path) } if (p == 0) { + char tinybuf[2]; + + tinybuf[0] = DIRNAME_SEPARATOR; + tinybuf[1] = '\0'; + /* If we have already tacked on a name(s) in this command, be sure they stay on the front as we tack on some more. */ if (prefix) { @@ -402,7 +411,7 @@ mod_path (dirname, which_path) c = old[prefix]; old[prefix] = '\0'; - temp = concat (old, ":", name, NULL); + temp = concat (old, tinybuf, name, NULL); old[prefix] = c; *which_path = concat (temp, "", &old[prefix], NULL); prefix = strlen (temp); @@ -410,7 +419,7 @@ mod_path (dirname, which_path) } else { - *which_path = concat (name, (old[0]? ":" : old), old, NULL); + *which_path = concat (name, (old[0] ? tinybuf : old), old, NULL); prefix = strlen (name); } free (old); @@ -448,7 +457,7 @@ source_info (ignore, from_tty) -/* Open a file named STRING, searching path PATH (dir names sep by colons) +/* Open a file named STRING, searching path PATH (dir names sep by some char) using mode MODE and protection bits PROT in the calls to open. If TRY_CWD_FIRST, try to open ./STRING before searching PATH. @@ -503,7 +512,7 @@ openp (path, try_cwd_first, string, mode, prot, filename_opened) fd = -1; for (p = path; p; p = p1 ? p1 + 1 : 0) { - p1 = (char *) strchr (p, ':'); + p1 = (char *) strchr (p, DIRNAME_SEPARATOR); if (p1) len = p1 - p; else @@ -535,7 +544,7 @@ openp (path, try_cwd_first, string, mode, prot, filename_opened) strcat (filename+len, "/"); strcat (filename, string); - fd = open (filename, mode, prot); + fd = open (filename, mode); if (fd >= 0) break; } @@ -587,8 +596,8 @@ open_source_file (s) /* We cast strstr's result in case an ANSIhole has made it const, which produces a "required warning" when assigned to a nonconst. */ p = (char *)strstr (source_path, "$cdir"); - if (p && (p == path || p[-1] == ':') - && (p[cdir_len] == ':' || p[cdir_len] == '\0')) { + if (p && (p == path || p[-1] == DIRNAME_SEPARATOR) + && (p[cdir_len] == DIRNAME_SEPARATOR || p[cdir_len] == '\0')) { int len; path = (char *) @@ -606,12 +615,12 @@ open_source_file (s) /* Didn't work. Try using just the basename. */ p = basename (s->filename); if (p != s->filename) - result = openp(path, 0, p, O_RDONLY,0, &s->fullname); + result = openp (path, 0, p, O_RDONLY, 0, &s->fullname); } if (result >= 0) { - fullname = s -> fullname; - s -> fullname = mstrsave (s -> objfile -> md, s -> fullname); + fullname = s->fullname; + s->fullname = mstrsave (s->objfile->md, s->fullname); free (fullname); } return result; @@ -804,6 +813,8 @@ identify_source_line (s, line, mid_statement, pc) if (line > s->nlines) /* Don't index off the end of the line_charpos array. */ return 0; + /* FIXME-32x64: Need a version of print_address_numeric which does + not pass use_local to print_longest. */ printf_unfiltered ("\032\032%s:%d:%d:%s:0x%lx\n", s->fullname, line, s->line_charpos[line - 1], mid_statement ? "middle" : "beg", @@ -1025,20 +1036,23 @@ list_command (arg, from_tty) if (*arg == '*') { if (sal.symtab == 0) + /* FIXME-32x64--assumes sal.pc fits in long. */ error ("No source file for address %s.", local_hex_string((unsigned long) sal.pc)); sym = find_pc_function (sal.pc); if (sym) { - printf_filtered ("%s is in ", - local_hex_string((unsigned long) sal.pc)); + print_address_numeric (sal.pc, gdb_stdout); + printf_filtered (" is in "); fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout); printf_filtered (" (%s:%d).\n", sal.symtab->filename, sal.line); } else - printf_filtered ("%s is at %s:%d.\n", - local_hex_string((unsigned long) sal.pc), - sal.symtab->filename, sal.line); + { + print_address_numeric (sal.pc, gdb_stdout); + printf_filtered (" is at %s:%d.\n", + sal.symtab->filename, sal.line); + } } /* If line was not specified by just a line number, @@ -1125,7 +1139,7 @@ line_info (arg, from_tty) printf_filtered ("\n"); } else if (sal.line > 0 - && find_line_pc_range (sal.symtab, sal.line, &start_pc, &end_pc)) + && find_line_pc_range (sal, &start_pc, &end_pc)) { if (start_pc == end_pc) { |