1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-15 10:17:20 +00:00

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.
This commit is contained in:
Peter Wemm 2003-08-22 23:19:02 +00:00
parent 1c7abef7a8
commit c639ca93f4
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=119334
5 changed files with 9 additions and 55 deletions

View File

@ -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

View File

@ -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));

View File

@ -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

View File

@ -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;

View File

@ -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)