linux-user/host/aarch64/hostdep.h | 2 +- linux-user/host/arm/hostdep.h | 2 +- linux-user/host/i386/hostdep.h | 2 +- linux-user/host/ppc64/hostdep.h | 2 +- linux-user/host/s390x/hostdep.h | 2 +- linux-user/host/x86_64/hostdep.h | 2 +- linux-user/signal.c | 10 +++++----- tests/tcg/test-i386.c | 4 ++-- user-exec.c | 18 +++++++++--------- 9 files changed, 22 insertions(+), 22 deletions(-)
The ucontext_t type had a tag struct ucontext until now
but newer glibc will drop it so we need to adjust and use
the exposed type instead
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Cc: Kamil Rytarowski <kamil@netbsd.org>
Cc: Riku Voipio <riku.voipio@iki.fi>
Cc: Laurent Vivier <laurent@vivier.eu>
Cc: Paolo Bonzini <pbonzini@redhat.com>
---
linux-user/host/aarch64/hostdep.h | 2 +-
linux-user/host/arm/hostdep.h | 2 +-
linux-user/host/i386/hostdep.h | 2 +-
linux-user/host/ppc64/hostdep.h | 2 +-
linux-user/host/s390x/hostdep.h | 2 +-
linux-user/host/x86_64/hostdep.h | 2 +-
linux-user/signal.c | 10 +++++-----
tests/tcg/test-i386.c | 4 ++--
user-exec.c | 18 +++++++++---------
9 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h
index 64f75cef49..a8d41a21ad 100644
--- a/linux-user/host/aarch64/hostdep.h
+++ b/linux-user/host/aarch64/hostdep.h
@@ -24,7 +24,7 @@ extern char safe_syscall_end[];
/* Adjust the signal context to rewind out of safe-syscall if we're in it */
static inline void rewind_if_in_safe_syscall(void *puc)
{
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
__u64 *pcreg = &uc->uc_mcontext.pc;
if (*pcreg > (uintptr_t)safe_syscall_start
diff --git a/linux-user/host/arm/hostdep.h b/linux-user/host/arm/hostdep.h
index 5c1ae60120..9276fe6ceb 100644
--- a/linux-user/host/arm/hostdep.h
+++ b/linux-user/host/arm/hostdep.h
@@ -24,7 +24,7 @@ extern char safe_syscall_end[];
/* Adjust the signal context to rewind out of safe-syscall if we're in it */
static inline void rewind_if_in_safe_syscall(void *puc)
{
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
unsigned long *pcreg = &uc->uc_mcontext.arm_pc;
if (*pcreg > (uintptr_t)safe_syscall_start
diff --git a/linux-user/host/i386/hostdep.h b/linux-user/host/i386/hostdep.h
index d834bd80ea..073be74d87 100644
--- a/linux-user/host/i386/hostdep.h
+++ b/linux-user/host/i386/hostdep.h
@@ -24,7 +24,7 @@ extern char safe_syscall_end[];
/* Adjust the signal context to rewind out of safe-syscall if we're in it */
static inline void rewind_if_in_safe_syscall(void *puc)
{
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
greg_t *pcreg = &uc->uc_mcontext.gregs[REG_EIP];
if (*pcreg > (uintptr_t)safe_syscall_start
diff --git a/linux-user/host/ppc64/hostdep.h b/linux-user/host/ppc64/hostdep.h
index 0b0f5f7821..98979ad917 100644
--- a/linux-user/host/ppc64/hostdep.h
+++ b/linux-user/host/ppc64/hostdep.h
@@ -24,7 +24,7 @@ extern char safe_syscall_end[];
/* Adjust the signal context to rewind out of safe-syscall if we're in it */
static inline void rewind_if_in_safe_syscall(void *puc)
{
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
unsigned long *pcreg = &uc->uc_mcontext.gp_regs[PT_NIP];
if (*pcreg > (uintptr_t)safe_syscall_start
diff --git a/linux-user/host/s390x/hostdep.h b/linux-user/host/s390x/hostdep.h
index 6f9da9c608..4f0171f36f 100644
--- a/linux-user/host/s390x/hostdep.h
+++ b/linux-user/host/s390x/hostdep.h
@@ -24,7 +24,7 @@ extern char safe_syscall_end[];
/* Adjust the signal context to rewind out of safe-syscall if we're in it */
static inline void rewind_if_in_safe_syscall(void *puc)
{
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
unsigned long *pcreg = &uc->uc_mcontext.psw.addr;
if (*pcreg > (uintptr_t)safe_syscall_start
diff --git a/linux-user/host/x86_64/hostdep.h b/linux-user/host/x86_64/hostdep.h
index 3b4259633e..a4fefb5114 100644
--- a/linux-user/host/x86_64/hostdep.h
+++ b/linux-user/host/x86_64/hostdep.h
@@ -24,7 +24,7 @@ extern char safe_syscall_end[];
/* Adjust the signal context to rewind out of safe-syscall if we're in it */
static inline void rewind_if_in_safe_syscall(void *puc)
{
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
greg_t *pcreg = &uc->uc_mcontext.gregs[REG_RIP];
if (*pcreg > (uintptr_t)safe_syscall_start
diff --git a/linux-user/signal.c b/linux-user/signal.c
index 3d18d1b3ee..2c55a4f600 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -3346,7 +3346,7 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka,
*
* a0 = signal number
* a1 = pointer to siginfo_t
- * a2 = pointer to struct ucontext
+ * a2 = pointer to ucontext_t
*
* $25 and PC point to the signal handler, $29 points to the
* struct sigframe.
@@ -3733,7 +3733,7 @@ struct target_signal_frame {
struct rt_signal_frame {
siginfo_t info;
- struct ucontext uc;
+ ucontext_t uc;
uint32_t tramp[2];
};
@@ -3949,7 +3949,7 @@ struct rt_signal_frame {
siginfo_t *pinfo;
void *puc;
siginfo_t info;
- struct ucontext uc;
+ ucontext_t uc;
uint16_t retcode[4]; /* Trampoline code. */
};
@@ -4484,7 +4484,7 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka,
tswap_siginfo(&frame->info, info);
}
- /*err |= __clear_user(&frame->uc, offsetof(struct ucontext, uc_mcontext));*/
+ /*err |= __clear_user(&frame->uc, offsetof(ucontext_t, uc_mcontext));*/
__put_user(0, &frame->uc.tuc_flags);
__put_user(0, &frame->uc.tuc_link);
__put_user(target_sigaltstack_used.ss_sp,
@@ -4976,7 +4976,7 @@ enum {
struct target_ucontext {
target_ulong tuc_flags;
- target_ulong tuc_link; /* struct ucontext __user * */
+ target_ulong tuc_link; /* ucontext_t __user * */
struct target_sigaltstack tuc_stack;
#if !defined(TARGET_PPC64)
int32_t tuc_pad[7];
diff --git a/tests/tcg/test-i386.c b/tests/tcg/test-i386.c
index 0f7b943b0c..9599204895 100644
--- a/tests/tcg/test-i386.c
+++ b/tests/tcg/test-i386.c
@@ -1720,7 +1720,7 @@ int tab[2];
void sig_handler(int sig, siginfo_t *info, void *puc)
{
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
printf("si_signo=%d si_errno=%d si_code=%d",
info->si_signo, info->si_errno, info->si_code);
@@ -1912,7 +1912,7 @@ void test_exceptions(void)
/* specific precise single step test */
void sig_trap_handler(int sig, siginfo_t *info, void *puc)
{
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
printf("EIP=" FMTLX "\n", (long)uc->uc_mcontext.gregs[REG_EIP]);
}
diff --git a/user-exec.c b/user-exec.c
index a8f95fa1e1..2a975eaf69 100644
--- a/user-exec.c
+++ b/user-exec.c
@@ -167,7 +167,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
#elif defined(__OpenBSD__)
struct sigcontext *uc = puc;
#else
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
#endif
unsigned long pc;
int trapno;
@@ -222,7 +222,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
#elif defined(__OpenBSD__)
struct sigcontext *uc = puc;
#else
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
#endif
pc = PC_sig(uc);
@@ -289,7 +289,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
ucontext_t *uc = puc;
#else
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
#endif
unsigned long pc;
int is_write;
@@ -316,7 +316,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
void *puc)
{
siginfo_t *info = pinfo;
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
uint32_t *pc = uc->uc_mcontext.sc_pc;
uint32_t insn = *pc;
int is_write = 0;
@@ -414,7 +414,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
#if defined(__NetBSD__)
ucontext_t *uc = puc;
#else
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
#endif
unsigned long pc;
int is_write;
@@ -441,7 +441,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
int cpu_signal_handler(int host_signum, void *pinfo, void *puc)
{
siginfo_t *info = pinfo;
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
uintptr_t pc = uc->uc_mcontext.pc;
uint32_t insn = *(uint32_t *)pc;
bool is_write;
@@ -474,7 +474,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, void *puc)
int cpu_signal_handler(int host_signum, void *pinfo, void *puc)
{
siginfo_t *info = pinfo;
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
unsigned long ip;
int is_write = 0;
@@ -505,7 +505,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
void *puc)
{
siginfo_t *info = pinfo;
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
unsigned long pc;
uint16_t *pinsn;
int is_write = 0;
@@ -558,7 +558,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
void *puc)
{
siginfo_t *info = pinfo;
- struct ucontext *uc = puc;
+ ucontext_t *uc = puc;
greg_t pc = uc->uc_mcontext.pc;
int is_write;
--
2.13.2
Le 28/06/2017 à 22:44, Khem Raj a écrit : > The ucontext_t type had a tag struct ucontext until now > but newer glibc will drop it so we need to adjust and use > the exposed type instead I didn't find in glib git tree the commit dropping the struct tags for ucontext. Could you point it out? Thanks, Laurent > Signed-off-by: Khem Raj <raj.khem@gmail.com> > Cc: Kamil Rytarowski <kamil@netbsd.org> > Cc: Riku Voipio <riku.voipio@iki.fi> > Cc: Laurent Vivier <laurent@vivier.eu> > Cc: Paolo Bonzini <pbonzini@redhat.com> > --- > linux-user/host/aarch64/hostdep.h | 2 +- > linux-user/host/arm/hostdep.h | 2 +- > linux-user/host/i386/hostdep.h | 2 +- > linux-user/host/ppc64/hostdep.h | 2 +- > linux-user/host/s390x/hostdep.h | 2 +- > linux-user/host/x86_64/hostdep.h | 2 +- > linux-user/signal.c | 10 +++++----- > tests/tcg/test-i386.c | 4 ++-- > user-exec.c | 18 +++++++++--------- > 9 files changed, 22 insertions(+), 22 deletions(-) > > diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h > index 64f75cef49..a8d41a21ad 100644 > --- a/linux-user/host/aarch64/hostdep.h > +++ b/linux-user/host/aarch64/hostdep.h > @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; > /* Adjust the signal context to rewind out of safe-syscall if we're in it */ > static inline void rewind_if_in_safe_syscall(void *puc) > { > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > __u64 *pcreg = &uc->uc_mcontext.pc; > > if (*pcreg > (uintptr_t)safe_syscall_start > diff --git a/linux-user/host/arm/hostdep.h b/linux-user/host/arm/hostdep.h > index 5c1ae60120..9276fe6ceb 100644 > --- a/linux-user/host/arm/hostdep.h > +++ b/linux-user/host/arm/hostdep.h > @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; > /* Adjust the signal context to rewind out of safe-syscall if we're in it */ > static inline void rewind_if_in_safe_syscall(void *puc) > { > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > unsigned long *pcreg = &uc->uc_mcontext.arm_pc; > > if (*pcreg > (uintptr_t)safe_syscall_start > diff --git a/linux-user/host/i386/hostdep.h b/linux-user/host/i386/hostdep.h > index d834bd80ea..073be74d87 100644 > --- a/linux-user/host/i386/hostdep.h > +++ b/linux-user/host/i386/hostdep.h > @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; > /* Adjust the signal context to rewind out of safe-syscall if we're in it */ > static inline void rewind_if_in_safe_syscall(void *puc) > { > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > greg_t *pcreg = &uc->uc_mcontext.gregs[REG_EIP]; > > if (*pcreg > (uintptr_t)safe_syscall_start > diff --git a/linux-user/host/ppc64/hostdep.h b/linux-user/host/ppc64/hostdep.h > index 0b0f5f7821..98979ad917 100644 > --- a/linux-user/host/ppc64/hostdep.h > +++ b/linux-user/host/ppc64/hostdep.h > @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; > /* Adjust the signal context to rewind out of safe-syscall if we're in it */ > static inline void rewind_if_in_safe_syscall(void *puc) > { > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > unsigned long *pcreg = &uc->uc_mcontext.gp_regs[PT_NIP]; > > if (*pcreg > (uintptr_t)safe_syscall_start > diff --git a/linux-user/host/s390x/hostdep.h b/linux-user/host/s390x/hostdep.h > index 6f9da9c608..4f0171f36f 100644 > --- a/linux-user/host/s390x/hostdep.h > +++ b/linux-user/host/s390x/hostdep.h > @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; > /* Adjust the signal context to rewind out of safe-syscall if we're in it */ > static inline void rewind_if_in_safe_syscall(void *puc) > { > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > unsigned long *pcreg = &uc->uc_mcontext.psw.addr; > > if (*pcreg > (uintptr_t)safe_syscall_start > diff --git a/linux-user/host/x86_64/hostdep.h b/linux-user/host/x86_64/hostdep.h > index 3b4259633e..a4fefb5114 100644 > --- a/linux-user/host/x86_64/hostdep.h > +++ b/linux-user/host/x86_64/hostdep.h > @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; > /* Adjust the signal context to rewind out of safe-syscall if we're in it */ > static inline void rewind_if_in_safe_syscall(void *puc) > { > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > greg_t *pcreg = &uc->uc_mcontext.gregs[REG_RIP]; > > if (*pcreg > (uintptr_t)safe_syscall_start > diff --git a/linux-user/signal.c b/linux-user/signal.c > index 3d18d1b3ee..2c55a4f600 100644 > --- a/linux-user/signal.c > +++ b/linux-user/signal.c > @@ -3346,7 +3346,7 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka, > * > * a0 = signal number > * a1 = pointer to siginfo_t > - * a2 = pointer to struct ucontext > + * a2 = pointer to ucontext_t > * > * $25 and PC point to the signal handler, $29 points to the > * struct sigframe. > @@ -3733,7 +3733,7 @@ struct target_signal_frame { > > struct rt_signal_frame { > siginfo_t info; > - struct ucontext uc; > + ucontext_t uc; > uint32_t tramp[2]; > }; > > @@ -3949,7 +3949,7 @@ struct rt_signal_frame { > siginfo_t *pinfo; > void *puc; > siginfo_t info; > - struct ucontext uc; > + ucontext_t uc; > uint16_t retcode[4]; /* Trampoline code. */ > }; > > @@ -4484,7 +4484,7 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka, > tswap_siginfo(&frame->info, info); > } > > - /*err |= __clear_user(&frame->uc, offsetof(struct ucontext, uc_mcontext));*/ > + /*err |= __clear_user(&frame->uc, offsetof(ucontext_t, uc_mcontext));*/ > __put_user(0, &frame->uc.tuc_flags); > __put_user(0, &frame->uc.tuc_link); > __put_user(target_sigaltstack_used.ss_sp, > @@ -4976,7 +4976,7 @@ enum { > > struct target_ucontext { > target_ulong tuc_flags; > - target_ulong tuc_link; /* struct ucontext __user * */ > + target_ulong tuc_link; /* ucontext_t __user * */ > struct target_sigaltstack tuc_stack; > #if !defined(TARGET_PPC64) > int32_t tuc_pad[7]; > diff --git a/tests/tcg/test-i386.c b/tests/tcg/test-i386.c > index 0f7b943b0c..9599204895 100644 > --- a/tests/tcg/test-i386.c > +++ b/tests/tcg/test-i386.c > @@ -1720,7 +1720,7 @@ int tab[2]; > > void sig_handler(int sig, siginfo_t *info, void *puc) > { > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > > printf("si_signo=%d si_errno=%d si_code=%d", > info->si_signo, info->si_errno, info->si_code); > @@ -1912,7 +1912,7 @@ void test_exceptions(void) > /* specific precise single step test */ > void sig_trap_handler(int sig, siginfo_t *info, void *puc) > { > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > printf("EIP=" FMTLX "\n", (long)uc->uc_mcontext.gregs[REG_EIP]); > } > > diff --git a/user-exec.c b/user-exec.c > index a8f95fa1e1..2a975eaf69 100644 > --- a/user-exec.c > +++ b/user-exec.c > @@ -167,7 +167,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, > #elif defined(__OpenBSD__) > struct sigcontext *uc = puc; > #else > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > #endif > unsigned long pc; > int trapno; > @@ -222,7 +222,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, > #elif defined(__OpenBSD__) > struct sigcontext *uc = puc; > #else > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > #endif > > pc = PC_sig(uc); > @@ -289,7 +289,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, > #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) > ucontext_t *uc = puc; > #else > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > #endif > unsigned long pc; > int is_write; > @@ -316,7 +316,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, > void *puc) > { > siginfo_t *info = pinfo; > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > uint32_t *pc = uc->uc_mcontext.sc_pc; > uint32_t insn = *pc; > int is_write = 0; > @@ -414,7 +414,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, > #if defined(__NetBSD__) > ucontext_t *uc = puc; > #else > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > #endif > unsigned long pc; > int is_write; > @@ -441,7 +441,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, > int cpu_signal_handler(int host_signum, void *pinfo, void *puc) > { > siginfo_t *info = pinfo; > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > uintptr_t pc = uc->uc_mcontext.pc; > uint32_t insn = *(uint32_t *)pc; > bool is_write; > @@ -474,7 +474,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, void *puc) > int cpu_signal_handler(int host_signum, void *pinfo, void *puc) > { > siginfo_t *info = pinfo; > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > unsigned long ip; > int is_write = 0; > > @@ -505,7 +505,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, > void *puc) > { > siginfo_t *info = pinfo; > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > unsigned long pc; > uint16_t *pinsn; > int is_write = 0; > @@ -558,7 +558,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, > void *puc) > { > siginfo_t *info = pinfo; > - struct ucontext *uc = puc; > + ucontext_t *uc = puc; > greg_t pc = uc->uc_mcontext.pc; > int is_write; > >
On Thu, Jun 29, 2017 at 1:02 AM, Laurent Vivier <laurent@vivier.eu> wrote: > Le 28/06/2017 à 22:44, Khem Raj a écrit : >> The ucontext_t type had a tag struct ucontext until now >> but newer glibc will drop it so we need to adjust and use >> the exposed type instead > > I didn't find in glib git tree the commit dropping the struct tags for > ucontext. Could you point it out? > see https://sourceware.org/git/?p=glibc.git;a=commit;h=251287734e89a52da3db682a8241eb6bccc050c9 its also documented in (upcoming ) release notes https://sourceware.org/glibc/wiki/Release/2.26#Removal_of_.27struct_ucontext.27 > Thanks, > Laurent > >> Signed-off-by: Khem Raj <raj.khem@gmail.com> >> Cc: Kamil Rytarowski <kamil@netbsd.org> >> Cc: Riku Voipio <riku.voipio@iki.fi> >> Cc: Laurent Vivier <laurent@vivier.eu> >> Cc: Paolo Bonzini <pbonzini@redhat.com> >> --- >> linux-user/host/aarch64/hostdep.h | 2 +- >> linux-user/host/arm/hostdep.h | 2 +- >> linux-user/host/i386/hostdep.h | 2 +- >> linux-user/host/ppc64/hostdep.h | 2 +- >> linux-user/host/s390x/hostdep.h | 2 +- >> linux-user/host/x86_64/hostdep.h | 2 +- >> linux-user/signal.c | 10 +++++----- >> tests/tcg/test-i386.c | 4 ++-- >> user-exec.c | 18 +++++++++--------- >> 9 files changed, 22 insertions(+), 22 deletions(-) >> >> diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h >> index 64f75cef49..a8d41a21ad 100644 >> --- a/linux-user/host/aarch64/hostdep.h >> +++ b/linux-user/host/aarch64/hostdep.h >> @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; >> /* Adjust the signal context to rewind out of safe-syscall if we're in it */ >> static inline void rewind_if_in_safe_syscall(void *puc) >> { >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> __u64 *pcreg = &uc->uc_mcontext.pc; >> >> if (*pcreg > (uintptr_t)safe_syscall_start >> diff --git a/linux-user/host/arm/hostdep.h b/linux-user/host/arm/hostdep.h >> index 5c1ae60120..9276fe6ceb 100644 >> --- a/linux-user/host/arm/hostdep.h >> +++ b/linux-user/host/arm/hostdep.h >> @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; >> /* Adjust the signal context to rewind out of safe-syscall if we're in it */ >> static inline void rewind_if_in_safe_syscall(void *puc) >> { >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> unsigned long *pcreg = &uc->uc_mcontext.arm_pc; >> >> if (*pcreg > (uintptr_t)safe_syscall_start >> diff --git a/linux-user/host/i386/hostdep.h b/linux-user/host/i386/hostdep.h >> index d834bd80ea..073be74d87 100644 >> --- a/linux-user/host/i386/hostdep.h >> +++ b/linux-user/host/i386/hostdep.h >> @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; >> /* Adjust the signal context to rewind out of safe-syscall if we're in it */ >> static inline void rewind_if_in_safe_syscall(void *puc) >> { >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> greg_t *pcreg = &uc->uc_mcontext.gregs[REG_EIP]; >> >> if (*pcreg > (uintptr_t)safe_syscall_start >> diff --git a/linux-user/host/ppc64/hostdep.h b/linux-user/host/ppc64/hostdep.h >> index 0b0f5f7821..98979ad917 100644 >> --- a/linux-user/host/ppc64/hostdep.h >> +++ b/linux-user/host/ppc64/hostdep.h >> @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; >> /* Adjust the signal context to rewind out of safe-syscall if we're in it */ >> static inline void rewind_if_in_safe_syscall(void *puc) >> { >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> unsigned long *pcreg = &uc->uc_mcontext.gp_regs[PT_NIP]; >> >> if (*pcreg > (uintptr_t)safe_syscall_start >> diff --git a/linux-user/host/s390x/hostdep.h b/linux-user/host/s390x/hostdep.h >> index 6f9da9c608..4f0171f36f 100644 >> --- a/linux-user/host/s390x/hostdep.h >> +++ b/linux-user/host/s390x/hostdep.h >> @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; >> /* Adjust the signal context to rewind out of safe-syscall if we're in it */ >> static inline void rewind_if_in_safe_syscall(void *puc) >> { >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> unsigned long *pcreg = &uc->uc_mcontext.psw.addr; >> >> if (*pcreg > (uintptr_t)safe_syscall_start >> diff --git a/linux-user/host/x86_64/hostdep.h b/linux-user/host/x86_64/hostdep.h >> index 3b4259633e..a4fefb5114 100644 >> --- a/linux-user/host/x86_64/hostdep.h >> +++ b/linux-user/host/x86_64/hostdep.h >> @@ -24,7 +24,7 @@ extern char safe_syscall_end[]; >> /* Adjust the signal context to rewind out of safe-syscall if we're in it */ >> static inline void rewind_if_in_safe_syscall(void *puc) >> { >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> greg_t *pcreg = &uc->uc_mcontext.gregs[REG_RIP]; >> >> if (*pcreg > (uintptr_t)safe_syscall_start >> diff --git a/linux-user/signal.c b/linux-user/signal.c >> index 3d18d1b3ee..2c55a4f600 100644 >> --- a/linux-user/signal.c >> +++ b/linux-user/signal.c >> @@ -3346,7 +3346,7 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka, >> * >> * a0 = signal number >> * a1 = pointer to siginfo_t >> - * a2 = pointer to struct ucontext >> + * a2 = pointer to ucontext_t >> * >> * $25 and PC point to the signal handler, $29 points to the >> * struct sigframe. >> @@ -3733,7 +3733,7 @@ struct target_signal_frame { >> >> struct rt_signal_frame { >> siginfo_t info; >> - struct ucontext uc; >> + ucontext_t uc; >> uint32_t tramp[2]; >> }; >> >> @@ -3949,7 +3949,7 @@ struct rt_signal_frame { >> siginfo_t *pinfo; >> void *puc; >> siginfo_t info; >> - struct ucontext uc; >> + ucontext_t uc; >> uint16_t retcode[4]; /* Trampoline code. */ >> }; >> >> @@ -4484,7 +4484,7 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka, >> tswap_siginfo(&frame->info, info); >> } >> >> - /*err |= __clear_user(&frame->uc, offsetof(struct ucontext, uc_mcontext));*/ >> + /*err |= __clear_user(&frame->uc, offsetof(ucontext_t, uc_mcontext));*/ >> __put_user(0, &frame->uc.tuc_flags); >> __put_user(0, &frame->uc.tuc_link); >> __put_user(target_sigaltstack_used.ss_sp, >> @@ -4976,7 +4976,7 @@ enum { >> >> struct target_ucontext { >> target_ulong tuc_flags; >> - target_ulong tuc_link; /* struct ucontext __user * */ >> + target_ulong tuc_link; /* ucontext_t __user * */ >> struct target_sigaltstack tuc_stack; >> #if !defined(TARGET_PPC64) >> int32_t tuc_pad[7]; >> diff --git a/tests/tcg/test-i386.c b/tests/tcg/test-i386.c >> index 0f7b943b0c..9599204895 100644 >> --- a/tests/tcg/test-i386.c >> +++ b/tests/tcg/test-i386.c >> @@ -1720,7 +1720,7 @@ int tab[2]; >> >> void sig_handler(int sig, siginfo_t *info, void *puc) >> { >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> >> printf("si_signo=%d si_errno=%d si_code=%d", >> info->si_signo, info->si_errno, info->si_code); >> @@ -1912,7 +1912,7 @@ void test_exceptions(void) >> /* specific precise single step test */ >> void sig_trap_handler(int sig, siginfo_t *info, void *puc) >> { >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> printf("EIP=" FMTLX "\n", (long)uc->uc_mcontext.gregs[REG_EIP]); >> } >> >> diff --git a/user-exec.c b/user-exec.c >> index a8f95fa1e1..2a975eaf69 100644 >> --- a/user-exec.c >> +++ b/user-exec.c >> @@ -167,7 +167,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, >> #elif defined(__OpenBSD__) >> struct sigcontext *uc = puc; >> #else >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> #endif >> unsigned long pc; >> int trapno; >> @@ -222,7 +222,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, >> #elif defined(__OpenBSD__) >> struct sigcontext *uc = puc; >> #else >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> #endif >> >> pc = PC_sig(uc); >> @@ -289,7 +289,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, >> #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) >> ucontext_t *uc = puc; >> #else >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> #endif >> unsigned long pc; >> int is_write; >> @@ -316,7 +316,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, >> void *puc) >> { >> siginfo_t *info = pinfo; >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> uint32_t *pc = uc->uc_mcontext.sc_pc; >> uint32_t insn = *pc; >> int is_write = 0; >> @@ -414,7 +414,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, >> #if defined(__NetBSD__) >> ucontext_t *uc = puc; >> #else >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> #endif >> unsigned long pc; >> int is_write; >> @@ -441,7 +441,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, >> int cpu_signal_handler(int host_signum, void *pinfo, void *puc) >> { >> siginfo_t *info = pinfo; >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> uintptr_t pc = uc->uc_mcontext.pc; >> uint32_t insn = *(uint32_t *)pc; >> bool is_write; >> @@ -474,7 +474,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, void *puc) >> int cpu_signal_handler(int host_signum, void *pinfo, void *puc) >> { >> siginfo_t *info = pinfo; >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> unsigned long ip; >> int is_write = 0; >> >> @@ -505,7 +505,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, >> void *puc) >> { >> siginfo_t *info = pinfo; >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> unsigned long pc; >> uint16_t *pinsn; >> int is_write = 0; >> @@ -558,7 +558,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, >> void *puc) >> { >> siginfo_t *info = pinfo; >> - struct ucontext *uc = puc; >> + ucontext_t *uc = puc; >> greg_t pc = uc->uc_mcontext.pc; >> int is_write; >> >> >
On 28 June 2017 at 21:44, Khem Raj <raj.khem@gmail.com> wrote: > The ucontext_t type had a tag struct ucontext until now > but newer glibc will drop it so we need to adjust and use > the exposed type instead If true this seems like a bug in glibc to break existing working programs, and it should be fixed there... thanks -- PMM
Peter Maydell <peter.maydell@linaro.org> writes: > On 28 June 2017 at 21:44, Khem Raj <raj.khem@gmail.com> wrote: >> The ucontext_t type had a tag struct ucontext until now >> but newer glibc will drop it so we need to adjust and use >> the exposed type instead > > If true this seems like a bug in glibc to break > existing working programs, and it should be fixed there... I'd support that notion. However, SUSv2 documents ucontext_t, not struct ucontext. Using the former instead of the latter makes sense as a portability improvement, doesn't it?
On 29.06.2017 15:12, Markus Armbruster wrote: > Peter Maydell <peter.maydell@linaro.org> writes: > >> On 28 June 2017 at 21:44, Khem Raj <raj.khem@gmail.com> wrote: >>> The ucontext_t type had a tag struct ucontext until now >>> but newer glibc will drop it so we need to adjust and use >>> the exposed type instead >> >> If true this seems like a bug in glibc to break >> existing working programs, and it should be fixed there... > > I'd support that notion. However, SUSv2 documents ucontext_t, not > struct ucontext. Using the former instead of the latter makes sense as > a portability improvement, doesn't it? > NetBSD ships with ucontext_t, no 'struct ucontext' available. Technically there is 'struct __ucontext', but nobody is allowed to use it sanely.
On Thu, Jun 29, 2017 at 10:05:13AM +0100, Peter Maydell wrote: > On 28 June 2017 at 21:44, Khem Raj <raj.khem@gmail.com> wrote: > > The ucontext_t type had a tag struct ucontext until now > > but newer glibc will drop it so we need to adjust and use > > the exposed type instead > > If true this seems like a bug in glibc to break > existing working programs, and it should be fixed there... The glib commit message indicates it is intentional change, in order to get POSIX compliance: https://sourceware.org/git/?p=glibc.git;a=commit;h=251287734e89a52da3db682a8241eb6bccc050c9 NB, other parts of QEMU like the coroutine code are already using the 'ucontext_t' typedef, so attaining consistency across files is good regardless of the glibc change. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
On 06/29/2017 08:18 AM, Daniel P. Berrange wrote: > On Thu, Jun 29, 2017 at 10:05:13AM +0100, Peter Maydell wrote: >> On 28 June 2017 at 21:44, Khem Raj <raj.khem@gmail.com> wrote: >>> The ucontext_t type had a tag struct ucontext until now >>> but newer glibc will drop it so we need to adjust and use >>> the exposed type instead >> >> If true this seems like a bug in glibc to break >> existing working programs, and it should be fixed there... > > The glib commit message indicates it is intentional change, in order > to get POSIX compliance: > > https://sourceware.org/git/?p=glibc.git;a=commit;h=251287734e89a52da3db682a8241eb6bccc050c9 > > NB, other parts of QEMU like the coroutine code are already > using the 'ucontext_t' typedef, so attaining consistency across > files is good regardless of the glibc change. I agree. And since the issue has been reposted, I support the fix, although Nathaniel's repost may have the better commit message. https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg06005.html Reviewed-by: Eric Blake <eblake@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
On 19 July 2017 at 02:06, Eric Blake <eblake@redhat.com> wrote: > On 06/29/2017 08:18 AM, Daniel P. Berrange wrote: >> On Thu, Jun 29, 2017 at 10:05:13AM +0100, Peter Maydell wrote: >>> On 28 June 2017 at 21:44, Khem Raj <raj.khem@gmail.com> wrote: >>>> The ucontext_t type had a tag struct ucontext until now >>>> but newer glibc will drop it so we need to adjust and use >>>> the exposed type instead >>> >>> If true this seems like a bug in glibc to break >>> existing working programs, and it should be fixed there... >> >> The glib commit message indicates it is intentional change, in order >> to get POSIX compliance: >> >> https://sourceware.org/git/?p=glibc.git;a=commit;h=251287734e89a52da3db682a8241eb6bccc050c9 >> >> NB, other parts of QEMU like the coroutine code are already >> using the 'ucontext_t' typedef, so attaining consistency across >> files is good regardless of the glibc change. > > I agree. And since the issue has been reposted, I support the fix, > although Nathaniel's repost may have the better commit message. > https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg06005.html > > Reviewed-by: Eric Blake <eblake@redhat.com> Thanks; applied to master with an upgraded commit message. -- PMM
Le 28/06/2017 à 22:44, Khem Raj a écrit : > The ucontext_t type had a tag struct ucontext until now > but newer glibc will drop it so we need to adjust and use > the exposed type instead > > Signed-off-by: Khem Raj <raj.khem@gmail.com> > Cc: Kamil Rytarowski <kamil@netbsd.org> > Cc: Riku Voipio <riku.voipio@iki.fi> > Cc: Laurent Vivier <laurent@vivier.eu> > Cc: Paolo Bonzini <pbonzini@redhat.com> > --- > linux-user/host/aarch64/hostdep.h | 2 +- > linux-user/host/arm/hostdep.h | 2 +- > linux-user/host/i386/hostdep.h | 2 +- > linux-user/host/ppc64/hostdep.h | 2 +- > linux-user/host/s390x/hostdep.h | 2 +- > linux-user/host/x86_64/hostdep.h | 2 +- > linux-user/signal.c | 10 +++++----- > tests/tcg/test-i386.c | 4 ++-- > user-exec.c | 18 +++++++++--------- > 9 files changed, 22 insertions(+), 22 deletions(-) > ... > diff --git a/linux-user/signal.c b/linux-user/signal.c > index 3d18d1b3ee..2c55a4f600 100644 > --- a/linux-user/signal.c > +++ b/linux-user/signal.c > @@ -3346,7 +3346,7 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka, > * > * a0 = signal number > * a1 = pointer to siginfo_t > - * a2 = pointer to struct ucontext > + * a2 = pointer to ucontext_t > * > * $25 and PC point to the signal handler, $29 points to the > * struct sigframe. > @@ -3733,7 +3733,7 @@ struct target_signal_frame { > > struct rt_signal_frame { > siginfo_t info; > - struct ucontext uc; > + ucontext_t uc; > uint32_t tramp[2]; > }; > > @@ -3949,7 +3949,7 @@ struct rt_signal_frame { > siginfo_t *pinfo; > void *puc; > siginfo_t info; > - struct ucontext uc; > + ucontext_t uc; > uint16_t retcode[4]; /* Trampoline code. */ > }; > I think these two rt_signal_frame are unused and can be removed. Thanks, Laurent
On 06/29/2017 09:09 AM, Laurent Vivier wrote: > ... >> diff --git a/linux-user/signal.c b/linux-user/signal.c >> index 3d18d1b3ee..2c55a4f600 100644 >> --- a/linux-user/signal.c >> +++ b/linux-user/signal.c >> @@ -3346,7 +3346,7 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka, >> * >> * a0 = signal number >> * a1 = pointer to siginfo_t >> - * a2 = pointer to struct ucontext >> + * a2 = pointer to ucontext_t >> * >> * $25 and PC point to the signal handler, $29 points to the >> * struct sigframe. >> @@ -3733,7 +3733,7 @@ struct target_signal_frame { >> >> struct rt_signal_frame { >> siginfo_t info; >> - struct ucontext uc; >> + ucontext_t uc; >> uint32_t tramp[2]; >> }; >> >> @@ -3949,7 +3949,7 @@ struct rt_signal_frame { >> siginfo_t *pinfo; >> void *puc; >> siginfo_t info; >> - struct ucontext uc; >> + ucontext_t uc; >> uint16_t retcode[4]; /* Trampoline code. */ >> }; >> > > I think these two rt_signal_frame are unused and can be removed. Sounds like a separate patch, though. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
Hi, This series failed automatic build test. Please find the testing commands and their output below. If you have docker installed, you can probably reproduce it locally. Subject: [Qemu-devel] [PATCH] replace struct ucontext with ucontext_t type Message-id: 20170628204452.41230-1-raj.khem@gmail.com Type: series === TEST SCRIPT BEGIN === #!/bin/bash set -e git submodule update --init dtc # Let docker tests dump environment info export SHOW_ENV=1 export J=8 time make docker-test-quick@centos6 time make docker-test-build@min-glib time make docker-test-mingw@fedora === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 fatal: Cannot update paths and switch to branch 'test' at the same time. Did you intend to checkout 'origin/patchew/20170628204452.41230-1-raj.khem@gmail.com' which can not be resolved as commit? Traceback (most recent call last): File "/home/fam/bin/patchew", line 440, in test_one git_clone_repo(clone, r["repo"], r["head"], logf) File "/home/fam/bin/patchew", line 53, in git_clone_repo cwd=clone) File "/usr/lib64/python3.5/subprocess.py", line 271, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['git', 'checkout', 'origin/patchew/20170628204452.41230-1-raj.khem@gmail.com', '-b', 'test']' returned non-zero exit status 128 --- Email generated automatically by Patchew [http://patchew.org/]. Please send your feedback to patchew-devel@freelists.org
On Thu, 07/06 16:49, no-reply@patchew.org wrote: > Hi, > > This series failed automatic build test. Please find the testing commands and > their output below. If you have docker installed, you can probably reproduce it > locally. > > Subject: [Qemu-devel] [PATCH] replace struct ucontext with ucontext_t type > Message-id: 20170628204452.41230-1-raj.khem@gmail.com > Type: series > > === TEST SCRIPT BEGIN === > #!/bin/bash > set -e > git submodule update --init dtc > # Let docker tests dump environment info > export SHOW_ENV=1 > export J=8 > time make docker-test-quick@centos6 > time make docker-test-build@min-glib > time make docker-test-mingw@fedora > === TEST SCRIPT END === > > Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 > fatal: Cannot update paths and switch to branch 'test' at the same time. > Did you intend to checkout 'origin/patchew/20170628204452.41230-1-raj.khem@gmail.com' which can not be resolved as commit? > Traceback (most recent call last): > File "/home/fam/bin/patchew", line 440, in test_one > git_clone_repo(clone, r["repo"], r["head"], logf) > File "/home/fam/bin/patchew", line 53, in git_clone_repo > cwd=clone) > File "/usr/lib64/python3.5/subprocess.py", line 271, in check_call > raise CalledProcessError(retcode, cmd) > subprocess.CalledProcessError: Command '['git', 'checkout', 'origin/patchew/20170628204452.41230-1-raj.khem@gmail.com', '-b', 'test']' returned non-zero exit status 128 > > > > --- > Email generated automatically by Patchew [http://patchew.org/]. > Please send your feedback to patchew-devel@freelists.org Ignore this please, patchew is recovering from a bad state.
© 2016 - 2024 Red Hat, Inc.