change jmp_buf to share an underlying type and struct tag with sigjmp_buf

this is necessary to meet the C++ ABI target. alternatives were
considered to avoid the size increase for non-sig jmp_buf objects, but
they seemed to have worse properties. moreover, the relative size
increase is only extreme on x86[_64]; one way of interpreting this is
that, if the size increase from this patch makes jmp_buf use too much
memory, then the program was already using too much memory when built
for non-x86 archs.
diff --git a/arch/arm/bits/setjmp.h b/arch/arm/bits/setjmp.h
index 3938cb8..55e3a95 100644
--- a/arch/arm/bits/setjmp.h
+++ b/arch/arm/bits/setjmp.h
@@ -1 +1 @@
-typedef unsigned long long jmp_buf[32];
+typedef unsigned long long __jmp_buf[32];
diff --git a/arch/i386/bits/setjmp.h b/arch/i386/bits/setjmp.h
index 5610be9..decd26d 100644
--- a/arch/i386/bits/setjmp.h
+++ b/arch/i386/bits/setjmp.h
@@ -1 +1 @@
-typedef unsigned long jmp_buf[6];
+typedef unsigned long __jmp_buf[6];
diff --git a/arch/microblaze/bits/setjmp.h b/arch/microblaze/bits/setjmp.h
index 8f0376b..b2bd974 100644
--- a/arch/microblaze/bits/setjmp.h
+++ b/arch/microblaze/bits/setjmp.h
@@ -1 +1 @@
-typedef unsigned long jmp_buf[18];
+typedef unsigned long __jmp_buf[18];
diff --git a/arch/mips/bits/setjmp.h b/arch/mips/bits/setjmp.h
index 6bb1546..467872e 100644
--- a/arch/mips/bits/setjmp.h
+++ b/arch/mips/bits/setjmp.h
@@ -1 +1 @@
-typedef unsigned long long jmp_buf [15];
+typedef unsigned long long __jmp_buf[15];
diff --git a/arch/powerpc/bits/setjmp.h b/arch/powerpc/bits/setjmp.h
index ab583ab..1cb0f26 100644
--- a/arch/powerpc/bits/setjmp.h
+++ b/arch/powerpc/bits/setjmp.h
@@ -1 +1 @@
-typedef unsigned long long jmp_buf [56];
+typedef unsigned long long __jmp_buf[56];
diff --git a/arch/x86_64/bits/setjmp.h b/arch/x86_64/bits/setjmp.h
index 81d4968..63973a8 100644
--- a/arch/x86_64/bits/setjmp.h
+++ b/arch/x86_64/bits/setjmp.h
@@ -1 +1 @@
-typedef unsigned long jmp_buf[8];
+typedef unsigned long __jmp_buf[8];
diff --git a/include/setjmp.h b/include/setjmp.h
index 5456d8f..0da27de 100644
--- a/include/setjmp.h
+++ b/include/setjmp.h
@@ -9,27 +9,26 @@
 
 #include <bits/setjmp.h>
 
+typedef struct __jmp_buf_tag {
+	__jmp_buf __jb;
+	unsigned long __fl;
+	unsigned long __ss[128/sizeof(long)];
+} jmp_buf[1];
 
 #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
  || defined(_BSD_SOURCE)
-typedef struct __sigjmp_buf {
-	jmp_buf __jb;
-	unsigned long __fl;
-	unsigned long __ss[128/sizeof(long)];
-} sigjmp_buf[1];
+typedef jmp_buf sigjmp_buf;
 int sigsetjmp (sigjmp_buf, int);
 _Noreturn void siglongjmp (sigjmp_buf, int);
 #endif
 
-
 #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
  || defined(_BSD_SOURCE)
 int _setjmp (jmp_buf);
 _Noreturn void _longjmp (jmp_buf, int);
 #endif
 
-
 int setjmp (jmp_buf);
 _Noreturn void longjmp (jmp_buf, int);
 
diff --git a/src/signal/siglongjmp.c b/src/signal/siglongjmp.c
index a7bcca2..2974ff7 100644
--- a/src/signal/siglongjmp.c
+++ b/src/signal/siglongjmp.c
@@ -7,5 +7,5 @@
 _Noreturn void siglongjmp(sigjmp_buf buf, int ret)
 {
 	if (buf->__fl) __restore_sigs(buf->__ss);
-	longjmp(buf->__jb, ret);
+	longjmp(buf, ret);
 }
diff --git a/src/signal/sigsetjmp.c b/src/signal/sigsetjmp.c
index 01ba0df..6a5f6f1 100644
--- a/src/signal/sigsetjmp.c
+++ b/src/signal/sigsetjmp.c
@@ -11,5 +11,5 @@
 {
 	if ((buf->__fl = save))
 		pthread_sigmask(SIG_SETMASK, 0, (sigset_t *)buf->__ss);
-	return setjmp(buf->__jb);
+	return setjmp(buf);
 }