libstdc++5: Add patch to fix type for ucontext_t

Since glibc 2.26, struct ucontext no longer exists but is wrapped in a
typedef ucontext_t.

This is basically a backport of the patch to gcc version 4.5 which was
introduced by @vcunat in f04b64c1e9.

Building against x86_64-linux and i686-linux now succeeds.

Signed-off-by: aszlig <aszlig@nix.build>
Cc: @abbradar
This commit is contained in:
aszlig 2017-11-08 20:45:32 +01:00
parent 4cb8c5dc3c
commit a2045e029a
No known key found for this signature in database
GPG key ID: 684089CE67EBB691
2 changed files with 63 additions and 0 deletions

View file

@ -29,6 +29,8 @@ stdenv.mkDerivation rec {
sha256 = "11m5lc51b0addhc4yq4rz0dwpv6k73rrj73wya3lqdk8rly6cjpm";
addPrefixes = true;
})
# Required because of glibc 2.26
./struct-ucontext.patch
];
postPatch = ''

View file

@ -0,0 +1,61 @@
diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h
index 3a2940c..67f9899 100644
--- a/gcc/config/alpha/linux.h
+++ b/gcc/config/alpha/linux.h
@@ -89,7 +89,7 @@ Boston, MA 02111-1307, USA. */
{ \
struct rt_sigframe { \
struct siginfo info; \
- struct ucontext uc; \
+ ucontext_t uc; \
} *rt_ = (CONTEXT)->cfa; \
sc_ = &rt_->uc.uc_mcontext; \
} \
diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
index e86ab3d..30797a7 100644
--- a/gcc/config/i386/linux.h
+++ b/gcc/config/i386/linux.h
@@ -260,7 +260,7 @@ Boston, MA 02111-1307, USA. */
siginfo_t *pinfo; \
void *puc; \
siginfo_t info; \
- struct ucontext uc; \
+ ucontext_t uc; \
} *rt_ = (CONTEXT)->cfa; \
sc_ = (struct sigcontext *) &rt_->uc.uc_mcontext; \
} \
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
index fbfaa58..200c8dc 100644
--- a/gcc/config/i386/linux64.h
+++ b/gcc/config/i386/linux64.h
@@ -112,7 +112,7 @@ Boston, MA 02111-1307, USA. */
if (*(unsigned char *)(pc_+0) == 0x48 \
&& *(unsigned long *)(pc_+1) == 0x050f0000000fc0c7) \
{ \
- struct ucontext *uc_ = (CONTEXT)->cfa; \
+ ucontext_t *uc_ = (CONTEXT)->cfa; \
sc_ = (struct sigcontext *) &uc_->uc_mcontext; \
} \
else \
@@ -182,7 +182,7 @@ Boston, MA 02111-1307, USA. */
struct siginfo *pinfo; \
void *puc; \
struct siginfo info; \
- struct ucontext uc; \
+ ucontext_t uc; \
} *rt_ = (CONTEXT)->cfa; \
sc_ = (struct sigcontext *) &rt_->uc.uc_mcontext; \
} \
diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
index ba70ec1..0fff8b1 100644
--- a/gcc/config/rs6000/linux.h
+++ b/gcc/config/rs6000/linux.h
@@ -101,7 +101,7 @@ Boston, MA 02111-1307, USA. */
struct kernel_old_ucontext {
unsigned long uc_flags;
- struct ucontext *uc_link;
+ ucontext_t *uc_link;
stack_t uc_stack;
struct sigcontext_struct uc_mcontext;
sigset_t uc_sigmask;