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

Unified Diff: gdb/macrotab.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/macrotab.h ('k') | gdb/main.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/macrotab.c
diff --git a/gdb/macrotab.c b/gdb/macrotab.c
index e65e5dc842525c081bd327dfa61c82d88daaf4a2..2e5592ba0676017863c808e5e0897c48d5ba4a10 100644
--- a/gdb/macrotab.c
+++ b/gdb/macrotab.c
@@ -1,5 +1,5 @@
/* C preprocessor macro tables for GDB.
- Copyright (C) 2002, 2007-2012 Free Software Foundation, Inc.
+ Copyright (C) 2002-2013 Free Software Foundation, Inc.
Contributed by Red Hat, Inc.
This file is part of GDB.
@@ -48,6 +48,10 @@ struct macro_table
#inclusion tree; everything else is #included from here. */
struct macro_source_file *main_source;
+ /* Compilation directory for all files of this macro table. It is allocated
+ on objfile's obstack. */
+ const char *comp_dir;
+
/* True if macros in this table can be redefined without issuing an
error. */
int redef_ok;
@@ -128,7 +132,7 @@ macro_bcache (struct macro_table *t, const void *addr, int len)
static const char *
macro_bcache_str (struct macro_table *t, const char *s)
{
- return (char *) macro_bcache (t, s, strlen (s) + 1);
+ return macro_bcache (t, s, strlen (s) + 1);
}
@@ -463,6 +467,8 @@ macro_include (struct macro_source_file *source,
the new one? */
if (*link && line == (*link)->included_at_line)
{
+ char *link_fullname, *source_fullname;
+
/* This means the compiler is emitting bogus debug info. (GCC
circa March 2002 did this.) It also means that the splay
tree ordering function, macro_tree_compare, will abort,
@@ -470,9 +476,14 @@ macro_include (struct macro_source_file *source,
should tolerate bad debug info. So:
First, squawk. */
+
+ link_fullname = macro_source_fullname (*link);
+ source_fullname = macro_source_fullname (source);
complaint (&symfile_complaints,
_("both `%s' and `%s' allegedly #included at %s:%d"),
- included, (*link)->filename, source->filename, line);
+ included, link_fullname, source_fullname, line);
+ xfree (source_fullname);
+ xfree (link_fullname);
/* Now, choose a new, unoccupied line number for this
#inclusion, after the alleged #inclusion line. */
@@ -504,22 +515,6 @@ macro_lookup_inclusion (struct macro_source_file *source, const char *name)
if (filename_cmp (name, source->filename) == 0)
return source;
- /* The filename in the source structure is probably a full path, but
- NAME could be just the final component of the name. */
- {
- int name_len = strlen (name);
- int src_name_len = strlen (source->filename);
-
- /* We do mean < here, and not <=; if the lengths are the same,
- then the filename_cmp above should have triggered, and we need to
- check for a slash here. */
- if (name_len < src_name_len
- && IS_DIR_SEPARATOR (source->filename[src_name_len - name_len - 1])
- && filename_cmp (name,
- source->filename + src_name_len - name_len) == 0)
- return source;
- }
-
/* It's not us. Try all our children, and return the lowest. */
{
struct macro_source_file *child;
@@ -730,11 +725,17 @@ check_for_redefinition (struct macro_source_file *source, int line,
if (! same)
{
+ char *source_fullname, *found_key_fullname;
+
+ source_fullname = macro_source_fullname (source);
+ found_key_fullname = macro_source_fullname (found_key->start_file);
complaint (&symfile_complaints,
_("macro `%s' redefined at %s:%d; "
"original definition at %s:%d"),
- name, source->filename, line,
- found_key->start_file->filename, found_key->start_line);
+ name, source_fullname, line, found_key_fullname,
+ found_key->start_line);
+ xfree (found_key_fullname);
+ xfree (source_fullname);
}
return found_key;
@@ -853,12 +854,17 @@ macro_undef (struct macro_source_file *source, int line,
#definition. */
if (key->end_file)
{
+ char *source_fullname, *key_fullname;
+
+ source_fullname = macro_source_fullname (source);
+ key_fullname = macro_source_fullname (key->end_file);
complaint (&symfile_complaints,
_("macro '%s' is #undefined twice,"
" at %s:%d and %s:%d"),
- name,
- source->filename, line,
- key->end_file->filename, key->end_line);
+ name, source_fullname, line, key_fullname,
+ key->end_line);
+ xfree (key_fullname);
+ xfree (source_fullname);
}
/* Whether or not we've seen a prior #undefinition, wipe out
@@ -918,8 +924,16 @@ macro_lookup_definition (struct macro_source_file *source,
splay_tree_node n = find_definition (name, source, line);
if (n)
- return fixup_definition (source->filename, line,
- (struct macro_definition *) n->value);
+ {
+ struct macro_definition *retval;
+ char *source_fullname;
+
+ source_fullname = macro_source_fullname (source);
+ retval = fixup_definition (source_fullname, line,
+ (struct macro_definition *) n->value);
+ xfree (source_fullname);
+ return retval;
+ }
else
return 0;
}
@@ -962,9 +976,13 @@ foreach_macro (splay_tree_node node, void *arg)
{
struct macro_for_each_data *datum = (struct macro_for_each_data *) arg;
struct macro_key *key = (struct macro_key *) node->key;
- struct macro_definition *def
- = fixup_definition (key->start_file->filename, key->start_line,
- (struct macro_definition *) node->value);
+ struct macro_definition *def;
+ char *key_fullname;
+
+ key_fullname = macro_source_fullname (key->start_file);
+ def = fixup_definition (key_fullname, key->start_line,
+ (struct macro_definition *) node->value);
+ xfree (key_fullname);
(*datum->fn) (key->name, def, key->start_file, key->start_line,
datum->user_data);
@@ -990,9 +1008,13 @@ foreach_macro_in_scope (splay_tree_node node, void *info)
{
struct macro_for_each_data *datum = (struct macro_for_each_data *) info;
struct macro_key *key = (struct macro_key *) node->key;
- struct macro_definition *def
- = fixup_definition (datum->file->filename, datum->line,
- (struct macro_definition *) node->value);
+ struct macro_definition *def;
+ char *datum_fullname;
+
+ datum_fullname = macro_source_fullname (datum->file);
+ def = fixup_definition (datum_fullname, datum->line,
+ (struct macro_definition *) node->value);
+ xfree (datum_fullname);
/* See if this macro is defined before the passed-in line, and
extends past that line. */
@@ -1027,8 +1049,8 @@ macro_for_each_in_scope (struct macro_source_file *file, int line,
struct macro_table *
-new_macro_table (struct obstack *obstack,
- struct bcache *b)
+new_macro_table (struct obstack *obstack, struct bcache *b,
+ const char *comp_dir)
{
struct macro_table *t;
@@ -1042,6 +1064,7 @@ new_macro_table (struct obstack *obstack,
t->obstack = obstack;
t->bcache = b;
t->main_source = NULL;
+ t->comp_dir = comp_dir;
t->redef_ok = 0;
t->definitions = (splay_tree_new_with_allocator
(macro_tree_compare,
@@ -1064,3 +1087,14 @@ free_macro_table (struct macro_table *table)
/* Free the table of macro definitions. */
splay_tree_delete (table->definitions);
}
+
+/* See macrotab.h for the comment. */
+
+char *
+macro_source_fullname (struct macro_source_file *file)
+{
+ if (file->table->comp_dir == NULL || IS_ABSOLUTE_PATH (file->filename))
+ return xstrdup (file->filename);
+
+ return concat (file->table->comp_dir, SLASH_STRING, file->filename, NULL);
+}
« no previous file with comments | « gdb/macrotab.h ('k') | gdb/main.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698