X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftlink.c;h=7b589832b06ce799fde99fec725666e764e36e22;hb=2f1ce05cf95e354ae01c6801d32fb518f97fa593;hp=7907f419488e7eeb5ad44bc36dd647fb912e420c;hpb=d11c218949676961e1826706e25a709db31cd308;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tlink.c b/gcc/tlink.c index 7907f419488..7b589832b06 100644 --- a/gcc/tlink.c +++ b/gcc/tlink.c @@ -1,7 +1,7 @@ /* Scan linker error messages for missing template instantiations and provide them. - Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005 + Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Jason Merrill (jason@cygnus.com). @@ -9,7 +9,7 @@ This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -18,9 +18,8 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301, USA. */ +along with GCC; see the file COPYING3. If not see +. */ #include "config.h" #include "system.h" @@ -31,6 +30,11 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #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 @@ -39,7 +43,7 @@ extern int prepends_underscore; static int tlink_verbose; -static char initial_cwd[MAXPATHLEN + 1]; +static char *initial_cwd; /* Hash table boilerplate for working with htab_t. We have hash tables for symbol names, file names, and demangled symbols. */ @@ -128,7 +132,7 @@ symbol_hash_lookup (const char *string, int create) *e = v = XCNEW (struct symbol_hash_entry); v->key = xstrdup (string); } - return *e; + return (struct symbol_hash_entry *) *e; } static htab_t file_table; @@ -148,7 +152,7 @@ file_hash_lookup (const char *string) *e = v = XCNEW (struct file_hash_entry); v->key = xstrdup (string); } - return *e; + return (struct file_hash_entry *) *e; } static htab_t demangled_table; @@ -170,7 +174,7 @@ demangled_hash_lookup (const char *string, int create) *e = v = XCNEW (struct demangled_hash_entry); v->key = xstrdup (string); } - return *e; + return (struct demangled_hash_entry *) *e; } /* Stack code. */ @@ -194,8 +198,8 @@ struct file_stack_entry *file_stack; 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; @@ -222,8 +226,7 @@ file_push (file *p) 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; @@ -275,7 +278,7 @@ tlink_init (void) tlink_verbose = 3; } - getcwd (initial_cwd, sizeof (initial_cwd)); + initial_cwd = getpwd (); } static int @@ -284,7 +287,7 @@ tlink_execute (const char *prog, char **argv, const char *outname, { 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); } @@ -299,7 +302,7 @@ frob_extension (const char *s, const char *ext) 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 * @@ -658,7 +661,7 @@ scan_linker_output (const char *fname) if (! sym && ! end) /* Try a mangled name in quotes. */ { - const char *oldq = q + 1; + char *oldq = q + 1; demangled *dem = 0; q = 0; @@ -684,6 +687,9 @@ scan_linker_output (const char *fname) /* 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); @@ -727,7 +733,7 @@ scan_linker_output (const char *fname) 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;