Fixes for Solaris-2.4/sparc dynamically linked binaries.
We can now run them, but: 1. setcontext() causes a panic so binaries that receive signals crash the machine [something is wrong with the register setup]. sleep 10 == Watchdog reset Data Access Exception Type help for more information ok 2. csh says "unknown software trap a7". 3. ls gives us a bus error. 4. ldd works :-) But I solved the problem that had been bothering me for weeks :-)
This commit is contained in:
parent
1c5d265cad
commit
68328ddcdd
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: svr4_misc.c,v 1.21 1995/06/24 20:29:23 christos Exp $ */
|
/* $NetBSD: svr4_misc.c,v 1.22 1995/06/27 22:12:47 christos Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994 Christos Zoulas
|
* Copyright (c) 1994 Christos Zoulas
|
||||||
|
@ -298,7 +298,7 @@ svr4_mmap(p, uap, retval)
|
||||||
struct vnode *vp;
|
struct vnode *vp;
|
||||||
struct mmap_args mm;
|
struct mmap_args mm;
|
||||||
caddr_t rp;
|
caddr_t rp;
|
||||||
|
#define _MAP_NEW 0x80000000
|
||||||
/*
|
/*
|
||||||
* Verify the arguments.
|
* Verify the arguments.
|
||||||
*/
|
*/
|
||||||
|
@ -307,7 +307,7 @@ svr4_mmap(p, uap, retval)
|
||||||
|
|
||||||
SCARG(&mm, prot) = SCARG(uap, prot);
|
SCARG(&mm, prot) = SCARG(uap, prot);
|
||||||
SCARG(&mm, len) = SCARG(uap, len);
|
SCARG(&mm, len) = SCARG(uap, len);
|
||||||
SCARG(&mm, flags) = SCARG(uap, flags);
|
SCARG(&mm, flags) = SCARG(uap, flags) & ~_MAP_NEW;
|
||||||
SCARG(&mm, fd) = SCARG(uap, fd);
|
SCARG(&mm, fd) = SCARG(uap, fd);
|
||||||
SCARG(&mm, addr) = SCARG(uap, addr);
|
SCARG(&mm, addr) = SCARG(uap, addr);
|
||||||
SCARG(&mm, pos) = SCARG(uap, pos);
|
SCARG(&mm, pos) = SCARG(uap, pos);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: svr4_stat.c,v 1.10 1995/06/24 20:29:26 christos Exp $ */
|
/* $NetBSD: svr4_stat.c,v 1.11 1995/06/27 22:12:54 christos Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994 Christos Zoulas
|
* Copyright (c) 1994 Christos Zoulas
|
||||||
|
@ -58,6 +58,14 @@
|
||||||
|
|
||||||
#define syscallarg(x) union { x datum; register_t pad; }
|
#define syscallarg(x) union { x datum; register_t pad; }
|
||||||
|
|
||||||
|
#ifdef sparc
|
||||||
|
/*
|
||||||
|
* Solaris-2.4 on the sparc has the old stat call using the new
|
||||||
|
* stat data structure...
|
||||||
|
*/
|
||||||
|
# define SVR4_NO_OSTAT
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bsd_to_svr4_stat(st, st4)
|
bsd_to_svr4_stat(st, st4)
|
||||||
struct stat *st;
|
struct stat *st;
|
||||||
|
@ -107,6 +115,14 @@ svr4_stat(p, uap, retval)
|
||||||
register struct svr4_stat_args *uap;
|
register struct svr4_stat_args *uap;
|
||||||
register_t *retval;
|
register_t *retval;
|
||||||
{
|
{
|
||||||
|
#ifdef SVR4_NO_OSTAT
|
||||||
|
struct svr4_xstat_args cup;
|
||||||
|
|
||||||
|
SCARG(&cup, two) = 2;
|
||||||
|
SCARG(&cup, path) = SCARG(uap, path);
|
||||||
|
SCARG(&cup, ub) = (struct svr4_xstat *) SCARG(uap, ub);
|
||||||
|
return svr4_xstat(p, &cup, retval);
|
||||||
|
#else
|
||||||
struct stat st;
|
struct stat st;
|
||||||
struct svr4_stat svr4_st;
|
struct svr4_stat svr4_st;
|
||||||
struct stat_args cup;
|
struct stat_args cup;
|
||||||
|
@ -131,17 +147,26 @@ svr4_stat(p, uap, retval)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
svr4_lstat(p, uap, retval)
|
svr4_lstat(p, uap, retval)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
register struct svr4_stat_args *uap;
|
register struct svr4_lstat_args *uap;
|
||||||
register_t *retval;
|
register_t *retval;
|
||||||
{
|
{
|
||||||
|
#ifdef SVR4_NO_OSTAT
|
||||||
|
struct svr4_lxstat_args cup;
|
||||||
|
|
||||||
|
SCARG(&cup, two) = 2;
|
||||||
|
SCARG(&cup, path) = SCARG(uap, path);
|
||||||
|
SCARG(&cup, ub) = (struct svr4_xstat *) SCARG(uap, ub);
|
||||||
|
return svr4_lxstat(p, &cup, retval);
|
||||||
|
#else
|
||||||
struct stat st;
|
struct stat st;
|
||||||
struct svr4_stat svr4_st;
|
struct svr4_stat svr4_st;
|
||||||
struct stat_args cup;
|
struct lstat_args cup;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
caddr_t sg = stackgap_init(p->p_emul);
|
caddr_t sg = stackgap_init(p->p_emul);
|
||||||
|
@ -162,6 +187,7 @@ svr4_lstat(p, uap, retval)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -170,6 +196,14 @@ svr4_fstat(p, uap, retval)
|
||||||
register struct svr4_fstat_args *uap;
|
register struct svr4_fstat_args *uap;
|
||||||
register_t *retval;
|
register_t *retval;
|
||||||
{
|
{
|
||||||
|
#ifdef SVR4_NO_OSTAT
|
||||||
|
struct svr4_fxstat_args cup;
|
||||||
|
|
||||||
|
SCARG(&cup, two) = 2;
|
||||||
|
SCARG(&cup, fd) = SCARG(uap, fd);
|
||||||
|
SCARG(&cup, sb) = (struct svr4_xstat *) SCARG(uap, sb);
|
||||||
|
return svr4_fxstat(p, &cup, retval);
|
||||||
|
#else
|
||||||
struct stat st;
|
struct stat st;
|
||||||
struct svr4_stat svr4_st;
|
struct svr4_stat svr4_st;
|
||||||
struct fstat_args cup;
|
struct fstat_args cup;
|
||||||
|
@ -192,6 +226,7 @@ svr4_fstat(p, uap, retval)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -228,13 +263,13 @@ svr4_xstat(p, uap, retval)
|
||||||
|
|
||||||
int
|
int
|
||||||
svr4_lxstat(p, uap, retval)
|
svr4_lxstat(p, uap, retval)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
register struct svr4_xstat_args *uap;
|
register struct svr4_lxstat_args *uap;
|
||||||
register_t *retval;
|
register_t *retval;
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
struct svr4_xstat svr4_st;
|
struct svr4_xstat svr4_st;
|
||||||
struct stat_args cup;
|
struct lstat_args cup;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
caddr_t sg = stackgap_init(p->p_emul);
|
caddr_t sg = stackgap_init(p->p_emul);
|
||||||
|
|
Loading…
Reference in New Issue