From owner-freebsd-bugs@freebsd.org Fri Jul 15 21:28:57 2016 Return-Path: Delivered-To: freebsd-bugs@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BBE4FB9A063 for ; Fri, 15 Jul 2016 21:28:57 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2001:1900:2254:206a::16:76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id AB3B31A53 for ; Fri, 15 Jul 2016 21:28:57 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from bugs.freebsd.org ([127.0.1.118]) by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id u6FLSvtw056161 for ; Fri, 15 Jul 2016 21:28:57 GMT (envelope-from bugzilla-noreply@freebsd.org) From: bugzilla-noreply@freebsd.org To: freebsd-bugs@FreeBSD.org Subject: [Bug 211123] Throw C++ exception from a signal handler. Date: Fri, 15 Jul 2016 21:28:57 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Base System X-Bugzilla-Component: kern X-Bugzilla-Version: 9.2-RELEASE X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Many People X-Bugzilla-Who: jilles@FreeBSD.org X-Bugzilla-Status: New X-Bugzilla-Resolution: X-Bugzilla-Priority: --- X-Bugzilla-Assigned-To: freebsd-bugs@FreeBSD.org X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cc keywords Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jul 2016 21:28:57 -0000 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D211123 Jilles Tjoelker changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jilles@FreeBSD.org Keywords|patch | --- Comment #1 from Jilles Tjoelker --- This could be because FreeBSD's signal trampoline does not have proper unwi= nd information since it is not part of a proper ELF object. Debuggers such as = gdb have a special case for this but the unwinder for C++ exceptions does not. If you really want to do this, a workaround could be a sigjmp_buf in thread-local storage. The null pointer dereference does not raise SIGSEGV because clang detects i= t as undefined behaviour, replacing it with an ud2 instruction and deleting everything after it. Apart from that, throwing exceptions from arbitrary points in the code is rather unsafe. Per gcc's documentation, even -fnon-call-exceptions will not handle asynchronous exceptions. Safely interrupting code at any location requires process isolation or severe restrictions on the code. --=20 You are receiving this mail because: You are the assignee for the bug.=