/* Scan linker error messages for missing template instantiations and provide
them.
- Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2007
+ Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008
Free Software Foundation, Inc.
Contributed by Jason Merrill (jason@cygnus.com).
#include "hashtab.h"
#include "demangle.h"
#include "collect2.h"
+#include "libiberty.h"
+
+/* TARGET_64BIT may be defined to use driver specific functionality. */
+#undef TARGET_64BIT
+#define TARGET_64BIT TARGET_64BIT_DEFAULT
#define MAX_ITERATIONS 17
static int tlink_verbose;
-static char initial_cwd[MAXPATHLEN + 1];
+static char *initial_cwd;
\f
/* Hash table boilerplate for working with htab_t. We have hash tables
for symbol names, file names, and demangled symbols. */
*e = v = XCNEW (struct symbol_hash_entry);
v->key = xstrdup (string);
}
- return *e;
+ return (struct symbol_hash_entry *) *e;
}
static htab_t file_table;
*e = v = XCNEW (struct file_hash_entry);
v->key = xstrdup (string);
}
- return *e;
+ return (struct file_hash_entry *) *e;
}
static htab_t demangled_table;
*e = v = XCNEW (struct demangled_hash_entry);
v->key = xstrdup (string);
}
- return *e;
+ return (struct demangled_hash_entry *) *e;
}
\f
/* Stack code. */
static void
symbol_push (symbol *p)
{
- struct symbol_stack_entry *ep = obstack_alloc
- (&symbol_stack_obstack, sizeof (struct symbol_stack_entry));
+ struct symbol_stack_entry *ep
+ = XOBNEW (&symbol_stack_obstack, struct symbol_stack_entry);
ep->value = p;
ep->next = symbol_stack;
symbol_stack = ep;
if (p->tweaking)
return;
- ep = obstack_alloc
- (&file_stack_obstack, sizeof (struct file_stack_entry));
+ ep = XOBNEW (&file_stack_obstack, struct file_stack_entry);
ep->value = p;
ep->next = file_stack;
file_stack = ep;
tlink_verbose = 3;
}
- getcwd (initial_cwd, sizeof (initial_cwd));
+ initial_cwd = getpwd ();
}
static int
{
struct pex_obj *pex;
- pex = collect_execute (prog, argv, outname, errname);
+ pex = collect_execute (prog, argv, outname, errname, PEX_LAST | PEX_SEARCH);
return collect_wait (prog, pex);
}
p = s + strlen (s);
obstack_grow (&temporary_obstack, s, p - s);
- return obstack_copy0 (&temporary_obstack, ext, strlen (ext));
+ return (char *) obstack_copy0 (&temporary_obstack, ext, strlen (ext));
}
static char *
/* Then try "double quotes". */
else if (p = strchr (oldq, '"'), p)
p++, q = strchr (p, '"');
+ /* Then try 'single quotes'. */
+ else if (p = strchr (oldq, '\''), p)
+ p++, q = strchr (p, '\'');
else {
/* Then try entire line. */
q = strchr (oldq, 0);
if (sym && sym->tweaked)
{
error ("'%s' was assigned to '%s', but was not defined "
- "during recompilation, or vice versa",
+ "during recompilation, or vice versa",
sym->key, sym->file->key);
fclose (stream);
return 0;