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:
parent
1c7abef7a8
commit
c639ca93f4
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=119334
@ -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
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user