sync with OpenBSD -current
This commit is contained in:
parent
4c73aa256c
commit
086d8cf2c2
118 changed files with 975 additions and 393 deletions
|
@ -1,4 +1,4 @@
|
||||||
.\" $OpenBSD: cpio.1,v 1.36 2020/01/16 16:46:46 schwarze Exp $
|
.\" $OpenBSD: cpio.1,v 1.37 2023/12/09 23:00:11 jca Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 1997 SigmaSoft, Th. Lockert
|
.\" Copyright (c) 1997 SigmaSoft, Th. Lockert
|
||||||
.\" All rights reserved.
|
.\" All rights reserved.
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: January 16 2020 $
|
.Dd $Mdocdate: December 9 2023 $
|
||||||
.Dt CPIO 1
|
.Dt CPIO 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -98,6 +98,8 @@ format.
|
||||||
Old octal character
|
Old octal character
|
||||||
.Nm
|
.Nm
|
||||||
format.
|
format.
|
||||||
|
.It Ar pax
|
||||||
|
POSIX pax format.
|
||||||
.It Ar sv4cpio
|
.It Ar sv4cpio
|
||||||
SVR4 hex
|
SVR4 hex
|
||||||
.Nm
|
.Nm
|
||||||
|
@ -173,6 +175,8 @@ format.
|
||||||
Old octal character
|
Old octal character
|
||||||
.Nm
|
.Nm
|
||||||
format.
|
format.
|
||||||
|
.It Ar pax
|
||||||
|
POSIX pax format.
|
||||||
.It Ar sv4cpio
|
.It Ar sv4cpio
|
||||||
SVR4 hex
|
SVR4 hex
|
||||||
.Nm
|
.Nm
|
||||||
|
@ -298,6 +302,8 @@ be used for larger files.
|
||||||
.It bcpio Ta "4 Gigabytes"
|
.It bcpio Ta "4 Gigabytes"
|
||||||
.It sv4cpio Ta "4 Gigabytes"
|
.It sv4cpio Ta "4 Gigabytes"
|
||||||
.It cpio Ta "8 Gigabytes"
|
.It cpio Ta "8 Gigabytes"
|
||||||
|
.\" XXX should be "unlimited"
|
||||||
|
.It pax Ta "8 Gigabytes"
|
||||||
.It tar Ta "8 Gigabytes"
|
.It tar Ta "8 Gigabytes"
|
||||||
.It ustar Ta "8 Gigabytes"
|
.It ustar Ta "8 Gigabytes"
|
||||||
.El
|
.El
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: extern.h,v 1.61 2023/11/26 16:04:17 espie Exp $ */
|
/* $OpenBSD: extern.h,v 1.62 2023/12/09 23:00:11 jca Exp $ */
|
||||||
/* $NetBSD: extern.h,v 1.5 1996/03/26 23:54:16 mrg Exp $ */
|
/* $NetBSD: extern.h,v 1.5 1996/03/26 23:54:16 mrg Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -284,6 +284,7 @@ int tar_wr(ARCHD *);
|
||||||
int ustar_id(char *, int);
|
int ustar_id(char *, int);
|
||||||
int ustar_rd(ARCHD *, char *);
|
int ustar_rd(ARCHD *, char *);
|
||||||
int ustar_wr(ARCHD *);
|
int ustar_wr(ARCHD *);
|
||||||
|
int pax_wr(ARCHD *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* tty_subs.c
|
* tty_subs.c
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: options.c,v 1.106 2023/11/26 16:04:17 espie Exp $ */
|
/* $OpenBSD: options.c,v 1.107 2023/12/09 23:00:11 jca Exp $ */
|
||||||
/* $NetBSD: options.c,v 1.6 1996/03/26 23:54:18 mrg Exp $ */
|
/* $NetBSD: options.c,v 1.6 1996/03/26 23:54:18 mrg Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -216,6 +216,8 @@ FSUB fsub[] = {
|
||||||
{ },
|
{ },
|
||||||
/* 9: gzip, to detect failure to use -z */
|
/* 9: gzip, to detect failure to use -z */
|
||||||
{ },
|
{ },
|
||||||
|
/* 10: POSIX PAX */
|
||||||
|
{ },
|
||||||
#else
|
#else
|
||||||
/* 6: compress, to detect failure to use -Z */
|
/* 6: compress, to detect failure to use -Z */
|
||||||
{NULL, 0, 4, 0, 0, 0, 0, compress_id},
|
{NULL, 0, 4, 0, 0, 0, 0, compress_id},
|
||||||
|
@ -225,6 +227,10 @@ FSUB fsub[] = {
|
||||||
{NULL, 0, 4, 0, 0, 0, 0, bzip2_id},
|
{NULL, 0, 4, 0, 0, 0, 0, bzip2_id},
|
||||||
/* 9: gzip, to detect failure to use -z */
|
/* 9: gzip, to detect failure to use -z */
|
||||||
{NULL, 0, 4, 0, 0, 0, 0, gzip_id},
|
{NULL, 0, 4, 0, 0, 0, 0, gzip_id},
|
||||||
|
/* 10: POSIX PAX */
|
||||||
|
{"pax", 5120, BLKMULT, 0, 1, BLKMULT, 0, ustar_id, no_op,
|
||||||
|
ustar_rd, tar_endrd, no_op, pax_wr, tar_endwr, tar_trail,
|
||||||
|
tar_opt},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
#define F_OCPIO 0 /* format when called as cpio -6 */
|
#define F_OCPIO 0 /* format when called as cpio -6 */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $OpenBSD: pax.1,v 1.76 2022/03/31 17:27:14 naddy Exp $
|
.\" $OpenBSD: pax.1,v 1.77 2023/12/09 23:00:11 jca Exp $
|
||||||
.\" $NetBSD: pax.1,v 1.3 1995/03/21 09:07:37 cgd Exp $
|
.\" $NetBSD: pax.1,v 1.3 1995/03/21 09:07:37 cgd Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 1992 Keith Muller.
|
.\" Copyright (c) 1992 Keith Muller.
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
.\"
|
.\"
|
||||||
.\" @(#)pax.1 8.4 (Berkeley) 4/18/94
|
.\" @(#)pax.1 8.4 (Berkeley) 4/18/94
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: March 31 2022 $
|
.Dd $Mdocdate: December 9 2023 $
|
||||||
.Dt PAX 1
|
.Dt PAX 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -868,6 +868,11 @@ standard.
|
||||||
The default blocksize for this format is 10240 bytes.
|
The default blocksize for this format is 10240 bytes.
|
||||||
Filenames stored by this format must be 100 characters or less in length;
|
Filenames stored by this format must be 100 characters or less in length;
|
||||||
the total pathname must be 256 characters or less.
|
the total pathname must be 256 characters or less.
|
||||||
|
.It Cm pax
|
||||||
|
The pax interchange format specified in the
|
||||||
|
.St -p1003.1-2001
|
||||||
|
standard.
|
||||||
|
The default blocksize for this format is 5120 bytes.
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
.Nm
|
.Nm
|
||||||
|
@ -1081,9 +1086,10 @@ utility is compliant with the
|
||||||
specification,
|
specification,
|
||||||
except that the
|
except that the
|
||||||
.Cm pax
|
.Cm pax
|
||||||
archive format and the
|
archive format is only partially supported,
|
||||||
|
and the
|
||||||
.Cm listopt
|
.Cm listopt
|
||||||
keyword are unsupported.
|
keyword is unsupported.
|
||||||
.Pp
|
.Pp
|
||||||
The flags
|
The flags
|
||||||
.Op Fl 0BDEGjOPTUYZz ,
|
.Op Fl 0BDEGjOPTUYZz ,
|
||||||
|
|
232
bin/pax/tar.c
232
bin/pax/tar.c
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: tar.c,v 1.73 2023/09/04 17:05:34 jca Exp $ */
|
/* $OpenBSD: tar.c,v 1.74 2023/12/09 23:00:11 jca Exp $ */
|
||||||
/* $NetBSD: tar.c,v 1.5 1995/03/21 09:07:49 cgd Exp $ */
|
/* $NetBSD: tar.c,v 1.5 1995/03/21 09:07:49 cgd Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -35,10 +35,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/queue.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
|
#include <libgen.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -50,6 +52,19 @@
|
||||||
#include "extern.h"
|
#include "extern.h"
|
||||||
#include "tar.h"
|
#include "tar.h"
|
||||||
|
|
||||||
|
SLIST_HEAD(xheader, xheader_record);
|
||||||
|
struct xheader_record {
|
||||||
|
SLIST_ENTRY(xheader_record) entry;
|
||||||
|
size_t reclen;
|
||||||
|
char *record;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* shortest possible extended record: "5 a=\n" */
|
||||||
|
#define MINXHDRSZ 5
|
||||||
|
|
||||||
|
/* longest record we'll accept */
|
||||||
|
#define MAXXHDRSZ BLKMULT
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routines for reading, writing and header identify of various versions of tar
|
* Routines for reading, writing and header identify of various versions of tar
|
||||||
*/
|
*/
|
||||||
|
@ -60,6 +75,9 @@ static char *name_split(char *, int);
|
||||||
static int ul_oct(u_long, char *, int, int);
|
static int ul_oct(u_long, char *, int, int);
|
||||||
static int ull_oct(unsigned long long, char *, int, int);
|
static int ull_oct(unsigned long long, char *, int, int);
|
||||||
static int rd_xheader(ARCHD *arcn, int, off_t);
|
static int rd_xheader(ARCHD *arcn, int, off_t);
|
||||||
|
#ifndef SMALL
|
||||||
|
static int wr_xheader(ARCHD *, struct xheader *);
|
||||||
|
#endif
|
||||||
|
|
||||||
static uid_t uid_nobody;
|
static uid_t uid_nobody;
|
||||||
static uid_t uid_warn;
|
static uid_t uid_warn;
|
||||||
|
@ -891,24 +909,121 @@ reset:
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
#ifndef SMALL
|
||||||
* ustar_wr()
|
static int
|
||||||
* write a ustar header for the file specified in the ARCHD to the archive
|
xheader_add(struct xheader *xhdr, const char *keyword,
|
||||||
* Have to check for file types that cannot be stored and file names that
|
const char *value)
|
||||||
* are too long. Be careful of the term (last arg) to ul_oct, we only use
|
{
|
||||||
* '\0' for the termination character (this is different than picky tar)
|
struct xheader_record *rec;
|
||||||
* ASSUMED: space after header in header block is zero filled
|
int reclen, tmplen;
|
||||||
* Return:
|
char *s;
|
||||||
* 0 if file has data to be written after the header, 1 if file has NO
|
|
||||||
* data to write after the header, -1 if archive write failed
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
tmplen = MINXHDRSZ;
|
||||||
ustar_wr(ARCHD *arcn)
|
do {
|
||||||
|
reclen = tmplen;
|
||||||
|
tmplen = snprintf(NULL, 0, "%d %s=%s\n", reclen, keyword,
|
||||||
|
value);
|
||||||
|
} while (tmplen >= 0 && tmplen != reclen);
|
||||||
|
if (tmplen < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
rec = calloc(1, sizeof(*rec));
|
||||||
|
if (rec == NULL)
|
||||||
|
return -1;
|
||||||
|
rec->reclen = reclen;
|
||||||
|
if (asprintf(&s, "%d %s=%s\n", reclen, keyword, value) < 0) {
|
||||||
|
free(rec);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
rec->record = s;
|
||||||
|
|
||||||
|
SLIST_INSERT_HEAD(xhdr, rec, entry);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xheader_free(struct xheader *xhdr)
|
||||||
|
{
|
||||||
|
struct xheader_record *rec;
|
||||||
|
|
||||||
|
while (!SLIST_EMPTY(xhdr)) {
|
||||||
|
rec = SLIST_FIRST(xhdr);
|
||||||
|
SLIST_REMOVE_HEAD(xhdr, entry);
|
||||||
|
free(rec->record);
|
||||||
|
free(rec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
wr_xheader(ARCHD *arcn, struct xheader *xhdr)
|
||||||
|
{
|
||||||
|
char hdblk[sizeof(HD_USTAR)];
|
||||||
|
HD_USTAR *hd;
|
||||||
|
char buf[sizeof(hd->name) + 1];
|
||||||
|
struct xheader_record *rec;
|
||||||
|
size_t size;
|
||||||
|
|
||||||
|
size = 0;
|
||||||
|
SLIST_FOREACH(rec, xhdr, entry)
|
||||||
|
size += rec->reclen;
|
||||||
|
|
||||||
|
memset(hdblk, 0, sizeof(hdblk));
|
||||||
|
hd = (HD_USTAR *)hdblk;
|
||||||
|
hd->typeflag = XHDRTYPE;
|
||||||
|
strncpy(hd->magic, TMAGIC, TMAGLEN);
|
||||||
|
strncpy(hd->version, TVERSION, TVERSLEN);
|
||||||
|
if (ul_oct(size, hd->size, sizeof(hd->size), 3))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Best effort attempt at providing a useful file name for
|
||||||
|
* implementations that don't support pax format. Don't bother
|
||||||
|
* with truncation if the resulting file name doesn't fit.
|
||||||
|
* XXX dirname/basename portability (check return value?)
|
||||||
|
*/
|
||||||
|
(void)snprintf(buf, sizeof(buf), "%s/PaxHeaders.%ld/%s",
|
||||||
|
dirname(arcn->name), (long)getpid(), basename(arcn->name));
|
||||||
|
fieldcpy(hd->name, sizeof(hd->name), buf, sizeof(buf));
|
||||||
|
|
||||||
|
if (ul_oct(arcn->sb.st_mode, hd->mode, sizeof(hd->mode), 0) ||
|
||||||
|
ull_oct(arcn->sb.st_mtime < 0 ? 0 : arcn->sb.st_mtime, hd->mtime,
|
||||||
|
sizeof(hd->mtime), 1) ||
|
||||||
|
ul_oct(arcn->sb.st_uid, hd->uid, sizeof(hd->uid), 0) ||
|
||||||
|
ul_oct(arcn->sb.st_gid, hd->gid, sizeof(hd->gid), 0))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (ul_oct(tar_chksm(hdblk, sizeof(HD_USTAR)), hd->chksum,
|
||||||
|
sizeof(hd->chksum), 3))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* write out extended header */
|
||||||
|
if (wr_rdbuf(hdblk, sizeof(HD_USTAR)) < 0)
|
||||||
|
return -1;
|
||||||
|
if (wr_skip(BLKMULT - sizeof(HD_USTAR)) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* write out extended header records */
|
||||||
|
SLIST_FOREACH(rec, xhdr, entry)
|
||||||
|
if (wr_rdbuf(rec->record, rec->reclen) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (wr_skip(TAR_PAD(size)) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int
|
||||||
|
wr_ustar_or_pax(ARCHD *arcn, int ustar)
|
||||||
{
|
{
|
||||||
HD_USTAR *hd;
|
HD_USTAR *hd;
|
||||||
const char *name;
|
const char *name;
|
||||||
char *pt, hdblk[sizeof(HD_USTAR)];
|
char *pt, hdblk[sizeof(HD_USTAR)];
|
||||||
|
#ifndef SMALL
|
||||||
|
struct xheader xhdr = SLIST_HEAD_INITIALIZER(xhdr);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* check for those file system types ustar cannot store
|
* check for those file system types ustar cannot store
|
||||||
|
@ -929,8 +1044,19 @@ ustar_wr(ARCHD *arcn)
|
||||||
*/
|
*/
|
||||||
if (PAX_IS_LINK(arcn->type) &&
|
if (PAX_IS_LINK(arcn->type) &&
|
||||||
((size_t)arcn->ln_nlen > sizeof(hd->linkname))) {
|
((size_t)arcn->ln_nlen > sizeof(hd->linkname))) {
|
||||||
paxwarn(1, "Link name too long for ustar %s", arcn->ln_name);
|
if (ustar) {
|
||||||
return(1);
|
paxwarn(1, "Link name too long for ustar %s",
|
||||||
|
arcn->ln_name);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
#ifndef SMALL
|
||||||
|
else if (xheader_add(&xhdr, "linkpath", arcn->name) == -1) {
|
||||||
|
paxwarn(1, "Link name too long for pax %s",
|
||||||
|
arcn->ln_name);
|
||||||
|
xheader_free(&xhdr);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -938,8 +1064,21 @@ ustar_wr(ARCHD *arcn)
|
||||||
* pt != arcn->name, the name has to be split
|
* pt != arcn->name, the name has to be split
|
||||||
*/
|
*/
|
||||||
if ((pt = name_split(arcn->name, arcn->nlen)) == NULL) {
|
if ((pt = name_split(arcn->name, arcn->nlen)) == NULL) {
|
||||||
paxwarn(1, "File name too long for ustar %s", arcn->name);
|
if (ustar) {
|
||||||
return(1);
|
paxwarn(1, "File name too long for ustar %s",
|
||||||
|
arcn->name);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
#ifndef SMALL
|
||||||
|
else if (xheader_add(&xhdr, "path", arcn->name) == -1) {
|
||||||
|
paxwarn(1, "File name too long for pax %s",
|
||||||
|
arcn->ln_name);
|
||||||
|
xheader_free(&xhdr);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
/* PAX format, we don't need to split the path */
|
||||||
|
pt = arcn->name;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1074,6 +1213,18 @@ ustar_wr(ARCHD *arcn)
|
||||||
strncpy(hd->gname, name, sizeof(hd->gname));
|
strncpy(hd->gname, name, sizeof(hd->gname));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef SMALL
|
||||||
|
/* write out a pax extended header if needed */
|
||||||
|
if (!SLIST_EMPTY(&xhdr)) {
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = wr_xheader(arcn, &xhdr);
|
||||||
|
xheader_free(&xhdr);
|
||||||
|
if (ret == -1)
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calculate and store the checksum write the header to the archive
|
* calculate and store the checksum write the header to the archive
|
||||||
* return 0 tells the caller to now write the file data, 1 says no data
|
* return 0 tells the caller to now write the file data, 1 says no data
|
||||||
|
@ -1091,6 +1242,9 @@ ustar_wr(ARCHD *arcn)
|
||||||
return(1);
|
return(1);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
#ifndef SMALL
|
||||||
|
xheader_free(&xhdr);
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* header field is out of range
|
* header field is out of range
|
||||||
*/
|
*/
|
||||||
|
@ -1098,6 +1252,42 @@ ustar_wr(ARCHD *arcn)
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ustar_wr()
|
||||||
|
* Write out a ustar format archive.
|
||||||
|
* Have to check for file types that cannot be stored and file names that
|
||||||
|
* are too long. Be careful of the term (last arg) to ul_oct, we only use
|
||||||
|
* '\0' for the termination character (this is different than picky tar).
|
||||||
|
* ASSUMED: space after header in header block is zero filled
|
||||||
|
* Return:
|
||||||
|
* 0 if file has data to be written after the header, 1 if file has NO
|
||||||
|
* data to write after the header, -1 if archive write failed
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
ustar_wr(ARCHD *arcn)
|
||||||
|
{
|
||||||
|
return wr_ustar_or_pax(arcn, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* pax_wr()
|
||||||
|
* Write out a pax format archive.
|
||||||
|
* Have to check for file types that cannot be stored. Be careful of the
|
||||||
|
* term (last arg) to ul_oct, we only use '\0' for the termination
|
||||||
|
* character (this is different than picky tar).
|
||||||
|
* ASSUMED: space after header in header block is zero filled
|
||||||
|
* Return:
|
||||||
|
* 0 if file has data to be written after the header, 1 if file has NO
|
||||||
|
* data to write after the header, -1 if archive write failed
|
||||||
|
*/
|
||||||
|
#ifndef SMALL
|
||||||
|
int
|
||||||
|
pax_wr(ARCHD *arcn)
|
||||||
|
{
|
||||||
|
return wr_ustar_or_pax(arcn, 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* name_split()
|
* name_split()
|
||||||
* see if the name has to be split for storage in a ustar header. We try
|
* see if the name has to be split for storage in a ustar header. We try
|
||||||
|
@ -1184,12 +1374,6 @@ expandname(char *buf, size_t len, char **gnu_name, const char *name,
|
||||||
return(nlen);
|
return(nlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* shortest possible extended record: "5 a=\n" */
|
|
||||||
#define MINXHDRSZ 5
|
|
||||||
|
|
||||||
/* longest record we'll accept */
|
|
||||||
#define MAXXHDRSZ BLKMULT
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
rd_time(struct timespec *ts, const char *keyword, char *p)
|
rd_time(struct timespec *ts, const char *keyword, char *p)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: DEFS.h,v 1.1 2022/01/01 23:47:14 guenther Exp $ */
|
/* $OpenBSD: DEFS.h,v 1.2 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015,2018,2021 Philip Guenther <guenther@openbsd.org>
|
* Copyright (c) 2015,2018,2021 Philip Guenther <guenther@openbsd.org>
|
||||||
*
|
*
|
||||||
|
@ -67,3 +67,9 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define _END(x) .size x, . - x
|
#define _END(x) .size x, . - x
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits; \
|
||||||
|
.long label; \
|
||||||
|
.long sysno; \
|
||||||
|
.popsection;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.6 2022/12/08 01:25:43 guenther Exp $ */
|
/* $OpenBSD: SYS.h,v 1.7 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
/* $NetBSD: SYS.h,v 1.8 2003/08/07 16:42:02 agc Exp $ */
|
/* $NetBSD: SYS.h,v 1.8 2003/08/07 16:42:02 agc Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -53,7 +53,8 @@
|
||||||
|
|
||||||
#define SYSTRAP(x) \
|
#define SYSTRAP(x) \
|
||||||
ldr x8, =SYS_ ## x; \
|
ldr x8, =SYS_ ## x; \
|
||||||
svc 0; \
|
97: svc 0; \
|
||||||
|
PINSYSCALL(SYS_ ## x, 97b); \
|
||||||
dsb nsh; \
|
dsb nsh; \
|
||||||
isb
|
isb
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.16 2023/12/06 06:15:33 miod Exp $ */
|
/* $OpenBSD: SYS.h,v 1.17 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
/* $NetBSD: SYS.h,v 1.4 1996/10/17 03:03:53 cgd Exp $ */
|
/* $NetBSD: SYS.h,v 1.4 1996/10/17 03:03:53 cgd Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -56,6 +56,12 @@
|
||||||
*/
|
*/
|
||||||
#define _END(x) .size x, . - x
|
#define _END(x) .size x, . - x
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits; \
|
||||||
|
.long label; \
|
||||||
|
.long sysno; \
|
||||||
|
.popsection;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For functions implemented in ASM that aren't syscalls.
|
* For functions implemented in ASM that aren't syscalls.
|
||||||
* END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
|
* END_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names
|
||||||
|
@ -67,7 +73,8 @@
|
||||||
|
|
||||||
#define CALLSYS_NOERROR(name) \
|
#define CALLSYS_NOERROR(name) \
|
||||||
ldiq v0, ___CONCAT(SYS_,name); \
|
ldiq v0, ___CONCAT(SYS_,name); \
|
||||||
call_pal PAL_OSF1_callsys
|
97: call_pal PAL_OSF1_callsys; \
|
||||||
|
PINSYSCALL(___CONCAT(SYS_,name), 97b)
|
||||||
|
|
||||||
#define CALLSYS_ERROR(name) \
|
#define CALLSYS_ERROR(name) \
|
||||||
CALLSYS_NOERROR(name); \
|
CALLSYS_NOERROR(name); \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.21 2023/01/11 01:55:17 mortimer Exp $ */
|
/* $OpenBSD: SYS.h,v 1.22 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -41,7 +41,11 @@
|
||||||
/* offsetof(struct tib, tib_errno) - offsetof(struct tib, __tib_tcb) */
|
/* offsetof(struct tib, tib_errno) - offsetof(struct tib, __tib_tcb) */
|
||||||
#define TCB_OFFSET_ERRNO 32
|
#define TCB_OFFSET_ERRNO 32
|
||||||
|
|
||||||
#define SYSTRAP(x) movl $(SYS_ ## x),%eax; movq %rcx, %r10; syscall
|
#define SYSTRAP(x) \
|
||||||
|
movl $(SYS_ ## x),%eax; \
|
||||||
|
movq %rcx, %r10; \
|
||||||
|
97: syscall; \
|
||||||
|
PINSYSCALL(SYS_ ## x, 97b)
|
||||||
|
|
||||||
#define SYSENTRY(x) \
|
#define SYSENTRY(x) \
|
||||||
SYSENTRY_HIDDEN(x); \
|
SYSENTRY_HIDDEN(x); \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: setjmp.S,v 1.9 2020/10/21 17:22:59 kettenis Exp $ */
|
/* $OpenBSD: setjmp.S,v 1.10 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/* $NetBSD: __setjmp14.S,v 1.1 2001/06/19 00:25:02 fvdl Exp $ */
|
/* $NetBSD: __setjmp14.S,v 1.1 2001/06/19 00:25:02 fvdl Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -64,7 +64,8 @@ ENTRY(setjmp)
|
||||||
movl $1,%edi /* how = SIG_BLOCK */
|
movl $1,%edi /* how = SIG_BLOCK */
|
||||||
xorl %esi,%esi /* set = empty */
|
xorl %esi,%esi /* set = empty */
|
||||||
movl $SYS_sigprocmask,%eax
|
movl $SYS_sigprocmask,%eax
|
||||||
syscall
|
99: syscall
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
movq %r8,%rdi /* restore jmpbuf addr */
|
movq %r8,%rdi /* restore jmpbuf addr */
|
||||||
movq %rax,(_JB_SIGMASK * 8)(%rdi)
|
movq %rax,(_JB_SIGMASK * 8)(%rdi)
|
||||||
|
|
||||||
|
@ -100,7 +101,8 @@ ENTRY(longjmp)
|
||||||
movq (_JB_SIGMASK * 8)(%rdi),%rsi /* get set from sc_mask */
|
movq (_JB_SIGMASK * 8)(%rdi),%rsi /* get set from sc_mask */
|
||||||
movl $3,%edi /* how = SIG_SETMASK */
|
movl $3,%edi /* how = SIG_SETMASK */
|
||||||
movl $SYS_sigprocmask,%eax
|
movl $SYS_sigprocmask,%eax
|
||||||
syscall
|
98: syscall
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
movl %r8d,%eax
|
movl %r8d,%eax
|
||||||
|
|
||||||
leaq __jmpxor(%rip),%rcx
|
leaq __jmpxor(%rip),%rcx
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsetjmp.S,v 1.9 2020/10/21 17:22:59 kettenis Exp $ */
|
/* $OpenBSD: sigsetjmp.S,v 1.10 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/* $NetBSD: __setjmp14.S,v 1.1 2001/06/19 00:25:02 fvdl Exp $ */
|
/* $NetBSD: __setjmp14.S,v 1.1 2001/06/19 00:25:02 fvdl Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -62,7 +62,8 @@ ENTRY(sigsetjmp)
|
||||||
movl $1,%edi /* how = SIG_BLOCK */
|
movl $1,%edi /* how = SIG_BLOCK */
|
||||||
xorl %esi,%esi /* set = empty */
|
xorl %esi,%esi /* set = empty */
|
||||||
movl $SYS_sigprocmask,%eax
|
movl $SYS_sigprocmask,%eax
|
||||||
syscall
|
99: syscall
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
movq %r8,%rdi /* restore jmpbuf addr */
|
movq %r8,%rdi /* restore jmpbuf addr */
|
||||||
movq %rax,(_JB_SIGMASK * 8)(%rdi)
|
movq %rax,(_JB_SIGMASK * 8)(%rdi)
|
||||||
|
|
||||||
|
@ -100,7 +101,8 @@ ENTRY(siglongjmp)
|
||||||
movq (_JB_SIGMASK * 8)(%rdi),%rsi /* get set from sc_mask */
|
movq (_JB_SIGMASK * 8)(%rdi),%rsi /* get set from sc_mask */
|
||||||
movl $3,%edi /* how = SIG_SETMASK */
|
movl $3,%edi /* how = SIG_SETMASK */
|
||||||
movl $SYS_sigprocmask,%eax
|
movl $SYS_sigprocmask,%eax
|
||||||
syscall
|
98: syscall
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
2: movl %r8d,%eax
|
2: movl %r8d,%eax
|
||||||
|
|
||||||
leaq __jmpxor(%rip),%rcx
|
leaq __jmpxor(%rip),%rcx
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: tfork_thread.S,v 1.11 2023/01/11 01:55:17 mortimer Exp $ */
|
/* $OpenBSD: tfork_thread.S,v 1.12 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2000 Peter Wemm <peter@FreeBSD.org>
|
* Copyright (c) 2000 Peter Wemm <peter@FreeBSD.org>
|
||||||
* Copyright (c) 2003 Alan L. Cox <alc@cs.rice.edu>
|
* Copyright (c) 2003 Alan L. Cox <alc@cs.rice.edu>
|
||||||
|
@ -56,7 +56,8 @@ ENTRY(__tfork_thread)
|
||||||
*/
|
*/
|
||||||
movl $SYS___tfork, %eax
|
movl $SYS___tfork, %eax
|
||||||
.cfi_endproc
|
.cfi_endproc
|
||||||
syscall
|
99: syscall
|
||||||
|
PINSYSCALL(SYS___tfork, 99b)
|
||||||
jb 2f
|
jb 2f
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -90,7 +91,8 @@ ENTRY(__tfork_thread)
|
||||||
*/
|
*/
|
||||||
movl $SYS___threxit, %eax
|
movl $SYS___threxit, %eax
|
||||||
xorl %edi, %edi
|
xorl %edi, %edi
|
||||||
syscall
|
98: syscall
|
||||||
|
PINSYSCALL(SYS___threxit, 98b)
|
||||||
int3
|
int3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.19 2022/12/08 01:25:43 guenther Exp $ */
|
/* $OpenBSD: SYS.h,v 1.20 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/* $NetBSD: SYS.h,v 1.8 2003/08/07 16:42:02 agc Exp $ */
|
/* $NetBSD: SYS.h,v 1.8 2003/08/07 16:42:02 agc Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -54,7 +54,8 @@
|
||||||
|
|
||||||
#define SYSTRAP(x) \
|
#define SYSTRAP(x) \
|
||||||
ldr r12, =SYS_ ## x; \
|
ldr r12, =SYS_ ## x; \
|
||||||
swi 0; \
|
97: swi 0; \
|
||||||
|
PINSYSCALL(SYS_ ## x, 97b); \
|
||||||
dsb nsh; \
|
dsb nsh; \
|
||||||
isb
|
isb
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.23 2023/02/11 06:10:39 guenther Exp $ */
|
/* $OpenBSD: SYS.h,v 1.24 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2002 Michael Shalayeff
|
* Copyright (c) 1998-2002 Michael Shalayeff
|
||||||
|
@ -67,6 +67,11 @@
|
||||||
#define EXIT_WEAK(x) EXIT_STRONG(x) !\
|
#define EXIT_WEAK(x) EXIT_STRONG(x) !\
|
||||||
.weak x
|
.weak x
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits !\
|
||||||
|
.long label !\
|
||||||
|
.long sysno !\
|
||||||
|
.popsection
|
||||||
|
|
||||||
#define SYSENTRY(x) !\
|
#define SYSENTRY(x) !\
|
||||||
LEAF_ENTRY(__CONCAT(_thread_sys_,x)) !\
|
LEAF_ENTRY(__CONCAT(_thread_sys_,x)) !\
|
||||||
|
@ -84,8 +89,9 @@ LEAF_ENTRY(__CONCAT(_thread_sys_,x))
|
||||||
#define SYSCALL(x) !\
|
#define SYSCALL(x) !\
|
||||||
stw rp, HPPA_FRAME_ERP(sr0,sp) !\
|
stw rp, HPPA_FRAME_ERP(sr0,sp) !\
|
||||||
ldil L%SYSCALLGATE, r1 !\
|
ldil L%SYSCALLGATE, r1 !\
|
||||||
ble 4(sr7, r1) !\
|
97: ble 4(sr7, r1) !\
|
||||||
ldi __CONCAT(SYS_,x), t1 !\
|
PINSYSCALL(__CONCAT(SYS_,x), 97b) !\
|
||||||
|
ldi __CONCAT(SYS_,x), t1 !\
|
||||||
comb,= 0, t1, 1f !\
|
comb,= 0, t1, 1f !\
|
||||||
ldw HPPA_FRAME_ERP(sr0,sp), rp !\
|
ldw HPPA_FRAME_ERP(sr0,sp), rp !\
|
||||||
/* set errno */ \
|
/* set errno */ \
|
||||||
|
@ -113,8 +119,9 @@ SYSEXIT_HIDDEN(x)
|
||||||
SYSENTRY(x) !\
|
SYSENTRY(x) !\
|
||||||
stw rp, HPPA_FRAME_ERP(sr0,sp) !\
|
stw rp, HPPA_FRAME_ERP(sr0,sp) !\
|
||||||
ldil L%SYSCALLGATE, r1 !\
|
ldil L%SYSCALLGATE, r1 !\
|
||||||
ble 4(sr7, r1) !\
|
97: ble 4(sr7, r1) !\
|
||||||
ldi __CONCAT(SYS_,y), t1 !\
|
PINSYSCALL(__CONCAT(SYS_,x), 97b) !\
|
||||||
|
ldi __CONCAT(SYS_,x), t1 !\
|
||||||
ldw HPPA_FRAME_ERP(sr0,sp), rp !\
|
ldw HPPA_FRAME_ERP(sr0,sp), rp !\
|
||||||
bv r0(rp) !\
|
bv r0(rp) !\
|
||||||
nop !\
|
nop !\
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: setjmp.S,v 1.11 2016/05/29 07:59:36 guenther Exp $ */
|
/* $OpenBSD: setjmp.S,v 1.12 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -63,7 +63,8 @@ ALTENTRY(setjmp)
|
||||||
copy %r0, %arg1 ; set = empty
|
copy %r0, %arg1 ; set = empty
|
||||||
stw %rp, HPPA_FRAME_ERP(%sr0,%sp)
|
stw %rp, HPPA_FRAME_ERP(%sr0,%sp)
|
||||||
ldil L%SYSCALLGATE, %r1
|
ldil L%SYSCALLGATE, %r1
|
||||||
ble 4(%sr7, %r1)
|
99: ble 4(%sr7, %r1)
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
ldi SYS_sigprocmask, %t1
|
ldi SYS_sigprocmask, %t1
|
||||||
ldw HPPA_FRAME_ERP(%sr0,%sp), %rp
|
ldw HPPA_FRAME_ERP(%sr0,%sp), %rp
|
||||||
|
|
||||||
|
@ -129,7 +130,8 @@ ALTENTRY(longjmp)
|
||||||
ldi 3, %arg0 ; how = SIG_SETMASK
|
ldi 3, %arg0 ; how = SIG_SETMASK
|
||||||
stw %rp, HPPA_FRAME_ERP(%sr0,%sp)
|
stw %rp, HPPA_FRAME_ERP(%sr0,%sp)
|
||||||
ldil L%SYSCALLGATE, %r1
|
ldil L%SYSCALLGATE, %r1
|
||||||
ble 4(%sr7, %r1)
|
98: ble 4(%sr7, %r1)
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
ldi SYS_sigprocmask, %t1
|
ldi SYS_sigprocmask, %t1
|
||||||
ldw HPPA_FRAME_ERP(%sr0,%sp), %rp
|
ldw HPPA_FRAME_ERP(%sr0,%sp), %rp
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: Ovfork.S,v 1.15 2016/05/07 19:05:21 guenther Exp $ */
|
/* $OpenBSD: Ovfork.S,v 1.16 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999,2002 Michael Shalayeff
|
* Copyright (c) 1999,2002 Michael Shalayeff
|
||||||
|
@ -32,8 +32,9 @@ SYSENTRY_HIDDEN(vfork)
|
||||||
.import errno, data
|
.import errno, data
|
||||||
copy rp, t4
|
copy rp, t4
|
||||||
ldil L%SYSCALLGATE, r1
|
ldil L%SYSCALLGATE, r1
|
||||||
ble 4(sr7, r1)
|
99: ble 4(sr7, r1)
|
||||||
ldi __CONCAT(SYS_,vfork), t1
|
PINSYSCALL(__CONCAT(SYS_,vfork), 99b)
|
||||||
|
ldi __CONCAT(SYS_,vfork), t1
|
||||||
comb,= r0, t1, 1f
|
comb,= r0, t1, 1f
|
||||||
copy t4, rp
|
copy t4, rp
|
||||||
/* set errno */
|
/* set errno */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: DEFS.h,v 1.3 2017/11/29 05:13:57 guenther Exp $ */
|
/* $OpenBSD: DEFS.h,v 1.4 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017 Philip Guenther <guenther@openbsd.org>
|
* Copyright (c) 2017 Philip Guenther <guenther@openbsd.org>
|
||||||
*
|
*
|
||||||
|
@ -47,3 +47,9 @@
|
||||||
#else
|
#else
|
||||||
#define END_BUILTIN(x) END_STRONG(x)
|
#define END_BUILTIN(x) END_STRONG(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits; \
|
||||||
|
.long label; \
|
||||||
|
.long sysno; \
|
||||||
|
.popsection;
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $OpenBSD: SYS.h,v 1.27 2017/11/29 05:13:57 guenther Exp $
|
* $OpenBSD: SYS.h,v 1.28 2023/12/10 16:45:51 deraadt Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "DEFS.h"
|
#include "DEFS.h"
|
||||||
|
@ -59,7 +59,9 @@
|
||||||
|
|
||||||
#define __DO_SYSCALL(x) \
|
#define __DO_SYSCALL(x) \
|
||||||
movl $(SYS_ ## x),%eax; \
|
movl $(SYS_ ## x),%eax; \
|
||||||
int $0x80
|
97: int $0x80; \
|
||||||
|
PINSYSCALL(SYS_ ## x, 97b)
|
||||||
|
|
||||||
|
|
||||||
#define SET_ERRNO() \
|
#define SET_ERRNO() \
|
||||||
movl %eax,%gs:(TCB_OFFSET_ERRNO); \
|
movl %eax,%gs:(TCB_OFFSET_ERRNO); \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: setjmp.S,v 1.14 2020/12/13 21:21:32 bluhm Exp $ */
|
/* $OpenBSD: setjmp.S,v 1.15 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -59,7 +59,8 @@ ENTRY(setjmp)
|
||||||
pushl $1 /* how = SIG_BLOCK */
|
pushl $1 /* how = SIG_BLOCK */
|
||||||
call 1f
|
call 1f
|
||||||
1: movl $(SYS_sigprocmask),%eax
|
1: movl $(SYS_sigprocmask),%eax
|
||||||
int $0x80 /* leave oset in %eax */
|
99: int $0x80 /* leave oset in %eax */
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
popl %edx
|
popl %edx
|
||||||
addl $8,%esp
|
addl $8,%esp
|
||||||
addl $__jmpxor-1b,%edx # load cookie address
|
addl $__jmpxor-1b,%edx # load cookie address
|
||||||
|
@ -89,7 +90,8 @@ ENTRY(longjmp)
|
||||||
pushl $3 /* how = SIG_SETMASK */
|
pushl $3 /* how = SIG_SETMASK */
|
||||||
call 1f /* get our eip */
|
call 1f /* get our eip */
|
||||||
1: movl $(SYS_sigprocmask),%eax
|
1: movl $(SYS_sigprocmask),%eax
|
||||||
int $0x80
|
98: int $0x80
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
popl %ecx
|
popl %ecx
|
||||||
addl $8,%esp
|
addl $8,%esp
|
||||||
addl $__jmpxor-1b,%ecx # load cookie address
|
addl $__jmpxor-1b,%ecx # load cookie address
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsetjmp.S,v 1.13 2020/12/13 21:21:32 bluhm Exp $ */
|
/* $OpenBSD: sigsetjmp.S,v 1.14 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -47,7 +47,8 @@ ENTRY(sigsetjmp)
|
||||||
pushl $1 /* how = SIG_BLOCK */
|
pushl $1 /* how = SIG_BLOCK */
|
||||||
subl $4,%esp
|
subl $4,%esp
|
||||||
movl $(SYS_sigprocmask),%eax
|
movl $(SYS_sigprocmask),%eax
|
||||||
int $0x80 /* leave oset in %eax */
|
99: int $0x80 /* leave oset in %eax */
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
addl $12,%esp
|
addl $12,%esp
|
||||||
movl %eax,(_JB_SIGMASK * 4)(%ecx)
|
movl %eax,(_JB_SIGMASK * 4)(%ecx)
|
||||||
|
|
||||||
|
@ -81,7 +82,8 @@ ENTRY(siglongjmp)
|
||||||
pushl $3 /* how = SIG_SETMASK */
|
pushl $3 /* how = SIG_SETMASK */
|
||||||
subl $4,%esp
|
subl $4,%esp
|
||||||
movl $(SYS_sigprocmask),%eax
|
movl $(SYS_sigprocmask),%eax
|
||||||
int $0x80
|
98: int $0x80
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
addl $12,%esp
|
addl $12,%esp
|
||||||
|
|
||||||
1: call 2f
|
1: call 2f
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: Ovfork.S,v 1.10 2016/05/07 19:05:21 guenther Exp $ */
|
/* $OpenBSD: Ovfork.S,v 1.11 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -36,7 +36,8 @@
|
||||||
SYSENTRY_HIDDEN(vfork)
|
SYSENTRY_HIDDEN(vfork)
|
||||||
popl %ecx /* my rta into ecx */
|
popl %ecx /* my rta into ecx */
|
||||||
movl $(SYS_vfork),%eax
|
movl $(SYS_vfork),%eax
|
||||||
int $0x80
|
99: int $0x80
|
||||||
|
PINSYSCALL(SYS_vfork, 99b)
|
||||||
HANDLE_ERRNO()
|
HANDLE_ERRNO()
|
||||||
jmp *%ecx
|
jmp *%ecx
|
||||||
SYSCALL_END_HIDDEN(vfork)
|
SYSCALL_END_HIDDEN(vfork)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: brk.S,v 1.15 2022/12/04 08:22:13 tb Exp $ */
|
/* $OpenBSD: brk.S,v 1.16 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -54,7 +54,8 @@ ENTRY_NB(brk)
|
||||||
movl %ecx,4(%esp)
|
movl %ecx,4(%esp)
|
||||||
1:
|
1:
|
||||||
movl $(SYS_break),%eax
|
movl $(SYS_break),%eax
|
||||||
int $0x80
|
99: int $0x80
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
jc 2f
|
jc 2f
|
||||||
PIC_PROLOGUE
|
PIC_PROLOGUE
|
||||||
movl PIC_GOT(__curbrk),%edx # set up GOT addressing
|
movl PIC_GOT(__curbrk),%edx # set up GOT addressing
|
||||||
|
@ -71,7 +72,8 @@ ENTRY_NB(brk)
|
||||||
movl %ecx,4(%esp)
|
movl %ecx,4(%esp)
|
||||||
1:
|
1:
|
||||||
movl $(SYS_break),%eax
|
movl $(SYS_break),%eax
|
||||||
int $0x80
|
98: int $0x80
|
||||||
|
PINSYSCALL(SYS_break, 98b)
|
||||||
jc 2f
|
jc 2f
|
||||||
xorl %eax,%eax
|
xorl %eax,%eax
|
||||||
movl %ecx,__curbrk
|
movl %ecx,__curbrk
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sbrk.S,v 1.15 2022/12/04 08:22:13 tb Exp $ */
|
/* $OpenBSD: sbrk.S,v 1.16 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -51,7 +51,8 @@ ENTRY_NB(sbrk)
|
||||||
movl (%edx),%eax
|
movl (%edx),%eax
|
||||||
addl %eax,4(%esp)
|
addl %eax,4(%esp)
|
||||||
movl $(SYS_break),%eax
|
movl $(SYS_break),%eax
|
||||||
int $0x80
|
99: int $0x80
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
jc 2f
|
jc 2f
|
||||||
PIC_PROLOGUE
|
PIC_PROLOGUE
|
||||||
movl PIC_GOT(__curbrk),%edx
|
movl PIC_GOT(__curbrk),%edx
|
||||||
|
@ -65,7 +66,8 @@ ENTRY_NB(sbrk)
|
||||||
movl __curbrk,%eax
|
movl __curbrk,%eax
|
||||||
addl %eax,4(%esp)
|
addl %eax,4(%esp)
|
||||||
movl $(SYS_break),%eax
|
movl $(SYS_break),%eax
|
||||||
int $0x80
|
98: int $0x80
|
||||||
|
PINSYSCALL(SYS_break, 98b)
|
||||||
jc 2f
|
jc 2f
|
||||||
movl __curbrk,%eax
|
movl __curbrk,%eax
|
||||||
addl %ecx,__curbrk
|
addl %ecx,__curbrk
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigprocmask.S,v 1.12 2016/05/07 19:05:21 guenther Exp $ */
|
/* $OpenBSD: sigprocmask.S,v 1.13 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -43,7 +43,8 @@ SYSENTRY_HIDDEN(sigprocmask)
|
||||||
1: movl (%ecx),%ecx # fetch indirect ...
|
1: movl (%ecx),%ecx # fetch indirect ...
|
||||||
movl %ecx,8(%esp) # to new mask arg
|
movl %ecx,8(%esp) # to new mask arg
|
||||||
2: movl $(SYS_sigprocmask),%eax
|
2: movl $(SYS_sigprocmask),%eax
|
||||||
int $0x80
|
99: int $0x80
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
jc 1f
|
jc 1f
|
||||||
movl 12(%esp),%ecx # fetch old mask requested
|
movl 12(%esp),%ecx # fetch old mask requested
|
||||||
testl %ecx,%ecx # test if old mask requested
|
testl %ecx,%ecx # test if old mask requested
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsuspend.S,v 1.10 2016/05/07 19:05:21 guenther Exp $ */
|
/* $OpenBSD: sigsuspend.S,v 1.11 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -38,7 +38,8 @@ SYSENTRY_HIDDEN(sigsuspend)
|
||||||
movl (%eax),%eax # indirect to mask arg
|
movl (%eax),%eax # indirect to mask arg
|
||||||
movl %eax,4(%esp)
|
movl %eax,4(%esp)
|
||||||
movl $(SYS_sigsuspend),%eax
|
movl $(SYS_sigsuspend),%eax
|
||||||
int $0x80
|
99: int $0x80
|
||||||
|
PINSYSCALL(SYS_sigsuspend, 99b)
|
||||||
SET_ERRNO()
|
SET_ERRNO()
|
||||||
ret
|
ret
|
||||||
SYSCALL_END_HIDDEN(sigsuspend)
|
SYSCALL_END_HIDDEN(sigsuspend)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: tfork_thread.S,v 1.10 2020/10/18 14:28:17 deraadt Exp $ */
|
/* $OpenBSD: tfork_thread.S,v 1.11 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2000 Peter Wemm <peter@FreeBSD.org>
|
* Copyright (c) 2000 Peter Wemm <peter@FreeBSD.org>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -62,7 +62,8 @@ ENTRY(__tfork_thread)
|
||||||
pushl 8(%ebp) # push param
|
pushl 8(%ebp) # push param
|
||||||
pushl $0 # slot for return address, ignored by kernel
|
pushl $0 # slot for return address, ignored by kernel
|
||||||
movl $SYS___tfork, %eax
|
movl $SYS___tfork, %eax
|
||||||
int $0x80
|
99: int $0x80
|
||||||
|
PINSYSCALL(SYS___tfork, 99b)
|
||||||
jb 2f
|
jb 2f
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -98,7 +99,8 @@ ENTRY(__tfork_thread)
|
||||||
pushl $0 # NULL pointer argument to __threxit
|
pushl $0 # NULL pointer argument to __threxit
|
||||||
pushl $0 # slot for return address, ignored by kernel
|
pushl $0 # slot for return address, ignored by kernel
|
||||||
movl $SYS___threxit, %eax
|
movl $SYS___threxit, %eax
|
||||||
int $0x80
|
98: int $0x80
|
||||||
|
PINSYSCALL(SYS___threxit, 98b)
|
||||||
int3
|
int3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: DEFS.h,v 1.3 2016/09/22 18:19:59 guenther Exp $ */
|
/* $OpenBSD: DEFS.h,v 1.4 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
@ -23,3 +23,9 @@
|
||||||
*/
|
*/
|
||||||
#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
|
#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
|
||||||
#define END_WEAK(x) END_STRONG(x); .weak x
|
#define END_WEAK(x) END_STRONG(x); .weak x
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits; \
|
||||||
|
.long label; \
|
||||||
|
.long sysno; \
|
||||||
|
.popsection;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.25 2018/06/16 16:06:03 guenther Exp $*/
|
/* $OpenBSD: SYS.h,v 1.26 2023/12/10 16:45:51 deraadt Exp $*/
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -80,7 +80,8 @@
|
||||||
|
|
||||||
#define __DO_SYSCALL(x) \
|
#define __DO_SYSCALL(x) \
|
||||||
or %r13, %r0, __SYSCALLNAME(SYS_,x); \
|
or %r13, %r0, __SYSCALLNAME(SYS_,x); \
|
||||||
tb0 0, %r0, 450
|
97: tb0 0, %r0, 450; \
|
||||||
|
PINSYSCALL(__SYSCALLNAME(SYS_,x), 97b)
|
||||||
|
|
||||||
#define __SYSCALL__NOERROR(p,x,y) \
|
#define __SYSCALL__NOERROR(p,x,y) \
|
||||||
__ENTRY(p,x); \
|
__ENTRY(p,x); \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: brk.S,v 1.14 2015/09/10 13:29:09 guenther Exp $ */
|
/* $OpenBSD: brk.S,v 1.15 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -65,7 +65,8 @@ ENTRY(brk)
|
||||||
1:
|
1:
|
||||||
or %r4,%r2,0
|
or %r4,%r2,0
|
||||||
or %r13,%r0,__SYSCALLNAME(SYS_,break)
|
or %r13,%r0,__SYSCALLNAME(SYS_,break)
|
||||||
tb0 0,%r0,450
|
99: tb0 0,%r0,450
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
br 9f
|
br 9f
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sbrk.S,v 1.14 2015/09/10 13:29:09 guenther Exp $ */
|
/* $OpenBSD: sbrk.S,v 1.15 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -64,7 +64,8 @@ ENTRY(sbrk)
|
||||||
add %r2,%r2,%r5
|
add %r2,%r2,%r5
|
||||||
or %r4,%r2,0
|
or %r4,%r2,0
|
||||||
or %r13,%r0,SYS_break
|
or %r13,%r0,SYS_break
|
||||||
tb0 0,%r0,450
|
99: tb0 0,%r0,450
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
br 9f
|
br 9f
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigpending.S,v 1.10 2015/09/10 13:29:09 guenther Exp $ */
|
/* $OpenBSD: sigpending.S,v 1.11 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -38,7 +38,8 @@
|
||||||
SYSENTRY(sigpending)
|
SYSENTRY(sigpending)
|
||||||
or %r4,%r2,0 /* save r2 */
|
or %r4,%r2,0 /* save r2 */
|
||||||
or %r13,%r0,SYS_sigpending
|
or %r13,%r0,SYS_sigpending
|
||||||
tb0 0,%r0,450
|
99: tb0 0,%r0,450
|
||||||
|
PINSYSCALL(SYS_sigpending, 99b)
|
||||||
br CERROR
|
br CERROR
|
||||||
st %r2,%r4,0
|
st %r2,%r4,0
|
||||||
jmp.n %r1
|
jmp.n %r1
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigprocmask.S,v 1.12 2015/10/23 04:39:24 guenther Exp $ */
|
/* $OpenBSD: sigprocmask.S,v 1.13 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -43,7 +43,8 @@ SYSENTRY_HIDDEN(sigprocmask)
|
||||||
ld %r3,%r3,0 /* else load set from *set and do it */
|
ld %r3,%r3,0 /* else load set from *set and do it */
|
||||||
2:
|
2:
|
||||||
or %r13,%r0,SYS_sigprocmask
|
or %r13,%r0,SYS_sigprocmask
|
||||||
tb0 0,%r0,450
|
99: tb0 0,%r0,450
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
br CERROR
|
br CERROR
|
||||||
bcnd eq0,%r4,3f /* if old mask not requested, done */
|
bcnd eq0,%r4,3f /* if old mask not requested, done */
|
||||||
st %r2,%r4,0 /* otherwise, set it */
|
st %r2,%r4,0 /* otherwise, set it */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsuspend.S,v 1.13 2016/05/07 19:05:21 guenther Exp $ */
|
/* $OpenBSD: sigsuspend.S,v 1.14 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -45,7 +45,8 @@
|
||||||
SYSENTRY_HIDDEN(sigsuspend)
|
SYSENTRY_HIDDEN(sigsuspend)
|
||||||
ld %r2,%r2,0 /* dereference the pointer mask */
|
ld %r2,%r2,0 /* dereference the pointer mask */
|
||||||
or %r13,%r0,SYS_sigsuspend
|
or %r13,%r0,SYS_sigsuspend
|
||||||
tb0 0,%r0,450
|
99: tb0 0,%r0,450
|
||||||
|
PINSYSCALL(SYS_sigsuspend, 99b)
|
||||||
br CERROR
|
br CERROR
|
||||||
jmp.n %r1
|
jmp.n %r1
|
||||||
or %r2,%r0,0
|
or %r2,%r0,0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: tfork_thread.S,v 1.7 2020/11/07 02:52:08 aoyama Exp $ */
|
/* $OpenBSD: tfork_thread.S,v 1.8 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Miodrag Vallat
|
* Copyright (c) 2005, Miodrag Vallat
|
||||||
|
@ -34,7 +34,8 @@
|
||||||
*/
|
*/
|
||||||
ENTRY(__tfork_thread)
|
ENTRY(__tfork_thread)
|
||||||
or %r13, %r0, __SYSCALLNAME(SYS_,__tfork)
|
or %r13, %r0, __SYSCALLNAME(SYS_,__tfork)
|
||||||
tb0 0, %r0, 450 /* corrupts r2 and r3 in the child */
|
99: tb0 0, %r0, 450 /* corrupts r2 and r3 in the child */
|
||||||
|
PINSYSCALL(SYS___tfork, 99b)
|
||||||
br CERROR
|
br CERROR
|
||||||
|
|
||||||
bcnd eq0, %r2, 1f
|
bcnd eq0, %r2, 1f
|
||||||
|
@ -52,7 +53,8 @@ ENTRY(__tfork_thread)
|
||||||
or %r2, %r5, %r0 /* arg */
|
or %r2, %r5, %r0 /* arg */
|
||||||
|
|
||||||
or %r13, %r0, __SYSCALLNAME(SYS_,__threxit)
|
or %r13, %r0, __SYSCALLNAME(SYS_,__threxit)
|
||||||
tb0 0, %r0, 450
|
98: tb0 0, %r0, 450
|
||||||
|
PINSYSCALL(SYS___threxit, 98b)
|
||||||
NOP
|
NOP
|
||||||
tb0 0, %r0, 130 /* breakpoint */
|
tb0 0, %r0, 130 /* breakpoint */
|
||||||
END(__tfork_thread)
|
END(__tfork_thread)
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $OpenBSD: SYS.h,v 1.12 2016/05/07 19:05:22 guenther Exp $
|
* $OpenBSD: SYS.h,v 1.13 2023/12/10 16:45:51 deraadt Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
|
@ -59,15 +59,16 @@
|
||||||
.size _HIDDEN(x), . - _HIDDEN(x)
|
.size _HIDDEN(x), . - _HIDDEN(x)
|
||||||
#define END_WEAK(x) END_STRONG(x); .weak x
|
#define END_WEAK(x) END_STRONG(x); .weak x
|
||||||
|
|
||||||
|
|
||||||
#define CERROR __cerror
|
#define CERROR __cerror
|
||||||
.hidden CERROR
|
.hidden CERROR
|
||||||
|
|
||||||
# define __ENTRY(p,x) ENTRY(p ## x)
|
# define __ENTRY(p,x) ENTRY(p ## x)
|
||||||
|
|
||||||
# define __DO_SYSCALL(x) \
|
# define __DO_SYSCALL(x) \
|
||||||
li v0,SYS_ ## x; \
|
li v0,SYS_ ## x; \
|
||||||
syscall
|
97: syscall; \
|
||||||
|
PINSYSCALL(SYS_ ## x, 97b) \
|
||||||
|
|
||||||
|
|
||||||
# define __LEAF2(p,x,sz) LEAF(p ## x, sz) \
|
# define __LEAF2(p,x,sz) LEAF(p ## x, sz) \
|
||||||
WEAK_ALIAS(x, p ## x);
|
WEAK_ALIAS(x, p ## x);
|
||||||
|
@ -124,3 +125,8 @@
|
||||||
#define SYSCALL_END(x) __END2(_thread_sys_,x)
|
#define SYSCALL_END(x) __END2(_thread_sys_,x)
|
||||||
#define SYSCALL_END_HIDDEN(x) __END2_HIDDEN(_thread_sys_,x)
|
#define SYSCALL_END_HIDDEN(x) __END2_HIDDEN(_thread_sys_,x)
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits; \
|
||||||
|
.long label; \
|
||||||
|
.long sysno; \
|
||||||
|
.popsection;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: setjmp.S,v 1.12 2018/01/08 16:44:32 visa Exp $ */
|
/* $OpenBSD: setjmp.S,v 1.13 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2002 Opsycon AB (www.opsycon.se / www.opsycon.com)
|
* Copyright (c) 2001-2002 Opsycon AB (www.opsycon.se / www.opsycon.com)
|
||||||
|
@ -60,7 +60,8 @@ LEAF(setjmp, FRAMESZ)
|
||||||
li a0, 1 # how = SIG_BLOCK
|
li a0, 1 # how = SIG_BLOCK
|
||||||
move a1, zero # get current signal mask
|
move a1, zero # get current signal mask
|
||||||
li v0, SYS_sigprocmask
|
li v0, SYS_sigprocmask
|
||||||
syscall # mask in v0
|
99: syscall # mask in v0
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
bne a3, zero, botch
|
bne a3, zero, botch
|
||||||
REG_S v0, _JB_MASK(a2) # save sc_mask
|
REG_S v0, _JB_MASK(a2) # save sc_mask
|
||||||
|
|
||||||
|
@ -132,7 +133,8 @@ LEAF(longjmp, FRAMESZ)
|
||||||
REG_L a1, _JB_MASK(a2) # load sc_mask
|
REG_L a1, _JB_MASK(a2) # load sc_mask
|
||||||
li a0, 3 # how = SIG_SETMASK
|
li a0, 3 # how = SIG_SETMASK
|
||||||
li v0, SYS_sigprocmask
|
li v0, SYS_sigprocmask
|
||||||
syscall
|
98: syscall
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
bne a3, zero, botch
|
bne a3, zero, botch
|
||||||
|
|
||||||
REG_L v0, _JB_REGS+ZERO*REGSZ(a2)
|
REG_L v0, _JB_REGS+ZERO*REGSZ(a2)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: brk.S,v 1.10 2022/12/08 01:25:43 guenther Exp $ */
|
/* $OpenBSD: brk.S,v 1.11 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1991, 1993
|
* Copyright (c) 1991, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -55,7 +55,8 @@ LEAF(brk, FRAMESZ)
|
||||||
move a0, v0 # dont allow break < minbrk
|
move a0, v0 # dont allow break < minbrk
|
||||||
1:
|
1:
|
||||||
li v0, SYS_break
|
li v0, SYS_break
|
||||||
syscall
|
99: syscall
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
bne a3, zero, 2f
|
bne a3, zero, 2f
|
||||||
PTR_S a0, __curbrk
|
PTR_S a0, __curbrk
|
||||||
move v0, zero
|
move v0, zero
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sbrk.S,v 1.10 2022/12/08 01:25:43 guenther Exp $ */
|
/* $OpenBSD: sbrk.S,v 1.11 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1991, 1993
|
* Copyright (c) 1991, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -52,7 +52,8 @@ LEAF(sbrk, FRAMESZ)
|
||||||
PTR_L v1, __curbrk
|
PTR_L v1, __curbrk
|
||||||
li v0, SYS_break
|
li v0, SYS_break
|
||||||
PTR_ADDU a0, a0, v1 # compute current break
|
PTR_ADDU a0, a0, v1 # compute current break
|
||||||
syscall
|
99: syscall
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
|
|
||||||
bne a3, zero, 1f
|
bne a3, zero, 1f
|
||||||
move v0, v1 # return old val of curbrk from above
|
move v0, v1 # return old val of curbrk from above
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigpending.S,v 1.7 2015/10/23 04:39:24 guenther Exp $ */
|
/* $OpenBSD: sigpending.S,v 1.8 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1991, 1993
|
* Copyright (c) 1991, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -41,7 +41,8 @@ SYSLEAF(sigpending, FRAMESZ)
|
||||||
SETUP_GP64(GPOFF, _HIDDEN(sigpending))
|
SETUP_GP64(GPOFF, _HIDDEN(sigpending))
|
||||||
.set reorder
|
.set reorder
|
||||||
li v0, SYS_sigpending
|
li v0, SYS_sigpending
|
||||||
syscall
|
99: syscall
|
||||||
|
PINSYSCALL(SYS_sigpending, 99b)
|
||||||
bne a3, zero, 1f
|
bne a3, zero, 1f
|
||||||
sw v0, 0(a0)
|
sw v0, 0(a0)
|
||||||
move v0, zero
|
move v0, zero
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigprocmask.S,v 1.7 2015/10/23 04:39:24 guenther Exp $ */
|
/* $OpenBSD: sigprocmask.S,v 1.8 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1991, 1993
|
* Copyright (c) 1991, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -47,7 +47,8 @@ SYSLEAF_HIDDEN(sigprocmask, FRAMESZ)
|
||||||
lw a1, 0(a1) # indirect to new mask arg
|
lw a1, 0(a1) # indirect to new mask arg
|
||||||
.Ldoit:
|
.Ldoit:
|
||||||
li v0, SYS_sigprocmask
|
li v0, SYS_sigprocmask
|
||||||
syscall
|
99: syscall
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
bne a3, zero, .Lerr
|
bne a3, zero, .Lerr
|
||||||
beq a2, zero, .Lout # test if old mask requested
|
beq a2, zero, .Lout # test if old mask requested
|
||||||
sw v0, 0(a2) # store old mask
|
sw v0, 0(a2) # store old mask
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsuspend.S,v 1.7 2016/05/07 19:05:22 guenther Exp $ */
|
/* $OpenBSD: sigsuspend.S,v 1.8 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1991, 1993
|
* Copyright (c) 1991, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -42,7 +42,8 @@ SYSLEAF_HIDDEN(sigsuspend, FRAMESZ)
|
||||||
.set reorder
|
.set reorder
|
||||||
lw a0, 0(a0) # indirect to mask arg
|
lw a0, 0(a0) # indirect to mask arg
|
||||||
li v0, SYS_sigsuspend
|
li v0, SYS_sigsuspend
|
||||||
syscall
|
99: syscall
|
||||||
|
PINSYSCALL(SYS_sigsuspend, 99b)
|
||||||
bne a3, zero, 1f
|
bne a3, zero, 1f
|
||||||
move v0, zero # should not happen
|
move v0, zero # should not happen
|
||||||
RESTORE_GP64
|
RESTORE_GP64
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.27 2023/02/11 06:10:39 guenther Exp $ */
|
/* $OpenBSD: SYS.h,v 1.28 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1994
|
* Copyright (c) 1994
|
||||||
* Andrew Cagney. All rights reserved.
|
* Andrew Cagney. All rights reserved.
|
||||||
|
@ -64,7 +64,8 @@
|
||||||
#define PSEUDO_NOERROR(x,y) SYSENTRY(x) \
|
#define PSEUDO_NOERROR(x,y) SYSENTRY(x) \
|
||||||
RETGUARD_SETUP(x, %r11, %r12); \
|
RETGUARD_SETUP(x, %r11, %r12); \
|
||||||
li %r0, SYS_ ## y ; \
|
li %r0, SYS_ ## y ; \
|
||||||
sc; \
|
97: sc; \
|
||||||
|
PINSYSCALL(SYS_ ## y, 97b); \
|
||||||
RETGUARD_CHECK(x, %r11, %r12); \
|
RETGUARD_CHECK(x, %r11, %r12); \
|
||||||
blr; \
|
blr; \
|
||||||
__END(x)
|
__END(x)
|
||||||
|
@ -72,7 +73,8 @@
|
||||||
#define PSEUDO_HIDDEN(x,y) SYSENTRY_HIDDEN(x) \
|
#define PSEUDO_HIDDEN(x,y) SYSENTRY_HIDDEN(x) \
|
||||||
RETGUARD_SETUP(x, %r11, %r12); \
|
RETGUARD_SETUP(x, %r11, %r12); \
|
||||||
li %r0, SYS_ ## y; \
|
li %r0, SYS_ ## y; \
|
||||||
sc; \
|
97: sc; \
|
||||||
|
PINSYSCALL(SYS_ ## y, 97b); \
|
||||||
cmpwi %r0, 0; \
|
cmpwi %r0, 0; \
|
||||||
beq+ .L_ret; \
|
beq+ .L_ret; \
|
||||||
stw %r0, R2_OFFSET_ERRNO(2); \
|
stw %r0, R2_OFFSET_ERRNO(2); \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: setjmp.S,v 1.14 2022/06/10 01:56:02 guenther Exp $ */
|
/* $OpenBSD: setjmp.S,v 1.15 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn. All rights reserved.
|
* Copyright (c) 1996 Dale Rahn. All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -68,7 +68,9 @@ ENTRY(setjmp)
|
||||||
li 3, 1 /* how = SIG_BLOCK */
|
li 3, 1 /* how = SIG_BLOCK */
|
||||||
li 4, 0 /* oset = empty */
|
li 4, 0 /* oset = empty */
|
||||||
li 0, SYS_sigprocmask
|
li 0, SYS_sigprocmask
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
|
|
||||||
stw 3, JMP_sig(5)
|
stw 3, JMP_sig(5)
|
||||||
mr 3, 5
|
mr 3, 5
|
||||||
ENTRY(_setjmp)
|
ENTRY(_setjmp)
|
||||||
|
@ -125,7 +127,8 @@ ENTRY(longjmp)
|
||||||
li 3, 3 /* how = SIG_SETMASK */
|
li 3, 3 /* how = SIG_SETMASK */
|
||||||
lwz 4, JMP_sig(5) /* oset from the jmpbuf */
|
lwz 4, JMP_sig(5) /* oset from the jmpbuf */
|
||||||
li 0, SYS_sigprocmask
|
li 0, SYS_sigprocmask
|
||||||
sc
|
98: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
mr 3, 5 /* restore jmpbuf and val to r3,r4 */
|
mr 3, 5 /* restore jmpbuf and val to r3,r4 */
|
||||||
mr 4, 6
|
mr 4, 6
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsetjmp.S,v 1.8 2022/06/10 01:56:02 guenther Exp $ */
|
/* $OpenBSD: sigsetjmp.S,v 1.9 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn. All rights reserved.
|
* Copyright (c) 1996 Dale Rahn. All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -63,7 +63,8 @@ ENTRY(sigsetjmp)
|
||||||
li 3, 1 /* how = SIG_BLOCK */
|
li 3, 1 /* how = SIG_BLOCK */
|
||||||
li 4, 0 /* oset = empty */
|
li 4, 0 /* oset = empty */
|
||||||
li 0, SYS_sigprocmask
|
li 0, SYS_sigprocmask
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
stw 3, JMP_sigmask(5)
|
stw 3, JMP_sigmask(5)
|
||||||
1: mflr 6
|
1: mflr 6
|
||||||
bcl 20, 31, 2f
|
bcl 20, 31, 2f
|
||||||
|
@ -122,7 +123,8 @@ ENTRY(siglongjmp)
|
||||||
li 3, 3 /* how = SIG_SETMASK */
|
li 3, 3 /* how = SIG_SETMASK */
|
||||||
lwz 4, JMP_sigmask(5) /* oset from the jmpbuf */
|
lwz 4, JMP_sigmask(5) /* oset from the jmpbuf */
|
||||||
li 0, SYS_sigprocmask
|
li 0, SYS_sigprocmask
|
||||||
sc
|
98: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
|
|
||||||
1: bcl 20, 31, 2f
|
1: bcl 20, 31, 2f
|
||||||
2: mflr 9
|
2: mflr 9
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: brk.S,v 1.18 2022/12/08 01:25:43 guenther Exp $ */
|
/* $OpenBSD: brk.S,v 1.19 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn
|
* Copyright (c) 1996 Dale Rahn
|
||||||
|
@ -60,7 +60,8 @@ ENTRY_NB(brk)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
li 0, SYS_break
|
li 0, SYS_break
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
|
|
||||||
/* check for error */
|
/* check for error */
|
||||||
cmpwi 0, 0
|
cmpwi 0, 0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sbrk.S,v 1.17 2022/12/08 01:25:43 guenther Exp $ */
|
/* $OpenBSD: sbrk.S,v 1.18 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn
|
* Copyright (c) 1996 Dale Rahn
|
||||||
|
@ -57,7 +57,8 @@ ENTRY_NB(sbrk)
|
||||||
mr 7, 3
|
mr 7, 3
|
||||||
|
|
||||||
li 0, SYS_break
|
li 0, SYS_break
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
|
|
||||||
/* check for error */
|
/* check for error */
|
||||||
cmpwi 0, 0
|
cmpwi 0, 0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigpending.S,v 1.8 2020/11/28 19:49:30 gkoehler Exp $ */
|
/* $OpenBSD: sigpending.S,v 1.9 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 Mark Kettenis
|
* Copyright (c) 2012 Mark Kettenis
|
||||||
*
|
*
|
||||||
|
@ -24,7 +24,8 @@ SYSENTRY(sigpending)
|
||||||
RETGUARD_SETUP(sigpending, %r11, %r12)
|
RETGUARD_SETUP(sigpending, %r11, %r12)
|
||||||
mr %r5, %r3
|
mr %r5, %r3
|
||||||
li %r0, SYS_sigpending
|
li %r0, SYS_sigpending
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigpending, 99b)
|
||||||
stw %r3, 0(%r5)
|
stw %r3, 0(%r5)
|
||||||
li %r3, 0
|
li %r3, 0
|
||||||
RETGUARD_CHECK(sigpending, %r11, %r12)
|
RETGUARD_CHECK(sigpending, %r11, %r12)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigprocmask.S,v 1.14 2020/11/28 19:49:30 gkoehler Exp $ */
|
/* $OpenBSD: sigprocmask.S,v 1.15 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn
|
* Copyright (c) 1996 Dale Rahn
|
||||||
|
@ -46,8 +46,9 @@ SYSENTRY_HIDDEN(sigprocmask)
|
||||||
.L_do_call:
|
.L_do_call:
|
||||||
|
|
||||||
li 0, SYS_sigprocmask
|
li 0, SYS_sigprocmask
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
|
|
||||||
/* didnt work? */
|
/* didnt work? */
|
||||||
cmpwi 0, 0
|
cmpwi 0, 0
|
||||||
beq+ .L_sigprocmask_ok
|
beq+ .L_sigprocmask_ok
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsuspend.S,v 1.7 2020/11/28 19:49:30 gkoehler Exp $ */
|
/* $OpenBSD: sigsuspend.S,v 1.8 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn
|
* Copyright (c) 1996 Dale Rahn
|
||||||
|
@ -35,7 +35,8 @@ SYSENTRY_HIDDEN(sigsuspend)
|
||||||
li %r0, SYS_sigsuspend
|
li %r0, SYS_sigsuspend
|
||||||
|
|
||||||
lwz %r3, 0(%r3) /* load the mask */
|
lwz %r3, 0(%r3) /* load the mask */
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigsuspend, 99b)
|
||||||
|
|
||||||
cmpwi %r0, 0
|
cmpwi %r0, 0
|
||||||
beq+ .L_ret
|
beq+ .L_ret
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: tfork_thread.S,v 1.10 2020/11/28 19:49:30 gkoehler Exp $ */
|
/* $OpenBSD: tfork_thread.S,v 1.11 2023/12/10 16:45:51 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005 Tim Wiess <tim@nop.cx>
|
* Copyright (c) 2005 Tim Wiess <tim@nop.cx>
|
||||||
|
@ -22,7 +22,8 @@ ENTRY(__tfork_thread)
|
||||||
RETGUARD_SETUP(__tfork_thread, %r11, %r12)
|
RETGUARD_SETUP(__tfork_thread, %r11, %r12)
|
||||||
/* call __tfork */
|
/* call __tfork */
|
||||||
li %r0, SYS___tfork
|
li %r0, SYS___tfork
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS___tfork, 99b)
|
||||||
cmpwi %r0, 0
|
cmpwi %r0, 0
|
||||||
bne 1f
|
bne 1f
|
||||||
|
|
||||||
|
@ -38,7 +39,8 @@ ENTRY(__tfork_thread)
|
||||||
|
|
||||||
/* child returned, call __threxit */
|
/* child returned, call __threxit */
|
||||||
li %r0, SYS___threxit
|
li %r0, SYS___threxit
|
||||||
sc
|
98: sc
|
||||||
|
PINSYSCALL(SYS___threxit, 98b)
|
||||||
.long 0 /* illegal */
|
.long 0 /* illegal */
|
||||||
|
|
||||||
1:
|
1:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: DEFS.h,v 1.1 2020/06/25 01:59:27 drahn Exp $ */
|
/* $OpenBSD: DEFS.h,v 1.2 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -67,3 +67,9 @@
|
||||||
#else
|
#else
|
||||||
#define END_BUILTIN(x) END_STRONG(x)
|
#define END_BUILTIN(x) END_STRONG(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits; \
|
||||||
|
.long label; \
|
||||||
|
.long sysno; \
|
||||||
|
.popsection;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.5 2022/12/07 23:25:59 guenther Exp $ */
|
/* $OpenBSD: SYS.h,v 1.6 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1994
|
* Copyright (c) 1994
|
||||||
* Andrew Cagney. All rights reserved.
|
* Andrew Cagney. All rights reserved.
|
||||||
|
@ -69,7 +69,8 @@
|
||||||
ENTRY(_thread_sys_ ## x) \
|
ENTRY(_thread_sys_ ## x) \
|
||||||
RETGUARD_SETUP(_thread_sys_ ## x, %r11); \
|
RETGUARD_SETUP(_thread_sys_ ## x, %r11); \
|
||||||
li %r0, SYS_ ## y ; \
|
li %r0, SYS_ ## y ; \
|
||||||
sc ; \
|
97: sc ; \
|
||||||
|
PINSYSCALL(SYS_ ## y, 97b); \
|
||||||
RETGUARD_CHECK(_thread_sys_ ## x, %r11); \
|
RETGUARD_CHECK(_thread_sys_ ## x, %r11); \
|
||||||
blr; \
|
blr; \
|
||||||
__END(_thread_sys_,x)
|
__END(_thread_sys_,x)
|
||||||
|
@ -77,7 +78,8 @@
|
||||||
#define PSEUDO_HIDDEN(x,y) ENTRY(_thread_sys_ ## x) \
|
#define PSEUDO_HIDDEN(x,y) ENTRY(_thread_sys_ ## x) \
|
||||||
RETGUARD_SETUP(_thread_sys_ ## x, %r11); \
|
RETGUARD_SETUP(_thread_sys_ ## x, %r11); \
|
||||||
li %r0, SYS_ ## y ; \
|
li %r0, SYS_ ## y ; \
|
||||||
sc ; \
|
97: sc ; \
|
||||||
|
PINSYSCALL(SYS_ ## y, 97b); \
|
||||||
cmpwi %r0, 0 ; \
|
cmpwi %r0, 0 ; \
|
||||||
beq .L_ret ; \
|
beq .L_ret ; \
|
||||||
stw %r0, R13_OFFSET_ERRNO(%r13); \
|
stw %r0, R13_OFFSET_ERRNO(%r13); \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: setjmp.S,v 1.4 2020/10/18 17:51:39 mortimer Exp $ */
|
/* $OpenBSD: setjmp.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2020 Dale Rahn. All rights reserved.
|
* Copyright (c) 2020 Dale Rahn. All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -70,7 +70,8 @@ ENTRY(setjmp)
|
||||||
li %r3, 1 /* how = SIG_BLOCK */
|
li %r3, 1 /* how = SIG_BLOCK */
|
||||||
li %r4, 0 /* oset = empty */
|
li %r4, 0 /* oset = empty */
|
||||||
li %r0, SYS_sigprocmask
|
li %r0, SYS_sigprocmask
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
std %r3, JMP_sig(%r5)
|
std %r3, JMP_sig(%r5)
|
||||||
b 1f
|
b 1f
|
||||||
nop
|
nop
|
||||||
|
@ -130,7 +131,8 @@ ENTRY(longjmp)
|
||||||
li %r3, 3 /* how = SIG_SETMASK */
|
li %r3, 3 /* how = SIG_SETMASK */
|
||||||
ld %r4, JMP_sig(%r5) /* oset from the jmpbuf */
|
ld %r4, JMP_sig(%r5) /* oset from the jmpbuf */
|
||||||
li %r0, SYS_sigprocmask
|
li %r0, SYS_sigprocmask
|
||||||
sc
|
98: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
nop
|
nop
|
||||||
b 1f
|
b 1f
|
||||||
nop
|
nop
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsetjmp.S,v 1.3 2020/10/19 23:24:17 mortimer Exp $ */
|
/* $OpenBSD: sigsetjmp.S,v 1.4 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2020 Dale Rahn. All rights reserved.
|
* Copyright (c) 2020 Dale Rahn. All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -67,7 +67,8 @@ ENTRY(sigsetjmp)
|
||||||
li %r3, 1 /* how = SIG_BLOCK */
|
li %r3, 1 /* how = SIG_BLOCK */
|
||||||
li %r4, 0 /* oset = empty */
|
li %r4, 0 /* oset = empty */
|
||||||
li %r0, SYS_sigprocmask
|
li %r0, SYS_sigprocmask
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
nop
|
nop
|
||||||
std %r3, JMP_sigmask(5)
|
std %r3, JMP_sigmask(5)
|
||||||
1:
|
1:
|
||||||
|
@ -126,7 +127,8 @@ ENTRY(siglongjmp)
|
||||||
li %r3, 3 /* how = SIG_SETMASK */
|
li %r3, 3 /* how = SIG_SETMASK */
|
||||||
ld %r4, JMP_sigmask(%r5) /* oset from the jmpbuf */
|
ld %r4, JMP_sigmask(%r5) /* oset from the jmpbuf */
|
||||||
li %r0, SYS_sigprocmask
|
li %r0, SYS_sigprocmask
|
||||||
sc
|
98: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
1:
|
1:
|
||||||
addis %r9, %r2, __jmpxor@toc@ha
|
addis %r9, %r2, __jmpxor@toc@ha
|
||||||
addi %r9, %r9, __jmpxor@toc@l
|
addi %r9, %r9, __jmpxor@toc@l
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: brk.S,v 1.5 2022/12/07 23:25:59 guenther Exp $ */
|
/* $OpenBSD: brk.S,v 1.6 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn
|
* Copyright (c) 1996 Dale Rahn
|
||||||
|
@ -50,7 +50,8 @@ SYSENTRY(brk)
|
||||||
addi %r6, %r6, __curbrk@toc@l /* # %r6 = &__curbrk */
|
addi %r6, %r6, __curbrk@toc@l /* # %r6 = &__curbrk */
|
||||||
|
|
||||||
li %r0, SYS_break
|
li %r0, SYS_break
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
|
|
||||||
/* check for error */
|
/* check for error */
|
||||||
cmpwi %r0, 0
|
cmpwi %r0, 0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sbrk.S,v 1.4 2020/10/16 23:42:16 deraadt Exp $ */
|
/* $OpenBSD: sbrk.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn
|
* Copyright (c) 1996 Dale Rahn
|
||||||
|
@ -51,7 +51,8 @@ SYSENTRY(sbrk)
|
||||||
mr %r7, %r3
|
mr %r7, %r3
|
||||||
|
|
||||||
li %r0, SYS_break
|
li %r0, SYS_break
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
|
|
||||||
/* check for error */
|
/* check for error */
|
||||||
cmpwi %r0, 0
|
cmpwi %r0, 0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigpending.S,v 1.2 2020/10/16 23:42:16 deraadt Exp $ */
|
/* $OpenBSD: sigpending.S,v 1.3 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 Mark Kettenis
|
* Copyright (c) 2012 Mark Kettenis
|
||||||
*
|
*
|
||||||
|
@ -25,7 +25,8 @@ SYSENTRY(sigpending)
|
||||||
li %r0, SYS_sigpending
|
li %r0, SYS_sigpending
|
||||||
|
|
||||||
mr %r5, %r3
|
mr %r5, %r3
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigpending, 99b)
|
||||||
stw %r3, 0(%r5)
|
stw %r3, 0(%r5)
|
||||||
li %r3, 0
|
li %r3, 0
|
||||||
RETGUARD_CHECK(sigpending, %r11)
|
RETGUARD_CHECK(sigpending, %r11)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigprocmask.S,v 1.4 2020/10/16 23:42:16 deraadt Exp $ */
|
/* $OpenBSD: sigprocmask.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn
|
* Copyright (c) 1996 Dale Rahn
|
||||||
|
@ -47,7 +47,8 @@ SYSENTRY_HIDDEN(sigprocmask)
|
||||||
lwz %r4, 0(%r4) /* get new mask */
|
lwz %r4, 0(%r4) /* get new mask */
|
||||||
.L_do_call:
|
.L_do_call:
|
||||||
|
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
|
|
||||||
/* didnt work? */
|
/* didnt work? */
|
||||||
cmpwi %r0, 0
|
cmpwi %r0, 0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsuspend.S,v 1.3 2020/10/16 23:42:16 deraadt Exp $ */
|
/* $OpenBSD: sigsuspend.S,v 1.4 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Dale Rahn <drahn@openbsd.org>
|
* Copyright (c) 1996 Dale Rahn <drahn@openbsd.org>
|
||||||
|
@ -35,7 +35,8 @@ SYSENTRY(sigsuspend)
|
||||||
li %r0, SYS_sigsuspend
|
li %r0, SYS_sigsuspend
|
||||||
|
|
||||||
lwz %r3, 0(%r3) /* load the mask */
|
lwz %r3, 0(%r3) /* load the mask */
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS_sigsuspend, 99b)
|
||||||
|
|
||||||
cmpwi %r0, 0
|
cmpwi %r0, 0
|
||||||
beq .L_ret
|
beq .L_ret
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: tfork_thread.S,v 1.4 2020/10/19 14:15:29 deraadt Exp $ */
|
/* $OpenBSD: tfork_thread.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005 Tim Wiess <tim@nop.cx>
|
* Copyright (c) 2005 Tim Wiess <tim@nop.cx>
|
||||||
|
@ -22,7 +22,8 @@ ENTRY(__tfork_thread)
|
||||||
RETGUARD_SETUP(__tfork_thread, %r11)
|
RETGUARD_SETUP(__tfork_thread, %r11)
|
||||||
|
|
||||||
li %r0, SYS___tfork
|
li %r0, SYS___tfork
|
||||||
sc
|
99: sc
|
||||||
|
PINSYSCALL(SYS___tfork, 99b)
|
||||||
cmpwi %r0, 0
|
cmpwi %r0, 0
|
||||||
bne 1f
|
bne 1f
|
||||||
|
|
||||||
|
@ -39,7 +40,8 @@ ENTRY(__tfork_thread)
|
||||||
|
|
||||||
/* child returned, call __threxit */
|
/* child returned, call __threxit */
|
||||||
li %r0, SYS___threxit
|
li %r0, SYS___threxit
|
||||||
sc
|
98: sc
|
||||||
|
PINSYSCALL(SYS___threxit, 98b)
|
||||||
.long 0 /* illegal */
|
.long 0 /* illegal */
|
||||||
1:
|
1:
|
||||||
stw %r0, R13_OFFSET_ERRNO(%r13)
|
stw %r0, R13_OFFSET_ERRNO(%r13)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: DEFS.h,v 1.1 2021/04/29 18:39:53 drahn Exp $ */
|
/* $OpenBSD: DEFS.h,v 1.2 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -58,3 +58,8 @@
|
||||||
#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
|
#define END_STRONG(x) END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
|
||||||
#define END_WEAK(x) END_STRONG(x); .weak x
|
#define END_WEAK(x) END_STRONG(x); .weak x
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits; \
|
||||||
|
.long label; \
|
||||||
|
.long sysno; \
|
||||||
|
.popsection;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.4 2022/12/02 12:27:08 jca Exp $ */
|
/* $OpenBSD: SYS.h,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2020 Brian Bamsch <bbamsch@google.com>
|
* Copyright (c) 2020 Brian Bamsch <bbamsch@google.com>
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -56,9 +56,10 @@
|
||||||
#define __END(x) \
|
#define __END(x) \
|
||||||
__END_HIDDEN(x); END(x)
|
__END_HIDDEN(x); END(x)
|
||||||
|
|
||||||
#define SYSTRAP(x) \
|
#define SYSTRAP(x) \
|
||||||
li t0, SYS_ ## x; \
|
li t0, SYS_ ## x; \
|
||||||
ecall
|
97: ecall; \
|
||||||
|
PINSYSCALL(SYS_ ## x, 97b)
|
||||||
|
|
||||||
#define HANDLE_ERROR() \
|
#define HANDLE_ERROR() \
|
||||||
beqz t0, 200f; \
|
beqz t0, 200f; \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: brk.S,v 1.4 2022/12/03 15:02:30 jca Exp $ */
|
/* $OpenBSD: brk.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021 Dale Rahn <drahn@openbsd.org>
|
* Copyright (c) 2021 Dale Rahn <drahn@openbsd.org>
|
||||||
*
|
*
|
||||||
|
@ -38,7 +38,8 @@ ENTRY_NB(brk)
|
||||||
lla t1, __curbrk
|
lla t1, __curbrk
|
||||||
|
|
||||||
li t0, SYS_break
|
li t0, SYS_break
|
||||||
ecall
|
99: ecall
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
|
|
||||||
/* check for error */
|
/* check for error */
|
||||||
beqz t0, .L_brk_ok
|
beqz t0, .L_brk_ok
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.13 2023/02/11 06:10:39 guenther Exp $ */
|
/* $OpenBSD: SYS.h,v 1.14 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -85,6 +85,12 @@
|
||||||
#define __END(x) \
|
#define __END(x) \
|
||||||
__END_HIDDEN(x); SET_ENTRY_SIZE(x)
|
__END_HIDDEN(x); SET_ENTRY_SIZE(x)
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits; \
|
||||||
|
.long label; \
|
||||||
|
.long sysno; \
|
||||||
|
.popsection;
|
||||||
|
|
||||||
#ifdef __ASSEMBLER__
|
#ifdef __ASSEMBLER__
|
||||||
/*
|
/*
|
||||||
* If the system call number fits in a 8-bit signed value (i.e. fits in 7 bits),
|
* If the system call number fits in a 8-bit signed value (i.e. fits in 7 bits),
|
||||||
|
@ -94,10 +100,12 @@
|
||||||
.macro systrap num
|
.macro systrap num
|
||||||
.iflt \num - 128
|
.iflt \num - 128
|
||||||
mov # \num, r0
|
mov # \num, r0
|
||||||
trapa #0x80
|
97: trapa #0x80
|
||||||
|
PINSYSCALL(\num, 97b)
|
||||||
.else
|
.else
|
||||||
mov.l 903f, r0
|
mov.l 903f, r0
|
||||||
trapa #0x80
|
97: trapa #0x80
|
||||||
|
PINSYSCALL(\num, 97b)
|
||||||
bra 904f
|
bra 904f
|
||||||
nop
|
nop
|
||||||
.align 2
|
.align 2
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: brk.S,v 1.8 2022/12/08 02:11:27 guenther Exp $ */
|
/* $OpenBSD: brk.S,v 1.9 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/* $NetBSD: brk.S,v 1.10 2006/01/06 03:58:31 uwe Exp $ */
|
/* $NetBSD: brk.S,v 1.10 2006/01/06 03:58:31 uwe Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -69,7 +69,8 @@ ENTRY(brk)
|
||||||
#else
|
#else
|
||||||
mov #SYS_break, r0
|
mov #SYS_break, r0
|
||||||
#endif
|
#endif
|
||||||
trapa #0x80
|
99: trapa #0x80
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
bf 2f
|
bf 2f
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
mov.l Lcurbrk, r0
|
mov.l Lcurbrk, r0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sbrk.S,v 1.8 2022/12/08 02:11:27 guenther Exp $ */
|
/* $OpenBSD: sbrk.S,v 1.9 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/* $NetBSD: sbrk.S,v 1.9 2006/01/06 03:58:31 uwe Exp $ */
|
/* $NetBSD: sbrk.S,v 1.9 2006/01/06 03:58:31 uwe Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -69,7 +69,8 @@ ENTRY(sbrk)
|
||||||
#else
|
#else
|
||||||
mov #SYS_break, r0
|
mov #SYS_break, r0
|
||||||
#endif
|
#endif
|
||||||
trapa #0x80
|
99: trapa #0x80
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
bf 1f
|
bf 1f
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
mov.l Lcurbrk, r0
|
mov.l Lcurbrk, r0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigprocmask.S,v 1.6 2022/09/02 06:19:04 miod Exp $ */
|
/* $OpenBSD: sigprocmask.S,v 1.7 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/* $NetBSD: sigprocmask.S,v 1.6 2003/08/07 16:42:21 agc Exp $ */
|
/* $NetBSD: sigprocmask.S,v 1.6 2003/08/07 16:42:21 agc Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -52,7 +52,8 @@ SYSENTRY_HIDDEN(sigprocmask)
|
||||||
#else
|
#else
|
||||||
mov #SYS_sigprocmask, r0
|
mov #SYS_sigprocmask, r0
|
||||||
#endif
|
#endif
|
||||||
trapa #0x80
|
99: trapa #0x80
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
bf 4f
|
bf 4f
|
||||||
mov r6, r2 /* fetch old mask requested */
|
mov r6, r2 /* fetch old mask requested */
|
||||||
tst r2, r2 /* test if old mask requested */
|
tst r2, r2 /* test if old mask requested */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsuspend.S,v 1.5 2022/09/02 06:19:04 miod Exp $ */
|
/* $OpenBSD: sigsuspend.S,v 1.6 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/* $NetBSD: sigsuspend.S,v 1.5 2003/08/07 16:42:21 agc Exp $ */
|
/* $NetBSD: sigsuspend.S,v 1.5 2003/08/07 16:42:21 agc Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -46,7 +46,8 @@ SYSENTRY_HIDDEN(sigsuspend)
|
||||||
#else
|
#else
|
||||||
mov #SYS_sigsuspend, r0
|
mov #SYS_sigsuspend, r0
|
||||||
#endif
|
#endif
|
||||||
trapa #0x80
|
99: trapa #0x80
|
||||||
|
PINSYSCALL(SYS_sigsuspend, 99b)
|
||||||
SET_ERRNO_AND_RETURN
|
SET_ERRNO_AND_RETURN
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: tfork_thread.S,v 1.4 2022/09/02 06:19:04 miod Exp $ */
|
/* $OpenBSD: tfork_thread.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Miodrag Vallat.
|
* Copyright (c) 2007 Miodrag Vallat.
|
||||||
|
@ -29,7 +29,8 @@ ENTRY(__tfork_thread)
|
||||||
#else
|
#else
|
||||||
mov #SYS___tfork, r0
|
mov #SYS___tfork, r0
|
||||||
#endif
|
#endif
|
||||||
trapa #0x80
|
99: trapa #0x80
|
||||||
|
PINSYSCALL(SYS___tfork, 99b)
|
||||||
bf 9f
|
bf 9f
|
||||||
|
|
||||||
tst r0, r0
|
tst r0, r0
|
||||||
|
@ -53,7 +54,8 @@ ENTRY(__tfork_thread)
|
||||||
#else
|
#else
|
||||||
mov #SYS___threxit, r0
|
mov #SYS___threxit, r0
|
||||||
#endif
|
#endif
|
||||||
trapa #0x80
|
98: trapa #0x80
|
||||||
|
PINSYSCALL(SYS___threxit, 98b)
|
||||||
|
|
||||||
9:
|
9:
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.17 2022/01/01 23:47:14 guenther Exp $ */
|
/* $OpenBSD: SYS.h,v 1.18 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1992, 1993
|
* Copyright (c) 1992, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -49,8 +49,8 @@
|
||||||
#define __ENTRY(p,x) ENTRY(_CAT(p,x)) ; .weak x; x = _CAT(p,x)
|
#define __ENTRY(p,x) ENTRY(_CAT(p,x)) ; .weak x; x = _CAT(p,x)
|
||||||
#define __ENTRY_HIDDEN(p,x) ENTRY(_CAT(p,x))
|
#define __ENTRY_HIDDEN(p,x) ENTRY(_CAT(p,x))
|
||||||
|
|
||||||
#define __END_HIDDEN(p,x) END(_CAT(p,x)); \
|
#define __END_HIDDEN(p,x) END(_CAT(p,x)); \
|
||||||
_HIDDEN_FALIAS(x, _CAT(p,x)); \
|
_HIDDEN_FALIAS(x, _CAT(p,x)); \
|
||||||
END(_HIDDEN(x))
|
END(_HIDDEN(x))
|
||||||
#define __END(p,x) __END_HIDDEN(p,x); END(x)
|
#define __END(p,x) __END_HIDDEN(p,x); END(x)
|
||||||
|
|
||||||
|
@ -67,15 +67,30 @@
|
||||||
* Note that it adds a `nop' over what we could do, if we only knew what
|
* Note that it adds a `nop' over what we could do, if we only knew what
|
||||||
* came at label 1....
|
* came at label 1....
|
||||||
*/
|
*/
|
||||||
#define _SYSCALL(p,x,y) \
|
#define _SYSCALL(p,x,y) \
|
||||||
__ENTRY(p,x); mov _CAT(SYS_,y),%g1; t ST_SYSCALL; bcc 1f; nop; ERROR(); 1:
|
__ENTRY(p,x); \
|
||||||
#define _SYSCALL_HIDDEN(p,x,y) \
|
mov _CAT(SYS_,y),%g1; \
|
||||||
__ENTRY_HIDDEN(p,x); mov _CAT(SYS_,y),%g1; t ST_SYSCALL; bcc 1f; nop; ERROR(); 1:
|
97: t ST_SYSCALL; \
|
||||||
|
PINSYSCALL(_CAT(SYS_,y), 97b); \
|
||||||
|
bcc 1f; \
|
||||||
|
nop; \
|
||||||
|
ERROR(); \
|
||||||
|
1:
|
||||||
|
|
||||||
#define __SYSCALL(p,x) \
|
#define _SYSCALL_HIDDEN(p,x,y) \
|
||||||
|
__ENTRY_HIDDEN(p,x); \
|
||||||
|
mov _CAT(SYS_,y),%g1; \
|
||||||
|
97: t ST_SYSCALL; \
|
||||||
|
PINSYSCALL(_CAT(SYS_,y), 97b); \
|
||||||
|
bcc 1f; \
|
||||||
|
nop; \
|
||||||
|
ERROR(); \
|
||||||
|
1:
|
||||||
|
|
||||||
|
#define __SYSCALL(p,x) \
|
||||||
_SYSCALL(p,x,x)
|
_SYSCALL(p,x,x)
|
||||||
|
|
||||||
#define __SYSCALL_HIDDEN(p,x) \
|
#define __SYSCALL_HIDDEN(p,x) \
|
||||||
_SYSCALL_HIDDEN(p,x,x)
|
_SYSCALL_HIDDEN(p,x,x)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -83,19 +98,34 @@
|
||||||
* we use the SYSCALL_G2RFLAG to put the `success' return address in %g2
|
* we use the SYSCALL_G2RFLAG to put the `success' return address in %g2
|
||||||
* and avoid a branch.
|
* and avoid a branch.
|
||||||
*/
|
*/
|
||||||
#define __RSYSCALL(p,x) \
|
#define __RSYSCALL(p,x) \
|
||||||
__ENTRY(p,x); mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
__ENTRY(p,x); \
|
||||||
add %o7,8,%g2; t ST_SYSCALL; ERROR(); __END(p,x)
|
mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
||||||
#define __RSYSCALL_HIDDEN(p,x) \
|
add %o7,8,%g2; \
|
||||||
__ENTRY_HIDDEN(p,x); mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
97: t ST_SYSCALL; \
|
||||||
add %o7,8,%g2; t ST_SYSCALL; ERROR(); __END_HIDDEN(p,x)
|
PINSYSCALL(_CAT(SYS_,x), 97b); \
|
||||||
|
ERROR(); \
|
||||||
|
__END(p,x)
|
||||||
|
#define __RSYSCALL_HIDDEN(p,x) \
|
||||||
|
__ENTRY_HIDDEN(p,x); \
|
||||||
|
mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
||||||
|
add %o7,8,%g2; \
|
||||||
|
97: t ST_SYSCALL; \
|
||||||
|
PINSYSCALL(_CAT(SYS_,x), 97b); \
|
||||||
|
ERROR(); \
|
||||||
|
__END_HIDDEN(p,x)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PSEUDO(x,y) is like RSYSCALL(y) except that the name is x.
|
* PSEUDO(x,y) is like RSYSCALL(y) except that the name is x.
|
||||||
*/
|
*/
|
||||||
#define __PSEUDO(p,x,y) \
|
#define __PSEUDO(p,x,y) \
|
||||||
__ENTRY(p,x); mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; add %o7,8,%g2; \
|
__ENTRY(p,x); \
|
||||||
t ST_SYSCALL; ERROR(); __END(p,x)
|
mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; \
|
||||||
|
add %o7,8,%g2; \
|
||||||
|
97: t ST_SYSCALL; \
|
||||||
|
PINSYSCALL(_CAT(SYS_,y), 97b); \
|
||||||
|
ERROR(); \
|
||||||
|
__END(p,x)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SYSCALL_NOERROR is like SYSCALL, except it's used for syscalls
|
* SYSCALL_NOERROR is like SYSCALL, except it's used for syscalls
|
||||||
|
@ -103,8 +133,11 @@
|
||||||
*
|
*
|
||||||
* XXX - This should be optimized.
|
* XXX - This should be optimized.
|
||||||
*/
|
*/
|
||||||
#define __SYSCALL_NOERROR(p,x) \
|
#define __SYSCALL_NOERROR(p,x) \
|
||||||
__ENTRY(p,x); mov _CAT(SYS_,x),%g1; t ST_SYSCALL
|
__ENTRY(p,x); \
|
||||||
|
mov _CAT(SYS_,x),%g1; \
|
||||||
|
97: t ST_SYSCALL; \
|
||||||
|
PINSYSCALL(_CAT(SYS_,x), 97b)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RSYSCALL_NOERROR is like RSYSCALL, except it's used for syscalls
|
* RSYSCALL_NOERROR is like RSYSCALL, except it's used for syscalls
|
||||||
|
@ -112,16 +145,24 @@
|
||||||
*
|
*
|
||||||
* XXX - This should be optimized.
|
* XXX - This should be optimized.
|
||||||
*/
|
*/
|
||||||
#define __RSYSCALL_NOERROR(p,x) \
|
#define __RSYSCALL_NOERROR(p,x) \
|
||||||
__ENTRY(p,x); mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; add %o7,8,%g2; \
|
__ENTRY(p,x); \
|
||||||
t ST_SYSCALL; __END(p,x)
|
mov (_CAT(SYS_,x))|SYSCALL_G2RFLAG,%g1; \
|
||||||
|
add %o7,8,%g2; \
|
||||||
|
97: t ST_SYSCALL; \
|
||||||
|
PINSYSCALL(_CAT(SYS_,x), 97b); \
|
||||||
|
__END(p,x)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PSEUDO_NOERROR(x,y) is like RSYSCALL_NOERROR(y) except that the name is x.
|
* PSEUDO_NOERROR(x,y) is like RSYSCALL_NOERROR(y) except that the name is x.
|
||||||
*/
|
*/
|
||||||
#define __PSEUDO_NOERROR(p,x,y) \
|
#define __PSEUDO_NOERROR(p,x,y) \
|
||||||
__ENTRY(p,x); mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; add %o7,8,%g2; \
|
__ENTRY(p,x); \
|
||||||
t ST_SYSCALL; __END(p,x)
|
mov (_CAT(SYS_,y))|SYSCALL_G2RFLAG,%g1; \
|
||||||
|
add %o7,8,%g2; \
|
||||||
|
97: t ST_SYSCALL; \
|
||||||
|
PINSYSCALL(_CAT(SYS_,y), 97b); \
|
||||||
|
__END(p,x)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SYSENTRY is for functions that pretend to be syscalls.
|
* SYSENTRY is for functions that pretend to be syscalls.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: setjmp.S,v 1.6 2016/04/28 12:53:47 kettenis Exp $ */
|
/* $OpenBSD: setjmp.S,v 1.7 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/* $NetBSD: setjmp.S,v 1.4 2000/08/28 00:45:59 eeh Exp $ */
|
/* $NetBSD: setjmp.S,v 1.4 2000/08/28 00:45:59 eeh Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -53,7 +53,8 @@ ENTRY(setjmp)
|
||||||
mov 1, %o0 /* SIG_BLOCK */
|
mov 1, %o0 /* SIG_BLOCK */
|
||||||
mov SYS_sigprocmask, %g1
|
mov SYS_sigprocmask, %g1
|
||||||
clr %o1 /* sigprocmask(SIG_BLOCK, 0) */
|
clr %o1 /* sigprocmask(SIG_BLOCK, 0) */
|
||||||
t ST_SYSCALL
|
99: t ST_SYSCALL
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
stx %o0, [%o3 + 0x10]
|
stx %o0, [%o3 + 0x10]
|
||||||
|
|
||||||
stx %sp, [%o3 + 0x00] /* store caller's stack pointer */
|
stx %sp, [%o3 + 0x00] /* store caller's stack pointer */
|
||||||
|
@ -68,7 +69,8 @@ ENTRY(longjmp)
|
||||||
mov 3, %o0 /* SIG_SETMASK */
|
mov 3, %o0 /* SIG_SETMASK */
|
||||||
ldx [%i0 + 0x10], %o1
|
ldx [%i0 + 0x10], %o1
|
||||||
mov SYS_sigprocmask, %g1
|
mov SYS_sigprocmask, %g1
|
||||||
t ST_SYSCALL
|
98: t ST_SYSCALL
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
|
|
||||||
ldx [%i0 + 0x00], %fp
|
ldx [%i0 + 0x00], %fp
|
||||||
ldx [%i0 + 0x08], %i7
|
ldx [%i0 + 0x08], %i7
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsetjmp.S,v 1.4 2016/05/08 18:29:34 guenther Exp $ */
|
/* $OpenBSD: sigsetjmp.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/* $NetBSD: sigsetjmp.S,v 1.5 2000/08/28 00:45:59 eeh Exp $ */
|
/* $NetBSD: sigsetjmp.S,v 1.5 2000/08/28 00:45:59 eeh Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1992, 1993
|
* Copyright (c) 1992, 1993
|
||||||
|
@ -43,7 +43,8 @@ ENTRY(sigsetjmp)
|
||||||
mov 1, %o0 /* SIG_BLOCK */
|
mov 1, %o0 /* SIG_BLOCK */
|
||||||
mov SYS_sigprocmask, %g1
|
mov SYS_sigprocmask, %g1
|
||||||
clr %o1 /* sigprocmask(SIG_BLOCK, 0) */
|
clr %o1 /* sigprocmask(SIG_BLOCK, 0) */
|
||||||
t ST_SYSCALL
|
99: t ST_SYSCALL
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
stx %o0, [%o3 + 0x10]
|
stx %o0, [%o3 + 0x10]
|
||||||
|
|
||||||
1: stx %sp, [%o3 + 0x00] /* store caller's stack pointer */
|
1: stx %sp, [%o3 + 0x00] /* store caller's stack pointer */
|
||||||
|
@ -62,7 +63,8 @@ ENTRY(siglongjmp)
|
||||||
mov 3, %o0 /* SIG_SETMASK */
|
mov 3, %o0 /* SIG_SETMASK */
|
||||||
ldx [%i0 + 0x10], %o1
|
ldx [%i0 + 0x10], %o1
|
||||||
mov SYS_sigprocmask, %g1
|
mov SYS_sigprocmask, %g1
|
||||||
t ST_SYSCALL
|
98: t ST_SYSCALL
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 98b)
|
||||||
|
|
||||||
1: ldx [%i0 + 0x00], %fp
|
1: ldx [%i0 + 0x00], %fp
|
||||||
ldx [%i0 + 0x08], %i7
|
ldx [%i0 + 0x08], %i7
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: brk.S,v 1.11 2023/01/13 17:52:08 miod Exp $ */
|
/* $OpenBSD: brk.S,v 1.12 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/* $NetBSD: brk.S,v 1.9 2000/07/25 20:15:40 mycroft Exp $ */
|
/* $NetBSD: brk.S,v 1.9 2000/07/25 20:15:40 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -59,7 +59,8 @@ ENTRY_NB(brk)
|
||||||
movgu %xcc, %o1, %o0 /* %o0 = minbrk */
|
movgu %xcc, %o1, %o0 /* %o0 = minbrk */
|
||||||
mov %o0, %o2 /* save argument to syscall */
|
mov %o0, %o2 /* save argument to syscall */
|
||||||
mov SYS_break, %g1
|
mov SYS_break, %g1
|
||||||
t ST_SYSCALL
|
99: t ST_SYSCALL
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
set __curbrk, %o3
|
set __curbrk, %o3
|
||||||
bcc,a,pt %icc, 1f
|
bcc,a,pt %icc, 1f
|
||||||
ldx [%o5 + %o3], %o4
|
ldx [%o5 + %o3], %o4
|
||||||
|
@ -74,7 +75,8 @@ ENTRY_NB(brk)
|
||||||
movgu %xcc, %o1, %o0 /* %o0 = minbrk */
|
movgu %xcc, %o1, %o0 /* %o0 = minbrk */
|
||||||
mov %o0, %o2 /* save argument to syscall */
|
mov %o0, %o2 /* save argument to syscall */
|
||||||
mov SYS_break, %g1
|
mov SYS_break, %g1
|
||||||
t ST_SYSCALL
|
98: t ST_SYSCALL
|
||||||
|
PINSYSCALL(SYS_break, 98b)
|
||||||
bcc,a,pt %icc,1f
|
bcc,a,pt %icc,1f
|
||||||
sethi %hi(__curbrk), %g1
|
sethi %hi(__curbrk), %g1
|
||||||
ERROR()
|
ERROR()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sbrk.S,v 1.9 2023/01/13 17:52:08 miod Exp $ */
|
/* $OpenBSD: sbrk.S,v 1.10 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/* $NetBSD: sbrk.S,v 1.7 2000/07/25 15:14:46 mycroft Exp $ */
|
/* $NetBSD: sbrk.S,v 1.7 2000/07/25 15:14:46 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -59,7 +59,8 @@ ENTRY_NB(sbrk)
|
||||||
add %o3, %o0, %o4 /* %o4 = new break */
|
add %o3, %o0, %o4 /* %o4 = new break */
|
||||||
mov %o4, %o0 /* copy for syscall */
|
mov %o4, %o0 /* copy for syscall */
|
||||||
mov SYS_break, %g1
|
mov SYS_break, %g1
|
||||||
t ST_SYSCALL /* break(new_break) */
|
99: t ST_SYSCALL /* break(new_break) */
|
||||||
|
PINSYSCALL(SYS_break, 99b)
|
||||||
bcc,a 1f /* if success, */
|
bcc,a 1f /* if success, */
|
||||||
mov %o3, %o0 /* set return value */
|
mov %o3, %o0 /* set return value */
|
||||||
ERROR()
|
ERROR()
|
||||||
|
@ -72,7 +73,8 @@ ENTRY_NB(sbrk)
|
||||||
add %o3, %o0, %o4 /* %o4 = new break */
|
add %o3, %o0, %o4 /* %o4 = new break */
|
||||||
mov %o4, %o0 /* copy for syscall */
|
mov %o4, %o0 /* copy for syscall */
|
||||||
mov SYS_break, %g1
|
mov SYS_break, %g1
|
||||||
t ST_SYSCALL /* break(new_break) */
|
98: t ST_SYSCALL /* break(new_break) */
|
||||||
|
PINSYSCALL(SYS_break, 98b)
|
||||||
bcc,a 1f /* if success, */
|
bcc,a 1f /* if success, */
|
||||||
mov %o3, %o0 /* set return value */
|
mov %o3, %o0 /* set return value */
|
||||||
ERROR()
|
ERROR()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigpending.S,v 1.3 2015/09/05 06:22:47 guenther Exp $ */
|
/* $OpenBSD: sigpending.S,v 1.4 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1992, 1993
|
* Copyright (c) 1992, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -38,7 +38,8 @@
|
||||||
SYSENTRY(sigpending)
|
SYSENTRY(sigpending)
|
||||||
mov %o0, %o2 /* save pointer */
|
mov %o0, %o2 /* save pointer */
|
||||||
mov SYS_sigpending, %g1
|
mov SYS_sigpending, %g1
|
||||||
t ST_SYSCALL /* sigpending() */
|
99: t ST_SYSCALL /* sigpending() */
|
||||||
|
PINSYSCALL(SYS_sigpending, 99b)
|
||||||
bcc,a 1f /* if success, */
|
bcc,a 1f /* if success, */
|
||||||
st %o0, [%o2] /* store return value */
|
st %o0, [%o2] /* store return value */
|
||||||
ERROR()
|
ERROR()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigprocmask.S,v 1.4 2015/10/23 04:39:25 guenther Exp $ */
|
/* $OpenBSD: sigprocmask.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1992, 1993
|
* Copyright (c) 1992, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -46,7 +46,8 @@ SYSENTRY_HIDDEN(sigprocmask)
|
||||||
mov 1, %o0 /* ... using sigprocmask(SIG_BLOCK) */
|
mov 1, %o0 /* ... using sigprocmask(SIG_BLOCK) */
|
||||||
1:
|
1:
|
||||||
mov SYS_sigprocmask, %g1
|
mov SYS_sigprocmask, %g1
|
||||||
t ST_SYSCALL
|
99: t ST_SYSCALL
|
||||||
|
PINSYSCALL(SYS_sigprocmask, 99b)
|
||||||
bcc 2f /* if success, */
|
bcc 2f /* if success, */
|
||||||
tst %o2 /* check to see if oset requested */
|
tst %o2 /* check to see if oset requested */
|
||||||
ERROR()
|
ERROR()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: sigsuspend.S,v 1.4 2016/05/07 19:05:22 guenther Exp $ */
|
/* $OpenBSD: sigsuspend.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1992, 1993
|
* Copyright (c) 1992, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
SYSENTRY_HIDDEN(sigsuspend)
|
SYSENTRY_HIDDEN(sigsuspend)
|
||||||
ld [%o0], %o0 /* indirect to mask argument */
|
ld [%o0], %o0 /* indirect to mask argument */
|
||||||
mov SYS_sigsuspend, %g1
|
mov SYS_sigsuspend, %g1
|
||||||
t ST_SYSCALL
|
99: t ST_SYSCALL
|
||||||
|
PINSYSCALL(SYS_sigsuspend, 99b)
|
||||||
ERROR() /* always terminates with EINTR */
|
ERROR() /* always terminates with EINTR */
|
||||||
SYSCALL_END_HIDDEN(sigsuspend)
|
SYSCALL_END_HIDDEN(sigsuspend)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: tfork_thread.S,v 1.4 2020/10/18 14:28:18 deraadt Exp $ */
|
/* $OpenBSD: tfork_thread.S,v 1.5 2023/12/10 16:45:52 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Miodrag Vallat
|
* Copyright (c) 2005, Miodrag Vallat
|
||||||
|
@ -36,7 +36,8 @@ ENTRY(__tfork_thread)
|
||||||
* different return paths.
|
* different return paths.
|
||||||
*/
|
*/
|
||||||
mov SYS___tfork, %g1
|
mov SYS___tfork, %g1
|
||||||
t ST_SYSCALL
|
99: t ST_SYSCALL
|
||||||
|
PINSYSCALL(SYS___tfork, 99b)
|
||||||
bcs 9f
|
bcs 9f
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
@ -59,7 +60,8 @@ ENTRY(__tfork_thread)
|
||||||
|
|
||||||
mov SYS___threxit, %g1
|
mov SYS___threxit, %g1
|
||||||
clr %o0
|
clr %o0
|
||||||
t ST_SYSCALL /* will not return */
|
98: t ST_SYSCALL /* will not return */
|
||||||
|
PINSYSCALL(SYS___threxit, 98b)
|
||||||
unimp
|
unimp
|
||||||
|
|
||||||
9:
|
9:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.5 2020/02/18 12:19:11 kettenis Exp $ */
|
/* $OpenBSD: SYS.h,v 1.6 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016 Dale Rahn
|
* Copyright (c) 2016 Dale Rahn
|
||||||
|
@ -29,18 +29,25 @@
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
#define SYSTRAP(x) \
|
#define PINSYSCALL(sysno, label) \
|
||||||
ldr x8, =SYS_ ## x ;\
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
svc 0 ;\
|
.long label ;\
|
||||||
dsb nsh ;\
|
.long sysno ;\
|
||||||
|
.popsection
|
||||||
|
|
||||||
|
#define SYSTRAP(x) \
|
||||||
|
ldr x8, =SYS_ ## x ;\
|
||||||
|
99: svc 0 ;\
|
||||||
|
PINSYSCALL(SYS_ ## x, 99b) ;\
|
||||||
|
dsb nsh ;\
|
||||||
isb
|
isb
|
||||||
|
|
||||||
#define DL_SYSCALL(n) \
|
#define DL_SYSCALL(n) \
|
||||||
.global __CONCAT(_dl_,n) ;\
|
.global __CONCAT(_dl_,n) ;\
|
||||||
.type __CONCAT(_dl_,n)%function ;\
|
.type __CONCAT(_dl_,n)%function ;\
|
||||||
__CONCAT(_dl_,n): ;\
|
__CONCAT(_dl_,n): ;\
|
||||||
RETGUARD_SETUP(__CONCAT(_dl_,n), x15) ;\
|
RETGUARD_SETUP(__CONCAT(_dl_,n), x15) ;\
|
||||||
SYSTRAP(n) ;\
|
SYSTRAP(n) ;\
|
||||||
cneg x0, x0, cs /* r0 = -errno */ ;\
|
cneg x0, x0, cs /* r0 = -errno */ ;\
|
||||||
RETGUARD_CHECK(__CONCAT(_dl_,n), x15) ;\
|
RETGUARD_CHECK(__CONCAT(_dl_,n), x15) ;\
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
btext PT_LOAD FLAGS (0x08000001);
|
btext PT_LOAD FLAGS (0x08000001);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -39,11 +40,20 @@ SECTIONS
|
||||||
{
|
{
|
||||||
*(.openbsd.randomdata .openbsd.randomdata.*)
|
*(.openbsd.randomdata .openbsd.randomdata.*)
|
||||||
} :data :relro :random
|
} :data :relro :random
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
.got : { *(.got.plt) *(.got) } :data :relro
|
.got : { *(.got.plt) *(.got) } :data :relro
|
||||||
. = DATA_SEGMENT_RELRO_END (0, .);
|
. = DATA_SEGMENT_RELRO_END (0, .);
|
||||||
|
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
|
|
||||||
/* BOOTDATA */
|
/* BOOTDATA */
|
||||||
. = ALIGN(0x1000);
|
. = ALIGN(0x1000);
|
||||||
boot_data_start = .;
|
boot_data_start = .;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.3 2023/12/06 06:15:33 miod Exp $ */
|
/* $OpenBSD: SYS.h,v 1.4 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Niklas Hallqvist
|
* Copyright (c) 2001 Niklas Hallqvist
|
||||||
|
@ -61,10 +61,17 @@
|
||||||
* further register saving.
|
* further register saving.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
|
.long label ;\
|
||||||
|
.long sysno ;\
|
||||||
|
.popsection
|
||||||
|
|
||||||
#define DL_SYSCALL(c) \
|
#define DL_SYSCALL(c) \
|
||||||
LEAF_NOPROFILE(_dl_##c, irrelevant); \
|
LEAF_NOPROFILE(_dl_##c, irrelevant); \
|
||||||
ldiq v0, SYS_##c; \
|
ldiq v0, SYS_##c; \
|
||||||
call_pal PAL_OSF1_callsys; \
|
99: call_pal PAL_OSF1_callsys; \
|
||||||
|
PINSYSCALL(SYS_##c, 99b); \
|
||||||
beq a3, 1f; \
|
beq a3, 1f; \
|
||||||
subq zero, v0, v0; /* return -errno */ \
|
subq zero, v0, v0; /* return -errno */ \
|
||||||
1: \
|
1: \
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
btext PT_LOAD FLAGS (0x08000005);
|
btext PT_LOAD FLAGS (0x08000005);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -39,6 +40,10 @@ SECTIONS
|
||||||
{
|
{
|
||||||
*(.openbsd.randomdata .openbsd.randomdata.*)
|
*(.openbsd.randomdata .openbsd.randomdata.*)
|
||||||
} :data :relro :random
|
} :data :relro :random
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
.got : { *(.got.plt) *(.got) } :data :relro
|
.got : { *(.got.plt) *(.got) } :data :relro
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.3 2023/04/25 04:11:10 deraadt Exp $ */
|
/* $OpenBSD: SYS.h,v 1.4 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2002,2004 Dale Rahn
|
* Copyright (c) 2002,2004 Dale Rahn
|
||||||
|
@ -30,19 +30,26 @@
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
#define DL_SYSCALL(n) \
|
#define PINSYSCALL(sysno, label) \
|
||||||
.global __CONCAT(_dl_,n) ;\
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
.type __CONCAT(_dl_,n), @function ;\
|
.long label ;\
|
||||||
.align 16,0xcc ;\
|
.long sysno ;\
|
||||||
__CONCAT(_dl_,n): ;\
|
.popsection
|
||||||
endbr64 ;\
|
|
||||||
RETGUARD_SETUP(_dl_##n, r11) ;\
|
#define DL_SYSCALL(n) \
|
||||||
RETGUARD_PUSH(r11) ;\
|
.global __CONCAT(_dl_,n) ;\
|
||||||
movl $(__CONCAT(SYS_,n)), %eax ;\
|
.type __CONCAT(_dl_,n), @function ;\
|
||||||
movq %rcx, %r10 ;\
|
.align 16,0xcc ;\
|
||||||
syscall ;\
|
__CONCAT(_dl_,n): ;\
|
||||||
jnc 1f ;\
|
endbr64 ;\
|
||||||
neg %rax ;\
|
RETGUARD_SETUP(_dl_##n, r11) ;\
|
||||||
1: RETGUARD_POP(r11) ;\
|
RETGUARD_PUSH(r11) ;\
|
||||||
RETGUARD_CHECK(_dl_##n, r11) ;\
|
movl $(__CONCAT(SYS_,n)), %eax ;\
|
||||||
|
movq %rcx, %r10 ;\
|
||||||
|
99: syscall ;\
|
||||||
|
PINSYSCALL(__CONCAT(SYS_,n), 99b) ;\
|
||||||
|
jnc 1f ;\
|
||||||
|
neg %rax ;\
|
||||||
|
1: RETGUARD_POP(r11) ;\
|
||||||
|
RETGUARD_CHECK(_dl_##n, r11) ;\
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
btext PT_LOAD FLAGS (0x08000005);
|
btext PT_LOAD FLAGS (0x08000005);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -43,6 +44,11 @@ SECTIONS
|
||||||
.got : { *(.got.plt) *(.got) } :data :relro
|
.got : { *(.got.plt) *(.got) } :data :relro
|
||||||
. = DATA_SEGMENT_RELRO_END (0, .);
|
. = DATA_SEGMENT_RELRO_END (0, .);
|
||||||
|
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
|
|
||||||
/* BOOTDATA */
|
/* BOOTDATA */
|
||||||
. = ALIGN(0x1000);
|
. = ALIGN(0x1000);
|
||||||
boot_data_start = .;
|
boot_data_start = .;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.3 2020/03/13 09:31:26 deraadt Exp $ */
|
/* $OpenBSD: SYS.h,v 1.4 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2004 Dale Rahn
|
* Copyright (c) 2004 Dale Rahn
|
||||||
|
@ -29,18 +29,25 @@
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
|
.long label ;\
|
||||||
|
.long sysno ;\
|
||||||
|
.popsection
|
||||||
|
|
||||||
#define SYSTRAP(x) \
|
#define SYSTRAP(x) \
|
||||||
ldr r12, =SYS_ ## x; \
|
ldr r12, =SYS_ ## x ;\
|
||||||
swi 0; \
|
99: swi 0 ;\
|
||||||
dsb nsh; \
|
PINSYSCALL(SYS_ ## x, 99b) ;\
|
||||||
|
dsb nsh ;\
|
||||||
isb
|
isb
|
||||||
|
|
||||||
#define DL_SYSCALL(n) \
|
#define DL_SYSCALL(n) \
|
||||||
.global __CONCAT(_dl_,n) ;\
|
.global __CONCAT(_dl_,n) ;\
|
||||||
.type __CONCAT(_dl_,n)%function ;\
|
.type __CONCAT(_dl_,n)%function ;\
|
||||||
__CONCAT(_dl_,n): ;\
|
__CONCAT(_dl_,n): ;\
|
||||||
SYSTRAP(n) ;\
|
SYSTRAP(n) ;\
|
||||||
bcs .L_cerr ;\
|
bcs .L_cerr ;\
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
.L_cerr:
|
.L_cerr:
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
btext PT_LOAD FLAGS (0x08000005);
|
btext PT_LOAD FLAGS (0x08000005);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -40,6 +41,11 @@ SECTIONS
|
||||||
{
|
{
|
||||||
*(.openbsd.randomdata .openbsd.randomdata.*)
|
*(.openbsd.randomdata .openbsd.randomdata.*)
|
||||||
} :data :relro :random
|
} :data :relro :random
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
|
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
.got : { *(.got.plt) *(.got) } :data :relro
|
.got : { *(.got.plt) *(.got) } :data :relro
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.1 2017/08/27 21:59:52 deraadt Exp $ */
|
/* $OpenBSD: SYS.h,v 1.2 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2004 Michael Shalayeff
|
* Copyright (c) 2004 Michael Shalayeff
|
||||||
|
@ -33,17 +33,24 @@
|
||||||
#include <machine/vmparam.h>
|
#include <machine/vmparam.h>
|
||||||
#undef _LOCORE
|
#undef _LOCORE
|
||||||
|
|
||||||
#define DL_SYSCALL(x) \
|
#define PINSYSCALL(sysno, label) \
|
||||||
ENTRY(__CONCAT(_dl_,x),0) !\
|
.pushsection .openbsd.syscalls,"",@progbits !\
|
||||||
stw rp, HPPA_FRAME_ERP(sr0,sp) !\
|
.long label !\
|
||||||
ldil L%SYSCALLGATE, r1 !\
|
.long sysno !\
|
||||||
ble 4(sr7, r1) !\
|
.popsection
|
||||||
ldi __CONCAT(SYS_,x), t1 !\
|
|
||||||
comb,<> r0, t1, _dl_sysexit !\
|
#define DL_SYSCALL(x) \
|
||||||
ldw HPPA_FRAME_ERP(sr0,sp), rp !\
|
ENTRY(__CONCAT(_dl_,x),0) !\
|
||||||
bv r0(rp) !\
|
stw rp, HPPA_FRAME_ERP(sr0,sp) !\
|
||||||
nop !\
|
ldil L%SYSCALLGATE, r1 !\
|
||||||
_dl_sysexit !\
|
99: ble 4(sr7, r1) !\
|
||||||
bv r0(rp) !\
|
PINSYSCALL(__CONCAT(SYS_,x), 99b) !\
|
||||||
sub r0, ret0, ret0 !\
|
ldi __CONCAT(SYS_,x), t1 !\
|
||||||
|
comb,<> r0, t1, _dl_sysexit !\
|
||||||
|
ldw HPPA_FRAME_ERP(sr0,sp), rp !\
|
||||||
|
bv r0(rp) !\
|
||||||
|
nop !\
|
||||||
|
_dl_sysexit !\
|
||||||
|
bv r0(rp) !\
|
||||||
|
sub r0, ret0, ret0 !\
|
||||||
EXIT(__CONCAT(_dl_,x))
|
EXIT(__CONCAT(_dl_,x))
|
||||||
|
|
|
@ -6,6 +6,7 @@ PHDRS
|
||||||
pltgot PT_LOAD;
|
pltgot PT_LOAD;
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -45,6 +46,10 @@ SECTIONS
|
||||||
{
|
{
|
||||||
*(.openbsd.randomdata .openbsd.randomdata.*)
|
*(.openbsd.randomdata .openbsd.randomdata.*)
|
||||||
} :data :relro :random
|
} :data :relro :random
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
. = DATA_SEGMENT_RELRO_END (0, .);
|
. = DATA_SEGMENT_RELRO_END (0, .);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.1 2017/08/27 21:59:52 deraadt Exp $ */
|
/* $OpenBSD: SYS.h,v 1.2 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2002 Dale Rahn
|
* Copyright (c) 2002 Dale Rahn
|
||||||
|
@ -30,6 +30,12 @@
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
|
.long label ;\
|
||||||
|
.long sysno ;\
|
||||||
|
.popsection
|
||||||
|
|
||||||
#define DL_SYSCALL(n) \
|
#define DL_SYSCALL(n) \
|
||||||
.section ".text" ;\
|
.section ".text" ;\
|
||||||
.align 16,0xcc ;\
|
.align 16,0xcc ;\
|
||||||
|
@ -37,7 +43,8 @@
|
||||||
.type __CONCAT(_dl_,n),@function ;\
|
.type __CONCAT(_dl_,n),@function ;\
|
||||||
__CONCAT(_dl_,n): ;\
|
__CONCAT(_dl_,n): ;\
|
||||||
movl $__CONCAT(SYS_, n),%eax; ;\
|
movl $__CONCAT(SYS_, n),%eax; ;\
|
||||||
int $0x80 ;\
|
99: int $0x80 ;\
|
||||||
|
PINSYSCALL(__CONCAT(SYS_, n), 99b) ;\
|
||||||
jb .L_cerr ;\
|
jb .L_cerr ;\
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
btext PT_LOAD FLAGS (0x08000005);
|
btext PT_LOAD FLAGS (0x08000005);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -38,6 +39,11 @@ SECTIONS
|
||||||
{
|
{
|
||||||
*(.openbsd.randomdata .openbsd.randomdata.*)
|
*(.openbsd.randomdata .openbsd.randomdata.*)
|
||||||
} :data :relro :random
|
} :data :relro :random
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
|
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
.got : { *(.got.plt) *(.got) } :data :relro
|
.got : { *(.got.plt) *(.got) } :data :relro
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.4 2019/10/23 19:55:09 guenther Exp $ */
|
/* $OpenBSD: SYS.h,v 1.5 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013 Miodrag Vallat.
|
* Copyright (c) 2013 Miodrag Vallat.
|
||||||
|
@ -44,22 +44,29 @@
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
|
#define PINSYSCALL(sysno, label) \
|
||||||
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
|
.long label ;\
|
||||||
|
.long sysno ;\
|
||||||
|
.popsection
|
||||||
|
|
||||||
#define __CONCAT(p,x) p##x
|
#define __CONCAT(p,x) p##x
|
||||||
#define __ENTRY(p,x) ENTRY(__CONCAT(p,x))
|
#define __ENTRY(p,x) ENTRY(__CONCAT(p,x))
|
||||||
#define __SYSCALLNAME(p,x) __CONCAT(p,x)
|
#define __SYSCALLNAME(p,x) __CONCAT(p,x)
|
||||||
|
|
||||||
#define __DO_SYSCALL(x) \
|
#define __DO_SYSCALL(x) \
|
||||||
or %r13, %r0, __SYSCALLNAME(SYS_,x); \
|
or %r13, %r0, __SYSCALLNAME(SYS_,x) ;\
|
||||||
tb0 0, %r0, 450
|
99: tb0 0, %r0, 450 ;\
|
||||||
|
PINSYSCALL(__SYSCALLNAME(SYS_,x), 99b)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* m88k syscall return ABI requires the same amount of ASM
|
* m88k syscall return ABI requires the same amount of ASM
|
||||||
* whether or not the syscall can possibly fail, so there's
|
* whether or not the syscall can possibly fail, so there's
|
||||||
* no benefit to a DL_SYSCALL_NOERR() macro.
|
* no benefit to a DL_SYSCALL_NOERR() macro.
|
||||||
*/
|
*/
|
||||||
#define DL_SYSCALL(n) \
|
#define DL_SYSCALL(n) \
|
||||||
__ENTRY(_dl_,n); \
|
__ENTRY(_dl_,n) ;\
|
||||||
__DO_SYSCALL(n); \
|
__DO_SYSCALL(n) ;\
|
||||||
subu %r2, %r0, %r2; /* return -errno; */ \
|
subu %r2, %r0, %r2 /* return -errno; */ ;\
|
||||||
jmp %r1; \
|
jmp %r1 ;\
|
||||||
END(_dl_##n)
|
END(_dl_##n)
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
btext PT_LOAD FLAGS (0x08000005);
|
btext PT_LOAD FLAGS (0x08000005);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
scalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -36,6 +37,9 @@ SECTIONS
|
||||||
. = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
|
. = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
|
||||||
.openbsd.randomdata : { *(.openbsd.randomdata .openbsd.randomdata.*) }
|
.openbsd.randomdata : { *(.openbsd.randomdata .openbsd.randomdata.*) }
|
||||||
:data :relro :random
|
:data :relro :random
|
||||||
|
.openbsd.syscalls : { *(.openbsd.syscalls .openbsd.syscalls.*) }
|
||||||
|
:syscalls
|
||||||
|
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
.got : { *(.got.plt) *(.got) } :data :relro
|
.got : { *(.got.plt) *(.got) } :data :relro
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.1 2017/08/27 21:59:52 deraadt Exp $ */
|
/* $OpenBSD: SYS.h,v 1.2 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2002 Opsycon AB, Sweden.
|
* Copyright (c) 1998-2002 Opsycon AB, Sweden.
|
||||||
|
@ -29,14 +29,21 @@
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
#define DL_SYSCALL(c) \
|
#define PINSYSCALL(sysno, label) \
|
||||||
NLEAF(_dl_##c,0) \
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
li v0,SYS_##c; \
|
.long label ;\
|
||||||
syscall; \
|
.long sysno ;\
|
||||||
bnez a3, 1f; \
|
.popsection
|
||||||
j ra; \
|
|
||||||
1: ; \
|
#define DL_SYSCALL(c) \
|
||||||
subu v0, zero, v0; \
|
NLEAF(_dl_##c,0) \
|
||||||
j ra ; \
|
li v0,SYS_##c; \
|
||||||
|
99: syscall; \
|
||||||
|
PINSYSCALL(SYS_##c, 99b); \
|
||||||
|
bnez a3, 1f; \
|
||||||
|
j ra; \
|
||||||
|
1: ; \
|
||||||
|
subu v0, zero, v0; \
|
||||||
|
j ra; \
|
||||||
END(_dl_##c)
|
END(_dl_##c)
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
btext PT_LOAD FLAGS (0x08000005);
|
btext PT_LOAD FLAGS (0x08000005);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -39,6 +40,11 @@ SECTIONS
|
||||||
{
|
{
|
||||||
*(.openbsd.randomdata .openbsd.randomdata.*)
|
*(.openbsd.randomdata .openbsd.randomdata.*)
|
||||||
} :data :relro :random
|
} :data :relro :random
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
|
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
_gp = ALIGN(16) + 0x7ff0;
|
_gp = ALIGN(16) + 0x7ff0;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.4 2020/11/28 19:49:30 gkoehler Exp $ */
|
/* $OpenBSD: SYS.h,v 1.5 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999 Dale Rahn
|
* Copyright (c) 1999 Dale Rahn
|
||||||
|
@ -29,14 +29,21 @@
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
#define DL_SYSCALL(n) \
|
#define PINSYSCALL(sysno, label) \
|
||||||
ENTRY(_dl_##n) \
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
RETGUARD_SETUP(_dl_##n, %r11, %r12) ;\
|
.long label ;\
|
||||||
li 0, SYS_##n ;\
|
.long sysno ;\
|
||||||
sc ;\
|
.popsection
|
||||||
cmpwi 0, 0 ;\
|
|
||||||
beq+ .L_end##n ;\
|
#define DL_SYSCALL(n) \
|
||||||
neg 3, 3 ;\
|
ENTRY(_dl_##n) \
|
||||||
.L_end##n: ;\
|
RETGUARD_SETUP(_dl_##n, %r11, %r12) ;\
|
||||||
RETGUARD_CHECK(_dl_##n, %r11, %r12) ;\
|
li 0, SYS_##n ;\
|
||||||
|
99: sc ;\
|
||||||
|
PINSYSCALL(SYS_##n, 99b) ;\
|
||||||
|
cmpwi 0, 0 ;\
|
||||||
|
beq+ .L_end##n ;\
|
||||||
|
neg 3, 3 ;\
|
||||||
|
.L_end##n: ;\
|
||||||
|
RETGUARD_CHECK(_dl_##n, %r11, %r12) ;\
|
||||||
blr
|
blr
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
btext PT_LOAD FLAGS (0x08000005);
|
btext PT_LOAD FLAGS (0x08000005);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -39,6 +40,11 @@ SECTIONS
|
||||||
{
|
{
|
||||||
*(.openbsd.randomdata .openbsd.randomdata.*)
|
*(.openbsd.randomdata .openbsd.randomdata.*)
|
||||||
} :data :relro :random
|
} :data :relro :random
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
|
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
.got : { *(.got.plt) *(.got) } :data :relro
|
.got : { *(.got.plt) *(.got) } :data :relro
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.2 2020/10/16 23:42:53 deraadt Exp $ */
|
/* $OpenBSD: SYS.h,v 1.3 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999 Dale Rahn
|
* Copyright (c) 1999 Dale Rahn
|
||||||
|
@ -29,14 +29,21 @@
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
#define DL_SYSCALL(n) \
|
#define PINSYSCALL(sysno, label) \
|
||||||
ENTRY(_dl_##n) \
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
RETGUARD_SETUP(_dl_##n, %r11) ;\
|
.long label ;\
|
||||||
li %r0, SYS_##n ;\
|
.long sysno ;\
|
||||||
sc ;\
|
.popsection
|
||||||
cmpdi %r0, 0 ;\
|
|
||||||
beq .L_end##n ;\
|
#define DL_SYSCALL(n) \
|
||||||
neg %r3, %r3 ;\
|
ENTRY(_dl_##n) \
|
||||||
.L_end##n: ;\
|
RETGUARD_SETUP(_dl_##n, %r11) ;\
|
||||||
RETGUARD_CHECK(_dl_##n, %r11) ;\
|
li %r0, SYS_##n ;\
|
||||||
|
99: sc ;\
|
||||||
|
PINSYSCALL(SYS_##n, 99b) ;\
|
||||||
|
cmpdi %r0, 0 ;\
|
||||||
|
beq .L_end##n ;\
|
||||||
|
neg %r3, %r3 ;\
|
||||||
|
.L_end##n: ;\
|
||||||
|
RETGUARD_CHECK(_dl_##n, %r11) ;\
|
||||||
blr
|
blr
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
text PT_LOAD FLAGS (1);
|
text PT_LOAD FLAGS (1);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -38,6 +39,11 @@ SECTIONS
|
||||||
{
|
{
|
||||||
*(.openbsd.randomdata .openbsd.randomdata.*)
|
*(.openbsd.randomdata .openbsd.randomdata.*)
|
||||||
} :data :relro :random
|
} :data :relro :random
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
|
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
.got : { *(.got.plt) *(.got) } :data :relro
|
.got : { *(.got.plt) *(.got) } :data :relro
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: SYS.h,v 1.1 2021/04/28 15:16:26 drahn Exp $ */
|
/* $OpenBSD: SYS.h,v 1.2 2023/12/10 16:45:50 deraadt Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016 Dale Rahn <drahn@openbsd.org>
|
* Copyright (c) 2016 Dale Rahn <drahn@openbsd.org>
|
||||||
|
@ -29,19 +29,26 @@
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
#define SYSTRAP(x) \
|
#define PINSYSCALL(sysno, label) \
|
||||||
li t0, SYS_ ## x ;\
|
.pushsection .openbsd.syscalls,"",@progbits ;\
|
||||||
ecall ;\
|
.long label ;\
|
||||||
|
.long sysno ;\
|
||||||
|
.popsection
|
||||||
|
|
||||||
|
#define SYSTRAP(x) \
|
||||||
|
li t0, SYS_ ## x ;\
|
||||||
|
99: ecall ;\
|
||||||
|
PINSYSCALL(SYS_ ## x, 99b)
|
||||||
/* XXX fence */
|
/* XXX fence */
|
||||||
|
|
||||||
#define DL_SYSCALL(n) \
|
#define DL_SYSCALL(n) \
|
||||||
.global __CONCAT(_dl_,n) ;\
|
.global __CONCAT(_dl_,n) ;\
|
||||||
.type __CONCAT(_dl_,n)%function ;\
|
.type __CONCAT(_dl_,n)%function ;\
|
||||||
__CONCAT(_dl_,n): ;\
|
__CONCAT(_dl_,n): ;\
|
||||||
RETGUARD_SETUP(__CONCAT(_dl_,n), x15) ;\
|
RETGUARD_SETUP(__CONCAT(_dl_,n), x15) ;\
|
||||||
SYSTRAP(n) ;\
|
SYSTRAP(n) ;\
|
||||||
beqz t0, 1f ;\
|
beqz t0, 1f ;\
|
||||||
sub a0, zero, a0 /* r0 = -errno */ ;\
|
sub a0, zero, a0 /* r0 = -errno */ ;\
|
||||||
1: ;\
|
1: ;\
|
||||||
RETGUARD_CHECK(__CONCAT(_dl_,n), x15) ;\
|
RETGUARD_CHECK(__CONCAT(_dl_,n), x15) ;\
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -5,6 +5,7 @@ PHDRS
|
||||||
btext PT_LOAD FLAGS (0x08000005);
|
btext PT_LOAD FLAGS (0x08000005);
|
||||||
data PT_LOAD;
|
data PT_LOAD;
|
||||||
random PT_OPENBSD_RANDOMIZE;
|
random PT_OPENBSD_RANDOMIZE;
|
||||||
|
syscalls PT_OPENBSD_SYSCALLS;
|
||||||
relro PT_GNU_RELRO;
|
relro PT_GNU_RELRO;
|
||||||
dynamic PT_DYNAMIC;
|
dynamic PT_DYNAMIC;
|
||||||
note PT_NOTE;
|
note PT_NOTE;
|
||||||
|
@ -39,6 +40,11 @@ SECTIONS
|
||||||
{
|
{
|
||||||
*(.openbsd.randomdata .openbsd.randomdata.*)
|
*(.openbsd.randomdata .openbsd.randomdata.*)
|
||||||
} :data :relro :random
|
} :data :relro :random
|
||||||
|
.openbsd.syscalls :
|
||||||
|
{
|
||||||
|
*(.openbsd.syscalls .openbsd.syscalls.*)
|
||||||
|
} :syscalls
|
||||||
|
|
||||||
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
.data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
|
||||||
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
.dynamic : { *(.dynamic) } :data :relro :dynamic
|
||||||
.got : { *(.got.plt) *(.got) } :data :relro
|
.got : { *(.got.plt) *(.got) } :data :relro
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue