From c46d4a9b60ba79c321ab9075f71751389808a15a Mon Sep 17 00:00:00 2001 From: joseph Date: Fri, 1 Apr 2011 19:43:08 +0000 Subject: Merge changes between r13227 and r13354 from /fsf/trunk. git-svn-id: svn://svn.eglibc.org/trunk@13355 7b3dc134-2b1b-0410-93df-9e9f96275f8d --- libc/ChangeLog | 95 ++++++++++++ libc/NEWS | 4 +- libc/Versions.def | 1 + libc/iconv/iconv.h | 6 +- libc/io/Makefile | 5 +- libc/io/fcntl.h | 3 +- libc/libio/stdio.h | 14 +- libc/misc/Makefile | 4 +- libc/misc/Versions | 3 + libc/misc/syncfs.c | 33 ++++ libc/posix/spawn.h | 6 +- libc/posix/unistd.h | 13 +- libc/stdlib/stdlib.h | 4 +- libc/sysdeps/unix/syscalls.list | 1 + libc/sysdeps/unix/sysv/linux/Makefile | 2 +- libc/sysdeps/unix/sysv/linux/Versions | 5 + libc/sysdeps/unix/sysv/linux/bits/time.h | 93 +++++++++++ libc/sysdeps/unix/sysv/linux/bits/timex.h | 108 +++++++++++++ libc/sysdeps/unix/sysv/linux/fallocate.c | 22 ++- libc/sysdeps/unix/sysv/linux/fallocate64.c | 28 +++- libc/sysdeps/unix/sysv/linux/i386/Makefile | 3 + libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h | 49 +++++- .../unix/sysv/linux/i386/call_sync_file_range.S | 72 +++++++++ libc/sysdeps/unix/sysv/linux/i386/fallocate.c | 16 +- libc/sysdeps/unix/sysv/linux/i386/fallocate64.c | 16 +- .../sysdeps/unix/sysv/linux/i386/sync_file_range.S | 72 --------- .../sysdeps/unix/sysv/linux/i386/sync_file_range.c | 44 ++++++ libc/sysdeps/unix/sysv/linux/i386/sysconf.c | 2 + libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h | 54 ++++++- libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h | 3 +- libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h | 54 ++++++- libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h | 56 ++++++- libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h | 49 +++++- libc/sysdeps/unix/sysv/linux/sync_file_range.c | 43 ++++-- libc/sysdeps/unix/sysv/linux/sys/timex.h | 88 +---------- libc/sysdeps/unix/sysv/linux/syscalls.list | 4 + .../unix/sysv/linux/wordsize-64/fallocate.c | 16 +- .../unix/sysv/linux/wordsize-64/syscalls.list | 2 +- libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h | 57 ++++++- libc/sysdeps/x86_64/cacheinfo.c | 2 + libc/time/time.h | 6 +- libc/wcsmbs/wchar.h | 10 +- ports/ChangeLog.alpha | 5 + ports/ChangeLog.arm | 58 +++++++ ports/ChangeLog.mips | 35 +++++ ports/sysdeps/arm/linuxthreads/pspinlock.c | 82 ---------- ports/sysdeps/arm/linuxthreads/pt-machine.h | 55 ------- ports/sysdeps/arm/linuxthreads/tls.h | 172 --------------------- ports/sysdeps/mips/dl-lookup.c | 18 ++- .../unix/sysv/linux/alpha/____longjmp_chk.S | 21 ++- ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h | 49 +++++- .../unix/sysv/linux/arm/eabi/____longjmp_chk.S | 13 +- .../linux/arm/eabi/linuxthreads/sysdep-cancel.h | 116 -------------- .../unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h | 104 ++++++------- ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h | 91 ++++++++++- .../unix/sysv/linux/arm/linuxthreads/fork.c | 1 - .../sysv/linux/arm/linuxthreads/sysdep-cancel.h | 129 ---------------- .../unix/sysv/linux/arm/linuxthreads/vfork.S | 78 ---------- ports/sysdeps/unix/sysv/linux/arm/vfork.S | 23 ++- ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h | 49 +++++- .../unix/sysv/linux/mips/mips32/sync_file_range.c | 25 ++- .../unix/sysv/linux/mips/mips64/n32/fallocate.c | 16 +- .../unix/sysv/linux/mips/mips64/n32/fallocate64.c | 16 +- .../unix/sysv/linux/mips/mips64/n32/syscalls.list | 2 +- .../unix/sysv/linux/mips/mips64/n64/syscalls.list | 2 + 65 files changed, 1343 insertions(+), 985 deletions(-) create mode 100644 libc/misc/syncfs.c create mode 100644 libc/sysdeps/unix/sysv/linux/bits/time.h create mode 100644 libc/sysdeps/unix/sysv/linux/bits/timex.h create mode 100644 libc/sysdeps/unix/sysv/linux/i386/call_sync_file_range.S delete mode 100644 libc/sysdeps/unix/sysv/linux/i386/sync_file_range.S create mode 100644 libc/sysdeps/unix/sysv/linux/i386/sync_file_range.c delete mode 100644 ports/sysdeps/arm/linuxthreads/pspinlock.c delete mode 100644 ports/sysdeps/arm/linuxthreads/pt-machine.h delete mode 100644 ports/sysdeps/arm/linuxthreads/tls.h delete mode 100644 ports/sysdeps/unix/sysv/linux/arm/eabi/linuxthreads/sysdep-cancel.h delete mode 100644 ports/sysdeps/unix/sysv/linux/arm/linuxthreads/fork.c delete mode 100644 ports/sysdeps/unix/sysv/linux/arm/linuxthreads/sysdep-cancel.h delete mode 100644 ports/sysdeps/unix/sysv/linux/arm/linuxthreads/vfork.S diff --git a/libc/ChangeLog b/libc/ChangeLog index 8e5956043..c4cf88279 100644 --- a/libc/ChangeLog +++ b/libc/ChangeLog @@ -1,3 +1,98 @@ +2011-03-30 Andreas Schwab + + * misc/syncfs.c: New file. + * misc/Makefile (routines): Add syncfs. + * posix/unistd.h: Declare syncfs. + * sysdeps/unix/syscalls.list: Add syncfs. + +2011-04-01 Andreas Schwab + + * sysdeps/unix/sysv/linux/Versions: Rename open_by_handle to + open_by_handle_at. + * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/s390/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/sh/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/syscalls.list: Likewise. + * sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h: Likewise. + +2011-04-01 Ulrich Drepper + + * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Define O_PATH. + * sysdeps/unix/sysv/linux/ia64/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/s390/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/sh/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h: Likewise. + + * io/Makefile: Compile fallocate.c, fallocate64.c, and + sync_file_range.c with -fexceptions. + * sysdeps/unix/sysv/linux/fallocate.c: Make cancelable. + * sysdeps/unix/sysv/linux/fallocate64.c: Likewise. + * sysdeps/unix/sysv/linux/i386/fallocate.c: Likewise. + * sysdeps/unix/sysv/linux/i386/fallocate64.c: Likewise. + * sysdeps/unix/sysv/linux/wordsize-64/fallocate.c: Likewise. + * sysdeps/unix/sysv/linux/sync_file_range.c: Likewise. + * sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Mark + sync_file_range as cancellation point + * sysdeps/unix/sysv/linux/i386/sync_file_range.c: New file. This is + now a wrapper around __call_sync_file_range with cancellation handling. + * sysdeps/unix/sysv/linux/i386/sync_file_range.S: Renamed to ... + * sysdeps/unix/sysv/linux/i386/call_sync_file_range.S: ...this. Change + function name to __call_sync_file_range. + * sysdeps/unix/sysv/linux/i386/Makefile [subdir=io] (sysdep_routines): + Add call_sync_file_range. + +2011-04-01 Andreas Schwab + + * sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add + bits/timex.h. + +2011-04-01 Ulrich Drepper + + * iconv/iconv.h: Fix typo in comment. + * io/fcntl.h: Likewise. + * libio/stdio.h: Likewise. + * posix/spawn.h: Likewise. + * posix/unistd.h: Likewise. + * stdlib/stdlib.h: Likewise. + * time/time.h: Likewise. + * wcsmbs/wchar.h: Likewise. + + * sysdeps/unix/sysv/linux/Versions [GLIBC_2.14] (name_to_handle_at, + open_by_handle): Add. + * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Define struct file_handle + and MAX_HANDLE_SZ. Declare name_to_handle_at and open_by_handle. + Augment a few comments. + * sysdeps/unix/sysv/linux/ia64/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/s390/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/sh/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/syscalls.list: Add name_to_handle_at and + open_by_handle. + + * io/fcntl.h (AT_EMPTY_PATH): Define. + +2011-03-30 Ulrich Drepper + + * sysdeps/unix/sysv/linux/syscalls.list: Add clock_adjtime. + * sysdeps/unix/sysv/linux/bits/time.h: New file. + * sysdeps/unix/sysv/linux/sys/timex.h: Move struct timex definition + to... + * sysdeps/unix/sysv/linux/bits/timex.h: ...here. New file. + * Versions.def: Add GLIBC_2.14. + * sysdeps/unix/sysv/linux/Versions [GLIBC_2.14] (clock_adjtime): + Export. + +2011-03-22 Ulrich Drepper + + * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word): Increment + round counter. + * sysdeps/x86_64/cacheinfo.c (intel_check_word): Likewise. + 2011-03-20 H.J. Lu [BZ #12597] diff --git a/libc/NEWS b/libc/NEWS index 4557b4578..8aa9316d5 100644 --- a/libc/NEWS +++ b/libc/NEWS @@ -1,4 +1,4 @@ -GNU C Library NEWS -- history of user-visible changes. 2011-3-21 +GNU C Library NEWS -- history of user-visible changes. 2011-4-1 Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc. See the end for copying conditions. @@ -7,6 +7,8 @@ using `glibc' in the "product" field. Version 2.14 +* New Linux interfaces: clock_adjtime, name_to_handle_at, open_by_handle_at + * The following bugs are resolved with this release: 11724, 12445, 12454, 12460, 12469, 12489, 12509, 12510, 12583, 12587, 12597 diff --git a/libc/Versions.def b/libc/Versions.def index 0ccda50da..e478fdd9e 100644 --- a/libc/Versions.def +++ b/libc/Versions.def @@ -30,6 +30,7 @@ libc { GLIBC_2.11 GLIBC_2.12 GLIBC_2.13 + GLIBC_2.14 %ifdef USE_IN_LIBIO HURD_CTHREADS_0.3 %endif diff --git a/libc/iconv/iconv.h b/libc/iconv/iconv.h index 9aebf9bc7..1d9b79bba 100644 --- a/libc/iconv/iconv.h +++ b/libc/iconv/iconv.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1997-2000, 2003, 2011 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 @@ -33,7 +33,7 @@ typedef void *iconv_t; /* Allocate descriptor for code conversion from codeset FROMCODE to codeset TOCODE. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern iconv_t iconv_open (__const char *__tocode, __const char *__fromcode); @@ -47,7 +47,7 @@ extern size_t iconv (iconv_t __cd, char **__restrict __inbuf, /* Free resources allocated for descriptor CD for code conversion. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern int iconv_close (iconv_t __cd); diff --git a/libc/io/Makefile b/libc/io/Makefile index c8a317922..fb97a1ed9 100644 --- a/libc/io/Makefile +++ b/libc/io/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1992-2003,2005,2006,2007,2008 Free Software Foundation, Inc. +# Copyright (C) 1992-2003,2005-2008,2011 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 @@ -96,6 +96,9 @@ CFLAGS-ftw64.c = $(uses-callbacks) -fexceptions CFLAGS-lockf.c = -fexceptions CFLAGS-posix_fallocate.c = -fexceptions CFLAGS-posix_fallocate64.c = -fexceptions +CFLAGS-fallocate.c = -fexceptions +CFLAGS-fallocate64.c = -fexceptions +CFLAGS-sync_file_range.c = -fexceptions CFLAGS-test-stat.c = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE CFLAGS-test-lfs.c = -D_LARGEFILE64_SOURCE diff --git a/libc/io/fcntl.h b/libc/io/fcntl.h index 0b6b047b4..c582a9e6f 100644 --- a/libc/io/fcntl.h +++ b/libc/io/fcntl.h @@ -112,6 +112,7 @@ __BEGIN_DECLS # define AT_SYMLINK_FOLLOW 0x400 /* Follow symbolic links. */ # define AT_NO_AUTOMOUNT 0x800 /* Suppress terminal automount traversal. */ +# define AT_EMPTY_PATH 0x1000 /* Allow empty relative pathname. */ # define AT_EACCESS 0x200 /* Test access permitted for effective IDs, not real IDs. */ #endif @@ -241,7 +242,7 @@ extern int posix_fadvise64 (int __fd, __off64_t __offset, __off64_t __len, /* Reserve storage for the data of the file associated with FD. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int posix_fallocate (int __fd, __off_t __offset, __off_t __len); diff --git a/libc/libio/stdio.h b/libc/libio/stdio.h index bf16b3fff..962c287c6 100644 --- a/libc/libio/stdio.h +++ b/libc/libio/stdio.h @@ -1,5 +1,5 @@ /* Define ISO C stdio on top of C++ iostreams. - Copyright (C) 1991, 1994-2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1991, 1994-2010, 2011 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 @@ -186,7 +186,7 @@ extern int renameat (int __oldfd, __const char *__old, int __newfd, __BEGIN_NAMESPACE_STD /* Create a temporary file and open it read/write. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ #ifndef __USE_FILE_OFFSET64 extern FILE *tmpfile (void) __wur; @@ -677,33 +677,33 @@ extern _IO_ssize_t getline (char **__restrict __lineptr, __BEGIN_NAMESPACE_STD /* Write a string to STREAM. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern int fputs (__const char *__restrict __s, FILE *__restrict __stream); /* Write a string, followed by a newline, to stdout. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern int puts (__const char *__s); /* Push a character back onto the input buffer of STREAM. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern int ungetc (int __c, FILE *__stream); /* Read chunks of generic data from STREAM. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern size_t fread (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __wur; /* Write chunks of generic data to STREAM. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern size_t fwrite (__const void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __s) __wur; diff --git a/libc/misc/Makefile b/libc/misc/Makefile index 65dd1aada..f52c9a3c6 100644 --- a/libc/misc/Makefile +++ b/libc/misc/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991-2006, 2007, 2009 Free Software Foundation, Inc. +# Copyright (C) 1991-2006, 2007, 2009, 2011 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 @@ -45,7 +45,7 @@ routines := brk sbrk sstk ioctl \ getdtsz \ gethostname sethostname getdomain setdomain \ select pselect \ - acct chroot fsync sync fdatasync reboot \ + acct chroot fsync sync fdatasync syncfs reboot \ gethostid sethostid \ vhangup \ swapon swapoff mktemp mkstemp mkstemp64 mkdtemp \ diff --git a/libc/misc/Versions b/libc/misc/Versions index 3ffe3d138..3a31c7fe6 100644 --- a/libc/misc/Versions +++ b/libc/misc/Versions @@ -143,4 +143,7 @@ libc { GLIBC_2.11 { mkstemps; mkstemps64; mkostemps; mkostemps64; } + GLIBC_2.14 { + syncfs; + } } diff --git a/libc/misc/syncfs.c b/libc/misc/syncfs.c new file mode 100644 index 000000000..bd7328cf8 --- /dev/null +++ b/libc/misc/syncfs.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2011 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include +#include + +/* Make all changes done to all files on the file system associated + with FD actually appear on disk. */ +int +syncfs (int fd) +{ + __set_errno (ENOSYS); + return -1; +} + + +stub_warning (syncfs) +#include diff --git a/libc/posix/spawn.h b/libc/posix/spawn.h index 85ac69bf4..3eefa0fad 100644 --- a/libc/posix/spawn.h +++ b/libc/posix/spawn.h @@ -1,5 +1,5 @@ /* Definitions for POSIX spawn interface. - Copyright (C) 2000, 2003, 2004, 2009 Free Software Foundation, Inc. + Copyright (C) 2000, 2003, 2004, 2009, 2011 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 @@ -67,7 +67,7 @@ __BEGIN_DECLS /* Spawn a new process executing PATH with the attributes describes in *ATTRP. Before running the process perform the actions described in FILE-ACTIONS. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern int posix_spawn (pid_t *__restrict __pid, __const char *__restrict __path, @@ -79,7 +79,7 @@ extern int posix_spawn (pid_t *__restrict __pid, /* Similar to `posix_spawn' but search for FILE in the PATH. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern int posix_spawnp (pid_t *__pid, __const char *__file, __const posix_spawn_file_actions_t *__file_actions, diff --git a/libc/posix/unistd.h b/libc/posix/unistd.h index 00b775192..d15643194 100644 --- a/libc/posix/unistd.h +++ b/libc/posix/unistd.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2009, 2010 Free Software Foundation, Inc. +/* Copyright (C) 1991-2009, 2010, 2011 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 @@ -863,7 +863,7 @@ extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __THROW; /* Return the login name of the user. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern char *getlogin (void); #if defined __USE_REENTRANT || defined __USE_POSIX199506 @@ -871,7 +871,7 @@ extern char *getlogin (void); If it cannot be determined or some other error occurred, return the error code. Otherwise return 0. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern int getlogin_r (char *__name, size_t __name_len) __nonnull ((1)); #endif @@ -977,6 +977,13 @@ extern int fsync (int __fd); #endif /* Use BSD || X/Open || Unix98. */ +#ifdef __USE_GNU +/* Make all changes done to all files on the file system associated + with FD actually appear on disk. */ +extern int syncfs (int __fd) __THROW; +#endif + + #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED /* Return identifier for the current host. */ diff --git a/libc/stdlib/stdlib.h b/libc/stdlib/stdlib.h index d1f3841f1..f7d128c3d 100644 --- a/libc/stdlib/stdlib.h +++ b/libc/stdlib/stdlib.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2007, 2009, 2010 Free Software Foundation, Inc. +/* Copyright (C) 1991-2007, 2009, 2010, 2011 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 @@ -668,7 +668,7 @@ extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur; mkstemp. But allow the caller to pass additional flags which are used in the open call to create the file.. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur; diff --git a/libc/sysdeps/unix/syscalls.list b/libc/sysdeps/unix/syscalls.list index 04ed63c4d..ad4917078 100644 --- a/libc/sysdeps/unix/syscalls.list +++ b/libc/sysdeps/unix/syscalls.list @@ -55,6 +55,7 @@ swapoff - swapoff i:s swapoff swapon - swapon i:s swapon symlink - symlink i:ss __symlink symlink sync - sync i: sync +syncfs - syncfs i:i syncfs sys_fstat fxstat fstat i:ip __syscall_fstat sys_mknod xmknod mknod i:sii __syscall_mknod sys_stat xstat stat i:sp __syscall_stat diff --git a/libc/sysdeps/unix/sysv/linux/Makefile b/libc/sysdeps/unix/sysv/linux/Makefile index ba572350a..84679c2e3 100644 --- a/libc/sysdeps/unix/sysv/linux/Makefile +++ b/libc/sysdeps/unix/sysv/linux/Makefile @@ -96,7 +96,7 @@ generated += syscall-list.h syscall-list.d endif ifeq ($(subdir),time) -sysdep_headers += sys/timex.h +sysdep_headers += sys/timex.h bits/timex.h sysdep_routines += ntp_gettime ntp_gettimex endif diff --git a/libc/sysdeps/unix/sysv/linux/Versions b/libc/sysdeps/unix/sysv/linux/Versions index c66e04fee..29099dc5c 100644 --- a/libc/sysdeps/unix/sysv/linux/Versions +++ b/libc/sysdeps/unix/sysv/linux/Versions @@ -154,6 +154,11 @@ libc { fanotify_init; fanotify_mark; } + GLIBC_2.14 { + clock_adjtime; + + name_to_handle_at; open_by_handle_at; + } GLIBC_PRIVATE { # functions used in other libraries __syscall_rt_sigqueueinfo; diff --git a/libc/sysdeps/unix/sysv/linux/bits/time.h b/libc/sysdeps/unix/sysv/linux/bits/time.h new file mode 100644 index 000000000..02a05114f --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/bits/time.h @@ -0,0 +1,93 @@ +/* System-dependent timing definitions. Linux version. + Copyright (C) 1996,1997,1999-2003,2010,2011 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* + * Never include this file directly; use instead. + */ + +#if defined __need_timeval || defined __USE_GNU +# ifndef _STRUCT_TIMEVAL +# define _STRUCT_TIMEVAL 1 +# include + +/* A time value that is accurate to the nearest + microsecond but also has a range of years. */ +struct timeval + { + __time_t tv_sec; /* Seconds. */ + __suseconds_t tv_usec; /* Microseconds. */ + }; +# endif /* struct timeval */ +#endif + +#ifndef __need_timeval +# ifndef _BITS_TIME_H +# define _BITS_TIME_H 1 + +/* ISO/IEC 9899:1990 7.12.1: + The macro `CLOCKS_PER_SEC' is the number per second of the value + returned by the `clock' function. */ +/* CAE XSH, Issue 4, Version 2: + The value of CLOCKS_PER_SEC is required to be 1 million on all + XSI-conformant systems. */ +# define CLOCKS_PER_SEC 1000000l + +# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K +/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK + presents the real value for clock ticks per second for the system. */ +# include +extern long int __sysconf (int); +# define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */ +# endif + +# ifdef __USE_POSIX199309 +/* Identifier for system-wide realtime clock. */ +# define CLOCK_REALTIME 0 +/* Monotonic system-wide clock. */ +# define CLOCK_MONOTONIC 1 +/* High-resolution timer from the CPU. */ +# define CLOCK_PROCESS_CPUTIME_ID 2 +/* Thread-specific CPU-time clock. */ +# define CLOCK_THREAD_CPUTIME_ID 3 +/* Monotonic system-wide clock, not adjusted for frequency scaling. */ +# define CLOCK_MONOTONIC_RAW 4 +/* Identifier for system-wide realtime clock, updated only on ticks. */ +# define CLOCK_REALTIME_COARSE 5 +/* Monotonic system-wide clock, updated only on ticks. */ +# define CLOCK_MONOTONIC_COARSE 6 + +/* Flag to indicate time is absolute. */ +# define TIMER_ABSTIME 1 +# endif + +# ifdef __USE_GNU +# include + +__BEGIN_DECLS + +/* Tune a POSIX clock. */ +extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW; + +__END_DECLS +# endif /* use GNU */ + +# endif /* bits/time.h */ +#endif + +#undef __need_timeval diff --git a/libc/sysdeps/unix/sysv/linux/bits/timex.h b/libc/sysdeps/unix/sysv/linux/bits/timex.h new file mode 100644 index 000000000..67de67e1c --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/bits/timex.h @@ -0,0 +1,108 @@ +/* Copyright (C) 1995-1997,1999,2007,2009,2011 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _BITS_TIMEX_H +#define _BITS_TIMEX_H 1 + +/* These definitions from linux/timex.h as of 2.6.30. */ + +struct timex +{ + unsigned int modes; /* mode selector */ + long int offset; /* time offset (usec) */ + long int freq; /* frequency offset (scaled ppm) */ + long int maxerror; /* maximum error (usec) */ + long int esterror; /* estimated error (usec) */ + int status; /* clock command/status */ + long int constant; /* pll time constant */ + long int precision; /* clock precision (usec) (read only) */ + long int tolerance; /* clock frequency tolerance (ppm) (read only) */ + struct timeval time; /* (read only) */ + long int tick; /* (modified) usecs between clock ticks */ + + long int ppsfreq; /* pps frequency (scaled ppm) (ro) */ + long int jitter; /* pps jitter (us) (ro) */ + int shift; /* interval duration (s) (shift) (ro) */ + long int stabil; /* pps stability (scaled ppm) (ro) */ + long int jitcnt; /* jitter limit exceeded (ro) */ + long int calcnt; /* calibration intervals (ro) */ + long int errcnt; /* calibration errors (ro) */ + long int stbcnt; /* stability limit exceeded (ro) */ + + int tai; /* TAI offset (ro) */ + + /* ??? */ + int :32; int :32; int :32; int :32; + int :32; int :32; int :32; int :32; + int :32; int :32; int :32; +}; + +/* Mode codes (timex.mode) */ +#define ADJ_OFFSET 0x0001 /* time offset */ +#define ADJ_FREQUENCY 0x0002 /* frequency offset */ +#define ADJ_MAXERROR 0x0004 /* maximum time error */ +#define ADJ_ESTERROR 0x0008 /* estimated time error */ +#define ADJ_STATUS 0x0010 /* clock status */ +#define ADJ_TIMECONST 0x0020 /* pll time constant */ +#define ADJ_TAI 0x0080 /* set TAI offset */ +#define ADJ_MICRO 0x1000 /* select microsecond resolution */ +#define ADJ_NANO 0x2000 /* select nanosecond resolution */ +#define ADJ_TICK 0x4000 /* tick value */ +#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ +#define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */ + +/* xntp 3.4 compatibility names */ +#define MOD_OFFSET ADJ_OFFSET +#define MOD_FREQUENCY ADJ_FREQUENCY +#define MOD_MAXERROR ADJ_MAXERROR +#define MOD_ESTERROR ADJ_ESTERROR +#define MOD_STATUS ADJ_STATUS +#define MOD_TIMECONST ADJ_TIMECONST +#define MOD_CLKB ADJ_TICK +#define MOD_CLKA ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */ +#define MOD_TAI ADJ_TAI +#define MOD_MICRO ADJ_MICRO +#define MOD_NANO ADJ_NANO + + +/* Status codes (timex.status) */ +#define STA_PLL 0x0001 /* enable PLL updates (rw) */ +#define STA_PPSFREQ 0x0002 /* enable PPS freq discipline (rw) */ +#define STA_PPSTIME 0x0004 /* enable PPS time discipline (rw) */ +#define STA_FLL 0x0008 /* select frequency-lock mode (rw) */ + +#define STA_INS 0x0010 /* insert leap (rw) */ +#define STA_DEL 0x0020 /* delete leap (rw) */ +#define STA_UNSYNC 0x0040 /* clock unsynchronized (rw) */ +#define STA_FREQHOLD 0x0080 /* hold frequency (rw) */ + +#define STA_PPSSIGNAL 0x0100 /* PPS signal present (ro) */ +#define STA_PPSJITTER 0x0200 /* PPS signal jitter exceeded (ro) */ +#define STA_PPSWANDER 0x0400 /* PPS signal wander exceeded (ro) */ +#define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */ + +#define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */ +#define STA_NANO 0x2000 /* resolution (0 = us, 1 = ns) (ro) */ +#define STA_MODE 0x4000 /* mode (0 = PLL, 1 = FLL) (ro) */ +#define STA_CLK 0x8000 /* clock source (0 = A, 1 = B) (ro) */ + +/* Read-only bits */ +#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ + STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK) + +#endif /* bits/timex.h */ diff --git a/libc/sysdeps/unix/sysv/linux/fallocate.c b/libc/sysdeps/unix/sysv/linux/fallocate.c index dc2b4e92c..a7d3ff079 100644 --- a/libc/sysdeps/unix/sysv/linux/fallocate.c +++ b/libc/sysdeps/unix/sysv/linux/fallocate.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 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 @@ -18,7 +18,7 @@ #include #include -#include +#include /* Reserve storage for the data of the file associated with FD. */ @@ -26,9 +26,21 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - return INLINE_SYSCALL (fallocate, 6, fd, mode, - __LONG_LONG_PAIR (offset >> 31, offset), - __LONG_LONG_PAIR (len >> 31, len)); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (fallocate, 6, fd, mode, + __LONG_LONG_PAIR (offset >> 31, offset), + __LONG_LONG_PAIR (len >> 31, len)); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (fallocate, 6, fd, mode, + __LONG_LONG_PAIR (offset >> 31, offset), + __LONG_LONG_PAIR (len >> 31, len)); + + LIBC_CANCEL_RESET (oldtype); + + return result; #else __set_errno (ENOSYS); return -1; diff --git a/libc/sysdeps/unix/sysv/linux/fallocate64.c b/libc/sysdeps/unix/sysv/linux/fallocate64.c index 751a7b227..5cfd76d39 100644 --- a/libc/sysdeps/unix/sysv/linux/fallocate64.c +++ b/libc/sysdeps/unix/sysv/linux/fallocate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 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 @@ -18,7 +18,7 @@ #include #include -#include +#include /* Reserve storage for the data of the file associated with FD. */ @@ -26,11 +26,25 @@ int fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) { #ifdef __NR_fallocate - return INLINE_SYSCALL (fallocate, 6, fd, mode, - __LONG_LONG_PAIR ((long int) (offset >> 32), - (long int) offset), - __LONG_LONG_PAIR ((long int) (len >> 32), - (long int) len)); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (fallocate, 6, fd, mode, + __LONG_LONG_PAIR ((long int) (offset >> 32), + (long int) offset), + __LONG_LONG_PAIR ((long int) (len >> 32), + (long int) len)); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (fallocate, 6, fd, mode, + __LONG_LONG_PAIR ((long int) (offset >> 32), + (long int) offset), + __LONG_LONG_PAIR ((long int) (len >> 32), + (long int) len)); + + LIBC_CANCEL_RESET (oldtype); + + return result; #else __set_errno (ENOSYS); return -1; diff --git a/libc/sysdeps/unix/sysv/linux/i386/Makefile b/libc/sysdeps/unix/sysv/linux/i386/Makefile index f52ee89f0..fc5a524eb 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/Makefile +++ b/libc/sysdeps/unix/sysv/linux/i386/Makefile @@ -6,7 +6,10 @@ endif ifeq ($(subdir),elf) sysdep-others += lddlibc4 install-bin += lddlibc4 +endif +ifeq ($(subdir),io) +sysdep_routines += call_sync_file_range endif ifeq ($(subdir),resource) diff --git a/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h index 944a3209b..6ff59bc42 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995, 1996, 1997, 1998, 2000, 2004, 2006, 2007, 2009, 2010 + Copyright (C) 1995-1998, 2000, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,6 +53,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif /* For now Linux has synchronisity options for data and read operations. @@ -232,6 +233,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -248,20 +262,32 @@ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -278,6 +304,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/i386/call_sync_file_range.S b/libc/sysdeps/unix/sysv/linux/i386/call_sync_file_range.S new file mode 100644 index 000000000..fb0ab492c --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/i386/call_sync_file_range.S @@ -0,0 +1,72 @@ +/* Selective file content synch'ing. + Copyright (C) 2006, 2007, 2011 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include +#define _ERRNO_H 1 +#include + + + .text +ENTRY (__call_sync_file_range) +#ifdef __NR_sync_file_range + pushl %ebx + cfi_adjust_cfa_offset (4) + pushl %esi + cfi_adjust_cfa_offset (4) + pushl %edi + cfi_adjust_cfa_offset (4) + pushl %ebp + cfi_adjust_cfa_offset (4) + + movl 20(%esp), %ebx + cfi_rel_offset (ebx, 12) + movl 24(%esp), %ecx + movl 28(%esp), %edx + movl 32(%esp), %esi + cfi_rel_offset (esi, 8) + movl 36(%esp), %edi + cfi_rel_offset (edi, 4) + movl 40(%esp), %ebp + cfi_rel_offset (ebp, 0) + + movl $SYS_ify(sync_file_range), %eax + ENTER_KERNEL + + popl %ebp + cfi_adjust_cfa_offset (-4) + cfi_restore (ebp) + popl %edi + cfi_adjust_cfa_offset (-4) + cfi_restore (edi) + popl %esi + cfi_adjust_cfa_offset (-4) + cfi_restore (esi) + popl %ebx + cfi_adjust_cfa_offset (-4) + cfi_restore (ebx) + + cmpl $-4095, %eax + jae SYSCALL_ERROR_LABEL +#else + movl $-ENOSYS, %eax + jmp SYSCALL_ERROR_LABEL +#endif +L(pseudo_end): + ret +PSEUDO_END (__call_sync_file_range) diff --git a/libc/sysdeps/unix/sysv/linux/i386/fallocate.c b/libc/sysdeps/unix/sysv/linux/i386/fallocate.c index 1434a833f..33e20753d 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/fallocate.c +++ b/libc/sysdeps/unix/sysv/linux/i386/fallocate.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 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 @@ -18,7 +18,7 @@ #include #include -#include +#include extern int __call_fallocate (int fd, int mode, __off64_t offset, __off64_t len) @@ -30,7 +30,17 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - int err = __call_fallocate (fd, mode, offset, len); + int err; + if (SINGLE_THREAD_P) + err = __call_fallocate (fd, mode, offset, len); + else + { + int oldtype = LIBC_CANCEL_ASYNC (); + + err = __call_fallocate (fd, mode, offset, len); + + LIBC_CANCEL_RESET (oldtype); + } if (__builtin_expect (err, 0)) { __set_errno (err); diff --git a/libc/sysdeps/unix/sysv/linux/i386/fallocate64.c b/libc/sysdeps/unix/sysv/linux/i386/fallocate64.c index 063bab06e..83372a92f 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/fallocate64.c +++ b/libc/sysdeps/unix/sysv/linux/i386/fallocate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 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 @@ -18,7 +18,7 @@ #include #include -#include +#include extern int __call_fallocate (int fd, int mode, __off64_t offset, __off64_t len) @@ -30,7 +30,17 @@ int fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) { #ifdef __NR_fallocate - int err = __call_fallocate (fd, mode, offset, len); + int err; + if (SINGLE_THREAD_P) + err = __call_fallocate (fd, mode, offset, len); + else + { + int oldtype = LIBC_CANCEL_ASYNC (); + + err = __call_fallocate (fd, mode, offset, len); + + LIBC_CANCEL_RESET (oldtype); + } if (__builtin_expect (err, 0)) { __set_errno (err); diff --git a/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.S b/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.S deleted file mode 100644 index 8544703d5..000000000 --- a/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Selective file content synch'ing. - Copyright (C) 2006, 2007 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include -#define _ERRNO_H 1 -#include - - - .text -ENTRY (sync_file_range) -#ifdef __NR_sync_file_range - pushl %ebx - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - - movl 20(%esp), %ebx - cfi_rel_offset (ebx, 12) - movl 24(%esp), %ecx - movl 28(%esp), %edx - movl 32(%esp), %esi - cfi_rel_offset (esi, 8) - movl 36(%esp), %edi - cfi_rel_offset (edi, 4) - movl 40(%esp), %ebp - cfi_rel_offset (ebp, 0) - - movl $SYS_ify(sync_file_range), %eax - ENTER_KERNEL - - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - - cmpl $-4095, %eax - jae SYSCALL_ERROR_LABEL -#else - movl $-ENOSYS, %eax - jmp SYSCALL_ERROR_LABEL -#endif -L(pseudo_end): - ret -PSEUDO_END (sync_file_range) diff --git a/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.c b/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.c new file mode 100644 index 000000000..c10e99604 --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.c @@ -0,0 +1,44 @@ +/* Selective file content synch'ing. + Copyright (C) 2006, 2007, 2011 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include +#include +#include + + +extern int __call_sync_file_range (int fd, off64_t offset, off64_t nbytes, + unsigned int flags) + attribute_hidden; + + +int +sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) +{ + if (SINGLE_THREAD_P) + return __call_sync_file_range (fd, from, to, flags); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = __call_sync_file_range (fd, from, to, flags); + + LIBC_CANCEL_RESET (oldtype); + + return result; +} diff --git a/libc/sysdeps/unix/sysv/linux/i386/sysconf.c b/libc/sysdeps/unix/sysv/linux/i386/sysconf.c index 4ea1a2bf5..1f5d3b06b 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/sysconf.c +++ b/libc/sysdeps/unix/sysv/linux/i386/sysconf.c @@ -231,6 +231,8 @@ intel_check_word (int name, unsigned int value, bool *has_level_2, assert (offset == 2); return (ebx & 0xfff) + 1; } + + ++round; } /* There is no other cache information anywhere else. */ break; diff --git a/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h index 2189a9722..72f4b6cea 100644 --- a/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/IA64. - Copyright (C) 1999, 2000, 2004, 2006, 2007, 2009, 2010 + Copyright (C) 1999, 2000, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,6 +53,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif #ifdef __USE_LARGEFILE64 @@ -227,6 +228,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -238,25 +252,40 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -273,6 +302,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h index ea760f64a..e533ed1b6 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/PowerPC. - Copyright (C) 1995-1998, 2000, 2003, 2004, 2006, 2007, 2009, 2010 + Copyright (C) 1995-1998, 2000, 2003, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,6 +53,7 @@ #ifdef __USE_GNU # define O_DIRECT 0400000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif #ifdef __USE_LARGEFILE64 diff --git a/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h index 05c7a3ba8..df039685a 100644 --- a/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 2000-2002,2004,2006,2007,2009,2010 + Copyright (C) 2000-2002,2004,2006,2007,2009,2010,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -54,6 +54,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif #ifdef __USE_LARGEFILE64 @@ -253,6 +254,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -264,25 +278,40 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -299,6 +328,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h index df21f6af4..bf2aa83c1 100644 --- a/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h @@ -1,5 +1,5 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995, 1996, 1997, 1998, 2000, 2004, 2006, 2007, 2009, 2010 +/* O_*, F_*, FD_* bit values for Linux/SH. + Copyright (C) 1995-1998, 2000, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -54,6 +54,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif /* For now Linux has synchronisity options for data and read operations. @@ -233,6 +234,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -244,25 +258,40 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -279,6 +308,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h index bf8f3d60e..1271a12ce 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/SPARC. - Copyright (C) 1995-1998, 2000, 2003, 2004, 2006, 2007, 2009, 2010 + Copyright (C) 1995-1998, 2000, 2003, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -52,6 +52,7 @@ #ifdef __USE_GNU # define O_DIRECT 0x100000 /* direct disk access hint */ # define O_NOATIME 0x200000 /* Do not set atime. */ +# define O_PATH 0x1000000 /* Resolve pathname but do not open file. */ #endif #ifdef __USE_LARGEFILE64 @@ -243,6 +244,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -254,7 +268,10 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); @@ -263,16 +280,25 @@ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -289,6 +315,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/sync_file_range.c b/libc/sysdeps/unix/sysv/linux/sync_file_range.c index 41e08e028..1b20d6ce0 100644 --- a/libc/sysdeps/unix/sysv/linux/sync_file_range.c +++ b/libc/sysdeps/unix/sysv/linux/sync_file_range.c @@ -1,5 +1,5 @@ /* Selective file content synch'ing. - Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. + Copyright (C) 2006, 2007, 2009, 2011 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 @@ -21,7 +21,7 @@ #include #include -#include +#include #include @@ -29,18 +29,43 @@ int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) { - return INLINE_SYSCALL (sync_file_range, 6, fd, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), - flags); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (sync_file_range, 6, fd, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), + flags); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (sync_file_range, 6, fd, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), + flags); + + LIBC_CANCEL_RESET (oldtype); + + return result; } #elif defined __NR_sync_file_range2 int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) { - return INLINE_SYSCALL (sync_file_range2, 6, fd, flags, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (sync_file_range2, 6, fd, flags, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (sync_file_range2, 6, fd, flags, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); + + LIBC_CANCEL_RESET (oldtype); + + return result; } #else int diff --git a/libc/sysdeps/unix/sysv/linux/sys/timex.h b/libc/sysdeps/unix/sysv/linux/sys/timex.h index 13b94d6f4..de61bb54d 100644 --- a/libc/sysdeps/unix/sysv/linux/sys/timex.h +++ b/libc/sysdeps/unix/sysv/linux/sys/timex.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-1997, 1999, 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1995-1997,1999,2007,2009,2011 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 @@ -24,6 +24,8 @@ /* These definitions from linux/timex.h as of 2.6.30. */ +#include + #define NTP_API 4 /* NTP API version */ struct ntptimeval @@ -39,90 +41,6 @@ struct ntptimeval long int __unused4; }; -struct timex -{ - unsigned int modes; /* mode selector */ - long int offset; /* time offset (usec) */ - long int freq; /* frequency offset (scaled ppm) */ - long int maxerror; /* maximum error (usec) */ - long int esterror; /* estimated error (usec) */ - int status; /* clock command/status */ - long int constant; /* pll time constant */ - long int precision; /* clock precision (usec) (read only) */ - long int tolerance; /* clock frequency tolerance (ppm) (read only) */ - struct timeval time; /* (read only) */ - long int tick; /* (modified) usecs between clock ticks */ - - long int ppsfreq; /* pps frequency (scaled ppm) (ro) */ - long int jitter; /* pps jitter (us) (ro) */ - int shift; /* interval duration (s) (shift) (ro) */ - long int stabil; /* pps stability (scaled ppm) (ro) */ - long int jitcnt; /* jitter limit exceeded (ro) */ - long int calcnt; /* calibration intervals (ro) */ - long int errcnt; /* calibration errors (ro) */ - long int stbcnt; /* stability limit exceeded (ro) */ - - int tai; /* TAI offset (ro) */ - - /* ??? */ - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; -}; - -/* Mode codes (timex.mode) */ -#define ADJ_OFFSET 0x0001 /* time offset */ -#define ADJ_FREQUENCY 0x0002 /* frequency offset */ -#define ADJ_MAXERROR 0x0004 /* maximum time error */ -#define ADJ_ESTERROR 0x0008 /* estimated time error */ -#define ADJ_STATUS 0x0010 /* clock status */ -#define ADJ_TIMECONST 0x0020 /* pll time constant */ -#define ADJ_TAI 0x0080 /* set TAI offset */ -#define ADJ_MICRO 0x1000 /* select microsecond resolution */ -#define ADJ_NANO 0x2000 /* select nanosecond resolution */ -#define ADJ_TICK 0x4000 /* tick value */ -#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ -#define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */ - -/* xntp 3.4 compatibility names */ -#define MOD_OFFSET ADJ_OFFSET -#define MOD_FREQUENCY ADJ_FREQUENCY -#define MOD_MAXERROR ADJ_MAXERROR -#define MOD_ESTERROR ADJ_ESTERROR -#define MOD_STATUS ADJ_STATUS -#define MOD_TIMECONST ADJ_TIMECONST -#define MOD_CLKB ADJ_TICK -#define MOD_CLKA ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */ -#define MOD_TAI ADJ_TAI -#define MOD_MICRO ADJ_MICRO -#define MOD_NANO ADJ_NANO - - -/* Status codes (timex.status) */ -#define STA_PLL 0x0001 /* enable PLL updates (rw) */ -#define STA_PPSFREQ 0x0002 /* enable PPS freq discipline (rw) */ -#define STA_PPSTIME 0x0004 /* enable PPS time discipline (rw) */ -#define STA_FLL 0x0008 /* select frequency-lock mode (rw) */ - -#define STA_INS 0x0010 /* insert leap (rw) */ -#define STA_DEL 0x0020 /* delete leap (rw) */ -#define STA_UNSYNC 0x0040 /* clock unsynchronized (rw) */ -#define STA_FREQHOLD 0x0080 /* hold frequency (rw) */ - -#define STA_PPSSIGNAL 0x0100 /* PPS signal present (ro) */ -#define STA_PPSJITTER 0x0200 /* PPS signal jitter exceeded (ro) */ -#define STA_PPSWANDER 0x0400 /* PPS signal wander exceeded (ro) */ -#define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */ - -#define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */ -#define STA_NANO 0x2000 /* resolution (0 = us, 1 = ns) (ro) */ -#define STA_MODE 0x4000 /* mode (0 = PLL, 1 = FLL) (ro) */ -#define STA_CLK 0x8000 /* clock source (0 = A, 1 = B) (ro) */ - -/* Read-only bits */ -#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ - STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK) - /* Clock states (time_state) */ #define TIME_OK 0 /* clock synchronized, no leap second */ #define TIME_INS 1 /* insert leap second */ diff --git a/libc/sysdeps/unix/sysv/linux/syscalls.list b/libc/sysdeps/unix/sysv/linux/syscalls.list index 0f3345490..051303f07 100644 --- a/libc/sysdeps/unix/sysv/linux/syscalls.list +++ b/libc/sysdeps/unix/sysv/linux/syscalls.list @@ -4,6 +4,7 @@ adjtimex adjtime adjtimex i:p __adjtimex adjtimex ntp_adjtime __adjtimex_interna bdflush EXTRA bdflush i:ii bdflush capget EXTRA capget i:pp capget capset EXTRA capset i:pp capset +clock_adjtime EXTRA clock_adjtime i:ip clock_adjtime creat - creat Ci:si __libc_creat creat create_module EXTRA create_module 3 create_module delete_module EXTRA delete_module 3 delete_module @@ -103,3 +104,6 @@ timerfd_settime EXTRA timerfd_settime i:iipp timerfd_settime timerfd_gettime EXTRA timerfd_gettime i:ip timerfd_gettime fanotify_init EXTRA fanotify_init i:ii fanotify_init + +name_to_handle_at EXTRA name_to_handle_at i:isppi name_to_handle_at +open_by_handle_at EXTRA open_by_handle_at Ci:ipi open_by_handle_at diff --git a/libc/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c b/libc/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c index 3e8954f0b..fc08b7be5 100644 --- a/libc/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c +++ b/libc/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 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 @@ -18,7 +18,7 @@ #include #include -#include +#include /* Reserve storage for the data of the file associated with FD. */ @@ -26,7 +26,17 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + + LIBC_CANCEL_RESET (oldtype); + + return result; #else __set_errno (ENOSYS); return -1; diff --git a/libc/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list b/libc/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list index fda3db1de..74732ab98 100644 --- a/libc/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list +++ b/libc/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list @@ -14,7 +14,7 @@ getrlimit - getrlimit i:ip __getrlimit getrlimit getrlimit64 setrlimit - setrlimit i:ip __setrlimit setrlimit setrlimit64 readahead - readahead i:iii __readahead readahead sendfile - sendfile i:iipi sendfile sendfile64 -sync_file_range - sync_file_range i:iiii sync_file_range +sync_file_range - sync_file_range Ci:iiii sync_file_range creat - creat Ci:si __libc_creat creat creat64 open - open Ci:siv __libc_open __open open __open64 open64 prlimit EXTRA prlimit64 i:iipp prlimit prlimit64 diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h index ac029fdda..7f18562c1 100644 --- a/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/x86-64. - Copyright (C) 2001,2002,2004,2006,2007,2009,2010 + Copyright (C) 2001,2002,2004,2006,2007,2009,2010,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -54,6 +54,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif /* For now Linux has synchronisity options for data and read operations. @@ -247,6 +248,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -258,25 +272,40 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -292,6 +321,20 @@ extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset, extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif -#endif + + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + +#endif /* use GNU */ __END_DECLS diff --git a/libc/sysdeps/x86_64/cacheinfo.c b/libc/sysdeps/x86_64/cacheinfo.c index fdd6427e1..bd4be3d2d 100644 --- a/libc/sysdeps/x86_64/cacheinfo.c +++ b/libc/sysdeps/x86_64/cacheinfo.c @@ -226,6 +226,8 @@ intel_check_word (int name, unsigned int value, bool *has_level_2, assert (offset == 2); return (ebx & 0xfff) + 1; } + + ++round; } /* There is no other cache information anywhere else. */ break; diff --git a/libc/time/time.h b/libc/time/time.h index eb7549ddf..fee8d2705 100644 --- a/libc/time/time.h +++ b/libc/time/time.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2003,2006,2009 Free Software Foundation, Inc. +/* Copyright (C) 1991-2003,2006,2009,2011 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 @@ -385,7 +385,7 @@ extern int timer_getoverrun (timer_t __timerid) __THROW; 6 memory allication failed (not enough memory available), 7 there is no line in the template that matches the input, 8 invalid input specification Example: February 31 or a time is - specified that can not be represented in a time_t (representing + specified that can not be represented in a time_t (representing the time in seconds since 00:00:00 UTC, January 1, 1970) */ extern int getdate_err; @@ -394,7 +394,7 @@ extern int getdate_err; the environment variable DATEMSK are used. In case of an error `getdate_err' is set. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern struct tm *getdate (__const char *__string); # endif diff --git a/libc/wcsmbs/wchar.h b/libc/wcsmbs/wchar.h index fdcfdd68e..886131b4a 100644 --- a/libc/wcsmbs/wchar.h +++ b/libc/wcsmbs/wchar.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-2008, 2009, 2010 Free Software Foundation, Inc. +/* Copyright (C) 1995-2008, 2009, 2010, 2011 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 @@ -758,7 +758,7 @@ extern wint_t putwc (wchar_t __wc, __FILE *__stream); /* Write a character to stdout. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern wint_t putwchar (wchar_t __wc); @@ -766,14 +766,14 @@ extern wint_t putwchar (wchar_t __wc); /* Get a newline-terminated wide character string of finite length from STREAM. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, __FILE *__restrict __stream); /* Write a string to STREAM. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern int fputws (__const wchar_t *__restrict __ws, __FILE *__restrict __stream); @@ -781,7 +781,7 @@ extern int fputws (__const wchar_t *__restrict __ws, /* Push a character back onto the input buffer of STREAM. - This function is a possible cancellation points and therefore not + This function is a possible cancellation point and therefore not marked with __THROW. */ extern wint_t ungetwc (wint_t __wc, __FILE *__stream); __END_NAMESPACE_STD diff --git a/ports/ChangeLog.alpha b/ports/ChangeLog.alpha index 82384ac7e..55f876898 100644 --- a/ports/ChangeLog.alpha +++ b/ports/ChangeLog.alpha @@ -1,3 +1,8 @@ +2011-03-28 Aurelien Jarno + + * sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S(____longjmp_chk): + Fix wrong register in stack pointer comparison. + 2011-03-01 Aurelien Jarno * sysdeps/alpha/fpu/feupdateenv.c (feupdateenv): Add libm_hidden_def. diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index 346440446..31f478e5a 100644 --- a/ports/ChangeLog.arm +++ b/ports/ChangeLog.arm @@ -1,3 +1,61 @@ +2011-04-01 Joseph Myers + + * sysdeps/unix/sysv/linux/arm/bits/fcntl.h: Rename open_by_handle + to open_by_handle_at. + +2011-04-01 Ryosei Takagi + + * sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S: + Save and restore r7, and also adjust sp. + +2011-04-01 Joseph Myers + + * sysdeps/unix/sysv/linux/arm/bits/fcntl.h (O_PATH): Define. + +2011-04-01 Joseph Myers + + * sysdeps/unix/sysv/linux/arm/bits/fcntl.h: Define struct + file_handle and MAX_HANDLE_SZ. Declare name_to_handle_at and + open_by_handle. Augment a few comments. + +2011-03-21 Ulrich Weigand + + * sysdeps/arm/linuxthreads: Remove directory. + * sysdeps/unix/sysv/linux/arm/linuxthreads: Likewise. + * sysdeps/unix/sysv/linux/arm/eabi/linuxthreads: Likewise. + +2011-03-21 Ulrich Weigand + + * sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h (PSEUDO): Add + missing "cmn r0, $4096" for _nocancel system call stubs. + +2011-03-21 Ulrich Weigand + + * sysdeps/unix/sysv/arm/eabi/sysdep.h (DO_CALL): Do not save/restore + r7 into IP. + (DOARGS_0, UNDOARGS_0): Redefine to save/restore r7 to the stack. + Create appropriate ARM unwind record. + (DOARGS_1, UNDOARGS_1): Likewise. + (DOARGS_2, UNDOARGS_2): Likewise. + (DOARGS_3, UNDOARGS_3): Likewise. + (DOARGS_4, UNDOARGS_4): Likewise. + (DOARGS_5, UNDOARGS_5): Likewise. + (DOARGS_6, UNDOARGS_6): Likewise. + (DOARGS_7, UNDOARGS_7): Likewise. + * sysdeps/unix/sysv/arm/eabi/nptl/sysdep-cancel.h (PSEUDO): Adapt to + DO_CALL/DOARGS_xxx/UNDOARGS_xxx changes. + (RESTART_UNWIND): Likewise. + (DOCARGS_0, RESTORE_LR_0): Likewise. + (DOCARGS_1): Likewise. + (DOCARGS_2): Likewise. + (DOCARGS_3): Likewise. + (DOCARGS_4): Likewise. + (DOCARGS_5, UNDOCARGS_5, RESTORE_LR_5): Likewise. + (DOCARGS_6, UNDOCARGS_6): Likewise. + * sysdeps/unix/sysv/linux/arm/vfork.S (__vfork): Do no use DO_CALL to + call vfork. In the __ARM_EABI__ case, save r7 both to IP (to restore + from) and the stack (to create an ARM unwind record). + 2011-03-21 Joseph Myers * sysdeps/arm/eabi/__longjmp.S, sysdeps/arm/eabi/bits/fenv.h, diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips index 0c2285f13..01703e818 100644 --- a/ports/ChangeLog.mips +++ b/ports/ChangeLog.mips @@ -1,3 +1,38 @@ +2011-04-01 Joseph Myers + + * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Rename open_by_handle + to open_by_handle_at. + +2011-04-01 Joseph Myers + + * sysdeps/unix/sysv/linux/mips/bits/fcntl.h (O_PATH): Define. + +2011-04-01 Joseph Myers + + * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Define struct + file_handle and MAX_HANDLE_SZ. Declare name_to_handle_at and + open_by_handle. Augment a few comments. + +2011-04-01 Joseph Myers + + * sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c: Make + cancelable. + * sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c: Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c: Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list: Mark + sync_file_range as cancellation point. + * sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list: Mark + sync_file_range as cancellation point. + +2011-04-01 Joseph Myers + + * sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list: Add + sync_file_range. + +2011-03-22 Joseph Myers + + * sysdeps/mips/dl-lookup.c: Update from generic version. + 2011-01-25 Joseph Myers * sysdeps/unix/sysv/linux/mips/bits/mman.h (MADV_HUGEPAGE, diff --git a/ports/sysdeps/arm/linuxthreads/pspinlock.c b/ports/sysdeps/arm/linuxthreads/pspinlock.c deleted file mode 100644 index 665e270b6..000000000 --- a/ports/sysdeps/arm/linuxthreads/pspinlock.c +++ /dev/null @@ -1,82 +0,0 @@ -/* POSIX spinlock implementation. Arm version. - Copyright (C) 2000 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 - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include -#include -#include "internals.h" - - -int -__pthread_spin_lock (pthread_spinlock_t *lock) -{ - unsigned int val; - - do - asm volatile ("swp %0, %1, [%2]" - : "=r" (val) - : "0" (1), "r" (lock) - : "memory"); - while (val != 0); - - return 0; -} -weak_alias (__pthread_spin_lock, pthread_spin_lock) - - -int -__pthread_spin_trylock (pthread_spinlock_t *lock) -{ - unsigned int val; - - asm volatile ("swp %0, %1, [%2]" - : "=r" (val) - : "0" (1), "r" (lock) - : "memory"); - - return val ? EBUSY : 0; -} -weak_alias (__pthread_spin_trylock, pthread_spin_trylock) - - -int -__pthread_spin_unlock (pthread_spinlock_t *lock) -{ - return *lock = 0; -} -weak_alias (__pthread_spin_unlock, pthread_spin_unlock) - - -int -__pthread_spin_init (pthread_spinlock_t *lock, int pshared) -{ - /* We can ignore the `pshared' parameter. Since we are busy-waiting - all processes which can access the memory location `lock' points - to can use the spinlock. */ - return *lock = 0; -} -weak_alias (__pthread_spin_init, pthread_spin_init) - - -int -__pthread_spin_destroy (pthread_spinlock_t *lock) -{ - /* Nothing to do. */ - return 0; -} -weak_alias (__pthread_spin_destroy, pthread_spin_destroy) diff --git a/ports/sysdeps/arm/linuxthreads/pt-machine.h b/ports/sysdeps/arm/linuxthreads/pt-machine.h deleted file mode 100644 index a4c2f314c..000000000 --- a/ports/sysdeps/arm/linuxthreads/pt-machine.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Machine-dependent pthreads configuration and inline functions. - ARM version. - Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef _PT_MACHINE_H -#define _PT_MACHINE_H 1 - -#ifndef PT_EI -# define PT_EI extern inline __attribute__ ((always_inline)) -#endif - -extern long int testandset (int *spinlock); -extern int __compare_and_swap (long int *p, long int oldval, long int newval); - -/* This will not work on ARM1 or ARM2 because SWP is lacking on those - machines. Unfortunately we have no way to detect this at compile - time; let's hope nobody tries to use one. */ - -/* Spinlock implementation; required. */ -PT_EI long int -testandset (int *spinlock) -{ - register unsigned int ret; - - __asm__ __volatile__("swp %0, %1, [%2]" - : "=r"(ret) - : "0"(1), "r"(spinlock)); - - return ret; -} - - -/* Get some notion of the current stack. Need not be exactly the top - of the stack, just something somewhere in the current frame. */ -#define CURRENT_STACK_FRAME stack_pointer -register char * stack_pointer __asm__ ("sp"); - -#endif /* pt-machine.h */ diff --git a/ports/sysdeps/arm/linuxthreads/tls.h b/ports/sysdeps/arm/linuxthreads/tls.h deleted file mode 100644 index 8057a5413..000000000 --- a/ports/sysdeps/arm/linuxthreads/tls.h +++ /dev/null @@ -1,172 +0,0 @@ -/* Definitions for thread-local data handling. linuxthreads/ARM version. - Copyright (C) 2004 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _TLS_H -#define _TLS_H - -#ifndef __ASSEMBLER__ - -# include -# include -# include - -/* Type for the dtv. */ -typedef union dtv -{ - size_t counter; - struct - { - void *val; - bool is_static; - } pointer; -} dtv_t; - -typedef struct -{ - dtv_t *dtv; - - /* Reserved for the thread implementation. Unused in LinuxThreads. */ - void *private; -} tcbhead_t; -#endif - - -/* We can support TLS only if the floating-stack support is available. - However, we want to compile in the support and test at runtime whether - the running kernel can support it or not. To avoid bothering with the - TLS support code at all, use configure --without-tls. - - We need USE_TLS to be consistently defined, for ldsodefs.h conditionals. - But some of the code below can cause problems in building libpthread - (e.g. useldt.h will defined FLOATING_STACKS when it shouldn't). */ - -/* LinuxThreads can only support TLS if both floating stacks and support - from the tools are available. - - We have to define USE_TLS consistently, or ldsodefs.h will lay out types - differently between an NPTL build and a LinuxThreads build. It can be set - for libc.so and not libpthread.so, but only if we provide appropriate padding - in the _pthread_descr_struct. - - Currently nothing defines FLOATING_STACKS. We could assume this based on - kernel version once the TLS patches are available in kernel.org. - - To avoid bothering with the TLS support code at all, use configure - --without-tls. */ - -#if defined HAVE_TLS_SUPPORT \ - && (defined FLOATING_STACKS || !defined IS_IN_libpthread) - -/* Signal that TLS support is available. */ -# define USE_TLS 1 - -/* Include padding in _pthread_descr_struct so that libc can find p_errno, - if libpthread will only include the padding because of the !IS_IN_libpthread - check. */ -#ifndef FLOATING_STACKS -# define INCLUDE_TLS_PADDING 1 -#endif - -# ifndef __ASSEMBLER__ -/* Get system call information. */ -# include - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (tcbhead_t) - -/* This is the size we need before TCB. */ -# define TLS_PRE_TCB_SIZE sizeof (struct _pthread_descr_struct) - -/* The DTV is allocated at the TP; the TCB is placed elsewhere. */ -# define TLS_DTV_AT_TP 1 - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(TCBP, DTVP) \ - (((tcbhead_t *) (TCBP))->dtv = (DTVP) + 1) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(DTV) \ - (((tcbhead_t *)__builtin_thread_pointer ())->dtv = (DTV)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(TCBP) \ - (((tcbhead_t *) (TCBP))->dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(TCBP, SECONDCALL) \ - ({ INTERNAL_SYSCALL_DECL (err); \ - long result_var; \ - result_var = INTERNAL_SYSCALL_ARM (set_tls, err, 1, (TCBP)); \ - INTERNAL_SYSCALL_ERROR_P (result_var, err) \ - ? "unknown error" : NULL; }) - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *)__builtin_thread_pointer ())->dtv) - -/* Return the thread descriptor for the current thread. */ -# undef THREAD_SELF -# define THREAD_SELF \ - ((pthread_descr)__builtin_thread_pointer () - 1) - -# undef INIT_THREAD_SELF -# define INIT_THREAD_SELF(DESCR, NR) \ - TLS_INIT_TP ((struct _pthread_descr_struct *)(DESCR) + 1, 0) - -/* Get the thread descriptor definition. */ -# include - -/* ??? Generic bits of LinuxThreads may call these macros with - DESCR set to NULL. We are expected to be able to reference - the "current" value. - - In our case, we'd really prefer to use DESCR, since lots of - PAL_code calls would be expensive. We can only trust that - the compiler does its job and unifies the multiple - __builtin_thread_pointer instances. */ - -#define THREAD_GETMEM(descr, member) \ - ((void) sizeof (descr), THREAD_SELF->member) -#define THREAD_GETMEM_NC(descr, member) \ - ((void) sizeof (descr), THREAD_SELF->member) -#define THREAD_SETMEM(descr, member, value) \ - ((void) sizeof (descr), THREAD_SELF->member = (value)) -#define THREAD_SETMEM_NC(descr, member, value) \ - ((void) sizeof (descr), THREAD_SELF->member = (value)) - -/* Initializing the thread pointer will generate a SIGILL if the syscall - is not available. */ -#define TLS_INIT_TP_EXPENSIVE 1 - -# endif /* HAVE_TLS_SUPPORT */ -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/ports/sysdeps/mips/dl-lookup.c b/ports/sysdeps/mips/dl-lookup.c index 4090efeac..50d42fcf9 100644 --- a/ports/sysdeps/mips/dl-lookup.c +++ b/ports/sysdeps/mips/dl-lookup.c @@ -1,7 +1,6 @@ /* Look up a symbol in the loaded objects. MIPS/Linux version - special handling of non-PIC undefined symbol rules. - Copyright (C) 1995-2005, 2006, 2007, 2009, 2010 - Free Software Foundation, Inc. + Copyright (C) 1995-2007, 2009, 2010, 2011 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 @@ -381,8 +380,19 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash, if (entries[idx].hashval == new_hash && strcmp (entries[idx].name, undef_name) == 0) { - result->s = entries[idx].sym; - result->m = (struct link_map *) entries[idx].map; + if ((type_class & ELF_RTYPE_CLASS_COPY) != 0) + { + /* We possibly have to initialize the central + copy from the copy addressed through the + relocation. */ + result->s = sym; + result->m = (struct link_map *) map; + } + else + { + result->s = entries[idx].sym; + result->m = (struct link_map *) entries[idx].map; + } __rtld_lock_unlock_recursive (tab->lock); return 1; } diff --git a/ports/sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S b/ports/sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S index 5194ed818..53eb0f2c5 100644 --- a/ports/sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S +++ b/ports/sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S @@ -1,4 +1,5 @@ -/* Copyright (C) 1992, 1994, 1997, 2006, 2010 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1994, 1997, 2006, 2010, 2011 + 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 @@ -58,11 +59,17 @@ ____longjmp_chk: PTR_DEMANGLE2(s3, t1) PTR_DEMANGLE2(fp, t1) #endif - cmpule t0, sp, t1 - bne t1, .Lfail + /* ??? While this is a proper test for detecting a longjmp to an + invalid frame within any given stack, the main thread stack is + located *below* almost everything in the address space. Which + means that the test at Lfail vs the signal stack will almost + certainly never pass. We ought bounds check top and bottom of + the current thread's stack. */ + cmpule s3, sp, t1 + bne t1, $Lfail .align 4 -.Lok: +$Lok: mov s0, a0 mov s1, v0 mov s3, t0 @@ -103,7 +110,7 @@ ____longjmp_chk: ret .align 4 -.Lfail: +$Lfail: cfi_restore_state lda v0, __NR_sigaltstack lda a0, 0 @@ -118,13 +125,13 @@ ____longjmp_chk: cfi_adjust_cfa_offset(-32) /* Without working sigaltstack we cannot perform the test. */ - bne a3, .Lok + bne a3, $Lok addq t0, t2, t0 /* t0 = ss_sp + ss_size */ subq t0, s3, t0 /* t0 = (ss_sp + ss_size) - new_sp */ cmpule t2, t0, t0 /* t0 = (t0 >= ss_size) */ and t0, t1, t0 /* t0 = (t0 >= ss_size) & (ss_flags & SS_ONSTACK) */ - bne t0, .Lok + bne t0, $Lok ldah a0, longjmp_msg(gp) !gprelhigh lda a0, longjmp_msg(a0) !gprellow diff --git a/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h index 952ae05b3..cf8e32a4f 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h +++ b/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-1998, 2000, 2004, 2006, 2007, 2009, 2010 + Copyright (C) 1995-1998, 2000, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,6 +53,7 @@ #ifdef __USE_GNU # define O_DIRECT 0200000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif /* For now Linux has synchronisity options for data and read operations. @@ -232,6 +233,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -248,20 +262,32 @@ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -278,6 +304,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/ports/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S b/ports/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S index 508b4babd..9d8e46458 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S +++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S @@ -52,13 +52,15 @@ longjmp_msg: cfi_remember_state; \ cmp sp, reg; \ bls .Lok; \ + str r7, [sp, #-4]!; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (r7, 0); \ mov r5, r0; \ cfi_undefined (r5); \ mov r7, #SYS_ify(sigaltstack); \ - cfi_undefined (r7); \ mov r0, #0; \ - sub sp, sp, #16; /* >= sizeof (stack_t) */ \ - cfi_adjust_cfa_offset (16); \ + sub sp, sp, #12; /* == sizeof (stack_t) */ \ + cfi_adjust_cfa_offset (12); \ cfi_remember_state; \ mov r1, sp; \ swi #0; \ @@ -74,6 +76,11 @@ longjmp_msg: cmp r2, r3; \ bhi .Lok2; \ .Lfail: \ + add sp, sp, #12; \ + cfi_adjust_cfa_offset (-12); \ + ldr r7, [sp], #4; \ + cfi_adjust_cfa_offset (-4); \ + cfi_restore (r7); \ CALL_FAIL \ cfi_restore_state; \ .Lok2: \ diff --git a/ports/sysdeps/unix/sysv/linux/arm/eabi/linuxthreads/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/arm/eabi/linuxthreads/sysdep-cancel.h deleted file mode 100644 index bc520426e..000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/eabi/linuxthreads/sysdep-cancel.h +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright (C) 2003, 2005 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if !defined NOT_IN_libc || defined IS_IN_libpthread - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .section ".text"; \ - PSEUDO_PROLOGUE; \ - ENTRY (name); \ - SINGLE_THREAD_P; \ - DOARGS_##args; \ - bne .Lpseudo_cancel; \ - mov ip, r7; \ - ldr r7, =SYS_ify (syscall_name); \ - swi 0x0; \ - mov r7, ip; \ - UNDOARGS_##args; \ - cmn r0, $4096; \ - PSEUDO_RET; \ - .Lpseudo_cancel: \ - DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \ - CENABLE; \ - mov ip, r0; /* put mask in safe place. */ \ - UNDOCARGS_##args; /* restore syscall args. */ \ - ldr r7, =SYS_ify (syscall_name); \ - swi 0x0; /* do the call. */ \ - mov r7, r0; /* save syscall return value. */ \ - mov r0, ip; /* get mask back. */ \ - CDISABLE; \ - mov r0, r7; /* retrieve return value. */ \ - RESTORE_LR_##args; \ - UNDOARGS_##args; \ - cmn r0, $4096; - -/* DOARGS pushes four bytes on the stack for five arguments, eight bytes for - six arguments, and nothing for fewer. In order to preserve doubleword - alignment, sometimes we must save an extra register. */ - -# define DOCARGS_0 stmfd sp!, {r7, lr} -# define UNDOCARGS_0 -# define RESTORE_LR_0 ldmfd sp!, {r7, lr} - -# define DOCARGS_1 stmfd sp!, {r0, r1, r7, lr} -# define UNDOCARGS_1 ldr r0, [sp], #8 -# define RESTORE_LR_1 RESTORE_LR_0 - -# define DOCARGS_2 stmfd sp!, {r0, r1, r7, lr} -# define UNDOCARGS_2 ldmfd sp!, {r0, r1} -# define RESTORE_LR_2 RESTORE_LR_0 - -# define DOCARGS_3 stmfd sp!, {r0, r1, r2, r3, r7, lr} -# define UNDOCARGS_3 ldmfd sp!, {r0, r1, r2, r3} -# define RESTORE_LR_3 RESTORE_LR_0 - -# define DOCARGS_4 stmfd sp!, {r0, r1, r2, r3, r7, lr} -# define UNDOCARGS_4 ldmfd sp!, {r0, r1, r2, r3} -# define RESTORE_LR_4 RESTORE_LR_0 - -# define DOCARGS_5 stmfd sp!, {r0, r1, r2, r3, r4, r7, lr} -# define UNDOCARGS_5 ldmfd sp!, {r0, r1, r2, r3} -# define RESTORE_LR_5 ldmfd sp!, {r4, r7, lr} - -# define DOCARGS_6 stmfd sp!, {r0, r1, r2, r3, r7, lr} -# define UNDOCARGS_6 ldmfd sp!, {r0, r1, r2, r3} -# define RESTORE_LR_6 RESTORE_LR_0 - -# ifdef IS_IN_libpthread -# define CENABLE bl PLTJMP(__pthread_enable_asynccancel) -# define CDISABLE bl PLTJMP(__pthread_disable_asynccancel) -# define __local_multiple_threads __pthread_multiple_threads -# else -# define CENABLE bl PLTJMP(__libc_enable_asynccancel) -# define CDISABLE bl PLTJMP(__libc_disable_asynccancel) -# define __local_multiple_threads __libc_multiple_threads -# endif - -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P \ - ldr ip, 1b; \ -2: \ - ldr ip, [pc, ip]; \ - teq ip, #0; -# define PSEUDO_PROLOGUE \ - 1: .word __local_multiple_threads - 2f - 8; -# endif - -#else - -/* For rtld, et cetera. */ -# define SINGLE_THREAD_P 1 - -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h index 458558b9c..3fadebde7 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h +++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h @@ -39,6 +39,7 @@ .cfi_sections .debug_frame; \ cfi_startproc; \ DO_CALL (syscall_name, args); \ + cmn r0, $4096; \ PSEUDO_RET; \ cfi_endproc; \ .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ @@ -47,20 +48,20 @@ DOARGS_##args; \ bne .Lpseudo_cancel; \ cfi_remember_state; \ - DO_CALL (syscall_name, 0); \ + ldr r7, =SYS_ify (syscall_name); \ + swi 0x0; \ UNDOARGS_##args; \ cmn r0, $4096; \ PSEUDO_RET; \ cfi_restore_state; \ .Lpseudo_cancel: \ - .fnstart; \ + .fnstart; /* matched by the .fnend in UNDOARGS below. */ \ DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \ CENABLE; \ mov ip, r0; /* put mask in safe place. */ \ UNDOCARGS_##args; /* restore syscall args. */ \ ldr r7, =SYS_ify (syscall_name); \ swi 0x0; /* do the call. */ \ - .fnend; /* Past here we can't easily unwind. */ \ mov r7, r0; /* save syscall return value. */ \ mov r0, ip; /* get mask back. */ \ CDISABLE; \ @@ -69,34 +70,34 @@ UNDOARGS_##args; \ cmn r0, $4096 -/* DOARGS pushes four bytes on the stack for five arguments, eight bytes for - six arguments, and nothing for fewer. In order to preserve doubleword +/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for + six arguments, and four bytes for fewer. In order to preserve doubleword alignment, sometimes we must save an extra register. */ # define RESTART_UNWIND \ .fnend; \ .fnstart; \ - .save {r7, lr} + .save {r7}; \ + .save {lr} # define DOCARGS_0 \ - stmfd sp!, {r7, lr}; \ - cfi_adjust_cfa_offset (8); \ - cfi_rel_offset (r7, 0); \ - cfi_rel_offset (lr, 4); \ - .save {r7, lr} + .save {r7}; \ + str lr, [sp, #-4]!; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (lr, 0); \ + .save {lr} # define UNDOCARGS_0 # define RESTORE_LR_0 \ - ldmfd sp!, {r7, lr}; \ - cfi_adjust_cfa_offset (-8); \ - cfi_restore (r7); \ + ldr lr, [sp], #4; \ + cfi_adjust_cfa_offset (-4); \ cfi_restore (lr) # define DOCARGS_1 \ - stmfd sp!, {r0, r1, r7, lr}; \ - cfi_adjust_cfa_offset (16); \ - cfi_rel_offset (r7, 8); \ - cfi_rel_offset (lr, 12); \ - .save {r7, lr}; \ + .save {r7}; \ + stmfd sp!, {r0, r1, lr}; \ + cfi_adjust_cfa_offset (12); \ + cfi_rel_offset (lr, 8); \ + .save {lr}; \ .pad #8 # define UNDOCARGS_1 \ ldr r0, [sp], #8; \ @@ -106,11 +107,11 @@ RESTORE_LR_0 # define DOCARGS_2 \ - stmfd sp!, {r0, r1, r7, lr}; \ - cfi_adjust_cfa_offset (16); \ - cfi_rel_offset (r7, 8); \ - cfi_rel_offset (lr, 12); \ - .save {r7, lr}; \ + .save {r7}; \ + stmfd sp!, {r0, r1, lr}; \ + cfi_adjust_cfa_offset (12); \ + cfi_rel_offset (lr, 8); \ + .save {lr}; \ .pad #8 # define UNDOCARGS_2 \ ldmfd sp!, {r0, r1}; \ @@ -120,11 +121,11 @@ RESTORE_LR_0 # define DOCARGS_3 \ - stmfd sp!, {r0, r1, r2, r3, r7, lr}; \ - cfi_adjust_cfa_offset (24); \ - cfi_rel_offset (r7, 16); \ - cfi_rel_offset (lr, 20); \ - .save {r7, lr}; \ + .save {r7}; \ + stmfd sp!, {r0, r1, r2, r3, lr}; \ + cfi_adjust_cfa_offset (20); \ + cfi_rel_offset (lr, 16); \ + .save {lr}; \ .pad #16 # define UNDOCARGS_3 \ ldmfd sp!, {r0, r1, r2, r3}; \ @@ -134,11 +135,11 @@ RESTORE_LR_0 # define DOCARGS_4 \ - stmfd sp!, {r0, r1, r2, r3, r7, lr}; \ - cfi_adjust_cfa_offset (24); \ - cfi_rel_offset (r7, 16); \ - cfi_rel_offset (lr, 20); \ - .save {r7, lr}; \ + .save {r7}; \ + stmfd sp!, {r0, r1, r2, r3, lr}; \ + cfi_adjust_cfa_offset (20); \ + cfi_rel_offset (lr, 16); \ + .save {lr}; \ .pad #16 # define UNDOCARGS_4 \ ldmfd sp!, {r0, r1, r2, r3}; \ @@ -149,43 +150,40 @@ /* r4 is only stmfd'ed for correct stack alignment. */ # define DOCARGS_5 \ - .save {r4}; \ - stmfd sp!, {r0, r1, r2, r3, r4, r7, lr}; \ - cfi_adjust_cfa_offset (28); \ - cfi_rel_offset (r7, 20); \ - cfi_rel_offset (lr, 24); \ - .save {r7, lr}; \ + .save {r4, r7}; \ + stmfd sp!, {r0, r1, r2, r3, r4, lr}; \ + cfi_adjust_cfa_offset (24); \ + cfi_rel_offset (lr, 20); \ + .save {lr}; \ .pad #20 # define UNDOCARGS_5 \ ldmfd sp!, {r0, r1, r2, r3}; \ cfi_adjust_cfa_offset (-16); \ .fnend; \ .fnstart; \ - .save {r4}; \ - .save {r7, lr}; \ + .save {r4, r7}; \ + .save {lr}; \ .pad #4 # define RESTORE_LR_5 \ - ldmfd sp!, {r4, r7, lr}; \ - cfi_adjust_cfa_offset (-12); \ + ldmfd sp!, {r4, lr}; \ + cfi_adjust_cfa_offset (-8); \ /* r4 will be marked as restored later. */ \ - cfi_restore (r7); \ cfi_restore (lr) # define DOCARGS_6 \ - .save {r4, r5}; \ - stmfd sp!, {r0, r1, r2, r3, r7, lr}; \ - cfi_adjust_cfa_offset (24); \ - cfi_rel_offset (r7, 16); \ - cfi_rel_offset (lr, 20); \ - .save {r7, lr}; \ + .save {r4, r5, r7}; \ + stmfd sp!, {r0, r1, r2, r3, lr}; \ + cfi_adjust_cfa_offset (20); \ + cfi_rel_offset (lr, 16); \ + .save {lr}; \ .pad #16 # define UNDOCARGS_6 \ ldmfd sp!, {r0, r1, r2, r3}; \ cfi_adjust_cfa_offset (-16); \ .fnend; \ .fnstart; \ - .save {r4, r5}; \ - .save {r7, lr} + .save {r4, r5, r7}; \ + .save {lr}; # define RESTORE_LR_6 \ RESTORE_LR_0 diff --git a/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h b/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h index b7815babf..a80621e14 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h +++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h @@ -106,12 +106,95 @@ #undef DO_CALL #define DO_CALL(syscall_name, args) \ DOARGS_##args; \ - mov ip, r7; \ - cfi_register (r7, ip); \ ldr r7, =SYS_ify (syscall_name); \ swi 0x0; \ - mov r7, ip; \ - cfi_restore (r7); \ UNDOARGS_##args +#undef DOARGS_0 +#define DOARGS_0 \ + .fnstart; \ + str r7, [sp, #-4]!; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (r7, 0); \ + .save { r7 } +#undef DOARGS_1 +#define DOARGS_1 DOARGS_0 +#undef DOARGS_2 +#define DOARGS_2 DOARGS_0 +#undef DOARGS_3 +#define DOARGS_3 DOARGS_0 +#undef DOARGS_4 +#define DOARGS_4 DOARGS_0 +#undef DOARGS_5 +#define DOARGS_5 \ + .fnstart; \ + stmfd sp!, {r4, r7}; \ + cfi_adjust_cfa_offset (8); \ + cfi_rel_offset (r4, 0); \ + cfi_rel_offset (r7, 4); \ + .save { r4, r7 }; \ + ldr r4, [sp, #8] +#undef DOARGS_6 +#define DOARGS_6 \ + .fnstart; \ + mov ip, sp; \ + stmfd sp!, {r4, r5, r7}; \ + cfi_adjust_cfa_offset (12); \ + cfi_rel_offset (r4, 0); \ + cfi_rel_offset (r5, 4); \ + cfi_rel_offset (r7, 8); \ + .save { r4, r5, r7 }; \ + ldmia ip, {r4, r5} +#undef DOARGS_7 +#define DOARGS_7 \ + .fnstart; \ + mov ip, sp; \ + stmfd sp!, {r4, r5, r6, r7}; \ + cfi_adjust_cfa_offset (16); \ + cfi_rel_offset (r4, 0); \ + cfi_rel_offset (r5, 4); \ + cfi_rel_offset (r6, 8); \ + cfi_rel_offset (r7, 12); \ + .save { r4, r5, r6, r7 }; \ + ldmia ip, {r4, r5, r6} + +#undef UNDOARGS_0 +#define UNDOARGS_0 \ + ldr r7, [sp], #4; \ + cfi_adjust_cfa_offset (-4); \ + cfi_restore (r7); \ + .fnend +#undef UNDOARGS_1 +#define UNDOARGS_1 UNDOARGS_0 +#undef UNDOARGS_2 +#define UNDOARGS_2 UNDOARGS_0 +#undef UNDOARGS_3 +#define UNDOARGS_3 UNDOARGS_0 +#undef UNDOARGS_4 +#define UNDOARGS_4 UNDOARGS_0 +#undef UNDOARGS_5 +#define UNDOARGS_5 \ + ldmfd sp!, {r4, r7}; \ + cfi_adjust_cfa_offset (-8); \ + cfi_restore (r4); \ + cfi_restore (r7); \ + .fnend +#undef UNDOARGS_6 +#define UNDOARGS_6 \ + ldmfd sp!, {r4, r5, r7}; \ + cfi_adjust_cfa_offset (-12); \ + cfi_restore (r4); \ + cfi_restore (r5); \ + cfi_restore (r7); \ + .fnend +#undef UNDOARGS_7 +#define UNDOARGS_7 \ + ldmfd sp!, {r4, r5, r6, r7}; \ + cfi_adjust_cfa_offset (-16); \ + cfi_restore (r4); \ + cfi_restore (r5); \ + cfi_restore (r6); \ + cfi_restore (r7); \ + .fnend + #endif /* _LINUX_ARM_EABI_SYSDEP_H */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/linuxthreads/fork.c b/ports/sysdeps/unix/sysv/linux/arm/linuxthreads/fork.c deleted file mode 100644 index 4fb0db2be..000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/linuxthreads/fork.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/ports/sysdeps/unix/sysv/linux/arm/linuxthreads/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/arm/linuxthreads/sysdep-cancel.h deleted file mode 100644 index b35d34728..000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/linuxthreads/sysdep-cancel.h +++ /dev/null @@ -1,129 +0,0 @@ -/* Copyright (C) 2003, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Phil Blundell , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if !defined NOT_IN_libc || defined IS_IN_libpthread - -/* We push lr onto the stack, so we have to use ldmib instead of ldmia - to find the saved arguments. */ -# ifdef PIC -# undef DOARGS_5 -# undef DOARGS_6 -# undef DOARGS_7 -# define DOARGS_5 str r4, [sp, $-4]!; ldr r4, [sp, $8]; -# define DOARGS_6 mov ip, sp; stmfd sp!, {r4, r5}; ldmib ip, {r4, r5}; -# define DOARGS_7 mov ip, sp; stmfd sp!, {r4, r5, r6}; ldmib ip, {r4, r5, r6}; -# endif - -# undef PSEUDO_RET -# define PSEUDO_RET \ - ldrcc pc, [sp], $4; \ - ldr lr, [sp], $4; \ - b PLTJMP(SYSCALL_ERROR) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .section ".text"; \ - PSEUDO_PROLOGUE; \ - ENTRY (name); \ - SINGLE_THREAD_P; \ - bne .Lpseudo_cancel; \ - DO_CALL (syscall_name, args); \ - cmn r0, $4096; \ - RETINSTR(cc, lr); \ - b PLTJMP(SYSCALL_ERROR); \ - .Lpseudo_cancel: \ - str lr, [sp, $-4]!; \ - DOCARGS_##args; /* save syscall args around CENABLE. */ \ - CENABLE; \ - mov ip, r0; /* put mask in safe place. */ \ - UNDOCARGS_##args; /* restore syscall args. */ \ - swi SYS_ify (syscall_name); /* do the call. */ \ - str r0, [sp, $-4]!; /* save syscall return value. */ \ - mov r0, ip; /* get mask back. */ \ - CDISABLE; \ - ldr r0, [sp], $4; /* retrieve return value. */ \ - UNDOC2ARGS_##args; /* fix register damage. */ \ - cmn r0, $4096; - -# define DOCARGS_0 -# define UNDOCARGS_0 -# define UNDOC2ARGS_0 - -# define DOCARGS_1 str r0, [sp, #-4]!; -# define UNDOCARGS_1 ldr r0, [sp], #4; -# define UNDOC2ARGS_1 - -# define DOCARGS_2 str r1, [sp, #-4]!; str r0, [sp, #-4]!; -# define UNDOCARGS_2 ldr r0, [sp], #4; ldr r1, [sp], #4; -# define UNDOC2ARGS_2 - -# define DOCARGS_3 str r2, [sp, #-4]!; str r1, [sp, #-4]!; str r0, [sp, #-4]!; -# define UNDOCARGS_3 ldr r0, [sp], #4; ldr r1, [sp], #4; ldr r2, [sp], #4 -# define UNDOC2ARGS_3 - -# define DOCARGS_4 stmfd sp!, {r0-r3} -# define UNDOCARGS_4 ldmfd sp!, {r0-r3} -# define UNDOC2ARGS_4 - -# define DOCARGS_5 stmfd sp!, {r0-r3} -# define UNDOCARGS_5 ldmfd sp, {r0-r3}; str r4, [sp, #-4]!; ldr r4, [sp, #24] -# define UNDOC2ARGS_5 ldr r4, [sp], #20 - -# ifdef IS_IN_libpthread -# define CENABLE bl PLTJMP(__pthread_enable_asynccancel) -# define CDISABLE bl PLTJMP(__pthread_disable_asynccancel) -# define __local_multiple_threads __pthread_multiple_threads -# else -# define CENABLE bl PLTJMP(__libc_enable_asynccancel) -# define CDISABLE bl PLTJMP(__libc_disable_asynccancel) -# define __local_multiple_threads __libc_multiple_threads -# endif - -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1) -# else -# if !defined PIC -# define SINGLE_THREAD_P \ - ldr ip, =__local_multiple_threads; \ - ldr ip, [ip]; \ - teq ip, #0; -# define PSEUDO_PROLOGUE -# else -# define SINGLE_THREAD_P \ - ldr ip, 1b; \ -2: \ - ldr ip, [pc, ip]; \ - teq ip, #0; -# define PSEUDO_PROLOGUE \ - 1: .word __local_multiple_threads - 2f - 8; -# endif -# endif - -#elif !defined __ASSEMBLER__ - -/* This code should never be used but we define it anyhow. */ -# define SINGLE_THREAD_P (1) - -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/linuxthreads/vfork.S b/ports/sysdeps/unix/sysv/linux/arm/linuxthreads/vfork.S deleted file mode 100644 index b826a99ad..000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/linuxthreads/vfork.S +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include -#define _ERRNO_H 1 -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - -#ifdef __NR_vfork - -#ifdef SHARED - ldr ip, 1f - ldr r0, 2f -3: add ip, pc, ip - ldr r0, [ip, r0] -#else - ldr r0, 1f -#endif - movs r0, r0 - bne HIDDEN_JUMPTARGET (__fork) - - DO_CALL (vfork, 0) - cmn a1, #4096 - RETINSTR(cc, lr) - -#ifndef __ASSUME_VFORK_SYSCALL - /* Check if vfork syscall is known at all. */ - cmn a1, #ENOSYS - bne PLTJMP(C_SYMBOL_NAME(__syscall_error)) -#endif - -#endif - -#ifndef __ASSUME_VFORK_SYSCALL - /* If we don't have vfork, fork is close enough. */ - DO_CALL (fork, 0) - cmn a1, #4096 - RETINSTR(cc, lr) -#elif !defined __NR_vfork -# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined" -#endif - b PLTJMP(C_SYMBOL_NAME(__syscall_error)) - -#ifdef SHARED -1: .word _GLOBAL_OFFSET_TABLE_ - 3b - 8 -2: .word __libc_pthread_functions(GOTOFF) -#else - .weak pthread_create -1: .word pthread_create -#endif - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) diff --git a/ports/sysdeps/unix/sysv/linux/arm/vfork.S b/ports/sysdeps/unix/sysv/linux/arm/vfork.S index a02065898..e63690eec 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/vfork.S +++ b/ports/sysdeps/unix/sysv/linux/arm/vfork.S @@ -33,7 +33,28 @@ ENTRY (__vfork) #ifdef SAVE_PID SAVE_PID #endif - DO_CALL (vfork, 0) +#ifdef __ARM_EABI__ + /* The DO_CALL macro saves r7 on the stack, to enable generation + of ARM unwind info. Since the stack is initially shared between + parent and child of vfork, that saved value could be corrupted. + To avoid this problem, we save r7 into ip as well, and restore + from there. */ + mov ip, r7 + cfi_register (r7, ip) + .fnstart + str r7, [sp, #-4]! + cfi_adjust_cfa_offset (4) + .save { r7 } + ldr r7, =SYS_ify (vfork) + swi 0x0 + .fnend + add sp, sp, #4 + cfi_adjust_cfa_offset (-4) + mov r7, ip + cfi_restore (r7); +#else + swi SYS_ify(vfork) +#endif #ifdef RESTORE_PID RESTORE_PID #endif diff --git a/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h index 31cb86112..1da157617 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h +++ b/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h @@ -1,6 +1,6 @@ /* O_*, F_*, FD_* bit values for Linux. Copyright (C) 1995, 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2006, - 2007, 2009, 2010 Free Software Foundation, Inc. + 2007, 2009, 2010, 2011 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 @@ -54,6 +54,7 @@ #ifdef __USE_GNU # define O_DIRECT 0x8000 /* Direct disk access hint. */ # define O_NOATIME 0x40000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif /* For now Linux has no synchronisity options for data and read operations. @@ -245,6 +246,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -261,20 +275,32 @@ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -291,6 +317,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c b/ports/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c index 13a21b0da..21da50e3e 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c @@ -1,5 +1,5 @@ /* Selective file content synch'ing. - Copyright (C) 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2006, 2007, 2011 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 @@ -21,7 +21,7 @@ #include #include -#include +#include #include @@ -29,10 +29,23 @@ int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) { - return INLINE_SYSCALL (sync_file_range, 7, fd, 0, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), - flags); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (sync_file_range, 7, fd, 0, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), + flags); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (sync_file_range, 7, fd, 0, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), + flags); + + LIBC_CANCEL_RESET (oldtype); + + return result; } #else int diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c index f973250de..0aecba10e 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c +++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 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 @@ -18,7 +18,7 @@ #include #include -#include +#include /* Reserve storage for the data of the file associated with FD. */ @@ -26,7 +26,17 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + + LIBC_CANCEL_RESET (oldtype); + + return result; #else __set_errno (ENOSYS); return -1; diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c index 1f37f9121..670cb0e32 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c +++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 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 @@ -18,7 +18,7 @@ #include #include -#include +#include /* Reserve storage for the data of the file associated with FD. */ @@ -26,7 +26,17 @@ int fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) { #ifdef __NR_fallocate - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + + LIBC_CANCEL_RESET (oldtype); + + return result; #else __set_errno (ENOSYS); return -1; diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list index 87c194990..0d37a9b48 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list +++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list @@ -1,7 +1,7 @@ # File name Caller Syscall name # args Strong name Weak names readahead - readahead i:iii __readahead readahead -sync_file_range - sync_file_range i:iiii sync_file_range +sync_file_range - sync_file_range Ci:iiii sync_file_range ftruncate - ftruncate i:ii __ftruncate ftruncate ftruncate64 __ftruncate64 truncate - truncate i:si truncate truncate64 diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list b/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list index 2c8c4d484..8d70e457f 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list +++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list @@ -1,5 +1,7 @@ # File name Caller Syscall name # args Strong name Weak names +sync_file_range - sync_file_range Ci:iiii sync_file_range + prlimit EXTRA prlimit64 i:iipp prlimit prlimit64 fanotify_mark EXTRA fanotify_mark i:iiiis fanotify_mark -- cgit v1.2.3