tags 456879 + patch thanks You are in a maze of twisty struct sigcontext (or possibly struct sigcontext_struct), all alike...
signal.c assumes that on i386, either we HAVE_ASM_SIGCONTEXT_H, or there
is no declaration of sigcontext_struct. This is no longer the case in
current glibc:
* <signal.h> declares struct sigcontext and has #define sigcontext_struct
sigcontext
* <asm/sigcontext.h> conflicts with <signal.h> because they both declare
sigcontext, so HAVE_ASM_SIGCONTEXT_H is not defined
So, signal.c needs to avoid declaring sigcontext_struct if we already
got a declaration from <signal.h>.
upstream-maybe.diff is an untested attempt at a fix suitable for upstream use,
which detects the presence of sigcontext_struct in signal.h properly.
m68k could probably benefit from a similar change, just after the last
line I altered.
debian.diff is a less clean fix (it relies on sigcontext_struct being a
#define), but it fixes the FTBFS on i386 without requiring an autoreconf,
so may be less intrusive to apply. Again, m68k could probably benefit
from a similar change, but I don't have an m68k handy to try it on.
Simon
only in patch2:
unchanged:
--- strace-4.5.15.orig/signal.c
+++ strace-4.5.15/signal.c
@@ -102,7 +102,7 @@
#include <asm/sigcontext.h>
#endif /* !IA64 && !X86_64 */
#else /* !HAVE_ASM_SIGCONTEXT_H */
-#ifdef I386
+#if defined(I386) && !defined(sigcontext_struct)
struct sigcontext_struct {
unsigned short gs, __gsh;
unsigned short fs, __fsh;
@@ -127,7 +127,7 @@
unsigned long oldmask;
unsigned long cr2;
};
-#else /* !I386 */
+#else /* !defined(I386) || !defined(sigcontext_struct) */
#ifdef M68K
struct sigcontext
{
diff -u strace-4.5.15/configure.ac strace-4.5.15/configure.ac
--- strace-4.5.15/configure.ac
+++ strace-4.5.15/configure.ac
@@ -197,6 +197,7 @@
[], [],
[#include <stddef.h>
#include <linux/socket.h>])
+AC_CHECK_TYPES([struct sigcontext_struct],,, [#include <signal.h>])
AC_CHECK_HEADERS([asm/sigcontext.h], [], [], [#include <signal.h>])
AC_CHECK_HEADERS([netinet/tcp.h netinet/udp.h],,, [#include <netinet/in.h>])
only in patch2:
unchanged:
--- strace-4.5.15.orig/signal.c
+++ strace-4.5.15/signal.c
@@ -102,7 +102,7 @@
#include <asm/sigcontext.h>
#endif /* !IA64 && !X86_64 */
#else /* !HAVE_ASM_SIGCONTEXT_H */
-#ifdef I386
+#if defined(I386) && !defined(HAVE_STRUCT_SIGCONTEXT)
struct sigcontext_struct {
unsigned short gs, __gsh;
unsigned short fs, __fsh;
@@ -127,7 +127,7 @@
unsigned long oldmask;
unsigned long cr2;
};
-#else /* !I386 */
+#else /* !defined(I386) || !defined(HAVE_STRUCT_SIGCONTEXT) */
#ifdef M68K
struct sigcontext
{
signature.asc
Description: Digital signature

