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, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA. */
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA. */
#include "config.h"
#include "system.h"
if (*e == NULL)
{
struct symbol_hash_entry *v;
- *e = v = xcalloc (1, sizeof (*v));
+ *e = v = XCNEW (struct symbol_hash_entry);
v->key = xstrdup (string);
}
return *e;
if (*e == NULL)
{
struct file_hash_entry *v;
- *e = v = xcalloc (1, sizeof (*v));
+ *e = v = XCNEW (struct file_hash_entry);
v->key = xstrdup (string);
}
return *e;
if (*e == NULL)
{
struct demangled_hash_entry *v;
- *e = v = xcalloc (1, sizeof (*v));
+ *e = v = XCNEW (struct demangled_hash_entry);
v->key = xstrdup (string);
}
return *e;
if (obstack_object_size (ob) == 0)
return NULL;
obstack_1grow (ob, '\0');
- return obstack_finish (ob);
+ return XOBFINISH (ob, char *);
}
static char *
done:
obstack_ptr_grow (&temporary_obstack, f->main);
obstack_ptr_grow (&temporary_obstack, NULL);
- argv = obstack_finish (&temporary_obstack);
+ argv = XOBFINISH (&temporary_obstack, char **);
if (tlink_verbose)
fprintf (stderr, _("collect: recompiling %s\n"), f->main);
{
FILE *stream = fopen (fname, "r");
char *line;
+ int skip_next_in_line = 0;
while ((line = tfgets (stream)) != NULL)
{
char *p = line, *q;
symbol *sym;
int end;
+ int ok = 0;
+
+ /* On darwin9, we might have to skip " in " lines as well. */
+ if (skip_next_in_line
+ && strstr (p, " in "))
+ continue;
+ skip_next_in_line = 0;
while (*p && ISSPACE ((unsigned char) *p))
++p;
demangled *dem = 0;
q = 0;
+ /* On darwin9, we look for "foo" referenced from:\n\(.* in .*\n\)* */
+ if (strcmp (oldq, "referenced from:") == 0)
+ {
+ /* We have to remember that we found a symbol to tweak. */
+ ok = 1;
+
+ /* We actually want to start from the first word on the
+ line. */
+ oldq = p;
+
+ /* Since the format is multiline, we have to skip
+ following lines with " in ". */
+ skip_next_in_line = 1;
+ }
+
/* First try `GNU style'. */
p = strchr (oldq, '`');
if (p)
/* We need to check for certain error keywords here, or we would
mistakenly use GNU ld's "In function `foo':" message. */
- if (q && (strstr (oldq, "ndefined")
+ if (q && (ok
+ || strstr (oldq, "ndefined")
|| strstr (oldq, "nresolved")
|| strstr (oldq, "nsatisfied")
|| strstr (oldq, "ultiple")))