This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

bug in implementation of __throw in gcc?


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]