why emitting unwind labels?
Jack Howarth
howarth@bromo.med.uc.edu
Thu Oct 8 02:09:00 GMT 2009
While constructing a patch to resolve PR41313 on darwin, I noticed an oddity.
The problem in PR41313 is due to hot/cold partitioning not being understood by
darwin_emit_unwind_label() such that duplicate .eh symbols can be created. This
can be fixed by restoring the previous behavior for disabling -freorder-blocks-and-partition
when using exception handling, if the target requested unwind info or if target does not support
named sections...
http://gcc.gnu.org/bugzilla/attachment.cgi?id=18718&action=view
however we still end up with two failing test cases...
FAIL: gcc.dg/tree-prof/bb-reorg.c compilation, -fprofile-use -D_PROFILE_USE
FAIL: gcc.dg/tree-prof/pr34999.c compilation, -fprofile-use -D_PROFILE_USE
which are still due to duplicate symbols...
Executing on host: /sw/src/fink.build/gcc45-4.4.999-20091006/darwin_objdir/gcc/xgcc -B/sw/src/fink.build/gcc45-4.4.999-20091006/darwin_objdir/gcc/ /sw/src/fink.build/gcc45-4.4.999-
20091006/gcc-4.5-20091006/gcc/testsuite/gcc.dg/tree-prof/bb-reorg.c -O2 -freorder-blocks-and-partition -fprofile-use -D_PROFILE_USE -lm -o /sw/src/fink.build/gcc45-4.4.999-200
91006/darwin_objdir/gcc/testsuite/gcc/bb-reorg.x02 (timeout = 300)
/var/tmp//ccYRIMnq.s:230:FATAL:Symbol _foo.eh already defined.
compiler exited with status 1
output is:
/var/tmp//ccYRIMnq.s:230:FATAL:Symbol _foo.eh already defined.
FAIL: gcc.dg/tree-prof/bb-reorg.c compilation, -fprofile-use -D_PROFILE_USE
UNRESOLVED: gcc.dg/tree-prof/bb-reorg.c execution, -fprofile-use -D_PROFILE_USE
Executing on host: /sw/src/fink.build/gcc45-4.4.999-20091006/darwin_objdir/gcc/xgcc -B/sw/src/fink.build/gcc45-4.4.999-20091006/darwin_objdir/gcc/ /sw/src/fink.build/gcc45-4.4.999-
20091006/gcc-4.5-20091006/gcc/testsuite/gcc.dg/tree-prof/pr34999.c -O2 -freorder-blocks-and-partition -fprofile-use -D_PROFILE_USE -lm -o /sw/src/fink.build/gcc45-4.4.999-2009
1006/darwin_objdir/gcc/testsuite/gcc/pr34999.x02 (timeout = 300)
/var/tmp//ccL8gCZB.s:219:FATAL:Symbol _main.eh already defined.
compiler exited with status 1
output is:
/var/tmp//ccL8gCZB.s:219:FATAL:Symbol _main.eh already defined.
FAIL: gcc.dg/tree-prof/pr34999.c compilation, -fprofile-use -D_PROFILE_USE
UNRESOLVED: gcc.dg/tree-prof/pr34999.c execution, -fprofile-use -D_PROFILE_USE
It seems unclear why those two test cases should be emitting unwind labels.
I can understand cases like g++.dg/tree-prof/partition1.C as it has try and
catch statements, but I don't see anything in gcc.dg/tree-prof/bb-reorg.c
or gcc.dg/tree-prof/pr34999.c that should be triggering a call to
the subroutine set in TARGET_ASM_EMIT_UNWIND_LABEL. Or is a break or
abort() sufficient to trigger the emitting of an unwind label?
Jack
More information about the Gcc
mailing list