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