2000-09-29  David Mosberger  <davidm@hpl.hp.com>

	* 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  <davidm@hpl.hp.com>

	* 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  <aj@suse.de>

	* sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Synch with Linux
	2.4.0-test9-pre7.

2000-09-29  Jakub Jelinek  <jakub@redhat.com>

	* 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.
This commit is contained in:
Ulrich Drepper 2000-09-29 16:45:44 +00:00
parent 062a2a18f4
commit 3107c0c5ae
11 changed files with 121 additions and 58 deletions

View File

@ -1,3 +1,30 @@
2000-09-29 David Mosberger <davidm@hpl.hp.com>
* 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 <davidm@hpl.hp.com>
* 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 <aj@suse.de>
* sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Synch with Linux
2.4.0-test9-pre7.
2000-09-29 Jakub Jelinek <jakub@redhat.com>
* 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 <drepper@redhat.com> 2000-09-29 Ulrich Drepper <drepper@redhat.com>
* inet/getnameinfo.c (nrl_domainname): Use symbolic constant * inet/getnameinfo.c (nrl_domainname): Use symbolic constant

5
NEWS
View File

@ -75,6 +75,11 @@ Version 2.2
compatibility for kernel versions before X.Y.Z. This is currently only compatibility for kernel versions before X.Y.Z. This is currently only
implemented for Linux. 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. * IA-64 port by Jes Sorensen and HJ Lu.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -23,6 +23,7 @@
#include <grp.h> #include <grp.h>
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
#include <stdint.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
@ -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_name_len = strlen (grp->gr_name) + 1;
size_t gr_passwd_len = strlen (grp->gr_passwd) + 1; size_t gr_passwd_len = strlen (grp->gr_passwd) + 1;
size_t gr_mem_cnt = 0; size_t gr_mem_cnt = 0;
size_t *gr_mem_len; uint32_t *gr_mem_len;
size_t gr_mem_len_total = 0; size_t gr_mem_len_total = 0;
char *gr_name; char *gr_name;
char *cp; char *cp;
@ -131,7 +132,7 @@ cache_addgr (struct database *db, int fd, request_header *req, void *key,
/* Determine the length of all members. */ /* Determine the length of all members. */
while (grp->gr_mem[gr_mem_cnt]) while (grp->gr_mem[gr_mem_cnt])
++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) 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; 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, /* We allocate all data in one memory block: the iov vector,
the response header and the dataset itself. */ the response header and the dataset itself. */
total = (sizeof (struct groupdata) 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); + gr_name_len + gr_passwd_len + gr_mem_len_total);
data = (struct groupdata *) malloc (total + n); data = (struct groupdata *) malloc (total + n);
if (data == NULL) if (data == NULL)
@ -157,7 +158,7 @@ cache_addgr (struct database *db, int fd, request_header *req, void *key,
cp = data->strdata; cp = data->strdata;
/* This is the member string length array. */ /* 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; gr_name = cp;
cp = mempcpy (cp, grp->gr_name, gr_name_len); cp = mempcpy (cp, grp->gr_name, gr_name_len);
cp = mempcpy (cp, grp->gr_passwd, gr_passwd_len); cp = mempcpy (cp, grp->gr_passwd, gr_passwd_len);

View File

@ -125,7 +125,7 @@ cache_addhst (struct database *db, int fd, request_header *req, void *key,
struct hostdata *data; struct hostdata *data;
size_t h_name_len = strlen (hst->h_name) + 1; size_t h_name_len = strlen (hst->h_name) + 1;
size_t h_aliases_cnt; size_t h_aliases_cnt;
size_t *h_aliases_len; uint32_t *h_aliases_len;
size_t h_addr_list_cnt; size_t h_addr_list_cnt;
int addr_list_type; int addr_list_type;
char *addresses; 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) for (cnt = 0; hst->h_aliases[cnt] != NULL; ++cnt)
++h_aliases_cnt; ++h_aliases_cnt;
/* Determine the length of all aliases. */ /* 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; total = 0;
for (cnt = 0; cnt < h_aliases_cnt; ++cnt) 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. */ the response header and the dataset itself. */
total += (sizeof (struct hostdata) total += (sizeof (struct hostdata)
+ h_name_len + h_name_len
+ h_aliases_cnt * sizeof (size_t) + h_aliases_cnt * sizeof (uint32_t)
+ h_addr_list_cnt * hst->h_length); + h_addr_list_cnt * hst->h_length);
data = (struct hostdata *) malloc (total + req->key_len); 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 = data->strdata;
cp = mempcpy (cp, hst->h_name, h_name_len); 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. */ /* The normal addresses first. */
addresses = cp; addresses = cp;

View File

@ -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. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
@ -24,7 +24,7 @@
#define _NSCD_CLIENT_H 1 #define _NSCD_CLIENT_H 1
/* Version number of the daemon interface */ /* 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. */ /* Path of the file where the PID of the running system is stored. */
#define _PATH_NSCDPID "/var/run/nscd.pid" #define _PATH_NSCDPID "/var/run/nscd.pid"
@ -60,7 +60,7 @@ typedef struct
{ {
int version; /* Version number of the daemon interface. */ int version; /* Version number of the daemon interface. */
request_type type; /* Service requested. */ request_type type; /* Service requested. */
ssize_t key_len; /* Key length. */ int32_t key_len; /* Key length. */
} request_header; } request_header;
@ -68,15 +68,15 @@ typedef struct
sent also if the service is disabled or there is no record found. */ sent also if the service is disabled or there is no record found. */
typedef struct typedef struct
{ {
int version; int32_t version;
int found; int32_t found;
ssize_t pw_name_len; int32_t pw_name_len;
ssize_t pw_passwd_len; int32_t pw_passwd_len;
uid_t pw_uid; uid_t pw_uid;
gid_t pw_gid; gid_t pw_gid;
ssize_t pw_gecos_len; int32_t pw_gecos_len;
ssize_t pw_dir_len; int32_t pw_dir_len;
ssize_t pw_shell_len; int32_t pw_shell_len;
} pw_response_header; } pw_response_header;
@ -84,12 +84,12 @@ typedef struct
sent also if the service is disabled or there is no record found. */ sent also if the service is disabled or there is no record found. */
typedef struct typedef struct
{ {
int version; int32_t version;
int found; int32_t found;
ssize_t gr_name_len; int32_t gr_name_len;
ssize_t gr_passwd_len; int32_t gr_passwd_len;
gid_t gr_gid; gid_t gr_gid;
ssize_t gr_mem_cnt; int32_t gr_mem_cnt;
} gr_response_header; } gr_response_header;
@ -97,14 +97,14 @@ typedef struct
sent also if the service is disabled or there is no record found. */ sent also if the service is disabled or there is no record found. */
typedef struct typedef struct
{ {
int version; int32_t version;
int found; int32_t found;
ssize_t h_name_len; int32_t h_name_len;
ssize_t h_aliases_cnt; int32_t h_aliases_cnt;
int h_addrtype; int32_t h_addrtype;
int h_length; int32_t h_length;
ssize_t h_addr_list_cnt; int32_t h_addr_list_cnt;
int error; int32_t error;
} hst_response_header; } hst_response_header;

View File

@ -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. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998. Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998.
@ -137,7 +137,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
if (gr_resp.found == 1) if (gr_resp.found == 1)
{ {
size_t *len; uint32_t *len;
char *p = buffer; char *p = buffer;
size_t total_len; size_t total_len;
uintptr_t align; 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; resultbuf->gr_gid = gr_resp.gr_gid;
/* Allocate array to store lengths. */ /* 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_base = len;
vec[0].iov_len = total_len; vec[0].iov_len = total_len;
vec[1].iov_base = resultbuf->gr_name; vec[1].iov_base = resultbuf->gr_name;

View File

@ -165,7 +165,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
if (hst_resp.found == 1) if (hst_resp.found == 1)
{ {
struct iovec vec[4]; struct iovec vec[4];
size_t *aliases_len; uint32_t *aliases_len;
char *cp = buffer; char *cp = buffer;
uintptr_t align1; uintptr_t align1;
uintptr_t align2; 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_base = resultbuf->h_name;
vec[0].iov_len = hst_resp.h_name_len; 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_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 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; n = 2;
if (type == GETHOSTBYADDR || type == GETHOSTBYNAME) if (type == GETHOSTBYADDR || type == GETHOSTBYNAME)

View File

@ -88,6 +88,12 @@
# define F_GETSIG 11 /* Get number of signal to be sent. */ # define F_GETSIG 11 /* Get number of signal to be sent. */
#endif #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. */ /* For F_[GET|SET]FL. */
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */
@ -109,6 +115,22 @@
# define LOCK_UN 8 /* remove lock */ # define LOCK_UN 8 /* remove lock */
#endif #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 struct flock
{ {
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */

View File

@ -152,15 +152,14 @@ __sigsetjmp:
st8.spill.nta [r2]=r6,16 // r6 st8.spill.nta [r2]=r6,16 // r6
st8.spill.nta [r3]=r7,16 // r7 st8.spill.nta [r3]=r7,16 // r7
cmp.ne p8,p0=0,in1
;; ;;
mov r23=ar.bsp mov r23=ar.bsp
mov r25=ar.unat mov r25=ar.unat
mov out0=in0 mov out0=in0
mov out1=in1
st8.nta [r2]=loc1,16 // b0 st8.nta [r2]=loc1,16 // b0
st8.nta [r3]=r17,16 // b1 st8.nta [r3]=r17,16 // b1
mov out1=in1
;; ;;
st8.nta [r2]=r18,16 // b2 st8.nta [r2]=r18,16 // b2
st8.nta [r3]=r19,16 // b3 st8.nta [r3]=r19,16 // b3
@ -176,7 +175,7 @@ __sigsetjmp:
;; ;;
st8.nta [r2]=r25 // ar.unat st8.nta [r2]=r25 // ar.unat
st8.nta [r3]=in0 // &__jmp_buf 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 .ret0: // force a new bundle ::q
mov r8=0 mov r8=0
mov rp=loc1 mov rp=loc1

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1999, 2000 Hewlett-Packard Co. /* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>. Contributed by David Mosberger-Tang <davidm@hpl.hp.com>.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -74,11 +74,10 @@ __syscall_error:
.endp __syscall_error .endp __syscall_error
.global __ia64_syscall ENTRY(__ia64_syscall)
.proc __ia64_syscall mov r15=r37 /* syscall number */
__ia64_syscall: break __BREAK_SYSCALL
break __BREAK_SYSCALL cmp.eq p6,p0=-1,r10 /* r10 = -1 on error */
cmp.eq p6,p0=-1,r10 (p6) br.cond.spnt.few __syscall_error
(p6) br.cond.spnt.few __syscall_error ret
ret PSEUDO_END(__ia64_syscall)
.endp __ia64_syscall

View File

@ -34,6 +34,23 @@
#ifdef __ASSEMBLER__ #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 /* Linux uses a negative return value to indicate syscall errors, unlike
most Unices, which use the condition codes' carry flag. most Unices, which use the condition codes' carry flag.
@ -48,13 +65,6 @@
table when we define it here. */ table when we define it here. */
#define SYSCALL_ERROR_LABEL __syscall_error #define SYSCALL_ERROR_LABEL __syscall_error
#ifdef PROF
#error "define CALL_MCOUNT"
#else
#define CALL_MCOUNT
#endif
#undef PSEUDO #undef PSEUDO
#define PSEUDO(name, syscall_name, args) \ #define PSEUDO(name, syscall_name, args) \
ENTRY(name) \ ENTRY(name) \