about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/bits/fcntl.h3
-rw-r--r--arch/i386/bits/fcntl.h3
-rw-r--r--arch/microblaze/bits/fcntl.h3
-rw-r--r--arch/mips/bits/fcntl.h21
-rw-r--r--arch/powerpc/bits/socket.h7
-rw-r--r--arch/x86_64/bits/fcntl.h3
-rw-r--r--include/fcntl.h4
-rw-r--r--include/pthread.h5
-rw-r--r--include/sys/mtio.h188
-rw-r--r--src/ldso/dynlink.c2
-rw-r--r--src/ldso/powerpc/start.s8
-rw-r--r--src/thread/pthread_attr_get.c5
-rw-r--r--src/thread/pthread_getcpuclockid.c6
-rw-r--r--src/thread/pthread_mutex_getprioceiling.c6
-rw-r--r--src/thread/pthread_mutex_setprioceiling.c6
-rw-r--r--src/thread/pthread_mutexattr_setprotocol.c7
16 files changed, 252 insertions, 25 deletions
diff --git a/arch/arm/bits/fcntl.h b/arch/arm/bits/fcntl.h
index c0afa615..9595f9ca 100644
--- a/arch/arm/bits/fcntl.h
+++ b/arch/arm/bits/fcntl.h
@@ -10,15 +10,12 @@
 #define O_DIRECTORY  040000
 #define O_NOFOLLOW  0100000
 #define O_CLOEXEC  02000000
-#define O_SEARCH  010000000
-#define O_EXEC    010000000
 
 #define O_ASYNC      020000
 #define O_DIRECT    0200000
 #define O_LARGEFILE 0400000
 #define O_NOATIME  01000000
 #define O_NDELAY O_NONBLOCK
-#define O_PATH    010000000
 
 #define F_DUPFD  0
 #define F_GETFD  1
diff --git a/arch/i386/bits/fcntl.h b/arch/i386/bits/fcntl.h
index 04b7484c..69f3a8f5 100644
--- a/arch/i386/bits/fcntl.h
+++ b/arch/i386/bits/fcntl.h
@@ -10,15 +10,12 @@
 #define O_DIRECTORY 0200000
 #define O_NOFOLLOW  0400000
 #define O_CLOEXEC  02000000
-#define O_SEARCH  010000000
-#define O_EXEC    010000000
 
 #define O_ASYNC      020000
 #define O_DIRECT     040000
 #define O_LARGEFILE 0100000
 #define O_NOATIME  01000000
 #define O_NDELAY O_NONBLOCK
-#define O_PATH    010000000
 
 #define F_DUPFD  0
 #define F_GETFD  1
diff --git a/arch/microblaze/bits/fcntl.h b/arch/microblaze/bits/fcntl.h
index 04b7484c..69f3a8f5 100644
--- a/arch/microblaze/bits/fcntl.h
+++ b/arch/microblaze/bits/fcntl.h
@@ -10,15 +10,12 @@
 #define O_DIRECTORY 0200000
 #define O_NOFOLLOW  0400000
 #define O_CLOEXEC  02000000
-#define O_SEARCH  010000000
-#define O_EXEC    010000000
 
 #define O_ASYNC      020000
 #define O_DIRECT     040000
 #define O_LARGEFILE 0100000
 #define O_NOATIME  01000000
 #define O_NDELAY O_NONBLOCK
-#define O_PATH    010000000
 
 #define F_DUPFD  0
 #define F_GETFD  1
diff --git a/arch/mips/bits/fcntl.h b/arch/mips/bits/fcntl.h
index 116852e2..c681d237 100644
--- a/arch/mips/bits/fcntl.h
+++ b/arch/mips/bits/fcntl.h
@@ -1,23 +1,20 @@
+#define O_CREAT        0400
+#define O_EXCL        02000
+#define O_NOCTTY      04000
+#define O_TRUNC       01000
 #define O_APPEND       0010
+#define O_NONBLOCK     0200
 #define O_DSYNC        0020
 #define O_SYNC       040020
 #define O_RSYNC      040020
-#define O_NONBLOCK     0200
-#define O_CREAT        0400
-#define O_TRUNC       01000
-#define O_EXCL        02000
-#define O_NOCTTY      04000
-#define O_ASYNC      010000
-#define O_LARGEFILE  020000
-#define O_DIRECT    0100000
 #define O_DIRECTORY 0200000
 #define O_NOFOLLOW  0400000
-#define O_NOATIME  01000000
 #define O_CLOEXEC  02000000
-#define O_PATH    010000000
-#define O_SEARCH  010000000
-#define O_EXEC    010000000
 
+#define O_ASYNC      010000
+#define O_DIRECT    0100000
+#define O_LARGEFILE  020000
+#define O_NOATIME  01000000
 #define O_NDELAY O_NONBLOCK
 
 #define F_DUPFD  0
diff --git a/arch/powerpc/bits/socket.h b/arch/powerpc/bits/socket.h
index 3d97193a..26d1010f 100644
--- a/arch/powerpc/bits/socket.h
+++ b/arch/powerpc/bits/socket.h
@@ -9,6 +9,13 @@ struct msghdr
 	unsigned msg_flags;
 };
 
+struct cmsghdr
+{
+	socklen_t cmsg_len;
+	int cmsg_level;
+	int cmsg_type;
+};
+
 #define SO_DEBUG        1
 #define SO_REUSEADDR    2
 #define SO_TYPE         3
diff --git a/arch/x86_64/bits/fcntl.h b/arch/x86_64/bits/fcntl.h
index e8db7ae6..9e07229e 100644
--- a/arch/x86_64/bits/fcntl.h
+++ b/arch/x86_64/bits/fcntl.h
@@ -10,15 +10,12 @@
 #define O_DIRECTORY 0200000
 #define O_NOFOLLOW  0400000
 #define O_CLOEXEC  02000000
-#define O_SEARCH  010000000
-#define O_EXEC    010000000
 
 #define O_ASYNC      020000
 #define O_DIRECT     040000
 #define O_LARGEFILE       0
 #define O_NOATIME  01000000
 #define O_NDELAY O_NONBLOCK
-#define O_PATH    010000000
 
 #define F_DUPFD  0
 #define F_GETFD  1
diff --git a/include/fcntl.h b/include/fcntl.h
index 9250e70e..70d4cbb5 100644
--- a/include/fcntl.h
+++ b/include/fcntl.h
@@ -37,6 +37,10 @@ int openat(int, const char *, int, ...);
 int posix_fadvise(int, off_t, off_t, int);
 int posix_fallocate(int, off_t, off_t);
 
+#define O_SEARCH  010000000
+#define O_EXEC    010000000
+#define O_PATH    010000000
+
 #define O_ACCMODE (03|O_SEARCH)
 #define O_RDONLY  00
 #define O_WRONLY  01
diff --git a/include/pthread.h b/include/pthread.h
index 660a64d9..6eee14cb 100644
--- a/include/pthread.h
+++ b/include/pthread.h
@@ -105,6 +105,9 @@ int pthread_mutex_timedlock(pthread_mutex_t *__restrict, const struct timespec *
 int pthread_mutex_destroy(pthread_mutex_t *);
 int pthread_mutex_consistent(pthread_mutex_t *);
 
+int pthread_mutex_getprioceiling(const pthread_mutex_t *__restrict, int *__restrict);
+int pthread_mutex_setprioceiling(pthread_mutex_t *__restrict, int, int *__restrict);
+
 int pthread_cond_init(pthread_cond_t *__restrict, const pthread_condattr_t *__restrict);
 int pthread_cond_destroy(pthread_cond_t *);
 int pthread_cond_wait(pthread_cond_t *__restrict, pthread_mutex_t *__restrict);
@@ -192,6 +195,8 @@ int pthread_atfork(void (*)(void), void (*)(void), void (*)(void));
 int pthread_getconcurrency(void);
 int pthread_setconcurrency(int);
 
+int pthread_getcpuclockid(pthread_t, clockid_t *);
+
 struct __ptcb {
 	void (*__f)(void *);
 	void *__x;
diff --git a/include/sys/mtio.h b/include/sys/mtio.h
new file mode 100644
index 00000000..dc8e5f52
--- /dev/null
+++ b/include/sys/mtio.h
@@ -0,0 +1,188 @@
+#ifndef _SYS_MTIO_H
+#define _SYS_MTIO_H
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+struct mtop {
+	short mt_op;
+	int mt_count;
+};
+
+#define _IOT_mtop _IOT (_IOTS (short), 1, _IOTS (int), 1, 0, 0)
+#define _IOT_mtget _IOT (_IOTS (long), 7, 0, 0, 0, 0)
+#define _IOT_mtpos _IOT_SIMPLE (long)
+#define _IOT_mtconfiginfo _IOT (_IOTS (long), 2, _IOTS (short), 3, _IOTS (long), 1)
+
+
+#define MTRESET 0
+#define MTFSF	1
+#define MTBSF	2
+#define MTFSR	3
+#define MTBSR	4
+#define MTWEOF	5
+#define MTREW	6
+#define MTOFFL	7
+#define MTNOP	8
+#define MTRETEN 9
+#define MTBSFM	10
+#define MTFSFM  11
+#define MTEOM	12
+#define MTERASE 13
+#define MTRAS1  14
+#define MTRAS2	15
+#define MTRAS3  16
+#define MTSETBLK 20
+#define MTSETDENSITY 21
+#define MTSEEK	22
+#define MTTELL	23
+#define MTSETDRVBUFFER 24
+#define MTFSS	25
+#define MTBSS	26
+#define MTWSM	27
+#define MTLOCK  28
+#define MTUNLOCK 29
+#define MTLOAD  30
+#define MTUNLOAD 31
+#define MTCOMPRESSION 32
+#define MTSETPART 33
+#define MTMKPART  34
+
+struct mtget {
+	long mt_type;
+	long mt_resid;
+	long mt_dsreg;
+	long mt_gstat;
+	long mt_erreg;
+	int mt_fileno;
+	int mt_blkno;
+};
+
+#define MT_ISUNKNOWN		0x01
+#define MT_ISQIC02		0x02
+#define MT_ISWT5150		0x03
+#define MT_ISARCHIVE_5945L2	0x04
+#define MT_ISCMSJ500		0x05
+#define MT_ISTDC3610		0x06
+#define MT_ISARCHIVE_VP60I	0x07
+#define MT_ISARCHIVE_2150L	0x08
+#define MT_ISARCHIVE_2060L	0x09
+#define MT_ISARCHIVESC499	0x0A
+#define MT_ISQIC02_ALL_FEATURES	0x0F
+#define MT_ISWT5099EEN24	0x11
+#define MT_ISTEAC_MT2ST		0x12
+#define MT_ISEVEREX_FT40A	0x32
+#define MT_ISDDS1		0x51
+#define MT_ISDDS2		0x52
+#define MT_ISSCSI1		0x71
+#define MT_ISSCSI2		0x72
+#define MT_ISFTAPE_UNKNOWN	0x800000
+#define MT_ISFTAPE_FLAG		0x800000
+
+struct mt_tape_info {
+	long t_type;
+	char *t_name;
+};
+
+#define MT_TAPE_INFO \
+{									      \
+	{MT_ISUNKNOWN,		"Unknown type of tape device"},		      \
+	{MT_ISQIC02,		"Generic QIC-02 tape streamer"},	      \
+	{MT_ISWT5150,		"Wangtek 5150, QIC-150"},		      \
+	{MT_ISARCHIVE_5945L2,	"Archive 5945L-2"},			      \
+	{MT_ISCMSJ500,		"CMS Jumbo 500"},			      \
+	{MT_ISTDC3610,		"Tandberg TDC 3610, QIC-24"},		      \
+	{MT_ISARCHIVE_VP60I,	"Archive VP60i, QIC-02"},		      \
+	{MT_ISARCHIVE_2150L,	"Archive Viper 2150L"},			      \
+	{MT_ISARCHIVE_2060L,	"Archive Viper 2060L"},			      \
+	{MT_ISARCHIVESC499,	"Archive SC-499 QIC-36 controller"},	      \
+	{MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"},	      \
+	{MT_ISWT5099EEN24,	"Wangtek 5099-een24, 60MB"},		      \
+	{MT_ISTEAC_MT2ST,	"Teac MT-2ST 155mb data cassette drive"},     \
+	{MT_ISEVEREX_FT40A,	"Everex FT40A, QIC-40"},		      \
+	{MT_ISSCSI1,		"Generic SCSI-1 tape"},			      \
+	{MT_ISSCSI2,		"Generic SCSI-2 tape"},			      \
+	{0, NULL}							      \
+}
+
+struct mtpos {
+	long mt_blkno;
+};
+
+struct mtconfiginfo  {
+	long mt_type;
+	long ifc_type;
+	unsigned short irqnr;
+	unsigned short dmanr;
+	unsigned short port;
+	unsigned long debug;
+	unsigned have_dens:1;
+	unsigned have_bsf:1;
+	unsigned have_fsr:1;
+	unsigned have_bsr:1;
+	unsigned have_eod:1;
+	unsigned have_seek:1;
+	unsigned have_tell:1;
+	unsigned have_ras1:1;
+	unsigned have_ras2:1;
+	unsigned have_ras3:1;
+	unsigned have_qfa:1;
+	unsigned pad1:5;
+	char reserved[10];
+};
+
+#define	MTIOCTOP _IOW('m', 1, struct mtop)
+#define	MTIOCGET _IOR('m', 2, struct mtget)
+#define	MTIOCPOS _IOR('m', 3, struct mtpos)
+
+#define	MTIOCGETCONFIG	_IOR('m', 4, struct mtconfiginfo)
+#define	MTIOCSETCONFIG	_IOW('m', 5, struct mtconfiginfo)
+
+#define GMT_EOF(x)              ((x) & 0x80000000)
+#define GMT_BOT(x)              ((x) & 0x40000000)
+#define GMT_EOT(x)              ((x) & 0x20000000)
+#define GMT_SM(x)               ((x) & 0x10000000)
+#define GMT_EOD(x)              ((x) & 0x08000000)
+#define GMT_WR_PROT(x)          ((x) & 0x04000000)
+#define GMT_ONLINE(x)           ((x) & 0x01000000)
+#define GMT_D_6250(x)           ((x) & 0x00800000)
+#define GMT_D_1600(x)           ((x) & 0x00400000)
+#define GMT_D_800(x)            ((x) & 0x00200000)
+#define GMT_DR_OPEN(x)          ((x) & 0x00040000)
+#define GMT_IM_REP_EN(x)        ((x) & 0x00010000)
+
+#define MT_ST_BLKSIZE_SHIFT	0
+#define MT_ST_BLKSIZE_MASK	0xffffff
+#define MT_ST_DENSITY_SHIFT	24
+#define MT_ST_DENSITY_MASK	0xff000000
+#define MT_ST_SOFTERR_SHIFT	0
+#define MT_ST_SOFTERR_MASK	0xffff
+#define MT_ST_OPTIONS		0xf0000000
+#define MT_ST_BOOLEANS		0x10000000
+#define MT_ST_SETBOOLEANS	0x30000000
+#define MT_ST_CLEARBOOLEANS	0x40000000
+#define MT_ST_WRITE_THRESHOLD	0x20000000
+#define MT_ST_DEF_BLKSIZE	0x50000000
+#define MT_ST_DEF_OPTIONS	0x60000000
+#define MT_ST_BUFFER_WRITES	0x1
+#define MT_ST_ASYNC_WRITES	0x2
+#define MT_ST_READ_AHEAD	0x4
+#define MT_ST_DEBUGGING		0x8
+#define MT_ST_TWO_FM		0x10
+#define MT_ST_FAST_MTEOM	0x20
+#define MT_ST_AUTO_LOCK		0x40
+#define MT_ST_DEF_WRITES	0x80
+#define MT_ST_CAN_BSR		0x100
+#define MT_ST_NO_BLKLIMS	0x200
+#define MT_ST_CAN_PARTITIONS    0x400
+#define MT_ST_SCSI2LOGICAL      0x800
+#define MT_ST_CLEAR_DEFAULT	0xfffff
+#define MT_ST_DEF_DENSITY	(MT_ST_DEF_OPTIONS | 0x100000)
+#define MT_ST_DEF_COMPRESSION	(MT_ST_DEF_OPTIONS | 0x200000)
+#define MT_ST_DEF_DRVBUFFER	(MT_ST_DEF_OPTIONS | 0x300000)
+#define MT_ST_HPLOADER_OFFSET 10000
+#ifndef DEFTAPE
+# define DEFTAPE	"/dev/tape"
+#endif
+
+#endif
diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c
index ba2f6129..66f22bef 100644
--- a/src/ldso/dynlink.c
+++ b/src/ldso/dynlink.c
@@ -481,7 +481,7 @@ static struct dso *load_library(const char *name)
 					if (getline(&sys_path, (size_t[1]){0}, f) > 0) {
 						size_t l = strlen(sys_path);
 						if (l && sys_path[l-1]=='\n')
-							sys_path[-1] = 0;
+							sys_path[l-1] = 0;
 					}
 					fclose(f);
 				}
diff --git a/src/ldso/powerpc/start.s b/src/ldso/powerpc/start.s
index 08b5979a..6c499e8e 100644
--- a/src/ldso/powerpc/start.s
+++ b/src/ldso/powerpc/start.s
@@ -16,6 +16,14 @@ _start:
 	bl      __dynlink
 	addi    1, 1, 16
 
+	lwz     4, 0(1)
+1:	addi    4, 4, -1
+	lwzu    5, 4(1)
+	cmpwi   5, -1
+	beq-    1b
+	addi    4, 4, 1
+	stwu    4, -4(1)
+
 	mtlr    3
 	li      3, 0
 	blr
diff --git a/src/thread/pthread_attr_get.c b/src/thread/pthread_attr_get.c
index f81103d8..e4650e42 100644
--- a/src/thread/pthread_attr_get.c
+++ b/src/thread/pthread_attr_get.c
@@ -68,6 +68,11 @@ int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restr
 	return 0;
 }
 
+int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol)
+{
+	*protocol = PTHREAD_PRIO_NONE;
+	return 0;
+}
 int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared)
 {
 	*pshared = *a>>31;
diff --git a/src/thread/pthread_getcpuclockid.c b/src/thread/pthread_getcpuclockid.c
new file mode 100644
index 00000000..cf3d2b84
--- /dev/null
+++ b/src/thread/pthread_getcpuclockid.c
@@ -0,0 +1,6 @@
+#include "pthread_impl.h"
+
+int pthread_getcpuclockid(pthread_t t, clockid_t *clockid)
+{
+	return ENOSYS;
+}
diff --git a/src/thread/pthread_mutex_getprioceiling.c b/src/thread/pthread_mutex_getprioceiling.c
new file mode 100644
index 00000000..8c75a661
--- /dev/null
+++ b/src/thread/pthread_mutex_getprioceiling.c
@@ -0,0 +1,6 @@
+#include "pthread_impl.h"
+
+int pthread_mutex_getprioceiling(const pthread_mutex_t *restrict m, int *restrict ceiling)
+{
+	return EINVAL;
+}
diff --git a/src/thread/pthread_mutex_setprioceiling.c b/src/thread/pthread_mutex_setprioceiling.c
new file mode 100644
index 00000000..681f07c8
--- /dev/null
+++ b/src/thread/pthread_mutex_setprioceiling.c
@@ -0,0 +1,6 @@
+#include "pthread_impl.h"
+
+int pthread_mutex_setprioceiling(pthread_mutex_t *restrict m, int ceiling, int *restrict old)
+{
+	return EINVAL;
+}
diff --git a/src/thread/pthread_mutexattr_setprotocol.c b/src/thread/pthread_mutexattr_setprotocol.c
new file mode 100644
index 00000000..c92a31c8
--- /dev/null
+++ b/src/thread/pthread_mutexattr_setprotocol.c
@@ -0,0 +1,7 @@
+#include "pthread_impl.h"
+
+int pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int protocol)
+{
+	if (protocol) return ENOTSUP;
+	return 0;
+}