This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[COMMITTED PATCH] Use pragmas rather than makefiles for necessary options for unwind code.
- From: Roland McGrath <roland at hack dot frob dot com>
- To: "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Tue, 16 Dec 2014 14:35:58 -0800 (PST)
- Subject: [COMMITTED PATCH] Use pragmas rather than makefiles for necessary options for unwind code.
- Authentication-results: sourceware.org; auth=none
Verified on x86_64-linux-gnu that no generated code (including unwind info)
changes. Also tested arm-linux-gnueabihf that no generated code changes;
there was one difference in the EABI unwind info for __unwind_freeres,
which I don't understand but also deem wholly unimportant.
Thanks,
Roland
2014-12-16 Roland McGrath <roland@hack.frob.com>
* nptl/unwind.c: Use pragma to turn on -fexceptions.
* sysdeps/nptl/unwind-forcedunwind.c: Use pragma to turn on
-fexceptions and -fasynchronous-unwind-tables.
* sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c: Likewise.
* sysdeps/gnu/unwind-resume.c: Likewise.
* nptl/Makefile (CFLAGS-unwind.c, CFLAGS-unwind-forcedunwind.c):
Variables removed.
* sysdeps/gnu/Makefile
[$(subdir) = csu] (CFLAGS-unwind-resume.c): Likewise.
[$(subdir) = rt] (CFLAGS-rt-unwind-resume.c): Likewise.
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -146,9 +146,6 @@ libpthread-static-only-routines = pthread_atfork
# nptl-init.c contains sigcancel_handler().
CFLAGS-nptl-init.c = -fexceptions -fasynchronous-unwind-tables
-# The unwind code itself,
-CFLAGS-unwind.c = -fexceptions
-CFLAGS-unwind-forcedunwind.c = -fexceptions -fasynchronous-unwind-tables
# The following three functions must be async-cancel safe.
CFLAGS-pthread_cancel.c = -fexceptions -fasynchronous-unwind-tables
--- a/nptl/unwind.c
+++ b/nptl/unwind.c
@@ -25,6 +25,8 @@
#include "pthreadP.h"
#include <jmpbuf-unwind.h>
+#pragma GCC optimize "-fexceptions"
+
#ifdef HAVE_FORCED_UNWIND
#ifdef _STACK_GROWS_DOWN
--- a/sysdeps/gnu/Makefile
+++ b/sysdeps/gnu/Makefile
@@ -79,11 +79,9 @@ endif
ifeq ($(subdir),csu)
routines += unwind-resume
shared-only-routines += unwind-resume
-CFLAGS-unwind-resume.c += -fexceptions -fasynchronous-unwind-tables
endif
ifeq ($(subdir),rt)
librt-sysdep_routines += rt-unwind-resume
librt-shared-only-routines += rt-unwind-resume
-CFLAGS-rt-unwind-resume.c += -fexceptions -fasynchronous-unwind-tables
endif
--- a/sysdeps/gnu/unwind-resume.c
+++ b/sysdeps/gnu/unwind-resume.c
@@ -21,6 +21,8 @@
#include <unwind.h>
#include <gnu/lib-names.h>
+#pragma GCC optimize ("-fexceptions", "-fasynchronous-unwind-tables")
+
static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
__attribute__ ((noreturn));
static _Unwind_Reason_Code (*libgcc_s_personality)
--- a/sysdeps/nptl/unwind-forcedunwind.c
+++ b/sysdeps/nptl/unwind-forcedunwind.c
@@ -23,6 +23,8 @@
#include <sysdep.h>
#include <gnu/lib-names.h>
+#pragma GCC optimize ("-fexceptions", "-fasynchronous-unwind-tables")
+
static void *libgcc_s_handle;
static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
static _Unwind_Reason_Code (*libgcc_s_personality)
--- a/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+++ b/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
@@ -21,6 +21,8 @@
#include <unwind.h>
#include <pthreadP.h>
+#pragma GCC optimize ("-fexceptions", "-fasynchronous-unwind-tables")
+
static void *libgcc_s_handle;
static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
__attribute_used__;