gcc 2v optimization problem with C++ exceptions?
Kevin B. Hendricks
khendricks at ivey.uwo.ca
Wed Apr 11 03:19:44 EST 2001
I need some help trying to debug a gcc (2v - your latest) ppc
in C++ code that uses exceptions.
I have one project that when compiled with "-O2" that causes an uncaught
exception abort but when built with "-O2 -fno-schedule-* of both types"
Since the involved source code is quite large, I used objdump -D -C on
object file and saved the disassembled dumps. I then used diff to
compare the working
and non-working versions.
The *ONLY* difference in the resulting dumps occurred in the
Here is an example of one such difference (please ignore the assembly
itself since it is from disassembling the "data" in the exception table).
diff -u unxlngppc.pro.bad/slo/broadcaster.dump
--- unxlngppc.pro.bad/slo/broadcaster.dump Tue Apr 10 10:23:51 2001
+++ unxlngppc.pro.working/slo/broadcaster.dump Tue Apr 10 10:31:25 2001
@@ -9268,8 +9268,8 @@
480: 6f 61 64 63 xoris r1,r27,25699
484: 61 73 74 65 ori r19,r11,29797
488: 72 2e 63 78 andi. r14,r17,25464
- 48c: 78 36 4e 55 .long 0x78364e55
- 490: 6e 4d 64 32 xoris r13,r18,25650
+ 48c: 78 66 44 76 .long 0x78664476
+ 490: 54 76 61 32 rlwinm r22,r3,12,4,25
494: 31 45 6d 70 addic r10,r5,28016
498: 74 79 42 72 andis. r25,r3,17010
49c: 6f 61 64 63 xoris r1,r27,25699
There were *no* underlying code differences in any way. (I actually
thought adding the -fno-schedule stuff would have a big impact on the
code generated but it did not seem to under g++)
Note: the failure mode of this code is to not catch
an exception that is thrown (I believe properly).
I do not understand how __EXCEPTION_TABLES are built (I assume they give
starting and ending ranges of pcs that is used during stack walkback to
check if the offending throw should be caught someplace. I looked but
some of the entries are aligned to 4 (as I expect a pc value to be) and
some are not.
I also don't understand why -f-no-schedule-insns* should have any impact
on the exception table if the underlying code is not different (i.e. no
reordering was done).
Can you tell me the best way to track this thing down to something
smaller so that I can give a more informative bug report and or create a
sample program that exhibits the same behavior?
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-dev