diff options
author | peter <peter@FreeBSD.org> | 2003-08-22 23:19:02 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2003-08-22 23:19:02 +0000 |
commit | aecc3981a1169fa3676a286b94b650a46ddfa3c5 (patch) | |
tree | 1617ebd9e194aad856bf4d2bcd011ca61227006c /sys | |
parent | e2c08ea16beeb14a7176c4f900824e65a97a90db (diff) | |
download | FreeBSD-src-aecc3981a1169fa3676a286b94b650a46ddfa3c5.zip FreeBSD-src-aecc3981a1169fa3676a286b94b650a46ddfa3c5.tar.gz |
Initial sweep at dividing up the generic 32bit-on-64bit kernel support
from the ia32 specific stuff. Some of this still needs to move to the MI
freebsd32 area, and some needs to move to the MD area. This is still
work-in-progress.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/amd64/ia32/ia32_sigtramp.S | 1 | ||||
-rw-r--r-- | sys/compat/ia32/ia32_genassym.c | 2 | ||||
-rw-r--r-- | sys/compat/ia32/ia32_sigtramp.S | 1 | ||||
-rw-r--r-- | sys/compat/ia32/ia32_sysvec.c | 9 | ||||
-rw-r--r-- | sys/compat/ia32/ia32_util.h | 51 |
5 files changed, 9 insertions, 55 deletions
diff --git a/sys/amd64/ia32/ia32_sigtramp.S b/sys/amd64/ia32/ia32_sigtramp.S index 2e9f73d..0387cb7 100644 --- a/sys/amd64/ia32/ia32_sigtramp.S +++ b/sys/amd64/ia32/ia32_sigtramp.S @@ -37,6 +37,7 @@ .code32 /* * Signal trampoline, copied to top of user stack + * XXX may need to be MD to match backend sendsig handoff protocol */ ALIGN_TEXT .globl ia32_sigcode diff --git a/sys/compat/ia32/ia32_genassym.c b/sys/compat/ia32/ia32_genassym.c index d356714..ef49c3a 100644 --- a/sys/compat/ia32/ia32_genassym.c +++ b/sys/compat/ia32/ia32_genassym.c @@ -8,7 +8,7 @@ __FBSDID("$FreeBSD$"); #include <sys/systm.h> #include <sys/signal.h> -#include <amd64/ia32/ia32_signal.h> +#include <compat/ia32/ia32_signal.h> ASSYM(IA32_SIGF_HANDLER, offsetof(struct ia32_sigframe, sf_ah)); ASSYM(IA32_SIGF_UC, offsetof(struct ia32_sigframe, sf_uc)); diff --git a/sys/compat/ia32/ia32_sigtramp.S b/sys/compat/ia32/ia32_sigtramp.S index 2e9f73d..0387cb7 100644 --- a/sys/compat/ia32/ia32_sigtramp.S +++ b/sys/compat/ia32/ia32_sigtramp.S @@ -37,6 +37,7 @@ .code32 /* * Signal trampoline, copied to top of user stack + * XXX may need to be MD to match backend sendsig handoff protocol */ ALIGN_TEXT .globl ia32_sigcode diff --git a/sys/compat/ia32/ia32_sysvec.c b/sys/compat/ia32/ia32_sysvec.c index cfd7d35..a8426c9 100644 --- a/sys/compat/ia32/ia32_sysvec.c +++ b/sys/compat/ia32/ia32_sysvec.c @@ -79,11 +79,11 @@ static register_t *ia32_copyout_strings(struct image_params *imgp); static void ia32_setregs(struct thread *td, u_long entry, u_long stack, u_long ps_strings); -extern struct sysent ia32_sysent[]; +extern struct sysent freebsd32_sysent[]; struct sysentvec ia32_freebsd_sysvec = { SYS_MAXSYSCALL, - ia32_sysent, + freebsd32_sysent, 0, 0, NULL, @@ -124,8 +124,7 @@ SYSINIT(ia32, SI_SUB_EXEC, SI_ORDER_ANY, (sysinit_cfunc_t) elf32_insert_brand_entry, &ia32_brand_info); -extern int _ucode32sel, _udatasel; - +/* XXX may be freebsd32 MI */ static register_t * ia32_copyout_strings(struct image_params *imgp) { @@ -232,7 +231,9 @@ ia32_copyout_strings(struct image_params *imgp) /* * Clear registers on exec + * XXX backend MD */ +extern int _ucode32sel, _udatasel; void ia32_setregs(td, entry, stack, ps_strings) struct thread *td; diff --git a/sys/compat/ia32/ia32_util.h b/sys/compat/ia32/ia32_util.h index 64fa293..06f78cf 100644 --- a/sys/compat/ia32/ia32_util.h +++ b/sys/compat/ia32/ia32_util.h @@ -37,53 +37,4 @@ #include <sys/sysent.h> #include <sys/cdefs.h> -struct ia32_ps_strings { - u_int32_t ps_argvstr; /* first of 0 or more argument strings */ - int ps_nargvstr; /* the number of argument strings */ - u_int32_t ps_envstr; /* first of 0 or more environment strings */ - int ps_nenvstr; /* the number of environment strings */ -}; - -#define IA32_USRSTACK ((1ul << 32) - PAGE_SIZE) -#define IA32_PS_STRINGS (IA32_USRSTACK - sizeof(struct ia32_ps_strings)) - -static __inline caddr_t stackgap_init(void); -static __inline void *stackgap_alloc(caddr_t *, size_t); - -static __inline caddr_t -stackgap_init() -{ -#define szsigcode (*(curproc->p_sysent->sv_szsigcode)) - return (caddr_t)(((caddr_t)IA32_PS_STRINGS) - szsigcode - SPARE_USRSPACE); -#undef szsigcode -} - -static __inline void * -stackgap_alloc(sgp, sz) - caddr_t *sgp; - size_t sz; -{ - void *p; - - p = (void *) *sgp; - *sgp += ALIGN(sz); - return p; -} - - -extern const char ia32_emul_path[]; -int ia32_emul_find(struct thread *, caddr_t *, const char *, char *, - char **, int); - -#define CHECKALT(p, sgp, path, i) \ - do { \ - int _error; \ - \ - _error = ia32_emul_find(p, sgp, ia32_emul_path, path, \ - &path, i); \ - if (_error == EFAULT) \ - return (_error); \ - } while (0) - -#define CHECKALTEXIST(p, sgp, path) CHECKALT((p), (sgp), (path), 0) -#define CHECKALTCREAT(p, sgp, path) CHECKALT((p), (sgp), (path), 1) +#define FREEBSD32_USRSTACK ((1ul << 32) - PAGE_SIZE) |