summaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/abi-tag.h8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/brk.S12
-rw-r--r--sysdeps/unix/sysv/linux/alpha/clone.S13
-rw-r--r--sysdeps/unix/sysv/linux/sys/mount.h70
4 files changed, 94 insertions, 9 deletions
diff --git a/sysdeps/unix/sysv/linux/abi-tag.h b/sysdeps/unix/sysv/linux/abi-tag.h
index 166e6a12f6..6c71eece85 100644
--- a/sysdeps/unix/sysv/linux/abi-tag.h
+++ b/sysdeps/unix/sysv/linux/abi-tag.h
@@ -10,7 +10,9 @@
#define ABI_LINUX_MINOR 0
#define ABI_LINUX_PATCH 0
-#define ABI_TAG ((ABI_LINUX_TAG << 24) | \
- (ABI_LINUX_MAJOR << 16) | \
- (ABI_LINUX_MINOR << 8) | \
+/* Don't use `|' in this expression, it is a comment character in the
+ assembler. */
+#define ABI_TAG ((ABI_LINUX_TAG << 24) + \
+ (ABI_LINUX_MAJOR << 16) + \
+ (ABI_LINUX_MINOR << 8) + \
(ABI_LINUX_PATCH << 0))
diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S
index f44686b9a4..74fef64f64 100644
--- a/sysdeps/unix/sysv/linux/alpha/brk.S
+++ b/sysdeps/unix/sysv/linux/alpha/brk.S
@@ -37,8 +37,9 @@ __curbrk: .skip 8
#endif
.text
-LEAF(__brk, 0)
+LEAF(__brk, 8)
ldgp gp, 0(t12)
+ subq sp, 8, sp
#ifdef PROF
.set noat
lda AT, _mcount
@@ -47,9 +48,14 @@ LEAF(__brk, 0)
#endif
.prologue 1
+ /* Save the requested brk across the system call. */
+ stq a0, 0(sp)
+
ldiq v0, __NR_brk
call_pal PAL_callsys
+ ldq a0, 0(sp)
+
/* Be prepared for an OSF-style brk. */
bne a3, $err1
beq v0, $ok
@@ -62,11 +68,13 @@ LEAF(__brk, 0)
/* Update __curbrk and return cleanly. */
mov zero, v0
$ok: stq a0, __curbrk
+ addq sp, 8, sp
ret
/* What a horrible way to die. */
$err0: ldi v0, ENOMEM
-$err1: jmp zero, __syscall_error
+$err1: addq sp, 8, sp
+ jmp zero, __syscall_error
END(__brk)
diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S
index 5d36e2588d..aab4e590a5 100644
--- a/sysdeps/unix/sysv/linux/alpha/clone.S
+++ b/sysdeps/unix/sysv/linux/alpha/clone.S
@@ -42,9 +42,12 @@ ENTRY(__clone)
beq a0,$error /* no NULL function pointers */
beq a1,$error /* no NULL stack pointers */
+ /* Save the fn ptr and arg on the new stack. */
+ subq a1,16,a1
+ stq a0,0(a1)
+ stq a3,8(a1)
+
/* Do the system call */
- mov a0,pv /* get fn ptr out of the way */
- mov a3,t0 /* get fn arg out of the way */
mov a2,a0
ldiq v0,__NR_clone
call_pal PAL_callsys
@@ -73,8 +76,12 @@ thread_start:
mov zero,fp
.prologue 0
+ /* Load up the arguments. */
+ ldq pv,0(sp)
+ ldq a0,8(sp)
+ addq sp,16,sp
+
/* Call the user's function */
- mov t0,a0
jsr ra,(pv)
ldgp gp,0(ra)
diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
index 59a1aa45be..08a2e3158f 100644
--- a/sysdeps/unix/sysv/linux/sys/mount.h
+++ b/sysdeps/unix/sysv/linux/sys/mount.h
@@ -1,5 +1,5 @@
/* Header file for mounting/unmount Linux filesystems.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,13 +17,81 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+/* This is taken from /usr/include/linux/fs.h. */
+
#ifndef _SYS_MOUNT_H
#define _SYS_MOUNT_H 1
#include <features.h>
+#include <sys/ioctl.h>
+
__BEGIN_DECLS
+#define BLOCK_SIZE 1024
+#define BLOCK_SIZE_BITS 10
+
+
+/* These are the fs-independent mount-flags: up to 16 flags are
+ supported */
+#define MS_RDONLY 1 /* Mount read-only. */
+#define MS_NOSUID 2 /* Ignore suid and sgid bits. */
+#define MS_NODEV 4 /* Disallow access to device special files. */
+#define MS_NOEXEC 8 /* Disallow program execution. */
+#define MS_SYNCHRONOUS 16 /* Writes are synced at once. */
+#define MS_REMOUNT 32 /* Alter flags of a mounted FS. */
+#define MS_MANDLOCK 64 /* Allow mandatory locks on an FS. */
+#define S_WRITE 128 /* Write on file/directory/symlink. */
+#define S_APPEND 256 /* Append-only file. */
+#define S_IMMUTABLE 512 /* Immutable file. */
+#define MS_NOATIME 1024 /* Do not update access times. */
+
+
+/* Flags that can be altered by MS_REMOUNT */
+#define MS_RMT_MASK (MS_RDONLY | MS_MANDLOCK)
+
+
+/* Magic mount flag number. Has to be or-ed to the flag values. */
+
+#define MS_MGC_VAL 0xc0ed0000 /* Magic flag number to indicate "new" flags */
+#define MS_MGC_MSK 0xffff0000 /* Magic flag number mask */
+
+
+/* Note that read-only etc flags are inode-specific: setting some
+ file-system flags just means all the inodes inherit those flags by
+ default. It might be possible to override it selectively if you
+ really wanted to with some ioctl() that is not currently
+ implemented.
+
+ Exception: MS_RDONLY is always applied to the entire file system. */
+#define IS_RDONLY(inode) \
+ (((inode)->i_sb) && ((inode)->i_sb->s_flags & MS_RDONLY))
+#define DO_UPDATE_ATIME(inode) \
+ (!((inode)->i_flags & MS_NOATIME) && !IS_RDONLY (inode))
+#define IS_NOSUID(inode) ((inode)->i_flags & MS_NOSUID)
+#define IS_NODEV(inode) ((inode)->i_flags & MS_NODEV)
+#define IS_NOEXEC(inode) ((inode)->i_flags & MS_NOEXEC)
+#define IS_SYNC(inode) ((inode)->i_flags & MS_SYNCHRONOUS)
+#define IS_MANDLOCK(inode) ((inode)->i_flags & MS_MANDLOCK)
+
+#define IS_WRITABLE(inode) ((inode)->i_flags & S_WRITE)
+#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
+#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
+
+
+/* The read-only stuff doesn't really belong here, but any other place
+ is probably as bad and I don't want to create yet another include
+ file. */
+
+#define BLKROSET _IO(0x12, 93) /* Set device read-only (0 = read-write). */
+#define BLKROGET _IO(0x12, 94) /* Get read-only status (0 = read_write). */
+#define BLKRRPART _IO(0x12, 95) /* Re-read partition table. */
+#define BLKGETSIZE _IO(0x12, 96) /* Return device size. */
+#define BLKFLSBUF _IO(0x12, 97) /* Flush buffer cache. */
+#define BLKRASET _IO(0x12, 98) /* Set read ahead for block device. */
+#define BLKRAGET _IO(0x12, 99) /* Get current read ahead setting. */
+
+
/* Mount a filesystem. */
extern int mount __P ((__const char *__special_file, __const char *__dir,
__const char *__fstype, unsigned long int __rwflag,