From 3107c0c5ae2c0dc2854471cb028e8a37a5e59e51 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 29 Sep 2000 16:45:44 +0000 Subject: Update. 2000-09-29 David Mosberger * sysdeps/unix/sysv/linux/ia64/sysdep.S (__ia64_syscall): Cleanup. * sysdeps/unix/sysv/linux/ia64/sysdep.h (CALL_MCOUNT): Implement. 2000-06-10 David Mosberger * sysdeps/unix/sysv/linux/ia64/setjmp.S: Fix it so it actually works: call to __sigjmp_save must be done unconditionally to ensure jmp_buf is initialized properly. 2000-09-27 Andreas Jaeger * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Synch with Linux 2.4.0-test9-pre7. 2000-09-29 Jakub Jelinek * nscd/nscd-client.h (NSCD_VERSION): Bump to 3. Use int32_t where appropriate. * nscd/nscd_gethst_r.c (nscd_gethst_r): Use uint32_t instead of size_t where appropriate. * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise. * nscd/hstcache.c (cache_addhst): Likewise. * nscd/grpcache.c (cache_addgr): Likewise. --- ChangeLog | 27 ++++++++++++++++++ NEWS | 5 ++++ nscd/grpcache.c | 9 +++--- nscd/hstcache.c | 8 +++--- nscd/nscd-client.h | 46 +++++++++++++++---------------- nscd/nscd_getgr_r.c | 8 +++--- nscd/nscd_gethst_r.c | 8 +++--- sysdeps/unix/sysv/linux/i386/bits/fcntl.h | 22 +++++++++++++++ sysdeps/unix/sysv/linux/ia64/setjmp.S | 5 ++-- sysdeps/unix/sysv/linux/ia64/sysdep.S | 17 ++++++------ sysdeps/unix/sysv/linux/ia64/sysdep.h | 24 +++++++++++----- 11 files changed, 121 insertions(+), 58 deletions(-) diff --git a/ChangeLog b/ChangeLog index 43db7507af..94d441b55a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,30 @@ +2000-09-29 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/sysdep.S (__ia64_syscall): Cleanup. + + * sysdeps/unix/sysv/linux/ia64/sysdep.h (CALL_MCOUNT): Implement. + +2000-06-10 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/setjmp.S: Fix it so it actually + works: call to __sigjmp_save must be done unconditionally to + ensure jmp_buf is initialized properly. + +2000-09-27 Andreas Jaeger + + * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Synch with Linux + 2.4.0-test9-pre7. + +2000-09-29 Jakub Jelinek + + * nscd/nscd-client.h (NSCD_VERSION): Bump to 3. + Use int32_t where appropriate. + * nscd/nscd_gethst_r.c (nscd_gethst_r): Use uint32_t instead of size_t + where appropriate. + * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise. + * nscd/hstcache.c (cache_addhst): Likewise. + * nscd/grpcache.c (cache_addgr): Likewise. + 2000-09-29 Ulrich Drepper * inet/getnameinfo.c (nrl_domainname): Use symbolic constant diff --git a/NEWS b/NEWS index c9be96877d..086877f571 100644 --- a/NEWS +++ b/NEWS @@ -75,6 +75,11 @@ Version 2.2 compatibility for kernel versions before X.Y.Z. This is currently only implemented for Linux. +* the sockaddr_in6 structure changed. The IPv6 working group added a new + field sin6_scope_id. This means that all programs using IPv6 should be + recompiled. Don't expect binary compatibility with previous glibc + versions. + * IA-64 port by Jes Sorensen and HJ Lu. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/nscd/grpcache.c b/nscd/grpcache.c index 983b297ad2..b1634a1009 100644 --- a/nscd/grpcache.c +++ b/nscd/grpcache.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -117,7 +118,7 @@ cache_addgr (struct database *db, int fd, request_header *req, void *key, size_t gr_name_len = strlen (grp->gr_name) + 1; size_t gr_passwd_len = strlen (grp->gr_passwd) + 1; size_t gr_mem_cnt = 0; - size_t *gr_mem_len; + uint32_t *gr_mem_len; size_t gr_mem_len_total = 0; char *gr_name; char *cp; @@ -131,7 +132,7 @@ cache_addgr (struct database *db, int fd, request_header *req, void *key, /* Determine the length of all members. */ while (grp->gr_mem[gr_mem_cnt]) ++gr_mem_cnt; - gr_mem_len = (size_t *) alloca (gr_mem_cnt * sizeof (size_t)); + gr_mem_len = (uint32_t *) alloca (gr_mem_cnt * sizeof (uint32_t)); for (gr_mem_cnt = 0; grp->gr_mem[gr_mem_cnt]; ++gr_mem_cnt) { gr_mem_len[gr_mem_cnt] = strlen (grp->gr_mem[gr_mem_cnt]) + 1; @@ -141,7 +142,7 @@ cache_addgr (struct database *db, int fd, request_header *req, void *key, /* We allocate all data in one memory block: the iov vector, the response header and the dataset itself. */ total = (sizeof (struct groupdata) - + gr_mem_cnt * sizeof (size_t) + + gr_mem_cnt * sizeof (uint32_t) + gr_name_len + gr_passwd_len + gr_mem_len_total); data = (struct groupdata *) malloc (total + n); if (data == NULL) @@ -157,7 +158,7 @@ cache_addgr (struct database *db, int fd, request_header *req, void *key, cp = data->strdata; /* This is the member string length array. */ - cp = mempcpy (cp, gr_mem_len, gr_mem_cnt * sizeof (size_t)); + cp = mempcpy (cp, gr_mem_len, gr_mem_cnt * sizeof (uint32_t)); gr_name = cp; cp = mempcpy (cp, grp->gr_name, gr_name_len); cp = mempcpy (cp, grp->gr_passwd, gr_passwd_len); diff --git a/nscd/hstcache.c b/nscd/hstcache.c index 31afbdddda..e8444d825f 100644 --- a/nscd/hstcache.c +++ b/nscd/hstcache.c @@ -125,7 +125,7 @@ cache_addhst (struct database *db, int fd, request_header *req, void *key, struct hostdata *data; size_t h_name_len = strlen (hst->h_name) + 1; size_t h_aliases_cnt; - size_t *h_aliases_len; + uint32_t *h_aliases_len; size_t h_addr_list_cnt; int addr_list_type; char *addresses; @@ -139,7 +139,7 @@ cache_addhst (struct database *db, int fd, request_header *req, void *key, for (cnt = 0; hst->h_aliases[cnt] != NULL; ++cnt) ++h_aliases_cnt; /* Determine the length of all aliases. */ - h_aliases_len = alloca (h_aliases_cnt * sizeof (size_t)); + h_aliases_len = (uint32_t *) alloca (h_aliases_cnt * sizeof (uint32_t)); total = 0; for (cnt = 0; cnt < h_aliases_cnt; ++cnt) { @@ -156,7 +156,7 @@ cache_addhst (struct database *db, int fd, request_header *req, void *key, the response header and the dataset itself. */ total += (sizeof (struct hostdata) + h_name_len - + h_aliases_cnt * sizeof (size_t) + + h_aliases_cnt * sizeof (uint32_t) + h_addr_list_cnt * hst->h_length); data = (struct hostdata *) malloc (total + req->key_len); @@ -175,7 +175,7 @@ cache_addhst (struct database *db, int fd, request_header *req, void *key, cp = data->strdata; cp = mempcpy (cp, hst->h_name, h_name_len); - cp = mempcpy (cp, h_aliases_len, h_aliases_cnt * sizeof (size_t)); + cp = mempcpy (cp, h_aliases_len, h_aliases_cnt * sizeof (uint32_t)); /* The normal addresses first. */ addresses = cp; diff --git a/nscd/nscd-client.h b/nscd/nscd-client.h index 33c4845aee..97b0baf629 100644 --- a/nscd/nscd-client.h +++ b/nscd/nscd-client.h @@ -1,4 +1,4 @@ -/* Copyright (c) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1998. @@ -24,7 +24,7 @@ #define _NSCD_CLIENT_H 1 /* Version number of the daemon interface */ -#define NSCD_VERSION 2 +#define NSCD_VERSION 3 /* Path of the file where the PID of the running system is stored. */ #define _PATH_NSCDPID "/var/run/nscd.pid" @@ -60,7 +60,7 @@ typedef struct { int version; /* Version number of the daemon interface. */ request_type type; /* Service requested. */ - ssize_t key_len; /* Key length. */ + int32_t key_len; /* Key length. */ } request_header; @@ -68,15 +68,15 @@ typedef struct sent also if the service is disabled or there is no record found. */ typedef struct { - int version; - int found; - ssize_t pw_name_len; - ssize_t pw_passwd_len; + int32_t version; + int32_t found; + int32_t pw_name_len; + int32_t pw_passwd_len; uid_t pw_uid; gid_t pw_gid; - ssize_t pw_gecos_len; - ssize_t pw_dir_len; - ssize_t pw_shell_len; + int32_t pw_gecos_len; + int32_t pw_dir_len; + int32_t pw_shell_len; } pw_response_header; @@ -84,12 +84,12 @@ typedef struct sent also if the service is disabled or there is no record found. */ typedef struct { - int version; - int found; - ssize_t gr_name_len; - ssize_t gr_passwd_len; + int32_t version; + int32_t found; + int32_t gr_name_len; + int32_t gr_passwd_len; gid_t gr_gid; - ssize_t gr_mem_cnt; + int32_t gr_mem_cnt; } gr_response_header; @@ -97,14 +97,14 @@ typedef struct sent also if the service is disabled or there is no record found. */ typedef struct { - int version; - int found; - ssize_t h_name_len; - ssize_t h_aliases_cnt; - int h_addrtype; - int h_length; - ssize_t h_addr_list_cnt; - int error; + int32_t version; + int32_t found; + int32_t h_name_len; + int32_t h_aliases_cnt; + int32_t h_addrtype; + int32_t h_length; + int32_t h_addr_list_cnt; + int32_t error; } hst_response_header; diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c index aa9c3fddcc..97f7f711a7 100644 --- a/nscd/nscd_getgr_r.c +++ b/nscd/nscd_getgr_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1998. @@ -137,7 +137,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type, if (gr_resp.found == 1) { - size_t *len; + uint32_t *len; char *p = buffer; size_t total_len; uintptr_t align; @@ -172,9 +172,9 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type, resultbuf->gr_gid = gr_resp.gr_gid; /* Allocate array to store lengths. */ - len = alloca (gr_resp.gr_mem_cnt * sizeof (size_t)); + len = (uint32_t *) alloca (gr_resp.gr_mem_cnt * sizeof (uint32_t)); - total_len = gr_resp.gr_mem_cnt * sizeof (size_t); + total_len = gr_resp.gr_mem_cnt * sizeof (uint32_t); vec[0].iov_base = len; vec[0].iov_len = total_len; vec[1].iov_base = resultbuf->gr_name; diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c index cf6a569516..13a1da85f7 100644 --- a/nscd/nscd_gethst_r.c +++ b/nscd/nscd_gethst_r.c @@ -165,7 +165,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type, if (hst_resp.found == 1) { struct iovec vec[4]; - size_t *aliases_len; + uint32_t *aliases_len; char *cp = buffer; uintptr_t align1; uintptr_t align2; @@ -206,12 +206,12 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type, vec[0].iov_base = resultbuf->h_name; vec[0].iov_len = hst_resp.h_name_len; - aliases_len = alloca (hst_resp.h_aliases_cnt * sizeof (size_t)); + aliases_len = alloca (hst_resp.h_aliases_cnt * sizeof (uint32_t)); vec[1].iov_base = aliases_len; - vec[1].iov_len = hst_resp.h_aliases_cnt * sizeof (size_t); + vec[1].iov_len = hst_resp.h_aliases_cnt * sizeof (uint32_t); total_len = (hst_resp.h_name_len - + hst_resp.h_aliases_cnt * sizeof (size_t)); + + hst_resp.h_aliases_cnt * sizeof (uint32_t)); n = 2; if (type == GETHOSTBYADDR || type == GETHOSTBYNAME) diff --git a/sysdeps/unix/sysv/linux/i386/bits/fcntl.h b/sysdeps/unix/sysv/linux/i386/bits/fcntl.h index ba15580277..407ae7621a 100644 --- a/sysdeps/unix/sysv/linux/i386/bits/fcntl.h +++ b/sysdeps/unix/sysv/linux/i386/bits/fcntl.h @@ -88,6 +88,12 @@ # define F_GETSIG 11 /* Get number of signal to be sent. */ #endif +#ifdef __USE_GNU +# define F_SETLEASE 1024 /* Set a lease. */ +# define F_GETLEASE 1025 /* Enquire what lease is active. */ +# define F_NOTIFY 1026 /* Request notfications on a directory. */ +#endif + /* For F_[GET|SET]FL. */ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ @@ -109,6 +115,22 @@ # define LOCK_UN 8 /* remove lock */ #endif +#ifdef __USE_GNU +# define LOCK_MAND 32 /* This is a mandatory flock: */ +# define LOCK_READ 64 /* ... which allows concurrent read operations. */ +# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ +# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ +#endif + +/* Types of directory notifications that may be requested with F_NOTIFY. */ +#define DN_ACCESS 0x00000001 /* File accessed. */ +#define DN_MODIFY 0x00000002 /* File modified. */ +#define DN_CREATE 0x00000004 /* File created. */ +#define DN_DELETE 0x00000008 /* File removed. */ +#define DN_RENAME 0x00000010 /* File renamed. */ +#define DN_ATTRIB 0x00000020 /* File changed attibutes. */ +#define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ + struct flock { short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ diff --git a/sysdeps/unix/sysv/linux/ia64/setjmp.S b/sysdeps/unix/sysv/linux/ia64/setjmp.S index e5bf667d45..05f47bc46e 100644 --- a/sysdeps/unix/sysv/linux/ia64/setjmp.S +++ b/sysdeps/unix/sysv/linux/ia64/setjmp.S @@ -152,15 +152,14 @@ __sigsetjmp: st8.spill.nta [r2]=r6,16 // r6 st8.spill.nta [r3]=r7,16 // r7 - cmp.ne p8,p0=0,in1 ;; mov r23=ar.bsp mov r25=ar.unat mov out0=in0 - mov out1=in1 st8.nta [r2]=loc1,16 // b0 st8.nta [r3]=r17,16 // b1 + mov out1=in1 ;; st8.nta [r2]=r18,16 // b2 st8.nta [r3]=r19,16 // b3 @@ -176,7 +175,7 @@ __sigsetjmp: ;; st8.nta [r2]=r25 // ar.unat st8.nta [r3]=in0 // &__jmp_buf -(p8) br.call.dpnt.few rp=__sigjmp_save + br.call.dpnt.few rp=__sigjmp_save .ret0: // force a new bundle ::q mov r8=0 mov rp=loc1 diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.S b/sysdeps/unix/sysv/linux/ia64/sysdep.S index dcf9803044..e327e1fa30 100644 --- a/sysdeps/unix/sysv/linux/ia64/sysdep.S +++ b/sysdeps/unix/sysv/linux/ia64/sysdep.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Hewlett-Packard Co. +/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. Contributed by David Mosberger-Tang . The GNU C Library is free software; you can redistribute it and/or @@ -74,11 +74,10 @@ __syscall_error: .endp __syscall_error - .global __ia64_syscall - .proc __ia64_syscall -__ia64_syscall: - break __BREAK_SYSCALL - cmp.eq p6,p0=-1,r10 -(p6) br.cond.spnt.few __syscall_error - ret - .endp __ia64_syscall +ENTRY(__ia64_syscall) + mov r15=r37 /* syscall number */ + break __BREAK_SYSCALL + cmp.eq p6,p0=-1,r10 /* r10 = -1 on error */ +(p6) br.cond.spnt.few __syscall_error + ret +PSEUDO_END(__ia64_syscall) diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.h b/sysdeps/unix/sysv/linux/ia64/sysdep.h index bb4ab29eba..5f7f3fe3eb 100644 --- a/sysdeps/unix/sysv/linux/ia64/sysdep.h +++ b/sysdeps/unix/sysv/linux/ia64/sysdep.h @@ -34,6 +34,23 @@ #ifdef __ASSEMBLER__ +#undef CALL_MCOUNT +#ifdef PROF +# define CALL_MCOUNT \ + .data; \ +1: data8 0; \ + .previous; \ + alloc out0 = ar.pfs, 8, 0, 4, 0; \ + mov out1 = gp; \ + mov out2 = rp; \ + ;; \ + addl out3 = @ltoff(1b), gp; \ + br.call.sptk.many rp = _mcount \ + ;; +#else +# define CALL_MCOUNT /* Do nothing. */ +#endif + /* Linux uses a negative return value to indicate syscall errors, unlike most Unices, which use the condition codes' carry flag. @@ -48,13 +65,6 @@ table when we define it here. */ #define SYSCALL_ERROR_LABEL __syscall_error -#ifdef PROF -#error "define CALL_MCOUNT" -#else -#define CALL_MCOUNT -#endif - - #undef PSEUDO #define PSEUDO(name, syscall_name, args) \ ENTRY(name) \ -- cgit v1.2.3