unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Fwd: Glibc/hurd patch till now
       [not found] <CAFtzXzMK58zUi_+G300j37Agxnd1FP3tm5mTJAJvAviA_8OU3w@mail.gmail.com>
@ 2014-04-09  9:20 ` Manolis Ragkousis
  0 siblings, 0 replies; only message in thread
From: Manolis Ragkousis @ 2014-04-09  9:20 UTC (permalink / raw)
  To: Ludovic Courtès, Guix-devel

[-- Attachment #1: Type: text/plain, Size: 473 bytes --]

I am sending my work till now so you can try and build it. It should
stop at "/../-gcc-cross-sans-libc-i686-pc-gnu-4.8.2/libexec/gcc/i686-pc-gnu/ld:
cannot find -lihash"

If you get any other error before that tell me. I cannot seem able to
reproduce the problem with hurd_atfork hooks after making sure that it
uses the right libpthread package.

Try and build it with
./pre-inst-env guix build -e '((@@ (gnu packages cross-base)
cross-libc/hurd) "i686-pc-gnu")'

Manolis

[-- Attachment #2: glibc_hurd.patch --]
[-- Type: text/x-patch, Size: 446583 bytes --]

From e53f7ca2cb7880ca4f6acfaedb020c2523eaf105 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Tue, 18 Mar 2014 11:33:41 +0000
Subject: [PATCH 01/18] gnu: base: Added glibc/hurd

* gnu/packages/base.scm (glibc/hurd): Added glibc/hurd

gnu: crossbase: Added cross-toolchain for the hurd

* gnu/packages/crossbase.scm (cross-gcc/hurd): Added a new cross-gcc
so I can try different config flags
* gnu/packages/crossbase.scm (cross-mig): Added cross-mig because
it is need to build the headers
* gnu/packages/crossbase.scm (cross-libc/hurd): Added cross-libc/hurd
---
 gnu/packages/base.scm       | 111 ++++++++++++++++++++++++
 gnu/packages/cross-base.scm | 205 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 316 insertions(+)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index e17933b..ea90c27 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -30,6 +30,10 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl)
+  #:use-module (guix git-download)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages hurd)
   #:use-module (gnu packages linux)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -484,6 +488,113 @@ with the Linux kernel.")
    (license lgpl2.0+)
    (home-page "http://www.gnu.org/software/libc/")))
 
+(define-public glibc/hurd 
+  (package (inherit glibc)
+           (name "glibc-hurd")
+           (source (origin
+                     (method git-fetch)
+                     (uri (git-reference
+                           (url "git://git.sv.gnu.org/hurd/glibc")
+                           (commit "bdb7a18d78b04ac3ef7a2d905485500f13bb69fb")))
+                     (sha256
+                      (base32
+                       "0v4hy6yimshbvhbhdbbjdir5fm3xr56zj3lnpf01d4nfa0c1h8k1"))
+                     
+                    ))
+           (propagated-inputs `(("gnumach-headers" ,gnumach-headers)
+                                ("hurd-headers" ,hurd-headers)))
+           (native-inputs
+            `(
+              ("patch/glibc-make" ,(search-patch "glibc-make-4.0.patch"))
+              ("mig" ,mig)
+              ("perl" ,perl)
+              ("autoconf" ,autoconf-wrapper)
+              ("automake" ,automake)
+              ("libpthread" ,(origin
+                               (method git-fetch)
+                               (uri (git-reference
+                                     (url "git://git.sv.gnu.org/hurd/libpthread")
+                                     (commit "fa9eb2c255e1d46beadcd81edd459b9c3d7dcb8c")))
+                               (sha256
+                                (base32 
+                                 "0bb8m0pk7b53sww4ahjds77bvqy0alz54g3aylzwncfca52gacqp"))
+                               (file-name "libpthread" )))))                        
+
+           (arguments
+            `(#:out-of-source? #t
+              #:configure-flags
+              (list "--without-cvs"
+                    "--enable-add-ons="
+                    ;;"--sysconfdir=/etc"
+                    "--disable-profile"
+                    "--disable-multi-arch"
+
+                    (string-append "libc_cv_localedir="
+                                   (assoc-ref %outputs "locales")
+                                   "/share/locale")
+                    
+                    ;; Use our Bash instead of /bin/sh.
+                    (string-append "BASH_SHELL="
+                                   (assoc-ref %build-inputs "bash")
+                           "/bin/bash"))
+              
+              #:phases (alist-cons-before
+                        'pre-configure 'autoconf
+                        (lambda _
+                          (system* "autoreconf" "-vi" "libpthread"))
+                          (alist-cons-before
+                           'configure 'pre-configure
+                           (lambda* (#:key inputs outputs #:allow-other-keys)
+                             (let* ((out  (assoc-ref outputs "out"))
+                                    (bin  (string-append out "/bin")))
+                               ;; Use `pwd', not `/bin/pwd'.
+                               (substitute* "configure"
+                                 (("/bin/pwd") "pwd"))
+                               
+                               ;; Copy a statically-linked Bash in the output, with
+                               ;; no references to other store paths.
+                               (mkdir-p bin)
+                               (copy-file (string-append (assoc-ref inputs "static-bash")
+                                                         "/bin/bash")
+                                          (string-append bin "/bash"))
+                               (remove-store-references (string-append bin "/bash"))
+                               (chmod (string-append bin "/bash") #o555)
+                            
+                               ;; Keep a symlink, for `patch-shebang' resolution.
+                               (with-directory-excursion bin
+                                 (symlink "bash" "sh"))
+                               
+                               ;; Have `system' use that Bash.
+                               (substitute* "sysdeps/posix/system.c"
+                                 (("#define[[:blank:]]+SHELL_PATH.*$")
+                                  (format #f "#define SHELL_PATH \"~a/bin/bash\"\n"
+                                          out)))
+                               
+                               ;; Same for `popen'.
+                               (substitute* "libio/iopopen.c"
+                              (("/bin/sh")
+                               (string-append out "/bin/bash")))))
+                           (alist-cons-after
+                            'install 'install-locales
+                            (lambda _
+                           (zero? (system* "make" "localedata/install-locales")))
+                            
+                            (alist-cons-after 
+                             'unpack 'apply-patch 
+                             (lambda _ 
+                               (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-make"))))
+                             (alist-replace
+                              'unpack
+                              ;; FIXME: Remove this when gnu-build-system handles that
+                              ;; case correctly.
+                              (lambda* (#:key inputs source #:allow-other-keys)                                        
+                                (mkdir "source")
+                                (chdir "source")
+                                (copy-recursively source ".")
+                                (copy-recursively (assoc-ref inputs "libpthread") "libpthread")
+                                #t)
+                              %standard-phases))))))) ))
+
 (define-public tzdata
   (package
     (name "tzdata")
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 41128b7..2dad637 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -21,6 +21,10 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages perl);;
+  #:use-module (guix git-download);;
+  #:use-module (gnu packages autotools);;
+  #:use-module (gnu packages hurd)
   #:use-module (gnu packages linux)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -256,6 +260,207 @@ XBINUTILS and the cross tool chain."
                      ("cross-binutils" ,xbinutils)
                      ,@(package-native-inputs glibc)))))
 
+(define* (cross-gcc/hurd target
+                    #:optional (xbinutils (cross-binutils target)) libc)
+  "Return a cross-compiler for TARGET, where TARGET is a GNU triplet.  Use
+XBINUTILS as the associated cross-Binutils.  If LIBC is false, then build a
+GCC that does not target a libc; otherwise, target that libc."
+  (package (inherit gcc-4.8)
+    (name (string-append "gcc-cross-hurd-"
+                         (if libc "" "sans-libc-")
+                         target))
+    (source (origin (inherit (package-source gcc-4.8))
+              (patches
+               (list (search-patch "gcc-cross-environment-variables.patch")))))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 regex)
+                  (srfi srfi-1)
+                  (srfi srfi-26))
+
+       ,@(substitute-keyword-arguments (package-arguments gcc-4.8)
+           ((#:configure-flags flags)
+            `(append (list ,(string-append "--target=" target)
+                           ,@(gcc-configure-flags-for-triplet target)
+                           ,@(if libc
+                                 '()
+                                 `(
+                                   ;; Disable features not needed at this stage.
+                                   "--disable-shared" "--enable-static"
+                                   "--without-headers"
+
+                                   ;; Disable C++ because libstdc++'s
+                                   ;; configure script otherwise fails with
+                                   ;; "Link tests are not allowed after
+                                   ;; GCC_NO_EXECUTABLES."
+                                   "--enable-languages=c"
+                                   
+                                   ;; Disabling things according to other hurd building 
+                                   ;; scripts I saw, I will explain everything with my final patch
+
+                                   "--disable-threads" ; libgcc, would need libc
+                                   "--disable-libatomic"
+                                   "--disable-libmudflap"
+                                   "--disable-libgomp"
+                                   "--disable-libssp"
+                                   "--disable-libquadmath"
+                                   "--disable-decimal-float" ; would need libc
+                                   "--with-arch=i686"
+                                   )))
+                     
+                     ,(if libc
+                          flags
+                          `(remove (cut string-match "--enable-languages.*" <>)
+                                   ,flags))))
+           ((#:make-flags flags)
+            (if libc
+                `(let ((libc (assoc-ref %build-inputs "libc")))
+                   ;; FLAGS_FOR_TARGET are needed for the target libraries to
+                   ;; receive the -Bxxx for the startfiles.
+                   (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
+                         ,flags))
+                flags))
+           ((#:phases phases)
+            (let ((phases
+                   `(alist-cons-after
+                     'install 'make-cross-binutils-visible
+                     (lambda* (#:key outputs inputs #:allow-other-keys)
+                       (let* ((out      (assoc-ref outputs "out"))
+                              (libexec  (string-append out "/libexec/gcc/"
+                                                       ,target))
+                              (binutils (string-append
+                                         (assoc-ref inputs "binutils-cross")
+                                         "/bin/" ,target "-")))
+                         (for-each (lambda (file)
+                                     (symlink (string-append binutils file)
+                                              (string-append libexec "/"
+                                                             file)))
+                                   '("as" "ld" "nm"))
+                         #t))
+                     ,phases)))phases));;)
+           ((#:strip-binaries? _)
+            ;; Disable stripping as this can break binaries, with object files
+            ;; of libgcc.a showing up as having an unknown architecture.  See
+            ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
+            ;; for instance.
+            #f))))
+
+    (native-inputs
+     `(("binutils-cross" ,xbinutils)
+
+       ;; Call it differently so that the builder can check whether the "libc"
+       ;; input is #f.
+       ("libc-native" ,@(assoc-ref %final-inputs "libc"))
+
+       ;; Remaining inputs.
+       ,@(let ((inputs (append (package-inputs gcc-4.8)
+                               (alist-delete "libc" %final-inputs))))
+           (if libc
+               `(("libc" ,libc)
+                 ,@inputs)
+               inputs))))
+
+    (inputs '())
+
+    ;; Only search target inputs, not host inputs.
+    (search-paths
+     (list (search-path-specification
+            (variable "CROSS_CPATH")
+            (directories '("include")))
+           (search-path-specification
+            (variable "CROSS_LIBRARY_PATH")
+            (directories '("lib" "lib64")))))
+    (native-search-paths '())))
+
+(define* (cross-mig target
+                    #:optional
+                    (xgcc (cross-gcc/hurd target))
+                    (xbinutils (cross-binutils target)))
+
+  (define xgnumach-headers
+    (package (inherit gnumach-headers)
+             (name (string-append (package-name gnumach-headers)
+                                  "-cross-" target))
+   
+             (native-inputs `(("cross-gcc-hurd" ,xgcc)
+                              ("cross-binutils" ,xbinutils)
+                              ,@(package-native-inputs gnumach-headers)))))
+    
+  (package (inherit mig)
+           (name (string-append "mig-cross"))
+           (arguments
+            (substitute-keyword-arguments (package-arguments mig)
+                ((#:configure-flags flags)
+                 `(cons ,(string-append "--target=" target)
+                        ,flags))
+              ))
+           (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)))
+           (native-inputs `(("cross-gcc-hurd" ,xgcc)
+                     ("cross-binutils" ,xbinutils)
+                     ,@(package-native-inputs mig)))))
+
+(define* (cross-libc/hurd target
+                     #:optional
+                     (xgcc (cross-gcc/hurd target))
+                     (xbinutils (cross-binutils target))
+                     (xmig (cross-mig target)))
+  "Return a libc cross-built for TARGET, a GNU triplet.  Use XGCC and
+XBINUTILS and the cross tool chain."
+
+  (define xgnumach-headers
+    (package (inherit gnumach-headers)
+             (name (string-append (package-name gnumach-headers)
+                                  "-cross-" target))
+             
+             (native-inputs `(("cross-gcc-hurd" ,xgcc)
+                              ("cross-binutils" ,xbinutils)
+                              ,@(package-native-inputs gnumach-headers)))))
+
+  (define xhurd-headers
+    (package (inherit hurd-headers)
+             (name (string-append (package-name hurd-headers)
+                                  "-cross-" target))
+
+             ;;removing the --host flag because I am getting the error that gcc cannot produce executables
+             (arguments
+              (substitute-keyword-arguments 
+                  `(#:modules ((guix build gnu-build-system)
+                               (guix build utils)
+                               (ice-9 regex)
+                               (srfi srfi-1)
+                               (srfi srfi-26))
+                              ,@(package-arguments hurd-headers))
+              ((#:configure-flags flags)
+               `(remove (cut string-match "--host.*" <>)
+                        ,flags))))
+             (native-inputs `(("cross-gcc-hurd" ,xgcc)
+                              ("cross-binutils" ,xbinutils)
+                              ("cross-mig" ,xmig)
+                              ,@(alist-delete "mig"(package-native-inputs hurd-headers))))))
+
+  
+  (package (inherit glibc/hurd)
+    (name (string-append "glibc-hurd-cross-" target))
+    (arguments
+     (substitute-keyword-arguments
+         `(#:strip-binaries? #f                ; disable stripping (see above)
+           ,@(package-arguments glibc/hurd))
+       ((#:configure-flags flags)
+        `(cons ,(string-append "--target=" target)
+               ,flags))))
+
+    (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)
+                         ("cross-hurd-headers" ,xhurd-headers)))
+
+    (native-inputs `(("cross-gcc-hurd" ,xgcc)
+                     ("cross-binutils" ,xbinutils)
+                     ("cross-mig" ,xmig)
+                     ,@(alist-delete "mig"(package-native-inputs glibc/hurd))))
+
+  ))        
+
 \f
 ;;;
 ;;; Concrete cross toolchains.
-- 
1.9.0


From 76b8bf336de89025b77c6f6a1c28cc97310ae0a2 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Thu, 20 Mar 2014 23:57:29 +0000
Subject: [PATCH 02/18] added hurd-minimal

---
 gnu/packages/base.scm       | 11 +++++---
 gnu/packages/cross-base.scm | 69 +++++++++++++++++++++++++++++++++++++--------
 gnu/packages/hurd.scm       | 45 +++++++++++++++++++++++++++++
 3 files changed, 110 insertions(+), 15 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index ea90c27..a998ff1 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -510,6 +510,8 @@ with the Linux kernel.")
               ("perl" ,perl)
               ("autoconf" ,autoconf-wrapper)
               ("automake" ,automake)
+              ("libtool" ,libtool)
+              ("libtool" ,libtool "bin")
               ("libpthread" ,(origin
                                (method git-fetch)
                                (uri (git-reference
@@ -518,17 +520,18 @@ with the Linux kernel.")
                                (sha256
                                 (base32 
                                  "0bb8m0pk7b53sww4ahjds77bvqy0alz54g3aylzwncfca52gacqp"))
-                               (file-name "libpthread" )))))                        
+                               (file-name "libpthread" )))))
 
            (arguments
             `(#:out-of-source? #t
               #:configure-flags
               (list "--without-cvs"
-                    "--enable-add-ons="
+                    "--enable-add-ons=libpthread"
+                    "--build=i686-pc-gnu"
                     ;;"--sysconfdir=/etc"
                     "--disable-profile"
                     "--disable-multi-arch"
-
+                    "--disable-sanity-checks"
                     (string-append "libc_cv_localedir="
                                    (assoc-ref %outputs "locales")
                                    "/share/locale")
@@ -541,7 +544,7 @@ with the Linux kernel.")
               #:phases (alist-cons-before
                         'pre-configure 'autoconf
                         (lambda _
-                          (system* "autoreconf" "-vi" "libpthread"))
+                          (system* "autoreconf" "-vif" "libpthread"))
                           (alist-cons-before
                            'configure 'pre-configure
                            (lambda* (#:key inputs outputs #:allow-other-keys)
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 2dad637..bc56f49 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -424,17 +424,63 @@ XBINUTILS and the cross tool chain."
                                   "-cross-" target))
 
              ;;removing the --host flag because I am getting the error that gcc cannot produce executables
+             ;; (arguments
+             ;;  (substitute-keyword-arguments 
+             ;;      `(#:modules ((guix build gnu-build-system)
+             ;;                   (guix build utils)
+             ;;                   (ice-9 regex)
+             ;;                   (srfi srfi-1)
+             ;;                   (srfi srfi-26))
+             ;;                  ,@(package-arguments hurd-headers))
+             ;;    ((#:configure-flags flags)
+             ;;     `(remove (cut string-match "--host.*" <>)
+             ;;              ,(cons ,(string-append "--target=" target)
+             ;;   ,flags)))))
              (arguments
-              (substitute-keyword-arguments 
-                  `(#:modules ((guix build gnu-build-system)
-                               (guix build utils)
-                               (ice-9 regex)
-                               (srfi srfi-1)
-                               (srfi srfi-26))
-                              ,@(package-arguments hurd-headers))
-              ((#:configure-flags flags)
-               `(remove (cut string-match "--host.*" <>)
-                        ,flags))))
+              `(#:phases (alist-replace
+                          'install
+                          (lambda _
+                            (zero? (system* "make" "install-headers" "no_deps=t")))
+                          (alist-delete 'build %standard-phases))
+                         
+                #:configure-flags '(;; Pretend we're on GNU/Hurd; 'configure' wants
+                                    ;; that.
+                                    "--build=i686-pc-gnu"
+                                    
+                                    ;; Reduce set of dependencies.
+                                    "--without-parted")
+                
+                #:tests? #f))
+             (native-inputs `(("cross-gcc-hurd" ,xgcc)
+                              ("cross-binutils" ,xbinutils)
+                              ("cross-mig" ,xmig)
+                              ,@(alist-delete "mig"(package-native-inputs hurd-headers))))))
+
+
+   (define xhurd-minimal
+    (package (inherit hurd-minimal)
+             (name (string-append (package-name hurd-minimal)
+                                  "-cross-" target))
+
+             (arguments
+              `(#:phases (alist-replace
+                 'install
+                 (lambda _
+                   (zero? (system* "make" "libihash-install")))
+                 (alist-replace 
+                  'build 
+                  (lambda _
+                    (zero? (system* "make" "libihash" )))
+                  %standard-phases))
+                         
+                #:configure-flags '(;; Pretend we're on GNU/Hurd; 'configure' wants
+                                    ;; that.
+                                    "--build=i686-pc-gnu"
+                                    
+                                    ;; Reduce set of dependencies.
+                                    "--without-parted")
+                
+                #:tests? #f))
              (native-inputs `(("cross-gcc-hurd" ,xgcc)
                               ("cross-binutils" ,xbinutils)
                               ("cross-mig" ,xmig)
@@ -452,7 +498,8 @@ XBINUTILS and the cross tool chain."
                ,flags))))
 
     (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)
-                         ("cross-hurd-headers" ,xhurd-headers)))
+                         ("cross-hurd-headers" ,xhurd-headers)
+                         ("cross-hurd-minimal" ,xhurd-minimal)))
 
     (native-inputs `(("cross-gcc-hurd" ,xgcc)
                      ("cross-binutils" ,xbinutils)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index f1e7dbc..8487d0c 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -128,3 +128,48 @@ communication.")
      "This package provides C headers of the GNU Hurd, used to build the GNU C
 Library and other user programs.")
     (license gpl2+)))
+
+(define-public hurd-minimal
+  (package
+    (name "hurd-minimal")
+    (version "0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/hurd/hurd-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0lvkz3r0ngb4bsn2hzdc9vjpyrfa3ls36jivrvy1n7f7f55zan7q"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(;; Autoconf shouldn't be necessary but there seems to be a bug in the
+       ;; build system triggering its use.
+       ("autoconf" ,autoconf)
+
+       ("mig" ,mig)))
+    ;;Build libihash which we need to build libpthread
+    (arguments
+     `(#:phases (alist-replace
+                 'install
+                 (lambda _
+                   (zero? (system* "make" "libihash-install")))
+                 (alist-replace 
+                  'build 
+                  (lambda _
+                    (zero? (system* "make" "libihash")))
+                  %standard-phases))
+
+       #:configure-flags '(;; Pretend we're on GNU/Hurd; 'configure' wants
+                           ;; that.
+                           "--host=i686-pc-gnu"
+
+                           ;; Reduce set of dependencies.
+                           "--without-parted")
+
+       #:tests? #f))
+    (home-page "http://www.gnu.org/software/hurd/hurd.html")
+    (synopsis "GNU Hurd libraries")
+    (description
+     "This package provides some minimal libs of the GNU Hurd, used to build the GNU C
+Library and other user programs.")
+    (license gpl2+)))
-- 
1.9.0


From d0cd8420bfa34a94531b95f1411955608b392f90 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Tue, 25 Mar 2014 09:20:48 +0000
Subject: [PATCH 03/18] fix

---
 gnu/packages/base.scm       | 9 +++++----
 gnu/packages/cross-base.scm | 6 +++---
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index a998ff1..e01b9df 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -508,7 +508,7 @@ with the Linux kernel.")
               ("patch/glibc-make" ,(search-patch "glibc-make-4.0.patch"))
               ("mig" ,mig)
               ("perl" ,perl)
-              ("autoconf" ,autoconf-wrapper)
+              ("autoconf" ,(autoconf-wrapper "autoconf-2.68"))
               ("automake" ,automake)
               ("libtool" ,libtool)
               ("libtool" ,libtool "bin")
@@ -516,7 +516,7 @@ with the Linux kernel.")
                                (method git-fetch)
                                (uri (git-reference
                                      (url "git://git.sv.gnu.org/hurd/libpthread")
-                                     (commit "fa9eb2c255e1d46beadcd81edd459b9c3d7dcb8c")))
+                                     (commit "3b391db91f70b2166951413ee1eccc78cd398a44")))
                                (sha256
                                 (base32 
                                  "0bb8m0pk7b53sww4ahjds77bvqy0alz54g3aylzwncfca52gacqp"))
@@ -526,8 +526,9 @@ with the Linux kernel.")
             `(#:out-of-source? #t
               #:configure-flags
               (list "--without-cvs"
-                    "--enable-add-ons=libpthread"
+                    "--enable-add-ons="
                     "--build=i686-pc-gnu"
+                    "--target=i686-pc-gnu"
                     ;;"--sysconfdir=/etc"
                     "--disable-profile"
                     "--disable-multi-arch"
@@ -544,7 +545,7 @@ with the Linux kernel.")
               #:phases (alist-cons-before
                         'pre-configure 'autoconf
                         (lambda _
-                          (system* "autoreconf" "-vif" "libpthread"))
+                          (system* "autoreconf" "-vif"))
                           (alist-cons-before
                            'configure 'pre-configure
                            (lambda* (#:key inputs outputs #:allow-other-keys)
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index bc56f49..cc43b88 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -253,7 +253,8 @@ XBINUTILS and the cross tool chain."
               (setenv "CROSS_CPATH"
                       (string-append linux "/include"))
               #t))
-          ,phases))))
+          ,phases))
+       ))
 
     (propagated-inputs `(("cross-linux-headers" ,xlinux-headers)))
     (native-inputs `(("cross-gcc" ,xgcc)
@@ -290,7 +291,6 @@ GCC that does not target a libc; otherwise, target that libc."
                                    ;; Disable features not needed at this stage.
                                    "--disable-shared" "--enable-static"
                                    "--without-headers"
-
                                    ;; Disable C++ because libstdc++'s
                                    ;; configure script otherwise fails with
                                    ;; "Link tests are not allowed after
@@ -307,7 +307,7 @@ GCC that does not target a libc; otherwise, target that libc."
                                    "--disable-libssp"
                                    "--disable-libquadmath"
                                    "--disable-decimal-float" ; would need libc
-                                   "--with-arch=i686"
+                                   ;;"--with-arch=i686"
                                    )))
                      
                      ,(if libc
-- 
1.9.0


From 56aff4e263b9b2165e4f1538f15a314c999de7b1 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Wed, 26 Mar 2014 00:28:08 +0000
Subject: [PATCH 04/18] getting the message autom4te: cannot open configure:
 Permission denied

---
 gnu/packages/base.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 412d489..a28f8cd 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -509,7 +509,7 @@ with the Linux kernel.")
               ("patch/glibc-make" ,(search-patch "glibc-make-4.0.patch"))
               ("mig" ,mig)
               ("perl" ,perl)
-              ("autoconf" ,(autoconf-wrapper "autoconf-2.68"))
+              ("autoconf" ,(autoconf-wrapper autoconf-2.68))
               ("automake" ,automake)
               ("libtool" ,libtool)
               ("libtool" ,libtool "bin")
-- 
1.9.0


From e9176d8f73465db04e314e93e2a2d99955ac1ac2 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Thu, 27 Mar 2014 00:38:52 +0000
Subject: [PATCH 05/18] Added patch that helps to integrate libpthread as a
 glibc module.

---
 .../libpthread-0.3-3b391d-glibc-preparation.patch  | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)
 create mode 100644 gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch

diff --git a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
new file mode 100644
index 0000000..d83ac37
--- /dev/null
+++ b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
@@ -0,0 +1,22 @@
+From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Thu, 27 Mar 2014 00:21:36 +0000
+Subject: [PATCH] This helps to integrate libpthread as a glibc module.
+
+---
+ configure | 2 ++
+ 1 file changed, 2 insertions(+)
+ create mode 100644 configure
+
+diff --git a/configure b/configure
+new file mode 100644
+index 0000000..2cdbc71
+--- /dev/null
++++ b/configure
+@@ -0,0 +1,2 @@
++libc_add_on_canonical=libpthread
++libc_add_on_subdirs=.
+\ No newline at end of file
+-- 
+1.9.0
+
-- 
1.9.0


From 86ee6a81b0affc8ec9243bdd1a07ce5d594aaa08 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Thu, 27 Mar 2014 00:42:43 +0000
Subject: [PATCH 06/18] libpthread addon builds succesfully

---
 gnu/packages/base.scm | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index a28f8cd..b63dc50 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -496,7 +496,9 @@ with the Linux kernel.")
                      (method git-fetch)
                      (uri (git-reference
                            (url "git://git.sv.gnu.org/hurd/glibc")
-                           (commit "bdb7a18d78b04ac3ef7a2d905485500f13bb69fb")))
+                           (commit "bdb7a18d78b04ac3ef7a2d905485500f13bb69fb")
+                           ;;(commit "9a079e270a9bec7e1fe28aeda63e07c1bb808d44")
+                           ))
                      (sha256
                       (base32
                        "0v4hy6yimshbvhbhdbbjdir5fm3xr56zj3lnpf01d4nfa0c1h8k1"))
@@ -507,6 +509,7 @@ with the Linux kernel.")
            (native-inputs
             `(
               ("patch/glibc-make" ,(search-patch "glibc-make-4.0.patch"))
+              ("patch/libpthread-patch" ,(search-patch "libpthread-0.3-3b391d-glibc-preparation.patch"))
               ("mig" ,mig)
               ("perl" ,perl)
               ("autoconf" ,(autoconf-wrapper autoconf-2.68))
@@ -517,7 +520,7 @@ with the Linux kernel.")
                                (method git-fetch)
                                (uri (git-reference
                                      (url "git://git.sv.gnu.org/hurd/libpthread")
-                                     (commit "3b391db91f70b2166951413ee1eccc78cd398a44")))
+                                     (commit "69e89a859882e4f675dd5491edc969159d8a4002")))
                                (sha256
                                 (base32 
                                  "0bb8m0pk7b53sww4ahjds77bvqy0alz54g3aylzwncfca52gacqp"))
@@ -527,7 +530,7 @@ with the Linux kernel.")
             `(#:out-of-source? #t
               #:configure-flags
               (list "--without-cvs"
-                    "--enable-add-ons="
+                    "--enable-add-ons"
                     "--build=i686-pc-gnu"
                     "--target=i686-pc-gnu"
                     ;;"--sysconfdir=/etc"
@@ -543,10 +546,20 @@ with the Linux kernel.")
                                    (assoc-ref %build-inputs "bash")
                            "/bin/bash"))
               
-              #:phases (alist-cons-before
-                        'pre-configure 'autoconf
-                        (lambda _
-                          (system* "autoreconf" "-vif"))
+              #:phases (alist-cons-after 
+                        'autoconf 'apply-patch 
+                        (lambda _ 
+                          (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-make")))
+                          (chdir "libpthread")
+                          (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/libpthread-patch")))
+                          (chdir "..")
+                          )
+                        (alist-cons-before
+                         'pre-configure 'autoconf
+                         (lambda _
+                           (chmod "configure" #o777)
+                          ;;(system* "autoreconf" "-vif")
+                           )
                           (alist-cons-before
                            'configure 'pre-configure
                            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -583,11 +596,6 @@ with the Linux kernel.")
                             'install 'install-locales
                             (lambda _
                            (zero? (system* "make" "localedata/install-locales")))
-                            
-                            (alist-cons-after 
-                             'unpack 'apply-patch 
-                             (lambda _ 
-                               (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-make"))))
                              (alist-replace
                               'unpack
                               ;; FIXME: Remove this when gnu-build-system handles that
-- 
1.9.0


From c6edbf966bb703617eed3c64e3554e8015797469 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Thu, 27 Mar 2014 01:03:14 +0000
Subject: [PATCH 07/18] added libpthread patch to gnu-system.am

---
 gnu-system.am | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gnu-system.am b/gnu-system.am
index f19a668..14cccea 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -300,6 +300,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/libtheora-config-guess.patch		\
   gnu/packages/patches/libtool-skip-tests.patch			\
   gnu/packages/patches/libtool-skip-tests-for-mips.patch	\
+  gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch\
   gnu/packages/patches/luit-posix.patch				\
   gnu/packages/patches/m4-gets-undeclared.patch			\
   gnu/packages/patches/m4-readlink-EINVAL.patch			\
-- 
1.9.0


From 003d97cf0c34f25a815a07fee2f9fa3001e62344 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Thu, 27 Mar 2014 01:23:24 +0000
Subject: [PATCH 08/18] start using the default xgcc, commented out xgcc/hurd I
 had created

---
 gnu/packages/cross-base.scm | 250 +++++++++++++++++++++-----------------------
 1 file changed, 118 insertions(+), 132 deletions(-)

diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index cc43b88..071602e 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -261,122 +261,122 @@ XBINUTILS and the cross tool chain."
                      ("cross-binutils" ,xbinutils)
                      ,@(package-native-inputs glibc)))))
 
-(define* (cross-gcc/hurd target
-                    #:optional (xbinutils (cross-binutils target)) libc)
-  "Return a cross-compiler for TARGET, where TARGET is a GNU triplet.  Use
-XBINUTILS as the associated cross-Binutils.  If LIBC is false, then build a
-GCC that does not target a libc; otherwise, target that libc."
-  (package (inherit gcc-4.8)
-    (name (string-append "gcc-cross-hurd-"
-                         (if libc "" "sans-libc-")
-                         target))
-    (source (origin (inherit (package-source gcc-4.8))
-              (patches
-               (list (search-patch "gcc-cross-environment-variables.patch")))))
-    (arguments
-     `(#:implicit-inputs? #f
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 regex)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-
-       ,@(substitute-keyword-arguments (package-arguments gcc-4.8)
-           ((#:configure-flags flags)
-            `(append (list ,(string-append "--target=" target)
-                           ,@(gcc-configure-flags-for-triplet target)
-                           ,@(if libc
-                                 '()
-                                 `(
-                                   ;; Disable features not needed at this stage.
-                                   "--disable-shared" "--enable-static"
-                                   "--without-headers"
-                                   ;; Disable C++ because libstdc++'s
-                                   ;; configure script otherwise fails with
-                                   ;; "Link tests are not allowed after
-                                   ;; GCC_NO_EXECUTABLES."
-                                   "--enable-languages=c"
+;; (define* (cross-gcc/hurd target
+;;                     #:optional (xbinutils (cross-binutils target)) libc)
+;;   "Return a cross-compiler for TARGET, where TARGET is a GNU triplet.  Use
+;; XBINUTILS as the associated cross-Binutils.  If LIBC is false, then build a
+;; GCC that does not target a libc; otherwise, target that libc."
+;;   (package (inherit gcc-4.8)
+;;     (name (string-append "gcc-cross-hurd-"
+;;                          (if libc "" "sans-libc-")
+;;                          target))
+;;     (source (origin (inherit (package-source gcc-4.8))
+;;               (patches
+;;                (list (search-patch "gcc-cross-environment-variables.patch")))))
+;;     (arguments
+;;      `(#:implicit-inputs? #f
+;;        #:modules ((guix build gnu-build-system)
+;;                   (guix build utils)
+;;                   (ice-9 regex)
+;;                   (srfi srfi-1)
+;;                   (srfi srfi-26))
+
+;;        ,@(substitute-keyword-arguments (package-arguments gcc-4.8)
+;;            ((#:configure-flags flags)
+;;             `(append (list ,(string-append "--target=" target)
+;;                            ,@(gcc-configure-flags-for-triplet target)
+;;                            ,@(if libc
+;;                                  '()
+;;                                  `(
+;;                                    ;; Disable features not needed at this stage.
+;;                                    "--disable-shared" "--enable-static"
+;;                                    "--without-headers"
+;;                                    ;; Disable C++ because libstdc++'s
+;;                                    ;; configure script otherwise fails with
+;;                                    ;; "Link tests are not allowed after
+;;                                    ;; GCC_NO_EXECUTABLES."
+;;                                    "--enable-languages=c"
                                    
-                                   ;; Disabling things according to other hurd building 
-                                   ;; scripts I saw, I will explain everything with my final patch
-
-                                   "--disable-threads" ; libgcc, would need libc
-                                   "--disable-libatomic"
-                                   "--disable-libmudflap"
-                                   "--disable-libgomp"
-                                   "--disable-libssp"
-                                   "--disable-libquadmath"
-                                   "--disable-decimal-float" ; would need libc
-                                   ;;"--with-arch=i686"
-                                   )))
+;;                                    ;; Disabling things according to other hurd building 
+;;                                    ;; scripts I saw, I will explain everything with my final patch
+
+;;                                    "--disable-threads" ; libgcc, would need libc
+;;                                    "--disable-libatomic"
+;;                                    "--disable-libmudflap"
+;;                                    "--disable-libgomp"
+;;                                    "--disable-libssp"
+;;                                    "--disable-libquadmath"
+;;                                    "--disable-decimal-float" ; would need libc
+;;                                    ;;"--with-arch=i686"
+;;                                    )))
                      
-                     ,(if libc
-                          flags
-                          `(remove (cut string-match "--enable-languages.*" <>)
-                                   ,flags))))
-           ((#:make-flags flags)
-            (if libc
-                `(let ((libc (assoc-ref %build-inputs "libc")))
-                   ;; FLAGS_FOR_TARGET are needed for the target libraries to
-                   ;; receive the -Bxxx for the startfiles.
-                   (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
-                         ,flags))
-                flags))
-           ((#:phases phases)
-            (let ((phases
-                   `(alist-cons-after
-                     'install 'make-cross-binutils-visible
-                     (lambda* (#:key outputs inputs #:allow-other-keys)
-                       (let* ((out      (assoc-ref outputs "out"))
-                              (libexec  (string-append out "/libexec/gcc/"
-                                                       ,target))
-                              (binutils (string-append
-                                         (assoc-ref inputs "binutils-cross")
-                                         "/bin/" ,target "-")))
-                         (for-each (lambda (file)
-                                     (symlink (string-append binutils file)
-                                              (string-append libexec "/"
-                                                             file)))
-                                   '("as" "ld" "nm"))
-                         #t))
-                     ,phases)))phases));;)
-           ((#:strip-binaries? _)
-            ;; Disable stripping as this can break binaries, with object files
-            ;; of libgcc.a showing up as having an unknown architecture.  See
-            ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
-            ;; for instance.
-            #f))))
-
-    (native-inputs
-     `(("binutils-cross" ,xbinutils)
-
-       ;; Call it differently so that the builder can check whether the "libc"
-       ;; input is #f.
-       ("libc-native" ,@(assoc-ref %final-inputs "libc"))
-
-       ;; Remaining inputs.
-       ,@(let ((inputs (append (package-inputs gcc-4.8)
-                               (alist-delete "libc" %final-inputs))))
-           (if libc
-               `(("libc" ,libc)
-                 ,@inputs)
-               inputs))))
-
-    (inputs '())
-
-    ;; Only search target inputs, not host inputs.
-    (search-paths
-     (list (search-path-specification
-            (variable "CROSS_CPATH")
-            (directories '("include")))
-           (search-path-specification
-            (variable "CROSS_LIBRARY_PATH")
-            (directories '("lib" "lib64")))))
-    (native-search-paths '())))
+;;                      ,(if libc
+;;                           flags
+;;                           `(remove (cut string-match "--enable-languages.*" <>)
+;;                                    ,flags))))
+;;            ((#:make-flags flags)
+;;             (if libc
+;;                 `(let ((libc (assoc-ref %build-inputs "libc")))
+;;                    ;; FLAGS_FOR_TARGET are needed for the target libraries to
+;;                    ;; receive the -Bxxx for the startfiles.
+;;                    (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
+;;                          ,flags))
+;;                 flags))
+;;            ((#:phases phases)
+;;             (let ((phases
+;;                    `(alist-cons-after
+;;                      'install 'make-cross-binutils-visible
+;;                      (lambda* (#:key outputs inputs #:allow-other-keys)
+;;                        (let* ((out      (assoc-ref outputs "out"))
+;;                               (libexec  (string-append out "/libexec/gcc/"
+;;                                                        ,target))
+;;                               (binutils (string-append
+;;                                          (assoc-ref inputs "binutils-cross")
+;;                                          "/bin/" ,target "-")))
+;;                          (for-each (lambda (file)
+;;                                      (symlink (string-append binutils file)
+;;                                               (string-append libexec "/"
+;;                                                              file)))
+;;                                    '("as" "ld" "nm"))
+;;                          #t))
+;;                      ,phases)))phases));;)
+;;            ((#:strip-binaries? _)
+;;             ;; Disable stripping as this can break binaries, with object files
+;;             ;; of libgcc.a showing up as having an unknown architecture.  See
+;;             ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
+;;             ;; for instance.
+;;             #f))))
+
+;;     (native-inputs
+;;      `(("binutils-cross" ,xbinutils)
+
+;;        ;; Call it differently so that the builder can check whether the "libc"
+;;        ;; input is #f.
+;;        ("libc-native" ,@(assoc-ref %final-inputs "libc"))
+
+;;        ;; Remaining inputs.
+;;        ,@(let ((inputs (append (package-inputs gcc-4.8)
+;;                                (alist-delete "libc" %final-inputs))))
+;;            (if libc
+;;                `(("libc" ,libc)
+;;                  ,@inputs)
+;;                inputs))))
+
+;;     (inputs '())
+
+;;     ;; Only search target inputs, not host inputs.
+;;     (search-paths
+;;      (list (search-path-specification
+;;             (variable "CROSS_CPATH")
+;;             (directories '("include")))
+;;            (search-path-specification
+;;             (variable "CROSS_LIBRARY_PATH")
+;;             (directories '("lib" "lib64")))))
+;;     (native-search-paths '())))
 
 (define* (cross-mig target
                     #:optional
-                    (xgcc (cross-gcc/hurd target))
+                    (xgcc (cross-gcc target))
                     (xbinutils (cross-binutils target)))
 
   (define xgnumach-headers
@@ -384,7 +384,7 @@ GCC that does not target a libc; otherwise, target that libc."
              (name (string-append (package-name gnumach-headers)
                                   "-cross-" target))
    
-             (native-inputs `(("cross-gcc-hurd" ,xgcc)
+             (native-inputs `(("cross-gcc" ,xgcc)
                               ("cross-binutils" ,xbinutils)
                               ,@(package-native-inputs gnumach-headers)))))
     
@@ -397,13 +397,13 @@ GCC that does not target a libc; otherwise, target that libc."
                         ,flags))
               ))
            (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)))
-           (native-inputs `(("cross-gcc-hurd" ,xgcc)
+           (native-inputs `(("cross-gcc" ,xgcc)
                      ("cross-binutils" ,xbinutils)
                      ,@(package-native-inputs mig)))))
 
 (define* (cross-libc/hurd target
                      #:optional
-                     (xgcc (cross-gcc/hurd target))
+                     (xgcc (cross-gcc target))
                      (xbinutils (cross-binutils target))
                      (xmig (cross-mig target)))
   "Return a libc cross-built for TARGET, a GNU triplet.  Use XGCC and
@@ -414,7 +414,7 @@ XBINUTILS and the cross tool chain."
              (name (string-append (package-name gnumach-headers)
                                   "-cross-" target))
              
-             (native-inputs `(("cross-gcc-hurd" ,xgcc)
+             (native-inputs `(("cross-gcc" ,xgcc)
                               ("cross-binutils" ,xbinutils)
                               ,@(package-native-inputs gnumach-headers)))))
 
@@ -422,20 +422,6 @@ XBINUTILS and the cross tool chain."
     (package (inherit hurd-headers)
              (name (string-append (package-name hurd-headers)
                                   "-cross-" target))
-
-             ;;removing the --host flag because I am getting the error that gcc cannot produce executables
-             ;; (arguments
-             ;;  (substitute-keyword-arguments 
-             ;;      `(#:modules ((guix build gnu-build-system)
-             ;;                   (guix build utils)
-             ;;                   (ice-9 regex)
-             ;;                   (srfi srfi-1)
-             ;;                   (srfi srfi-26))
-             ;;                  ,@(package-arguments hurd-headers))
-             ;;    ((#:configure-flags flags)
-             ;;     `(remove (cut string-match "--host.*" <>)
-             ;;              ,(cons ,(string-append "--target=" target)
-             ;;   ,flags)))))
              (arguments
               `(#:phases (alist-replace
                           'install
@@ -451,7 +437,7 @@ XBINUTILS and the cross tool chain."
                                     "--without-parted")
                 
                 #:tests? #f))
-             (native-inputs `(("cross-gcc-hurd" ,xgcc)
+             (native-inputs `(("cross-gcc" ,xgcc)
                               ("cross-binutils" ,xbinutils)
                               ("cross-mig" ,xmig)
                               ,@(alist-delete "mig"(package-native-inputs hurd-headers))))))
@@ -481,7 +467,7 @@ XBINUTILS and the cross tool chain."
                                     "--without-parted")
                 
                 #:tests? #f))
-             (native-inputs `(("cross-gcc-hurd" ,xgcc)
+             (native-inputs `(("cross-gcc" ,xgcc)
                               ("cross-binutils" ,xbinutils)
                               ("cross-mig" ,xmig)
                               ,@(alist-delete "mig"(package-native-inputs hurd-headers))))))
@@ -501,7 +487,7 @@ XBINUTILS and the cross tool chain."
                          ("cross-hurd-headers" ,xhurd-headers)
                          ("cross-hurd-minimal" ,xhurd-minimal)))
 
-    (native-inputs `(("cross-gcc-hurd" ,xgcc)
+    (native-inputs `(("cross-gcc" ,xgcc)
                      ("cross-binutils" ,xbinutils)
                      ("cross-mig" ,xmig)
                      ,@(alist-delete "mig"(package-native-inputs glibc/hurd))))
-- 
1.9.0


From 661c9862115827052293dbb3d036890ba94e0f80 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Thu, 27 Mar 2014 02:57:23 +0000
Subject: [PATCH 09/18] Something tries to get built in glibc as a 64 bit while
 hurd does not like that Neither do I

---
 gnu/packages/base.scm | 3 +++
 gnu/packages/gcc.scm  | 4 ++++
 2 files changed, 7 insertions(+)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index b63dc50..1a86d0b 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -537,6 +537,9 @@ with the Linux kernel.")
                     "--disable-profile"
                     "--disable-multi-arch"
                     "--disable-sanity-checks"
+                    "--disable-nscd"
+                    "--enable-obsolete-rpc"
+                    "--enable-stackguard-randomization"
                     (string-append "libc_cv_localedir="
                                    (assoc-ref %outputs "locales")
                                    "/share/locale")
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index cb7817c..a422edf 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -45,6 +45,10 @@ where the OS part is overloaded to denote a specific ABI---into GCC
          ;; Triplets recognized by glibc as denoting the N64 ABI; see
          ;; ports/sysdeps/mips/preconfigure.
          '("--with-abi=64"))
+        ((string-match "i686-pc-gnu" target)
+         ;; Triplets recognized by glibc as denoting the N64 ABI; see
+         ;; ports/sysdeps/mips/preconfigure.
+         '("--with-arch=i686"))
         (else
          ;; TODO: Add `armel.*gnueabi', `hf', etc.
          '())))
-- 
1.9.0


From 8e5e7a8be42a0882d3e360fffbe6fec57199292a Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Thu, 27 Mar 2014 23:36:18 +0000
Subject: [PATCH 10/18] Problem with lto-wrapper It's using the wrong one

---
 gnu/packages/base.scm       |  3 ++-
 gnu/packages/cross-base.scm | 26 ++++++++++++++++----------
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 1a86d0b..4437d8b 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -529,7 +529,8 @@ with the Linux kernel.")
            (arguments
             `(#:out-of-source? #t
               #:configure-flags
-              (list "--without-cvs"
+              (list "LDFLAGS=-m32"
+                    "--without-cvs"
                     "--enable-add-ons"
                     "--build=i686-pc-gnu"
                     "--target=i686-pc-gnu"
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 071602e..11ed551 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -95,7 +95,7 @@ GCC that does not target a libc; otherwise, target that libc."
                            ,@(gcc-configure-flags-for-triplet target)
                            ,@(if libc
                                  '()
-                                 `( ;; Disable features not needed at this stage.
+                                 `(;; Disable features not needed at this stage.
                                    "--disable-shared" "--enable-static"
 
                                    ;; Disable C++ because libstdc++'s
@@ -376,7 +376,7 @@ XBINUTILS and the cross tool chain."
 
 (define* (cross-mig target
                     #:optional
-                    (xgcc (cross-gcc target))
+                    (xgcc-i686-pc-gnu (cross-gcc target))
                     (xbinutils (cross-binutils target)))
 
   (define xgnumach-headers
@@ -384,7 +384,7 @@ XBINUTILS and the cross tool chain."
              (name (string-append (package-name gnumach-headers)
                                   "-cross-" target))
    
-             (native-inputs `(("cross-gcc" ,xgcc)
+             (native-inputs `(("cross-gcc" ,xgcc-i686-pc-gnu)
                               ("cross-binutils" ,xbinutils)
                               ,@(package-native-inputs gnumach-headers)))))
     
@@ -397,13 +397,13 @@ XBINUTILS and the cross tool chain."
                         ,flags))
               ))
            (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)))
-           (native-inputs `(("cross-gcc" ,xgcc)
+           (native-inputs `(("cross-gcc" ,xgcc-i686-pc-gnu)
                      ("cross-binutils" ,xbinutils)
                      ,@(package-native-inputs mig)))))
 
 (define* (cross-libc/hurd target
                      #:optional
-                     (xgcc (cross-gcc target))
+                     (xgcc-i686-pc-gnu (cross-gcc target))
                      (xbinutils (cross-binutils target))
                      (xmig (cross-mig target)))
   "Return a libc cross-built for TARGET, a GNU triplet.  Use XGCC and
@@ -414,7 +414,7 @@ XBINUTILS and the cross tool chain."
              (name (string-append (package-name gnumach-headers)
                                   "-cross-" target))
              
-             (native-inputs `(("cross-gcc" ,xgcc)
+             (native-inputs `(("cross-gcc" ,xgcc-i686-pc-gnu)
                               ("cross-binutils" ,xbinutils)
                               ,@(package-native-inputs gnumach-headers)))))
 
@@ -437,7 +437,7 @@ XBINUTILS and the cross tool chain."
                                     "--without-parted")
                 
                 #:tests? #f))
-             (native-inputs `(("cross-gcc" ,xgcc)
+             (native-inputs `(("cross-gcc" ,xgcc-i686-pc-gnu)
                               ("cross-binutils" ,xbinutils)
                               ("cross-mig" ,xmig)
                               ,@(alist-delete "mig"(package-native-inputs hurd-headers))))))
@@ -467,7 +467,7 @@ XBINUTILS and the cross tool chain."
                                     "--without-parted")
                 
                 #:tests? #f))
-             (native-inputs `(("cross-gcc" ,xgcc)
+             (native-inputs `(("cross-gcc" ,xgcc-i686-pc-gnu)
                               ("cross-binutils" ,xbinutils)
                               ("cross-mig" ,xmig)
                               ,@(alist-delete "mig"(package-native-inputs hurd-headers))))))
@@ -477,7 +477,7 @@ XBINUTILS and the cross tool chain."
     (name (string-append "glibc-hurd-cross-" target))
     (arguments
      (substitute-keyword-arguments
-         `(#:strip-binaries? #f                ; disable stripping (see above)
+         `(#:strip-binaries? #f              ; disable stripping (see above)
            ,@(package-arguments glibc/hurd))
        ((#:configure-flags flags)
         `(cons ,(string-append "--target=" target)
@@ -487,7 +487,7 @@ XBINUTILS and the cross tool chain."
                          ("cross-hurd-headers" ,xhurd-headers)
                          ("cross-hurd-minimal" ,xhurd-minimal)))
 
-    (native-inputs `(("cross-gcc" ,xgcc)
+    (native-inputs `(("cross-gcc" ,xgcc-i686-pc-gnu)
                      ("cross-binutils" ,xbinutils)
                      ("cross-mig" ,xmig)
                      ,@(alist-delete "mig"(package-native-inputs glibc/hurd))))
@@ -505,6 +505,12 @@ XBINUTILS and the cross tool chain."
                (cross-binutils triplet)
                (cross-libc triplet))))
 
+(define-public xgcc-i686-pc-gnu
+  (let ((triplet "i686-pc-gnu"))      ; 
+    (cross-gcc triplet
+               (cross-binutils triplet)
+               (cross-libc/hurd triplet))))
+
 ;; (define-public xgcc-armel
 ;;   (let ((triplet "armel-linux-gnueabi"))
 ;;     (cross-gcc triplet
-- 
1.9.0


From fc4578c28daad7fe625f43bb3dd528ad9a87d27c Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Sat, 29 Mar 2014 02:36:55 +0000
Subject: [PATCH 11/18] removed build,target flags, added host

---
 gnu/packages/base.scm       |  9 +++++----
 gnu/packages/cross-base.scm | 11 ++++++-----
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 4437d8b..bd14c39 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -520,7 +520,7 @@ with the Linux kernel.")
                                (method git-fetch)
                                (uri (git-reference
                                      (url "git://git.sv.gnu.org/hurd/libpthread")
-                                     (commit "69e89a859882e4f675dd5491edc969159d8a4002")))
+                                     (commit "3b391db91f70b2166951413ee1eccc78cd398a44")))
                                (sha256
                                 (base32 
                                  "0bb8m0pk7b53sww4ahjds77bvqy0alz54g3aylzwncfca52gacqp"))
@@ -529,11 +529,12 @@ with the Linux kernel.")
            (arguments
             `(#:out-of-source? #t
               #:configure-flags
-              (list "LDFLAGS=-m32"
+              (list ;;"LDFLAGS=-m32"
                     "--without-cvs"
                     "--enable-add-ons"
-                    "--build=i686-pc-gnu"
-                    "--target=i686-pc-gnu"
+                    "--host=i686-pc-gnu"
+                    ;;"--build=i686-pc-gnu"
+                    ;;"--target=i686-pc-gnu"
                     ;;"--sysconfdir=/etc"
                     "--disable-profile"
                     "--disable-multi-arch"
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 11ed551..b1aa461 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -394,8 +394,8 @@ XBINUTILS and the cross tool chain."
             (substitute-keyword-arguments (package-arguments mig)
                 ((#:configure-flags flags)
                  `(cons ,(string-append "--target=" target)
-                        ,flags))
-              ))
+                        ,flags))))
+
            (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)))
            (native-inputs `(("cross-gcc" ,xgcc-i686-pc-gnu)
                      ("cross-binutils" ,xbinutils)
@@ -479,9 +479,10 @@ XBINUTILS and the cross tool chain."
      (substitute-keyword-arguments
          `(#:strip-binaries? #f              ; disable stripping (see above)
            ,@(package-arguments glibc/hurd))
-       ((#:configure-flags flags)
-        `(cons ,(string-append "--target=" target)
-               ,flags))))
+       ;; ((#:configure-flags flags)
+       ;;  `(cons ,(string-append "--target=" target)
+       ;;         ,flags))
+       ))
 
     (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)
                          ("cross-hurd-headers" ,xhurd-headers)
-- 
1.9.0


From 2540d681313063dfd3569d49d4a067eeb0aca0b4 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Sat, 29 Mar 2014 13:35:32 +0000
Subject: [PATCH 12/18] set-env cross_path

---
 gnu/packages/cross-base.scm | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index b1aa461..71ffa21 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -482,6 +482,17 @@ XBINUTILS and the cross tool chain."
        ;; ((#:configure-flags flags)
        ;;  `(cons ,(string-append "--target=" target)
        ;;         ,flags))
+       ((#:phases phases)
+        `(alist-cons-before
+          'pre-configure 'set-cross-hurd-headers-path
+          (lambda* (#:key inputs #:allow-other-keys)
+            (let ((mach (assoc-ref inputs "cross-gnumach-headers"))
+                  (hurd (assoc-ref inputs "cross-hurd-headers")))
+              (setenv "CROSS_CPATH"
+                      (string-append mach "/include:"
+                                     hurd "/include"))
+              #t))
+          ,phases))
        ))
 
     (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)
-- 
1.9.0


From 37c44233f9650ff24e8d8ba253b214de2e28850d Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Sun, 30 Mar 2014 02:48:39 +0000
Subject: [PATCH 13/18] hacks to get pthread headers in the place glibc wants
 them

---
 gnu/packages/base.scm                              |  9 ++++++-
 .../libpthread-0.3-3b391d-glibc-preparation.patch  | 28 +++++++++++++++++++++-
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index bd14c39..953ab9e 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -498,6 +498,7 @@ with the Linux kernel.")
                            (url "git://git.sv.gnu.org/hurd/glibc")
                            (commit "bdb7a18d78b04ac3ef7a2d905485500f13bb69fb")
                            ;;(commit "9a079e270a9bec7e1fe28aeda63e07c1bb808d44")
+                           ;;(commit "56e49b714ecd32c72c334802b00e3d62008d98e3")
                            ))
                      (sha256
                       (base32
@@ -551,7 +552,7 @@ with the Linux kernel.")
                                    (assoc-ref %build-inputs "bash")
                            "/bin/bash"))
               
-              #:phases (alist-cons-after 
+              #:phases  (alist-cons-after 
                         'autoconf 'apply-patch 
                         (lambda _ 
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-make")))
@@ -610,6 +611,12 @@ with the Linux kernel.")
                                 (chdir "source")
                                 (copy-recursively source ".")
                                 (copy-recursively (assoc-ref inputs "libpthread") "libpthread")
+                                (chmod "bits/pthreadtypes.h" #o777)
+                                ;; (copy-file "libpthread/sysdeps/generic/bits/pthread.h" "bits/pthread.h")
+                                ;; (copy-file "libpthread/sysdeps/generic/bits/thread-attr.h" "bits/thread-attr.h")
+                                ;; (copy-file "libpthread/sysdeps/generic/bits/mutex-attr.h" "bits/mutex-attr.h")
+                                ;; (copy-file "libpthread/sysdeps/generic/bits/mutex.h" "bits/mutex.h")
+                                (copy-recursively "libpthread/sysdeps/generic/bits" "bits")
                                 #t)
                               %standard-phases))))))) ))
 
diff --git a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
index d83ac37..dd7d928 100644
--- a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
+++ b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
@@ -1,7 +1,7 @@
 From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Thu, 27 Mar 2014 00:21:36 +0000
-Subject: [PATCH] This helps to integrate libpthread as a glibc module.
+Subject: [PATCH 1/2] This helps to integrate libpthread as a glibc module.
 
 ---
  configure | 2 ++
@@ -20,3 +20,29 @@ index 0000000..2cdbc71
 -- 
 1.9.0
 
+
+From 7f5f718b4a231c1e08d9ed1676cb18e265b715d6 Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Sat, 29 Mar 2014 23:29:44 +0000
+Subject: [PATCH 2/2] fix
+
+---
+ signal/signal.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/signal/signal.h b/signal/signal.h
+index a33d995..6e22d05 100644
+--- a/signal/signal.h
++++ b/signal/signal.h
+@@ -26,7 +26,7 @@
+ 
+ typedef volatile int sig_atomic_t;
+ \f
+-typedef uint64_t sigset_t;
++/*typedef uint64_t sigset_t;*/
+ 
+ int sigaddset (sigset_t *, int);
+ int sigdelset (sigset_t *, int);
+-- 
+1.9.0
+
-- 
1.9.0


From 100342dbd0ddf5e6034f3070d764be8838a474c8 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Sun, 30 Mar 2014 17:31:14 +0000
Subject: [PATCH 14/18] More patches for hurd's libpthread

---
 gnu/packages/base.scm                              |    8 +-
 .../libpthread-0.3-3b391d-glibc-preparation.patch  | 5708 ++++++++++++++++++++
 2 files changed, 5710 insertions(+), 6 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 953ab9e..339551b 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -611,12 +611,8 @@ with the Linux kernel.")
                                 (chdir "source")
                                 (copy-recursively source ".")
                                 (copy-recursively (assoc-ref inputs "libpthread") "libpthread")
-                                (chmod "bits/pthreadtypes.h" #o777)
-                                ;; (copy-file "libpthread/sysdeps/generic/bits/pthread.h" "bits/pthread.h")
-                                ;; (copy-file "libpthread/sysdeps/generic/bits/thread-attr.h" "bits/thread-attr.h")
-                                ;; (copy-file "libpthread/sysdeps/generic/bits/mutex-attr.h" "bits/mutex-attr.h")
-                                ;; (copy-file "libpthread/sysdeps/generic/bits/mutex.h" "bits/mutex.h")
-                                (copy-recursively "libpthread/sysdeps/generic/bits" "bits")
+                        ;;        (chmod "bits/pthreadtypes.h" #o777)
+                          ;;      (copy-recursively "libpthread/sysdeps/generic/bits" "bits")
                                 #t)
                               %standard-phases))))))) ))
 
diff --git a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
index dd7d928..0ba23f0 100644
--- a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
+++ b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
@@ -1,6 +1,5714 @@
 From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Thu, 27 Mar 2014 00:21:36 +0000
+Subject: [PATCH 1/4] This helps to integrate libpthread as a glibc module.
+
+---
+ configure | 2 ++
+ 1 file changed, 2 insertions(+)
+ create mode 100644 configure
+
+diff --git a/configure b/configure
+new file mode 100644
+index 0000000..2cdbc71
+--- /dev/null
++++ b/configure
+@@ -0,0 +1,2 @@
++libc_add_on_canonical=libpthread
++libc_add_on_subdirs=.
+\ No newline at end of file
+-- 
+1.9.0
+
+
+From 7f5f718b4a231c1e08d9ed1676cb18e265b715d6 Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Sat, 29 Mar 2014 23:29:44 +0000
+Subject: [PATCH 2/4] fix
+
+---
+ signal/signal.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/signal/signal.h b/signal/signal.h
+index a33d995..6e22d05 100644
+--- a/signal/signal.h
++++ b/signal/signal.h
+@@ -26,7 +26,7 @@
+ 
+ typedef volatile int sig_atomic_t;
+ \f
+-typedef uint64_t sigset_t;
++/*typedef uint64_t sigset_t;*/
+ 
+ int sigaddset (sigset_t *, int);
+ int sigdelset (sigset_t *, int);
+-- 
+1.9.0
+
+
+From b8639799ae3b571eb44edd2b3dec109957393d3e Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Sun, 30 Mar 2014 16:56:09 +0000
+Subject: [PATCH 3/4] These come from the l4 implementation and come in the way
+ of the glibc Makefiles, drop them.
+
+---
+ include/libc-symbols.h      | 395 --------------------------------------------
+ include/set-hooks.h         |  72 --------
+ signal/README               |  12 --
+ signal/TODO                 |  29 ----
+ signal/kill.c               |  70 --------
+ signal/pt-kill-siginfo-np.c |  88 ----------
+ signal/sig-internal.c       |  26 ---
+ signal/sig-internal.h       | 177 --------------------
+ signal/sigaction.c          |  72 --------
+ signal/sigaltstack.c        |  69 --------
+ signal/signal-dispatch.c    | 117 -------------
+ signal/signal.h             | 275 ------------------------------
+ signal/sigpending.c         |  38 -----
+ signal/sigsuspend.c         |  29 ----
+ signal/sigtimedwait.c       |  30 ----
+ signal/sigwaiter.c          |  91 ----------
+ signal/sigwaitinfo.c        |  74 ---------
+ 17 files changed, 1664 deletions(-)
+ delete mode 100644 include/libc-symbols.h
+ delete mode 100644 include/set-hooks.h
+ delete mode 100644 signal/README
+ delete mode 100644 signal/TODO
+ delete mode 100644 signal/kill.c
+ delete mode 100644 signal/pt-kill-siginfo-np.c
+ delete mode 100644 signal/sig-internal.c
+ delete mode 100644 signal/sig-internal.h
+ delete mode 100644 signal/sigaction.c
+ delete mode 100644 signal/sigaltstack.c
+ delete mode 100644 signal/signal-dispatch.c
+ delete mode 100644 signal/signal.h
+ delete mode 100644 signal/sigpending.c
+ delete mode 100644 signal/sigsuspend.c
+ delete mode 100644 signal/sigtimedwait.c
+ delete mode 100644 signal/sigwaiter.c
+ delete mode 100644 signal/sigwaitinfo.c
+
+diff --git a/include/libc-symbols.h b/include/libc-symbols.h
+deleted file mode 100644
+index 54dd6e2..0000000
+--- a/include/libc-symbols.h
++++ /dev/null
+@@ -1,395 +0,0 @@
+-/* Support macros for making weak and strong aliases for symbols,
+-   and for using symbol sets and linker warnings with GNU ld.
+-   Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2008
+-     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 Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#ifndef _LIBC_SYMBOLS_H
+-#define _LIBC_SYMBOLS_H	1
+-
+-/* This file's macros are included implicitly in the compilation of every
+-   file in the C library by -imacros.
+-
+-   We include config.h which is generated by configure.
+-   It should define for us the following symbols:
+-
+-   * HAVE_ASM_SET_DIRECTIVE if we have `.set B, A' instead of `A = B'.
+-   * ASM_GLOBAL_DIRECTIVE with `.globl' or `.global'.
+-   * HAVE_GNU_LD if using GNU ld, with support for weak symbols in a.out,
+-   and for symbol set and warning messages extensions in a.out and ELF.
+-   * HAVE_ELF if using ELF, which supports weak symbols using `.weak'.
+-   * HAVE_ASM_WEAK_DIRECTIVE if we have weak symbols using `.weak'.
+-   * HAVE_ASM_WEAKEXT_DIRECTIVE if we have weak symbols using `.weakext'.
+-
+-   */
+-
+-/* This is defined for the compilation of all C library code.  features.h
+-   tests this to avoid inclusion of stubs.h while compiling the library,
+-   before stubs.h has been generated.  Some library code that is shared
+-   with other packages also tests this symbol to see if it is being
+-   compiled as part of the C library.  We must define this before including
+-   config.h, because it makes some definitions conditional on whether libc
+-   itself is being compiled, or just some generator program.  */
+-// #define _LIBC	1
+-
+-/* Enable declarations of GNU extensions, since we are compiling them.  */
+-#define _GNU_SOURCE	1
+-/* And we also need the data for the reentrant functions.  */
+-#define _REENTRANT	1
+-
+-// #include <config.h>
+-#define HAVE_ASM_WEAK_DIRECTIVE
+-#define HAVE_WEAK_SYMBOLS
+-#define HAVE_ASM_SET_DIRECTIVE
+-#define HAVE_BUILTIN_EXPECT
+-#define HAVE_GNU_LD
+-#define HAVE_ELF
+-#define HAVE_SECTION_QUOTES
+-#define HAVE_VISIBILITY_ATTRIBUTE
+-#define HAVE_ASM_PREVIOUS_DIRECTIVE
+-// #define SHARED
+-
+-/* The symbols in all the user (non-_) macros are C symbols.
+-   HAVE_GNU_LD without HAVE_ELF implies a.out.  */
+-
+-#if defined HAVE_ASM_WEAK_DIRECTIVE || defined HAVE_ASM_WEAKEXT_DIRECTIVE
+-# define HAVE_WEAK_SYMBOLS
+-#endif
+-
+-#ifndef __SYMBOL_PREFIX
+-# ifdef NO_UNDERSCORES
+-#  define __SYMBOL_PREFIX
+-# else
+-#  define __SYMBOL_PREFIX "_"
+-# endif
+-#endif
+-
+-#ifndef C_SYMBOL_NAME
+-# ifdef NO_UNDERSCORES
+-#  define C_SYMBOL_NAME(name) name
+-# else
+-#  define C_SYMBOL_NAME(name) _##name
+-# endif
+-#endif
+-
+-#ifndef ASM_LINE_SEP
+-# define ASM_LINE_SEP ;
+-#endif
+-
+-#ifndef C_SYMBOL_DOT_NAME
+-# define C_SYMBOL_DOT_NAME(name) .##name
+-#endif
+-
+-#ifndef __ASSEMBLER__
+-/* GCC understands weak symbols and aliases; use its interface where
+-   possible, instead of embedded assembly language.  */
+-
+-/* Define ALIASNAME as a strong alias for NAME.  */
+-# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+-# define _strong_alias(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+-
+-/* This comes between the return type and function name in
+-   a function definition to make that definition weak.  */
+-# define weak_function __attribute__ ((weak))
+-# define weak_const_function __attribute__ ((weak, __const__))
+-
+-# ifdef HAVE_WEAK_SYMBOLS
+-
+-/* Define ALIASNAME as a weak alias for NAME.
+-   If weak aliases are not available, this defines a strong alias.  */
+-#  define weak_alias(name, aliasname) _weak_alias (name, aliasname)
+-#  define _weak_alias(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
+-
+-/* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
+-#  define weak_extern(symbol) _weak_extern (symbol)
+-#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+-#   define _weak_extern(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
+-#  else
+-#   define _weak_extern(symbol)    asm (".weak " __SYMBOL_PREFIX #symbol);
+-#  endif
+-
+-# else
+-
+-#  define weak_alias(name, aliasname) strong_alias(name, aliasname)
+-#  define weak_extern(symbol) /* Nothing. */
+-
+-# endif
+-
+-#else /* __ASSEMBLER__ */
+-
+-# ifdef HAVE_ASM_SET_DIRECTIVE
+-#  define strong_alias(original, alias)		\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
+-# else
+-#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
+-#   define strong_alias(original, alias)	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
+-#  else
+-#   define strong_alias(original, alias)	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+-#  endif
+-# endif
+-
+-# ifdef HAVE_WEAK_SYMBOLS
+-#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+-#   define weak_alias(original, alias)	\
+-  .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
+-#   define weak_extern(symbol)	\
+-  .weakext C_SYMBOL_NAME (symbol)
+-
+-#  else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+-
+-#   ifdef HAVE_ASM_GLOBAL_DOT_NAME
+-#    define weak_alias(original, alias)	\
+-  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP			\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
+-#   else
+-#    define weak_alias(original, alias)	\
+-  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+-#   endif
+-
+-#   define weak_extern(symbol)	\
+-  .weak C_SYMBOL_NAME (symbol)
+-
+-#  endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+-
+-# else /* ! HAVE_WEAK_SYMBOLS */
+-
+-#  define weak_alias(original, alias) strong_alias(original, alias)
+-#  define weak_extern(symbol) /* Nothing */
+-# endif /* ! HAVE_WEAK_SYMBOLS */
+-
+-#endif /* __ASSEMBLER__ */
+-
+-/* On some platforms we can make internal function calls (i.e., calls of
+-   functions not exported) a bit faster by using a different calling
+-   convention.  */
+-#ifndef internal_function
+-# define internal_function	/* empty */
+-#endif
+-
+-/* Prepare for the case that `__builtin_expect' is not available.  */
+-#ifndef HAVE_BUILTIN_EXPECT
+-# define __builtin_expect(expr, val) (expr)
+-#endif
+-
+-/* Determine the return address.  */
+-#define RETURN_ADDRESS(nr) \
+-  __builtin_extract_return_addr (__builtin_return_address (nr))
+-
+-/* When a reference to SYMBOL is encountered, the linker will emit a
+-   warning message MSG.  */
+-#ifdef HAVE_GNU_LD
+-# ifdef HAVE_ELF
+-
+-/* We want the .gnu.warning.SYMBOL section to be unallocated.  */
+-#  ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
+-#   define __make_section_unallocated(section_string)	\
+-  asm (".section " section_string "\n\t.previous");
+-#  elif defined HAVE_ASM_POPSECTION_DIRECTIVE
+-#   define __make_section_unallocated(section_string)	\
+-  asm (".pushsection " section_string "\n\t.popsection");
+-#  else
+-#   define __make_section_unallocated(section_string)
+-#  endif
+-
+-/* Tacking on "\n\t#" to the section name makes gcc put it's bogus
+-   section attributes on what looks like a comment to the assembler.  */
+-#  ifdef HAVE_SECTION_QUOTES
+-#   define link_warning(symbol, msg) \
+-  __make_section_unallocated (".gnu.warning." #symbol) \
+-  static const char __evoke_link_warning_##symbol[]	\
+-    __attribute__ ((unused, section (".gnu.warning." #symbol "\"\n\t#\""))) \
+-    = msg;
+-#  else
+-#   define link_warning(symbol, msg) \
+-  __make_section_unallocated (".gnu.warning." #symbol) \
+-  static const char __evoke_link_warning_##symbol[]	\
+-    __attribute__ ((unused, section (".gnu.warning." #symbol "\n\t#"))) = msg;
+-#  endif
+-# else /* Not ELF: a.out */
+-#  ifdef HAVE_XCOFF
+-/* XCOFF does not support .stabs.
+-   The native aix linker will remove the .stab and .stabstr sections
+-   The gnu linker will have a fatal error if there is a relocation for
+-   symbol in the .stab section.  Silently disable this macro.  */
+-#   define link_warning(symbol, msg)
+-#  else
+-#   define link_warning(symbol, msg)		\
+-     asm (".stabs \"" msg "\",30,0,0,0\n\t"	\
+-          ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
+-#  endif /* XCOFF */
+-# endif
+-#else
+-/* We will never be heard; they will all die horribly.  */
+-# define link_warning(symbol, msg)
+-#endif
+-
+-/* A canned warning for sysdeps/stub functions.  */
+-#define	stub_warning(name) \
+-  link_warning (name, \
+-		"warning: " #name " is not implemented and will always fail")
+-
+-/*
+-\f
+-*/
+-
+-#ifdef HAVE_GNU_LD
+-
+-/* Symbol set support macros.  */
+-
+-# ifdef HAVE_ELF
+-
+-/* Make SYMBOL, which is in the text segment, an element of SET.  */
+-#  define text_set_element(set, symbol)	_elf_set_element(set, symbol)
+-/* Make SYMBOL, which is in the data segment, an element of SET.  */
+-#  define data_set_element(set, symbol)	_elf_set_element(set, symbol)
+-/* Make SYMBOL, which is in the bss segment, an element of SET.  */
+-#  define bss_set_element(set, symbol)	_elf_set_element(set, symbol)
+-
+-/* These are all done the same way in ELF.
+-   There is a new section created for each set.  */
+-#  ifdef SHARED
+-/* When building a shared library, make the set section writable,
+-   because it will need to be relocated at run time anyway.  */
+-#   define _elf_set_element(set, symbol) \
+-  static const void *__elf_set_##set##_element_##symbol##__ \
+-    __attribute__ ((unused, section (#set))) = &(symbol)
+-#  else
+-#   define _elf_set_element(set, symbol) \
+-  static const void *const __elf_set_##set##_element_##symbol##__ \
+-    __attribute__ ((unused, section (#set))) = &(symbol)
+-#  endif
+-
+-/* Define SET as a symbol set.  This may be required (it is in a.out) to
+-   be able to use the set's contents.  */
+-#  define symbol_set_define(set)	symbol_set_declare(set)
+-
+-/* Declare SET for use in this module, if defined in another module.  */
+-#  define symbol_set_declare(set) \
+-  extern void *const __start_##set __attribute__ ((__weak__));		\
+-  extern void *const __stop_##set __attribute__ ((__weak__));		\
+-  weak_extern (__start_##set) weak_extern (__stop_##set)
+-
+-/* Return a pointer (void *const *) to the first element of SET.  */
+-#  define symbol_set_first_element(set)	(&__start_##set)
+-
+-/* Return true iff PTR (a void *const *) has been incremented
+-   past the last element in SET.  */
+-#  define symbol_set_end_p(set, ptr)	((ptr) >= &__stop_##set)
+-
+-# else	/* Not ELF: a.out.  */
+-
+-#  ifdef HAVE_XCOFF
+-/* XCOFF does not support .stabs.
+-   The native aix linker will remove the .stab and .stabstr sections
+-   The gnu linker will have a fatal error if there is a relocation for
+-   symbol in the .stab section.  Silently disable these macros.  */
+-#   define text_set_element(set, symbol)
+-#   define data_set_element(set, symbol)
+-#   define bss_set_element(set, symbol)
+-#  else
+-#   define text_set_element(set, symbol)	\
+-    asm (".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
+-#   define data_set_element(set, symbol)	\
+-    asm (".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
+-#   define bss_set_element(set, symbol)	?error Must use initialized data.
+-#  endif /* XCOFF */
+-#  define symbol_set_define(set)	void *const (set)[1];
+-#  define symbol_set_declare(set)	extern void *const (set)[1];
+-
+-#  define symbol_set_first_element(set)	&(set)[1]
+-#  define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
+-
+-# endif	/* ELF.  */
+-#else
+-/* We cannot do anything in generial.  */
+-# define text_set_element(set, symbol) asm ("")
+-# define data_set_element(set, symbol) asm ("")
+-# define bss_set_element(set, symbol) asm ("")
+-# define symbol_set_define(set)		void *const (set)[1];
+-# define symbol_set_declare(set)	extern void *const (set)[1];
+-
+-# define symbol_set_first_element(set)	&(set)[1]
+-# define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
+-#endif	/* Have GNU ld.  */
+-
+-#if DO_VERSIONING
+-# define symbol_version(real, name, version) \
+-     _symbol_version(real, name, version)
+-# define default_symbol_version(real, name, version) \
+-     _default_symbol_version(real, name, version)
+-# ifdef __ASSEMBLER__
+-#  define _symbol_version(real, name, version) \
+-     .symver real, name##@##version
+-#  define _default_symbol_version(real, name, version) \
+-     .symver real, name##@##@##version
+-# else
+-#  define _symbol_version(real, name, version) \
+-     __asm__ (".symver " #real "," #name "@" #version)
+-#  define _default_symbol_version(real, name, version) \
+-     __asm__ (".symver " #real "," #name "@@" #version)
+-# endif
+-#else
+-# define symbol_version(real, name, version)
+-# define default_symbol_version(real, name, version) \
+-  strong_alias(real, name)
+-#endif
+-
+-#if defined HAVE_VISIBILITY_ATTRIBUTE && defined SHARED
+-# define attribute_hidden __attribute__ ((visibility ("hidden")))
+-#else
+-# define attribute_hidden
+-#endif
+-
+-/* Handling on non-exported internal names.  We have to do this only
+-   for shared code.  */
+-#ifdef SHARED
+-# define INTUSE(name) name##_internal
+-# define INTDEF(name) strong_alias (name, name##_internal)
+-# define INTVARDEF(name) \
+-  _INTVARDEF (name, name##_internal)
+-# if defined HAVE_VISIBILITY_ATTRIBUTE
+-#  define _INTVARDEF(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((alias (#name), \
+-						   visibility ("hidden")));
+-# else
+-#  define _INTVARDEF(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+-# endif
+-# define INTDEF2(name, newname) strong_alias (name, newname##_internal)
+-# define INTVARDEF2(name, newname) _INTVARDEF (name, newname##_internal)
+-#else
+-# define INTUSE(name) name
+-# define INTDEF(name)
+-# define INTVARDEF(name)
+-# define INTDEF2(name, newname)
+-# define INTVARDEF2(name, newname)
+-#endif
+-
+-#endif /* libc-symbols.h */
+diff --git a/include/set-hooks.h b/include/set-hooks.h
+deleted file mode 100644
+index 9ed71b3..0000000
+--- a/include/set-hooks.h
++++ /dev/null
+@@ -1,72 +0,0 @@
+-/* Macros for using symbol sets for running lists of functions.
+-   Copyright (C) 1994, 1995, 1997, 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 Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#ifndef _SET_HOOKS_H
+-#define _SET_HOOKS_H 1
+-
+-#define __need_size_t
+-#include <stddef.h>
+-// #include <sys/cdefs.h>
+-#define __unbounded
+-
+-#ifdef symbol_set_define
+-/* Define a hook variable called NAME.  Functions put on this hook take
+-   arguments described by PROTO.  Use `text_set_element (NAME, FUNCTION)'
+-   from gnu-stabs.h to add a function to the hook.  */
+-
+-# define DEFINE_HOOK(NAME, PROTO)		\
+-  typedef void __##NAME##_hook_function_t PROTO; \
+-  symbol_set_define (NAME)
+-
+-# define DECLARE_HOOK(NAME, PROTO)		\
+-  typedef void __##NAME##_hook_function_t PROTO;\
+-  symbol_set_declare (NAME)
+-
+-/* Run all the functions hooked on the set called NAME.
+-   Each function is called like this: `function ARGS'.  */
+-
+-# define RUN_HOOK(NAME, ARGS)				\
+-do {							\
+-  void *const *__unbounded ptr;				\
+-  for (ptr = symbol_set_first_element (NAME);		\
+-       ! symbol_set_end_p (NAME, ptr); ++ptr)		\
+-    (*(__##NAME##_hook_function_t *) *ptr) ARGS;	\
+-} while (0)
+-
+-/* Define a hook variable with NAME and PROTO, and a function called RUNNER
+-   which calls each function on the hook in turn, with ARGS.  */
+-
+-# define DEFINE_HOOK_RUNNER(name, runner, proto, args) \
+-DEFINE_HOOK (name, proto); \
+-extern void runner proto; void runner proto { RUN_HOOK (name, args); }
+-
+-#else
+-
+-/* The system does not provide necessary support for this.  */
+-# define DEFINE_HOOK(NAME, PROTO)
+-
+-# define DECLARE_HOOK(NAME, PROTO)
+-
+-# define RUN_HOOK(NAME, ARGS)
+-
+-# define DEFINE_HOOK_RUNNER(name, runner, proto, args)
+-
+-#endif
+-
+-#endif /* set-hooks.h */
+diff --git a/signal/README b/signal/README
+deleted file mode 100644
+index 4963b26..0000000
+--- a/signal/README
++++ /dev/null
+@@ -1,12 +0,0 @@
+-This directory provides a signal implementation, which is appropriate
+-for operating systems where signals are managed at user-level.  It is
+-up to the run-time to catch the signals and forward them to the
+-implementation via, e.g., the pthread_kill_info_np call.
+-
+-The files in this directory are accompanied by the generic implementations
+-found in sysdeps/generic/: killpg.c, raise.c, sigaddset.c, sigdelset.c,
+-sigemptyset.c, sigfillset.c, siginterrupt.c, sigismember.c, signal.c,
+-sigwait.c.
+-
+-This implementation was once used for a native port running on L4, but is not
+-currently used in any libpthread port bundled in this release.
+diff --git a/signal/TODO b/signal/TODO
+deleted file mode 100644
+index 1148abb..0000000
+--- a/signal/TODO
++++ /dev/null
+@@ -1,29 +0,0 @@
+-Unimplemented Functionality
+----------------------------
+-
+-We don't support interruptible functions.  That is, if a signal is
+-delivered when a thread is in e.g. the write system call, then the
+-write function should be interrupted and return EINTR when the signal
+-handler is finished.  To realize this behavior, we could have a thread
+-local interruptible flag and a setjmp buffer.  A function that is
+-interruptible would fill the jump buffer and set the interruptible
+-flag.  If a signal comes in and the interruptible flag is set, rather
+-than resuming the thread, we longjmp to the buffer.
+-
+-If a signal action has set the SA_SIGINFO, the third argument must be
+-a pointer to a ucontext describing the thread's interrupted state;
+-this implementation passes NULL.  This isn't as bad as it sounds as
+-the the ucontext family of functions are marked obsolete in SUSv3 with
+-the advisory that any use of them should be replaced by the use of
+-pthread functionality (cf. makecontext rationale).
+-
+-stop and continue signals are not implemented (as we need to stop all
+-threads, this requires being in bed with libpthread).
+-
+-Implementation is not yet cancellation-safe.
+-
+-There are not even stubs for sighold, sigingore, sigpause, sigrelse,
+-however, according to posix: "Use of any of these functions is
+-unspecified in a multi-threaded process."
+-
+-Implement sigtimedwait, sigqueue.
+\ No newline at end of file
+diff --git a/signal/kill.c b/signal/kill.c
+deleted file mode 100644
+index 27c9c32..0000000
+--- a/signal/kill.c
++++ /dev/null
+@@ -1,70 +0,0 @@
+-/* kill.c - Generic kill implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-int
+-kill (pid_t pid, int signo)
+-{
+-  if (pid != getpid ())
+-    {
+-      errno = EOPNOTSUPP;
+-      return -1;
+-    }
+-
+-  /* "Signals generated for the process shall be delivered to exactly
+-     one of those threads within the process which is in a call to a
+-     sigwait() function selecting that signal or has not blocked
+-     delivery of the signal.  If there are no threads in a call to a
+-     sigwait() function selecting that signal, and if all threads
+-     within the process block delivery of the signal, the signal shall
+-     remaing pending on the process" (2.4.1).  */
+-
+-  /* First, see if there is a waiter, which is interested in this
+-     signal.  */
+-  pthread_mutex_lock (&sig_lock);
+-
+-  struct sigwaiter *waiter;
+-  for (waiter = sigwaiters; waiter; waiter = waiter->next)
+-    if ((waiter->signals & sigmask (signo)))
+-      /* Got a winner.  */
+-      {
+-	sigdelset (&process_pending, signo);
+-
+-	pthread_mutex_lock (&waiter->ss->lock);
+-	sigdelset (&waiter->ss->pending, signo);
+-
+-	memset (&waiter->info, 0, sizeof (waiter->info));
+-	waiter->info.si_signo = signo;
+-
+-	sigwaiter_unblock (waiter);
+-
+-	return 0;
+-      }
+-
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  /* XXX: We just generate the signal for the current thread.  If the
+-     current thread has blocked the signal, the correct thing to do is
+-     to iterate over all the other threads and find on that hasn't
+-     blocked it.  */
+-  return pthread_kill (pthread_self (), signo);
+-}
+-
+diff --git a/signal/pt-kill-siginfo-np.c b/signal/pt-kill-siginfo-np.c
+deleted file mode 100644
+index 9bdf6cc..0000000
+--- a/signal/pt-kill-siginfo-np.c
++++ /dev/null
+@@ -1,88 +0,0 @@
+-/* pthread-kill-siginfo-np.c - Generic pthread_kill_siginfo_np implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "pt-internal.h"
+-#include "sig-internal.h"
+-
+-int
+-pthread_kill_siginfo_np (pthread_t tid, siginfo_t si)
+-{
+-  int sig = si.si_signo;
+-
+-  if (sig < 0 || sig >= NSIG)
+-    return EINVAL;
+-
+-  if (sig == 0)
+-    return 0;
+-
+-  struct signal_state *ss = &__pthread_getid (tid)->ss;
+-
+-  pthread_mutex_lock (&sig_lock);
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if (ss->sigwaiter && (ss->sigwaiter->signals & sigmask (si.si_signo)))
+-    /* The thread is in a call to sigwait.  */
+-    {
+-      ss->sigwaiter->info = si;
+-      sigwaiter_unblock (ss->sigwaiter);
+-      return 0;
+-    }
+-
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  if (ss->actions[sig - 1].sa_handler == (void *) SIG_IGN
+-      || (ss->actions[sig - 1].sa_handler == (void *) SIG_DFL
+-	  && default_action (sig) == sig_ignore))
+-    /* It is unclear (to me) what is supposed to happen when a signal
+-       is generated for a thread, which is blocking that signal and
+-       ignoring it.  POSIX does say that when the action associated
+-       with a pending, blocked signal is set to SIG_IGN, the pending
+-       signal is to be cleared.  Thus, it makes sense that any signal
+-       set to ignore is discarded at generation.  */
+-    {
+-      pthread_mutex_unlock (&ss->lock);
+-      return 0;
+-    }
+-
+-
+-  if ((sigmask (sig) & ss->blocked))
+-    /* The signal is blocked.  Mark it pending.  */
+-    {
+-      ss->pending |= sigmask (sig);
+-      pthread_mutex_unlock (&ss->lock);
+-      return 0;
+-    }
+-
+-  if (pthread_self () == tid
+-      && (! (ss->actions[si.si_signo - 1].sa_flags & SA_ONSTACK)
+-	  || (ss->stack.ss_flags & SS_DISABLE)
+-	  || (ss->stack.ss_flags & SS_ONSTACK)))
+-    /* We are sending a signal to ourself and we don't use an
+-       alternate stack.  */
+-    signal_dispatch (ss, &si);
+-  else
+-    signal_dispatch_lowlevel (ss, tid, si);
+-
+-  /* Don't unlock ss: signal_dispatch and signal_dispatch_lowlevel
+-     assume ownership of the lock.  */
+-
+-  return 0;
+-}
+-
+diff --git a/signal/sig-internal.c b/signal/sig-internal.c
+deleted file mode 100644
+index f73f38b..0000000
+--- a/signal/sig-internal.c
++++ /dev/null
+@@ -1,26 +0,0 @@
+-/* sig-internal.c - Signal state functions.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-pthread_mutex_t sig_lock = PTHREAD_MUTEX_INITIALIZER;
+-
+-sigset_t process_pending;
+-siginfo_t process_pending_info[NSIG];
+diff --git a/signal/sig-internal.h b/signal/sig-internal.h
+deleted file mode 100644
+index 6c86c79..0000000
+--- a/signal/sig-internal.h
++++ /dev/null
+@@ -1,177 +0,0 @@
+-/* sig-internal.h - Internal signal handling interface.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef SIG_INTERNAL_H
+-#define SIG_INTERNAL_H
+-
+-#include <signal.h>
+-
+-#include <sig-sysdep.h>
+-
+-#define sigmask(sig) (1ULL << (sig - 1))
+-#define STOPSIGS (sigmask (SIGTTIN) | sigmask (SIGTTOU) | \
+-		  sigmask (SIGSTOP) | sigmask (SIGTSTP))
+-
+-/* General lock.  Protects PROCESS_PENDING, PROCESS_PENDING_INFO,
+-   SIGWAITERS.  */
+-extern pthread_mutex_t sig_lock;
+-
+-/* "Signals generated for the process shall be delivered to exactly
+-   one of those threads within the process which is in a call to a
+-   sigwait() function selecting that signal or has not blocked
+-   delivery of the signal.  If there are no threads in a call to a
+-   sigwait() function selecting that signal, and if all threads within
+-   the process block delivery of the signal, the signal shall remaing
+-   pending on the process"  (2.4.1).
+-
+-   This variable is protected by SIG_LOCK.  */
+-extern sigset_t process_pending;
+-extern siginfo_t process_pending_info[NSIG];
+-\f
+-struct sigwaiter;
+-
+-/* The per-thread signal state.  */
+-struct signal_state
+-{
+-  /* Protects the following fields.  STACK.SA_FLAGS may be accessed
+-     using atomic operations.  */
+-  pthread_mutex_t lock;
+-
+-  /* Pending signals.  */
+-  sigset_t pending;
+-
+-  /* Blocked signals (i.e., the signal mask).  */
+-  sigset_t blocked;
+-
+-  stack_t stack;
+-  struct sigaction actions[NSIG];
+-  siginfo_t info[NSIG];
+-
+-  /* If the thread is blocked in a call to sigwait.  */
+-  struct sigwaiter *sigwaiter;
+-};
+-
+-#define PTHREAD_SIGNAL_MEMBERS struct signal_state ss;
+-
+-/* Arranges for thread TID to call signal_dispatch.  Must not be
+-   called if TID is the caller and an alternate stack is not required.
+-   In this case, the caller should call signal_dispatch directly.  */
+-extern void signal_dispatch_lowlevel (struct signal_state *ss,
+-				      pthread_t tid, siginfo_t si);
+-
+-/* This is the signal handler entry point.  A thread is forced into
+-   this state when it receives a signal.  We need to save the thread's
+-   state and then invoke the high-level signal dispatcher.  SS->LOCK
+-   is locked by the caller.  */
+-extern void signal_dispatch (struct signal_state *ss, siginfo_t *si);
+-
+-#ifndef SIGNAL_DISPATCH_ENTRY
+-#define SIGNAL_DISPATCH_ENTRY
+-#endif
+-
+-#ifndef SIGNAL_DISPATCH_EXIT
+-#define SIGNAL_DISPATCH_EXIT
+-#endif
+-\f
+-/* When a thread calls sigwait and a requested signal is not pending,
+-   it allocates the following structure, fills it in, adds it to
+-   sigwaiters and sleeps.  */
+-struct sigwaiter
+-{
+-  struct sigwaiter *next;
+-  struct sigwaiter *prev;
+-
+-  /* Thread's signal state.  */
+-  struct signal_state *ss;
+-
+-  /* Signals this thread is waiting for.  */
+-  sigset_t signals;
+-
+-  /* The selected signal is returned here.  The waiter also
+-     futex_waits on this info.si_signo.  */
+-  siginfo_t info;
+-};
+-
+-/* This variable is protected by SIG_LOCK.  */
+-extern struct sigwaiter *sigwaiters;
+-
+-/* Block the caller waiting for a signal in set SET.  SIG_LOCK and
+-   SS->LOCK must be held and will be unlocked by this function before
+-   blocking.  */
+-extern siginfo_t sigwaiter_block (struct signal_state *ss,
+-				  const sigset_t *restrict set);
+-
+-/* Unblock the waiter WAITER.  SIG_LOCK and WAITER->SS->LOCK must be
+-   held.  Both will be dropped on return.  */
+-extern void sigwaiter_unblock (struct sigwaiter *waiter);
+-\f
+-enum sig_action { sig_core, sig_terminate, sig_ignore, sig_cont, sig_stop };
+-
+-static inline enum sig_action
+-default_action (int signo)
+-{
+-  switch (signo)
+-    {
+-    case SIGABRT:
+-    case SIGBUS:
+-    case SIGFPE:
+-    case SIGILL:
+-    case SIGQUIT:
+-    case SIGSEGV:
+-    case SIGSTKFLT:
+-    case SIGSYS:
+-    case SIGTRAP:
+-    case SIGXCPU:
+-    case SIGXFSZ:
+-      return sig_core;
+-
+-    case SIGALRM:
+-    case SIGHUP:
+-    case SIGINT:
+-    case SIGIO: /* Perhaps ignore?  */
+-    case SIGKILL:
+-    case SIGPIPE:
+-    case SIGPROF:
+-    case SIGTERM:
+-    case SIGUSR1:
+-    case SIGUSR2:
+-    case SIGVTALRM:
+-      return sig_terminate;
+-
+-    case SIGCHLD:
+-    case SIGPWR:
+-    case SIGURG:
+-    case SIGWINCH:
+-      return sig_ignore;
+-
+-    case SIGCONT:
+-      return sig_cont;
+-
+-    case SIGSTOP:
+-    case SIGTSTP:
+-    case SIGTTIN:
+-    case SIGTTOU:
+-      return sig_stop;
+-    }
+-
+-  panic ("Unknown signal number: %d", signo);
+-}
+-
+-#endif
+diff --git a/signal/sigaction.c b/signal/sigaction.c
+deleted file mode 100644
+index 0126c99..0000000
+--- a/signal/sigaction.c
++++ /dev/null
+@@ -1,72 +0,0 @@
+-/* sigaction.c - Generic sigaction implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-#include "pt-internal.h"
+-
+-int
+-sigaction (int sig, const struct sigaction *restrict sa,
+-	   struct sigaction *restrict osa)
+-{
+-  if (sig <= 0 || sig >= NSIG)
+-    {
+-      errno = EINVAL;
+-      return -1;
+-    }
+-
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if (osa)
+-    *osa = ss->actions[sig - 1];
+-
+-  if (sa)
+-    {
+-      ss->actions[sig - 1] = *sa;
+-
+-      /* "The SIGKILL and SIGSTOP signals shall not be added to the
+-	 signal mask using this mechanism; this restriction shall be
+-	 enforced by the system without causing an error to be
+-	 indicated" (sigaction).  */
+-      sigdelset (&ss->blocked, SIGKILL);
+-      sigdelset (&ss->blocked, SIGSTOP);
+-
+-      /* A "signal shall remain pending on the process until it is
+-	 unblocked, it is accepted when ..., or the action associated
+-	 with it is set to ignore the signal"  (2.4.1).
+-
+-         "Setting a signal action to SIG_DFL for a signal that is
+-         pending, and whose default action is to ignore the signal,
+-         ..., shall cause the pending signal to be discarded, whether
+-         or not it is blocked" (2.4.3).  */
+-      if (sa->sa_handler == SIG_IGN
+-	  || (sa->sa_handler == SIG_DFL && default_action (sig) == sig_ignore))
+-	{
+-	  sigdelset (&ss->pending, sig);
+-	  sigdelset (&process_pending, sig);
+-	}
+-    }
+-
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  return 0;
+-}
+-
+diff --git a/signal/sigaltstack.c b/signal/sigaltstack.c
+deleted file mode 100644
+index 8334811..0000000
+--- a/signal/sigaltstack.c
++++ /dev/null
+@@ -1,69 +0,0 @@
+-/* sigaltstack.c - Generic sigaltstack implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-#include "pt-internal.h"
+-
+-int
+-sigaltstack (const stack_t *restrict stack, stack_t *restrict old)
+-{
+-  int err = 0;
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if (old)
+-    *old = ss->stack;
+-
+-  if (stack)
+-    {
+-      if (stack->ss_size < MINSIGSTKSZ)
+-	{
+-	  err = ENOMEM;
+-	  goto out;
+-	}
+-
+-      if ((stack->ss_flags & ~(SS_DISABLE)))
+-	/* Flags contains a value other than SS_DISABLE.  */
+-	{
+-	  err = EINVAL;
+-	  goto out;
+-	}
+-
+-      if ((ss->stack.ss_flags & SS_ONSTACK))
+-	/* Stack in use.  */
+-	{
+-	  err = EPERM;
+-	  goto out;
+-	}
+-
+-      ss->stack = *stack;
+-    }
+-
+- out:
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  if (err)
+-    {
+-      errno = err;
+-      return -1;
+-    }
+-  return 0;
+-}
+diff --git a/signal/signal-dispatch.c b/signal/signal-dispatch.c
+deleted file mode 100644
+index 40440b7..0000000
+--- a/signal/signal-dispatch.c
++++ /dev/null
+@@ -1,117 +0,0 @@
+-/* signal-dispatch.c - Signal dispatcher.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-/* This is the signal handler entry point.  A thread is forced into
+-   this state when it receives a signal.  We need to save the thread's
+-   state and then invoke the high-level signal dispatcher.  SS->LOCK
+-   is locked by the caller.  */
+-void
+-signal_dispatch (struct signal_state *ss, siginfo_t *si)
+-{
+-  SIGNAL_DISPATCH_ENTRY;
+-
+-  int signo = si->si_signo;
+-
+-  assert (signo > 0 && signo < NSIG);
+-  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
+-
+-  do
+-    {
+-      if ((sigmask (signo) & STOPSIGS))
+-	/* Stop signals clear a pending SIGCONT even if they
+-	   are handled or ignored (but not if preempted).  */
+-	{
+-	  sigdelset (&ss->pending, SIGCONT);
+-	  sigdelset (&process_pending, SIGCONT);
+-	}
+-      else if ((signo == SIGCONT))
+-	/* Even if handled or ignored (but not preempted), SIGCONT
+-	   clears stop signals and resumes the process.  */
+-	{
+-	  ss->pending &= ~STOPSIGS;
+-	  process_pending &= ~STOPSIGS;
+-	}
+-
+-      void (*handler)(int, siginfo_t *, void *)
+-	= ss->actions[signo - 1].sa_sigaction;
+-
+-      /* Reset to SIG_DFL if requested.  SIGILL and SIGTRAP cannot
+-	 be automatically reset when delivered; the system silently
+-	 enforces this restriction (sigaction).  */
+-      if (ss->actions[signo - 1].sa_flags & SA_RESETHAND
+-	  && signo != SIGILL && signo != SIGTRAP)
+-	ss->actions[signo - 1].sa_handler = SIG_DFL;
+-
+-      sigset_t orig_blocked = ss->blocked;
+-      /* Block requested signals while running the handler.  */
+-      ss->blocked |= ss->actions[signo - 1].sa_mask;
+-
+-      /* Block SIGNO unless we're asked not to.  */
+-      if (! (ss->actions[signo - 1].sa_flags & (SA_RESETHAND | SA_NODEFER)))
+-	sigaddset (&ss->blocked, signo);
+-
+-      sigdelset (&ss->pending, signo);
+-      pthread_mutex_unlock (&ss->lock);
+-
+-      pthread_mutex_lock (&sig_lock);
+-      sigdelset (&process_pending, signo);
+-      pthread_mutex_unlock (&sig_lock);
+-
+-      if (handler == (void *) SIG_DFL)
+-	{
+-	  enum sig_action action = default_action (signo);
+-
+-	  if (action == sig_terminate || action == sig_core)
+-	    _exit (128 + signo);
+-
+-	  if (action == sig_stop)
+-	    /* XXX: Implement me.  */
+-	    panic ("Stopping process unimplemented.");
+-
+-	  if (action == sig_cont)
+-	    /* XXX: Implement me.  */;
+-	    panic ("Continuing process unimplemented.");
+-	}
+-      else if (handler == (void *) SIG_IGN)
+-	;
+-      else
+-	handler (signo, si, NULL);
+-
+-      pthread_mutex_lock (&ss->lock);
+-
+-      /* "When a thread's signal mask is changed in a signal-catching
+-	 function that is installed by sigaction(), the restoration of
+-	 the signal mask on return from the signal-catching function
+-	 overrides that change (see sigaction())" (sigprocmask).  */
+-      ss->blocked = orig_blocked;
+-
+-      sigset_t pending = ~ss->blocked & ss->pending;
+-      if (! pending)
+-	pending = ~ss->blocked & process_pending;
+-      signo = l4_lsb64 (pending);
+-    }
+-  while (signo);
+-
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  SIGNAL_DISPATCH_EXIT;
+-}
+diff --git a/signal/signal.h b/signal/signal.h
+deleted file mode 100644
+index 6e22d05..0000000
+--- a/signal/signal.h
++++ /dev/null
+@@ -1,275 +0,0 @@
+-/* signal.h - Signal handling interface.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _SIGNAL_H
+-#define _SIGNAL_H 1
+-
+-#include <stdint.h>
+-#include <sys/types.h>
+-
+-typedef volatile int sig_atomic_t;
+-\f
+-/*typedef uint64_t sigset_t;*/
+-
+-int sigaddset (sigset_t *, int);
+-int sigdelset (sigset_t *, int);
+-int sigemptyset (sigset_t *);
+-int sigfillset (sigset_t *);
+-int sigismember (const sigset_t *, int);
+-\f
+-/* These values are consistent with Linux.  */
+-#define SIGRTMIN 34
+-#define SIGRTMAX 64
+-
+-enum
+-  {
+-    SIGHUP = 1,
+-#define SIGHUP SIGHUP
+-    SIGINT,
+-#define SIGINT SIGINT
+-    SIGQUIT,
+-#define SIGQUIT SIGQUIT
+-    SIGILL,
+-#define SIGILL SIGILL
+-    SIGTRAP,
+-#define SIGTRAP SIGTRAP
+-    SIGABRT,
+-#define SIGABRT SIGABRT
+-    SIGBUS,
+-#define SIGBUS SIGBUS
+-    SIGFPE,
+-#define SIGFPE SIGFPE
+-    SIGKILL,
+-#define SIGKILL SIGKILL
+-    SIGUSR1,
+-#define SIGUSR1 SIGUSR1
+-    SIGSEGV,
+-#define SIGSEGV SIGSEGV
+-    SIGUSR2,
+-#define SIGUSR2 SIGUSR2
+-    SIGPIPE,
+-#define SIGPIPE SIGPIPE
+-    SIGALRM,
+-#define SIGALRM SIGALRM
+-    SIGTERM,
+-#define SIGTERM SIGTERM
+-    SIGSTKFLT,
+-#define SIGSTKFLT SIGSTKFLT
+-    SIGCHLD,
+-#define SIGCHLD SIGCHLD
+-    SIGCONT,
+-#define SIGCONT SIGCONT
+-    SIGSTOP,
+-#define SIGSTOP SIGSTOP
+-    SIGTSTP,
+-#define SIGTSTP SIGTSTP
+-    SIGTTIN,
+-#define SIGTTIN SIGTTIN
+-    SIGTTOU,
+-#define SIGTTOU SIGTTOU
+-    SIGURG,
+-#define SIGURG SIGURG
+-    SIGXCPU,
+-#define SIGXCPU SIGXCPU
+-    SIGXFSZ,
+-#define SIGXFSZ SIGXFSZ
+-    SIGVTALRM,
+-#define SIGVTALRM SIGVTALRM
+-    SIGPROF,
+-#define SIGPROF SIGPROF
+-    SIGWINCH,
+-#define SIGWINCH SIGWINCH
+-    SIGIO,
+-#define SIGIO SIGIO
+-    SIGPWR,
+-#define SIGPWR SIGPWR
+-    SIGSYS,
+-#define SIGSYS SIGSYS
+-    NSIG
+-  };
+-\f
+-/* The resulting set is the union of the current set and the signal
+-   set pointed to by the argument set.  */
+-#define SIG_BLOCK 1
+-/* The resulting set is the intersection of the current set and the
+-   complement of the signal set pointed to by the argument set.  */
+-#define SIG_UNBLOCK 2
+-/* The resulting set is the signal set pointed to by the argument
+-   set.  */
+-#define SIG_SETMASK 3
+-
+-int pthread_sigmask (int how, const sigset_t *mask, sigset_t *old);
+-int sigprocmask (int how, const sigset_t *restrict mask,
+-		 sigset_t *restrict old);
+-
+-/* Return set of pending signals.  */
+-int sigpending(sigset_t *set);
+-\f
+-union sigval
+-{
+-  int sival_int;
+-  void *sival_ptr;
+-};
+-\f
+-#define SIG_DFL ((void (*)(int)) (0))
+-#define SIG_ERR ((void (*)(int)) (-1))
+-#define SIG_IGN ((void (*)(int)) (1))
+-
+-/* Causes signal delivery to occur on an alternate stack.  */
+-#define SA_ONSTACK (1 << 0)
+-/* Do not generate SIGCHLD when children stop or stopped children
+-   continue.  */
+-#define SA_NOCLDSTOP (1 << 1)
+-/* Causes signal dispositions to be set to SIG_DFL on entry to signal
+-   handlers.  */
+-#define SA_RESETHAND (1 << 2)
+-/* Causes certain functions to become restartable.  */
+-#define SA_RESTART (1 << 3)
+-/* Causes extra information to be passed to signal handlers at the
+-   time of receipt of a signal.  */
+-#define SA_SIGINFO (1 << 4)
+-/* Causes implementations not to create zombie processes on child
+-   death.  */
+-#define SA_NOCLDWAIT (1 << 5)
+-/* Causes signal not to be automatically blocked on entry to
+-   signal handler.  */
+-#define SA_NODEFER (1 << 6)
+-
+-typedef struct
+-{
+-  int si_signo;
+-  int si_code;
+-  int si_errno;
+-  pid_t si_pid;
+-  uid_t si_uid;
+-  void *si_addr;
+-  int si_status;
+-  long si_band;
+-  union sigval si_value;
+-} siginfo_t;
+-
+-struct sigaction
+-{
+-  union
+-  {
+-    /* Pointer to a signal-catching function or one of the macros
+-       SIG_IGN or SIG_DFL.  */
+-    void (*sa_handler)(int);
+-                   
+-    /* Pointer to a signal-catching function.  */
+-    void (*sa_sigaction)(int, siginfo_t *, void *);
+-  };
+-
+-  /* Set of signals to be blocked during execution of the signal
+-     handling function.  */
+-  sigset_t sa_mask;
+-
+-  /* Special flags.  */
+-  int sa_flags;
+-};
+-
+-int sigaction (int signo, const struct sigaction *restrict newaction,
+-	       struct sigaction *restrict oldaction);
+-
+-void (*signal (int signo, void (*handler)(int)))(int);
+-void (*bsd_signal (int signo, void (*handler)(int)))(int);
+-\f
+-/* Process is executing on an alternate signal stack.  */
+-#define SS_ONSTACK (1 << 0)
+-/* Alternate signal stack is disabled.  */
+-#define SS_DISABLE (1 << 1)
+-
+-/* Minimum stack size for a signal handler.  */
+-#define MINSIGSTKSZ PAGESIZE
+-/* Default size in bytes for the alternate signal stack. */
+-#define SIGSTKSZ (16 * PAGESIZE)
+-
+-typedef struct
+-{
+-  void *ss_sp;
+-  size_t ss_size;
+-  int ss_flags;
+-} stack_t;
+-
+-int sigaltstack(const stack_t *restrict stack, stack_t *restrict old);
+-\f
+-#include <pthread.h>
+-
+-/* Send SIGNO to the process PID.  */
+-int kill(pid_t pid, int signo);
+-
+-/* Send SIGNO to the process group PG.  */
+-int killpg(pid_t pg, int signo);
+-
+-/* Send SIGNO to thread TID.  */
+-int pthread_kill(pthread_t tid, int signo);
+-
+-/* Send a signal to thread TID using SIGINFO.  */
+-int pthread_kill_siginfo_np (pthread_t tid, siginfo_t siginfo);
+-
+-/* Send SIGNO to the calling thread.  */
+-int raise(int signo);
+-\f
+-typedef struct sigevent
+-{
+-  /* Notification type.  */
+-  int sigev_notify;
+-
+-  /* Signal number.  */
+-  int sigev_signo;
+-
+-  /* Signal value.  */
+-  union sigval sigev_value;
+-
+-  /* Notification function.  */
+-  void (*sigev_notify_function) (union sigval);
+-
+-  /* Notification attributes.  */
+-  pthread_attr_t *sigev_notify_attributes;
+-} sigevent_t;
+-
+-enum
+-  {
+-    SIGEV_NONE = 0,
+-#define SIGEV_NONE SIGEV_NONE
+-    SIGEV_SIGNAL,
+-#define SIGEV_SIGNAL SIGEV_SIGNAL
+-    SIGEV_THREAD
+-#define SIGEV_THREAD SIGEV_THREAD
+-  };
+-\f
+-#define SIG_HOLD
+-
+-int sighold (int);
+-int sigignore (int);
+-int siginterrupt (int, int);
+-int sigpause (int);
+-int sigqueue (pid_t, int, const union sigval);
+-int sigrelse (int);
+-void (*sigset (int, void (*)(int)))(int);
+-int sigsuspend (const sigset_t *);
+-\f
+-/* Wait for a signal.  */
+-int sigwait (const sigset_t *restrict set, int *restrict signo);
+-int sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info);
+-int sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
+-		  const struct timespec *restrict timespec);
+-
+-#endif
+diff --git a/signal/sigpending.c b/signal/sigpending.c
+deleted file mode 100644
+index 609b55d..0000000
+--- a/signal/sigpending.c
++++ /dev/null
+@@ -1,38 +0,0 @@
+-/* sigpending.c - Generic sigpending implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sig-internal.h>
+-#include <pt-internal.h>
+-
+-int
+-sigpending (sigset_t *set)
+-{
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  /* There is no need to lock SIG_LOCK for process_pending since we
+-     just read it, which is atomic.  */
+-  *set = (ss->pending | process_pending) & ss->blocked;
+-
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  return 0;
+-}
+diff --git a/signal/sigsuspend.c b/signal/sigsuspend.c
+deleted file mode 100644
+index 73cf12a..0000000
+--- a/signal/sigsuspend.c
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/* sigsuspend.c - Generic sigsuspend implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-int
+-sigsuspend (const sigset_t *set)
+-{
+-  /* XXX: Implement me.  */
+-  errno = EOPNOTSUPP;
+-  return -1;
+-}
+diff --git a/signal/sigtimedwait.c b/signal/sigtimedwait.c
+deleted file mode 100644
+index 52cd017..0000000
+--- a/signal/sigtimedwait.c
++++ /dev/null
+@@ -1,30 +0,0 @@
+-/* sigtimedwait.c - Generic sigtimedwait implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-int
+-sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
+-	      const struct timespec *restrict timeout)
+-{
+-  errno = EOPNOTSUPP;
+-  return -1;
+-}
+-
+diff --git a/signal/sigwaiter.c b/signal/sigwaiter.c
+deleted file mode 100644
+index 8d041ac..0000000
+--- a/signal/sigwaiter.c
++++ /dev/null
+@@ -1,91 +0,0 @@
+-/* sigwaiter.c - Signal handling functions.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-#include <hurd/futex.h>
+-
+-struct sigwaiter *sigwaiters;
+-
+-siginfo_t
+-sigwaiter_block (struct signal_state *ss, const sigset_t *restrict set)
+-{
+-  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
+-  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
+-
+-  assert (! ss->sigwaiter);
+-
+-  struct sigwaiter waiter;
+-
+-  waiter.next = sigwaiters;
+-  if (waiter.next)
+-    {
+-      assert (! waiter.next->prev);
+-      waiter.next->prev = &waiter;
+-    }
+-  waiter.prev = 0;
+-  sigwaiters = &waiter;
+-
+-  waiter.ss = ss;
+-  waiter.info.si_signo = 0;
+-  waiter.signals = *set;
+-
+-  ss->sigwaiter = &waiter;
+-
+-  pthread_mutex_unlock (&ss->lock);
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  futex_wait (&waiter.info.si_signo, 0);
+-
+-#ifndef NDEBUG
+-  pthread_mutex_lock (&ss->lock);
+-  ss->sigwaiter = 0;
+-  pthread_mutex_unlock (&ss->lock);
+-#endif
+-
+-  assert (waiter.info.si_signo);
+-  return waiter.info;
+-}
+-
+-void
+-sigwaiter_unblock (struct sigwaiter *waiter)
+-{
+-  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
+-  assert (pthread_mutex_trylock (&waiter->ss->lock) == EBUSY);
+-
+-  struct sigwaiter *prev = waiter->prev;
+-  struct sigwaiter *next = waiter->next;
+-
+-  if (next)
+-    next->prev = prev;
+-
+-  if (prev)
+-    prev->next = next;
+-  else
+-    sigwaiters = next;
+-
+-  sigdelset (&process_pending, waiter->info.si_signo);
+-  sigdelset (&waiter->ss->pending, waiter->info.si_signo);
+-
+-  pthread_mutex_unlock (&waiter->ss->lock);
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  futex_wake (&waiter->info.si_signo, 1);
+-}
+diff --git a/signal/sigwaitinfo.c b/signal/sigwaitinfo.c
+deleted file mode 100644
+index 1b47079..0000000
+--- a/signal/sigwaitinfo.c
++++ /dev/null
+@@ -1,74 +0,0 @@
+-/* sigwaitinfo.c - Generic sigwaitinfo implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sig-internal.h>
+-#include <pt-internal.h>
+-
+-int
+-sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info)
+-{
+-  pthread_mutex_lock (&sig_lock);
+-
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if ((process_pending & *set) || (ss->pending & *set))
+-    /* There is at least one signal pending.  */
+-    {
+-      bool local = true;
+-      sigset_t extant = process_pending & *set;
+-      if (! extant)
+-	{
+-	  local = false;
+-	  extant = ss->pending & *set;
+-	}
+-
+-      assert (extant);
+-
+-      int signo = l4_msb64 (extant);
+-
+-      if (info)
+-	{
+-	  if (local)
+-	    *info = ss->info[signo - 1];
+-	  else
+-	    *info = process_pending_info[signo - 1];
+-	  info->si_signo = signo;
+-	}
+-
+-      sigdelset (&process_pending, signo);
+-      sigdelset (&ss->pending, signo);
+-
+-      pthread_mutex_unlock (&ss->lock);
+-      pthread_mutex_unlock (&sig_lock);
+-      return 0;
+-    }
+-
+-  siginfo_t i = sigwaiter_block (ss, set);
+-  assert (i.si_signo);
+-  assert ((sigmask (i.si_signo) & *set));
+-
+-  if (info)
+-    *info = i;
+-
+-  return 0;
+-}
+-
+-- 
+1.9.0
+
+
+From 6eaedb37037965b99608cb8afbfc934c3396892e Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Sun, 30 Mar 2014 17:23:12 +0000
+Subject: [PATCH 4/4] Revert
+
+commit 69e89a859882e4f675dd5491edc969159d8a4002
+Author: Pino Toscano <toscano.pino@tiscali.it>
+Date:   Sun Apr 22 00:38:26 2012 +0200
+
+    __pthread_timedblock: switch to clock_gettime
+
+    Use `clock_gettime' with the provided clock instead of
+`gettimeofday',
+    linking to rt.
+
+    * sysdeps/mach/pt-timedblock.c (__pthread_timedblock): Switch to
+    `clock_gettime'.
+    * Makefile [!IN_GLIBC] (LDLIBS): Link to rt.
+    [IN_GLIBC] ($(objpfx)libpthread.so): Likewise.
+    * Makefile.am (libpthread_a_LDADD): Likewise.
+---
+ Makefile                               |  2 --
+ sysdeps/generic/pt-condattr-setclock.c | 28 ++++------------------------
+ sysdeps/mach/pt-timedblock.c           | 13 +++++++------
+ 3 files changed, 11 insertions(+), 32 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 8ef990e..2f45c1c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -216,10 +216,8 @@ VPATH += $(SYSDEP_PATH)
+ 
+ ifeq ($(IN_GLIBC),no)
+ HURDLIBS = ihash
+-LDLIBS = -lrt
+ else
+ LDLIBS-pthread.so = -lihash
+-$(objpfx)libpthread.so: $(common-objpfx)rt/librt.so
+ endif
+ 
+ ifeq ($(IN_GLIBC),no)
+diff --git a/sysdeps/generic/pt-condattr-setclock.c b/sysdeps/generic/pt-condattr-setclock.c
+index c5a78ef..c9a9948 100644
+--- a/sysdeps/generic/pt-condattr-setclock.c
++++ b/sysdeps/generic/pt-condattr-setclock.c
+@@ -23,30 +23,10 @@
+ int
+ pthread_condattr_setclock (pthread_condattr_t *attr, clockid_t clock)
+ {
+-  /* Only a few clocks are allowed.  CLOCK_REALTIME is always allowed.
+-     CLOCK_MONOTONIC only if the kernel has the necessary support.  */
+-  if (clock == CLOCK_MONOTONIC)
++  if (__pthread_default_condattr.clock == clock)
+     {
+-      /* Check whether the clock is available.  */
+-      static int avail;
+-
+-      if (avail == 0)
+-	{
+-	  struct timespec ts;
+-	  int res;
+-
+-	  res = clock_getres (CLOCK_MONOTONIC, &ts);
+-	  avail = res < 0 ? -1 : 1;
+-	}
+-
+-      if (avail < 0)
+-	/* Not available.  */
+-	return EINVAL;
++      attr->clock = clock;
++      return 0;
+     }
+-  else if (clock != CLOCK_REALTIME)
+-    return EINVAL;
+-
+-  attr->clock = clock;
+-
+-  return 0;
++  return EINVAL;
+ }
+diff --git a/sysdeps/mach/pt-timedblock.c b/sysdeps/mach/pt-timedblock.c
+index d72ef73..88beaa2 100644
+--- a/sysdeps/mach/pt-timedblock.c
++++ b/sysdeps/mach/pt-timedblock.c
+@@ -36,26 +36,27 @@ __pthread_timedblock (struct __pthread *thread,
+   error_t err;
+   mach_msg_header_t msg;
+   mach_msg_timeout_t timeout;
+-  struct timespec now;
++  struct timeval now;
+ 
+   /* We have an absolute time and now we have to convert it to a
+      relative time.  Arg.  */
+ 
+-  err = clock_gettime (clock_id, &now);
++  err = gettimeofday(&now, NULL);
+   assert (! err);
+ 
+   if (now.tv_sec > abstime->tv_sec
+       || (now.tv_sec == abstime->tv_sec
+-	  && now.tv_nsec > abstime->tv_nsec))
++	  && now.tv_usec > ((abstime->tv_nsec + 999) / 1000)))
+     return ETIMEDOUT;
+ 
+   timeout = (abstime->tv_sec - now.tv_sec) * 1000;
+ 
+-  if (abstime->tv_nsec >= now.tv_nsec)
+-    timeout += (abstime->tv_nsec - now.tv_nsec + 999999) / 1000000;
++  if (((abstime->tv_nsec + 999) / 1000) >= now.tv_usec)
++    timeout += (((abstime->tv_nsec + 999) / 1000) - now.tv_usec + 999) / 1000;
+   else
+     /* Need to do a carry.  */
+-    timeout -= (now.tv_nsec - abstime->tv_nsec + 999999) / 1000000;
++    timeout -= (now.tv_usec + 999) / 1000 -
++      ((abstime->tv_nsec + 999999) / 1000000);
+ 
+   err = __mach_msg (&msg, MACH_RCV_MSG | MACH_RCV_TIMEOUT, 0,
+ 		    sizeof msg, thread->wakeupmsg.msgh_remote_port,
+-- 
+1.9.0
+
+From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Thu, 27 Mar 2014 00:21:36 +0000
+Subject: [PATCH 1/3] This helps to integrate libpthread as a glibc module.
+
+---
+ configure | 2 ++
+ 1 file changed, 2 insertions(+)
+ create mode 100644 configure
+
+diff --git a/configure b/configure
+new file mode 100644
+index 0000000..2cdbc71
+--- /dev/null
++++ b/configure
+@@ -0,0 +1,2 @@
++libc_add_on_canonical=libpthread
++libc_add_on_subdirs=.
+\ No newline at end of file
+-- 
+1.9.0
+
+
+From 7f5f718b4a231c1e08d9ed1676cb18e265b715d6 Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Sat, 29 Mar 2014 23:29:44 +0000
+Subject: [PATCH 2/3] fix
+
+---
+ signal/signal.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/signal/signal.h b/signal/signal.h
+index a33d995..6e22d05 100644
+--- a/signal/signal.h
++++ b/signal/signal.h
+@@ -26,7 +26,7 @@
+ 
+ typedef volatile int sig_atomic_t;
+ \f
+-typedef uint64_t sigset_t;
++/*typedef uint64_t sigset_t;*/
+ 
+ int sigaddset (sigset_t *, int);
+ int sigdelset (sigset_t *, int);
+-- 
+1.9.0
+
+
+From b8639799ae3b571eb44edd2b3dec109957393d3e Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Sun, 30 Mar 2014 16:56:09 +0000
+Subject: [PATCH 3/3] These come from the l4 implementation and come in the way
+ of the glibc Makefiles, drop them.
+
+---
+ include/libc-symbols.h      | 395 --------------------------------------------
+ include/set-hooks.h         |  72 --------
+ signal/README               |  12 --
+ signal/TODO                 |  29 ----
+ signal/kill.c               |  70 --------
+ signal/pt-kill-siginfo-np.c |  88 ----------
+ signal/sig-internal.c       |  26 ---
+ signal/sig-internal.h       | 177 --------------------
+ signal/sigaction.c          |  72 --------
+ signal/sigaltstack.c        |  69 --------
+ signal/signal-dispatch.c    | 117 -------------
+ signal/signal.h             | 275 ------------------------------
+ signal/sigpending.c         |  38 -----
+ signal/sigsuspend.c         |  29 ----
+ signal/sigtimedwait.c       |  30 ----
+ signal/sigwaiter.c          |  91 ----------
+ signal/sigwaitinfo.c        |  74 ---------
+ 17 files changed, 1664 deletions(-)
+ delete mode 100644 include/libc-symbols.h
+ delete mode 100644 include/set-hooks.h
+ delete mode 100644 signal/README
+ delete mode 100644 signal/TODO
+ delete mode 100644 signal/kill.c
+ delete mode 100644 signal/pt-kill-siginfo-np.c
+ delete mode 100644 signal/sig-internal.c
+ delete mode 100644 signal/sig-internal.h
+ delete mode 100644 signal/sigaction.c
+ delete mode 100644 signal/sigaltstack.c
+ delete mode 100644 signal/signal-dispatch.c
+ delete mode 100644 signal/signal.h
+ delete mode 100644 signal/sigpending.c
+ delete mode 100644 signal/sigsuspend.c
+ delete mode 100644 signal/sigtimedwait.c
+ delete mode 100644 signal/sigwaiter.c
+ delete mode 100644 signal/sigwaitinfo.c
+
+diff --git a/include/libc-symbols.h b/include/libc-symbols.h
+deleted file mode 100644
+index 54dd6e2..0000000
+--- a/include/libc-symbols.h
++++ /dev/null
+@@ -1,395 +0,0 @@
+-/* Support macros for making weak and strong aliases for symbols,
+-   and for using symbol sets and linker warnings with GNU ld.
+-   Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2008
+-     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 Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#ifndef _LIBC_SYMBOLS_H
+-#define _LIBC_SYMBOLS_H	1
+-
+-/* This file's macros are included implicitly in the compilation of every
+-   file in the C library by -imacros.
+-
+-   We include config.h which is generated by configure.
+-   It should define for us the following symbols:
+-
+-   * HAVE_ASM_SET_DIRECTIVE if we have `.set B, A' instead of `A = B'.
+-   * ASM_GLOBAL_DIRECTIVE with `.globl' or `.global'.
+-   * HAVE_GNU_LD if using GNU ld, with support for weak symbols in a.out,
+-   and for symbol set and warning messages extensions in a.out and ELF.
+-   * HAVE_ELF if using ELF, which supports weak symbols using `.weak'.
+-   * HAVE_ASM_WEAK_DIRECTIVE if we have weak symbols using `.weak'.
+-   * HAVE_ASM_WEAKEXT_DIRECTIVE if we have weak symbols using `.weakext'.
+-
+-   */
+-
+-/* This is defined for the compilation of all C library code.  features.h
+-   tests this to avoid inclusion of stubs.h while compiling the library,
+-   before stubs.h has been generated.  Some library code that is shared
+-   with other packages also tests this symbol to see if it is being
+-   compiled as part of the C library.  We must define this before including
+-   config.h, because it makes some definitions conditional on whether libc
+-   itself is being compiled, or just some generator program.  */
+-// #define _LIBC	1
+-
+-/* Enable declarations of GNU extensions, since we are compiling them.  */
+-#define _GNU_SOURCE	1
+-/* And we also need the data for the reentrant functions.  */
+-#define _REENTRANT	1
+-
+-// #include <config.h>
+-#define HAVE_ASM_WEAK_DIRECTIVE
+-#define HAVE_WEAK_SYMBOLS
+-#define HAVE_ASM_SET_DIRECTIVE
+-#define HAVE_BUILTIN_EXPECT
+-#define HAVE_GNU_LD
+-#define HAVE_ELF
+-#define HAVE_SECTION_QUOTES
+-#define HAVE_VISIBILITY_ATTRIBUTE
+-#define HAVE_ASM_PREVIOUS_DIRECTIVE
+-// #define SHARED
+-
+-/* The symbols in all the user (non-_) macros are C symbols.
+-   HAVE_GNU_LD without HAVE_ELF implies a.out.  */
+-
+-#if defined HAVE_ASM_WEAK_DIRECTIVE || defined HAVE_ASM_WEAKEXT_DIRECTIVE
+-# define HAVE_WEAK_SYMBOLS
+-#endif
+-
+-#ifndef __SYMBOL_PREFIX
+-# ifdef NO_UNDERSCORES
+-#  define __SYMBOL_PREFIX
+-# else
+-#  define __SYMBOL_PREFIX "_"
+-# endif
+-#endif
+-
+-#ifndef C_SYMBOL_NAME
+-# ifdef NO_UNDERSCORES
+-#  define C_SYMBOL_NAME(name) name
+-# else
+-#  define C_SYMBOL_NAME(name) _##name
+-# endif
+-#endif
+-
+-#ifndef ASM_LINE_SEP
+-# define ASM_LINE_SEP ;
+-#endif
+-
+-#ifndef C_SYMBOL_DOT_NAME
+-# define C_SYMBOL_DOT_NAME(name) .##name
+-#endif
+-
+-#ifndef __ASSEMBLER__
+-/* GCC understands weak symbols and aliases; use its interface where
+-   possible, instead of embedded assembly language.  */
+-
+-/* Define ALIASNAME as a strong alias for NAME.  */
+-# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+-# define _strong_alias(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+-
+-/* This comes between the return type and function name in
+-   a function definition to make that definition weak.  */
+-# define weak_function __attribute__ ((weak))
+-# define weak_const_function __attribute__ ((weak, __const__))
+-
+-# ifdef HAVE_WEAK_SYMBOLS
+-
+-/* Define ALIASNAME as a weak alias for NAME.
+-   If weak aliases are not available, this defines a strong alias.  */
+-#  define weak_alias(name, aliasname) _weak_alias (name, aliasname)
+-#  define _weak_alias(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
+-
+-/* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
+-#  define weak_extern(symbol) _weak_extern (symbol)
+-#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+-#   define _weak_extern(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
+-#  else
+-#   define _weak_extern(symbol)    asm (".weak " __SYMBOL_PREFIX #symbol);
+-#  endif
+-
+-# else
+-
+-#  define weak_alias(name, aliasname) strong_alias(name, aliasname)
+-#  define weak_extern(symbol) /* Nothing. */
+-
+-# endif
+-
+-#else /* __ASSEMBLER__ */
+-
+-# ifdef HAVE_ASM_SET_DIRECTIVE
+-#  define strong_alias(original, alias)		\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
+-# else
+-#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
+-#   define strong_alias(original, alias)	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
+-#  else
+-#   define strong_alias(original, alias)	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+-#  endif
+-# endif
+-
+-# ifdef HAVE_WEAK_SYMBOLS
+-#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+-#   define weak_alias(original, alias)	\
+-  .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
+-#   define weak_extern(symbol)	\
+-  .weakext C_SYMBOL_NAME (symbol)
+-
+-#  else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+-
+-#   ifdef HAVE_ASM_GLOBAL_DOT_NAME
+-#    define weak_alias(original, alias)	\
+-  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP			\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
+-#   else
+-#    define weak_alias(original, alias)	\
+-  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+-#   endif
+-
+-#   define weak_extern(symbol)	\
+-  .weak C_SYMBOL_NAME (symbol)
+-
+-#  endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+-
+-# else /* ! HAVE_WEAK_SYMBOLS */
+-
+-#  define weak_alias(original, alias) strong_alias(original, alias)
+-#  define weak_extern(symbol) /* Nothing */
+-# endif /* ! HAVE_WEAK_SYMBOLS */
+-
+-#endif /* __ASSEMBLER__ */
+-
+-/* On some platforms we can make internal function calls (i.e., calls of
+-   functions not exported) a bit faster by using a different calling
+-   convention.  */
+-#ifndef internal_function
+-# define internal_function	/* empty */
+-#endif
+-
+-/* Prepare for the case that `__builtin_expect' is not available.  */
+-#ifndef HAVE_BUILTIN_EXPECT
+-# define __builtin_expect(expr, val) (expr)
+-#endif
+-
+-/* Determine the return address.  */
+-#define RETURN_ADDRESS(nr) \
+-  __builtin_extract_return_addr (__builtin_return_address (nr))
+-
+-/* When a reference to SYMBOL is encountered, the linker will emit a
+-   warning message MSG.  */
+-#ifdef HAVE_GNU_LD
+-# ifdef HAVE_ELF
+-
+-/* We want the .gnu.warning.SYMBOL section to be unallocated.  */
+-#  ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
+-#   define __make_section_unallocated(section_string)	\
+-  asm (".section " section_string "\n\t.previous");
+-#  elif defined HAVE_ASM_POPSECTION_DIRECTIVE
+-#   define __make_section_unallocated(section_string)	\
+-  asm (".pushsection " section_string "\n\t.popsection");
+-#  else
+-#   define __make_section_unallocated(section_string)
+-#  endif
+-
+-/* Tacking on "\n\t#" to the section name makes gcc put it's bogus
+-   section attributes on what looks like a comment to the assembler.  */
+-#  ifdef HAVE_SECTION_QUOTES
+-#   define link_warning(symbol, msg) \
+-  __make_section_unallocated (".gnu.warning." #symbol) \
+-  static const char __evoke_link_warning_##symbol[]	\
+-    __attribute__ ((unused, section (".gnu.warning." #symbol "\"\n\t#\""))) \
+-    = msg;
+-#  else
+-#   define link_warning(symbol, msg) \
+-  __make_section_unallocated (".gnu.warning." #symbol) \
+-  static const char __evoke_link_warning_##symbol[]	\
+-    __attribute__ ((unused, section (".gnu.warning." #symbol "\n\t#"))) = msg;
+-#  endif
+-# else /* Not ELF: a.out */
+-#  ifdef HAVE_XCOFF
+-/* XCOFF does not support .stabs.
+-   The native aix linker will remove the .stab and .stabstr sections
+-   The gnu linker will have a fatal error if there is a relocation for
+-   symbol in the .stab section.  Silently disable this macro.  */
+-#   define link_warning(symbol, msg)
+-#  else
+-#   define link_warning(symbol, msg)		\
+-     asm (".stabs \"" msg "\",30,0,0,0\n\t"	\
+-          ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
+-#  endif /* XCOFF */
+-# endif
+-#else
+-/* We will never be heard; they will all die horribly.  */
+-# define link_warning(symbol, msg)
+-#endif
+-
+-/* A canned warning for sysdeps/stub functions.  */
+-#define	stub_warning(name) \
+-  link_warning (name, \
+-		"warning: " #name " is not implemented and will always fail")
+-
+-/*
+-\f
+-*/
+-
+-#ifdef HAVE_GNU_LD
+-
+-/* Symbol set support macros.  */
+-
+-# ifdef HAVE_ELF
+-
+-/* Make SYMBOL, which is in the text segment, an element of SET.  */
+-#  define text_set_element(set, symbol)	_elf_set_element(set, symbol)
+-/* Make SYMBOL, which is in the data segment, an element of SET.  */
+-#  define data_set_element(set, symbol)	_elf_set_element(set, symbol)
+-/* Make SYMBOL, which is in the bss segment, an element of SET.  */
+-#  define bss_set_element(set, symbol)	_elf_set_element(set, symbol)
+-
+-/* These are all done the same way in ELF.
+-   There is a new section created for each set.  */
+-#  ifdef SHARED
+-/* When building a shared library, make the set section writable,
+-   because it will need to be relocated at run time anyway.  */
+-#   define _elf_set_element(set, symbol) \
+-  static const void *__elf_set_##set##_element_##symbol##__ \
+-    __attribute__ ((unused, section (#set))) = &(symbol)
+-#  else
+-#   define _elf_set_element(set, symbol) \
+-  static const void *const __elf_set_##set##_element_##symbol##__ \
+-    __attribute__ ((unused, section (#set))) = &(symbol)
+-#  endif
+-
+-/* Define SET as a symbol set.  This may be required (it is in a.out) to
+-   be able to use the set's contents.  */
+-#  define symbol_set_define(set)	symbol_set_declare(set)
+-
+-/* Declare SET for use in this module, if defined in another module.  */
+-#  define symbol_set_declare(set) \
+-  extern void *const __start_##set __attribute__ ((__weak__));		\
+-  extern void *const __stop_##set __attribute__ ((__weak__));		\
+-  weak_extern (__start_##set) weak_extern (__stop_##set)
+-
+-/* Return a pointer (void *const *) to the first element of SET.  */
+-#  define symbol_set_first_element(set)	(&__start_##set)
+-
+-/* Return true iff PTR (a void *const *) has been incremented
+-   past the last element in SET.  */
+-#  define symbol_set_end_p(set, ptr)	((ptr) >= &__stop_##set)
+-
+-# else	/* Not ELF: a.out.  */
+-
+-#  ifdef HAVE_XCOFF
+-/* XCOFF does not support .stabs.
+-   The native aix linker will remove the .stab and .stabstr sections
+-   The gnu linker will have a fatal error if there is a relocation for
+-   symbol in the .stab section.  Silently disable these macros.  */
+-#   define text_set_element(set, symbol)
+-#   define data_set_element(set, symbol)
+-#   define bss_set_element(set, symbol)
+-#  else
+-#   define text_set_element(set, symbol)	\
+-    asm (".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
+-#   define data_set_element(set, symbol)	\
+-    asm (".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
+-#   define bss_set_element(set, symbol)	?error Must use initialized data.
+-#  endif /* XCOFF */
+-#  define symbol_set_define(set)	void *const (set)[1];
+-#  define symbol_set_declare(set)	extern void *const (set)[1];
+-
+-#  define symbol_set_first_element(set)	&(set)[1]
+-#  define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
+-
+-# endif	/* ELF.  */
+-#else
+-/* We cannot do anything in generial.  */
+-# define text_set_element(set, symbol) asm ("")
+-# define data_set_element(set, symbol) asm ("")
+-# define bss_set_element(set, symbol) asm ("")
+-# define symbol_set_define(set)		void *const (set)[1];
+-# define symbol_set_declare(set)	extern void *const (set)[1];
+-
+-# define symbol_set_first_element(set)	&(set)[1]
+-# define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
+-#endif	/* Have GNU ld.  */
+-
+-#if DO_VERSIONING
+-# define symbol_version(real, name, version) \
+-     _symbol_version(real, name, version)
+-# define default_symbol_version(real, name, version) \
+-     _default_symbol_version(real, name, version)
+-# ifdef __ASSEMBLER__
+-#  define _symbol_version(real, name, version) \
+-     .symver real, name##@##version
+-#  define _default_symbol_version(real, name, version) \
+-     .symver real, name##@##@##version
+-# else
+-#  define _symbol_version(real, name, version) \
+-     __asm__ (".symver " #real "," #name "@" #version)
+-#  define _default_symbol_version(real, name, version) \
+-     __asm__ (".symver " #real "," #name "@@" #version)
+-# endif
+-#else
+-# define symbol_version(real, name, version)
+-# define default_symbol_version(real, name, version) \
+-  strong_alias(real, name)
+-#endif
+-
+-#if defined HAVE_VISIBILITY_ATTRIBUTE && defined SHARED
+-# define attribute_hidden __attribute__ ((visibility ("hidden")))
+-#else
+-# define attribute_hidden
+-#endif
+-
+-/* Handling on non-exported internal names.  We have to do this only
+-   for shared code.  */
+-#ifdef SHARED
+-# define INTUSE(name) name##_internal
+-# define INTDEF(name) strong_alias (name, name##_internal)
+-# define INTVARDEF(name) \
+-  _INTVARDEF (name, name##_internal)
+-# if defined HAVE_VISIBILITY_ATTRIBUTE
+-#  define _INTVARDEF(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((alias (#name), \
+-						   visibility ("hidden")));
+-# else
+-#  define _INTVARDEF(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+-# endif
+-# define INTDEF2(name, newname) strong_alias (name, newname##_internal)
+-# define INTVARDEF2(name, newname) _INTVARDEF (name, newname##_internal)
+-#else
+-# define INTUSE(name) name
+-# define INTDEF(name)
+-# define INTVARDEF(name)
+-# define INTDEF2(name, newname)
+-# define INTVARDEF2(name, newname)
+-#endif
+-
+-#endif /* libc-symbols.h */
+diff --git a/include/set-hooks.h b/include/set-hooks.h
+deleted file mode 100644
+index 9ed71b3..0000000
+--- a/include/set-hooks.h
++++ /dev/null
+@@ -1,72 +0,0 @@
+-/* Macros for using symbol sets for running lists of functions.
+-   Copyright (C) 1994, 1995, 1997, 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 Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#ifndef _SET_HOOKS_H
+-#define _SET_HOOKS_H 1
+-
+-#define __need_size_t
+-#include <stddef.h>
+-// #include <sys/cdefs.h>
+-#define __unbounded
+-
+-#ifdef symbol_set_define
+-/* Define a hook variable called NAME.  Functions put on this hook take
+-   arguments described by PROTO.  Use `text_set_element (NAME, FUNCTION)'
+-   from gnu-stabs.h to add a function to the hook.  */
+-
+-# define DEFINE_HOOK(NAME, PROTO)		\
+-  typedef void __##NAME##_hook_function_t PROTO; \
+-  symbol_set_define (NAME)
+-
+-# define DECLARE_HOOK(NAME, PROTO)		\
+-  typedef void __##NAME##_hook_function_t PROTO;\
+-  symbol_set_declare (NAME)
+-
+-/* Run all the functions hooked on the set called NAME.
+-   Each function is called like this: `function ARGS'.  */
+-
+-# define RUN_HOOK(NAME, ARGS)				\
+-do {							\
+-  void *const *__unbounded ptr;				\
+-  for (ptr = symbol_set_first_element (NAME);		\
+-       ! symbol_set_end_p (NAME, ptr); ++ptr)		\
+-    (*(__##NAME##_hook_function_t *) *ptr) ARGS;	\
+-} while (0)
+-
+-/* Define a hook variable with NAME and PROTO, and a function called RUNNER
+-   which calls each function on the hook in turn, with ARGS.  */
+-
+-# define DEFINE_HOOK_RUNNER(name, runner, proto, args) \
+-DEFINE_HOOK (name, proto); \
+-extern void runner proto; void runner proto { RUN_HOOK (name, args); }
+-
+-#else
+-
+-/* The system does not provide necessary support for this.  */
+-# define DEFINE_HOOK(NAME, PROTO)
+-
+-# define DECLARE_HOOK(NAME, PROTO)
+-
+-# define RUN_HOOK(NAME, ARGS)
+-
+-# define DEFINE_HOOK_RUNNER(name, runner, proto, args)
+-
+-#endif
+-
+-#endif /* set-hooks.h */
+diff --git a/signal/README b/signal/README
+deleted file mode 100644
+index 4963b26..0000000
+--- a/signal/README
++++ /dev/null
+@@ -1,12 +0,0 @@
+-This directory provides a signal implementation, which is appropriate
+-for operating systems where signals are managed at user-level.  It is
+-up to the run-time to catch the signals and forward them to the
+-implementation via, e.g., the pthread_kill_info_np call.
+-
+-The files in this directory are accompanied by the generic implementations
+-found in sysdeps/generic/: killpg.c, raise.c, sigaddset.c, sigdelset.c,
+-sigemptyset.c, sigfillset.c, siginterrupt.c, sigismember.c, signal.c,
+-sigwait.c.
+-
+-This implementation was once used for a native port running on L4, but is not
+-currently used in any libpthread port bundled in this release.
+diff --git a/signal/TODO b/signal/TODO
+deleted file mode 100644
+index 1148abb..0000000
+--- a/signal/TODO
++++ /dev/null
+@@ -1,29 +0,0 @@
+-Unimplemented Functionality
+----------------------------
+-
+-We don't support interruptible functions.  That is, if a signal is
+-delivered when a thread is in e.g. the write system call, then the
+-write function should be interrupted and return EINTR when the signal
+-handler is finished.  To realize this behavior, we could have a thread
+-local interruptible flag and a setjmp buffer.  A function that is
+-interruptible would fill the jump buffer and set the interruptible
+-flag.  If a signal comes in and the interruptible flag is set, rather
+-than resuming the thread, we longjmp to the buffer.
+-
+-If a signal action has set the SA_SIGINFO, the third argument must be
+-a pointer to a ucontext describing the thread's interrupted state;
+-this implementation passes NULL.  This isn't as bad as it sounds as
+-the the ucontext family of functions are marked obsolete in SUSv3 with
+-the advisory that any use of them should be replaced by the use of
+-pthread functionality (cf. makecontext rationale).
+-
+-stop and continue signals are not implemented (as we need to stop all
+-threads, this requires being in bed with libpthread).
+-
+-Implementation is not yet cancellation-safe.
+-
+-There are not even stubs for sighold, sigingore, sigpause, sigrelse,
+-however, according to posix: "Use of any of these functions is
+-unspecified in a multi-threaded process."
+-
+-Implement sigtimedwait, sigqueue.
+\ No newline at end of file
+diff --git a/signal/kill.c b/signal/kill.c
+deleted file mode 100644
+index 27c9c32..0000000
+--- a/signal/kill.c
++++ /dev/null
+@@ -1,70 +0,0 @@
+-/* kill.c - Generic kill implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-int
+-kill (pid_t pid, int signo)
+-{
+-  if (pid != getpid ())
+-    {
+-      errno = EOPNOTSUPP;
+-      return -1;
+-    }
+-
+-  /* "Signals generated for the process shall be delivered to exactly
+-     one of those threads within the process which is in a call to a
+-     sigwait() function selecting that signal or has not blocked
+-     delivery of the signal.  If there are no threads in a call to a
+-     sigwait() function selecting that signal, and if all threads
+-     within the process block delivery of the signal, the signal shall
+-     remaing pending on the process" (2.4.1).  */
+-
+-  /* First, see if there is a waiter, which is interested in this
+-     signal.  */
+-  pthread_mutex_lock (&sig_lock);
+-
+-  struct sigwaiter *waiter;
+-  for (waiter = sigwaiters; waiter; waiter = waiter->next)
+-    if ((waiter->signals & sigmask (signo)))
+-      /* Got a winner.  */
+-      {
+-	sigdelset (&process_pending, signo);
+-
+-	pthread_mutex_lock (&waiter->ss->lock);
+-	sigdelset (&waiter->ss->pending, signo);
+-
+-	memset (&waiter->info, 0, sizeof (waiter->info));
+-	waiter->info.si_signo = signo;
+-
+-	sigwaiter_unblock (waiter);
+-
+-	return 0;
+-      }
+-
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  /* XXX: We just generate the signal for the current thread.  If the
+-     current thread has blocked the signal, the correct thing to do is
+-     to iterate over all the other threads and find on that hasn't
+-     blocked it.  */
+-  return pthread_kill (pthread_self (), signo);
+-}
+-
+diff --git a/signal/pt-kill-siginfo-np.c b/signal/pt-kill-siginfo-np.c
+deleted file mode 100644
+index 9bdf6cc..0000000
+--- a/signal/pt-kill-siginfo-np.c
++++ /dev/null
+@@ -1,88 +0,0 @@
+-/* pthread-kill-siginfo-np.c - Generic pthread_kill_siginfo_np implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "pt-internal.h"
+-#include "sig-internal.h"
+-
+-int
+-pthread_kill_siginfo_np (pthread_t tid, siginfo_t si)
+-{
+-  int sig = si.si_signo;
+-
+-  if (sig < 0 || sig >= NSIG)
+-    return EINVAL;
+-
+-  if (sig == 0)
+-    return 0;
+-
+-  struct signal_state *ss = &__pthread_getid (tid)->ss;
+-
+-  pthread_mutex_lock (&sig_lock);
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if (ss->sigwaiter && (ss->sigwaiter->signals & sigmask (si.si_signo)))
+-    /* The thread is in a call to sigwait.  */
+-    {
+-      ss->sigwaiter->info = si;
+-      sigwaiter_unblock (ss->sigwaiter);
+-      return 0;
+-    }
+-
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  if (ss->actions[sig - 1].sa_handler == (void *) SIG_IGN
+-      || (ss->actions[sig - 1].sa_handler == (void *) SIG_DFL
+-	  && default_action (sig) == sig_ignore))
+-    /* It is unclear (to me) what is supposed to happen when a signal
+-       is generated for a thread, which is blocking that signal and
+-       ignoring it.  POSIX does say that when the action associated
+-       with a pending, blocked signal is set to SIG_IGN, the pending
+-       signal is to be cleared.  Thus, it makes sense that any signal
+-       set to ignore is discarded at generation.  */
+-    {
+-      pthread_mutex_unlock (&ss->lock);
+-      return 0;
+-    }
+-
+-
+-  if ((sigmask (sig) & ss->blocked))
+-    /* The signal is blocked.  Mark it pending.  */
+-    {
+-      ss->pending |= sigmask (sig);
+-      pthread_mutex_unlock (&ss->lock);
+-      return 0;
+-    }
+-
+-  if (pthread_self () == tid
+-      && (! (ss->actions[si.si_signo - 1].sa_flags & SA_ONSTACK)
+-	  || (ss->stack.ss_flags & SS_DISABLE)
+-	  || (ss->stack.ss_flags & SS_ONSTACK)))
+-    /* We are sending a signal to ourself and we don't use an
+-       alternate stack.  */
+-    signal_dispatch (ss, &si);
+-  else
+-    signal_dispatch_lowlevel (ss, tid, si);
+-
+-  /* Don't unlock ss: signal_dispatch and signal_dispatch_lowlevel
+-     assume ownership of the lock.  */
+-
+-  return 0;
+-}
+-
+diff --git a/signal/sig-internal.c b/signal/sig-internal.c
+deleted file mode 100644
+index f73f38b..0000000
+--- a/signal/sig-internal.c
++++ /dev/null
+@@ -1,26 +0,0 @@
+-/* sig-internal.c - Signal state functions.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-pthread_mutex_t sig_lock = PTHREAD_MUTEX_INITIALIZER;
+-
+-sigset_t process_pending;
+-siginfo_t process_pending_info[NSIG];
+diff --git a/signal/sig-internal.h b/signal/sig-internal.h
+deleted file mode 100644
+index 6c86c79..0000000
+--- a/signal/sig-internal.h
++++ /dev/null
+@@ -1,177 +0,0 @@
+-/* sig-internal.h - Internal signal handling interface.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef SIG_INTERNAL_H
+-#define SIG_INTERNAL_H
+-
+-#include <signal.h>
+-
+-#include <sig-sysdep.h>
+-
+-#define sigmask(sig) (1ULL << (sig - 1))
+-#define STOPSIGS (sigmask (SIGTTIN) | sigmask (SIGTTOU) | \
+-		  sigmask (SIGSTOP) | sigmask (SIGTSTP))
+-
+-/* General lock.  Protects PROCESS_PENDING, PROCESS_PENDING_INFO,
+-   SIGWAITERS.  */
+-extern pthread_mutex_t sig_lock;
+-
+-/* "Signals generated for the process shall be delivered to exactly
+-   one of those threads within the process which is in a call to a
+-   sigwait() function selecting that signal or has not blocked
+-   delivery of the signal.  If there are no threads in a call to a
+-   sigwait() function selecting that signal, and if all threads within
+-   the process block delivery of the signal, the signal shall remaing
+-   pending on the process"  (2.4.1).
+-
+-   This variable is protected by SIG_LOCK.  */
+-extern sigset_t process_pending;
+-extern siginfo_t process_pending_info[NSIG];
+-\f
+-struct sigwaiter;
+-
+-/* The per-thread signal state.  */
+-struct signal_state
+-{
+-  /* Protects the following fields.  STACK.SA_FLAGS may be accessed
+-     using atomic operations.  */
+-  pthread_mutex_t lock;
+-
+-  /* Pending signals.  */
+-  sigset_t pending;
+-
+-  /* Blocked signals (i.e., the signal mask).  */
+-  sigset_t blocked;
+-
+-  stack_t stack;
+-  struct sigaction actions[NSIG];
+-  siginfo_t info[NSIG];
+-
+-  /* If the thread is blocked in a call to sigwait.  */
+-  struct sigwaiter *sigwaiter;
+-};
+-
+-#define PTHREAD_SIGNAL_MEMBERS struct signal_state ss;
+-
+-/* Arranges for thread TID to call signal_dispatch.  Must not be
+-   called if TID is the caller and an alternate stack is not required.
+-   In this case, the caller should call signal_dispatch directly.  */
+-extern void signal_dispatch_lowlevel (struct signal_state *ss,
+-				      pthread_t tid, siginfo_t si);
+-
+-/* This is the signal handler entry point.  A thread is forced into
+-   this state when it receives a signal.  We need to save the thread's
+-   state and then invoke the high-level signal dispatcher.  SS->LOCK
+-   is locked by the caller.  */
+-extern void signal_dispatch (struct signal_state *ss, siginfo_t *si);
+-
+-#ifndef SIGNAL_DISPATCH_ENTRY
+-#define SIGNAL_DISPATCH_ENTRY
+-#endif
+-
+-#ifndef SIGNAL_DISPATCH_EXIT
+-#define SIGNAL_DISPATCH_EXIT
+-#endif
+-\f
+-/* When a thread calls sigwait and a requested signal is not pending,
+-   it allocates the following structure, fills it in, adds it to
+-   sigwaiters and sleeps.  */
+-struct sigwaiter
+-{
+-  struct sigwaiter *next;
+-  struct sigwaiter *prev;
+-
+-  /* Thread's signal state.  */
+-  struct signal_state *ss;
+-
+-  /* Signals this thread is waiting for.  */
+-  sigset_t signals;
+-
+-  /* The selected signal is returned here.  The waiter also
+-     futex_waits on this info.si_signo.  */
+-  siginfo_t info;
+-};
+-
+-/* This variable is protected by SIG_LOCK.  */
+-extern struct sigwaiter *sigwaiters;
+-
+-/* Block the caller waiting for a signal in set SET.  SIG_LOCK and
+-   SS->LOCK must be held and will be unlocked by this function before
+-   blocking.  */
+-extern siginfo_t sigwaiter_block (struct signal_state *ss,
+-				  const sigset_t *restrict set);
+-
+-/* Unblock the waiter WAITER.  SIG_LOCK and WAITER->SS->LOCK must be
+-   held.  Both will be dropped on return.  */
+-extern void sigwaiter_unblock (struct sigwaiter *waiter);
+-\f
+-enum sig_action { sig_core, sig_terminate, sig_ignore, sig_cont, sig_stop };
+-
+-static inline enum sig_action
+-default_action (int signo)
+-{
+-  switch (signo)
+-    {
+-    case SIGABRT:
+-    case SIGBUS:
+-    case SIGFPE:
+-    case SIGILL:
+-    case SIGQUIT:
+-    case SIGSEGV:
+-    case SIGSTKFLT:
+-    case SIGSYS:
+-    case SIGTRAP:
+-    case SIGXCPU:
+-    case SIGXFSZ:
+-      return sig_core;
+-
+-    case SIGALRM:
+-    case SIGHUP:
+-    case SIGINT:
+-    case SIGIO: /* Perhaps ignore?  */
+-    case SIGKILL:
+-    case SIGPIPE:
+-    case SIGPROF:
+-    case SIGTERM:
+-    case SIGUSR1:
+-    case SIGUSR2:
+-    case SIGVTALRM:
+-      return sig_terminate;
+-
+-    case SIGCHLD:
+-    case SIGPWR:
+-    case SIGURG:
+-    case SIGWINCH:
+-      return sig_ignore;
+-
+-    case SIGCONT:
+-      return sig_cont;
+-
+-    case SIGSTOP:
+-    case SIGTSTP:
+-    case SIGTTIN:
+-    case SIGTTOU:
+-      return sig_stop;
+-    }
+-
+-  panic ("Unknown signal number: %d", signo);
+-}
+-
+-#endif
+diff --git a/signal/sigaction.c b/signal/sigaction.c
+deleted file mode 100644
+index 0126c99..0000000
+--- a/signal/sigaction.c
++++ /dev/null
+@@ -1,72 +0,0 @@
+-/* sigaction.c - Generic sigaction implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-#include "pt-internal.h"
+-
+-int
+-sigaction (int sig, const struct sigaction *restrict sa,
+-	   struct sigaction *restrict osa)
+-{
+-  if (sig <= 0 || sig >= NSIG)
+-    {
+-      errno = EINVAL;
+-      return -1;
+-    }
+-
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if (osa)
+-    *osa = ss->actions[sig - 1];
+-
+-  if (sa)
+-    {
+-      ss->actions[sig - 1] = *sa;
+-
+-      /* "The SIGKILL and SIGSTOP signals shall not be added to the
+-	 signal mask using this mechanism; this restriction shall be
+-	 enforced by the system without causing an error to be
+-	 indicated" (sigaction).  */
+-      sigdelset (&ss->blocked, SIGKILL);
+-      sigdelset (&ss->blocked, SIGSTOP);
+-
+-      /* A "signal shall remain pending on the process until it is
+-	 unblocked, it is accepted when ..., or the action associated
+-	 with it is set to ignore the signal"  (2.4.1).
+-
+-         "Setting a signal action to SIG_DFL for a signal that is
+-         pending, and whose default action is to ignore the signal,
+-         ..., shall cause the pending signal to be discarded, whether
+-         or not it is blocked" (2.4.3).  */
+-      if (sa->sa_handler == SIG_IGN
+-	  || (sa->sa_handler == SIG_DFL && default_action (sig) == sig_ignore))
+-	{
+-	  sigdelset (&ss->pending, sig);
+-	  sigdelset (&process_pending, sig);
+-	}
+-    }
+-
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  return 0;
+-}
+-
+diff --git a/signal/sigaltstack.c b/signal/sigaltstack.c
+deleted file mode 100644
+index 8334811..0000000
+--- a/signal/sigaltstack.c
++++ /dev/null
+@@ -1,69 +0,0 @@
+-/* sigaltstack.c - Generic sigaltstack implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-#include "pt-internal.h"
+-
+-int
+-sigaltstack (const stack_t *restrict stack, stack_t *restrict old)
+-{
+-  int err = 0;
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if (old)
+-    *old = ss->stack;
+-
+-  if (stack)
+-    {
+-      if (stack->ss_size < MINSIGSTKSZ)
+-	{
+-	  err = ENOMEM;
+-	  goto out;
+-	}
+-
+-      if ((stack->ss_flags & ~(SS_DISABLE)))
+-	/* Flags contains a value other than SS_DISABLE.  */
+-	{
+-	  err = EINVAL;
+-	  goto out;
+-	}
+-
+-      if ((ss->stack.ss_flags & SS_ONSTACK))
+-	/* Stack in use.  */
+-	{
+-	  err = EPERM;
+-	  goto out;
+-	}
+-
+-      ss->stack = *stack;
+-    }
+-
+- out:
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  if (err)
+-    {
+-      errno = err;
+-      return -1;
+-    }
+-  return 0;
+-}
+diff --git a/signal/signal-dispatch.c b/signal/signal-dispatch.c
+deleted file mode 100644
+index 40440b7..0000000
+--- a/signal/signal-dispatch.c
++++ /dev/null
+@@ -1,117 +0,0 @@
+-/* signal-dispatch.c - Signal dispatcher.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-/* This is the signal handler entry point.  A thread is forced into
+-   this state when it receives a signal.  We need to save the thread's
+-   state and then invoke the high-level signal dispatcher.  SS->LOCK
+-   is locked by the caller.  */
+-void
+-signal_dispatch (struct signal_state *ss, siginfo_t *si)
+-{
+-  SIGNAL_DISPATCH_ENTRY;
+-
+-  int signo = si->si_signo;
+-
+-  assert (signo > 0 && signo < NSIG);
+-  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
+-
+-  do
+-    {
+-      if ((sigmask (signo) & STOPSIGS))
+-	/* Stop signals clear a pending SIGCONT even if they
+-	   are handled or ignored (but not if preempted).  */
+-	{
+-	  sigdelset (&ss->pending, SIGCONT);
+-	  sigdelset (&process_pending, SIGCONT);
+-	}
+-      else if ((signo == SIGCONT))
+-	/* Even if handled or ignored (but not preempted), SIGCONT
+-	   clears stop signals and resumes the process.  */
+-	{
+-	  ss->pending &= ~STOPSIGS;
+-	  process_pending &= ~STOPSIGS;
+-	}
+-
+-      void (*handler)(int, siginfo_t *, void *)
+-	= ss->actions[signo - 1].sa_sigaction;
+-
+-      /* Reset to SIG_DFL if requested.  SIGILL and SIGTRAP cannot
+-	 be automatically reset when delivered; the system silently
+-	 enforces this restriction (sigaction).  */
+-      if (ss->actions[signo - 1].sa_flags & SA_RESETHAND
+-	  && signo != SIGILL && signo != SIGTRAP)
+-	ss->actions[signo - 1].sa_handler = SIG_DFL;
+-
+-      sigset_t orig_blocked = ss->blocked;
+-      /* Block requested signals while running the handler.  */
+-      ss->blocked |= ss->actions[signo - 1].sa_mask;
+-
+-      /* Block SIGNO unless we're asked not to.  */
+-      if (! (ss->actions[signo - 1].sa_flags & (SA_RESETHAND | SA_NODEFER)))
+-	sigaddset (&ss->blocked, signo);
+-
+-      sigdelset (&ss->pending, signo);
+-      pthread_mutex_unlock (&ss->lock);
+-
+-      pthread_mutex_lock (&sig_lock);
+-      sigdelset (&process_pending, signo);
+-      pthread_mutex_unlock (&sig_lock);
+-
+-      if (handler == (void *) SIG_DFL)
+-	{
+-	  enum sig_action action = default_action (signo);
+-
+-	  if (action == sig_terminate || action == sig_core)
+-	    _exit (128 + signo);
+-
+-	  if (action == sig_stop)
+-	    /* XXX: Implement me.  */
+-	    panic ("Stopping process unimplemented.");
+-
+-	  if (action == sig_cont)
+-	    /* XXX: Implement me.  */;
+-	    panic ("Continuing process unimplemented.");
+-	}
+-      else if (handler == (void *) SIG_IGN)
+-	;
+-      else
+-	handler (signo, si, NULL);
+-
+-      pthread_mutex_lock (&ss->lock);
+-
+-      /* "When a thread's signal mask is changed in a signal-catching
+-	 function that is installed by sigaction(), the restoration of
+-	 the signal mask on return from the signal-catching function
+-	 overrides that change (see sigaction())" (sigprocmask).  */
+-      ss->blocked = orig_blocked;
+-
+-      sigset_t pending = ~ss->blocked & ss->pending;
+-      if (! pending)
+-	pending = ~ss->blocked & process_pending;
+-      signo = l4_lsb64 (pending);
+-    }
+-  while (signo);
+-
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  SIGNAL_DISPATCH_EXIT;
+-}
+diff --git a/signal/signal.h b/signal/signal.h
+deleted file mode 100644
+index 6e22d05..0000000
+--- a/signal/signal.h
++++ /dev/null
+@@ -1,275 +0,0 @@
+-/* signal.h - Signal handling interface.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _SIGNAL_H
+-#define _SIGNAL_H 1
+-
+-#include <stdint.h>
+-#include <sys/types.h>
+-
+-typedef volatile int sig_atomic_t;
+-\f
+-/*typedef uint64_t sigset_t;*/
+-
+-int sigaddset (sigset_t *, int);
+-int sigdelset (sigset_t *, int);
+-int sigemptyset (sigset_t *);
+-int sigfillset (sigset_t *);
+-int sigismember (const sigset_t *, int);
+-\f
+-/* These values are consistent with Linux.  */
+-#define SIGRTMIN 34
+-#define SIGRTMAX 64
+-
+-enum
+-  {
+-    SIGHUP = 1,
+-#define SIGHUP SIGHUP
+-    SIGINT,
+-#define SIGINT SIGINT
+-    SIGQUIT,
+-#define SIGQUIT SIGQUIT
+-    SIGILL,
+-#define SIGILL SIGILL
+-    SIGTRAP,
+-#define SIGTRAP SIGTRAP
+-    SIGABRT,
+-#define SIGABRT SIGABRT
+-    SIGBUS,
+-#define SIGBUS SIGBUS
+-    SIGFPE,
+-#define SIGFPE SIGFPE
+-    SIGKILL,
+-#define SIGKILL SIGKILL
+-    SIGUSR1,
+-#define SIGUSR1 SIGUSR1
+-    SIGSEGV,
+-#define SIGSEGV SIGSEGV
+-    SIGUSR2,
+-#define SIGUSR2 SIGUSR2
+-    SIGPIPE,
+-#define SIGPIPE SIGPIPE
+-    SIGALRM,
+-#define SIGALRM SIGALRM
+-    SIGTERM,
+-#define SIGTERM SIGTERM
+-    SIGSTKFLT,
+-#define SIGSTKFLT SIGSTKFLT
+-    SIGCHLD,
+-#define SIGCHLD SIGCHLD
+-    SIGCONT,
+-#define SIGCONT SIGCONT
+-    SIGSTOP,
+-#define SIGSTOP SIGSTOP
+-    SIGTSTP,
+-#define SIGTSTP SIGTSTP
+-    SIGTTIN,
+-#define SIGTTIN SIGTTIN
+-    SIGTTOU,
+-#define SIGTTOU SIGTTOU
+-    SIGURG,
+-#define SIGURG SIGURG
+-    SIGXCPU,
+-#define SIGXCPU SIGXCPU
+-    SIGXFSZ,
+-#define SIGXFSZ SIGXFSZ
+-    SIGVTALRM,
+-#define SIGVTALRM SIGVTALRM
+-    SIGPROF,
+-#define SIGPROF SIGPROF
+-    SIGWINCH,
+-#define SIGWINCH SIGWINCH
+-    SIGIO,
+-#define SIGIO SIGIO
+-    SIGPWR,
+-#define SIGPWR SIGPWR
+-    SIGSYS,
+-#define SIGSYS SIGSYS
+-    NSIG
+-  };
+-\f
+-/* The resulting set is the union of the current set and the signal
+-   set pointed to by the argument set.  */
+-#define SIG_BLOCK 1
+-/* The resulting set is the intersection of the current set and the
+-   complement of the signal set pointed to by the argument set.  */
+-#define SIG_UNBLOCK 2
+-/* The resulting set is the signal set pointed to by the argument
+-   set.  */
+-#define SIG_SETMASK 3
+-
+-int pthread_sigmask (int how, const sigset_t *mask, sigset_t *old);
+-int sigprocmask (int how, const sigset_t *restrict mask,
+-		 sigset_t *restrict old);
+-
+-/* Return set of pending signals.  */
+-int sigpending(sigset_t *set);
+-\f
+-union sigval
+-{
+-  int sival_int;
+-  void *sival_ptr;
+-};
+-\f
+-#define SIG_DFL ((void (*)(int)) (0))
+-#define SIG_ERR ((void (*)(int)) (-1))
+-#define SIG_IGN ((void (*)(int)) (1))
+-
+-/* Causes signal delivery to occur on an alternate stack.  */
+-#define SA_ONSTACK (1 << 0)
+-/* Do not generate SIGCHLD when children stop or stopped children
+-   continue.  */
+-#define SA_NOCLDSTOP (1 << 1)
+-/* Causes signal dispositions to be set to SIG_DFL on entry to signal
+-   handlers.  */
+-#define SA_RESETHAND (1 << 2)
+-/* Causes certain functions to become restartable.  */
+-#define SA_RESTART (1 << 3)
+-/* Causes extra information to be passed to signal handlers at the
+-   time of receipt of a signal.  */
+-#define SA_SIGINFO (1 << 4)
+-/* Causes implementations not to create zombie processes on child
+-   death.  */
+-#define SA_NOCLDWAIT (1 << 5)
+-/* Causes signal not to be automatically blocked on entry to
+-   signal handler.  */
+-#define SA_NODEFER (1 << 6)
+-
+-typedef struct
+-{
+-  int si_signo;
+-  int si_code;
+-  int si_errno;
+-  pid_t si_pid;
+-  uid_t si_uid;
+-  void *si_addr;
+-  int si_status;
+-  long si_band;
+-  union sigval si_value;
+-} siginfo_t;
+-
+-struct sigaction
+-{
+-  union
+-  {
+-    /* Pointer to a signal-catching function or one of the macros
+-       SIG_IGN or SIG_DFL.  */
+-    void (*sa_handler)(int);
+-                   
+-    /* Pointer to a signal-catching function.  */
+-    void (*sa_sigaction)(int, siginfo_t *, void *);
+-  };
+-
+-  /* Set of signals to be blocked during execution of the signal
+-     handling function.  */
+-  sigset_t sa_mask;
+-
+-  /* Special flags.  */
+-  int sa_flags;
+-};
+-
+-int sigaction (int signo, const struct sigaction *restrict newaction,
+-	       struct sigaction *restrict oldaction);
+-
+-void (*signal (int signo, void (*handler)(int)))(int);
+-void (*bsd_signal (int signo, void (*handler)(int)))(int);
+-\f
+-/* Process is executing on an alternate signal stack.  */
+-#define SS_ONSTACK (1 << 0)
+-/* Alternate signal stack is disabled.  */
+-#define SS_DISABLE (1 << 1)
+-
+-/* Minimum stack size for a signal handler.  */
+-#define MINSIGSTKSZ PAGESIZE
+-/* Default size in bytes for the alternate signal stack. */
+-#define SIGSTKSZ (16 * PAGESIZE)
+-
+-typedef struct
+-{
+-  void *ss_sp;
+-  size_t ss_size;
+-  int ss_flags;
+-} stack_t;
+-
+-int sigaltstack(const stack_t *restrict stack, stack_t *restrict old);
+-\f
+-#include <pthread.h>
+-
+-/* Send SIGNO to the process PID.  */
+-int kill(pid_t pid, int signo);
+-
+-/* Send SIGNO to the process group PG.  */
+-int killpg(pid_t pg, int signo);
+-
+-/* Send SIGNO to thread TID.  */
+-int pthread_kill(pthread_t tid, int signo);
+-
+-/* Send a signal to thread TID using SIGINFO.  */
+-int pthread_kill_siginfo_np (pthread_t tid, siginfo_t siginfo);
+-
+-/* Send SIGNO to the calling thread.  */
+-int raise(int signo);
+-\f
+-typedef struct sigevent
+-{
+-  /* Notification type.  */
+-  int sigev_notify;
+-
+-  /* Signal number.  */
+-  int sigev_signo;
+-
+-  /* Signal value.  */
+-  union sigval sigev_value;
+-
+-  /* Notification function.  */
+-  void (*sigev_notify_function) (union sigval);
+-
+-  /* Notification attributes.  */
+-  pthread_attr_t *sigev_notify_attributes;
+-} sigevent_t;
+-
+-enum
+-  {
+-    SIGEV_NONE = 0,
+-#define SIGEV_NONE SIGEV_NONE
+-    SIGEV_SIGNAL,
+-#define SIGEV_SIGNAL SIGEV_SIGNAL
+-    SIGEV_THREAD
+-#define SIGEV_THREAD SIGEV_THREAD
+-  };
+-\f
+-#define SIG_HOLD
+-
+-int sighold (int);
+-int sigignore (int);
+-int siginterrupt (int, int);
+-int sigpause (int);
+-int sigqueue (pid_t, int, const union sigval);
+-int sigrelse (int);
+-void (*sigset (int, void (*)(int)))(int);
+-int sigsuspend (const sigset_t *);
+-\f
+-/* Wait for a signal.  */
+-int sigwait (const sigset_t *restrict set, int *restrict signo);
+-int sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info);
+-int sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
+-		  const struct timespec *restrict timespec);
+-
+-#endif
+diff --git a/signal/sigpending.c b/signal/sigpending.c
+deleted file mode 100644
+index 609b55d..0000000
+--- a/signal/sigpending.c
++++ /dev/null
+@@ -1,38 +0,0 @@
+-/* sigpending.c - Generic sigpending implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sig-internal.h>
+-#include <pt-internal.h>
+-
+-int
+-sigpending (sigset_t *set)
+-{
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  /* There is no need to lock SIG_LOCK for process_pending since we
+-     just read it, which is atomic.  */
+-  *set = (ss->pending | process_pending) & ss->blocked;
+-
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  return 0;
+-}
+diff --git a/signal/sigsuspend.c b/signal/sigsuspend.c
+deleted file mode 100644
+index 73cf12a..0000000
+--- a/signal/sigsuspend.c
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/* sigsuspend.c - Generic sigsuspend implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-int
+-sigsuspend (const sigset_t *set)
+-{
+-  /* XXX: Implement me.  */
+-  errno = EOPNOTSUPP;
+-  return -1;
+-}
+diff --git a/signal/sigtimedwait.c b/signal/sigtimedwait.c
+deleted file mode 100644
+index 52cd017..0000000
+--- a/signal/sigtimedwait.c
++++ /dev/null
+@@ -1,30 +0,0 @@
+-/* sigtimedwait.c - Generic sigtimedwait implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-int
+-sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
+-	      const struct timespec *restrict timeout)
+-{
+-  errno = EOPNOTSUPP;
+-  return -1;
+-}
+-
+diff --git a/signal/sigwaiter.c b/signal/sigwaiter.c
+deleted file mode 100644
+index 8d041ac..0000000
+--- a/signal/sigwaiter.c
++++ /dev/null
+@@ -1,91 +0,0 @@
+-/* sigwaiter.c - Signal handling functions.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-#include <hurd/futex.h>
+-
+-struct sigwaiter *sigwaiters;
+-
+-siginfo_t
+-sigwaiter_block (struct signal_state *ss, const sigset_t *restrict set)
+-{
+-  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
+-  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
+-
+-  assert (! ss->sigwaiter);
+-
+-  struct sigwaiter waiter;
+-
+-  waiter.next = sigwaiters;
+-  if (waiter.next)
+-    {
+-      assert (! waiter.next->prev);
+-      waiter.next->prev = &waiter;
+-    }
+-  waiter.prev = 0;
+-  sigwaiters = &waiter;
+-
+-  waiter.ss = ss;
+-  waiter.info.si_signo = 0;
+-  waiter.signals = *set;
+-
+-  ss->sigwaiter = &waiter;
+-
+-  pthread_mutex_unlock (&ss->lock);
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  futex_wait (&waiter.info.si_signo, 0);
+-
+-#ifndef NDEBUG
+-  pthread_mutex_lock (&ss->lock);
+-  ss->sigwaiter = 0;
+-  pthread_mutex_unlock (&ss->lock);
+-#endif
+-
+-  assert (waiter.info.si_signo);
+-  return waiter.info;
+-}
+-
+-void
+-sigwaiter_unblock (struct sigwaiter *waiter)
+-{
+-  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
+-  assert (pthread_mutex_trylock (&waiter->ss->lock) == EBUSY);
+-
+-  struct sigwaiter *prev = waiter->prev;
+-  struct sigwaiter *next = waiter->next;
+-
+-  if (next)
+-    next->prev = prev;
+-
+-  if (prev)
+-    prev->next = next;
+-  else
+-    sigwaiters = next;
+-
+-  sigdelset (&process_pending, waiter->info.si_signo);
+-  sigdelset (&waiter->ss->pending, waiter->info.si_signo);
+-
+-  pthread_mutex_unlock (&waiter->ss->lock);
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  futex_wake (&waiter->info.si_signo, 1);
+-}
+diff --git a/signal/sigwaitinfo.c b/signal/sigwaitinfo.c
+deleted file mode 100644
+index 1b47079..0000000
+--- a/signal/sigwaitinfo.c
++++ /dev/null
+@@ -1,74 +0,0 @@
+-/* sigwaitinfo.c - Generic sigwaitinfo implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sig-internal.h>
+-#include <pt-internal.h>
+-
+-int
+-sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info)
+-{
+-  pthread_mutex_lock (&sig_lock);
+-
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if ((process_pending & *set) || (ss->pending & *set))
+-    /* There is at least one signal pending.  */
+-    {
+-      bool local = true;
+-      sigset_t extant = process_pending & *set;
+-      if (! extant)
+-	{
+-	  local = false;
+-	  extant = ss->pending & *set;
+-	}
+-
+-      assert (extant);
+-
+-      int signo = l4_msb64 (extant);
+-
+-      if (info)
+-	{
+-	  if (local)
+-	    *info = ss->info[signo - 1];
+-	  else
+-	    *info = process_pending_info[signo - 1];
+-	  info->si_signo = signo;
+-	}
+-
+-      sigdelset (&process_pending, signo);
+-      sigdelset (&ss->pending, signo);
+-
+-      pthread_mutex_unlock (&ss->lock);
+-      pthread_mutex_unlock (&sig_lock);
+-      return 0;
+-    }
+-
+-  siginfo_t i = sigwaiter_block (ss, set);
+-  assert (i.si_signo);
+-  assert ((sigmask (i.si_signo) & *set));
+-
+-  if (info)
+-    *info = i;
+-
+-  return 0;
+-}
+-
+-- 
+1.9.0
+
+From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Thu, 27 Mar 2014 00:21:36 +0000
+Subject: [PATCH 1/3] This helps to integrate libpthread as a glibc module.
+
+---
+ configure | 2 ++
+ 1 file changed, 2 insertions(+)
+ create mode 100644 configure
+
+diff --git a/configure b/configure
+new file mode 100644
+index 0000000..2cdbc71
+--- /dev/null
++++ b/configure
+@@ -0,0 +1,2 @@
++libc_add_on_canonical=libpthread
++libc_add_on_subdirs=.
+\ No newline at end of file
+-- 
+1.9.0
+
+
+From 7f5f718b4a231c1e08d9ed1676cb18e265b715d6 Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Sat, 29 Mar 2014 23:29:44 +0000
+Subject: [PATCH 2/3] fix
+
+---
+ signal/signal.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/signal/signal.h b/signal/signal.h
+index a33d995..6e22d05 100644
+--- a/signal/signal.h
++++ b/signal/signal.h
+@@ -26,7 +26,7 @@
+ 
+ typedef volatile int sig_atomic_t;
+ \f
+-typedef uint64_t sigset_t;
++/*typedef uint64_t sigset_t;*/
+ 
+ int sigaddset (sigset_t *, int);
+ int sigdelset (sigset_t *, int);
+-- 
+1.9.0
+
+
+From b8639799ae3b571eb44edd2b3dec109957393d3e Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Sun, 30 Mar 2014 16:56:09 +0000
+Subject: [PATCH 3/3] These come from the l4 implementation and come in the way
+ of the glibc Makefiles, drop them.
+
+---
+ include/libc-symbols.h      | 395 --------------------------------------------
+ include/set-hooks.h         |  72 --------
+ signal/README               |  12 --
+ signal/TODO                 |  29 ----
+ signal/kill.c               |  70 --------
+ signal/pt-kill-siginfo-np.c |  88 ----------
+ signal/sig-internal.c       |  26 ---
+ signal/sig-internal.h       | 177 --------------------
+ signal/sigaction.c          |  72 --------
+ signal/sigaltstack.c        |  69 --------
+ signal/signal-dispatch.c    | 117 -------------
+ signal/signal.h             | 275 ------------------------------
+ signal/sigpending.c         |  38 -----
+ signal/sigsuspend.c         |  29 ----
+ signal/sigtimedwait.c       |  30 ----
+ signal/sigwaiter.c          |  91 ----------
+ signal/sigwaitinfo.c        |  74 ---------
+ 17 files changed, 1664 deletions(-)
+ delete mode 100644 include/libc-symbols.h
+ delete mode 100644 include/set-hooks.h
+ delete mode 100644 signal/README
+ delete mode 100644 signal/TODO
+ delete mode 100644 signal/kill.c
+ delete mode 100644 signal/pt-kill-siginfo-np.c
+ delete mode 100644 signal/sig-internal.c
+ delete mode 100644 signal/sig-internal.h
+ delete mode 100644 signal/sigaction.c
+ delete mode 100644 signal/sigaltstack.c
+ delete mode 100644 signal/signal-dispatch.c
+ delete mode 100644 signal/signal.h
+ delete mode 100644 signal/sigpending.c
+ delete mode 100644 signal/sigsuspend.c
+ delete mode 100644 signal/sigtimedwait.c
+ delete mode 100644 signal/sigwaiter.c
+ delete mode 100644 signal/sigwaitinfo.c
+
+diff --git a/include/libc-symbols.h b/include/libc-symbols.h
+deleted file mode 100644
+index 54dd6e2..0000000
+--- a/include/libc-symbols.h
++++ /dev/null
+@@ -1,395 +0,0 @@
+-/* Support macros for making weak and strong aliases for symbols,
+-   and for using symbol sets and linker warnings with GNU ld.
+-   Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2008
+-     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 Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#ifndef _LIBC_SYMBOLS_H
+-#define _LIBC_SYMBOLS_H	1
+-
+-/* This file's macros are included implicitly in the compilation of every
+-   file in the C library by -imacros.
+-
+-   We include config.h which is generated by configure.
+-   It should define for us the following symbols:
+-
+-   * HAVE_ASM_SET_DIRECTIVE if we have `.set B, A' instead of `A = B'.
+-   * ASM_GLOBAL_DIRECTIVE with `.globl' or `.global'.
+-   * HAVE_GNU_LD if using GNU ld, with support for weak symbols in a.out,
+-   and for symbol set and warning messages extensions in a.out and ELF.
+-   * HAVE_ELF if using ELF, which supports weak symbols using `.weak'.
+-   * HAVE_ASM_WEAK_DIRECTIVE if we have weak symbols using `.weak'.
+-   * HAVE_ASM_WEAKEXT_DIRECTIVE if we have weak symbols using `.weakext'.
+-
+-   */
+-
+-/* This is defined for the compilation of all C library code.  features.h
+-   tests this to avoid inclusion of stubs.h while compiling the library,
+-   before stubs.h has been generated.  Some library code that is shared
+-   with other packages also tests this symbol to see if it is being
+-   compiled as part of the C library.  We must define this before including
+-   config.h, because it makes some definitions conditional on whether libc
+-   itself is being compiled, or just some generator program.  */
+-// #define _LIBC	1
+-
+-/* Enable declarations of GNU extensions, since we are compiling them.  */
+-#define _GNU_SOURCE	1
+-/* And we also need the data for the reentrant functions.  */
+-#define _REENTRANT	1
+-
+-// #include <config.h>
+-#define HAVE_ASM_WEAK_DIRECTIVE
+-#define HAVE_WEAK_SYMBOLS
+-#define HAVE_ASM_SET_DIRECTIVE
+-#define HAVE_BUILTIN_EXPECT
+-#define HAVE_GNU_LD
+-#define HAVE_ELF
+-#define HAVE_SECTION_QUOTES
+-#define HAVE_VISIBILITY_ATTRIBUTE
+-#define HAVE_ASM_PREVIOUS_DIRECTIVE
+-// #define SHARED
+-
+-/* The symbols in all the user (non-_) macros are C symbols.
+-   HAVE_GNU_LD without HAVE_ELF implies a.out.  */
+-
+-#if defined HAVE_ASM_WEAK_DIRECTIVE || defined HAVE_ASM_WEAKEXT_DIRECTIVE
+-# define HAVE_WEAK_SYMBOLS
+-#endif
+-
+-#ifndef __SYMBOL_PREFIX
+-# ifdef NO_UNDERSCORES
+-#  define __SYMBOL_PREFIX
+-# else
+-#  define __SYMBOL_PREFIX "_"
+-# endif
+-#endif
+-
+-#ifndef C_SYMBOL_NAME
+-# ifdef NO_UNDERSCORES
+-#  define C_SYMBOL_NAME(name) name
+-# else
+-#  define C_SYMBOL_NAME(name) _##name
+-# endif
+-#endif
+-
+-#ifndef ASM_LINE_SEP
+-# define ASM_LINE_SEP ;
+-#endif
+-
+-#ifndef C_SYMBOL_DOT_NAME
+-# define C_SYMBOL_DOT_NAME(name) .##name
+-#endif
+-
+-#ifndef __ASSEMBLER__
+-/* GCC understands weak symbols and aliases; use its interface where
+-   possible, instead of embedded assembly language.  */
+-
+-/* Define ALIASNAME as a strong alias for NAME.  */
+-# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+-# define _strong_alias(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+-
+-/* This comes between the return type and function name in
+-   a function definition to make that definition weak.  */
+-# define weak_function __attribute__ ((weak))
+-# define weak_const_function __attribute__ ((weak, __const__))
+-
+-# ifdef HAVE_WEAK_SYMBOLS
+-
+-/* Define ALIASNAME as a weak alias for NAME.
+-   If weak aliases are not available, this defines a strong alias.  */
+-#  define weak_alias(name, aliasname) _weak_alias (name, aliasname)
+-#  define _weak_alias(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
+-
+-/* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
+-#  define weak_extern(symbol) _weak_extern (symbol)
+-#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+-#   define _weak_extern(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
+-#  else
+-#   define _weak_extern(symbol)    asm (".weak " __SYMBOL_PREFIX #symbol);
+-#  endif
+-
+-# else
+-
+-#  define weak_alias(name, aliasname) strong_alias(name, aliasname)
+-#  define weak_extern(symbol) /* Nothing. */
+-
+-# endif
+-
+-#else /* __ASSEMBLER__ */
+-
+-# ifdef HAVE_ASM_SET_DIRECTIVE
+-#  define strong_alias(original, alias)		\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
+-# else
+-#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
+-#   define strong_alias(original, alias)	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
+-#  else
+-#   define strong_alias(original, alias)	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+-#  endif
+-# endif
+-
+-# ifdef HAVE_WEAK_SYMBOLS
+-#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+-#   define weak_alias(original, alias)	\
+-  .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
+-#   define weak_extern(symbol)	\
+-  .weakext C_SYMBOL_NAME (symbol)
+-
+-#  else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+-
+-#   ifdef HAVE_ASM_GLOBAL_DOT_NAME
+-#    define weak_alias(original, alias)	\
+-  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP			\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
+-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
+-#   else
+-#    define weak_alias(original, alias)	\
+-  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+-#   endif
+-
+-#   define weak_extern(symbol)	\
+-  .weak C_SYMBOL_NAME (symbol)
+-
+-#  endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+-
+-# else /* ! HAVE_WEAK_SYMBOLS */
+-
+-#  define weak_alias(original, alias) strong_alias(original, alias)
+-#  define weak_extern(symbol) /* Nothing */
+-# endif /* ! HAVE_WEAK_SYMBOLS */
+-
+-#endif /* __ASSEMBLER__ */
+-
+-/* On some platforms we can make internal function calls (i.e., calls of
+-   functions not exported) a bit faster by using a different calling
+-   convention.  */
+-#ifndef internal_function
+-# define internal_function	/* empty */
+-#endif
+-
+-/* Prepare for the case that `__builtin_expect' is not available.  */
+-#ifndef HAVE_BUILTIN_EXPECT
+-# define __builtin_expect(expr, val) (expr)
+-#endif
+-
+-/* Determine the return address.  */
+-#define RETURN_ADDRESS(nr) \
+-  __builtin_extract_return_addr (__builtin_return_address (nr))
+-
+-/* When a reference to SYMBOL is encountered, the linker will emit a
+-   warning message MSG.  */
+-#ifdef HAVE_GNU_LD
+-# ifdef HAVE_ELF
+-
+-/* We want the .gnu.warning.SYMBOL section to be unallocated.  */
+-#  ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
+-#   define __make_section_unallocated(section_string)	\
+-  asm (".section " section_string "\n\t.previous");
+-#  elif defined HAVE_ASM_POPSECTION_DIRECTIVE
+-#   define __make_section_unallocated(section_string)	\
+-  asm (".pushsection " section_string "\n\t.popsection");
+-#  else
+-#   define __make_section_unallocated(section_string)
+-#  endif
+-
+-/* Tacking on "\n\t#" to the section name makes gcc put it's bogus
+-   section attributes on what looks like a comment to the assembler.  */
+-#  ifdef HAVE_SECTION_QUOTES
+-#   define link_warning(symbol, msg) \
+-  __make_section_unallocated (".gnu.warning." #symbol) \
+-  static const char __evoke_link_warning_##symbol[]	\
+-    __attribute__ ((unused, section (".gnu.warning." #symbol "\"\n\t#\""))) \
+-    = msg;
+-#  else
+-#   define link_warning(symbol, msg) \
+-  __make_section_unallocated (".gnu.warning." #symbol) \
+-  static const char __evoke_link_warning_##symbol[]	\
+-    __attribute__ ((unused, section (".gnu.warning." #symbol "\n\t#"))) = msg;
+-#  endif
+-# else /* Not ELF: a.out */
+-#  ifdef HAVE_XCOFF
+-/* XCOFF does not support .stabs.
+-   The native aix linker will remove the .stab and .stabstr sections
+-   The gnu linker will have a fatal error if there is a relocation for
+-   symbol in the .stab section.  Silently disable this macro.  */
+-#   define link_warning(symbol, msg)
+-#  else
+-#   define link_warning(symbol, msg)		\
+-     asm (".stabs \"" msg "\",30,0,0,0\n\t"	\
+-          ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
+-#  endif /* XCOFF */
+-# endif
+-#else
+-/* We will never be heard; they will all die horribly.  */
+-# define link_warning(symbol, msg)
+-#endif
+-
+-/* A canned warning for sysdeps/stub functions.  */
+-#define	stub_warning(name) \
+-  link_warning (name, \
+-		"warning: " #name " is not implemented and will always fail")
+-
+-/*
+-\f
+-*/
+-
+-#ifdef HAVE_GNU_LD
+-
+-/* Symbol set support macros.  */
+-
+-# ifdef HAVE_ELF
+-
+-/* Make SYMBOL, which is in the text segment, an element of SET.  */
+-#  define text_set_element(set, symbol)	_elf_set_element(set, symbol)
+-/* Make SYMBOL, which is in the data segment, an element of SET.  */
+-#  define data_set_element(set, symbol)	_elf_set_element(set, symbol)
+-/* Make SYMBOL, which is in the bss segment, an element of SET.  */
+-#  define bss_set_element(set, symbol)	_elf_set_element(set, symbol)
+-
+-/* These are all done the same way in ELF.
+-   There is a new section created for each set.  */
+-#  ifdef SHARED
+-/* When building a shared library, make the set section writable,
+-   because it will need to be relocated at run time anyway.  */
+-#   define _elf_set_element(set, symbol) \
+-  static const void *__elf_set_##set##_element_##symbol##__ \
+-    __attribute__ ((unused, section (#set))) = &(symbol)
+-#  else
+-#   define _elf_set_element(set, symbol) \
+-  static const void *const __elf_set_##set##_element_##symbol##__ \
+-    __attribute__ ((unused, section (#set))) = &(symbol)
+-#  endif
+-
+-/* Define SET as a symbol set.  This may be required (it is in a.out) to
+-   be able to use the set's contents.  */
+-#  define symbol_set_define(set)	symbol_set_declare(set)
+-
+-/* Declare SET for use in this module, if defined in another module.  */
+-#  define symbol_set_declare(set) \
+-  extern void *const __start_##set __attribute__ ((__weak__));		\
+-  extern void *const __stop_##set __attribute__ ((__weak__));		\
+-  weak_extern (__start_##set) weak_extern (__stop_##set)
+-
+-/* Return a pointer (void *const *) to the first element of SET.  */
+-#  define symbol_set_first_element(set)	(&__start_##set)
+-
+-/* Return true iff PTR (a void *const *) has been incremented
+-   past the last element in SET.  */
+-#  define symbol_set_end_p(set, ptr)	((ptr) >= &__stop_##set)
+-
+-# else	/* Not ELF: a.out.  */
+-
+-#  ifdef HAVE_XCOFF
+-/* XCOFF does not support .stabs.
+-   The native aix linker will remove the .stab and .stabstr sections
+-   The gnu linker will have a fatal error if there is a relocation for
+-   symbol in the .stab section.  Silently disable these macros.  */
+-#   define text_set_element(set, symbol)
+-#   define data_set_element(set, symbol)
+-#   define bss_set_element(set, symbol)
+-#  else
+-#   define text_set_element(set, symbol)	\
+-    asm (".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
+-#   define data_set_element(set, symbol)	\
+-    asm (".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
+-#   define bss_set_element(set, symbol)	?error Must use initialized data.
+-#  endif /* XCOFF */
+-#  define symbol_set_define(set)	void *const (set)[1];
+-#  define symbol_set_declare(set)	extern void *const (set)[1];
+-
+-#  define symbol_set_first_element(set)	&(set)[1]
+-#  define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
+-
+-# endif	/* ELF.  */
+-#else
+-/* We cannot do anything in generial.  */
+-# define text_set_element(set, symbol) asm ("")
+-# define data_set_element(set, symbol) asm ("")
+-# define bss_set_element(set, symbol) asm ("")
+-# define symbol_set_define(set)		void *const (set)[1];
+-# define symbol_set_declare(set)	extern void *const (set)[1];
+-
+-# define symbol_set_first_element(set)	&(set)[1]
+-# define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
+-#endif	/* Have GNU ld.  */
+-
+-#if DO_VERSIONING
+-# define symbol_version(real, name, version) \
+-     _symbol_version(real, name, version)
+-# define default_symbol_version(real, name, version) \
+-     _default_symbol_version(real, name, version)
+-# ifdef __ASSEMBLER__
+-#  define _symbol_version(real, name, version) \
+-     .symver real, name##@##version
+-#  define _default_symbol_version(real, name, version) \
+-     .symver real, name##@##@##version
+-# else
+-#  define _symbol_version(real, name, version) \
+-     __asm__ (".symver " #real "," #name "@" #version)
+-#  define _default_symbol_version(real, name, version) \
+-     __asm__ (".symver " #real "," #name "@@" #version)
+-# endif
+-#else
+-# define symbol_version(real, name, version)
+-# define default_symbol_version(real, name, version) \
+-  strong_alias(real, name)
+-#endif
+-
+-#if defined HAVE_VISIBILITY_ATTRIBUTE && defined SHARED
+-# define attribute_hidden __attribute__ ((visibility ("hidden")))
+-#else
+-# define attribute_hidden
+-#endif
+-
+-/* Handling on non-exported internal names.  We have to do this only
+-   for shared code.  */
+-#ifdef SHARED
+-# define INTUSE(name) name##_internal
+-# define INTDEF(name) strong_alias (name, name##_internal)
+-# define INTVARDEF(name) \
+-  _INTVARDEF (name, name##_internal)
+-# if defined HAVE_VISIBILITY_ATTRIBUTE
+-#  define _INTVARDEF(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((alias (#name), \
+-						   visibility ("hidden")));
+-# else
+-#  define _INTVARDEF(name, aliasname) \
+-  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+-# endif
+-# define INTDEF2(name, newname) strong_alias (name, newname##_internal)
+-# define INTVARDEF2(name, newname) _INTVARDEF (name, newname##_internal)
+-#else
+-# define INTUSE(name) name
+-# define INTDEF(name)
+-# define INTVARDEF(name)
+-# define INTDEF2(name, newname)
+-# define INTVARDEF2(name, newname)
+-#endif
+-
+-#endif /* libc-symbols.h */
+diff --git a/include/set-hooks.h b/include/set-hooks.h
+deleted file mode 100644
+index 9ed71b3..0000000
+--- a/include/set-hooks.h
++++ /dev/null
+@@ -1,72 +0,0 @@
+-/* Macros for using symbol sets for running lists of functions.
+-   Copyright (C) 1994, 1995, 1997, 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 Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#ifndef _SET_HOOKS_H
+-#define _SET_HOOKS_H 1
+-
+-#define __need_size_t
+-#include <stddef.h>
+-// #include <sys/cdefs.h>
+-#define __unbounded
+-
+-#ifdef symbol_set_define
+-/* Define a hook variable called NAME.  Functions put on this hook take
+-   arguments described by PROTO.  Use `text_set_element (NAME, FUNCTION)'
+-   from gnu-stabs.h to add a function to the hook.  */
+-
+-# define DEFINE_HOOK(NAME, PROTO)		\
+-  typedef void __##NAME##_hook_function_t PROTO; \
+-  symbol_set_define (NAME)
+-
+-# define DECLARE_HOOK(NAME, PROTO)		\
+-  typedef void __##NAME##_hook_function_t PROTO;\
+-  symbol_set_declare (NAME)
+-
+-/* Run all the functions hooked on the set called NAME.
+-   Each function is called like this: `function ARGS'.  */
+-
+-# define RUN_HOOK(NAME, ARGS)				\
+-do {							\
+-  void *const *__unbounded ptr;				\
+-  for (ptr = symbol_set_first_element (NAME);		\
+-       ! symbol_set_end_p (NAME, ptr); ++ptr)		\
+-    (*(__##NAME##_hook_function_t *) *ptr) ARGS;	\
+-} while (0)
+-
+-/* Define a hook variable with NAME and PROTO, and a function called RUNNER
+-   which calls each function on the hook in turn, with ARGS.  */
+-
+-# define DEFINE_HOOK_RUNNER(name, runner, proto, args) \
+-DEFINE_HOOK (name, proto); \
+-extern void runner proto; void runner proto { RUN_HOOK (name, args); }
+-
+-#else
+-
+-/* The system does not provide necessary support for this.  */
+-# define DEFINE_HOOK(NAME, PROTO)
+-
+-# define DECLARE_HOOK(NAME, PROTO)
+-
+-# define RUN_HOOK(NAME, ARGS)
+-
+-# define DEFINE_HOOK_RUNNER(name, runner, proto, args)
+-
+-#endif
+-
+-#endif /* set-hooks.h */
+diff --git a/signal/README b/signal/README
+deleted file mode 100644
+index 4963b26..0000000
+--- a/signal/README
++++ /dev/null
+@@ -1,12 +0,0 @@
+-This directory provides a signal implementation, which is appropriate
+-for operating systems where signals are managed at user-level.  It is
+-up to the run-time to catch the signals and forward them to the
+-implementation via, e.g., the pthread_kill_info_np call.
+-
+-The files in this directory are accompanied by the generic implementations
+-found in sysdeps/generic/: killpg.c, raise.c, sigaddset.c, sigdelset.c,
+-sigemptyset.c, sigfillset.c, siginterrupt.c, sigismember.c, signal.c,
+-sigwait.c.
+-
+-This implementation was once used for a native port running on L4, but is not
+-currently used in any libpthread port bundled in this release.
+diff --git a/signal/TODO b/signal/TODO
+deleted file mode 100644
+index 1148abb..0000000
+--- a/signal/TODO
++++ /dev/null
+@@ -1,29 +0,0 @@
+-Unimplemented Functionality
+----------------------------
+-
+-We don't support interruptible functions.  That is, if a signal is
+-delivered when a thread is in e.g. the write system call, then the
+-write function should be interrupted and return EINTR when the signal
+-handler is finished.  To realize this behavior, we could have a thread
+-local interruptible flag and a setjmp buffer.  A function that is
+-interruptible would fill the jump buffer and set the interruptible
+-flag.  If a signal comes in and the interruptible flag is set, rather
+-than resuming the thread, we longjmp to the buffer.
+-
+-If a signal action has set the SA_SIGINFO, the third argument must be
+-a pointer to a ucontext describing the thread's interrupted state;
+-this implementation passes NULL.  This isn't as bad as it sounds as
+-the the ucontext family of functions are marked obsolete in SUSv3 with
+-the advisory that any use of them should be replaced by the use of
+-pthread functionality (cf. makecontext rationale).
+-
+-stop and continue signals are not implemented (as we need to stop all
+-threads, this requires being in bed with libpthread).
+-
+-Implementation is not yet cancellation-safe.
+-
+-There are not even stubs for sighold, sigingore, sigpause, sigrelse,
+-however, according to posix: "Use of any of these functions is
+-unspecified in a multi-threaded process."
+-
+-Implement sigtimedwait, sigqueue.
+\ No newline at end of file
+diff --git a/signal/kill.c b/signal/kill.c
+deleted file mode 100644
+index 27c9c32..0000000
+--- a/signal/kill.c
++++ /dev/null
+@@ -1,70 +0,0 @@
+-/* kill.c - Generic kill implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-int
+-kill (pid_t pid, int signo)
+-{
+-  if (pid != getpid ())
+-    {
+-      errno = EOPNOTSUPP;
+-      return -1;
+-    }
+-
+-  /* "Signals generated for the process shall be delivered to exactly
+-     one of those threads within the process which is in a call to a
+-     sigwait() function selecting that signal or has not blocked
+-     delivery of the signal.  If there are no threads in a call to a
+-     sigwait() function selecting that signal, and if all threads
+-     within the process block delivery of the signal, the signal shall
+-     remaing pending on the process" (2.4.1).  */
+-
+-  /* First, see if there is a waiter, which is interested in this
+-     signal.  */
+-  pthread_mutex_lock (&sig_lock);
+-
+-  struct sigwaiter *waiter;
+-  for (waiter = sigwaiters; waiter; waiter = waiter->next)
+-    if ((waiter->signals & sigmask (signo)))
+-      /* Got a winner.  */
+-      {
+-	sigdelset (&process_pending, signo);
+-
+-	pthread_mutex_lock (&waiter->ss->lock);
+-	sigdelset (&waiter->ss->pending, signo);
+-
+-	memset (&waiter->info, 0, sizeof (waiter->info));
+-	waiter->info.si_signo = signo;
+-
+-	sigwaiter_unblock (waiter);
+-
+-	return 0;
+-      }
+-
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  /* XXX: We just generate the signal for the current thread.  If the
+-     current thread has blocked the signal, the correct thing to do is
+-     to iterate over all the other threads and find on that hasn't
+-     blocked it.  */
+-  return pthread_kill (pthread_self (), signo);
+-}
+-
+diff --git a/signal/pt-kill-siginfo-np.c b/signal/pt-kill-siginfo-np.c
+deleted file mode 100644
+index 9bdf6cc..0000000
+--- a/signal/pt-kill-siginfo-np.c
++++ /dev/null
+@@ -1,88 +0,0 @@
+-/* pthread-kill-siginfo-np.c - Generic pthread_kill_siginfo_np implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "pt-internal.h"
+-#include "sig-internal.h"
+-
+-int
+-pthread_kill_siginfo_np (pthread_t tid, siginfo_t si)
+-{
+-  int sig = si.si_signo;
+-
+-  if (sig < 0 || sig >= NSIG)
+-    return EINVAL;
+-
+-  if (sig == 0)
+-    return 0;
+-
+-  struct signal_state *ss = &__pthread_getid (tid)->ss;
+-
+-  pthread_mutex_lock (&sig_lock);
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if (ss->sigwaiter && (ss->sigwaiter->signals & sigmask (si.si_signo)))
+-    /* The thread is in a call to sigwait.  */
+-    {
+-      ss->sigwaiter->info = si;
+-      sigwaiter_unblock (ss->sigwaiter);
+-      return 0;
+-    }
+-
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  if (ss->actions[sig - 1].sa_handler == (void *) SIG_IGN
+-      || (ss->actions[sig - 1].sa_handler == (void *) SIG_DFL
+-	  && default_action (sig) == sig_ignore))
+-    /* It is unclear (to me) what is supposed to happen when a signal
+-       is generated for a thread, which is blocking that signal and
+-       ignoring it.  POSIX does say that when the action associated
+-       with a pending, blocked signal is set to SIG_IGN, the pending
+-       signal is to be cleared.  Thus, it makes sense that any signal
+-       set to ignore is discarded at generation.  */
+-    {
+-      pthread_mutex_unlock (&ss->lock);
+-      return 0;
+-    }
+-
+-
+-  if ((sigmask (sig) & ss->blocked))
+-    /* The signal is blocked.  Mark it pending.  */
+-    {
+-      ss->pending |= sigmask (sig);
+-      pthread_mutex_unlock (&ss->lock);
+-      return 0;
+-    }
+-
+-  if (pthread_self () == tid
+-      && (! (ss->actions[si.si_signo - 1].sa_flags & SA_ONSTACK)
+-	  || (ss->stack.ss_flags & SS_DISABLE)
+-	  || (ss->stack.ss_flags & SS_ONSTACK)))
+-    /* We are sending a signal to ourself and we don't use an
+-       alternate stack.  */
+-    signal_dispatch (ss, &si);
+-  else
+-    signal_dispatch_lowlevel (ss, tid, si);
+-
+-  /* Don't unlock ss: signal_dispatch and signal_dispatch_lowlevel
+-     assume ownership of the lock.  */
+-
+-  return 0;
+-}
+-
+diff --git a/signal/sig-internal.c b/signal/sig-internal.c
+deleted file mode 100644
+index f73f38b..0000000
+--- a/signal/sig-internal.c
++++ /dev/null
+@@ -1,26 +0,0 @@
+-/* sig-internal.c - Signal state functions.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-pthread_mutex_t sig_lock = PTHREAD_MUTEX_INITIALIZER;
+-
+-sigset_t process_pending;
+-siginfo_t process_pending_info[NSIG];
+diff --git a/signal/sig-internal.h b/signal/sig-internal.h
+deleted file mode 100644
+index 6c86c79..0000000
+--- a/signal/sig-internal.h
++++ /dev/null
+@@ -1,177 +0,0 @@
+-/* sig-internal.h - Internal signal handling interface.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef SIG_INTERNAL_H
+-#define SIG_INTERNAL_H
+-
+-#include <signal.h>
+-
+-#include <sig-sysdep.h>
+-
+-#define sigmask(sig) (1ULL << (sig - 1))
+-#define STOPSIGS (sigmask (SIGTTIN) | sigmask (SIGTTOU) | \
+-		  sigmask (SIGSTOP) | sigmask (SIGTSTP))
+-
+-/* General lock.  Protects PROCESS_PENDING, PROCESS_PENDING_INFO,
+-   SIGWAITERS.  */
+-extern pthread_mutex_t sig_lock;
+-
+-/* "Signals generated for the process shall be delivered to exactly
+-   one of those threads within the process which is in a call to a
+-   sigwait() function selecting that signal or has not blocked
+-   delivery of the signal.  If there are no threads in a call to a
+-   sigwait() function selecting that signal, and if all threads within
+-   the process block delivery of the signal, the signal shall remaing
+-   pending on the process"  (2.4.1).
+-
+-   This variable is protected by SIG_LOCK.  */
+-extern sigset_t process_pending;
+-extern siginfo_t process_pending_info[NSIG];
+-\f
+-struct sigwaiter;
+-
+-/* The per-thread signal state.  */
+-struct signal_state
+-{
+-  /* Protects the following fields.  STACK.SA_FLAGS may be accessed
+-     using atomic operations.  */
+-  pthread_mutex_t lock;
+-
+-  /* Pending signals.  */
+-  sigset_t pending;
+-
+-  /* Blocked signals (i.e., the signal mask).  */
+-  sigset_t blocked;
+-
+-  stack_t stack;
+-  struct sigaction actions[NSIG];
+-  siginfo_t info[NSIG];
+-
+-  /* If the thread is blocked in a call to sigwait.  */
+-  struct sigwaiter *sigwaiter;
+-};
+-
+-#define PTHREAD_SIGNAL_MEMBERS struct signal_state ss;
+-
+-/* Arranges for thread TID to call signal_dispatch.  Must not be
+-   called if TID is the caller and an alternate stack is not required.
+-   In this case, the caller should call signal_dispatch directly.  */
+-extern void signal_dispatch_lowlevel (struct signal_state *ss,
+-				      pthread_t tid, siginfo_t si);
+-
+-/* This is the signal handler entry point.  A thread is forced into
+-   this state when it receives a signal.  We need to save the thread's
+-   state and then invoke the high-level signal dispatcher.  SS->LOCK
+-   is locked by the caller.  */
+-extern void signal_dispatch (struct signal_state *ss, siginfo_t *si);
+-
+-#ifndef SIGNAL_DISPATCH_ENTRY
+-#define SIGNAL_DISPATCH_ENTRY
+-#endif
+-
+-#ifndef SIGNAL_DISPATCH_EXIT
+-#define SIGNAL_DISPATCH_EXIT
+-#endif
+-\f
+-/* When a thread calls sigwait and a requested signal is not pending,
+-   it allocates the following structure, fills it in, adds it to
+-   sigwaiters and sleeps.  */
+-struct sigwaiter
+-{
+-  struct sigwaiter *next;
+-  struct sigwaiter *prev;
+-
+-  /* Thread's signal state.  */
+-  struct signal_state *ss;
+-
+-  /* Signals this thread is waiting for.  */
+-  sigset_t signals;
+-
+-  /* The selected signal is returned here.  The waiter also
+-     futex_waits on this info.si_signo.  */
+-  siginfo_t info;
+-};
+-
+-/* This variable is protected by SIG_LOCK.  */
+-extern struct sigwaiter *sigwaiters;
+-
+-/* Block the caller waiting for a signal in set SET.  SIG_LOCK and
+-   SS->LOCK must be held and will be unlocked by this function before
+-   blocking.  */
+-extern siginfo_t sigwaiter_block (struct signal_state *ss,
+-				  const sigset_t *restrict set);
+-
+-/* Unblock the waiter WAITER.  SIG_LOCK and WAITER->SS->LOCK must be
+-   held.  Both will be dropped on return.  */
+-extern void sigwaiter_unblock (struct sigwaiter *waiter);
+-\f
+-enum sig_action { sig_core, sig_terminate, sig_ignore, sig_cont, sig_stop };
+-
+-static inline enum sig_action
+-default_action (int signo)
+-{
+-  switch (signo)
+-    {
+-    case SIGABRT:
+-    case SIGBUS:
+-    case SIGFPE:
+-    case SIGILL:
+-    case SIGQUIT:
+-    case SIGSEGV:
+-    case SIGSTKFLT:
+-    case SIGSYS:
+-    case SIGTRAP:
+-    case SIGXCPU:
+-    case SIGXFSZ:
+-      return sig_core;
+-
+-    case SIGALRM:
+-    case SIGHUP:
+-    case SIGINT:
+-    case SIGIO: /* Perhaps ignore?  */
+-    case SIGKILL:
+-    case SIGPIPE:
+-    case SIGPROF:
+-    case SIGTERM:
+-    case SIGUSR1:
+-    case SIGUSR2:
+-    case SIGVTALRM:
+-      return sig_terminate;
+-
+-    case SIGCHLD:
+-    case SIGPWR:
+-    case SIGURG:
+-    case SIGWINCH:
+-      return sig_ignore;
+-
+-    case SIGCONT:
+-      return sig_cont;
+-
+-    case SIGSTOP:
+-    case SIGTSTP:
+-    case SIGTTIN:
+-    case SIGTTOU:
+-      return sig_stop;
+-    }
+-
+-  panic ("Unknown signal number: %d", signo);
+-}
+-
+-#endif
+diff --git a/signal/sigaction.c b/signal/sigaction.c
+deleted file mode 100644
+index 0126c99..0000000
+--- a/signal/sigaction.c
++++ /dev/null
+@@ -1,72 +0,0 @@
+-/* sigaction.c - Generic sigaction implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-#include "pt-internal.h"
+-
+-int
+-sigaction (int sig, const struct sigaction *restrict sa,
+-	   struct sigaction *restrict osa)
+-{
+-  if (sig <= 0 || sig >= NSIG)
+-    {
+-      errno = EINVAL;
+-      return -1;
+-    }
+-
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if (osa)
+-    *osa = ss->actions[sig - 1];
+-
+-  if (sa)
+-    {
+-      ss->actions[sig - 1] = *sa;
+-
+-      /* "The SIGKILL and SIGSTOP signals shall not be added to the
+-	 signal mask using this mechanism; this restriction shall be
+-	 enforced by the system without causing an error to be
+-	 indicated" (sigaction).  */
+-      sigdelset (&ss->blocked, SIGKILL);
+-      sigdelset (&ss->blocked, SIGSTOP);
+-
+-      /* A "signal shall remain pending on the process until it is
+-	 unblocked, it is accepted when ..., or the action associated
+-	 with it is set to ignore the signal"  (2.4.1).
+-
+-         "Setting a signal action to SIG_DFL for a signal that is
+-         pending, and whose default action is to ignore the signal,
+-         ..., shall cause the pending signal to be discarded, whether
+-         or not it is blocked" (2.4.3).  */
+-      if (sa->sa_handler == SIG_IGN
+-	  || (sa->sa_handler == SIG_DFL && default_action (sig) == sig_ignore))
+-	{
+-	  sigdelset (&ss->pending, sig);
+-	  sigdelset (&process_pending, sig);
+-	}
+-    }
+-
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  return 0;
+-}
+-
+diff --git a/signal/sigaltstack.c b/signal/sigaltstack.c
+deleted file mode 100644
+index 8334811..0000000
+--- a/signal/sigaltstack.c
++++ /dev/null
+@@ -1,69 +0,0 @@
+-/* sigaltstack.c - Generic sigaltstack implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-#include "pt-internal.h"
+-
+-int
+-sigaltstack (const stack_t *restrict stack, stack_t *restrict old)
+-{
+-  int err = 0;
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if (old)
+-    *old = ss->stack;
+-
+-  if (stack)
+-    {
+-      if (stack->ss_size < MINSIGSTKSZ)
+-	{
+-	  err = ENOMEM;
+-	  goto out;
+-	}
+-
+-      if ((stack->ss_flags & ~(SS_DISABLE)))
+-	/* Flags contains a value other than SS_DISABLE.  */
+-	{
+-	  err = EINVAL;
+-	  goto out;
+-	}
+-
+-      if ((ss->stack.ss_flags & SS_ONSTACK))
+-	/* Stack in use.  */
+-	{
+-	  err = EPERM;
+-	  goto out;
+-	}
+-
+-      ss->stack = *stack;
+-    }
+-
+- out:
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  if (err)
+-    {
+-      errno = err;
+-      return -1;
+-    }
+-  return 0;
+-}
+diff --git a/signal/signal-dispatch.c b/signal/signal-dispatch.c
+deleted file mode 100644
+index 40440b7..0000000
+--- a/signal/signal-dispatch.c
++++ /dev/null
+@@ -1,117 +0,0 @@
+-/* signal-dispatch.c - Signal dispatcher.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-/* This is the signal handler entry point.  A thread is forced into
+-   this state when it receives a signal.  We need to save the thread's
+-   state and then invoke the high-level signal dispatcher.  SS->LOCK
+-   is locked by the caller.  */
+-void
+-signal_dispatch (struct signal_state *ss, siginfo_t *si)
+-{
+-  SIGNAL_DISPATCH_ENTRY;
+-
+-  int signo = si->si_signo;
+-
+-  assert (signo > 0 && signo < NSIG);
+-  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
+-
+-  do
+-    {
+-      if ((sigmask (signo) & STOPSIGS))
+-	/* Stop signals clear a pending SIGCONT even if they
+-	   are handled or ignored (but not if preempted).  */
+-	{
+-	  sigdelset (&ss->pending, SIGCONT);
+-	  sigdelset (&process_pending, SIGCONT);
+-	}
+-      else if ((signo == SIGCONT))
+-	/* Even if handled or ignored (but not preempted), SIGCONT
+-	   clears stop signals and resumes the process.  */
+-	{
+-	  ss->pending &= ~STOPSIGS;
+-	  process_pending &= ~STOPSIGS;
+-	}
+-
+-      void (*handler)(int, siginfo_t *, void *)
+-	= ss->actions[signo - 1].sa_sigaction;
+-
+-      /* Reset to SIG_DFL if requested.  SIGILL and SIGTRAP cannot
+-	 be automatically reset when delivered; the system silently
+-	 enforces this restriction (sigaction).  */
+-      if (ss->actions[signo - 1].sa_flags & SA_RESETHAND
+-	  && signo != SIGILL && signo != SIGTRAP)
+-	ss->actions[signo - 1].sa_handler = SIG_DFL;
+-
+-      sigset_t orig_blocked = ss->blocked;
+-      /* Block requested signals while running the handler.  */
+-      ss->blocked |= ss->actions[signo - 1].sa_mask;
+-
+-      /* Block SIGNO unless we're asked not to.  */
+-      if (! (ss->actions[signo - 1].sa_flags & (SA_RESETHAND | SA_NODEFER)))
+-	sigaddset (&ss->blocked, signo);
+-
+-      sigdelset (&ss->pending, signo);
+-      pthread_mutex_unlock (&ss->lock);
+-
+-      pthread_mutex_lock (&sig_lock);
+-      sigdelset (&process_pending, signo);
+-      pthread_mutex_unlock (&sig_lock);
+-
+-      if (handler == (void *) SIG_DFL)
+-	{
+-	  enum sig_action action = default_action (signo);
+-
+-	  if (action == sig_terminate || action == sig_core)
+-	    _exit (128 + signo);
+-
+-	  if (action == sig_stop)
+-	    /* XXX: Implement me.  */
+-	    panic ("Stopping process unimplemented.");
+-
+-	  if (action == sig_cont)
+-	    /* XXX: Implement me.  */;
+-	    panic ("Continuing process unimplemented.");
+-	}
+-      else if (handler == (void *) SIG_IGN)
+-	;
+-      else
+-	handler (signo, si, NULL);
+-
+-      pthread_mutex_lock (&ss->lock);
+-
+-      /* "When a thread's signal mask is changed in a signal-catching
+-	 function that is installed by sigaction(), the restoration of
+-	 the signal mask on return from the signal-catching function
+-	 overrides that change (see sigaction())" (sigprocmask).  */
+-      ss->blocked = orig_blocked;
+-
+-      sigset_t pending = ~ss->blocked & ss->pending;
+-      if (! pending)
+-	pending = ~ss->blocked & process_pending;
+-      signo = l4_lsb64 (pending);
+-    }
+-  while (signo);
+-
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  SIGNAL_DISPATCH_EXIT;
+-}
+diff --git a/signal/signal.h b/signal/signal.h
+deleted file mode 100644
+index 6e22d05..0000000
+--- a/signal/signal.h
++++ /dev/null
+@@ -1,275 +0,0 @@
+-/* signal.h - Signal handling interface.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _SIGNAL_H
+-#define _SIGNAL_H 1
+-
+-#include <stdint.h>
+-#include <sys/types.h>
+-
+-typedef volatile int sig_atomic_t;
+-\f
+-/*typedef uint64_t sigset_t;*/
+-
+-int sigaddset (sigset_t *, int);
+-int sigdelset (sigset_t *, int);
+-int sigemptyset (sigset_t *);
+-int sigfillset (sigset_t *);
+-int sigismember (const sigset_t *, int);
+-\f
+-/* These values are consistent with Linux.  */
+-#define SIGRTMIN 34
+-#define SIGRTMAX 64
+-
+-enum
+-  {
+-    SIGHUP = 1,
+-#define SIGHUP SIGHUP
+-    SIGINT,
+-#define SIGINT SIGINT
+-    SIGQUIT,
+-#define SIGQUIT SIGQUIT
+-    SIGILL,
+-#define SIGILL SIGILL
+-    SIGTRAP,
+-#define SIGTRAP SIGTRAP
+-    SIGABRT,
+-#define SIGABRT SIGABRT
+-    SIGBUS,
+-#define SIGBUS SIGBUS
+-    SIGFPE,
+-#define SIGFPE SIGFPE
+-    SIGKILL,
+-#define SIGKILL SIGKILL
+-    SIGUSR1,
+-#define SIGUSR1 SIGUSR1
+-    SIGSEGV,
+-#define SIGSEGV SIGSEGV
+-    SIGUSR2,
+-#define SIGUSR2 SIGUSR2
+-    SIGPIPE,
+-#define SIGPIPE SIGPIPE
+-    SIGALRM,
+-#define SIGALRM SIGALRM
+-    SIGTERM,
+-#define SIGTERM SIGTERM
+-    SIGSTKFLT,
+-#define SIGSTKFLT SIGSTKFLT
+-    SIGCHLD,
+-#define SIGCHLD SIGCHLD
+-    SIGCONT,
+-#define SIGCONT SIGCONT
+-    SIGSTOP,
+-#define SIGSTOP SIGSTOP
+-    SIGTSTP,
+-#define SIGTSTP SIGTSTP
+-    SIGTTIN,
+-#define SIGTTIN SIGTTIN
+-    SIGTTOU,
+-#define SIGTTOU SIGTTOU
+-    SIGURG,
+-#define SIGURG SIGURG
+-    SIGXCPU,
+-#define SIGXCPU SIGXCPU
+-    SIGXFSZ,
+-#define SIGXFSZ SIGXFSZ
+-    SIGVTALRM,
+-#define SIGVTALRM SIGVTALRM
+-    SIGPROF,
+-#define SIGPROF SIGPROF
+-    SIGWINCH,
+-#define SIGWINCH SIGWINCH
+-    SIGIO,
+-#define SIGIO SIGIO
+-    SIGPWR,
+-#define SIGPWR SIGPWR
+-    SIGSYS,
+-#define SIGSYS SIGSYS
+-    NSIG
+-  };
+-\f
+-/* The resulting set is the union of the current set and the signal
+-   set pointed to by the argument set.  */
+-#define SIG_BLOCK 1
+-/* The resulting set is the intersection of the current set and the
+-   complement of the signal set pointed to by the argument set.  */
+-#define SIG_UNBLOCK 2
+-/* The resulting set is the signal set pointed to by the argument
+-   set.  */
+-#define SIG_SETMASK 3
+-
+-int pthread_sigmask (int how, const sigset_t *mask, sigset_t *old);
+-int sigprocmask (int how, const sigset_t *restrict mask,
+-		 sigset_t *restrict old);
+-
+-/* Return set of pending signals.  */
+-int sigpending(sigset_t *set);
+-\f
+-union sigval
+-{
+-  int sival_int;
+-  void *sival_ptr;
+-};
+-\f
+-#define SIG_DFL ((void (*)(int)) (0))
+-#define SIG_ERR ((void (*)(int)) (-1))
+-#define SIG_IGN ((void (*)(int)) (1))
+-
+-/* Causes signal delivery to occur on an alternate stack.  */
+-#define SA_ONSTACK (1 << 0)
+-/* Do not generate SIGCHLD when children stop or stopped children
+-   continue.  */
+-#define SA_NOCLDSTOP (1 << 1)
+-/* Causes signal dispositions to be set to SIG_DFL on entry to signal
+-   handlers.  */
+-#define SA_RESETHAND (1 << 2)
+-/* Causes certain functions to become restartable.  */
+-#define SA_RESTART (1 << 3)
+-/* Causes extra information to be passed to signal handlers at the
+-   time of receipt of a signal.  */
+-#define SA_SIGINFO (1 << 4)
+-/* Causes implementations not to create zombie processes on child
+-   death.  */
+-#define SA_NOCLDWAIT (1 << 5)
+-/* Causes signal not to be automatically blocked on entry to
+-   signal handler.  */
+-#define SA_NODEFER (1 << 6)
+-
+-typedef struct
+-{
+-  int si_signo;
+-  int si_code;
+-  int si_errno;
+-  pid_t si_pid;
+-  uid_t si_uid;
+-  void *si_addr;
+-  int si_status;
+-  long si_band;
+-  union sigval si_value;
+-} siginfo_t;
+-
+-struct sigaction
+-{
+-  union
+-  {
+-    /* Pointer to a signal-catching function or one of the macros
+-       SIG_IGN or SIG_DFL.  */
+-    void (*sa_handler)(int);
+-                   
+-    /* Pointer to a signal-catching function.  */
+-    void (*sa_sigaction)(int, siginfo_t *, void *);
+-  };
+-
+-  /* Set of signals to be blocked during execution of the signal
+-     handling function.  */
+-  sigset_t sa_mask;
+-
+-  /* Special flags.  */
+-  int sa_flags;
+-};
+-
+-int sigaction (int signo, const struct sigaction *restrict newaction,
+-	       struct sigaction *restrict oldaction);
+-
+-void (*signal (int signo, void (*handler)(int)))(int);
+-void (*bsd_signal (int signo, void (*handler)(int)))(int);
+-\f
+-/* Process is executing on an alternate signal stack.  */
+-#define SS_ONSTACK (1 << 0)
+-/* Alternate signal stack is disabled.  */
+-#define SS_DISABLE (1 << 1)
+-
+-/* Minimum stack size for a signal handler.  */
+-#define MINSIGSTKSZ PAGESIZE
+-/* Default size in bytes for the alternate signal stack. */
+-#define SIGSTKSZ (16 * PAGESIZE)
+-
+-typedef struct
+-{
+-  void *ss_sp;
+-  size_t ss_size;
+-  int ss_flags;
+-} stack_t;
+-
+-int sigaltstack(const stack_t *restrict stack, stack_t *restrict old);
+-\f
+-#include <pthread.h>
+-
+-/* Send SIGNO to the process PID.  */
+-int kill(pid_t pid, int signo);
+-
+-/* Send SIGNO to the process group PG.  */
+-int killpg(pid_t pg, int signo);
+-
+-/* Send SIGNO to thread TID.  */
+-int pthread_kill(pthread_t tid, int signo);
+-
+-/* Send a signal to thread TID using SIGINFO.  */
+-int pthread_kill_siginfo_np (pthread_t tid, siginfo_t siginfo);
+-
+-/* Send SIGNO to the calling thread.  */
+-int raise(int signo);
+-\f
+-typedef struct sigevent
+-{
+-  /* Notification type.  */
+-  int sigev_notify;
+-
+-  /* Signal number.  */
+-  int sigev_signo;
+-
+-  /* Signal value.  */
+-  union sigval sigev_value;
+-
+-  /* Notification function.  */
+-  void (*sigev_notify_function) (union sigval);
+-
+-  /* Notification attributes.  */
+-  pthread_attr_t *sigev_notify_attributes;
+-} sigevent_t;
+-
+-enum
+-  {
+-    SIGEV_NONE = 0,
+-#define SIGEV_NONE SIGEV_NONE
+-    SIGEV_SIGNAL,
+-#define SIGEV_SIGNAL SIGEV_SIGNAL
+-    SIGEV_THREAD
+-#define SIGEV_THREAD SIGEV_THREAD
+-  };
+-\f
+-#define SIG_HOLD
+-
+-int sighold (int);
+-int sigignore (int);
+-int siginterrupt (int, int);
+-int sigpause (int);
+-int sigqueue (pid_t, int, const union sigval);
+-int sigrelse (int);
+-void (*sigset (int, void (*)(int)))(int);
+-int sigsuspend (const sigset_t *);
+-\f
+-/* Wait for a signal.  */
+-int sigwait (const sigset_t *restrict set, int *restrict signo);
+-int sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info);
+-int sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
+-		  const struct timespec *restrict timespec);
+-
+-#endif
+diff --git a/signal/sigpending.c b/signal/sigpending.c
+deleted file mode 100644
+index 609b55d..0000000
+--- a/signal/sigpending.c
++++ /dev/null
+@@ -1,38 +0,0 @@
+-/* sigpending.c - Generic sigpending implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sig-internal.h>
+-#include <pt-internal.h>
+-
+-int
+-sigpending (sigset_t *set)
+-{
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  /* There is no need to lock SIG_LOCK for process_pending since we
+-     just read it, which is atomic.  */
+-  *set = (ss->pending | process_pending) & ss->blocked;
+-
+-  pthread_mutex_unlock (&ss->lock);
+-
+-  return 0;
+-}
+diff --git a/signal/sigsuspend.c b/signal/sigsuspend.c
+deleted file mode 100644
+index 73cf12a..0000000
+--- a/signal/sigsuspend.c
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/* sigsuspend.c - Generic sigsuspend implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-int
+-sigsuspend (const sigset_t *set)
+-{
+-  /* XXX: Implement me.  */
+-  errno = EOPNOTSUPP;
+-  return -1;
+-}
+diff --git a/signal/sigtimedwait.c b/signal/sigtimedwait.c
+deleted file mode 100644
+index 52cd017..0000000
+--- a/signal/sigtimedwait.c
++++ /dev/null
+@@ -1,30 +0,0 @@
+-/* sigtimedwait.c - Generic sigtimedwait implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-int
+-sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
+-	      const struct timespec *restrict timeout)
+-{
+-  errno = EOPNOTSUPP;
+-  return -1;
+-}
+-
+diff --git a/signal/sigwaiter.c b/signal/sigwaiter.c
+deleted file mode 100644
+index 8d041ac..0000000
+--- a/signal/sigwaiter.c
++++ /dev/null
+@@ -1,91 +0,0 @@
+-/* sigwaiter.c - Signal handling functions.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include "sig-internal.h"
+-
+-#include <hurd/futex.h>
+-
+-struct sigwaiter *sigwaiters;
+-
+-siginfo_t
+-sigwaiter_block (struct signal_state *ss, const sigset_t *restrict set)
+-{
+-  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
+-  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
+-
+-  assert (! ss->sigwaiter);
+-
+-  struct sigwaiter waiter;
+-
+-  waiter.next = sigwaiters;
+-  if (waiter.next)
+-    {
+-      assert (! waiter.next->prev);
+-      waiter.next->prev = &waiter;
+-    }
+-  waiter.prev = 0;
+-  sigwaiters = &waiter;
+-
+-  waiter.ss = ss;
+-  waiter.info.si_signo = 0;
+-  waiter.signals = *set;
+-
+-  ss->sigwaiter = &waiter;
+-
+-  pthread_mutex_unlock (&ss->lock);
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  futex_wait (&waiter.info.si_signo, 0);
+-
+-#ifndef NDEBUG
+-  pthread_mutex_lock (&ss->lock);
+-  ss->sigwaiter = 0;
+-  pthread_mutex_unlock (&ss->lock);
+-#endif
+-
+-  assert (waiter.info.si_signo);
+-  return waiter.info;
+-}
+-
+-void
+-sigwaiter_unblock (struct sigwaiter *waiter)
+-{
+-  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
+-  assert (pthread_mutex_trylock (&waiter->ss->lock) == EBUSY);
+-
+-  struct sigwaiter *prev = waiter->prev;
+-  struct sigwaiter *next = waiter->next;
+-
+-  if (next)
+-    next->prev = prev;
+-
+-  if (prev)
+-    prev->next = next;
+-  else
+-    sigwaiters = next;
+-
+-  sigdelset (&process_pending, waiter->info.si_signo);
+-  sigdelset (&waiter->ss->pending, waiter->info.si_signo);
+-
+-  pthread_mutex_unlock (&waiter->ss->lock);
+-  pthread_mutex_unlock (&sig_lock);
+-
+-  futex_wake (&waiter->info.si_signo, 1);
+-}
+diff --git a/signal/sigwaitinfo.c b/signal/sigwaitinfo.c
+deleted file mode 100644
+index 1b47079..0000000
+--- a/signal/sigwaitinfo.c
++++ /dev/null
+@@ -1,74 +0,0 @@
+-/* sigwaitinfo.c - Generic sigwaitinfo implementation.
+-   Copyright (C) 2008 Free Software Foundation, Inc.
+-   Written by Neal H. Walfield <neal@gnu.org>.
+-
+-   This file is part of the GNU Hurd.
+-
+-   The GNU Hurd is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public License
+-   as published by the Free Software Foundation; either version 3 of
+-   the License, or (at your option) any later version.
+-
+-   The GNU Hurd 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
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with this program.  If not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sig-internal.h>
+-#include <pt-internal.h>
+-
+-int
+-sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info)
+-{
+-  pthread_mutex_lock (&sig_lock);
+-
+-  struct signal_state *ss = &_pthread_self ()->ss;
+-
+-  pthread_mutex_lock (&ss->lock);
+-
+-  if ((process_pending & *set) || (ss->pending & *set))
+-    /* There is at least one signal pending.  */
+-    {
+-      bool local = true;
+-      sigset_t extant = process_pending & *set;
+-      if (! extant)
+-	{
+-	  local = false;
+-	  extant = ss->pending & *set;
+-	}
+-
+-      assert (extant);
+-
+-      int signo = l4_msb64 (extant);
+-
+-      if (info)
+-	{
+-	  if (local)
+-	    *info = ss->info[signo - 1];
+-	  else
+-	    *info = process_pending_info[signo - 1];
+-	  info->si_signo = signo;
+-	}
+-
+-      sigdelset (&process_pending, signo);
+-      sigdelset (&ss->pending, signo);
+-
+-      pthread_mutex_unlock (&ss->lock);
+-      pthread_mutex_unlock (&sig_lock);
+-      return 0;
+-    }
+-
+-  siginfo_t i = sigwaiter_block (ss, set);
+-  assert (i.si_signo);
+-  assert ((sigmask (i.si_signo) & *set));
+-
+-  if (info)
+-    *info = i;
+-
+-  return 0;
+-}
+-
+-- 
+1.9.0
+
+From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Thu, 27 Mar 2014 00:21:36 +0000
 Subject: [PATCH 1/2] This helps to integrate libpthread as a glibc module.
 
 ---
-- 
1.9.0


From 4186086e309c78cd88cfceb347df584d85a0c83d Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Sun, 30 Mar 2014 23:00:01 +0000
Subject: [PATCH 15/18] Handpicked many patches, it almost builds It fails with
 Makefile:233: recipe for target 'elf/subdir_lib' failed

---
 gnu/packages/base.scm                              |    4 +-
 gnu/packages/cross-base.scm                        |    2 +-
 .../libpthread-0.3-3b391d-glibc-preparation.patch  | 3822 +-------------------
 3 files changed, 68 insertions(+), 3760 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 339551b..bc57bd0 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -611,8 +611,8 @@ with the Linux kernel.")
                                 (chdir "source")
                                 (copy-recursively source ".")
                                 (copy-recursively (assoc-ref inputs "libpthread") "libpthread")
-                        ;;        (chmod "bits/pthreadtypes.h" #o777)
-                          ;;      (copy-recursively "libpthread/sysdeps/generic/bits" "bits")
+                                (chmod "bits/pthreadtypes.h" #o777)
+                                (copy-recursively "libpthread/sysdeps/generic/bits" "bits")
                                 #t)
                               %standard-phases))))))) ))
 
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 71ffa21..7e74c11 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -393,7 +393,7 @@ XBINUTILS and the cross tool chain."
            (arguments
             (substitute-keyword-arguments (package-arguments mig)
                 ((#:configure-flags flags)
-                 `(cons ,(string-append "--target=" target)
+                 `(cons ,(string-append "--host=" target)
                         ,flags))))
 
            (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)))
diff --git a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
index 0ba23f0..c37eb0a 100644
--- a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
+++ b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
@@ -1,7 +1,7 @@
 From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Thu, 27 Mar 2014 00:21:36 +0000
-Subject: [PATCH 1/4] This helps to integrate libpthread as a glibc module.
+Subject: [PATCH 1/6] This helps to integrate libpthread as a glibc module.
 
 ---
  configure | 2 ++
@@ -24,7 +24,7 @@ index 0000000..2cdbc71
 From 7f5f718b4a231c1e08d9ed1676cb18e265b715d6 Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Sat, 29 Mar 2014 23:29:44 +0000
-Subject: [PATCH 2/4] fix
+Subject: [PATCH 2/6] fix
 
 ---
  signal/signal.h | 2 +-
@@ -50,7 +50,7 @@ index a33d995..6e22d05 100644
 From b8639799ae3b571eb44edd2b3dec109957393d3e Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Sun, 30 Mar 2014 16:56:09 +0000
-Subject: [PATCH 3/4] These come from the l4 implementation and come in the way
+Subject: [PATCH 3/6] These come from the l4 implementation and come in the way
  of the glibc Makefiles, drop them.
 
 ---
@@ -1864,7 +1864,7 @@ index 1b47079..0000000
 From 6eaedb37037965b99608cb8afbfc934c3396892e Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Sun, 30 Mar 2014 17:23:12 +0000
-Subject: [PATCH 4/4] Revert
+Subject: [PATCH 4/6] Revert
 
 commit 69e89a859882e4f675dd5491edc969159d8a4002
 Author: Pino Toscano <toscano.pino@tiscali.it>
@@ -1982,3775 +1982,83 @@ index d72ef73..88beaa2 100644
 -- 
 1.9.0
 
-From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
-From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Thu, 27 Mar 2014 00:21:36 +0000
-Subject: [PATCH 1/3] This helps to integrate libpthread as a glibc module.
-
----
- configure | 2 ++
- 1 file changed, 2 insertions(+)
- create mode 100644 configure
-
-diff --git a/configure b/configure
-new file mode 100644
-index 0000000..2cdbc71
---- /dev/null
-+++ b/configure
-@@ -0,0 +1,2 @@
-+libc_add_on_canonical=libpthread
-+libc_add_on_subdirs=.
-\ No newline at end of file
--- 
-1.9.0
-
-
-From 7f5f718b4a231c1e08d9ed1676cb18e265b715d6 Mon Sep 17 00:00:00 2001
-From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sat, 29 Mar 2014 23:29:44 +0000
-Subject: [PATCH 2/3] fix
-
----
- signal/signal.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/signal/signal.h b/signal/signal.h
-index a33d995..6e22d05 100644
---- a/signal/signal.h
-+++ b/signal/signal.h
-@@ -26,7 +26,7 @@
- 
- typedef volatile int sig_atomic_t;
- \f
--typedef uint64_t sigset_t;
-+/*typedef uint64_t sigset_t;*/
- 
- int sigaddset (sigset_t *, int);
- int sigdelset (sigset_t *, int);
--- 
-1.9.0
-
-
-From b8639799ae3b571eb44edd2b3dec109957393d3e Mon Sep 17 00:00:00 2001
-From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sun, 30 Mar 2014 16:56:09 +0000
-Subject: [PATCH 3/3] These come from the l4 implementation and come in the way
- of the glibc Makefiles, drop them.
-
----
- include/libc-symbols.h      | 395 --------------------------------------------
- include/set-hooks.h         |  72 --------
- signal/README               |  12 --
- signal/TODO                 |  29 ----
- signal/kill.c               |  70 --------
- signal/pt-kill-siginfo-np.c |  88 ----------
- signal/sig-internal.c       |  26 ---
- signal/sig-internal.h       | 177 --------------------
- signal/sigaction.c          |  72 --------
- signal/sigaltstack.c        |  69 --------
- signal/signal-dispatch.c    | 117 -------------
- signal/signal.h             | 275 ------------------------------
- signal/sigpending.c         |  38 -----
- signal/sigsuspend.c         |  29 ----
- signal/sigtimedwait.c       |  30 ----
- signal/sigwaiter.c          |  91 ----------
- signal/sigwaitinfo.c        |  74 ---------
- 17 files changed, 1664 deletions(-)
- delete mode 100644 include/libc-symbols.h
- delete mode 100644 include/set-hooks.h
- delete mode 100644 signal/README
- delete mode 100644 signal/TODO
- delete mode 100644 signal/kill.c
- delete mode 100644 signal/pt-kill-siginfo-np.c
- delete mode 100644 signal/sig-internal.c
- delete mode 100644 signal/sig-internal.h
- delete mode 100644 signal/sigaction.c
- delete mode 100644 signal/sigaltstack.c
- delete mode 100644 signal/signal-dispatch.c
- delete mode 100644 signal/signal.h
- delete mode 100644 signal/sigpending.c
- delete mode 100644 signal/sigsuspend.c
- delete mode 100644 signal/sigtimedwait.c
- delete mode 100644 signal/sigwaiter.c
- delete mode 100644 signal/sigwaitinfo.c
-
-diff --git a/include/libc-symbols.h b/include/libc-symbols.h
-deleted file mode 100644
-index 54dd6e2..0000000
---- a/include/libc-symbols.h
-+++ /dev/null
-@@ -1,395 +0,0 @@
--/* Support macros for making weak and strong aliases for symbols,
--   and for using symbol sets and linker warnings with GNU ld.
--   Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2008
--     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 Lesser General Public
--   License as published by the Free Software Foundation; either
--   version 2.1 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with the GNU C Library; if not, write to the Free
--   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
--   02111-1307 USA.  */
--
--#ifndef _LIBC_SYMBOLS_H
--#define _LIBC_SYMBOLS_H	1
--
--/* This file's macros are included implicitly in the compilation of every
--   file in the C library by -imacros.
--
--   We include config.h which is generated by configure.
--   It should define for us the following symbols:
--
--   * HAVE_ASM_SET_DIRECTIVE if we have `.set B, A' instead of `A = B'.
--   * ASM_GLOBAL_DIRECTIVE with `.globl' or `.global'.
--   * HAVE_GNU_LD if using GNU ld, with support for weak symbols in a.out,
--   and for symbol set and warning messages extensions in a.out and ELF.
--   * HAVE_ELF if using ELF, which supports weak symbols using `.weak'.
--   * HAVE_ASM_WEAK_DIRECTIVE if we have weak symbols using `.weak'.
--   * HAVE_ASM_WEAKEXT_DIRECTIVE if we have weak symbols using `.weakext'.
--
--   */
--
--/* This is defined for the compilation of all C library code.  features.h
--   tests this to avoid inclusion of stubs.h while compiling the library,
--   before stubs.h has been generated.  Some library code that is shared
--   with other packages also tests this symbol to see if it is being
--   compiled as part of the C library.  We must define this before including
--   config.h, because it makes some definitions conditional on whether libc
--   itself is being compiled, or just some generator program.  */
--// #define _LIBC	1
--
--/* Enable declarations of GNU extensions, since we are compiling them.  */
--#define _GNU_SOURCE	1
--/* And we also need the data for the reentrant functions.  */
--#define _REENTRANT	1
--
--// #include <config.h>
--#define HAVE_ASM_WEAK_DIRECTIVE
--#define HAVE_WEAK_SYMBOLS
--#define HAVE_ASM_SET_DIRECTIVE
--#define HAVE_BUILTIN_EXPECT
--#define HAVE_GNU_LD
--#define HAVE_ELF
--#define HAVE_SECTION_QUOTES
--#define HAVE_VISIBILITY_ATTRIBUTE
--#define HAVE_ASM_PREVIOUS_DIRECTIVE
--// #define SHARED
--
--/* The symbols in all the user (non-_) macros are C symbols.
--   HAVE_GNU_LD without HAVE_ELF implies a.out.  */
--
--#if defined HAVE_ASM_WEAK_DIRECTIVE || defined HAVE_ASM_WEAKEXT_DIRECTIVE
--# define HAVE_WEAK_SYMBOLS
--#endif
--
--#ifndef __SYMBOL_PREFIX
--# ifdef NO_UNDERSCORES
--#  define __SYMBOL_PREFIX
--# else
--#  define __SYMBOL_PREFIX "_"
--# endif
--#endif
--
--#ifndef C_SYMBOL_NAME
--# ifdef NO_UNDERSCORES
--#  define C_SYMBOL_NAME(name) name
--# else
--#  define C_SYMBOL_NAME(name) _##name
--# endif
--#endif
--
--#ifndef ASM_LINE_SEP
--# define ASM_LINE_SEP ;
--#endif
--
--#ifndef C_SYMBOL_DOT_NAME
--# define C_SYMBOL_DOT_NAME(name) .##name
--#endif
--
--#ifndef __ASSEMBLER__
--/* GCC understands weak symbols and aliases; use its interface where
--   possible, instead of embedded assembly language.  */
--
--/* Define ALIASNAME as a strong alias for NAME.  */
--# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
--# define _strong_alias(name, aliasname) \
--  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
--
--/* This comes between the return type and function name in
--   a function definition to make that definition weak.  */
--# define weak_function __attribute__ ((weak))
--# define weak_const_function __attribute__ ((weak, __const__))
--
--# ifdef HAVE_WEAK_SYMBOLS
--
--/* Define ALIASNAME as a weak alias for NAME.
--   If weak aliases are not available, this defines a strong alias.  */
--#  define weak_alias(name, aliasname) _weak_alias (name, aliasname)
--#  define _weak_alias(name, aliasname) \
--  extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
--
--/* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
--#  define weak_extern(symbol) _weak_extern (symbol)
--#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
--#   define _weak_extern(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
--#  else
--#   define _weak_extern(symbol)    asm (".weak " __SYMBOL_PREFIX #symbol);
--#  endif
--
--# else
--
--#  define weak_alias(name, aliasname) strong_alias(name, aliasname)
--#  define weak_extern(symbol) /* Nothing. */
--
--# endif
--
--#else /* __ASSEMBLER__ */
--
--# ifdef HAVE_ASM_SET_DIRECTIVE
--#  define strong_alias(original, alias)		\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
--  .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
--# else
--#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
--#   define strong_alias(original, alias)	\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
--#  else
--#   define strong_alias(original, alias)	\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
--#  endif
--# endif
--
--# ifdef HAVE_WEAK_SYMBOLS
--#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
--#   define weak_alias(original, alias)	\
--  .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
--#   define weak_extern(symbol)	\
--  .weakext C_SYMBOL_NAME (symbol)
--
--#  else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
--
--#   ifdef HAVE_ASM_GLOBAL_DOT_NAME
--#    define weak_alias(original, alias)	\
--  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP			\
--  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
--#   else
--#    define weak_alias(original, alias)	\
--  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
--#   endif
--
--#   define weak_extern(symbol)	\
--  .weak C_SYMBOL_NAME (symbol)
--
--#  endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
--
--# else /* ! HAVE_WEAK_SYMBOLS */
--
--#  define weak_alias(original, alias) strong_alias(original, alias)
--#  define weak_extern(symbol) /* Nothing */
--# endif /* ! HAVE_WEAK_SYMBOLS */
--
--#endif /* __ASSEMBLER__ */
--
--/* On some platforms we can make internal function calls (i.e., calls of
--   functions not exported) a bit faster by using a different calling
--   convention.  */
--#ifndef internal_function
--# define internal_function	/* empty */
--#endif
--
--/* Prepare for the case that `__builtin_expect' is not available.  */
--#ifndef HAVE_BUILTIN_EXPECT
--# define __builtin_expect(expr, val) (expr)
--#endif
--
--/* Determine the return address.  */
--#define RETURN_ADDRESS(nr) \
--  __builtin_extract_return_addr (__builtin_return_address (nr))
--
--/* When a reference to SYMBOL is encountered, the linker will emit a
--   warning message MSG.  */
--#ifdef HAVE_GNU_LD
--# ifdef HAVE_ELF
--
--/* We want the .gnu.warning.SYMBOL section to be unallocated.  */
--#  ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
--#   define __make_section_unallocated(section_string)	\
--  asm (".section " section_string "\n\t.previous");
--#  elif defined HAVE_ASM_POPSECTION_DIRECTIVE
--#   define __make_section_unallocated(section_string)	\
--  asm (".pushsection " section_string "\n\t.popsection");
--#  else
--#   define __make_section_unallocated(section_string)
--#  endif
--
--/* Tacking on "\n\t#" to the section name makes gcc put it's bogus
--   section attributes on what looks like a comment to the assembler.  */
--#  ifdef HAVE_SECTION_QUOTES
--#   define link_warning(symbol, msg) \
--  __make_section_unallocated (".gnu.warning." #symbol) \
--  static const char __evoke_link_warning_##symbol[]	\
--    __attribute__ ((unused, section (".gnu.warning." #symbol "\"\n\t#\""))) \
--    = msg;
--#  else
--#   define link_warning(symbol, msg) \
--  __make_section_unallocated (".gnu.warning." #symbol) \
--  static const char __evoke_link_warning_##symbol[]	\
--    __attribute__ ((unused, section (".gnu.warning." #symbol "\n\t#"))) = msg;
--#  endif
--# else /* Not ELF: a.out */
--#  ifdef HAVE_XCOFF
--/* XCOFF does not support .stabs.
--   The native aix linker will remove the .stab and .stabstr sections
--   The gnu linker will have a fatal error if there is a relocation for
--   symbol in the .stab section.  Silently disable this macro.  */
--#   define link_warning(symbol, msg)
--#  else
--#   define link_warning(symbol, msg)		\
--     asm (".stabs \"" msg "\",30,0,0,0\n\t"	\
--          ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
--#  endif /* XCOFF */
--# endif
--#else
--/* We will never be heard; they will all die horribly.  */
--# define link_warning(symbol, msg)
--#endif
--
--/* A canned warning for sysdeps/stub functions.  */
--#define	stub_warning(name) \
--  link_warning (name, \
--		"warning: " #name " is not implemented and will always fail")
--
--/*
--\f
--*/
--
--#ifdef HAVE_GNU_LD
--
--/* Symbol set support macros.  */
--
--# ifdef HAVE_ELF
--
--/* Make SYMBOL, which is in the text segment, an element of SET.  */
--#  define text_set_element(set, symbol)	_elf_set_element(set, symbol)
--/* Make SYMBOL, which is in the data segment, an element of SET.  */
--#  define data_set_element(set, symbol)	_elf_set_element(set, symbol)
--/* Make SYMBOL, which is in the bss segment, an element of SET.  */
--#  define bss_set_element(set, symbol)	_elf_set_element(set, symbol)
--
--/* These are all done the same way in ELF.
--   There is a new section created for each set.  */
--#  ifdef SHARED
--/* When building a shared library, make the set section writable,
--   because it will need to be relocated at run time anyway.  */
--#   define _elf_set_element(set, symbol) \
--  static const void *__elf_set_##set##_element_##symbol##__ \
--    __attribute__ ((unused, section (#set))) = &(symbol)
--#  else
--#   define _elf_set_element(set, symbol) \
--  static const void *const __elf_set_##set##_element_##symbol##__ \
--    __attribute__ ((unused, section (#set))) = &(symbol)
--#  endif
--
--/* Define SET as a symbol set.  This may be required (it is in a.out) to
--   be able to use the set's contents.  */
--#  define symbol_set_define(set)	symbol_set_declare(set)
--
--/* Declare SET for use in this module, if defined in another module.  */
--#  define symbol_set_declare(set) \
--  extern void *const __start_##set __attribute__ ((__weak__));		\
--  extern void *const __stop_##set __attribute__ ((__weak__));		\
--  weak_extern (__start_##set) weak_extern (__stop_##set)
--
--/* Return a pointer (void *const *) to the first element of SET.  */
--#  define symbol_set_first_element(set)	(&__start_##set)
--
--/* Return true iff PTR (a void *const *) has been incremented
--   past the last element in SET.  */
--#  define symbol_set_end_p(set, ptr)	((ptr) >= &__stop_##set)
--
--# else	/* Not ELF: a.out.  */
--
--#  ifdef HAVE_XCOFF
--/* XCOFF does not support .stabs.
--   The native aix linker will remove the .stab and .stabstr sections
--   The gnu linker will have a fatal error if there is a relocation for
--   symbol in the .stab section.  Silently disable these macros.  */
--#   define text_set_element(set, symbol)
--#   define data_set_element(set, symbol)
--#   define bss_set_element(set, symbol)
--#  else
--#   define text_set_element(set, symbol)	\
--    asm (".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
--#   define data_set_element(set, symbol)	\
--    asm (".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
--#   define bss_set_element(set, symbol)	?error Must use initialized data.
--#  endif /* XCOFF */
--#  define symbol_set_define(set)	void *const (set)[1];
--#  define symbol_set_declare(set)	extern void *const (set)[1];
--
--#  define symbol_set_first_element(set)	&(set)[1]
--#  define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
--
--# endif	/* ELF.  */
--#else
--/* We cannot do anything in generial.  */
--# define text_set_element(set, symbol) asm ("")
--# define data_set_element(set, symbol) asm ("")
--# define bss_set_element(set, symbol) asm ("")
--# define symbol_set_define(set)		void *const (set)[1];
--# define symbol_set_declare(set)	extern void *const (set)[1];
--
--# define symbol_set_first_element(set)	&(set)[1]
--# define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
--#endif	/* Have GNU ld.  */
--
--#if DO_VERSIONING
--# define symbol_version(real, name, version) \
--     _symbol_version(real, name, version)
--# define default_symbol_version(real, name, version) \
--     _default_symbol_version(real, name, version)
--# ifdef __ASSEMBLER__
--#  define _symbol_version(real, name, version) \
--     .symver real, name##@##version
--#  define _default_symbol_version(real, name, version) \
--     .symver real, name##@##@##version
--# else
--#  define _symbol_version(real, name, version) \
--     __asm__ (".symver " #real "," #name "@" #version)
--#  define _default_symbol_version(real, name, version) \
--     __asm__ (".symver " #real "," #name "@@" #version)
--# endif
--#else
--# define symbol_version(real, name, version)
--# define default_symbol_version(real, name, version) \
--  strong_alias(real, name)
--#endif
--
--#if defined HAVE_VISIBILITY_ATTRIBUTE && defined SHARED
--# define attribute_hidden __attribute__ ((visibility ("hidden")))
--#else
--# define attribute_hidden
--#endif
--
--/* Handling on non-exported internal names.  We have to do this only
--   for shared code.  */
--#ifdef SHARED
--# define INTUSE(name) name##_internal
--# define INTDEF(name) strong_alias (name, name##_internal)
--# define INTVARDEF(name) \
--  _INTVARDEF (name, name##_internal)
--# if defined HAVE_VISIBILITY_ATTRIBUTE
--#  define _INTVARDEF(name, aliasname) \
--  extern __typeof (name) aliasname __attribute__ ((alias (#name), \
--						   visibility ("hidden")));
--# else
--#  define _INTVARDEF(name, aliasname) \
--  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
--# endif
--# define INTDEF2(name, newname) strong_alias (name, newname##_internal)
--# define INTVARDEF2(name, newname) _INTVARDEF (name, newname##_internal)
--#else
--# define INTUSE(name) name
--# define INTDEF(name)
--# define INTVARDEF(name)
--# define INTDEF2(name, newname)
--# define INTVARDEF2(name, newname)
--#endif
--
--#endif /* libc-symbols.h */
-diff --git a/include/set-hooks.h b/include/set-hooks.h
-deleted file mode 100644
-index 9ed71b3..0000000
---- a/include/set-hooks.h
-+++ /dev/null
-@@ -1,72 +0,0 @@
--/* Macros for using symbol sets for running lists of functions.
--   Copyright (C) 1994, 1995, 1997, 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 Lesser General Public
--   License as published by the Free Software Foundation; either
--   version 2.1 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with the GNU C Library; if not, write to the Free
--   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
--   02111-1307 USA.  */
--
--#ifndef _SET_HOOKS_H
--#define _SET_HOOKS_H 1
--
--#define __need_size_t
--#include <stddef.h>
--// #include <sys/cdefs.h>
--#define __unbounded
--
--#ifdef symbol_set_define
--/* Define a hook variable called NAME.  Functions put on this hook take
--   arguments described by PROTO.  Use `text_set_element (NAME, FUNCTION)'
--   from gnu-stabs.h to add a function to the hook.  */
--
--# define DEFINE_HOOK(NAME, PROTO)		\
--  typedef void __##NAME##_hook_function_t PROTO; \
--  symbol_set_define (NAME)
--
--# define DECLARE_HOOK(NAME, PROTO)		\
--  typedef void __##NAME##_hook_function_t PROTO;\
--  symbol_set_declare (NAME)
--
--/* Run all the functions hooked on the set called NAME.
--   Each function is called like this: `function ARGS'.  */
--
--# define RUN_HOOK(NAME, ARGS)				\
--do {							\
--  void *const *__unbounded ptr;				\
--  for (ptr = symbol_set_first_element (NAME);		\
--       ! symbol_set_end_p (NAME, ptr); ++ptr)		\
--    (*(__##NAME##_hook_function_t *) *ptr) ARGS;	\
--} while (0)
--
--/* Define a hook variable with NAME and PROTO, and a function called RUNNER
--   which calls each function on the hook in turn, with ARGS.  */
--
--# define DEFINE_HOOK_RUNNER(name, runner, proto, args) \
--DEFINE_HOOK (name, proto); \
--extern void runner proto; void runner proto { RUN_HOOK (name, args); }
--
--#else
--
--/* The system does not provide necessary support for this.  */
--# define DEFINE_HOOK(NAME, PROTO)
--
--# define DECLARE_HOOK(NAME, PROTO)
--
--# define RUN_HOOK(NAME, ARGS)
--
--# define DEFINE_HOOK_RUNNER(name, runner, proto, args)
--
--#endif
--
--#endif /* set-hooks.h */
-diff --git a/signal/README b/signal/README
-deleted file mode 100644
-index 4963b26..0000000
---- a/signal/README
-+++ /dev/null
-@@ -1,12 +0,0 @@
--This directory provides a signal implementation, which is appropriate
--for operating systems where signals are managed at user-level.  It is
--up to the run-time to catch the signals and forward them to the
--implementation via, e.g., the pthread_kill_info_np call.
--
--The files in this directory are accompanied by the generic implementations
--found in sysdeps/generic/: killpg.c, raise.c, sigaddset.c, sigdelset.c,
--sigemptyset.c, sigfillset.c, siginterrupt.c, sigismember.c, signal.c,
--sigwait.c.
--
--This implementation was once used for a native port running on L4, but is not
--currently used in any libpthread port bundled in this release.
-diff --git a/signal/TODO b/signal/TODO
-deleted file mode 100644
-index 1148abb..0000000
---- a/signal/TODO
-+++ /dev/null
-@@ -1,29 +0,0 @@
--Unimplemented Functionality
-----------------------------
--
--We don't support interruptible functions.  That is, if a signal is
--delivered when a thread is in e.g. the write system call, then the
--write function should be interrupted and return EINTR when the signal
--handler is finished.  To realize this behavior, we could have a thread
--local interruptible flag and a setjmp buffer.  A function that is
--interruptible would fill the jump buffer and set the interruptible
--flag.  If a signal comes in and the interruptible flag is set, rather
--than resuming the thread, we longjmp to the buffer.
--
--If a signal action has set the SA_SIGINFO, the third argument must be
--a pointer to a ucontext describing the thread's interrupted state;
--this implementation passes NULL.  This isn't as bad as it sounds as
--the the ucontext family of functions are marked obsolete in SUSv3 with
--the advisory that any use of them should be replaced by the use of
--pthread functionality (cf. makecontext rationale).
--
--stop and continue signals are not implemented (as we need to stop all
--threads, this requires being in bed with libpthread).
--
--Implementation is not yet cancellation-safe.
--
--There are not even stubs for sighold, sigingore, sigpause, sigrelse,
--however, according to posix: "Use of any of these functions is
--unspecified in a multi-threaded process."
--
--Implement sigtimedwait, sigqueue.
-\ No newline at end of file
-diff --git a/signal/kill.c b/signal/kill.c
-deleted file mode 100644
-index 27c9c32..0000000
---- a/signal/kill.c
-+++ /dev/null
-@@ -1,70 +0,0 @@
--/* kill.c - Generic kill implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--int
--kill (pid_t pid, int signo)
--{
--  if (pid != getpid ())
--    {
--      errno = EOPNOTSUPP;
--      return -1;
--    }
--
--  /* "Signals generated for the process shall be delivered to exactly
--     one of those threads within the process which is in a call to a
--     sigwait() function selecting that signal or has not blocked
--     delivery of the signal.  If there are no threads in a call to a
--     sigwait() function selecting that signal, and if all threads
--     within the process block delivery of the signal, the signal shall
--     remaing pending on the process" (2.4.1).  */
--
--  /* First, see if there is a waiter, which is interested in this
--     signal.  */
--  pthread_mutex_lock (&sig_lock);
--
--  struct sigwaiter *waiter;
--  for (waiter = sigwaiters; waiter; waiter = waiter->next)
--    if ((waiter->signals & sigmask (signo)))
--      /* Got a winner.  */
--      {
--	sigdelset (&process_pending, signo);
--
--	pthread_mutex_lock (&waiter->ss->lock);
--	sigdelset (&waiter->ss->pending, signo);
--
--	memset (&waiter->info, 0, sizeof (waiter->info));
--	waiter->info.si_signo = signo;
--
--	sigwaiter_unblock (waiter);
--
--	return 0;
--      }
--
--  pthread_mutex_unlock (&sig_lock);
--
--  /* XXX: We just generate the signal for the current thread.  If the
--     current thread has blocked the signal, the correct thing to do is
--     to iterate over all the other threads and find on that hasn't
--     blocked it.  */
--  return pthread_kill (pthread_self (), signo);
--}
--
-diff --git a/signal/pt-kill-siginfo-np.c b/signal/pt-kill-siginfo-np.c
-deleted file mode 100644
-index 9bdf6cc..0000000
---- a/signal/pt-kill-siginfo-np.c
-+++ /dev/null
-@@ -1,88 +0,0 @@
--/* pthread-kill-siginfo-np.c - Generic pthread_kill_siginfo_np implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "pt-internal.h"
--#include "sig-internal.h"
--
--int
--pthread_kill_siginfo_np (pthread_t tid, siginfo_t si)
--{
--  int sig = si.si_signo;
--
--  if (sig < 0 || sig >= NSIG)
--    return EINVAL;
--
--  if (sig == 0)
--    return 0;
--
--  struct signal_state *ss = &__pthread_getid (tid)->ss;
--
--  pthread_mutex_lock (&sig_lock);
--  pthread_mutex_lock (&ss->lock);
--
--  if (ss->sigwaiter && (ss->sigwaiter->signals & sigmask (si.si_signo)))
--    /* The thread is in a call to sigwait.  */
--    {
--      ss->sigwaiter->info = si;
--      sigwaiter_unblock (ss->sigwaiter);
--      return 0;
--    }
--
--  pthread_mutex_unlock (&sig_lock);
--
--  if (ss->actions[sig - 1].sa_handler == (void *) SIG_IGN
--      || (ss->actions[sig - 1].sa_handler == (void *) SIG_DFL
--	  && default_action (sig) == sig_ignore))
--    /* It is unclear (to me) what is supposed to happen when a signal
--       is generated for a thread, which is blocking that signal and
--       ignoring it.  POSIX does say that when the action associated
--       with a pending, blocked signal is set to SIG_IGN, the pending
--       signal is to be cleared.  Thus, it makes sense that any signal
--       set to ignore is discarded at generation.  */
--    {
--      pthread_mutex_unlock (&ss->lock);
--      return 0;
--    }
--
--
--  if ((sigmask (sig) & ss->blocked))
--    /* The signal is blocked.  Mark it pending.  */
--    {
--      ss->pending |= sigmask (sig);
--      pthread_mutex_unlock (&ss->lock);
--      return 0;
--    }
--
--  if (pthread_self () == tid
--      && (! (ss->actions[si.si_signo - 1].sa_flags & SA_ONSTACK)
--	  || (ss->stack.ss_flags & SS_DISABLE)
--	  || (ss->stack.ss_flags & SS_ONSTACK)))
--    /* We are sending a signal to ourself and we don't use an
--       alternate stack.  */
--    signal_dispatch (ss, &si);
--  else
--    signal_dispatch_lowlevel (ss, tid, si);
--
--  /* Don't unlock ss: signal_dispatch and signal_dispatch_lowlevel
--     assume ownership of the lock.  */
--
--  return 0;
--}
--
-diff --git a/signal/sig-internal.c b/signal/sig-internal.c
-deleted file mode 100644
-index f73f38b..0000000
---- a/signal/sig-internal.c
-+++ /dev/null
-@@ -1,26 +0,0 @@
--/* sig-internal.c - Signal state functions.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--pthread_mutex_t sig_lock = PTHREAD_MUTEX_INITIALIZER;
--
--sigset_t process_pending;
--siginfo_t process_pending_info[NSIG];
-diff --git a/signal/sig-internal.h b/signal/sig-internal.h
-deleted file mode 100644
-index 6c86c79..0000000
---- a/signal/sig-internal.h
-+++ /dev/null
-@@ -1,177 +0,0 @@
--/* sig-internal.h - Internal signal handling interface.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#ifndef SIG_INTERNAL_H
--#define SIG_INTERNAL_H
--
--#include <signal.h>
--
--#include <sig-sysdep.h>
--
--#define sigmask(sig) (1ULL << (sig - 1))
--#define STOPSIGS (sigmask (SIGTTIN) | sigmask (SIGTTOU) | \
--		  sigmask (SIGSTOP) | sigmask (SIGTSTP))
--
--/* General lock.  Protects PROCESS_PENDING, PROCESS_PENDING_INFO,
--   SIGWAITERS.  */
--extern pthread_mutex_t sig_lock;
--
--/* "Signals generated for the process shall be delivered to exactly
--   one of those threads within the process which is in a call to a
--   sigwait() function selecting that signal or has not blocked
--   delivery of the signal.  If there are no threads in a call to a
--   sigwait() function selecting that signal, and if all threads within
--   the process block delivery of the signal, the signal shall remaing
--   pending on the process"  (2.4.1).
--
--   This variable is protected by SIG_LOCK.  */
--extern sigset_t process_pending;
--extern siginfo_t process_pending_info[NSIG];
--\f
--struct sigwaiter;
--
--/* The per-thread signal state.  */
--struct signal_state
--{
--  /* Protects the following fields.  STACK.SA_FLAGS may be accessed
--     using atomic operations.  */
--  pthread_mutex_t lock;
--
--  /* Pending signals.  */
--  sigset_t pending;
--
--  /* Blocked signals (i.e., the signal mask).  */
--  sigset_t blocked;
--
--  stack_t stack;
--  struct sigaction actions[NSIG];
--  siginfo_t info[NSIG];
--
--  /* If the thread is blocked in a call to sigwait.  */
--  struct sigwaiter *sigwaiter;
--};
--
--#define PTHREAD_SIGNAL_MEMBERS struct signal_state ss;
--
--/* Arranges for thread TID to call signal_dispatch.  Must not be
--   called if TID is the caller and an alternate stack is not required.
--   In this case, the caller should call signal_dispatch directly.  */
--extern void signal_dispatch_lowlevel (struct signal_state *ss,
--				      pthread_t tid, siginfo_t si);
--
--/* This is the signal handler entry point.  A thread is forced into
--   this state when it receives a signal.  We need to save the thread's
--   state and then invoke the high-level signal dispatcher.  SS->LOCK
--   is locked by the caller.  */
--extern void signal_dispatch (struct signal_state *ss, siginfo_t *si);
--
--#ifndef SIGNAL_DISPATCH_ENTRY
--#define SIGNAL_DISPATCH_ENTRY
--#endif
--
--#ifndef SIGNAL_DISPATCH_EXIT
--#define SIGNAL_DISPATCH_EXIT
--#endif
--\f
--/* When a thread calls sigwait and a requested signal is not pending,
--   it allocates the following structure, fills it in, adds it to
--   sigwaiters and sleeps.  */
--struct sigwaiter
--{
--  struct sigwaiter *next;
--  struct sigwaiter *prev;
--
--  /* Thread's signal state.  */
--  struct signal_state *ss;
--
--  /* Signals this thread is waiting for.  */
--  sigset_t signals;
--
--  /* The selected signal is returned here.  The waiter also
--     futex_waits on this info.si_signo.  */
--  siginfo_t info;
--};
--
--/* This variable is protected by SIG_LOCK.  */
--extern struct sigwaiter *sigwaiters;
--
--/* Block the caller waiting for a signal in set SET.  SIG_LOCK and
--   SS->LOCK must be held and will be unlocked by this function before
--   blocking.  */
--extern siginfo_t sigwaiter_block (struct signal_state *ss,
--				  const sigset_t *restrict set);
--
--/* Unblock the waiter WAITER.  SIG_LOCK and WAITER->SS->LOCK must be
--   held.  Both will be dropped on return.  */
--extern void sigwaiter_unblock (struct sigwaiter *waiter);
--\f
--enum sig_action { sig_core, sig_terminate, sig_ignore, sig_cont, sig_stop };
--
--static inline enum sig_action
--default_action (int signo)
--{
--  switch (signo)
--    {
--    case SIGABRT:
--    case SIGBUS:
--    case SIGFPE:
--    case SIGILL:
--    case SIGQUIT:
--    case SIGSEGV:
--    case SIGSTKFLT:
--    case SIGSYS:
--    case SIGTRAP:
--    case SIGXCPU:
--    case SIGXFSZ:
--      return sig_core;
--
--    case SIGALRM:
--    case SIGHUP:
--    case SIGINT:
--    case SIGIO: /* Perhaps ignore?  */
--    case SIGKILL:
--    case SIGPIPE:
--    case SIGPROF:
--    case SIGTERM:
--    case SIGUSR1:
--    case SIGUSR2:
--    case SIGVTALRM:
--      return sig_terminate;
--
--    case SIGCHLD:
--    case SIGPWR:
--    case SIGURG:
--    case SIGWINCH:
--      return sig_ignore;
--
--    case SIGCONT:
--      return sig_cont;
--
--    case SIGSTOP:
--    case SIGTSTP:
--    case SIGTTIN:
--    case SIGTTOU:
--      return sig_stop;
--    }
--
--  panic ("Unknown signal number: %d", signo);
--}
--
--#endif
-diff --git a/signal/sigaction.c b/signal/sigaction.c
-deleted file mode 100644
-index 0126c99..0000000
---- a/signal/sigaction.c
-+++ /dev/null
-@@ -1,72 +0,0 @@
--/* sigaction.c - Generic sigaction implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--#include "pt-internal.h"
--
--int
--sigaction (int sig, const struct sigaction *restrict sa,
--	   struct sigaction *restrict osa)
--{
--  if (sig <= 0 || sig >= NSIG)
--    {
--      errno = EINVAL;
--      return -1;
--    }
--
--  struct signal_state *ss = &_pthread_self ()->ss;
--
--  pthread_mutex_lock (&ss->lock);
--
--  if (osa)
--    *osa = ss->actions[sig - 1];
--
--  if (sa)
--    {
--      ss->actions[sig - 1] = *sa;
--
--      /* "The SIGKILL and SIGSTOP signals shall not be added to the
--	 signal mask using this mechanism; this restriction shall be
--	 enforced by the system without causing an error to be
--	 indicated" (sigaction).  */
--      sigdelset (&ss->blocked, SIGKILL);
--      sigdelset (&ss->blocked, SIGSTOP);
--
--      /* A "signal shall remain pending on the process until it is
--	 unblocked, it is accepted when ..., or the action associated
--	 with it is set to ignore the signal"  (2.4.1).
--
--         "Setting a signal action to SIG_DFL for a signal that is
--         pending, and whose default action is to ignore the signal,
--         ..., shall cause the pending signal to be discarded, whether
--         or not it is blocked" (2.4.3).  */
--      if (sa->sa_handler == SIG_IGN
--	  || (sa->sa_handler == SIG_DFL && default_action (sig) == sig_ignore))
--	{
--	  sigdelset (&ss->pending, sig);
--	  sigdelset (&process_pending, sig);
--	}
--    }
--
--  pthread_mutex_unlock (&ss->lock);
--
--  return 0;
--}
--
-diff --git a/signal/sigaltstack.c b/signal/sigaltstack.c
-deleted file mode 100644
-index 8334811..0000000
---- a/signal/sigaltstack.c
-+++ /dev/null
-@@ -1,69 +0,0 @@
--/* sigaltstack.c - Generic sigaltstack implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--#include "pt-internal.h"
--
--int
--sigaltstack (const stack_t *restrict stack, stack_t *restrict old)
--{
--  int err = 0;
--  struct signal_state *ss = &_pthread_self ()->ss;
--
--  pthread_mutex_lock (&ss->lock);
--
--  if (old)
--    *old = ss->stack;
--
--  if (stack)
--    {
--      if (stack->ss_size < MINSIGSTKSZ)
--	{
--	  err = ENOMEM;
--	  goto out;
--	}
--
--      if ((stack->ss_flags & ~(SS_DISABLE)))
--	/* Flags contains a value other than SS_DISABLE.  */
--	{
--	  err = EINVAL;
--	  goto out;
--	}
--
--      if ((ss->stack.ss_flags & SS_ONSTACK))
--	/* Stack in use.  */
--	{
--	  err = EPERM;
--	  goto out;
--	}
--
--      ss->stack = *stack;
--    }
--
-- out:
--  pthread_mutex_unlock (&ss->lock);
--
--  if (err)
--    {
--      errno = err;
--      return -1;
--    }
--  return 0;
--}
-diff --git a/signal/signal-dispatch.c b/signal/signal-dispatch.c
-deleted file mode 100644
-index 40440b7..0000000
---- a/signal/signal-dispatch.c
-+++ /dev/null
-@@ -1,117 +0,0 @@
--/* signal-dispatch.c - Signal dispatcher.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--/* This is the signal handler entry point.  A thread is forced into
--   this state when it receives a signal.  We need to save the thread's
--   state and then invoke the high-level signal dispatcher.  SS->LOCK
--   is locked by the caller.  */
--void
--signal_dispatch (struct signal_state *ss, siginfo_t *si)
--{
--  SIGNAL_DISPATCH_ENTRY;
--
--  int signo = si->si_signo;
--
--  assert (signo > 0 && signo < NSIG);
--  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
--
--  do
--    {
--      if ((sigmask (signo) & STOPSIGS))
--	/* Stop signals clear a pending SIGCONT even if they
--	   are handled or ignored (but not if preempted).  */
--	{
--	  sigdelset (&ss->pending, SIGCONT);
--	  sigdelset (&process_pending, SIGCONT);
--	}
--      else if ((signo == SIGCONT))
--	/* Even if handled or ignored (but not preempted), SIGCONT
--	   clears stop signals and resumes the process.  */
--	{
--	  ss->pending &= ~STOPSIGS;
--	  process_pending &= ~STOPSIGS;
--	}
--
--      void (*handler)(int, siginfo_t *, void *)
--	= ss->actions[signo - 1].sa_sigaction;
--
--      /* Reset to SIG_DFL if requested.  SIGILL and SIGTRAP cannot
--	 be automatically reset when delivered; the system silently
--	 enforces this restriction (sigaction).  */
--      if (ss->actions[signo - 1].sa_flags & SA_RESETHAND
--	  && signo != SIGILL && signo != SIGTRAP)
--	ss->actions[signo - 1].sa_handler = SIG_DFL;
--
--      sigset_t orig_blocked = ss->blocked;
--      /* Block requested signals while running the handler.  */
--      ss->blocked |= ss->actions[signo - 1].sa_mask;
--
--      /* Block SIGNO unless we're asked not to.  */
--      if (! (ss->actions[signo - 1].sa_flags & (SA_RESETHAND | SA_NODEFER)))
--	sigaddset (&ss->blocked, signo);
--
--      sigdelset (&ss->pending, signo);
--      pthread_mutex_unlock (&ss->lock);
--
--      pthread_mutex_lock (&sig_lock);
--      sigdelset (&process_pending, signo);
--      pthread_mutex_unlock (&sig_lock);
--
--      if (handler == (void *) SIG_DFL)
--	{
--	  enum sig_action action = default_action (signo);
--
--	  if (action == sig_terminate || action == sig_core)
--	    _exit (128 + signo);
--
--	  if (action == sig_stop)
--	    /* XXX: Implement me.  */
--	    panic ("Stopping process unimplemented.");
--
--	  if (action == sig_cont)
--	    /* XXX: Implement me.  */;
--	    panic ("Continuing process unimplemented.");
--	}
--      else if (handler == (void *) SIG_IGN)
--	;
--      else
--	handler (signo, si, NULL);
--
--      pthread_mutex_lock (&ss->lock);
--
--      /* "When a thread's signal mask is changed in a signal-catching
--	 function that is installed by sigaction(), the restoration of
--	 the signal mask on return from the signal-catching function
--	 overrides that change (see sigaction())" (sigprocmask).  */
--      ss->blocked = orig_blocked;
--
--      sigset_t pending = ~ss->blocked & ss->pending;
--      if (! pending)
--	pending = ~ss->blocked & process_pending;
--      signo = l4_lsb64 (pending);
--    }
--  while (signo);
--
--  pthread_mutex_unlock (&ss->lock);
--
--  SIGNAL_DISPATCH_EXIT;
--}
-diff --git a/signal/signal.h b/signal/signal.h
-deleted file mode 100644
-index 6e22d05..0000000
---- a/signal/signal.h
-+++ /dev/null
-@@ -1,275 +0,0 @@
--/* signal.h - Signal handling interface.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#ifndef _SIGNAL_H
--#define _SIGNAL_H 1
--
--#include <stdint.h>
--#include <sys/types.h>
--
--typedef volatile int sig_atomic_t;
--\f
--/*typedef uint64_t sigset_t;*/
--
--int sigaddset (sigset_t *, int);
--int sigdelset (sigset_t *, int);
--int sigemptyset (sigset_t *);
--int sigfillset (sigset_t *);
--int sigismember (const sigset_t *, int);
--\f
--/* These values are consistent with Linux.  */
--#define SIGRTMIN 34
--#define SIGRTMAX 64
--
--enum
--  {
--    SIGHUP = 1,
--#define SIGHUP SIGHUP
--    SIGINT,
--#define SIGINT SIGINT
--    SIGQUIT,
--#define SIGQUIT SIGQUIT
--    SIGILL,
--#define SIGILL SIGILL
--    SIGTRAP,
--#define SIGTRAP SIGTRAP
--    SIGABRT,
--#define SIGABRT SIGABRT
--    SIGBUS,
--#define SIGBUS SIGBUS
--    SIGFPE,
--#define SIGFPE SIGFPE
--    SIGKILL,
--#define SIGKILL SIGKILL
--    SIGUSR1,
--#define SIGUSR1 SIGUSR1
--    SIGSEGV,
--#define SIGSEGV SIGSEGV
--    SIGUSR2,
--#define SIGUSR2 SIGUSR2
--    SIGPIPE,
--#define SIGPIPE SIGPIPE
--    SIGALRM,
--#define SIGALRM SIGALRM
--    SIGTERM,
--#define SIGTERM SIGTERM
--    SIGSTKFLT,
--#define SIGSTKFLT SIGSTKFLT
--    SIGCHLD,
--#define SIGCHLD SIGCHLD
--    SIGCONT,
--#define SIGCONT SIGCONT
--    SIGSTOP,
--#define SIGSTOP SIGSTOP
--    SIGTSTP,
--#define SIGTSTP SIGTSTP
--    SIGTTIN,
--#define SIGTTIN SIGTTIN
--    SIGTTOU,
--#define SIGTTOU SIGTTOU
--    SIGURG,
--#define SIGURG SIGURG
--    SIGXCPU,
--#define SIGXCPU SIGXCPU
--    SIGXFSZ,
--#define SIGXFSZ SIGXFSZ
--    SIGVTALRM,
--#define SIGVTALRM SIGVTALRM
--    SIGPROF,
--#define SIGPROF SIGPROF
--    SIGWINCH,
--#define SIGWINCH SIGWINCH
--    SIGIO,
--#define SIGIO SIGIO
--    SIGPWR,
--#define SIGPWR SIGPWR
--    SIGSYS,
--#define SIGSYS SIGSYS
--    NSIG
--  };
--\f
--/* The resulting set is the union of the current set and the signal
--   set pointed to by the argument set.  */
--#define SIG_BLOCK 1
--/* The resulting set is the intersection of the current set and the
--   complement of the signal set pointed to by the argument set.  */
--#define SIG_UNBLOCK 2
--/* The resulting set is the signal set pointed to by the argument
--   set.  */
--#define SIG_SETMASK 3
--
--int pthread_sigmask (int how, const sigset_t *mask, sigset_t *old);
--int sigprocmask (int how, const sigset_t *restrict mask,
--		 sigset_t *restrict old);
--
--/* Return set of pending signals.  */
--int sigpending(sigset_t *set);
--\f
--union sigval
--{
--  int sival_int;
--  void *sival_ptr;
--};
--\f
--#define SIG_DFL ((void (*)(int)) (0))
--#define SIG_ERR ((void (*)(int)) (-1))
--#define SIG_IGN ((void (*)(int)) (1))
--
--/* Causes signal delivery to occur on an alternate stack.  */
--#define SA_ONSTACK (1 << 0)
--/* Do not generate SIGCHLD when children stop or stopped children
--   continue.  */
--#define SA_NOCLDSTOP (1 << 1)
--/* Causes signal dispositions to be set to SIG_DFL on entry to signal
--   handlers.  */
--#define SA_RESETHAND (1 << 2)
--/* Causes certain functions to become restartable.  */
--#define SA_RESTART (1 << 3)
--/* Causes extra information to be passed to signal handlers at the
--   time of receipt of a signal.  */
--#define SA_SIGINFO (1 << 4)
--/* Causes implementations not to create zombie processes on child
--   death.  */
--#define SA_NOCLDWAIT (1 << 5)
--/* Causes signal not to be automatically blocked on entry to
--   signal handler.  */
--#define SA_NODEFER (1 << 6)
--
--typedef struct
--{
--  int si_signo;
--  int si_code;
--  int si_errno;
--  pid_t si_pid;
--  uid_t si_uid;
--  void *si_addr;
--  int si_status;
--  long si_band;
--  union sigval si_value;
--} siginfo_t;
--
--struct sigaction
--{
--  union
--  {
--    /* Pointer to a signal-catching function or one of the macros
--       SIG_IGN or SIG_DFL.  */
--    void (*sa_handler)(int);
--                   
--    /* Pointer to a signal-catching function.  */
--    void (*sa_sigaction)(int, siginfo_t *, void *);
--  };
--
--  /* Set of signals to be blocked during execution of the signal
--     handling function.  */
--  sigset_t sa_mask;
--
--  /* Special flags.  */
--  int sa_flags;
--};
--
--int sigaction (int signo, const struct sigaction *restrict newaction,
--	       struct sigaction *restrict oldaction);
--
--void (*signal (int signo, void (*handler)(int)))(int);
--void (*bsd_signal (int signo, void (*handler)(int)))(int);
--\f
--/* Process is executing on an alternate signal stack.  */
--#define SS_ONSTACK (1 << 0)
--/* Alternate signal stack is disabled.  */
--#define SS_DISABLE (1 << 1)
--
--/* Minimum stack size for a signal handler.  */
--#define MINSIGSTKSZ PAGESIZE
--/* Default size in bytes for the alternate signal stack. */
--#define SIGSTKSZ (16 * PAGESIZE)
--
--typedef struct
--{
--  void *ss_sp;
--  size_t ss_size;
--  int ss_flags;
--} stack_t;
--
--int sigaltstack(const stack_t *restrict stack, stack_t *restrict old);
--\f
--#include <pthread.h>
--
--/* Send SIGNO to the process PID.  */
--int kill(pid_t pid, int signo);
--
--/* Send SIGNO to the process group PG.  */
--int killpg(pid_t pg, int signo);
--
--/* Send SIGNO to thread TID.  */
--int pthread_kill(pthread_t tid, int signo);
--
--/* Send a signal to thread TID using SIGINFO.  */
--int pthread_kill_siginfo_np (pthread_t tid, siginfo_t siginfo);
--
--/* Send SIGNO to the calling thread.  */
--int raise(int signo);
--\f
--typedef struct sigevent
--{
--  /* Notification type.  */
--  int sigev_notify;
--
--  /* Signal number.  */
--  int sigev_signo;
--
--  /* Signal value.  */
--  union sigval sigev_value;
--
--  /* Notification function.  */
--  void (*sigev_notify_function) (union sigval);
--
--  /* Notification attributes.  */
--  pthread_attr_t *sigev_notify_attributes;
--} sigevent_t;
--
--enum
--  {
--    SIGEV_NONE = 0,
--#define SIGEV_NONE SIGEV_NONE
--    SIGEV_SIGNAL,
--#define SIGEV_SIGNAL SIGEV_SIGNAL
--    SIGEV_THREAD
--#define SIGEV_THREAD SIGEV_THREAD
--  };
--\f
--#define SIG_HOLD
--
--int sighold (int);
--int sigignore (int);
--int siginterrupt (int, int);
--int sigpause (int);
--int sigqueue (pid_t, int, const union sigval);
--int sigrelse (int);
--void (*sigset (int, void (*)(int)))(int);
--int sigsuspend (const sigset_t *);
--\f
--/* Wait for a signal.  */
--int sigwait (const sigset_t *restrict set, int *restrict signo);
--int sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info);
--int sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
--		  const struct timespec *restrict timespec);
--
--#endif
-diff --git a/signal/sigpending.c b/signal/sigpending.c
-deleted file mode 100644
-index 609b55d..0000000
---- a/signal/sigpending.c
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* sigpending.c - Generic sigpending implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include <sig-internal.h>
--#include <pt-internal.h>
--
--int
--sigpending (sigset_t *set)
--{
--  struct signal_state *ss = &_pthread_self ()->ss;
--
--  pthread_mutex_lock (&ss->lock);
--
--  /* There is no need to lock SIG_LOCK for process_pending since we
--     just read it, which is atomic.  */
--  *set = (ss->pending | process_pending) & ss->blocked;
--
--  pthread_mutex_unlock (&ss->lock);
--
--  return 0;
--}
-diff --git a/signal/sigsuspend.c b/signal/sigsuspend.c
-deleted file mode 100644
-index 73cf12a..0000000
---- a/signal/sigsuspend.c
-+++ /dev/null
-@@ -1,29 +0,0 @@
--/* sigsuspend.c - Generic sigsuspend implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--int
--sigsuspend (const sigset_t *set)
--{
--  /* XXX: Implement me.  */
--  errno = EOPNOTSUPP;
--  return -1;
--}
-diff --git a/signal/sigtimedwait.c b/signal/sigtimedwait.c
-deleted file mode 100644
-index 52cd017..0000000
---- a/signal/sigtimedwait.c
-+++ /dev/null
-@@ -1,30 +0,0 @@
--/* sigtimedwait.c - Generic sigtimedwait implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--int
--sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
--	      const struct timespec *restrict timeout)
--{
--  errno = EOPNOTSUPP;
--  return -1;
--}
--
-diff --git a/signal/sigwaiter.c b/signal/sigwaiter.c
-deleted file mode 100644
-index 8d041ac..0000000
---- a/signal/sigwaiter.c
-+++ /dev/null
-@@ -1,91 +0,0 @@
--/* sigwaiter.c - Signal handling functions.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--#include <hurd/futex.h>
--
--struct sigwaiter *sigwaiters;
--
--siginfo_t
--sigwaiter_block (struct signal_state *ss, const sigset_t *restrict set)
--{
--  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
--  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
--
--  assert (! ss->sigwaiter);
--
--  struct sigwaiter waiter;
--
--  waiter.next = sigwaiters;
--  if (waiter.next)
--    {
--      assert (! waiter.next->prev);
--      waiter.next->prev = &waiter;
--    }
--  waiter.prev = 0;
--  sigwaiters = &waiter;
--
--  waiter.ss = ss;
--  waiter.info.si_signo = 0;
--  waiter.signals = *set;
--
--  ss->sigwaiter = &waiter;
--
--  pthread_mutex_unlock (&ss->lock);
--  pthread_mutex_unlock (&sig_lock);
--
--  futex_wait (&waiter.info.si_signo, 0);
--
--#ifndef NDEBUG
--  pthread_mutex_lock (&ss->lock);
--  ss->sigwaiter = 0;
--  pthread_mutex_unlock (&ss->lock);
--#endif
--
--  assert (waiter.info.si_signo);
--  return waiter.info;
--}
--
--void
--sigwaiter_unblock (struct sigwaiter *waiter)
--{
--  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
--  assert (pthread_mutex_trylock (&waiter->ss->lock) == EBUSY);
--
--  struct sigwaiter *prev = waiter->prev;
--  struct sigwaiter *next = waiter->next;
--
--  if (next)
--    next->prev = prev;
--
--  if (prev)
--    prev->next = next;
--  else
--    sigwaiters = next;
--
--  sigdelset (&process_pending, waiter->info.si_signo);
--  sigdelset (&waiter->ss->pending, waiter->info.si_signo);
--
--  pthread_mutex_unlock (&waiter->ss->lock);
--  pthread_mutex_unlock (&sig_lock);
--
--  futex_wake (&waiter->info.si_signo, 1);
--}
-diff --git a/signal/sigwaitinfo.c b/signal/sigwaitinfo.c
-deleted file mode 100644
-index 1b47079..0000000
---- a/signal/sigwaitinfo.c
-+++ /dev/null
-@@ -1,74 +0,0 @@
--/* sigwaitinfo.c - Generic sigwaitinfo implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include <sig-internal.h>
--#include <pt-internal.h>
--
--int
--sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info)
--{
--  pthread_mutex_lock (&sig_lock);
--
--  struct signal_state *ss = &_pthread_self ()->ss;
--
--  pthread_mutex_lock (&ss->lock);
--
--  if ((process_pending & *set) || (ss->pending & *set))
--    /* There is at least one signal pending.  */
--    {
--      bool local = true;
--      sigset_t extant = process_pending & *set;
--      if (! extant)
--	{
--	  local = false;
--	  extant = ss->pending & *set;
--	}
--
--      assert (extant);
--
--      int signo = l4_msb64 (extant);
--
--      if (info)
--	{
--	  if (local)
--	    *info = ss->info[signo - 1];
--	  else
--	    *info = process_pending_info[signo - 1];
--	  info->si_signo = signo;
--	}
--
--      sigdelset (&process_pending, signo);
--      sigdelset (&ss->pending, signo);
--
--      pthread_mutex_unlock (&ss->lock);
--      pthread_mutex_unlock (&sig_lock);
--      return 0;
--    }
--
--  siginfo_t i = sigwaiter_block (ss, set);
--  assert (i.si_signo);
--  assert ((sigmask (i.si_signo) & *set));
--
--  if (info)
--    *info = i;
--
--  return 0;
--}
--
--- 
-1.9.0
-
-From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
-From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Thu, 27 Mar 2014 00:21:36 +0000
-Subject: [PATCH 1/3] This helps to integrate libpthread as a glibc module.
-
----
- configure | 2 ++
- 1 file changed, 2 insertions(+)
- create mode 100644 configure
-
-diff --git a/configure b/configure
-new file mode 100644
-index 0000000..2cdbc71
---- /dev/null
-+++ b/configure
-@@ -0,0 +1,2 @@
-+libc_add_on_canonical=libpthread
-+libc_add_on_subdirs=.
-\ No newline at end of file
--- 
-1.9.0
-
-
-From 7f5f718b4a231c1e08d9ed1676cb18e265b715d6 Mon Sep 17 00:00:00 2001
-From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sat, 29 Mar 2014 23:29:44 +0000
-Subject: [PATCH 2/3] fix
-
----
- signal/signal.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/signal/signal.h b/signal/signal.h
-index a33d995..6e22d05 100644
---- a/signal/signal.h
-+++ b/signal/signal.h
-@@ -26,7 +26,7 @@
- 
- typedef volatile int sig_atomic_t;
- \f
--typedef uint64_t sigset_t;
-+/*typedef uint64_t sigset_t;*/
- 
- int sigaddset (sigset_t *, int);
- int sigdelset (sigset_t *, int);
--- 
-1.9.0
-
-
-From b8639799ae3b571eb44edd2b3dec109957393d3e Mon Sep 17 00:00:00 2001
-From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sun, 30 Mar 2014 16:56:09 +0000
-Subject: [PATCH 3/3] These come from the l4 implementation and come in the way
- of the glibc Makefiles, drop them.
-
----
- include/libc-symbols.h      | 395 --------------------------------------------
- include/set-hooks.h         |  72 --------
- signal/README               |  12 --
- signal/TODO                 |  29 ----
- signal/kill.c               |  70 --------
- signal/pt-kill-siginfo-np.c |  88 ----------
- signal/sig-internal.c       |  26 ---
- signal/sig-internal.h       | 177 --------------------
- signal/sigaction.c          |  72 --------
- signal/sigaltstack.c        |  69 --------
- signal/signal-dispatch.c    | 117 -------------
- signal/signal.h             | 275 ------------------------------
- signal/sigpending.c         |  38 -----
- signal/sigsuspend.c         |  29 ----
- signal/sigtimedwait.c       |  30 ----
- signal/sigwaiter.c          |  91 ----------
- signal/sigwaitinfo.c        |  74 ---------
- 17 files changed, 1664 deletions(-)
- delete mode 100644 include/libc-symbols.h
- delete mode 100644 include/set-hooks.h
- delete mode 100644 signal/README
- delete mode 100644 signal/TODO
- delete mode 100644 signal/kill.c
- delete mode 100644 signal/pt-kill-siginfo-np.c
- delete mode 100644 signal/sig-internal.c
- delete mode 100644 signal/sig-internal.h
- delete mode 100644 signal/sigaction.c
- delete mode 100644 signal/sigaltstack.c
- delete mode 100644 signal/signal-dispatch.c
- delete mode 100644 signal/signal.h
- delete mode 100644 signal/sigpending.c
- delete mode 100644 signal/sigsuspend.c
- delete mode 100644 signal/sigtimedwait.c
- delete mode 100644 signal/sigwaiter.c
- delete mode 100644 signal/sigwaitinfo.c
-
-diff --git a/include/libc-symbols.h b/include/libc-symbols.h
-deleted file mode 100644
-index 54dd6e2..0000000
---- a/include/libc-symbols.h
-+++ /dev/null
-@@ -1,395 +0,0 @@
--/* Support macros for making weak and strong aliases for symbols,
--   and for using symbol sets and linker warnings with GNU ld.
--   Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2008
--     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 Lesser General Public
--   License as published by the Free Software Foundation; either
--   version 2.1 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with the GNU C Library; if not, write to the Free
--   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
--   02111-1307 USA.  */
--
--#ifndef _LIBC_SYMBOLS_H
--#define _LIBC_SYMBOLS_H	1
--
--/* This file's macros are included implicitly in the compilation of every
--   file in the C library by -imacros.
--
--   We include config.h which is generated by configure.
--   It should define for us the following symbols:
--
--   * HAVE_ASM_SET_DIRECTIVE if we have `.set B, A' instead of `A = B'.
--   * ASM_GLOBAL_DIRECTIVE with `.globl' or `.global'.
--   * HAVE_GNU_LD if using GNU ld, with support for weak symbols in a.out,
--   and for symbol set and warning messages extensions in a.out and ELF.
--   * HAVE_ELF if using ELF, which supports weak symbols using `.weak'.
--   * HAVE_ASM_WEAK_DIRECTIVE if we have weak symbols using `.weak'.
--   * HAVE_ASM_WEAKEXT_DIRECTIVE if we have weak symbols using `.weakext'.
--
--   */
--
--/* This is defined for the compilation of all C library code.  features.h
--   tests this to avoid inclusion of stubs.h while compiling the library,
--   before stubs.h has been generated.  Some library code that is shared
--   with other packages also tests this symbol to see if it is being
--   compiled as part of the C library.  We must define this before including
--   config.h, because it makes some definitions conditional on whether libc
--   itself is being compiled, or just some generator program.  */
--// #define _LIBC	1
--
--/* Enable declarations of GNU extensions, since we are compiling them.  */
--#define _GNU_SOURCE	1
--/* And we also need the data for the reentrant functions.  */
--#define _REENTRANT	1
--
--// #include <config.h>
--#define HAVE_ASM_WEAK_DIRECTIVE
--#define HAVE_WEAK_SYMBOLS
--#define HAVE_ASM_SET_DIRECTIVE
--#define HAVE_BUILTIN_EXPECT
--#define HAVE_GNU_LD
--#define HAVE_ELF
--#define HAVE_SECTION_QUOTES
--#define HAVE_VISIBILITY_ATTRIBUTE
--#define HAVE_ASM_PREVIOUS_DIRECTIVE
--// #define SHARED
--
--/* The symbols in all the user (non-_) macros are C symbols.
--   HAVE_GNU_LD without HAVE_ELF implies a.out.  */
--
--#if defined HAVE_ASM_WEAK_DIRECTIVE || defined HAVE_ASM_WEAKEXT_DIRECTIVE
--# define HAVE_WEAK_SYMBOLS
--#endif
--
--#ifndef __SYMBOL_PREFIX
--# ifdef NO_UNDERSCORES
--#  define __SYMBOL_PREFIX
--# else
--#  define __SYMBOL_PREFIX "_"
--# endif
--#endif
--
--#ifndef C_SYMBOL_NAME
--# ifdef NO_UNDERSCORES
--#  define C_SYMBOL_NAME(name) name
--# else
--#  define C_SYMBOL_NAME(name) _##name
--# endif
--#endif
--
--#ifndef ASM_LINE_SEP
--# define ASM_LINE_SEP ;
--#endif
--
--#ifndef C_SYMBOL_DOT_NAME
--# define C_SYMBOL_DOT_NAME(name) .##name
--#endif
--
--#ifndef __ASSEMBLER__
--/* GCC understands weak symbols and aliases; use its interface where
--   possible, instead of embedded assembly language.  */
--
--/* Define ALIASNAME as a strong alias for NAME.  */
--# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
--# define _strong_alias(name, aliasname) \
--  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
--
--/* This comes between the return type and function name in
--   a function definition to make that definition weak.  */
--# define weak_function __attribute__ ((weak))
--# define weak_const_function __attribute__ ((weak, __const__))
--
--# ifdef HAVE_WEAK_SYMBOLS
--
--/* Define ALIASNAME as a weak alias for NAME.
--   If weak aliases are not available, this defines a strong alias.  */
--#  define weak_alias(name, aliasname) _weak_alias (name, aliasname)
--#  define _weak_alias(name, aliasname) \
--  extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
--
--/* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
--#  define weak_extern(symbol) _weak_extern (symbol)
--#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
--#   define _weak_extern(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
--#  else
--#   define _weak_extern(symbol)    asm (".weak " __SYMBOL_PREFIX #symbol);
--#  endif
--
--# else
--
--#  define weak_alias(name, aliasname) strong_alias(name, aliasname)
--#  define weak_extern(symbol) /* Nothing. */
--
--# endif
--
--#else /* __ASSEMBLER__ */
--
--# ifdef HAVE_ASM_SET_DIRECTIVE
--#  define strong_alias(original, alias)		\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
--  .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
--# else
--#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
--#   define strong_alias(original, alias)	\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
--#  else
--#   define strong_alias(original, alias)	\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
--#  endif
--# endif
--
--# ifdef HAVE_WEAK_SYMBOLS
--#  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
--#   define weak_alias(original, alias)	\
--  .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
--#   define weak_extern(symbol)	\
--  .weakext C_SYMBOL_NAME (symbol)
--
--#  else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
--
--#   ifdef HAVE_ASM_GLOBAL_DOT_NAME
--#    define weak_alias(original, alias)	\
--  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP			\
--  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
--  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
--#   else
--#    define weak_alias(original, alias)	\
--  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
--  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
--#   endif
--
--#   define weak_extern(symbol)	\
--  .weak C_SYMBOL_NAME (symbol)
--
--#  endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
--
--# else /* ! HAVE_WEAK_SYMBOLS */
--
--#  define weak_alias(original, alias) strong_alias(original, alias)
--#  define weak_extern(symbol) /* Nothing */
--# endif /* ! HAVE_WEAK_SYMBOLS */
--
--#endif /* __ASSEMBLER__ */
--
--/* On some platforms we can make internal function calls (i.e., calls of
--   functions not exported) a bit faster by using a different calling
--   convention.  */
--#ifndef internal_function
--# define internal_function	/* empty */
--#endif
--
--/* Prepare for the case that `__builtin_expect' is not available.  */
--#ifndef HAVE_BUILTIN_EXPECT
--# define __builtin_expect(expr, val) (expr)
--#endif
--
--/* Determine the return address.  */
--#define RETURN_ADDRESS(nr) \
--  __builtin_extract_return_addr (__builtin_return_address (nr))
--
--/* When a reference to SYMBOL is encountered, the linker will emit a
--   warning message MSG.  */
--#ifdef HAVE_GNU_LD
--# ifdef HAVE_ELF
--
--/* We want the .gnu.warning.SYMBOL section to be unallocated.  */
--#  ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
--#   define __make_section_unallocated(section_string)	\
--  asm (".section " section_string "\n\t.previous");
--#  elif defined HAVE_ASM_POPSECTION_DIRECTIVE
--#   define __make_section_unallocated(section_string)	\
--  asm (".pushsection " section_string "\n\t.popsection");
--#  else
--#   define __make_section_unallocated(section_string)
--#  endif
--
--/* Tacking on "\n\t#" to the section name makes gcc put it's bogus
--   section attributes on what looks like a comment to the assembler.  */
--#  ifdef HAVE_SECTION_QUOTES
--#   define link_warning(symbol, msg) \
--  __make_section_unallocated (".gnu.warning." #symbol) \
--  static const char __evoke_link_warning_##symbol[]	\
--    __attribute__ ((unused, section (".gnu.warning." #symbol "\"\n\t#\""))) \
--    = msg;
--#  else
--#   define link_warning(symbol, msg) \
--  __make_section_unallocated (".gnu.warning." #symbol) \
--  static const char __evoke_link_warning_##symbol[]	\
--    __attribute__ ((unused, section (".gnu.warning." #symbol "\n\t#"))) = msg;
--#  endif
--# else /* Not ELF: a.out */
--#  ifdef HAVE_XCOFF
--/* XCOFF does not support .stabs.
--   The native aix linker will remove the .stab and .stabstr sections
--   The gnu linker will have a fatal error if there is a relocation for
--   symbol in the .stab section.  Silently disable this macro.  */
--#   define link_warning(symbol, msg)
--#  else
--#   define link_warning(symbol, msg)		\
--     asm (".stabs \"" msg "\",30,0,0,0\n\t"	\
--          ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
--#  endif /* XCOFF */
--# endif
--#else
--/* We will never be heard; they will all die horribly.  */
--# define link_warning(symbol, msg)
--#endif
--
--/* A canned warning for sysdeps/stub functions.  */
--#define	stub_warning(name) \
--  link_warning (name, \
--		"warning: " #name " is not implemented and will always fail")
--
--/*
--\f
--*/
--
--#ifdef HAVE_GNU_LD
--
--/* Symbol set support macros.  */
--
--# ifdef HAVE_ELF
--
--/* Make SYMBOL, which is in the text segment, an element of SET.  */
--#  define text_set_element(set, symbol)	_elf_set_element(set, symbol)
--/* Make SYMBOL, which is in the data segment, an element of SET.  */
--#  define data_set_element(set, symbol)	_elf_set_element(set, symbol)
--/* Make SYMBOL, which is in the bss segment, an element of SET.  */
--#  define bss_set_element(set, symbol)	_elf_set_element(set, symbol)
--
--/* These are all done the same way in ELF.
--   There is a new section created for each set.  */
--#  ifdef SHARED
--/* When building a shared library, make the set section writable,
--   because it will need to be relocated at run time anyway.  */
--#   define _elf_set_element(set, symbol) \
--  static const void *__elf_set_##set##_element_##symbol##__ \
--    __attribute__ ((unused, section (#set))) = &(symbol)
--#  else
--#   define _elf_set_element(set, symbol) \
--  static const void *const __elf_set_##set##_element_##symbol##__ \
--    __attribute__ ((unused, section (#set))) = &(symbol)
--#  endif
--
--/* Define SET as a symbol set.  This may be required (it is in a.out) to
--   be able to use the set's contents.  */
--#  define symbol_set_define(set)	symbol_set_declare(set)
--
--/* Declare SET for use in this module, if defined in another module.  */
--#  define symbol_set_declare(set) \
--  extern void *const __start_##set __attribute__ ((__weak__));		\
--  extern void *const __stop_##set __attribute__ ((__weak__));		\
--  weak_extern (__start_##set) weak_extern (__stop_##set)
--
--/* Return a pointer (void *const *) to the first element of SET.  */
--#  define symbol_set_first_element(set)	(&__start_##set)
--
--/* Return true iff PTR (a void *const *) has been incremented
--   past the last element in SET.  */
--#  define symbol_set_end_p(set, ptr)	((ptr) >= &__stop_##set)
--
--# else	/* Not ELF: a.out.  */
--
--#  ifdef HAVE_XCOFF
--/* XCOFF does not support .stabs.
--   The native aix linker will remove the .stab and .stabstr sections
--   The gnu linker will have a fatal error if there is a relocation for
--   symbol in the .stab section.  Silently disable these macros.  */
--#   define text_set_element(set, symbol)
--#   define data_set_element(set, symbol)
--#   define bss_set_element(set, symbol)
--#  else
--#   define text_set_element(set, symbol)	\
--    asm (".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol)
--#   define data_set_element(set, symbol)	\
--    asm (".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol)
--#   define bss_set_element(set, symbol)	?error Must use initialized data.
--#  endif /* XCOFF */
--#  define symbol_set_define(set)	void *const (set)[1];
--#  define symbol_set_declare(set)	extern void *const (set)[1];
--
--#  define symbol_set_first_element(set)	&(set)[1]
--#  define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
--
--# endif	/* ELF.  */
--#else
--/* We cannot do anything in generial.  */
--# define text_set_element(set, symbol) asm ("")
--# define data_set_element(set, symbol) asm ("")
--# define bss_set_element(set, symbol) asm ("")
--# define symbol_set_define(set)		void *const (set)[1];
--# define symbol_set_declare(set)	extern void *const (set)[1];
--
--# define symbol_set_first_element(set)	&(set)[1]
--# define symbol_set_end_p(set, ptr)	(*(ptr) == 0)
--#endif	/* Have GNU ld.  */
--
--#if DO_VERSIONING
--# define symbol_version(real, name, version) \
--     _symbol_version(real, name, version)
--# define default_symbol_version(real, name, version) \
--     _default_symbol_version(real, name, version)
--# ifdef __ASSEMBLER__
--#  define _symbol_version(real, name, version) \
--     .symver real, name##@##version
--#  define _default_symbol_version(real, name, version) \
--     .symver real, name##@##@##version
--# else
--#  define _symbol_version(real, name, version) \
--     __asm__ (".symver " #real "," #name "@" #version)
--#  define _default_symbol_version(real, name, version) \
--     __asm__ (".symver " #real "," #name "@@" #version)
--# endif
--#else
--# define symbol_version(real, name, version)
--# define default_symbol_version(real, name, version) \
--  strong_alias(real, name)
--#endif
--
--#if defined HAVE_VISIBILITY_ATTRIBUTE && defined SHARED
--# define attribute_hidden __attribute__ ((visibility ("hidden")))
--#else
--# define attribute_hidden
--#endif
--
--/* Handling on non-exported internal names.  We have to do this only
--   for shared code.  */
--#ifdef SHARED
--# define INTUSE(name) name##_internal
--# define INTDEF(name) strong_alias (name, name##_internal)
--# define INTVARDEF(name) \
--  _INTVARDEF (name, name##_internal)
--# if defined HAVE_VISIBILITY_ATTRIBUTE
--#  define _INTVARDEF(name, aliasname) \
--  extern __typeof (name) aliasname __attribute__ ((alias (#name), \
--						   visibility ("hidden")));
--# else
--#  define _INTVARDEF(name, aliasname) \
--  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
--# endif
--# define INTDEF2(name, newname) strong_alias (name, newname##_internal)
--# define INTVARDEF2(name, newname) _INTVARDEF (name, newname##_internal)
--#else
--# define INTUSE(name) name
--# define INTDEF(name)
--# define INTVARDEF(name)
--# define INTDEF2(name, newname)
--# define INTVARDEF2(name, newname)
--#endif
--
--#endif /* libc-symbols.h */
-diff --git a/include/set-hooks.h b/include/set-hooks.h
-deleted file mode 100644
-index 9ed71b3..0000000
---- a/include/set-hooks.h
-+++ /dev/null
-@@ -1,72 +0,0 @@
--/* Macros for using symbol sets for running lists of functions.
--   Copyright (C) 1994, 1995, 1997, 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 Lesser General Public
--   License as published by the Free Software Foundation; either
--   version 2.1 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with the GNU C Library; if not, write to the Free
--   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
--   02111-1307 USA.  */
--
--#ifndef _SET_HOOKS_H
--#define _SET_HOOKS_H 1
--
--#define __need_size_t
--#include <stddef.h>
--// #include <sys/cdefs.h>
--#define __unbounded
--
--#ifdef symbol_set_define
--/* Define a hook variable called NAME.  Functions put on this hook take
--   arguments described by PROTO.  Use `text_set_element (NAME, FUNCTION)'
--   from gnu-stabs.h to add a function to the hook.  */
--
--# define DEFINE_HOOK(NAME, PROTO)		\
--  typedef void __##NAME##_hook_function_t PROTO; \
--  symbol_set_define (NAME)
--
--# define DECLARE_HOOK(NAME, PROTO)		\
--  typedef void __##NAME##_hook_function_t PROTO;\
--  symbol_set_declare (NAME)
--
--/* Run all the functions hooked on the set called NAME.
--   Each function is called like this: `function ARGS'.  */
--
--# define RUN_HOOK(NAME, ARGS)				\
--do {							\
--  void *const *__unbounded ptr;				\
--  for (ptr = symbol_set_first_element (NAME);		\
--       ! symbol_set_end_p (NAME, ptr); ++ptr)		\
--    (*(__##NAME##_hook_function_t *) *ptr) ARGS;	\
--} while (0)
--
--/* Define a hook variable with NAME and PROTO, and a function called RUNNER
--   which calls each function on the hook in turn, with ARGS.  */
--
--# define DEFINE_HOOK_RUNNER(name, runner, proto, args) \
--DEFINE_HOOK (name, proto); \
--extern void runner proto; void runner proto { RUN_HOOK (name, args); }
--
--#else
--
--/* The system does not provide necessary support for this.  */
--# define DEFINE_HOOK(NAME, PROTO)
--
--# define DECLARE_HOOK(NAME, PROTO)
--
--# define RUN_HOOK(NAME, ARGS)
--
--# define DEFINE_HOOK_RUNNER(name, runner, proto, args)
--
--#endif
--
--#endif /* set-hooks.h */
-diff --git a/signal/README b/signal/README
-deleted file mode 100644
-index 4963b26..0000000
---- a/signal/README
-+++ /dev/null
-@@ -1,12 +0,0 @@
--This directory provides a signal implementation, which is appropriate
--for operating systems where signals are managed at user-level.  It is
--up to the run-time to catch the signals and forward them to the
--implementation via, e.g., the pthread_kill_info_np call.
--
--The files in this directory are accompanied by the generic implementations
--found in sysdeps/generic/: killpg.c, raise.c, sigaddset.c, sigdelset.c,
--sigemptyset.c, sigfillset.c, siginterrupt.c, sigismember.c, signal.c,
--sigwait.c.
--
--This implementation was once used for a native port running on L4, but is not
--currently used in any libpthread port bundled in this release.
-diff --git a/signal/TODO b/signal/TODO
-deleted file mode 100644
-index 1148abb..0000000
---- a/signal/TODO
-+++ /dev/null
-@@ -1,29 +0,0 @@
--Unimplemented Functionality
-----------------------------
--
--We don't support interruptible functions.  That is, if a signal is
--delivered when a thread is in e.g. the write system call, then the
--write function should be interrupted and return EINTR when the signal
--handler is finished.  To realize this behavior, we could have a thread
--local interruptible flag and a setjmp buffer.  A function that is
--interruptible would fill the jump buffer and set the interruptible
--flag.  If a signal comes in and the interruptible flag is set, rather
--than resuming the thread, we longjmp to the buffer.
--
--If a signal action has set the SA_SIGINFO, the third argument must be
--a pointer to a ucontext describing the thread's interrupted state;
--this implementation passes NULL.  This isn't as bad as it sounds as
--the the ucontext family of functions are marked obsolete in SUSv3 with
--the advisory that any use of them should be replaced by the use of
--pthread functionality (cf. makecontext rationale).
--
--stop and continue signals are not implemented (as we need to stop all
--threads, this requires being in bed with libpthread).
--
--Implementation is not yet cancellation-safe.
--
--There are not even stubs for sighold, sigingore, sigpause, sigrelse,
--however, according to posix: "Use of any of these functions is
--unspecified in a multi-threaded process."
--
--Implement sigtimedwait, sigqueue.
-\ No newline at end of file
-diff --git a/signal/kill.c b/signal/kill.c
-deleted file mode 100644
-index 27c9c32..0000000
---- a/signal/kill.c
-+++ /dev/null
-@@ -1,70 +0,0 @@
--/* kill.c - Generic kill implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--int
--kill (pid_t pid, int signo)
--{
--  if (pid != getpid ())
--    {
--      errno = EOPNOTSUPP;
--      return -1;
--    }
--
--  /* "Signals generated for the process shall be delivered to exactly
--     one of those threads within the process which is in a call to a
--     sigwait() function selecting that signal or has not blocked
--     delivery of the signal.  If there are no threads in a call to a
--     sigwait() function selecting that signal, and if all threads
--     within the process block delivery of the signal, the signal shall
--     remaing pending on the process" (2.4.1).  */
--
--  /* First, see if there is a waiter, which is interested in this
--     signal.  */
--  pthread_mutex_lock (&sig_lock);
--
--  struct sigwaiter *waiter;
--  for (waiter = sigwaiters; waiter; waiter = waiter->next)
--    if ((waiter->signals & sigmask (signo)))
--      /* Got a winner.  */
--      {
--	sigdelset (&process_pending, signo);
--
--	pthread_mutex_lock (&waiter->ss->lock);
--	sigdelset (&waiter->ss->pending, signo);
--
--	memset (&waiter->info, 0, sizeof (waiter->info));
--	waiter->info.si_signo = signo;
--
--	sigwaiter_unblock (waiter);
--
--	return 0;
--      }
--
--  pthread_mutex_unlock (&sig_lock);
--
--  /* XXX: We just generate the signal for the current thread.  If the
--     current thread has blocked the signal, the correct thing to do is
--     to iterate over all the other threads and find on that hasn't
--     blocked it.  */
--  return pthread_kill (pthread_self (), signo);
--}
--
-diff --git a/signal/pt-kill-siginfo-np.c b/signal/pt-kill-siginfo-np.c
-deleted file mode 100644
-index 9bdf6cc..0000000
---- a/signal/pt-kill-siginfo-np.c
-+++ /dev/null
-@@ -1,88 +0,0 @@
--/* pthread-kill-siginfo-np.c - Generic pthread_kill_siginfo_np implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "pt-internal.h"
--#include "sig-internal.h"
--
--int
--pthread_kill_siginfo_np (pthread_t tid, siginfo_t si)
--{
--  int sig = si.si_signo;
--
--  if (sig < 0 || sig >= NSIG)
--    return EINVAL;
--
--  if (sig == 0)
--    return 0;
--
--  struct signal_state *ss = &__pthread_getid (tid)->ss;
--
--  pthread_mutex_lock (&sig_lock);
--  pthread_mutex_lock (&ss->lock);
--
--  if (ss->sigwaiter && (ss->sigwaiter->signals & sigmask (si.si_signo)))
--    /* The thread is in a call to sigwait.  */
--    {
--      ss->sigwaiter->info = si;
--      sigwaiter_unblock (ss->sigwaiter);
--      return 0;
--    }
--
--  pthread_mutex_unlock (&sig_lock);
--
--  if (ss->actions[sig - 1].sa_handler == (void *) SIG_IGN
--      || (ss->actions[sig - 1].sa_handler == (void *) SIG_DFL
--	  && default_action (sig) == sig_ignore))
--    /* It is unclear (to me) what is supposed to happen when a signal
--       is generated for a thread, which is blocking that signal and
--       ignoring it.  POSIX does say that when the action associated
--       with a pending, blocked signal is set to SIG_IGN, the pending
--       signal is to be cleared.  Thus, it makes sense that any signal
--       set to ignore is discarded at generation.  */
--    {
--      pthread_mutex_unlock (&ss->lock);
--      return 0;
--    }
--
--
--  if ((sigmask (sig) & ss->blocked))
--    /* The signal is blocked.  Mark it pending.  */
--    {
--      ss->pending |= sigmask (sig);
--      pthread_mutex_unlock (&ss->lock);
--      return 0;
--    }
--
--  if (pthread_self () == tid
--      && (! (ss->actions[si.si_signo - 1].sa_flags & SA_ONSTACK)
--	  || (ss->stack.ss_flags & SS_DISABLE)
--	  || (ss->stack.ss_flags & SS_ONSTACK)))
--    /* We are sending a signal to ourself and we don't use an
--       alternate stack.  */
--    signal_dispatch (ss, &si);
--  else
--    signal_dispatch_lowlevel (ss, tid, si);
--
--  /* Don't unlock ss: signal_dispatch and signal_dispatch_lowlevel
--     assume ownership of the lock.  */
--
--  return 0;
--}
--
-diff --git a/signal/sig-internal.c b/signal/sig-internal.c
-deleted file mode 100644
-index f73f38b..0000000
---- a/signal/sig-internal.c
-+++ /dev/null
-@@ -1,26 +0,0 @@
--/* sig-internal.c - Signal state functions.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--pthread_mutex_t sig_lock = PTHREAD_MUTEX_INITIALIZER;
--
--sigset_t process_pending;
--siginfo_t process_pending_info[NSIG];
-diff --git a/signal/sig-internal.h b/signal/sig-internal.h
-deleted file mode 100644
-index 6c86c79..0000000
---- a/signal/sig-internal.h
-+++ /dev/null
-@@ -1,177 +0,0 @@
--/* sig-internal.h - Internal signal handling interface.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#ifndef SIG_INTERNAL_H
--#define SIG_INTERNAL_H
--
--#include <signal.h>
--
--#include <sig-sysdep.h>
--
--#define sigmask(sig) (1ULL << (sig - 1))
--#define STOPSIGS (sigmask (SIGTTIN) | sigmask (SIGTTOU) | \
--		  sigmask (SIGSTOP) | sigmask (SIGTSTP))
--
--/* General lock.  Protects PROCESS_PENDING, PROCESS_PENDING_INFO,
--   SIGWAITERS.  */
--extern pthread_mutex_t sig_lock;
--
--/* "Signals generated for the process shall be delivered to exactly
--   one of those threads within the process which is in a call to a
--   sigwait() function selecting that signal or has not blocked
--   delivery of the signal.  If there are no threads in a call to a
--   sigwait() function selecting that signal, and if all threads within
--   the process block delivery of the signal, the signal shall remaing
--   pending on the process"  (2.4.1).
--
--   This variable is protected by SIG_LOCK.  */
--extern sigset_t process_pending;
--extern siginfo_t process_pending_info[NSIG];
--\f
--struct sigwaiter;
--
--/* The per-thread signal state.  */
--struct signal_state
--{
--  /* Protects the following fields.  STACK.SA_FLAGS may be accessed
--     using atomic operations.  */
--  pthread_mutex_t lock;
--
--  /* Pending signals.  */
--  sigset_t pending;
--
--  /* Blocked signals (i.e., the signal mask).  */
--  sigset_t blocked;
--
--  stack_t stack;
--  struct sigaction actions[NSIG];
--  siginfo_t info[NSIG];
--
--  /* If the thread is blocked in a call to sigwait.  */
--  struct sigwaiter *sigwaiter;
--};
--
--#define PTHREAD_SIGNAL_MEMBERS struct signal_state ss;
--
--/* Arranges for thread TID to call signal_dispatch.  Must not be
--   called if TID is the caller and an alternate stack is not required.
--   In this case, the caller should call signal_dispatch directly.  */
--extern void signal_dispatch_lowlevel (struct signal_state *ss,
--				      pthread_t tid, siginfo_t si);
--
--/* This is the signal handler entry point.  A thread is forced into
--   this state when it receives a signal.  We need to save the thread's
--   state and then invoke the high-level signal dispatcher.  SS->LOCK
--   is locked by the caller.  */
--extern void signal_dispatch (struct signal_state *ss, siginfo_t *si);
--
--#ifndef SIGNAL_DISPATCH_ENTRY
--#define SIGNAL_DISPATCH_ENTRY
--#endif
--
--#ifndef SIGNAL_DISPATCH_EXIT
--#define SIGNAL_DISPATCH_EXIT
--#endif
--\f
--/* When a thread calls sigwait and a requested signal is not pending,
--   it allocates the following structure, fills it in, adds it to
--   sigwaiters and sleeps.  */
--struct sigwaiter
--{
--  struct sigwaiter *next;
--  struct sigwaiter *prev;
--
--  /* Thread's signal state.  */
--  struct signal_state *ss;
--
--  /* Signals this thread is waiting for.  */
--  sigset_t signals;
--
--  /* The selected signal is returned here.  The waiter also
--     futex_waits on this info.si_signo.  */
--  siginfo_t info;
--};
--
--/* This variable is protected by SIG_LOCK.  */
--extern struct sigwaiter *sigwaiters;
--
--/* Block the caller waiting for a signal in set SET.  SIG_LOCK and
--   SS->LOCK must be held and will be unlocked by this function before
--   blocking.  */
--extern siginfo_t sigwaiter_block (struct signal_state *ss,
--				  const sigset_t *restrict set);
--
--/* Unblock the waiter WAITER.  SIG_LOCK and WAITER->SS->LOCK must be
--   held.  Both will be dropped on return.  */
--extern void sigwaiter_unblock (struct sigwaiter *waiter);
--\f
--enum sig_action { sig_core, sig_terminate, sig_ignore, sig_cont, sig_stop };
--
--static inline enum sig_action
--default_action (int signo)
--{
--  switch (signo)
--    {
--    case SIGABRT:
--    case SIGBUS:
--    case SIGFPE:
--    case SIGILL:
--    case SIGQUIT:
--    case SIGSEGV:
--    case SIGSTKFLT:
--    case SIGSYS:
--    case SIGTRAP:
--    case SIGXCPU:
--    case SIGXFSZ:
--      return sig_core;
--
--    case SIGALRM:
--    case SIGHUP:
--    case SIGINT:
--    case SIGIO: /* Perhaps ignore?  */
--    case SIGKILL:
--    case SIGPIPE:
--    case SIGPROF:
--    case SIGTERM:
--    case SIGUSR1:
--    case SIGUSR2:
--    case SIGVTALRM:
--      return sig_terminate;
--
--    case SIGCHLD:
--    case SIGPWR:
--    case SIGURG:
--    case SIGWINCH:
--      return sig_ignore;
--
--    case SIGCONT:
--      return sig_cont;
--
--    case SIGSTOP:
--    case SIGTSTP:
--    case SIGTTIN:
--    case SIGTTOU:
--      return sig_stop;
--    }
--
--  panic ("Unknown signal number: %d", signo);
--}
--
--#endif
-diff --git a/signal/sigaction.c b/signal/sigaction.c
-deleted file mode 100644
-index 0126c99..0000000
---- a/signal/sigaction.c
-+++ /dev/null
-@@ -1,72 +0,0 @@
--/* sigaction.c - Generic sigaction implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--#include "pt-internal.h"
--
--int
--sigaction (int sig, const struct sigaction *restrict sa,
--	   struct sigaction *restrict osa)
--{
--  if (sig <= 0 || sig >= NSIG)
--    {
--      errno = EINVAL;
--      return -1;
--    }
--
--  struct signal_state *ss = &_pthread_self ()->ss;
--
--  pthread_mutex_lock (&ss->lock);
--
--  if (osa)
--    *osa = ss->actions[sig - 1];
--
--  if (sa)
--    {
--      ss->actions[sig - 1] = *sa;
--
--      /* "The SIGKILL and SIGSTOP signals shall not be added to the
--	 signal mask using this mechanism; this restriction shall be
--	 enforced by the system without causing an error to be
--	 indicated" (sigaction).  */
--      sigdelset (&ss->blocked, SIGKILL);
--      sigdelset (&ss->blocked, SIGSTOP);
--
--      /* A "signal shall remain pending on the process until it is
--	 unblocked, it is accepted when ..., or the action associated
--	 with it is set to ignore the signal"  (2.4.1).
--
--         "Setting a signal action to SIG_DFL for a signal that is
--         pending, and whose default action is to ignore the signal,
--         ..., shall cause the pending signal to be discarded, whether
--         or not it is blocked" (2.4.3).  */
--      if (sa->sa_handler == SIG_IGN
--	  || (sa->sa_handler == SIG_DFL && default_action (sig) == sig_ignore))
--	{
--	  sigdelset (&ss->pending, sig);
--	  sigdelset (&process_pending, sig);
--	}
--    }
--
--  pthread_mutex_unlock (&ss->lock);
--
--  return 0;
--}
--
-diff --git a/signal/sigaltstack.c b/signal/sigaltstack.c
-deleted file mode 100644
-index 8334811..0000000
---- a/signal/sigaltstack.c
-+++ /dev/null
-@@ -1,69 +0,0 @@
--/* sigaltstack.c - Generic sigaltstack implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--#include "pt-internal.h"
--
--int
--sigaltstack (const stack_t *restrict stack, stack_t *restrict old)
--{
--  int err = 0;
--  struct signal_state *ss = &_pthread_self ()->ss;
--
--  pthread_mutex_lock (&ss->lock);
--
--  if (old)
--    *old = ss->stack;
--
--  if (stack)
--    {
--      if (stack->ss_size < MINSIGSTKSZ)
--	{
--	  err = ENOMEM;
--	  goto out;
--	}
--
--      if ((stack->ss_flags & ~(SS_DISABLE)))
--	/* Flags contains a value other than SS_DISABLE.  */
--	{
--	  err = EINVAL;
--	  goto out;
--	}
--
--      if ((ss->stack.ss_flags & SS_ONSTACK))
--	/* Stack in use.  */
--	{
--	  err = EPERM;
--	  goto out;
--	}
--
--      ss->stack = *stack;
--    }
--
-- out:
--  pthread_mutex_unlock (&ss->lock);
--
--  if (err)
--    {
--      errno = err;
--      return -1;
--    }
--  return 0;
--}
-diff --git a/signal/signal-dispatch.c b/signal/signal-dispatch.c
-deleted file mode 100644
-index 40440b7..0000000
---- a/signal/signal-dispatch.c
-+++ /dev/null
-@@ -1,117 +0,0 @@
--/* signal-dispatch.c - Signal dispatcher.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--/* This is the signal handler entry point.  A thread is forced into
--   this state when it receives a signal.  We need to save the thread's
--   state and then invoke the high-level signal dispatcher.  SS->LOCK
--   is locked by the caller.  */
--void
--signal_dispatch (struct signal_state *ss, siginfo_t *si)
--{
--  SIGNAL_DISPATCH_ENTRY;
--
--  int signo = si->si_signo;
--
--  assert (signo > 0 && signo < NSIG);
--  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
--
--  do
--    {
--      if ((sigmask (signo) & STOPSIGS))
--	/* Stop signals clear a pending SIGCONT even if they
--	   are handled or ignored (but not if preempted).  */
--	{
--	  sigdelset (&ss->pending, SIGCONT);
--	  sigdelset (&process_pending, SIGCONT);
--	}
--      else if ((signo == SIGCONT))
--	/* Even if handled or ignored (but not preempted), SIGCONT
--	   clears stop signals and resumes the process.  */
--	{
--	  ss->pending &= ~STOPSIGS;
--	  process_pending &= ~STOPSIGS;
--	}
--
--      void (*handler)(int, siginfo_t *, void *)
--	= ss->actions[signo - 1].sa_sigaction;
--
--      /* Reset to SIG_DFL if requested.  SIGILL and SIGTRAP cannot
--	 be automatically reset when delivered; the system silently
--	 enforces this restriction (sigaction).  */
--      if (ss->actions[signo - 1].sa_flags & SA_RESETHAND
--	  && signo != SIGILL && signo != SIGTRAP)
--	ss->actions[signo - 1].sa_handler = SIG_DFL;
--
--      sigset_t orig_blocked = ss->blocked;
--      /* Block requested signals while running the handler.  */
--      ss->blocked |= ss->actions[signo - 1].sa_mask;
--
--      /* Block SIGNO unless we're asked not to.  */
--      if (! (ss->actions[signo - 1].sa_flags & (SA_RESETHAND | SA_NODEFER)))
--	sigaddset (&ss->blocked, signo);
--
--      sigdelset (&ss->pending, signo);
--      pthread_mutex_unlock (&ss->lock);
--
--      pthread_mutex_lock (&sig_lock);
--      sigdelset (&process_pending, signo);
--      pthread_mutex_unlock (&sig_lock);
--
--      if (handler == (void *) SIG_DFL)
--	{
--	  enum sig_action action = default_action (signo);
--
--	  if (action == sig_terminate || action == sig_core)
--	    _exit (128 + signo);
--
--	  if (action == sig_stop)
--	    /* XXX: Implement me.  */
--	    panic ("Stopping process unimplemented.");
--
--	  if (action == sig_cont)
--	    /* XXX: Implement me.  */;
--	    panic ("Continuing process unimplemented.");
--	}
--      else if (handler == (void *) SIG_IGN)
--	;
--      else
--	handler (signo, si, NULL);
--
--      pthread_mutex_lock (&ss->lock);
--
--      /* "When a thread's signal mask is changed in a signal-catching
--	 function that is installed by sigaction(), the restoration of
--	 the signal mask on return from the signal-catching function
--	 overrides that change (see sigaction())" (sigprocmask).  */
--      ss->blocked = orig_blocked;
--
--      sigset_t pending = ~ss->blocked & ss->pending;
--      if (! pending)
--	pending = ~ss->blocked & process_pending;
--      signo = l4_lsb64 (pending);
--    }
--  while (signo);
--
--  pthread_mutex_unlock (&ss->lock);
--
--  SIGNAL_DISPATCH_EXIT;
--}
-diff --git a/signal/signal.h b/signal/signal.h
-deleted file mode 100644
-index 6e22d05..0000000
---- a/signal/signal.h
-+++ /dev/null
-@@ -1,275 +0,0 @@
--/* signal.h - Signal handling interface.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#ifndef _SIGNAL_H
--#define _SIGNAL_H 1
--
--#include <stdint.h>
--#include <sys/types.h>
--
--typedef volatile int sig_atomic_t;
--\f
--/*typedef uint64_t sigset_t;*/
--
--int sigaddset (sigset_t *, int);
--int sigdelset (sigset_t *, int);
--int sigemptyset (sigset_t *);
--int sigfillset (sigset_t *);
--int sigismember (const sigset_t *, int);
--\f
--/* These values are consistent with Linux.  */
--#define SIGRTMIN 34
--#define SIGRTMAX 64
--
--enum
--  {
--    SIGHUP = 1,
--#define SIGHUP SIGHUP
--    SIGINT,
--#define SIGINT SIGINT
--    SIGQUIT,
--#define SIGQUIT SIGQUIT
--    SIGILL,
--#define SIGILL SIGILL
--    SIGTRAP,
--#define SIGTRAP SIGTRAP
--    SIGABRT,
--#define SIGABRT SIGABRT
--    SIGBUS,
--#define SIGBUS SIGBUS
--    SIGFPE,
--#define SIGFPE SIGFPE
--    SIGKILL,
--#define SIGKILL SIGKILL
--    SIGUSR1,
--#define SIGUSR1 SIGUSR1
--    SIGSEGV,
--#define SIGSEGV SIGSEGV
--    SIGUSR2,
--#define SIGUSR2 SIGUSR2
--    SIGPIPE,
--#define SIGPIPE SIGPIPE
--    SIGALRM,
--#define SIGALRM SIGALRM
--    SIGTERM,
--#define SIGTERM SIGTERM
--    SIGSTKFLT,
--#define SIGSTKFLT SIGSTKFLT
--    SIGCHLD,
--#define SIGCHLD SIGCHLD
--    SIGCONT,
--#define SIGCONT SIGCONT
--    SIGSTOP,
--#define SIGSTOP SIGSTOP
--    SIGTSTP,
--#define SIGTSTP SIGTSTP
--    SIGTTIN,
--#define SIGTTIN SIGTTIN
--    SIGTTOU,
--#define SIGTTOU SIGTTOU
--    SIGURG,
--#define SIGURG SIGURG
--    SIGXCPU,
--#define SIGXCPU SIGXCPU
--    SIGXFSZ,
--#define SIGXFSZ SIGXFSZ
--    SIGVTALRM,
--#define SIGVTALRM SIGVTALRM
--    SIGPROF,
--#define SIGPROF SIGPROF
--    SIGWINCH,
--#define SIGWINCH SIGWINCH
--    SIGIO,
--#define SIGIO SIGIO
--    SIGPWR,
--#define SIGPWR SIGPWR
--    SIGSYS,
--#define SIGSYS SIGSYS
--    NSIG
--  };
--\f
--/* The resulting set is the union of the current set and the signal
--   set pointed to by the argument set.  */
--#define SIG_BLOCK 1
--/* The resulting set is the intersection of the current set and the
--   complement of the signal set pointed to by the argument set.  */
--#define SIG_UNBLOCK 2
--/* The resulting set is the signal set pointed to by the argument
--   set.  */
--#define SIG_SETMASK 3
--
--int pthread_sigmask (int how, const sigset_t *mask, sigset_t *old);
--int sigprocmask (int how, const sigset_t *restrict mask,
--		 sigset_t *restrict old);
--
--/* Return set of pending signals.  */
--int sigpending(sigset_t *set);
--\f
--union sigval
--{
--  int sival_int;
--  void *sival_ptr;
--};
--\f
--#define SIG_DFL ((void (*)(int)) (0))
--#define SIG_ERR ((void (*)(int)) (-1))
--#define SIG_IGN ((void (*)(int)) (1))
--
--/* Causes signal delivery to occur on an alternate stack.  */
--#define SA_ONSTACK (1 << 0)
--/* Do not generate SIGCHLD when children stop or stopped children
--   continue.  */
--#define SA_NOCLDSTOP (1 << 1)
--/* Causes signal dispositions to be set to SIG_DFL on entry to signal
--   handlers.  */
--#define SA_RESETHAND (1 << 2)
--/* Causes certain functions to become restartable.  */
--#define SA_RESTART (1 << 3)
--/* Causes extra information to be passed to signal handlers at the
--   time of receipt of a signal.  */
--#define SA_SIGINFO (1 << 4)
--/* Causes implementations not to create zombie processes on child
--   death.  */
--#define SA_NOCLDWAIT (1 << 5)
--/* Causes signal not to be automatically blocked on entry to
--   signal handler.  */
--#define SA_NODEFER (1 << 6)
--
--typedef struct
--{
--  int si_signo;
--  int si_code;
--  int si_errno;
--  pid_t si_pid;
--  uid_t si_uid;
--  void *si_addr;
--  int si_status;
--  long si_band;
--  union sigval si_value;
--} siginfo_t;
--
--struct sigaction
--{
--  union
--  {
--    /* Pointer to a signal-catching function or one of the macros
--       SIG_IGN or SIG_DFL.  */
--    void (*sa_handler)(int);
--                   
--    /* Pointer to a signal-catching function.  */
--    void (*sa_sigaction)(int, siginfo_t *, void *);
--  };
--
--  /* Set of signals to be blocked during execution of the signal
--     handling function.  */
--  sigset_t sa_mask;
--
--  /* Special flags.  */
--  int sa_flags;
--};
--
--int sigaction (int signo, const struct sigaction *restrict newaction,
--	       struct sigaction *restrict oldaction);
--
--void (*signal (int signo, void (*handler)(int)))(int);
--void (*bsd_signal (int signo, void (*handler)(int)))(int);
--\f
--/* Process is executing on an alternate signal stack.  */
--#define SS_ONSTACK (1 << 0)
--/* Alternate signal stack is disabled.  */
--#define SS_DISABLE (1 << 1)
--
--/* Minimum stack size for a signal handler.  */
--#define MINSIGSTKSZ PAGESIZE
--/* Default size in bytes for the alternate signal stack. */
--#define SIGSTKSZ (16 * PAGESIZE)
--
--typedef struct
--{
--  void *ss_sp;
--  size_t ss_size;
--  int ss_flags;
--} stack_t;
--
--int sigaltstack(const stack_t *restrict stack, stack_t *restrict old);
--\f
--#include <pthread.h>
--
--/* Send SIGNO to the process PID.  */
--int kill(pid_t pid, int signo);
--
--/* Send SIGNO to the process group PG.  */
--int killpg(pid_t pg, int signo);
--
--/* Send SIGNO to thread TID.  */
--int pthread_kill(pthread_t tid, int signo);
--
--/* Send a signal to thread TID using SIGINFO.  */
--int pthread_kill_siginfo_np (pthread_t tid, siginfo_t siginfo);
--
--/* Send SIGNO to the calling thread.  */
--int raise(int signo);
--\f
--typedef struct sigevent
--{
--  /* Notification type.  */
--  int sigev_notify;
--
--  /* Signal number.  */
--  int sigev_signo;
--
--  /* Signal value.  */
--  union sigval sigev_value;
--
--  /* Notification function.  */
--  void (*sigev_notify_function) (union sigval);
--
--  /* Notification attributes.  */
--  pthread_attr_t *sigev_notify_attributes;
--} sigevent_t;
--
--enum
--  {
--    SIGEV_NONE = 0,
--#define SIGEV_NONE SIGEV_NONE
--    SIGEV_SIGNAL,
--#define SIGEV_SIGNAL SIGEV_SIGNAL
--    SIGEV_THREAD
--#define SIGEV_THREAD SIGEV_THREAD
--  };
--\f
--#define SIG_HOLD
--
--int sighold (int);
--int sigignore (int);
--int siginterrupt (int, int);
--int sigpause (int);
--int sigqueue (pid_t, int, const union sigval);
--int sigrelse (int);
--void (*sigset (int, void (*)(int)))(int);
--int sigsuspend (const sigset_t *);
--\f
--/* Wait for a signal.  */
--int sigwait (const sigset_t *restrict set, int *restrict signo);
--int sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info);
--int sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
--		  const struct timespec *restrict timespec);
--
--#endif
-diff --git a/signal/sigpending.c b/signal/sigpending.c
-deleted file mode 100644
-index 609b55d..0000000
---- a/signal/sigpending.c
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* sigpending.c - Generic sigpending implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include <sig-internal.h>
--#include <pt-internal.h>
--
--int
--sigpending (sigset_t *set)
--{
--  struct signal_state *ss = &_pthread_self ()->ss;
--
--  pthread_mutex_lock (&ss->lock);
--
--  /* There is no need to lock SIG_LOCK for process_pending since we
--     just read it, which is atomic.  */
--  *set = (ss->pending | process_pending) & ss->blocked;
--
--  pthread_mutex_unlock (&ss->lock);
--
--  return 0;
--}
-diff --git a/signal/sigsuspend.c b/signal/sigsuspend.c
-deleted file mode 100644
-index 73cf12a..0000000
---- a/signal/sigsuspend.c
-+++ /dev/null
-@@ -1,29 +0,0 @@
--/* sigsuspend.c - Generic sigsuspend implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--int
--sigsuspend (const sigset_t *set)
--{
--  /* XXX: Implement me.  */
--  errno = EOPNOTSUPP;
--  return -1;
--}
-diff --git a/signal/sigtimedwait.c b/signal/sigtimedwait.c
-deleted file mode 100644
-index 52cd017..0000000
---- a/signal/sigtimedwait.c
-+++ /dev/null
-@@ -1,30 +0,0 @@
--/* sigtimedwait.c - Generic sigtimedwait implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--int
--sigtimedwait (const sigset_t *restrict set, siginfo_t *restrict info,
--	      const struct timespec *restrict timeout)
--{
--  errno = EOPNOTSUPP;
--  return -1;
--}
--
-diff --git a/signal/sigwaiter.c b/signal/sigwaiter.c
-deleted file mode 100644
-index 8d041ac..0000000
---- a/signal/sigwaiter.c
-+++ /dev/null
-@@ -1,91 +0,0 @@
--/* sigwaiter.c - Signal handling functions.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include "sig-internal.h"
--
--#include <hurd/futex.h>
--
--struct sigwaiter *sigwaiters;
--
--siginfo_t
--sigwaiter_block (struct signal_state *ss, const sigset_t *restrict set)
--{
--  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
--  assert (pthread_mutex_trylock (&ss->lock) == EBUSY);
--
--  assert (! ss->sigwaiter);
--
--  struct sigwaiter waiter;
--
--  waiter.next = sigwaiters;
--  if (waiter.next)
--    {
--      assert (! waiter.next->prev);
--      waiter.next->prev = &waiter;
--    }
--  waiter.prev = 0;
--  sigwaiters = &waiter;
--
--  waiter.ss = ss;
--  waiter.info.si_signo = 0;
--  waiter.signals = *set;
--
--  ss->sigwaiter = &waiter;
--
--  pthread_mutex_unlock (&ss->lock);
--  pthread_mutex_unlock (&sig_lock);
--
--  futex_wait (&waiter.info.si_signo, 0);
--
--#ifndef NDEBUG
--  pthread_mutex_lock (&ss->lock);
--  ss->sigwaiter = 0;
--  pthread_mutex_unlock (&ss->lock);
--#endif
--
--  assert (waiter.info.si_signo);
--  return waiter.info;
--}
--
--void
--sigwaiter_unblock (struct sigwaiter *waiter)
--{
--  assert (pthread_mutex_trylock (&sig_lock) == EBUSY);
--  assert (pthread_mutex_trylock (&waiter->ss->lock) == EBUSY);
--
--  struct sigwaiter *prev = waiter->prev;
--  struct sigwaiter *next = waiter->next;
--
--  if (next)
--    next->prev = prev;
--
--  if (prev)
--    prev->next = next;
--  else
--    sigwaiters = next;
--
--  sigdelset (&process_pending, waiter->info.si_signo);
--  sigdelset (&waiter->ss->pending, waiter->info.si_signo);
--
--  pthread_mutex_unlock (&waiter->ss->lock);
--  pthread_mutex_unlock (&sig_lock);
--
--  futex_wake (&waiter->info.si_signo, 1);
--}
-diff --git a/signal/sigwaitinfo.c b/signal/sigwaitinfo.c
-deleted file mode 100644
-index 1b47079..0000000
---- a/signal/sigwaitinfo.c
-+++ /dev/null
-@@ -1,74 +0,0 @@
--/* sigwaitinfo.c - Generic sigwaitinfo implementation.
--   Copyright (C) 2008 Free Software Foundation, Inc.
--   Written by Neal H. Walfield <neal@gnu.org>.
--
--   This file is part of the GNU Hurd.
--
--   The GNU Hurd is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public License
--   as published by the Free Software Foundation; either version 3 of
--   the License, or (at your option) any later version.
--
--   The GNU Hurd 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with this program.  If not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include <sig-internal.h>
--#include <pt-internal.h>
--
--int
--sigwaitinfo (const sigset_t *restrict set, siginfo_t *restrict info)
--{
--  pthread_mutex_lock (&sig_lock);
--
--  struct signal_state *ss = &_pthread_self ()->ss;
--
--  pthread_mutex_lock (&ss->lock);
--
--  if ((process_pending & *set) || (ss->pending & *set))
--    /* There is at least one signal pending.  */
--    {
--      bool local = true;
--      sigset_t extant = process_pending & *set;
--      if (! extant)
--	{
--	  local = false;
--	  extant = ss->pending & *set;
--	}
--
--      assert (extant);
--
--      int signo = l4_msb64 (extant);
--
--      if (info)
--	{
--	  if (local)
--	    *info = ss->info[signo - 1];
--	  else
--	    *info = process_pending_info[signo - 1];
--	  info->si_signo = signo;
--	}
--
--      sigdelset (&process_pending, signo);
--      sigdelset (&ss->pending, signo);
--
--      pthread_mutex_unlock (&ss->lock);
--      pthread_mutex_unlock (&sig_lock);
--      return 0;
--    }
--
--  siginfo_t i = sigwaiter_block (ss, set);
--  assert (i.si_signo);
--  assert ((sigmask (i.si_signo) & *set));
--
--  if (info)
--    *info = i;
--
--  return 0;
--}
--
--- 
-1.9.0
 
-From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
+From 3efea8fcd703838e110ca1d98dcda54ac407e4cb Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Thu, 27 Mar 2014 00:21:36 +0000
-Subject: [PATCH 1/2] This helps to integrate libpthread as a glibc module.
+Date: Sun, 30 Mar 2014 20:47:54 +0000
+Subject: [PATCH 5/6] fix
 
 ---
- configure | 2 ++
- 1 file changed, 2 insertions(+)
- create mode 100644 configure
+ sysdeps/mach/hurd/pt-sigstate.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
 
-diff --git a/configure b/configure
-new file mode 100644
-index 0000000..2cdbc71
---- /dev/null
-+++ b/configure
-@@ -0,0 +1,2 @@
-+libc_add_on_canonical=libpthread
-+libc_add_on_subdirs=.
-\ No newline at end of file
+diff --git a/sysdeps/mach/hurd/pt-sigstate.c b/sysdeps/mach/hurd/pt-sigstate.c
+index 68c79c5..d3f4368 100644
+--- a/sysdeps/mach/hurd/pt-sigstate.c
++++ b/sysdeps/mach/hurd/pt-sigstate.c
+@@ -21,6 +21,7 @@
+ #include <assert.h>
+ #include <signal.h>
+ #include <hurd/signal.h>
++#include <hurd/msg.h>
+ 
+ #include <pt-internal.h>
+ 
+@@ -31,11 +32,12 @@ __pthread_sigstate (struct __pthread *thread, int how,
+ {
+   error_t err = 0;
+   struct hurd_sigstate *ss;
++  sigset_t pending;
+ 
+   ss = _hurd_thread_sigstate (thread->kernel_thread);
+   assert (ss);
+ 
+-  __pthread_spin_lock (&ss->lock);
++  _hurd_sigstate_lock (ss);
+ 
+   if (oset)
+     *oset = ss->blocked;
+@@ -63,7 +65,13 @@ __pthread_sigstate (struct __pthread *thread, int how,
+   if (! err && clear_pending)
+     __sigemptyset (&ss->pending);
+ 
+-  __pthread_spin_unlock (&ss->lock);
++  pending = _hurd_sigstate_pending (ss) & ~ss->blocked;
++  _hurd_sigstate_unlock (ss);
++  
++  if (! err && pending)
++    /* Send a message to the signal thread so it
++       will wake up and check for pending signals.  */
++    __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ());
+ 
+   return err;
+ }
 -- 
 1.9.0
 
 
-From 7f5f718b4a231c1e08d9ed1676cb18e265b715d6 Mon Sep 17 00:00:00 2001
+From 9b364debeebf32cd97fd619ff77334f089816aa8 Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sat, 29 Mar 2014 23:29:44 +0000
-Subject: [PATCH 2/2] fix
+Date: Sun, 30 Mar 2014 22:43:07 +0000
+Subject: [PATCH 6/6] Defines missing macro
 
 ---
- signal/signal.h | 2 +-
+ sysdeps/mach/bits/spin-lock.h | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/signal/signal.h b/signal/signal.h
-index a33d995..6e22d05 100644
---- a/signal/signal.h
-+++ b/signal/signal.h
-@@ -26,7 +26,7 @@
+diff --git a/sysdeps/mach/bits/spin-lock.h b/sysdeps/mach/bits/spin-lock.h
+index 537dac9..4f2ae4c 100644
+--- a/sysdeps/mach/bits/spin-lock.h
++++ b/sysdeps/mach/bits/spin-lock.h
+@@ -30,7 +30,7 @@ typedef __spin_lock_t __pthread_spinlock_t;
  
- typedef volatile int sig_atomic_t;
- \f
--typedef uint64_t sigset_t;
-+/*typedef uint64_t sigset_t;*/
+ /* Initializer for a spin lock object.  */
+ #ifndef __PTHREAD_SPIN_LOCK_INITIALIZER
+-#error __PTHREAD_SPIN_LOCK_INITIALIZER undefined: should be defined by <lock-intern.h>.
++#define __PTHREAD_SPIN_LOCK_INITIALIZER ((__pthread_spinlock_t) 0)
+ #endif
  
- int sigaddset (sigset_t *, int);
- int sigdelset (sigset_t *, int);
+ __END_DECLS
 -- 
 1.9.0
 
-- 
1.9.0


From be2de82f2f60a13f9e056c0d628707ce684d296e Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Wed, 2 Apr 2014 00:59:36 +0000
Subject: [PATCH 16/18] Some modifications to the patches

---
 gnu-system.am                                      |   4 +
 gnu/packages/base.scm                              |  10 +-
 gnu/packages/cross-base.scm                        |   2 +-
 ...libc-2.17.90-bdb7a1-create-gnumach-header.patch |  36 ++++
 .../glibc-2.17.90-bdb7a1-pthread-posix.patch       | 166 +++++++++++++++
 .../libpthread-0.3-3b391d-glibc-preparation.patch  | 235 ++-------------------
 6 files changed, 239 insertions(+), 214 deletions(-)
 create mode 100644 gnu/packages/patches/glibc-2.17.90-bdb7a1-create-gnumach-header.patch
 create mode 100644 gnu/packages/patches/glibc-2.17.90-bdb7a1-pthread-posix.patch

diff --git a/gnu-system.am b/gnu-system.am
index 14cccea..c8b637a 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -278,6 +278,9 @@ dist_patch_DATA =						\
   gnu/packages/patches/glibc-bootstrap-system.patch		\
   gnu/packages/patches/glibc-ldd-x86_64.patch			\
   gnu/packages/patches/glibc-make-4.0.patch			\
+  gnu/packages/patches/glibc-2.17.90-bdb7a1-create-gnumach-header.patch\
+  gnu/packages/patches/glibc-2.17.90-bdb7a1-pthread-posix.patch	\
+  gnu/packages/patches/glibc-lock.patch				\
   gnu/packages/patches/gnunet-fix-scheduler.patch		\
   gnu/packages/patches/gnunet-fix-tests.patch    		\
   gnu/packages/patches/gobject-introspection-cc.patch		\
@@ -301,6 +304,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/libtool-skip-tests.patch			\
   gnu/packages/patches/libtool-skip-tests-for-mips.patch	\
   gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch\
+  gnu/packages/patches/libpthread_hurd_clean.patch		\
   gnu/packages/patches/luit-posix.patch				\
   gnu/packages/patches/m4-gets-undeclared.patch			\
   gnu/packages/patches/m4-readlink-EINVAL.patch			\
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index bc57bd0..9c4264b 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -35,6 +35,7 @@
   #:use-module (guix git-download)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages hurd)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages linux)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -510,9 +511,13 @@ with the Linux kernel.")
            (native-inputs
             `(
               ("patch/glibc-make" ,(search-patch "glibc-make-4.0.patch"))
+              ("patch/glibc-create-gnumach" ,(search-patch "glibc-2.17.90-bdb7a1-create-gnumach-header.patch"))
+              ("patch/glibc-pthread" ,(search-patch "glibc-2.17.90-bdb7a1-pthread-posix.patch"))
               ("patch/libpthread-patch" ,(search-patch "libpthread-0.3-3b391d-glibc-preparation.patch"))
+              ("patch/glibc-lock-patch" ,(search-patch "glibc-lock.patch"))
               ("mig" ,mig)
               ("perl" ,perl)
+              ("bison" ,bison)
               ("autoconf" ,(autoconf-wrapper autoconf-2.68))
               ("automake" ,automake)
               ("libtool" ,libtool)
@@ -530,7 +535,7 @@ with the Linux kernel.")
            (arguments
             `(#:out-of-source? #t
               #:configure-flags
-              (list ;;"LDFLAGS=-m32"
+              (list ;;"LDFLAGS=-DEBUG"
                     "--without-cvs"
                     "--enable-add-ons"
                     "--host=i686-pc-gnu"
@@ -556,6 +561,9 @@ with the Linux kernel.")
                         'autoconf 'apply-patch 
                         (lambda _ 
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-make")))
+                          (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-create-gnumach")))
+                          (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-pthread")))
+                          ;;(zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-lock-patch")))
                           (chdir "libpthread")
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/libpthread-patch")))
                           (chdir "..")
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 7e74c11..8053599 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -497,7 +497,7 @@ XBINUTILS and the cross tool chain."
 
     (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)
                          ("cross-hurd-headers" ,xhurd-headers)
-                         ("cross-hurd-minimal" ,xhurd-minimal)))
+                         ("cross--minimal" ,xhurd-minimal)))
 
     (native-inputs `(("cross-gcc" ,xgcc-i686-pc-gnu)
                      ("cross-binutils" ,xbinutils)
diff --git a/gnu/packages/patches/glibc-2.17.90-bdb7a1-create-gnumach-header.patch b/gnu/packages/patches/glibc-2.17.90-bdb7a1-create-gnumach-header.patch
new file mode 100644
index 0000000..b7fc7d0
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.17.90-bdb7a1-create-gnumach-header.patch
@@ -0,0 +1,36 @@
+This generates <mach/gnumach.h> and some object files that are required to
+succesfully build libpthread.
+
+--- mach/Makefile
++++ mach/Makefile
+@@ -111,7 +111,7 @@ ifndef mach-shortcuts
+ # $(mach-shortcuts) will be set, and that will change how
+ # mach_interface.defs is processed: it will get the -D flags below.
+ user-interfaces := $(filter-out $(mach-interface-list:%=mach/%) \
+-				mach/mach_port mach/mach_host mach/mach4 \
++				mach/mach_port mach/mach_host mach/mach4 mach/gnumach \
+ 				device/device_request,\
+ 				$(user-interfaces))
+ endif
+--- sysdeps/mach/configure
++++ sysdeps/mach/configure
+@@ -277,7 +277,7 @@ if test $libc_cv_mach_task_creation_time = no; then
+ fi
+ 
+ mach_interface_list=
+-for ifc in mach mach4 \
++for ifc in mach mach4 gnumach \
+ 	   clock clock_priv host_priv host_security ledger lock_set \
+ 	   processor processor_set task thread_act vm_map \
+ 	   memory_object memory_object_default default_pager \
+--- sysdeps/mach/configure.in
++++ sysdeps/mach/configure.in
+@@ -54,7 +54,7 @@ dnl but we don't do a check for that here because in a bare
+ dnl environment the compile against those headers will fail.
+ dnl
+ mach_interface_list=
+-for ifc in mach mach4 \
++for ifc in mach mach4 gnumach \
+ 	   clock clock_priv host_priv host_security ledger lock_set \
+ 	   processor processor_set task thread_act vm_map \
+ 	   memory_object memory_object_default default_pager \
diff --git a/gnu/packages/patches/glibc-2.17.90-bdb7a1-pthread-posix.patch b/gnu/packages/patches/glibc-2.17.90-bdb7a1-pthread-posix.patch
new file mode 100644
index 0000000..594b913
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.17.90-bdb7a1-pthread-posix.patch
@@ -0,0 +1,166 @@
+Even if glibc doesn't have an integrated pthread library, it depends on the hurd
+packages which have a pthread library, so we should provide all the defines etc.
+
+Avoid letting glibc try to install its own headers for libpthread.
+
+No topgit branch, TODO?
+
+---
+
+Note that this also tacks on some versioning information at the end.
+
+ sysdeps/mach/hurd/Makefile         |    4 +++
+ sysdeps/mach/hurd/bits/posix_opt.h |   40 ++++++++++++++++++++++-----------
+ sysdeps/mach/hurd/gai_misc.h       |   44 +++++++++++++++++++++++++++++++++++++
+ 3 files changed, 75 insertions(+), 13 deletions(-)
+
+--- a/sysdeps/mach/hurd/bits/posix_opt.h
++++ b/sysdeps/mach/hurd/bits/posix_opt.h
+@@ -71,24 +71,38 @@
+ /* XPG4.2 shared memory is supported.  */
+ #define _XOPEN_SHM      1
+ 
+-/* We do not have the POSIX threads interface.  */
+-#define _POSIX_THREADS	-1
++/* Tell we have POSIX threads.  */
++#define _POSIX_THREADS	200112L
+ 
+ /* We have the reentrant functions described in POSIX.  */
+ #define _POSIX_REENTRANT_FUNCTIONS      1
+ #define _POSIX_THREAD_SAFE_FUNCTIONS	200809L
+ 
+-/* These are all things that won't be supported when _POSIX_THREADS is not.  */
++/* We do not provide priority scheduling for threads.  */
+ #define _POSIX_THREAD_PRIORITY_SCHEDULING	-1
+-#define _POSIX_THREAD_ATTR_STACKSIZE		-1
+-#define _POSIX_THREAD_ATTR_STACKADDR		-1
++
++/* We support user-defined stack sizes.  */
++#define _POSIX_THREAD_ATTR_STACKSIZE	200112L
++
++/* We support user-defined stacks.  */
++#define _POSIX_THREAD_ATTR_STACKADDR	200112L
++
++/* We do not support priority inheritence.  */
+ #define _POSIX_THREAD_PRIO_INHERIT		-1
++
++/* We do not support priority protection.  */
+ #define _POSIX_THREAD_PRIO_PROTECT		-1
++
+ #ifdef __USE_XOPEN2K8
++/* We do not support priority inheritence for robust mutexes.  */
+ # define _POSIX_THREAD_ROBUST_PRIO_INHERIT	-1
++
++/* We do not support priority protection for robust mutexes.  */
+ # define _POSIX_THREAD_ROBUST_PRIO_PROTECT	-1
+ #endif
+-#define _POSIX_SEMAPHORES			-1
++
++/* We support POSIX.1b semaphores.  */
++#define _POSIX_SEMAPHORES			200112L
+ 
+ /* Real-time signals are not yet supported.  */
+ #define _POSIX_REALTIME_SIGNALS	-1
+@@ -121,17 +135,17 @@
+ /* GNU libc provides regular expression handling.  */
+ #define _POSIX_REGEXP	1
+ 
+-/* Reader/Writer locks are not available.  */
+-#define _POSIX_READER_WRITER_LOCKS	-1
++/* Reader/Writer locks are available.  */
++#define _POSIX_READER_WRITER_LOCKS	200112L
+ 
+ /* We have a POSIX shell.  */
+ #define _POSIX_SHELL	1
+ 
+-/* We cannot support the Timeouts option without _POSIX_THREADS.  */
+-#define _POSIX_TIMEOUTS	-1
++/* We support the Timeouts option.  */
++#define _POSIX_TIMEOUTS	200112L
+ 
+-/* We do not support spinlocks.  */
+-#define _POSIX_SPIN_LOCKS	-1
++/* We support spinlocks.  */
++#define _POSIX_SPIN_LOCKS	200112L
+ 
+ /* The `spawn' function family is supported.  */
+ #define _POSIX_SPAWN	200809L
+@@ -140,7 +154,7 @@
+ #define _POSIX_TIMERS	0
+ 
+ /* The barrier functions are not available.  */
+-#define _POSIX_BARRIERS	-1
++#define _POSIX_BARRIERS	200112L
+ 
+ /* POSIX message queues could be available in future.  */
+ #define	_POSIX_MESSAGE_PASSING	0
+--- a/sysdeps/mach/hurd/Makefile
++++ b/sysdeps/mach/hurd/Makefile
+@@ -167,6 +167,10 @@
+ CFLAGS-dl-load.c = -DEXTERNAL_MAP_FROM_FD
+ endif
+ 
++ifeq ($(subdir),posix)
++CFLAGS-confstr.c += -DLIBPTHREAD_VERSION='"libpthread 0.3"'
++endif
++
+ # Override the generic Makeconfig values so we link against the RPC libs.
+ link-libc-static := -Wl,--start-group \
+ 		    $(patsubst %,$(common-objpfx)%.a,\
+--- /dev/null
++++ b/sysdeps/mach/hurd/gai_misc.h
+@@ -0,0 +1,44 @@
++#include <signal.h>
++#include <pthread.h>
++
++#define gai_start_notify_thread __gai_start_notify_thread
++#define gai_create_helper_thread __gai_create_helper_thread
++
++extern inline void
++__gai_start_notify_thread (void)
++{
++  sigset_t ss;
++  sigemptyset (&ss);
++  sigprocmask(SIG_SETMASK, &ss, NULL);
++}
++
++extern inline int
++__gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *),
++			    void *arg)
++{
++  pthread_attr_t attr;
++
++  /* Make sure the thread is created detached.  */
++  pthread_attr_init (&attr);
++  pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
++
++  /* The helper thread needs only very little resources.  */
++  (void) pthread_attr_setstacksize (&attr, 0x10000);
++
++  /* Block all signals in the helper thread.  To do this thoroughly we
++     temporarily have to block all signals here.  */
++  sigset_t ss;
++  sigset_t oss;
++  sigfillset (&ss);
++  sigprocmask(SIG_SETMASK, &ss, &oss);
++
++  int ret = pthread_create (threadp, &attr, tf, arg);
++
++  /* Restore the signal mask.  */
++  sigprocmask(SIG_SETMASK, &oss, NULL);
++
++  (void) pthread_attr_destroy (&attr);
++  return ret;
++}
++
++#include_next <gai_misc.h>
+--- a/Versions.def
++++ b/Versions.def
+@@ -102,6 +102,7 @@ libpthread {
+   GLIBC_2.6
+   GLIBC_2.11
+   GLIBC_2.12
++  GLIBC_2.17
+   GLIBC_PRIVATE
+ }
+ libresolv {
diff --git a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
index c37eb0a..b26c5ee 100644
--- a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
+++ b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
@@ -1,7 +1,7 @@
 From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Thu, 27 Mar 2014 00:21:36 +0000
-Subject: [PATCH 1/6] This helps to integrate libpthread as a glibc module.
+Subject: [PATCH 1/3] This helps to integrate libpthread as a glibc module.
 
 ---
  configure | 2 ++
@@ -21,36 +21,10 @@ index 0000000..2cdbc71
 1.9.0
 
 
-From 7f5f718b4a231c1e08d9ed1676cb18e265b715d6 Mon Sep 17 00:00:00 2001
+From 75a043e399e536f4f37fe8ab2178e29d2cd0ca82 Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sat, 29 Mar 2014 23:29:44 +0000
-Subject: [PATCH 2/6] fix
-
----
- signal/signal.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/signal/signal.h b/signal/signal.h
-index a33d995..6e22d05 100644
---- a/signal/signal.h
-+++ b/signal/signal.h
-@@ -26,7 +26,7 @@
- 
- typedef volatile int sig_atomic_t;
- \f
--typedef uint64_t sigset_t;
-+/*typedef uint64_t sigset_t;*/
- 
- int sigaddset (sigset_t *, int);
- int sigdelset (sigset_t *, int);
--- 
-1.9.0
-
-
-From b8639799ae3b571eb44edd2b3dec109957393d3e Mon Sep 17 00:00:00 2001
-From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sun, 30 Mar 2014 16:56:09 +0000
-Subject: [PATCH 3/6] These come from the l4 implementation and come in the way
+Date: Tue, 1 Apr 2014 22:49:52 +0000
+Subject: [PATCH 2/3] These come from the l4 implementation and come in the way
  of the glibc Makefiles, drop them.
 
 ---
@@ -1286,7 +1260,7 @@ index 40440b7..0000000
 -}
 diff --git a/signal/signal.h b/signal/signal.h
 deleted file mode 100644
-index 6e22d05..0000000
+index a33d995..0000000
 --- a/signal/signal.h
 +++ /dev/null
 @@ -1,275 +0,0 @@
@@ -1318,7 +1292,7 @@ index 6e22d05..0000000
 -
 -typedef volatile int sig_atomic_t;
 -\f
--/*typedef uint64_t sigset_t;*/
+-typedef uint64_t sigset_t;
 -
 -int sigaddset (sigset_t *, int);
 -int sigdelset (sigset_t *, int);
@@ -1861,191 +1835,28 @@ index 1b47079..0000000
 1.9.0
 
 
-From 6eaedb37037965b99608cb8afbfc934c3396892e Mon Sep 17 00:00:00 2001
-From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sun, 30 Mar 2014 17:23:12 +0000
-Subject: [PATCH 4/6] Revert
-
-commit 69e89a859882e4f675dd5491edc969159d8a4002
-Author: Pino Toscano <toscano.pino@tiscali.it>
-Date:   Sun Apr 22 00:38:26 2012 +0200
-
-    __pthread_timedblock: switch to clock_gettime
-
-    Use `clock_gettime' with the provided clock instead of
-`gettimeofday',
-    linking to rt.
-
-    * sysdeps/mach/pt-timedblock.c (__pthread_timedblock): Switch to
-    `clock_gettime'.
-    * Makefile [!IN_GLIBC] (LDLIBS): Link to rt.
-    [IN_GLIBC] ($(objpfx)libpthread.so): Likewise.
-    * Makefile.am (libpthread_a_LDADD): Likewise.
----
- Makefile                               |  2 --
- sysdeps/generic/pt-condattr-setclock.c | 28 ++++------------------------
- sysdeps/mach/pt-timedblock.c           | 13 +++++++------
- 3 files changed, 11 insertions(+), 32 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 8ef990e..2f45c1c 100644
---- a/Makefile
-+++ b/Makefile
-@@ -216,10 +216,8 @@ VPATH += $(SYSDEP_PATH)
- 
- ifeq ($(IN_GLIBC),no)
- HURDLIBS = ihash
--LDLIBS = -lrt
- else
- LDLIBS-pthread.so = -lihash
--$(objpfx)libpthread.so: $(common-objpfx)rt/librt.so
- endif
- 
- ifeq ($(IN_GLIBC),no)
-diff --git a/sysdeps/generic/pt-condattr-setclock.c b/sysdeps/generic/pt-condattr-setclock.c
-index c5a78ef..c9a9948 100644
---- a/sysdeps/generic/pt-condattr-setclock.c
-+++ b/sysdeps/generic/pt-condattr-setclock.c
-@@ -23,30 +23,10 @@
- int
- pthread_condattr_setclock (pthread_condattr_t *attr, clockid_t clock)
- {
--  /* Only a few clocks are allowed.  CLOCK_REALTIME is always allowed.
--     CLOCK_MONOTONIC only if the kernel has the necessary support.  */
--  if (clock == CLOCK_MONOTONIC)
-+  if (__pthread_default_condattr.clock == clock)
-     {
--      /* Check whether the clock is available.  */
--      static int avail;
--
--      if (avail == 0)
--	{
--	  struct timespec ts;
--	  int res;
--
--	  res = clock_getres (CLOCK_MONOTONIC, &ts);
--	  avail = res < 0 ? -1 : 1;
--	}
--
--      if (avail < 0)
--	/* Not available.  */
--	return EINVAL;
-+      attr->clock = clock;
-+      return 0;
-     }
--  else if (clock != CLOCK_REALTIME)
--    return EINVAL;
--
--  attr->clock = clock;
--
--  return 0;
-+  return EINVAL;
- }
-diff --git a/sysdeps/mach/pt-timedblock.c b/sysdeps/mach/pt-timedblock.c
-index d72ef73..88beaa2 100644
---- a/sysdeps/mach/pt-timedblock.c
-+++ b/sysdeps/mach/pt-timedblock.c
-@@ -36,26 +36,27 @@ __pthread_timedblock (struct __pthread *thread,
-   error_t err;
-   mach_msg_header_t msg;
-   mach_msg_timeout_t timeout;
--  struct timespec now;
-+  struct timeval now;
- 
-   /* We have an absolute time and now we have to convert it to a
-      relative time.  Arg.  */
- 
--  err = clock_gettime (clock_id, &now);
-+  err = gettimeofday(&now, NULL);
-   assert (! err);
- 
-   if (now.tv_sec > abstime->tv_sec
-       || (now.tv_sec == abstime->tv_sec
--	  && now.tv_nsec > abstime->tv_nsec))
-+	  && now.tv_usec > ((abstime->tv_nsec + 999) / 1000)))
-     return ETIMEDOUT;
- 
-   timeout = (abstime->tv_sec - now.tv_sec) * 1000;
- 
--  if (abstime->tv_nsec >= now.tv_nsec)
--    timeout += (abstime->tv_nsec - now.tv_nsec + 999999) / 1000000;
-+  if (((abstime->tv_nsec + 999) / 1000) >= now.tv_usec)
-+    timeout += (((abstime->tv_nsec + 999) / 1000) - now.tv_usec + 999) / 1000;
-   else
-     /* Need to do a carry.  */
--    timeout -= (now.tv_nsec - abstime->tv_nsec + 999999) / 1000000;
-+    timeout -= (now.tv_usec + 999) / 1000 -
-+      ((abstime->tv_nsec + 999999) / 1000000);
- 
-   err = __mach_msg (&msg, MACH_RCV_MSG | MACH_RCV_TIMEOUT, 0,
- 		    sizeof msg, thread->wakeupmsg.msgh_remote_port,
--- 
-1.9.0
-
-
-From 3efea8fcd703838e110ca1d98dcda54ac407e4cb Mon Sep 17 00:00:00 2001
-From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sun, 30 Mar 2014 20:47:54 +0000
-Subject: [PATCH 5/6] fix
-
----
- sysdeps/mach/hurd/pt-sigstate.c | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/sysdeps/mach/hurd/pt-sigstate.c b/sysdeps/mach/hurd/pt-sigstate.c
-index 68c79c5..d3f4368 100644
---- a/sysdeps/mach/hurd/pt-sigstate.c
-+++ b/sysdeps/mach/hurd/pt-sigstate.c
-@@ -21,6 +21,7 @@
- #include <assert.h>
- #include <signal.h>
- #include <hurd/signal.h>
-+#include <hurd/msg.h>
- 
- #include <pt-internal.h>
- 
-@@ -31,11 +32,12 @@ __pthread_sigstate (struct __pthread *thread, int how,
- {
-   error_t err = 0;
-   struct hurd_sigstate *ss;
-+  sigset_t pending;
- 
-   ss = _hurd_thread_sigstate (thread->kernel_thread);
-   assert (ss);
- 
--  __pthread_spin_lock (&ss->lock);
-+  _hurd_sigstate_lock (ss);
- 
-   if (oset)
-     *oset = ss->blocked;
-@@ -63,7 +65,13 @@ __pthread_sigstate (struct __pthread *thread, int how,
-   if (! err && clear_pending)
-     __sigemptyset (&ss->pending);
- 
--  __pthread_spin_unlock (&ss->lock);
-+  pending = _hurd_sigstate_pending (ss) & ~ss->blocked;
-+  _hurd_sigstate_unlock (ss);
-+  
-+  if (! err && pending)
-+    /* Send a message to the signal thread so it
-+       will wake up and check for pending signals.  */
-+    __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ());
- 
-   return err;
- }
--- 
-1.9.0
-
-
-From 9b364debeebf32cd97fd619ff77334f089816aa8 Mon Sep 17 00:00:00 2001
+From 822891596a11a55e559aaa5e4d4d1324ad066bdf Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
-Date: Sun, 30 Mar 2014 22:43:07 +0000
-Subject: [PATCH 6/6] Defines missing macro
+Date: Tue, 1 Apr 2014 23:28:36 +0000
+Subject: [PATCH 3/3] Defines some missing macros
 
 ---
+ not-in-libc.h                 | 1 +
  sysdeps/mach/bits/spin-lock.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ 2 files changed, 2 insertions(+), 1 deletion(-)
 
+diff --git a/not-in-libc.h b/not-in-libc.h
+index 516d4d1..7c5f0bc 100644
+--- a/not-in-libc.h
++++ b/not-in-libc.h
+@@ -6,6 +6,7 @@
+ #define __thread_resume		thread_resume
+ #define __thread_set_state	thread_set_state
+ #define __thread_terminate	thread_terminate
++#define __thread_terminate_release	thread_terminate_release
+ #define __vm_allocate		vm_allocate
+ #define __vm_deallocate		vm_deallocate
+ #define __sched_yield           sched_yield
 diff --git a/sysdeps/mach/bits/spin-lock.h b/sysdeps/mach/bits/spin-lock.h
 index 537dac9..4f2ae4c 100644
 --- a/sysdeps/mach/bits/spin-lock.h
-- 
1.9.0


From d7237b29e8bd066a98ff28601557656f7fd11a11 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Sat, 5 Apr 2014 18:19:22 +0000
Subject: [PATCH 17/18] Added a patch to bypass the linking problem

Now some undefined declarations in libpthread
---
 gnu-system.am                                      |   2 +-
 gnu/packages/base.scm                              |  68 +++--
 gnu/packages/cross-base.scm                        | 116 --------
 gnu/packages/gcc.scm                               |   9 +-
 gnu/packages/patches/glibc-lock.patch              |  58 ++++
 .../patches/libpthread-0.3-3b391d-fix.patch        | 322 +++++++++++++++++++++
 6 files changed, 431 insertions(+), 144 deletions(-)
 create mode 100644 gnu/packages/patches/glibc-lock.patch
 create mode 100644 gnu/packages/patches/libpthread-0.3-3b391d-fix.patch

diff --git a/gnu-system.am b/gnu-system.am
index c8b637a..bfe5e7d 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -304,7 +304,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/libtool-skip-tests.patch			\
   gnu/packages/patches/libtool-skip-tests-for-mips.patch	\
   gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch\
-  gnu/packages/patches/libpthread_hurd_clean.patch		\
+  gnu/packages/patches/libpthread-0.3-3b391d-fix.patch		\
   gnu/packages/patches/luit-posix.patch				\
   gnu/packages/patches/m4-gets-undeclared.patch			\
   gnu/packages/patches/m4-readlink-EINVAL.patch			\
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 9c4264b..a03e440 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -36,6 +36,8 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages linux)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -504,8 +506,9 @@ with the Linux kernel.")
                      (sha256
                       (base32
                        "0v4hy6yimshbvhbhdbbjdir5fm3xr56zj3lnpf01d4nfa0c1h8k1"))
-                     
-                    ))
+                     (modules '((guix build utils)))
+                     (imported-modules modules)
+                     ))
            (propagated-inputs `(("gnumach-headers" ,gnumach-headers)
                                 ("hurd-headers" ,hurd-headers)))
            (native-inputs
@@ -515,9 +518,12 @@ with the Linux kernel.")
               ("patch/glibc-pthread" ,(search-patch "glibc-2.17.90-bdb7a1-pthread-posix.patch"))
               ("patch/libpthread-patch" ,(search-patch "libpthread-0.3-3b391d-glibc-preparation.patch"))
               ("patch/glibc-lock-patch" ,(search-patch "glibc-lock.patch"))
+              ("patch/libpthread-fix-patch" ,(search-patch "libpthread-0.3-3b391d-fix.patch"))
               ("mig" ,mig)
               ("perl" ,perl)
-              ("bison" ,bison)
+              ;;("bison" ,bison)
+              ("texinfo",texinfo)
+              ("gettext" ,gnu-gettext)
               ("autoconf" ,(autoconf-wrapper autoconf-2.68))
               ("automake" ,automake)
               ("libtool" ,libtool)
@@ -535,13 +541,15 @@ with the Linux kernel.")
            (arguments
             `(#:out-of-source? #t
               #:configure-flags
-              (list ;;"LDFLAGS=-DEBUG"
+              (list ;;"LD_DEBUG=all"
+                    ;;"CFLAGS=-02"
+                    ;;"LDFLAGS=libs"
                     "--without-cvs"
-                    "--enable-add-ons"
+                    "--enable-add-ons=libidn,libpthread"
                     "--host=i686-pc-gnu"
                     ;;"--build=i686-pc-gnu"
                     ;;"--target=i686-pc-gnu"
-                    ;;"--sysconfdir=/etc"
+                    "--sysconfdir=/etc"
                     "--disable-profile"
                     "--disable-multi-arch"
                     "--disable-sanity-checks"
@@ -558,22 +566,17 @@ with the Linux kernel.")
                            "/bin/bash"))
               
               #:phases  (alist-cons-after 
-                        'autoconf 'apply-patch 
+                        'unpack 'apply-patch 
                         (lambda _ 
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-make")))
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-create-gnumach")))
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-pthread")))
-                          ;;(zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-lock-patch")))
+                          (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-lock-patch")))
                           (chdir "libpthread")
+                          (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/libpthread-fix-patch")))
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/libpthread-patch")))
                           (chdir "..")
                           )
-                        (alist-cons-before
-                         'pre-configure 'autoconf
-                         (lambda _
-                           (chmod "configure" #o777)
-                          ;;(system* "autoreconf" "-vif")
-                           )
                           (alist-cons-before
                            'configure 'pre-configure
                            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -592,15 +595,18 @@ with the Linux kernel.")
                                (remove-store-references (string-append bin "/bash"))
                                (chmod (string-append bin "/bash") #o555)
                             
+                               ;; (substitute* "Makeconfig"
+                               ;;   ((" -lgcc_s") ""))
+
                                ;; Keep a symlink, for `patch-shebang' resolution.
-                               (with-directory-excursion bin
-                                 (symlink "bash" "sh"))
+                               ;; (with-directory-excursion bin
+                               ;;   (symlink "bash" "sh"))
                                
-                               ;; Have `system' use that Bash.
-                               (substitute* "sysdeps/posix/system.c"
-                                 (("#define[[:blank:]]+SHELL_PATH.*$")
-                                  (format #f "#define SHELL_PATH \"~a/bin/bash\"\n"
-                                          out)))
+                               ;; ;; Have `system' use that Bash.
+                               ;; (substitute* "sysdeps/posix/system.c"
+                               ;;   (("#define[[:blank:]]+SHELL_PATH.*$")
+                               ;;    (format #f "#define SHELL_PATH \"~a/bin/bash\"\n"
+                               ;;            out)))
                                
                                ;; Same for `popen'.
                                (substitute* "libio/iopopen.c"
@@ -618,11 +624,25 @@ with the Linux kernel.")
                                 (mkdir "source")
                                 (chdir "source")
                                 (copy-recursively source ".")
+
                                 (copy-recursively (assoc-ref inputs "libpthread") "libpthread")
-                                (chmod "bits/pthreadtypes.h" #o777)
-                                (copy-recursively "libpthread/sysdeps/generic/bits" "bits")
+                                ;;(chmod "bits/pthreadtypes.h" #o777)
+                                (copy-file "libpthread/sysdeps/generic/bits/pthread.h" "bits/pthread.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/thread-attr.h" "bits/thread-attr.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/mutex-attr.h" "bits/mutex-attr.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/thread-specific.h" "bits/thread-specific.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/mutex.h" "bits/mutex.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/condition-attr.h" "bits/condition-attr.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/condition.h" "bits/condition.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/rwlock-attr.h" "bits/rwlock-attr.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/rwlock.h" "bits/rwlock.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/barrier-attr.h" "bits/barrier-attr.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/barrier.h" "bits/barrier.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/once.h" "bits/once.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/cancelation.h" "bits/cancelation.h")
+                                (copy-file "libpthread/sysdeps/generic/bits/pthread-np.h" "bits/pthread-np.h")
                                 #t)
-                              %standard-phases))))))) ))
+                              %standard-phases))))))) )
 
 (define-public tzdata
   (package
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 8053599..22152ef 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -261,119 +261,6 @@ XBINUTILS and the cross tool chain."
                      ("cross-binutils" ,xbinutils)
                      ,@(package-native-inputs glibc)))))
 
-;; (define* (cross-gcc/hurd target
-;;                     #:optional (xbinutils (cross-binutils target)) libc)
-;;   "Return a cross-compiler for TARGET, where TARGET is a GNU triplet.  Use
-;; XBINUTILS as the associated cross-Binutils.  If LIBC is false, then build a
-;; GCC that does not target a libc; otherwise, target that libc."
-;;   (package (inherit gcc-4.8)
-;;     (name (string-append "gcc-cross-hurd-"
-;;                          (if libc "" "sans-libc-")
-;;                          target))
-;;     (source (origin (inherit (package-source gcc-4.8))
-;;               (patches
-;;                (list (search-patch "gcc-cross-environment-variables.patch")))))
-;;     (arguments
-;;      `(#:implicit-inputs? #f
-;;        #:modules ((guix build gnu-build-system)
-;;                   (guix build utils)
-;;                   (ice-9 regex)
-;;                   (srfi srfi-1)
-;;                   (srfi srfi-26))
-
-;;        ,@(substitute-keyword-arguments (package-arguments gcc-4.8)
-;;            ((#:configure-flags flags)
-;;             `(append (list ,(string-append "--target=" target)
-;;                            ,@(gcc-configure-flags-for-triplet target)
-;;                            ,@(if libc
-;;                                  '()
-;;                                  `(
-;;                                    ;; Disable features not needed at this stage.
-;;                                    "--disable-shared" "--enable-static"
-;;                                    "--without-headers"
-;;                                    ;; Disable C++ because libstdc++'s
-;;                                    ;; configure script otherwise fails with
-;;                                    ;; "Link tests are not allowed after
-;;                                    ;; GCC_NO_EXECUTABLES."
-;;                                    "--enable-languages=c"
-                                   
-;;                                    ;; Disabling things according to other hurd building 
-;;                                    ;; scripts I saw, I will explain everything with my final patch
-
-;;                                    "--disable-threads" ; libgcc, would need libc
-;;                                    "--disable-libatomic"
-;;                                    "--disable-libmudflap"
-;;                                    "--disable-libgomp"
-;;                                    "--disable-libssp"
-;;                                    "--disable-libquadmath"
-;;                                    "--disable-decimal-float" ; would need libc
-;;                                    ;;"--with-arch=i686"
-;;                                    )))
-                     
-;;                      ,(if libc
-;;                           flags
-;;                           `(remove (cut string-match "--enable-languages.*" <>)
-;;                                    ,flags))))
-;;            ((#:make-flags flags)
-;;             (if libc
-;;                 `(let ((libc (assoc-ref %build-inputs "libc")))
-;;                    ;; FLAGS_FOR_TARGET are needed for the target libraries to
-;;                    ;; receive the -Bxxx for the startfiles.
-;;                    (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
-;;                          ,flags))
-;;                 flags))
-;;            ((#:phases phases)
-;;             (let ((phases
-;;                    `(alist-cons-after
-;;                      'install 'make-cross-binutils-visible
-;;                      (lambda* (#:key outputs inputs #:allow-other-keys)
-;;                        (let* ((out      (assoc-ref outputs "out"))
-;;                               (libexec  (string-append out "/libexec/gcc/"
-;;                                                        ,target))
-;;                               (binutils (string-append
-;;                                          (assoc-ref inputs "binutils-cross")
-;;                                          "/bin/" ,target "-")))
-;;                          (for-each (lambda (file)
-;;                                      (symlink (string-append binutils file)
-;;                                               (string-append libexec "/"
-;;                                                              file)))
-;;                                    '("as" "ld" "nm"))
-;;                          #t))
-;;                      ,phases)))phases));;)
-;;            ((#:strip-binaries? _)
-;;             ;; Disable stripping as this can break binaries, with object files
-;;             ;; of libgcc.a showing up as having an unknown architecture.  See
-;;             ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
-;;             ;; for instance.
-;;             #f))))
-
-;;     (native-inputs
-;;      `(("binutils-cross" ,xbinutils)
-
-;;        ;; Call it differently so that the builder can check whether the "libc"
-;;        ;; input is #f.
-;;        ("libc-native" ,@(assoc-ref %final-inputs "libc"))
-
-;;        ;; Remaining inputs.
-;;        ,@(let ((inputs (append (package-inputs gcc-4.8)
-;;                                (alist-delete "libc" %final-inputs))))
-;;            (if libc
-;;                `(("libc" ,libc)
-;;                  ,@inputs)
-;;                inputs))))
-
-;;     (inputs '())
-
-;;     ;; Only search target inputs, not host inputs.
-;;     (search-paths
-;;      (list (search-path-specification
-;;             (variable "CROSS_CPATH")
-;;             (directories '("include")))
-;;            (search-path-specification
-;;             (variable "CROSS_LIBRARY_PATH")
-;;             (directories '("lib" "lib64")))))
-;;     (native-search-paths '())))
-
 (define* (cross-mig target
                     #:optional
                     (xgcc-i686-pc-gnu (cross-gcc target))
@@ -479,9 +366,6 @@ XBINUTILS and the cross tool chain."
      (substitute-keyword-arguments
          `(#:strip-binaries? #f              ; disable stripping (see above)
            ,@(package-arguments glibc/hurd))
-       ;; ((#:configure-flags flags)
-       ;;  `(cons ,(string-append "--target=" target)
-       ;;         ,flags))
        ((#:phases phases)
         `(alist-cons-before
           'pre-configure 'set-cross-hurd-headers-path
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index a422edf..fca6c39 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -46,9 +46,12 @@ where the OS part is overloaded to denote a specific ABI---into GCC
          ;; ports/sysdeps/mips/preconfigure.
          '("--with-abi=64"))
         ((string-match "i686-pc-gnu" target)
-         ;; Triplets recognized by glibc as denoting the N64 ABI; see
-         ;; ports/sysdeps/mips/preconfigure.
-         '("--with-arch=i686"))
+         '("--with-arch=i686"
+           "--disable-nls"
+           "--disable-shared"
+           "--without-headers"
+           "--enable-build-with-cxx"
+           ))
         (else
          ;; TODO: Add `armel.*gnueabi', `hf', etc.
          '())))
diff --git a/gnu/packages/patches/glibc-lock.patch b/gnu/packages/patches/glibc-lock.patch
new file mode 100644
index 0000000..af9f7a6
--- /dev/null
+++ b/gnu/packages/patches/glibc-lock.patch
@@ -0,0 +1,58 @@
+From 82f3b6517f923653a33fccd3df6b8d01d7f6a12f Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Wed, 2 Apr 2014 02:07:24 +0000
+Subject: [PATCH 1/2] fix
+
+---
+ signal/sigsetops.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/signal/sigsetops.c b/signal/sigsetops.c
+index 0317662..77bd1dc 100644
+--- a/signal/sigsetops.c
++++ b/signal/sigsetops.c
+@@ -3,7 +3,6 @@
+ 
+ #include <features.h>
+ 
+-#define _EXTERN_INLINE
+ #ifndef __USE_EXTERN_INLINES
+ # define __USE_EXTERN_INLINES	1
+ #endif
+-- 
+1.9.0
+
+
+From 207d830da0a741e3b29abcb068e718b379b987a5 Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Sat, 5 Apr 2014 17:45:49 +0000
+Subject: [PATCH 2/2] Add link rules to sort hooks
+
+   otherwise they are not properly recorded
+---
+ Makerules | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/Makerules b/Makerules
+index fe967ad..bf263c6 100644
+--- a/Makerules
++++ b/Makerules
+@@ -521,6 +521,15 @@ $(common-objpfx)shlib.lds: $(common-objpfx)config.make $(..)Makerules
+ 		 PROVIDE(__start__hurd_fork_locks = .);\
+ 		 _hurd_fork_locks : { *(_hurd_fork_locks) }\
+ 		 PROVIDE(__stop__hurd_fork_locks = .);\
++		 PROVIDE(__start__hurd_atfork_prepare_hook = .);\
++		 _hurd_atfork_prepare_hook : { *(_hurd_atfork_prepare_hook) }\
++		 PROVIDE(__stop__hurd_atfork_prepare_hook = .);\
++		 PROVIDE(__start__hurd_atfork_child_hook = .);\
++		 _hurd_atfork_child_hook : { *(_hurd_atfork_child_hook) }\
++		 PROVIDE(__stop__hurd_atfork_child_hook = .);\
++		 PROVIDE(__start__hurd_atfork_parent_hook = .);\
++		 _hurd_atfork_parent_hook : { *(_hurd_atfork_parent_hook) }\
++		 PROVIDE(__stop__hurd_atfork_parent_hook = .);\
+ 		 PROVIDE(__start___pthread_init = .);\
+ 		 __pthread_init : { *(__pthread_init) }\
+ 		 PROVIDE(__stop___pthread_init = .);\
+-- 
+1.9.0
+
diff --git a/gnu/packages/patches/libpthread-0.3-3b391d-fix.patch b/gnu/packages/patches/libpthread-0.3-3b391d-fix.patch
new file mode 100644
index 0000000..0bdd21f
--- /dev/null
+++ b/gnu/packages/patches/libpthread-0.3-3b391d-fix.patch
@@ -0,0 +1,322 @@
+From 15514fbbb60b890e9d9f76d9fcaac42e6a8308be Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Wed, 2 Apr 2014 03:04:33 +0000
+Subject: [PATCH 1/3] New Makefile.am
+
+---
+ Makefile.am | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 170 insertions(+)
+ create mode 100644 Makefile.am
+
+diff --git a/Makefile.am b/Makefile.am
+new file mode 100644
+index 0000000..36ede54
+--- /dev/null
++++ b/Makefile.am
+@@ -0,0 +1,170 @@
++# Makefile.am - Makefile template for libpthread.
++# Copyright (C) 2003, 2008 Free Software Foundation, Inc.
++#
++# This file is part of the GNU Hurd.
++# 
++# The GNU Hurd is free software; you can redistribute it and/or modify
++# it under the terms of the GNU 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 Hurd 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 General Public License for more details.
++# 
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
++
++if ARCH_IA32
++  arch=ia32
++endif
++if ARCH_POWERPC
++  arch=powerpc
++endif
++
++# The source files are scattered over several directories.  Add 
++# all these directories to the vpath.
++SYSDEP_PATH = $(srcdir)/sysdeps/l4/hurd/${arch}	\
++	 $(srcdir)/sysdeps/l4/${arch}		\
++	 $(srcdir)/sysdeps/${arch}		\
++	 $(srcdir)/sysdeps/l4/hurd		\
++	 $(srcdir)/sysdeps/l4			\
++	 $(srcdir)/sysdeps/hurd			\
++	 $(srcdir)/sysdeps/generic		\
++	 $(srcdir)/sysdeps/posix		\
++	 $(srcdir)/pthread			\
++	 $(srcdir)/signal			\
++	 $(srcdir)/include
++vpath %.c $(SYSDEP_PATH)
++
++AM_CPPFLAGS = $(USER_CPPFLAGS) -I$(srcdir)/pthread \
++  $(addprefix -I, $(SYSDEP_PATH)) -imacros $(srcdir)/include/libc-symbols.h
++AM_CFLAGS = $(USER_CFLAGS)
++
++# Sources.
++SYSDEPS := lockfile.c
++
++if ! ENABLE_TESTS
++noinst_LIBRARIES = libpthread.a
++endif
++
++libpthread_a_SOURCES = pt-attr.c pt-attr-destroy.c pt-attr-getdetachstate.c \
++	pt-attr-getguardsize.c pt-attr-getinheritsched.c		    \
++	pt-attr-getschedparam.c pt-attr-getschedpolicy.c pt-attr-getscope.c \
++	pt-attr-getstack.c pt-attr-getstackaddr.c pt-attr-getstacksize.c    \
++	pt-attr-init.c pt-attr-setdetachstate.c pt-attr-setguardsize.c	    \
++	pt-attr-setinheritsched.c pt-attr-setschedparam.c		    \
++	pt-attr-setschedpolicy.c pt-attr-setscope.c pt-attr-setstack.c	    \
++	pt-attr-setstackaddr.c pt-attr-setstacksize.c pt-attr.c		    \
++	pt-barrier-destroy.c pt-barrier-init.c pt-barrier-wait.c	    \
++	pt-barrier.c pt-barrierattr-destroy.c pt-barrierattr-init.c	    \
++	pt-barrierattr-getpshared.c pt-barrierattr-setpshared.c		    \
++	pt-destroy-specific.c pt-init-specific.c			    \
++	pt-key-create.c pt-key-delete.c					    \
++	pt-getspecific.c pt-setspecific.c				    \
++	pt-once.c							    \
++	pt-alloc.c							    \
++	pt-create.c							    \
++	pt-getattr.c							    \
++	pt-pool-np.c							    \
++	pt-equal.c							    \
++	pt-dealloc.c							    \
++	pt-detach.c							    \
++	pt-exit.c							    \
++	pt-initialize.c							    \
++	pt-join.c							    \
++	pt-self.c							    \
++	pt-sigmask.c							    \
++	pt-spin-inlines.c						    \
++	pt-cleanup.c							    \
++	pt-setcancelstate.c						    \
++	pt-setcanceltype.c						    \
++	pt-testcancel.c							    \
++	pt-cancel.c							    \
++	pt-mutexattr.c							    \
++	pt-mutexattr-destroy.c pt-mutexattr-init.c			    \
++	pt-mutexattr-getprioceiling.c pt-mutexattr-getprotocol.c	    \
++	pt-mutexattr-getpshared.c pt-mutexattr-gettype.c		    \
++	pt-mutexattr-setprioceiling.c pt-mutexattr-setprotocol.c	    \
++	pt-mutexattr-setpshared.c pt-mutexattr-settype.c		    \
++	pt-mutex-init.c pt-mutex-destroy.c				    \
++	pt-mutex-lock.c pt-mutex-trylock.c pt-mutex-timedlock.c		    \
++	pt-mutex-unlock.c						    \
++	pt-mutex-transfer-np.c						    \
++	pt-mutex-getprioceiling.c pt-mutex-setprioceiling.c		    \
++	pt-rwlock-attr.c						    \
++	pt-rwlockattr-init.c pt-rwlockattr-destroy.c			    \
++	pt-rwlockattr-getpshared.c pt-rwlockattr-setpshared.c		    \
++	pt-rwlock-init.c pt-rwlock-destroy.c				    \
++	pt-rwlock-rdlock.c pt-rwlock-tryrdlock.c			    \
++	pt-rwlock-trywrlock.c pt-rwlock-wrlock.c			    \
++	pt-rwlock-timedrdlock.c pt-rwlock-timedwrlock.c			    \
++	pt-rwlock-unlock.c						    \
++	pt-cond.c							    \
++	pt-condattr-init.c pt-condattr-destroy.c			    \
++	pt-condattr-getclock.c pt-condattr-getpshared.c			    \
++	pt-condattr-setclock.c pt-condattr-setpshared.c			    \
++	pt-cond-destroy.c pt-cond-init.c				    \
++	pt-cond-brdcast.c						    \
++	pt-cond-signal.c						    \
++	pt-cond-wait.c							    \
++	pt-cond-timedwait.c						    \
++	pt-stack-alloc.c						    \
++	pt-thread-alloc.c						    \
++	pt-thread-dealloc.c						    \
++	pt-thread-start.c						    \
++	pt-thread-halt.c						    \
++	pt-startup.c							    \
++	pt-getconcurrency.c pt-setconcurrency.c				    \
++	pt-block.c							    \
++	pt-timedblock.c							    \
++	pt-wakeup.c							    \
++	pt-docancel.c							    \
++	pt-sysdep.c							    \
++	pt-setup.c							    \
++	pt-machdep.c							    \
++	pt-spin.c							    \
++	pt-sigstate-init.c						    \
++	pt-sigstate-destroy.c						    \
++	pt-sigstate.c							    \
++	pt-atfork.c							    \
++	pt-kill.c							    \
++	pt-getcpuclockid.c						    \
++	pt-getschedparam.c pt-setschedparam.c pt-setschedprio.c		    \
++	pt-yield.c							    \
++	sem-close.c sem-init.c sem-timedwait.c sem-wait.c		    \
++	sem-destroy.c sem-open.c sem-trywait.c sem-getvalue.c		    \
++	sem-post.c sem-unlink.c						    \
++									    \
++	pt-setactivity-np.c						    \
++									    \
++	kill.c								    \
++	killpg.c							    \
++	pt-kill-siginfo-np.c						    \
++	raise.c								    \
++	sigaction.c							    \
++	sigaddset.c							    \
++	sigaltstack.c							    \
++	sigdelset.c							    \
++	sigemptyset.c							    \
++	sigfillset.c							    \
++	sig-internal.c							    \
++	sig-internal.h							    \
++	siginterrupt.c							    \
++	sigismember.c							    \
++	signal.c							    \
++	signal-dispatch.c						    \
++	signal.h							    \
++	sigpending.c							    \
++	sigprocmask.c							    \
++	sigsuspend.c							    \
++	sigtimedwait.c							    \
++	sigwait.c							    \
++	sigwaiter.c							    \
++	sigwaitinfo.c							    \
++	signal-dispatch-lowlevel.c					    \
++	sigprocmask.c
++
++libpthread_a_LDADD = -lrt
+-- 
+1.9.0
+
+
+From f6397bdc194fea8bdff4e34c94fe2802c6de543e Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Wed, 2 Apr 2014 03:05:01 +0000
+Subject: [PATCH 2/3] Revert "pthread_condattr_setclock: allow a monotonic
+ clock, if present"
+
+This reverts commit 581b822ea36002817f4c22b9ea715b72a0647166.
+---
+ sysdeps/generic/pt-condattr-setclock.c | 27 ++++-----------------------
+ 1 file changed, 4 insertions(+), 23 deletions(-)
+
+diff --git a/sysdeps/generic/pt-condattr-setclock.c b/sysdeps/generic/pt-condattr-setclock.c
+index c5a78ef..984c17e 100644
+--- a/sysdeps/generic/pt-condattr-setclock.c
++++ b/sysdeps/generic/pt-condattr-setclock.c
+@@ -23,30 +23,11 @@
+ int
+ pthread_condattr_setclock (pthread_condattr_t *attr, clockid_t clock)
+ {
+-  /* Only a few clocks are allowed.  CLOCK_REALTIME is always allowed.
+-     CLOCK_MONOTONIC only if the kernel has the necessary support.  */
+-  if (clock == CLOCK_MONOTONIC)
++  if (__pthread_default_condattr.clock == clock)
+     {
+-      /* Check whether the clock is available.  */
+-      static int avail;
+-
+-      if (avail == 0)
+-	{
+-	  struct timespec ts;
+-	  int res;
+-
+-	  res = clock_getres (CLOCK_MONOTONIC, &ts);
+-	  avail = res < 0 ? -1 : 1;
+-	}
+-
+-      if (avail < 0)
+-	/* Not available.  */
+-	return EINVAL;
++      attr->clock = clock;
++      return 0;
+     }
+-  else if (clock != CLOCK_REALTIME)
+-    return EINVAL;
+-
+-  attr->clock = clock;
+ 
+-  return 0;
++  return EINVAL;
+ }
+-- 
+1.9.0
+
+
+From 1feb6969662f7500dc0f1cea16f4552825842ca5 Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Wed, 2 Apr 2014 03:05:01 +0000
+Subject: [PATCH 3/3] Revert "__pthread_timedblock: switch to clock_gettime"
+
+This reverts commit 69e89a859882e4f675dd5491edc969159d8a4002.
+---
+ Makefile                     |  2 --
+ Makefile.am                  |  2 --
+ sysdeps/mach/pt-timedblock.c | 13 +++++++------
+ 3 files changed, 7 insertions(+), 10 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 8ef990e..2f45c1c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -216,10 +216,8 @@ VPATH += $(SYSDEP_PATH)
+ 
+ ifeq ($(IN_GLIBC),no)
+ HURDLIBS = ihash
+-LDLIBS = -lrt
+ else
+ LDLIBS-pthread.so = -lihash
+-$(objpfx)libpthread.so: $(common-objpfx)rt/librt.so
+ endif
+ 
+ ifeq ($(IN_GLIBC),no)
+diff --git a/Makefile.am b/Makefile.am
+index 36ede54..e1c062c 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -166,5 +166,3 @@ libpthread_a_SOURCES = pt-attr.c pt-attr-destroy.c pt-attr-getdetachstate.c \
+ 	sigwaitinfo.c							    \
+ 	signal-dispatch-lowlevel.c					    \
+ 	sigprocmask.c
+-
+-libpthread_a_LDADD = -lrt
+diff --git a/sysdeps/mach/pt-timedblock.c b/sysdeps/mach/pt-timedblock.c
+index d72ef73..88beaa2 100644
+--- a/sysdeps/mach/pt-timedblock.c
++++ b/sysdeps/mach/pt-timedblock.c
+@@ -36,26 +36,27 @@ __pthread_timedblock (struct __pthread *thread,
+   error_t err;
+   mach_msg_header_t msg;
+   mach_msg_timeout_t timeout;
+-  struct timespec now;
++  struct timeval now;
+ 
+   /* We have an absolute time and now we have to convert it to a
+      relative time.  Arg.  */
+ 
+-  err = clock_gettime (clock_id, &now);
++  err = gettimeofday(&now, NULL);
+   assert (! err);
+ 
+   if (now.tv_sec > abstime->tv_sec
+       || (now.tv_sec == abstime->tv_sec
+-	  && now.tv_nsec > abstime->tv_nsec))
++	  && now.tv_usec > ((abstime->tv_nsec + 999) / 1000)))
+     return ETIMEDOUT;
+ 
+   timeout = (abstime->tv_sec - now.tv_sec) * 1000;
+ 
+-  if (abstime->tv_nsec >= now.tv_nsec)
+-    timeout += (abstime->tv_nsec - now.tv_nsec + 999999) / 1000000;
++  if (((abstime->tv_nsec + 999) / 1000) >= now.tv_usec)
++    timeout += (((abstime->tv_nsec + 999) / 1000) - now.tv_usec + 999) / 1000;
+   else
+     /* Need to do a carry.  */
+-    timeout -= (now.tv_nsec - abstime->tv_nsec + 999999) / 1000000;
++    timeout -= (now.tv_usec + 999) / 1000 -
++      ((abstime->tv_nsec + 999999) / 1000000);
+ 
+   err = __mach_msg (&msg, MACH_RCV_MSG | MACH_RCV_TIMEOUT, 0,
+ 		    sizeof msg, thread->wakeupmsg.msgh_remote_port,
+-- 
+1.9.0
+
-- 
1.9.0


From 269316a79792adc7761703e9eae3077bf630c501 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis <manolis837@gmail.com>
Date: Wed, 9 Apr 2014 11:26:51 +0000
Subject: [PATCH 18/18] Everything okay, fails with lihash not found

---
 gnu-system.am                                      |  3 --
 gnu/packages/base.scm                              | 19 ++++--------
 gnu/packages/cross-base.scm                        |  5 ++--
 .../libpthread-0.3-3b391d-glibc-preparation.patch  | 34 ++++++++++++++++++++--
 4 files changed, 40 insertions(+), 21 deletions(-)

diff --git a/gnu-system.am b/gnu-system.am
index bfe5e7d..74f809e 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -278,9 +278,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/glibc-bootstrap-system.patch		\
   gnu/packages/patches/glibc-ldd-x86_64.patch			\
   gnu/packages/patches/glibc-make-4.0.patch			\
-  gnu/packages/patches/glibc-2.17.90-bdb7a1-create-gnumach-header.patch\
   gnu/packages/patches/glibc-2.17.90-bdb7a1-pthread-posix.patch	\
-  gnu/packages/patches/glibc-lock.patch				\
   gnu/packages/patches/gnunet-fix-scheduler.patch		\
   gnu/packages/patches/gnunet-fix-tests.patch    		\
   gnu/packages/patches/gobject-introspection-cc.patch		\
@@ -304,7 +302,6 @@ dist_patch_DATA =						\
   gnu/packages/patches/libtool-skip-tests.patch			\
   gnu/packages/patches/libtool-skip-tests-for-mips.patch	\
   gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch\
-  gnu/packages/patches/libpthread-0.3-3b391d-fix.patch		\
   gnu/packages/patches/luit-posix.patch				\
   gnu/packages/patches/m4-gets-undeclared.patch			\
   gnu/packages/patches/m4-readlink-EINVAL.patch			\
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index a03e440..e2e42f2 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -514,11 +514,9 @@ with the Linux kernel.")
            (native-inputs
             `(
               ("patch/glibc-make" ,(search-patch "glibc-make-4.0.patch"))
-              ("patch/glibc-create-gnumach" ,(search-patch "glibc-2.17.90-bdb7a1-create-gnumach-header.patch"))
               ("patch/glibc-pthread" ,(search-patch "glibc-2.17.90-bdb7a1-pthread-posix.patch"))
               ("patch/libpthread-patch" ,(search-patch "libpthread-0.3-3b391d-glibc-preparation.patch"))
-              ("patch/glibc-lock-patch" ,(search-patch "glibc-lock.patch"))
-              ("patch/libpthread-fix-patch" ,(search-patch "libpthread-0.3-3b391d-fix.patch"))
+              ;;("patch/libpthread-fix-patch" ,(search-patch "libpthread-0.3-3b391d-fix.patch"))
               ("mig" ,mig)
               ("perl" ,perl)
               ;;("bison" ,bison)
@@ -532,19 +530,16 @@ with the Linux kernel.")
                                (method git-fetch)
                                (uri (git-reference
                                      (url "git://git.sv.gnu.org/hurd/libpthread")
-                                     (commit "3b391db91f70b2166951413ee1eccc78cd398a44")))
+                                     (commit "e2ae1c43d168fc6f8b34332cbb0656e5d107cbf3")))
                                (sha256
                                 (base32 
-                                 "0bb8m0pk7b53sww4ahjds77bvqy0alz54g3aylzwncfca52gacqp"))
+                                 "0h4k81bkygswcm8s4nwbq9p3gyy3v11syd70vdi5h0sj0jr93y55"))
                                (file-name "libpthread" )))))
 
            (arguments
             `(#:out-of-source? #t
               #:configure-flags
-              (list ;;"LD_DEBUG=all"
-                    ;;"CFLAGS=-02"
-                    ;;"LDFLAGS=libs"
-                    "--without-cvs"
+              (list "--without-cvs"
                     "--enable-add-ons=libidn,libpthread"
                     "--host=i686-pc-gnu"
                     ;;"--build=i686-pc-gnu"
@@ -569,11 +564,8 @@ with the Linux kernel.")
                         'unpack 'apply-patch 
                         (lambda _ 
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-make")))
-                          (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-create-gnumach")))
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-pthread")))
-                          (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/glibc-lock-patch")))
                           (chdir "libpthread")
-                          (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/libpthread-fix-patch")))
                           (zero? (system* "patch" "-p1" "-i" (assoc-ref %build-inputs "patch/libpthread-patch")))
                           (chdir "..")
                           )
@@ -610,7 +602,7 @@ with the Linux kernel.")
                                
                                ;; Same for `popen'.
                                (substitute* "libio/iopopen.c"
-                              (("/bin/sh")
+                                 (("/bin/sh")
                                (string-append out "/bin/bash")))))
                            (alist-cons-after
                             'install 'install-locales
@@ -644,6 +636,7 @@ with the Linux kernel.")
                                 #t)
                               %standard-phases))))))) )
 
+
 (define-public tzdata
   (package
     (name "tzdata")
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 22152ef..ef17eb5 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -371,7 +371,8 @@ XBINUTILS and the cross tool chain."
           'pre-configure 'set-cross-hurd-headers-path
           (lambda* (#:key inputs #:allow-other-keys)
             (let ((mach (assoc-ref inputs "cross-gnumach-headers"))
-                  (hurd (assoc-ref inputs "cross-hurd-headers")))
+                  (hurd (assoc-ref inputs "cross-hurd-headers"))
+                  )
               (setenv "CROSS_CPATH"
                       (string-append mach "/include:"
                                      hurd "/include"))
@@ -381,7 +382,7 @@ XBINUTILS and the cross tool chain."
 
     (propagated-inputs `(("cross-gnumach-headers" ,xgnumach-headers)
                          ("cross-hurd-headers" ,xhurd-headers)
-                         ("cross--minimal" ,xhurd-minimal)))
+                         ("cross-hurd-minimal" ,xhurd-minimal) ))
 
     (native-inputs `(("cross-gcc" ,xgcc-i686-pc-gnu)
                      ("cross-binutils" ,xbinutils)
diff --git a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
index b26c5ee..cb748e8 100644
--- a/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
+++ b/gnu/packages/patches/libpthread-0.3-3b391d-glibc-preparation.patch
@@ -1,7 +1,7 @@
 From 4067112197e4f8f5975c8647cab355e06736177d Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Thu, 27 Mar 2014 00:21:36 +0000
-Subject: [PATCH 1/3] This helps to integrate libpthread as a glibc module.
+Subject: [PATCH 1/4] This helps to integrate libpthread as a glibc module.
 
 ---
  configure | 2 ++
@@ -24,7 +24,7 @@ index 0000000..2cdbc71
 From 75a043e399e536f4f37fe8ab2178e29d2cd0ca82 Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Tue, 1 Apr 2014 22:49:52 +0000
-Subject: [PATCH 2/3] These come from the l4 implementation and come in the way
+Subject: [PATCH 2/4] These come from the l4 implementation and come in the way
  of the glibc Makefiles, drop them.
 
 ---
@@ -1838,7 +1838,7 @@ index 1b47079..0000000
 From 822891596a11a55e559aaa5e4d4d1324ad066bdf Mon Sep 17 00:00:00 2001
 From: Manolis Ragkousis <manolis837@gmail.com>
 Date: Tue, 1 Apr 2014 23:28:36 +0000
-Subject: [PATCH 3/3] Defines some missing macros
+Subject: [PATCH 3/4] Defines some missing macros
 
 ---
  not-in-libc.h                 | 1 +
@@ -1873,3 +1873,31 @@ index 537dac9..4f2ae4c 100644
 -- 
 1.9.0
 
+
+From 29cfd394c551ebf206ce02355fa8069c0d8d38ff Mon Sep 17 00:00:00 2001
+From: Manolis Ragkousis <manolis837@gmail.com>
+Date: Wed, 9 Apr 2014 01:55:37 +0000
+Subject: [PATCH 4/4] Fixed libihash
+
+---
+ Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 8ef990e..2f45c1c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -216,10 +216,8 @@ VPATH += $(SYSDEP_PATH)
+ 
+ ifeq ($(IN_GLIBC),no)
+ HURDLIBS = ihash
+-LDLIBS = -lrt
+ else
+ LDLIBS-pthread.so = -lihash
+-$(objpfx)libpthread.so: $(common-objpfx)rt/librt.so
+ endif
+ 
+ ifeq ($(IN_GLIBC),no)
+-- 
+1.9.0
+
-- 
1.9.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2014-04-09  9:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CAFtzXzMK58zUi_+G300j37Agxnd1FP3tm5mTJAJvAviA_8OU3w@mail.gmail.com>
2014-04-09  9:20 ` Fwd: Glibc/hurd patch till now Manolis Ragkousis

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).