Commit cdba95bd96ae74557b8af89c6c1d75c3aebf6f81
1 parent
8ef92a88
Fix BSD user compilation on other than OpenBSD
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5777 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
41 additions
and
7 deletions
bsd-user/main.c
... | ... | @@ -186,9 +186,6 @@ void cpu_loop(CPUSPARCState *env, enum BSDType bsd_type) |
186 | 186 | case 0x100: |
187 | 187 | #endif |
188 | 188 | syscall_nr = env->gregs[1]; |
189 | -#if defined(TARGET_SPARC) | |
190 | - syscall_nr &= ~(SYSCALL_G7RFLAG | SYSCALL_G2RFLAG); | |
191 | -#endif | |
192 | 189 | if (bsd_type == target_freebsd) |
193 | 190 | ret = do_freebsd_syscall(env, syscall_nr, |
194 | 191 | env->regwptr[0], env->regwptr[1], |
... | ... | @@ -199,11 +196,16 @@ void cpu_loop(CPUSPARCState *env, enum BSDType bsd_type) |
199 | 196 | env->regwptr[0], env->regwptr[1], |
200 | 197 | env->regwptr[2], env->regwptr[3], |
201 | 198 | env->regwptr[4], env->regwptr[5]); |
202 | - else //if (bsd_type == target_openbsd) | |
199 | + else { //if (bsd_type == target_openbsd) | |
200 | +#if defined(TARGET_SPARC64) | |
201 | + syscall_nr &= ~(TARGET_OPENBSD_SYSCALL_G7RFLAG | | |
202 | + TARGET_OPENBSD_SYSCALL_G2RFLAG); | |
203 | +#endif | |
203 | 204 | ret = do_openbsd_syscall(env, syscall_nr, |
204 | 205 | env->regwptr[0], env->regwptr[1], |
205 | 206 | env->regwptr[2], env->regwptr[3], |
206 | 207 | env->regwptr[4], env->regwptr[5]); |
208 | + } | |
207 | 209 | if ((unsigned int)ret >= (unsigned int)(-515)) { |
208 | 210 | #if defined(TARGET_SPARC64) && !defined(TARGET_ABI32) |
209 | 211 | env->xcc |= PSR_CARRY; |
... | ... | @@ -219,11 +221,13 @@ void cpu_loop(CPUSPARCState *env, enum BSDType bsd_type) |
219 | 221 | } |
220 | 222 | env->regwptr[0] = ret; |
221 | 223 | /* next instruction */ |
222 | -#if defined(TARGET_SPARC) | |
223 | - if (env->gregs[1] & SYSCALL_G2RFLAG) { | |
224 | +#if defined(TARGET_SPARC64) | |
225 | + if (bsd_type == target_openbsd && | |
226 | + env->gregs[1] & TARGET_OPENBSD_SYSCALL_G2RFLAG) { | |
224 | 227 | env->pc = env->gregs[2]; |
225 | 228 | env->npc = env->pc + 4; |
226 | - } else if (env->gregs[1] & SYSCALL_G7RFLAG) { | |
229 | + } else if (bsd_type == target_openbsd && | |
230 | + env->gregs[1] & TARGET_OPENBSD_SYSCALL_G7RFLAG) { | |
227 | 231 | env->pc = env->gregs[7]; |
228 | 232 | env->npc = env->pc + 4; |
229 | 233 | } else { | ... | ... |
bsd-user/openbsd/syscall_nr.h
... | ... | @@ -193,3 +193,33 @@ |
193 | 193 | #define TARGET_OPENBSD_NR_statfs 307 |
194 | 194 | #define TARGET_OPENBSD_NR_fstatfs 308 |
195 | 195 | #define TARGET_OPENBSD_NR_fhstatfs 309 |
196 | + | |
197 | +/* syscall flags from machine/trap.h */ | |
198 | + | |
199 | +/* $OpenBSD: trap.h,v 1.4 2008/07/04 22:04:37 kettenis Exp $ */ | |
200 | +/* $NetBSD: trap.h,v 1.4 1999/06/07 05:28:04 eeh Exp $ */ | |
201 | + | |
202 | +/* | |
203 | + * Copyright (c) 1996-1999 Eduardo Horvath | |
204 | + * | |
205 | + * Redistribution and use in source and binary forms, with or without | |
206 | + * modification, are permitted provided that the following conditions | |
207 | + * are met: | |
208 | + * 1. Redistributions of source code must retain the above copyright | |
209 | + * notice, this list of conditions and the following disclaimer. | |
210 | + * | |
211 | + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND | |
212 | + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
213 | + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
214 | + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE | |
215 | + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
216 | + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
217 | + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
218 | + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
219 | + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
220 | + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
221 | + * SUCH DAMAGE. | |
222 | + * | |
223 | + */ | |
224 | +#define TARGET_OPENBSD_SYSCALL_G2RFLAG 0x400 /* on success, return to %g2 rather than npc */ | |
225 | +#define TARGET_OPENBSD_SYSCALL_G7RFLAG 0x800 /* use %g7 as above (deprecated) */ | ... | ... |