bug in implementation of __throw in gcc?
David Edelsohn
dje@watson.ibm.com
Tue Dec 12 11:02:00 GMT 2000
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
More information about the Gcc
mailing list