summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--include/link.h10
-rw-r--r--nptl/ChangeLog3
-rw-r--r--nptl/descr.h8
-rw-r--r--sysdeps/unix/sysv/linux/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/tst-getcpu.c53
6 files changed, 74 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 2451feae3f..94902405a8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2007-05-10  Ulrich Drepper  <drepper@redhat.com>
 
+	* sysdeps/unix/sysv/linux/tst-getcpu.c: New file.
+	* sysdeps/unix/sysv/linux/Makefile [subdir=posix] (tests): Add
+	tst-getcpu.
+
+	* include/link.h: Move l_version and l_nversion members around to
+	fill gaps.
+
 	* scripts/check-c++-types.sh: Don't use -fnu89-inline option.
 
 	* sysdeps/unix/sysv/linux/sched_setaffinity.c
diff --git a/include/link.h b/include/link.h
index b45deabf7f..67d70470d1 100644
--- a/include/link.h
+++ b/include/link.h
@@ -1,6 +1,6 @@
 /* Data structure for communication from the run-time dynamic linker for
    loaded ELF shared objects.
-   Copyright (C) 1995-2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-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
@@ -141,6 +141,10 @@ struct link_map
     /* Dependent object that first caused this object to be loaded.  */
     struct link_map *l_loader;
 
+    /* Array with version names.  */
+    struct r_found_version *l_versions;
+    unsigned int l_nversions;
+
     /* Symbol hash table.  */
     Elf_Symndx l_nbuckets;
     Elf32_Word l_gnu_bitmask_idxbits;
@@ -184,10 +188,6 @@ struct link_map
     unsigned int l_removed:1;	/* Nozero if the object cannot be used anymore
 				   since it is removed.  */
 
-    /* Array with version names.  */
-    unsigned int l_nversions;
-    struct r_found_version *l_versions;
-
     /* Collected information about own RPATH directories.  */
     struct r_search_path_struct l_rpath_dirs;
 
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 24511664b7..882d3e9b29 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,5 +1,8 @@
 2007-05-10  Ulrich Drepper  <drepper@redhat.com>
 
+	* descr.h (struct pthread): Rearrange members to fill hole in
+	64-bit layout.
+
 	* sysdeps/unix/sysv/linux/pthread_setaffinity.c
 	(__pthread_setaffinity_new): If syscall was successful and
 	RESET_VGETCPU_CACHE is defined, use it before returning.
diff --git a/nptl/descr.h b/nptl/descr.h
index 321ce85085..00cad1aa83 100644
--- a/nptl/descr.h
+++ b/nptl/descr.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -268,6 +268,9 @@ struct pthread
 	       | EXITING_BITMASK | CANCEL_RESTMASK | TERMINATED_BITMASK))     \
    == (CANCELTYPE_BITMASK | CANCELED_BITMASK))
 
+  /* Flags.  Including those copied from the thread attribute.  */
+  int flags;
+
   /* We allocate one block of references here.  This should be enough
      to avoid allocating any memory dynamically for most applications.  */
   struct pthread_key_data
@@ -321,9 +324,6 @@ struct pthread
   /* Check whether a thread is detached.  */
 #define IS_DETACHED(pd) ((pd)->joinid == (pd))
 
-  /* Flags.  Including those copied from the thread attribute.  */
-  int flags;
-
   /* The result of the thread function.  */
   void *result;
 
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 78553b9795..a063b33389 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -113,6 +113,8 @@ ifeq ($(subdir),posix)
 sysdep_headers += bits/initspin.h
 
 sysdep_routines += exit-thread sched_getcpu
+
+tests += tst-getcpu
 endif
 
 ifeq ($(subdir),inet)
diff --git a/sysdeps/unix/sysv/linux/tst-getcpu.c b/sysdeps/unix/sysv/linux/tst-getcpu.c
new file mode 100644
index 0000000000..78c4a6919e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/tst-getcpu.c
@@ -0,0 +1,53 @@
+#include <errno.h>
+#include <stdio.h>
+#include <sched.h>
+
+
+static int
+do_test (void)
+{
+  cpu_set_t cs;
+  if (sched_getaffinity (getpid (), sizeof (cs), &cs) != 0)
+    {
+      printf ("getaffinity failed: %m\n");
+      return 1;
+    }
+
+  int result = 0;
+  int cpu = 0;
+  while (CPU_COUNT (&cs) != 0)
+    {
+      if (CPU_ISSET (cpu, &cs))
+	{
+	  cpu_set_t cs2;
+	  CPU_ZERO (&cs2);
+	  CPU_SET (cpu, &cs2);
+	  if (sched_setaffinity (getpid (), sizeof (cs2), &cs2) != 0)
+	    {
+	      printf ("setaffinity(%d) failed: %m\n", cpu);
+	      result = 1;
+	    }
+	  else
+	    {
+	      int cpu2 = sched_getcpu ();
+	      if (cpu2 == -1 && errno == ENOSYS)
+		{
+		  puts ("getcpu syscall not implemented");
+		  return 0;
+		}
+	      if (cpu2 != cpu)
+		{
+		  printf ("getcpu results %d not possible\n", cpu2);
+		  result = 1;
+		}
+	    }
+	  CPU_CLR (cpu, &cs);
+	}
+      ++cpu;
+    }
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include <test-skeleton.c>