glibc used to have:
   typedef struct ucontext { ... } ucontext_t;
glibc now has:
   typedef struct ucontext_t { ... } ucontext_t;
(See https://sourceware.org/bugzilla/show_bug.cgi?id=21457
 for detail and rationale for the glibc change)
However, QEMU used "struct ucontext" in declarations. This is a
private name and compatibility cannot be guaranteed. Switch to
only using the standardized type name.
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Message-id: 20170628204452.41230-1-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>
Reviewed-by: Eric Blake <eblake@redhat.com>
[PMM: Rewrote commit message, based mostly on the one from
 Nathaniel McCallum]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			967 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			967 B
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * hostdep.h : things which are dependent on the host architecture
 | 
						|
 *
 | 
						|
 *  * Written by Peter Maydell <peter.maydell@linaro.org>
 | 
						|
 *
 | 
						|
 * Copyright (C) 2016 Linaro Limited
 | 
						|
 *
 | 
						|
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
 | 
						|
 * See the COPYING file in the top-level directory.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef I386_HOSTDEP_H
 | 
						|
#define I386_HOSTDEP_H
 | 
						|
 | 
						|
/* We have a safe-syscall.inc.S */
 | 
						|
#define HAVE_SAFE_SYSCALL
 | 
						|
 | 
						|
#ifndef __ASSEMBLER__
 | 
						|
 | 
						|
/* These are defined by the safe-syscall.inc.S file */
 | 
						|
extern char safe_syscall_start[];
 | 
						|
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)
 | 
						|
{
 | 
						|
    ucontext_t *uc = puc;
 | 
						|
    greg_t *pcreg = &uc->uc_mcontext.gregs[REG_EIP];
 | 
						|
 | 
						|
    if (*pcreg > (uintptr_t)safe_syscall_start
 | 
						|
        && *pcreg < (uintptr_t)safe_syscall_end) {
 | 
						|
        *pcreg = (uintptr_t)safe_syscall_start;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#endif /* __ASSEMBLER__ */
 | 
						|
 | 
						|
#endif
 |