summaryrefslogtreecommitdiff
path: root/gdb/source.c
diff options
context:
space:
mode:
authorStan Shebs <shebs@codesourcery.com>1994-04-15 21:55:49 +0000
committerStan Shebs <shebs@codesourcery.com>1994-04-15 21:55:49 +0000
commitfad466eb6de0629edc89081998337fd13566e989 (patch)
tree0190472f3bd8a3ce36a30ba310c4aa2acfb5cfc0 /gdb/source.c
parent97ea252ef8065df3fcc039801fcc370aa3e3c00f (diff)
downloadbinutils-gdb-fad466eb6de0629edc89081998337fd13566e989.tar.gz
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.c62
1 files changed, 38 insertions, 24 deletions
diff --git a/gdb/source.c b/gdb/source.c
index 5a4733ff212..ec569378306 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)
{