2000-04-18  Ulrich Drepper  <drepper@redhat.com>

	* posix/Makefile (tests): Add tst-getaddrinfo.
	* posix/tst-getaddrinfo.c: New file.

	and setresuid from sysdep_routines.
This commit is contained in:
Ulrich Drepper 2000-04-18 07:56:20 +00:00
parent dbacafe52e
commit cd43f797c4
7 changed files with 96 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2000-04-18 Ulrich Drepper <drepper@redhat.com>
* posix/Makefile (tests): Add tst-getaddrinfo.
* posix/tst-getaddrinfo.c: New file.
2000-04-17 Ulrich Drepper <drepper@redhat.com> 2000-04-17 Ulrich Drepper <drepper@redhat.com>
* manual/sysinfo.texi: Document that umount2 is not widely available. * manual/sysinfo.texi: Document that umount2 is not widely available.
@ -41,7 +46,7 @@
2000-04-17 Thorsten Kukuk <kukuk@suse.de> 2000-04-17 Thorsten Kukuk <kukuk@suse.de>
* sysdeps/unix/sysv/linux/sparc/sparc32/Makefile: Remove setresgid * sysdeps/unix/sysv/linux/sparc/sparc32/Makefile: Remove setresgid
and setresuid frm sysdep_routines. and setresuid from sysdep_routines.
2000-04-17 Ulrich Drepper <drepper@redhat.com> 2000-04-17 Ulrich Drepper <drepper@redhat.com>

View File

@ -1,3 +1,13 @@
2000-04-18 Jakub Jelinek <jakub@redhat.com>
* sysdeps/sparc/sparc64/pt-machine.h (MEMORY_BARRIER): Use membar,
not stbar.
(READ_MEMORY_BARRIER): Define.
* spinlock.c (__pthread_spin_unlock): Use READ_MEMORY_BARRIER, not
MEMORY_BARRIER.
* internals.h (READ_MEMORY_BARRIER): Define if not defined in sysdep
headers.
2000-04-17 Ulrich Drepper <drepper@redhat.com> 2000-04-17 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/getcpuclockid.c * sysdeps/unix/sysv/linux/i386/getcpuclockid.c

View File

@ -359,11 +359,14 @@ static inline pthread_descr thread_self (void)
/* If MEMORY_BARRIER isn't defined in pt-machine.h, assume the architecture /* If MEMORY_BARRIER isn't defined in pt-machine.h, assume the architecture
doesn't need a memory barrier instruction (e.g. Intel x86). Some doesn't need a memory barrier instruction (e.g. Intel x86). Some
architectures distinguish between normal/read and write barriers. */ architectures distinguish between full, read and write barriers. */
#ifndef MEMORY_BARRIER #ifndef MEMORY_BARRIER
#define MEMORY_BARRIER() #define MEMORY_BARRIER()
#endif #endif
#ifndef READ_MEMORY_BARRIER
#define READ_MEMORY_BARRIER() MEMORY_BARRIER()
#endif
#ifndef WRITE_MEMORY_BARRIER #ifndef WRITE_MEMORY_BARRIER
#define WRITE_MEMORY_BARRIER() MEMORY_BARRIER() #define WRITE_MEMORY_BARRIER() MEMORY_BARRIER()
#endif #endif

View File

@ -122,12 +122,12 @@ again:
several iterations of the while loop. Some processors (e.g. several iterations of the while loop. Some processors (e.g.
multiprocessor Alphas) could perform such reordering even though multiprocessor Alphas) could perform such reordering even though
the loads are dependent. */ the loads are dependent. */
MEMORY_BARRIER(); READ_MEMORY_BARRIER();
thr = *ptr; thr = *ptr;
} }
/* Prevent reordering of the load of lock->__status above and /* Prevent reordering of the load of lock->__status above and
thr->p_nextlock below */ thr->p_nextlock below */
MEMORY_BARRIER(); READ_MEMORY_BARRIER();
/* Remove max prio thread from waiting list. */ /* Remove max prio thread from waiting list. */
if (maxptr == (pthread_descr *) &lock->__status) { if (maxptr == (pthread_descr *) &lock->__status) {
/* If max prio thread is at head, remove it with compare-and-swap /* If max prio thread is at head, remove it with compare-and-swap

View File

@ -38,9 +38,11 @@ testandset (int *spinlock)
/* Memory barrier; default is to do nothing */ /* Memory barrier; default is to do nothing */
/* FIXME: is stbar OK, or should we use the more general membar instruction? #define MEMORY_BARRIER() \
If so, which mode to pass to membar? */ __asm__ __volatile__("membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore" : : : "memory")
#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory") /* Read barrier. */
#define READ_MEMORY_BARRIER() \
__asm__ __volatile__("membar #LoadLoad | #LoadStore" : : : "memory")
/* Write barrier. */ /* Write barrier. */
#define WRITE_MEMORY_BARRIER() \ #define WRITE_MEMORY_BARRIER() \
__asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory") __asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory")

View File

@ -64,7 +64,8 @@ include ../Makeconfig
aux := init-posix environ aux := init-posix environ
tests := tstgetopt testfnm runtests runptests \ tests := tstgetopt testfnm runtests runptests \
tst-preadwrite test-vfork regexbug1 tst-getlogin tst-mmap tst-preadwrite test-vfork regexbug1 tst-getlogin tst-mmap \
tst-getaddrinfo
ifeq (yes,$(build-shared)) ifeq (yes,$(build-shared))
test-srcs := globtest test-srcs := globtest
tests += wordexp-test tests += wordexp-test

67
posix/tst-getaddrinfo.c Normal file
View File

@ -0,0 +1,67 @@
/* Copyright (C) 1999, 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 Library General Public License as
published by the Free Software Foundation; either version 2 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
Library General Public License for more details.
You should have received a copy of the GNU Library 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 <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int
do_test (void)
{
const int family[3] = { AF_INET, AF_INET6, AF_UNIX };
int result = 0;
int gaierr, index;
struct addrinfo hints, *ai, *aitop;
for (index = 0; index < sizeof (family) / sizeof (family[0]); ++index)
{
memset (&hints, '\0', sizeof (hints));
hints.ai_family = family[index];
hints.ai_socktype = SOCK_STREAM;
gaierr = getaddrinfo (NULL, "54321", &hints, &aitop);
if (gaierr != 0)
{
gai_strerror (gaierr);
result = 1;
}
else
{
for (ai = aitop; ai != NULL; ai = ai->ai_next)
{
printf ("Should return family: %d. Returned: %d\n",
family[index], ai->ai_family);
result |= family[index] != ai->ai_family;
}
while (aitop != NULL)
{
ai = aitop;
aitop = aitop->ai_next;
freeaddrinfo (ai);
}
}
}
return result;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"