Merge remote-tracking branch 'nsz/math'
authorRich Felker <dalias@aerifal.cx>
Sun, 18 Nov 2012 20:19:35 +0000 (15:19 -0500)
committerRich Felker <dalias@aerifal.cx>
Sun, 18 Nov 2012 20:19:35 +0000 (15:19 -0500)
16 files changed:
arch/arm/bits/fcntl.h
arch/i386/bits/fcntl.h
arch/microblaze/bits/fcntl.h
arch/mips/bits/fcntl.h
arch/powerpc/bits/socket.h
arch/x86_64/bits/fcntl.h
include/fcntl.h
include/pthread.h
include/sys/mtio.h [new file with mode: 0644]
src/ldso/dynlink.c
src/ldso/powerpc/start.s
src/thread/pthread_attr_get.c
src/thread/pthread_getcpuclockid.c [new file with mode: 0644]
src/thread/pthread_mutex_getprioceiling.c [new file with mode: 0644]
src/thread/pthread_mutex_setprioceiling.c [new file with mode: 0644]
src/thread/pthread_mutexattr_setprotocol.c [new file with mode: 0644]

index c0afa61..9595f9c 100644 (file)
 #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
index 04b7484..69f3a8f 100644 (file)
 #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
index 04b7484..69f3a8f 100644 (file)
 #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
index 116852e..c681d23 100644 (file)
@@ -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
index 3d97193..26d1010 100644 (file)
@@ -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
index e8db7ae..9e07229 100644 (file)
 #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
index 9250e70..70d4cbb 100644 (file)
@@ -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
index 660a64d..6eee14c 100644 (file)
@@ -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 (file)
index 0000000..dc8e5f5
--- /dev/null
@@ -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
index ba2f612..66f22be 100644 (file)
@@ -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);
                                }
index 08b5979..6c499e8 100644 (file)
@@ -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
index f81103d..e4650e4 100644 (file)
@@ -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 (file)
index 0000000..cf3d2b8
--- /dev/null
@@ -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 (file)
index 0000000..8c75a66
--- /dev/null
@@ -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 (file)
index 0000000..681f07c
--- /dev/null
@@ -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 (file)
index 0000000..c92a31c
--- /dev/null
@@ -0,0 +1,7 @@
+#include "pthread_impl.h"
+
+int pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int protocol)
+{
+       if (protocol) return ENOTSUP;
+       return 0;
+}