[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: GNU Linker Utility Assert
From: |
Nick Clifton |
Subject: |
Re: GNU Linker Utility Assert |
Date: |
22 Mar 2002 10:24:43 +0000 |
User-agent: |
Gnus/5.0808 (Gnus v5.8.8) Emacs/21.1 |
Hi Charles,
> I'm reporting a bug in the linker. When you attempt to build the
> following, the following assert occurs:
>
> assert "(hds->flags&(040) == 0 && (h->flags & (010000)) == 0" failed file
> "/cm/src/cygnus/98r2/src/frozen/bfd/xcofflink.c" line 2417
>
> The attach file is a tar ball make the creates the problem. The problem
> occurs when I mistakenly call the toc reference of the c routine
> instead of the actual name of the function. That is, in the assembler code
> I called "test_func" instead of ".test_func".
>
> The bug is the linker should not assert, even though I've made a coding
> mistake.
OK - how about this replacement for the assert ? I am not sure if the
wording is exactly right, since I am unfamiliar with this code. So I
have included Tom Rix, the PowerPC XCOFF maintainer for binutils, in
the address list for this email.
Cheers
Nick
2002-03-22 Nick Clifton <address@hidden>
* xcofflink.c (xcoff_link_add_symbols): Replace assertion with
meaningful error message.
Index: bfd/xcofflink.c
===================================================================
RCS file: /cvs/src/src/bfd/xcofflink.c,v
retrieving revision 1.21
diff -c -3 -p -w -r1.21 xcofflink.c
*** xcofflink.c 2002/03/20 12:03:27 1.21
--- xcofflink.c 2002/03/22 10:20:13
*************** xcoff_link_add_symbols (abfd, info)
*** 1989,1996 ****
goto error_return;
}
hds->flags |= XCOFF_DESCRIPTOR;
! BFD_ASSERT ((hds->flags & XCOFF_CALLED) == 0
! && (h->flags & XCOFF_DESCRIPTOR) == 0);
hds->descriptor = h;
h->descriptor = hds;
}
--- 1989,2004 ----
goto error_return;
}
hds->flags |= XCOFF_DESCRIPTOR;
! if ((hds->flags & XCOFF_CALLED) != 0
! ||(h->flags & XCOFF_DESCRIPTOR) != 0)
! {
! (*_bfd_error_handler)
! (_("%s: bad relocation between symbols '%s' and
'%s'"),
! bfd_archive_filename (abfd), h->root.root.string,
! hds->root.root.string);
! bfd_set_error (bfd_error_invalid_operation);
! goto error_return;
! }
hds->descriptor = h;
h->descriptor = hds;
}