diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/Makefile b/nptl/sysdeps/unix/sysv/linux/sparc/Makefile
deleted file mode 100644
index e98c9bd..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-# pull in __syscall_error routine
-libpthread-routines += sysdep
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/Versions b/nptl/sysdeps/unix/sysv/linux/sparc/Versions
deleted file mode 100644
index d102772..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/Versions
+++ /dev/null
@@ -1,6 +0,0 @@
-libpthread {
-  GLIBC_2.3.3 {
-    # Changed PTHREAD_STACK_MIN.
-    pthread_attr_setstack; pthread_attr_setstacksize;
-  }
-}
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/Makefile b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/Makefile
deleted file mode 100644
index f7acc01..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-libpthread-routines += cpu_relax
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/cpu_relax.S b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/cpu_relax.S
deleted file mode 100644
index 4ac4d14..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/cpu_relax.S
+++ /dev/null
@@ -1 +0,0 @@
-#include <sparc64/cpu_relax.S>
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c
deleted file mode 100644
index 2d32e58..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../pthread_barrier_wait.c"
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c
deleted file mode 100644
index 73d7c56..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../sem_post.c"
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c
deleted file mode 100644
index 03945b7..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../sem_timedwait.c"
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_trywait.c b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_trywait.c
deleted file mode 100644
index aae46f7..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_trywait.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../../sem_trywait.c"
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c
deleted file mode 100644
index a5dbc5a..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../sem_wait.c"
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile b/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
deleted file mode 100644
index 656d2e0..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-libpthread-routines += cpu_relax
-
-ifeq ($(subdir),nptl)
-CFLAGS-pause.c += -fexceptions
-CFLAGS-sigsuspend.c += -fexceptions
-endif
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Versions b/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Versions
deleted file mode 100644
index 3b111dd..0000000
--- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/Versions
+++ /dev/null
@@ -1,7 +0,0 @@
-librt {
-  GLIBC_2.3.3 {
-    # Changed timer_t.
-    timer_create; timer_delete; timer_getoverrun; timer_gettime;
-    timer_settime;
-  }
-}
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/internaltypes.h b/sysdeps/sparc/nptl/internaltypes.h
similarity index 94%
rename from nptl/sysdeps/unix/sysv/linux/sparc/internaltypes.h
rename to sysdeps/sparc/nptl/internaltypes.h
index 4f400a3..e5c2740 100644
--- a/nptl/sysdeps/unix/sysv/linux/sparc/internaltypes.h
+++ b/sysdeps/sparc/nptl/internaltypes.h
@@ -1,5 +1,6 @@
 #ifndef _INTERNALTYPES_H
-#include "../internaltypes.h"
+
+#include_next <internaltypes.h>
 
 union sparc_pthread_barrier
 {
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c b/sysdeps/sparc/nptl/pthread_barrier_destroy.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c
rename to sysdeps/sparc/nptl/pthread_barrier_destroy.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c b/sysdeps/sparc/nptl/pthread_barrier_init.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c
rename to sysdeps/sparc/nptl/pthread_barrier_init.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c b/sysdeps/sparc/nptl/pthread_barrier_wait.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c
rename to sysdeps/sparc/nptl/pthread_barrier_wait.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sem_init.c b/sysdeps/sparc/nptl/sem_init.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sem_init.c
rename to sysdeps/sparc/nptl/sem_init.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c b/sysdeps/sparc/nptl/sem_post.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c
rename to sysdeps/sparc/nptl/sem_post.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c b/sysdeps/sparc/nptl/sem_timedwait.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c
rename to sysdeps/sparc/nptl/sem_timedwait.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c b/sysdeps/sparc/nptl/sem_wait.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c
rename to sysdeps/sparc/nptl/sem_wait.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c b/sysdeps/sparc/sparc32/nptl/lowlevellock.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c
rename to sysdeps/sparc/sparc32/nptl/lowlevellock.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c b/sysdeps/sparc/sparc32/nptl/pthread_barrier_wait.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c
rename to sysdeps/sparc/sparc32/nptl/pthread_barrier_wait.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c b/sysdeps/sparc/sparc32/nptl/sem_post.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c
rename to sysdeps/sparc/sparc32/nptl/sem_post.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c b/sysdeps/sparc/sparc32/nptl/sem_timedwait.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c
rename to sysdeps/sparc/sparc32/nptl/sem_timedwait.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c b/sysdeps/sparc/sparc32/nptl/sem_trywait.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c
rename to sysdeps/sparc/sparc32/nptl/sem_trywait.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c b/sysdeps/sparc/sparc32/nptl/sem_wait.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c
rename to sysdeps/sparc/sparc32/nptl/sem_wait.c
diff --git a/sysdeps/sparc/sparc32/sparcv9/Makefile b/sysdeps/sparc/sparc32/sparcv9/Makefile
index 7d475b0..36f889e 100644
--- a/sysdeps/sparc/sparc32/sparcv9/Makefile
+++ b/sysdeps/sparc/sparc32/sparcv9/Makefile
@@ -18,3 +18,7 @@ ASFLAGS-.op += -Wa,-Av9a
 ASFLAGS-.og += -Wa,-Av9a
 ASFLAGS-.oS += -Wa,-Av9a
 endif
+
+ifeq ($(subdir), nptl)
+libpthread-routines += cpu_relax
+endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/nptl/cpu_relax.S b/sysdeps/sparc/sparc32/sparcv9/nptl/cpu_relax.S
new file mode 100644
index 0000000..fa88647
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/nptl/cpu_relax.S
@@ -0,0 +1 @@
+#include <sysdeps/sparc/sparc64/nptl/cpu_relax.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/nptl/pthread_barrier_wait.c b/sysdeps/sparc/sparc32/sparcv9/nptl/pthread_barrier_wait.c
new file mode 100644
index 0000000..8336f5e
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/nptl/pthread_barrier_wait.c
@@ -0,0 +1 @@
+#include <sysdeps/sparc/nptl/pthread_barrier_wait.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/nptl/sem_post.c b/sysdeps/sparc/sparc32/sparcv9/nptl/sem_post.c
new file mode 100644
index 0000000..3c4b940
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/nptl/sem_post.c
@@ -0,0 +1 @@
+#include <sysdeps/sparc/nptl/sem_post.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/nptl/sem_timedwait.c b/sysdeps/sparc/sparc32/sparcv9/nptl/sem_timedwait.c
new file mode 100644
index 0000000..f19b2c5
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/nptl/sem_timedwait.c
@@ -0,0 +1 @@
+#include <sysdeps/sparc/nptl/sem_timedwait.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/nptl/sem_trywait.c b/sysdeps/sparc/sparc32/sparcv9/nptl/sem_trywait.c
new file mode 100644
index 0000000..80157c5
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/nptl/sem_trywait.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/sem_trywait.c>
diff --git a/sysdeps/sparc/sparc32/sparcv9/nptl/sem_wait.c b/sysdeps/sparc/sparc32/sparcv9/nptl/sem_wait.c
new file mode 100644
index 0000000..b6d8287
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/nptl/sem_wait.c
@@ -0,0 +1 @@
+#include <sysdeps/sparc/nptl/sem_wait.c>
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/cpu_relax.S b/sysdeps/sparc/sparc64/nptl/cpu_relax.S
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc64/cpu_relax.S
rename to sysdeps/sparc/sparc64/nptl/cpu_relax.S
diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/Makefile
index 96b783e..e67aecf 100644
--- a/sysdeps/unix/sysv/linux/sparc/Makefile
+++ b/sysdeps/unix/sysv/linux/sparc/Makefile
@@ -11,3 +11,8 @@ endif
 ifeq ($(subdir),sysvipc)
 sysdep_routines += getshmlba
 endif
+
+ifeq ($(subdir),nptl)
+# pull in __syscall_error routine
+libpthread-routines += sysdep
+endif
diff --git a/sysdeps/unix/sysv/linux/sparc/Versions b/sysdeps/unix/sysv/linux/sparc/Versions
index 5d31d1d..4dc1cd7 100644
--- a/sysdeps/unix/sysv/linux/sparc/Versions
+++ b/sysdeps/unix/sysv/linux/sparc/Versions
@@ -30,6 +30,14 @@ libc {
     __getshmlba;
   }
 }
+
+libpthread {
+  GLIBC_2.3.3 {
+    # Changed PTHREAD_STACK_MIN.
+    pthread_attr_setstack; pthread_attr_setstacksize;
+  }
+}
+
 librt {
   GLIBC_2.3 {
     # AIO functions.
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/aio_cancel.c b/sysdeps/unix/sysv/linux/sparc/aio_cancel.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/aio_cancel.c
rename to sysdeps/unix/sysv/linux/sparc/aio_cancel.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h b/sysdeps/unix/sysv/linux/sparc/lowlevellock.h
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h
rename to sysdeps/unix/sysv/linux/sparc/lowlevellock.h
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
rename to sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile b/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
index 715af3d..7ea433f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile
@@ -7,3 +7,8 @@ LD += -melf64_sparc
 ifeq ($(subdir),stdlib)
 sysdep_routines += __start_context
 endif
+
+ifeq ($(subdir),nptl)
+CFLAGS-pause.c += -fexceptions
+CFLAGS-sigsuspend.c += -fexceptions
+endif
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions b/sysdeps/unix/sysv/linux/sparc/sparc64/Versions
index cfcc15b..fbea1bb 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/Versions
@@ -9,3 +9,11 @@ libc {
     wordexp;
   }
 }
+
+librt {
+  GLIBC_2.3.3 {
+    # Changed timer_t.
+    timer_create; timer_delete; timer_getoverrun; timer_gettime;
+    timer_settime;
+  }
+}
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
rename to sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c
rename to sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c
rename to sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c
rename to sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c
rename to sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c
similarity index 100%
rename from nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c
rename to sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c
