@@ -1244,14 +1244,14 @@ end_symtab_with_blockvector (struct block *static_block,
if (subfile->dirname)
{
/* Reallocate the dirname on the symbol obstack. */
- symtab->dirname =
+ SYMTAB_DIRNAME (symtab) =
obstack_copy0 (&objfile->objfile_obstack,
subfile->dirname,
strlen (subfile->dirname));
}
else
{
- symtab->dirname = NULL;
+ SYMTAB_DIRNAME (symtab) = NULL;
}
/* Use whatever language we have been using for this
@@ -1486,21 +1486,23 @@ compare_symtabs (const void *a, const void *b)
{
const struct symtab_and_line *sala = a;
const struct symtab_and_line *salb = b;
+ const char *dira = SYMTAB_DIRNAME (sala->symtab);
+ const char *dirb = SYMTAB_DIRNAME (salb->symtab);
int r;
- if (!sala->symtab->dirname)
+ if (dira == NULL)
{
- if (salb->symtab->dirname)
+ if (dirb != NULL)
return -1;
}
- else if (!salb->symtab->dirname)
+ else if (dirb == NULL)
{
- if (sala->symtab->dirname)
+ if (dira != NULL)
return 1;
}
else
{
- r = filename_cmp (sala->symtab->dirname, salb->symtab->dirname);
+ r = filename_cmp (dira, dirb);
if (r)
return r;
}
@@ -645,7 +645,7 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
symtab = allocate_symtab (stab->file_name, objfile);
/* JIT compilers compile in memory. */
- symtab->dirname = NULL;
+ SYMTAB_DIRNAME (symtab) = NULL;
/* Copy over the linetable entry if one was provided. */
if (stab->linetable)
@@ -659,8 +659,8 @@ source_info (char *ignore, int from_tty)
return;
}
printf_filtered (_("Current source file is %s\n"), s->filename);
- if (s->dirname)
- printf_filtered (_("Compilation directory is %s\n"), s->dirname);
+ if (SYMTAB_DIRNAME (s) != NULL)
+ printf_filtered (_("Compilation directory is %s\n"), SYMTAB_DIRNAME (s));
if (s->fullname)
printf_filtered (_("Located in %s\n"), s->fullname);
if (s->nlines)
@@ -1105,7 +1105,7 @@ open_source_file (struct symtab *s)
if (!s)
return -1;
- return find_and_open_source (s->filename, s->dirname, &s->fullname);
+ return find_and_open_source (s->filename, SYMTAB_DIRNAME (s), &s->fullname);
}
/* Finds the fullname that a symtab represents.
@@ -1125,7 +1125,8 @@ symtab_to_fullname (struct symtab *s)
to handle cases like the file being moved. */
if (s->fullname == NULL)
{
- int fd = find_and_open_source (s->filename, s->dirname, &s->fullname);
+ int fd = find_and_open_source (s->filename, SYMTAB_DIRNAME (s),
+ &s->fullname);
if (fd >= 0)
close (fd);
@@ -1137,10 +1138,11 @@ symtab_to_fullname (struct symtab *s)
/* rewrite_source_path would be applied by find_and_open_source, we
should report the pathname where GDB tried to find the file. */
- if (s->dirname == NULL || IS_ABSOLUTE_PATH (s->filename))
+ if (SYMTAB_DIRNAME (s) == NULL || IS_ABSOLUTE_PATH (s->filename))
fullname = xstrdup (s->filename);
else
- fullname = concat (s->dirname, SLASH_STRING, s->filename, NULL);
+ fullname = concat (SYMTAB_DIRNAME (s), SLASH_STRING, s->filename,
+ NULL);
back_to = make_cleanup (xfree, fullname);
s->fullname = rewrite_source_path (fullname);
@@ -297,9 +297,9 @@ dump_symtab_1 (struct objfile *objfile, struct symtab *symtab,
fprintf_filtered (outfile, "\nSymtab for file %s\n",
symtab_to_filename_for_display (symtab));
- if (symtab->dirname)
+ if (SYMTAB_DIRNAME (symtab) != NULL)
fprintf_filtered (outfile, "Compilation directory is %s\n",
- symtab->dirname);
+ SYMTAB_DIRNAME (symtab));
fprintf_filtered (outfile, "Read from object file %s (",
objfile_name (objfile));
gdb_print_host_address (objfile, outfile);
@@ -753,7 +753,8 @@ maintenance_info_symtabs (char *regexp, int from_tty)
printf_filtered ("((struct symtab *) %s)\n",
host_address_to_string (symtab));
printf_filtered (" dirname %s\n",
- symtab->dirname ? symtab->dirname : "(null)");
+ SYMTAB_DIRNAME (symtab) != NULL
+ ? SYMTAB_DIRNAME (symtab) : "(null)");
printf_filtered (" fullname %s\n",
symtab->fullname ? symtab->fullname : "(null)");
printf_filtered (" "
@@ -984,6 +984,7 @@ struct symtab
#define LINETABLE(symtab) (symtab)->linetable
#define SYMTAB_OBJFILE(symtab) ((symtab)->objfile)
#define SYMTAB_PSPACE(symtab) (SYMTAB_OBJFILE (symtab)->pspace)
+#define SYMTAB_DIRNAME(symtab) ((symtab)->dirname)
/* Call this to set the "primary" field in struct symtab. */
extern void set_symtab_primary (struct symtab *, int primary);