From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24384 invoked by alias); 21 May 2006 22:50:39 -0000 Received: (qmail 24355 invoked by uid 48); 21 May 2006 22:50:27 -0000 Date: Sun, 21 May 2006 22:50:00 -0000 From: "jsm28 at gcc dot gnu dot org" To: glibc-bugs@sources.redhat.com Message-ID: <20060521225027.2682.jsm28@gcc.gnu.org> Reply-To: sourceware-bugzilla@sourceware.org Subject: [Bug ports/2682] New: On ARM EABI, exit should be marked EXIDX_CANTUNWIND X-Bugzilla-Reason: CC Mailing-List: contact glibc-bugs-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Post: List-Help: , Sender: glibc-bugs-owner@sourceware.org X-SW-Source: 2006-05/txt/msg00123.txt.bz2 List-Id: On ARM EABI, the function "exit" needs to be marked with EXIDX_CANTUNWIND so that exceptions thrown from functions registered with atexit properly stop unwinding at that point. This may need a GCC change to add a "nounwind" attribute so that C functions can be marked that way. (_start is defined in assembly with ".cantunwind" which deals with the true end of the stack, but that doesn't suffice; the C++ standard requires unwinding to stop and terminate to be called on leaving an atexit function.) The C++ testcase is as follows; it should call "terminate" but instead segfaults. extern "C" int puts(const char *); struct S { int i; S() : i(0) { } ~S() { puts("dtor"); throw "s"; // no handler anywhere } }; S xo; int main(int argc, char *argv[]) { puts("main"); return 0; } -- Summary: On ARM EABI, exit should be marked EXIDX_CANTUNWIND Product: glibc Version: 2.4 Status: NEW Severity: normal Priority: P2 Component: ports AssignedTo: roland at gnu dot org ReportedBy: jsm28 at gcc dot gnu dot org CC: glibc-bugs at sources dot redhat dot com GCC target triplet: arm-*-linux-gnueabi http://sourceware.org/bugzilla/show_bug.cgi?id=2682 ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is.