This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
bug in implementation of __throw in gcc?
- To: gcc at gcc dot gnu dot org
- Subject: bug in implementation of __throw in gcc?
- From: David Edelsohn <dje at watson dot ibm dot com> (by way of Kevin B. Hendricks <kevin dot hendricks at sympatico dot ca>)
- Date: Tue, 12 Dec 2000 14:02:26 -0500
Hi,
The libgcc2.c _throw code is:
/* Now reset pc to the right throw point. */
pc = __builtin_extract_return_addr (__builtin_return_address (0)) - 1;
handler = throw_helper (eh, pc, my_udata, &offset);
If I disassemble this code under ppc linux, it shows pc getting decremented
by 1 (not by 4) which makes pc on entry to throw_helper not point to the
address of the __throw but instead to 3 bytes after it.
Is this a bug? Why use the "-1" here and not -4 (bytes) so that the actual
address of the __throw is in pc as the comments in libgcc2.c indicate they
should for entry to throw_helper.
Is this just a mistake in pointer arithmetic?
If a mistake, does this even matter when it comes to finding the right
handler to catch the exception (I am worried about the end conditions tested
for in the find_fde code).
Any help here would be greatly appreciated.
Thanks,
Kevin
---
Kevin B. Hendricks, Associate Professor
Operations and Information Technology
Richard Ivey School of Business, UWO, London ON, CANADA
(519) 661-3874