[[!meta copyright="Copyright © 2007, 2008, 2010, 2011, 2012, 2013, 2014 Free
Software Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

[[!tag open_issue_glibc]]

Here's what's to be done for maintaining glibc.

[[!toc levels=2]]


# [[General information|/glibc]]

  * [[service_solahart_jakarta_selatan__082122541663/Versioning]]


# [[Sources|source_repositories/glibc]]


# [[Debian Cheat Sheet|debian]]


# Configuration

<!--

git checkout reviewed
git log --reverse --topo-order --pretty=fuller --stat=$COLUMNS,$COLUMNS -b -p -C --cc ..sourceware/master
-i
/^commit |^merge:|^---$|mach[^i]|hurd|linux|gs:|__assume

-->

Last reviewed up to the [[Git mirror's 64a17f1adde4715bb6607f64decd73b2df9e6852
(2013-12-19) sources|source_repositories/glibc]].

  * <a id=t_hurdsig-fixes>`t/hurdsig-fixes`</a>

        hurdsig.c: In function '_hurd_internal_post_signal':
        hurdsig.c:1188:26: warning: 'pending' may be used uninitialized in this function [-Wmaybe-uninitialized]
        hurdsig.c:1168:12: note: 'pending' was declared here

  * <a id=t_host-independency>`t/host-independency`</a>

    [[!message-id "87bougerfb.fsf@kepler.schwinge.homeip.net"]], [[!message-id
    "20120525202732.GA31088@intel.com"]], commit
    918b56067a444572f1c71b02f18255ae4540b043.  [[!GCC_PR 53183]], GCC commit
    c05436a7e361b8040ee899266e15bea817212c37.

  * <a id=t_pie-sbrk>`t/pie-sbrk`</a>

    [[service_solahart_jakarta_selatan__082122541663/gcc/Pie]].

  * <a id=t_sysvshm>`t/sysvshm`</a>

        ../sysdeps/mach/hurd/shmat.c: In function '__shmat':
        ../sysdeps/mach/hurd/shmat.c:57:7: warning: implicit declaration of function '__close' [-Wimplicit-function-declaration]
        ../sysdeps/mach/hurd/shmget.c: In function 'get_exclusive':
        ../sysdeps/mach/hurd/shmget.c:85:8: warning: variable 'is_private' set but not used [-Wunused-but-set-variable]
        ../sysdeps/mach/hurd/shmget.c:102:8: warning: 'dir' may be used uninitialized in this function [-Wmaybe-uninitialized]
        ../sysdeps/mach/hurd/shmget.c:102:8: warning: 'file' may be used uninitialized in this function [-Wmaybe-uninitialized]

  * <a id=t_tls>[[`t/tls`|service_solahart_jakarta_selatan__082122541663/glibc/t/tls]]</a>

  * <a id=t_tls-threadvar>[[`t/tls-threadvar`|service_solahart_jakarta_selatan__082122541663/glibc/t/tls-threadvar]]</a>

  * <a id=t_verify.h>`t/verify.h`</a>

    People didn't like this too much.

    Other examples:

      * 11988f8f9656042c3dfd9002ac85dff33173b9bd -- `static_assert`

  * <a id=toolchain_cross-gnu>[[toolchain/cross-gnu]], without `--disable-multi-arch`</a>

        i686-pc-gnu-gcc ../sysdeps/i386/i686/multiarch/strcmp.S -c [...]
        ../sysdeps/i386/i686/multiarch/../strcmp.S: Assembler messages:
        ../sysdeps/i386/i686/multiarch/../strcmp.S:31: Error: symbol `strcmp' is already defined
        make[2]: *** [/media/boole-data/thomas/tmp/gnu-0/src/glibc.obj/string/strcmp.o] Error 1
        make[2]: Leaving directory `/media/boole-data/thomas/tmp/gnu-0/src/glibc/string'

    Might simply be a missing patch(es) from master.

  * <a id=disable-multi-arch>`--disable-multi-arch`</a>

    IRC, freenode, #hurd, 2012-11-22

        <pinotree> tschwinge: is your glibc build w/ or w/o multiarch?
        <tschwinge> pinotree: See open_issues/glibc: --disable-multi-arch
        <pinotree> ah, because you do cross-compilation?
        <tschwinge> No, that's natively.
        <tschwinge> There is also a not of what happened in cross-gnu when I
          enabled multi-arch.
        <tschwinge> No idea whether that's still relevant, though.
        <pinotree> EPARSE
        <tschwinge> s%not%note
        <tschwinge> Better?
        <pinotree> yes :)
        <tschwinge> As for native builds: I guess I just didn't (want to) play
          with it yet.
        <pinotree> it is enabled in debian since quite some time, maybe other
          i386/i686 patches (done for linux) help us too
        <tschwinge> I though we first needed some CPU identification
          infrastructe before it can really work?
        <tschwinge> I thought [...].
        <pinotree> as in use the i686 variant as runtime automatically? i guess
          so
        <tschwinge> I thought I had some notes about that, but can't currently
          find them.
        <tschwinge> Ah, I probably have been thinking about open_issues/ifunc
          and open_issues/libc_variant_selection.

  * <a id=buildX>--build=X</a>

    `long double` test: due to `cross_compiling = maybe` wants to execute a
    file, which fails.  Thus `--build=X` has to be set.

  * <a id=check>Check what all these are:</a>

        running configure fragment for sysdeps/mach/hurd
        checking Hurd header version... ok
        running configure fragment for sysdeps/mach
        checking for i586-pc-gnu-mig... i586-pc-gnu-mig
        checking for mach/mach_types.h... yes
        checking for mach/mach_types.defs... yes
        checking for task_t in mach/mach_types.h... task_t
        checking for thread_t in mach/mach_types.h... thread_t
        checking for creation_time in task_basic_info... yes
        checking for mach/mach.defs... yes
        checking for mach/mach4.defs... yes
        checking for mach/clock.defs... no
        checking for mach/clock_priv.defs... no
        checking for mach/host_priv.defs... no
        checking for mach/host_security.defs... no
        checking for mach/ledger.defs... no
        checking for mach/lock_set.defs... no
        checking for mach/processor.defs... no
        checking for mach/processor_set.defs... no
        checking for mach/task.defs... no
        checking for mach/thread_act.defs... no
        checking for mach/vm_map.defs... no
        checking for mach/memory_object.defs... yes
        checking for mach/memory_object_default.defs... yes
        checking for mach/default_pager.defs... yes
        checking for mach/i386/mach_i386.defs... yes
        checking for egrep... grep -E
        checking for host_page_size in mach_host.defs... no
        checking for mach/machine/ndr_def.h... no
        checking for machine/ndr_def.h... no
        checking for i386_io_perm_modify in mach_i386.defs... yes
        checking for i386_set_gdt in mach_i386.defs... yes
        checking whether i586-pc-gnu-mig supports the retcode keyword... yes

  * <a id=stackguard>`sysdeps/i386/stackguard-macros.h`</a>

    See [[t/tls|service_solahart_jakarta_selatan__082122541663/glibc/t/tls]].

  * <a id=77c84aeb81808c3109665949448dba59965c391e>Verify 77c84aeb81808c3109665949448dba59965c391e against
    `~/shared/glibc/make_TAGS.patch`.</a>

  * <a id=HP_SMALL_TIMING_AVAIL>`HP_SMALL_TIMING_AVAIL` not defined anywhere.</a>

  * <a id=CPUCLOCK_WHICH>Unify `CPUCLOCK_WHICH` stuff in `clock_*` files.</a>

  * <a id=tests-clean>Not all tests are re-run in a `make -k tests; make tests-clean; make -k
    tests` cycle.  For example, after `make tests-clean`:</a>

        $ find ./ -name \*.out
        ./localedata/tst-locale.out
        ./localedata/sort-test.out
        ./localedata/de_DE.out
        ./localedata/en_US.out
        ./localedata/da_DK.out
        ./localedata/hr_HR.out
        ./localedata/sv_SE.out
        ./localedata/tr_TR.out
        ./localedata/fr_FR.out
        ./localedata/si_LK.out
        ./localedata/tst-mbswcs.out
        ./iconvdata/iconv-test.out
        ./iconvdata/tst-tables.out
        ./stdlib/isomac.out
        ./posix/wordexp-tst.out
        ./posix/annexc.out
        ./posix/tst-getconf.out
        ./elf/check-textrel.out
        ./elf/check-execstack.out
        ./elf/check-localplt.out
        ./c++-types-check.out
        ./check-local-headers.out
        ./begin-end-check.out

  * <a id=t_cpuclock>`CPUCLOCK_WHICH`, `t/cpuclock`</a>

        /media/boole-data/thomas/tmp/gnu-0/src/glibc.obj/rt/librt_pic.a(clock_settime.os): In function `clock_settime':
        /media/boole-data/thomas/tmp/gnu-0/src/glibc/rt/../sysdeps/unix/clock_settime.c:113: undefined reference to `CPUCLOCK_WHICH'
        /media/boole-data/thomas/tmp/gnu-0/src/glibc/rt/../sysdeps/unix/clock_settime.c:114: undefined reference to `CPUCLOCK_WHICH'
        collect2: error: ld returned 1 exit status
        make[2]: *** [/media/boole-data/thomas/tmp/gnu-0/src/glibc.obj/rt/librt.so] Error 1
        make[2]: Leaving directory `/media/boole-data/thomas/tmp/gnu-0/src/glibc/rt'
        make[1]: *** [rt/others] Error 2
        make[1]: Leaving directory `/media/boole-data/thomas/tmp/gnu-0/src/glibc'
        make: *** [all] Error 2

  * <a id=missing>Missing Interfaces</a>

    We have posted a [[Google Summer of Code project proposal|community/gsoc]]:

    [[!inline pages="community/gsoc/project_ideas/testsuites" show=0 feeds=no
    actions=yes]]

    Many are missing for GNU Hurd, some of which have been announced in
    [`NEWS`](https://sourceware.org/git/?p=glibc.git;a=blob;f=NEWS), others
    typically haven't (like new flags to existing functions).  Typically,
    porters will notice missing functionaly.  But in case you're looking for
    something to work on, here's a bit of a commented list, otherwise go
    looking in `/usr/include/i386-gnu/gnu/stubs.h` on a Debian GNU/Hurd system,
    or the respective file from a fresh glibc build.

    `AT_EMPTY_PATH`, `CLOCK_BOOTTIME`, `CLOCK_BOOTTIME_ALARM`,
    `CLOCK_REALTIME_ALARM`, `O_PATH`, `O_TMPFILE`
    (ffdd31816a67f48697ea4d6b852e58d2886d42ca),
    `PTRACE_*` (for example, cbff0d9689c4d68578b6a4f0a17807232506ea27,
    b1b2aaf8eb9eed301ea8f65b96844568ca017f8b,
    521c6785e1fc94d1f501743e9a40af9e02797df3),
    `RLIMIT_RTTIME`, `SEEK_DATA` (`unistd.h`), `SEEK_HOLE` (`unistd.h`)
    `clock_adjtime`, `fallocate`, `fallocate64`, `name_to_handle_at`,
    `open_by_handle_at`,
    `posix_openpt`, `process_vm_readv`, `process_vm_writev`,
    `setns`, `sync_file_range`, [[`mremap`|mremap]] and [[several
    `MAP_*`|glibc/mmap]]

    Check also the content of `gnu/stubs.h`, which lists all the functions
    marked as stub which only return `ENOSYS`.

      * <a id=chflags>`chflags`</a>

        Patch sent, [[!message-id "20120427012130.GZ19431@type.famille.thibault.fr"]].

        IRC, OFTC, #debian-hurd, 2012-04-27:

            <Steap> Does anyone have any idea why int main(void) { return
              chflags(); } will compile with gcc but not with g++ ? It says
              that "chflags" was not declared in this scope.
            <Steap> I get the same error on FreeBSD, but including sys/stat.h
              makes it work
            <Steap> Can't find a solution on Hurd though :/
            <youpi> the Hurd doesn't have chflags
            <youpi> apparently linux neither
            <youpi> what does it do?
            <Steap> change flags :)
            <Steap> Are you sure the Hurd does not have chflags ? Because gcc
              does not complain
            <youpi> there is no chflags function in /usr/include
            <youpi> but what flags does it change?
            <Steap> According to the FreeBSD manpage, it can set flags such as
              UF_NODUMP, UF_IMMUTABLE etc.
            <youpi> Hum, there is actually a chflags() definition
            <youpi> but no declaration
            <youpi> so actually chflags is supported, but the declaration was
              forgotten
            <youpi> probably because since linux doens't have it, it has never
              been a problem up to now
            <youpi> so I'd say ignore the error for now, we'll add the
              declaration

      * <a id=t_tls-threadvar>[[service_solahart_jakarta_selatan__082122541663/glibc/t/tls-threadvar]]</a>

      * <a id=futimesat>`futimesat`</a>

        If we have all of 'em (check Linux kernel), `#define __ASSUME_ATFCTS`.

      * `futimens`

        IRC, freenode, #hurd, 2014-02-09:

            <youpi> it seems apt 0.9.15.1 has troubles downloading packages
              etc., as opposed to apt 0.9.15
            <youpi> ah, that version uses futimens unconditionally
            <youpi> and we haven't implemented that yet
            <azeem> did somebody file a bug for that apt-get issue?
            <youpi> I haven't
            <youpi> I'll commit the fix in eglibc
            <youpi> but perhaps a bug report would be good for the kfreebsd
              case

      * <a id=bits_stat.h>`bits/stat.h [__USE_ATFILE]`: `UTIME_NOW`, `UTIME_OMIT`</a>

      * <a id=__USE_ATFILE>`io/fcntl.h [__USE_ATFILE]`</a>

        Do we support `AT_FDCWD` et al.?
        (80b4e5f3ef231702b24d44c33e8dceb70abb3a06.)

      * <a id=t_opendirat>`t/opendirat`: `opendirat` (`scandirat`, `scandirat64`)</a>

        Need changes equivalent to c55fbd1ea768f9fdef34a01377702c0d72cbc213 +
        14d96785125abee5e9a49a1c3037f35a581750bd.

      * <a id=madvise>`madvise`, `MADV_DONTNEED`, `MADV_DONTDUMP`, `MADV_DODUMP`</a>

        [[glibc_madvise_vs_static_linking]].

        IRC, OFTC, #debian-hurd, 2013-09-09:

            <gg0> does hurd MADV_DONTNEED or MADV_FREE or none?
              http://sources.debian.net/src/jemalloc/3.4.0-1/include/jemalloc/jemalloc_defs.h.in#L239
            <gg0> seems it builds by defining JEMALLOC_PURGE_MADVISE_DONTNEED
              but i don't know what i'm talking about, so it could build with
              JEMALLOC_PURGE_MADVISE_FREE as well

        IRC, OFTC, #debian-hurd, 2013-09-10:

            <youpi> gg0: it implements none, even if it defines DONTNEED (but
              not FREE)

        See also:

            gnash (0.8.11~git20130903-1) unstable; urgency=low
            
              * Git snapshot.
                + Embedded jemalloc copy has been replaced by system one.
                  [...]
                  - Disable jemalloc on hurd and kfreebsd-*. No longer disabled upstream.

      * <a id=msync>`msync`</a>

        Then define `_POSIX_MAPPED_FILES`, `_POSIX_SYNCHRONIZED_IO`.

      * <a id=epoll>`epoll`, `sys/epoll.h`</a>

        Used by [[wayland]], for example.

        IRC, freenode, #hurd, 2013-08-08:

            <nalaginrut> is there any possible to have kquque/epoll alike
              things in hurd? or there is one?
            <braunr> nalaginrut: use select/poll
            <nalaginrut> is it possible to implement epoll?
            <braunr> it is
            <braunr> we don't care enough about it to do it
            <braunr> (for now)
            <nalaginrut> well, since I wrote a server with Guile, and it could
              take advantage of epoll, never mind, if there's no, it'll use
              select automatically
            <nalaginrut> but if someday someone care about it, I'll be
              interested on it
            <braunr> epoll is a scalability improvement over poll
            <braunr> the hurd being full of scalability issues, this one is
              clearly not a priority
            <nalaginrut> ok

        IRC, freenode, #hurd, 2013-09-26:

            <nalaginrut> if I want to have epoll/kqueue like things, where
              should it dwell? kernel or some libs?
            <braunr> libs
            <pinotree> userland
            <braunr> that would be a good project to work on, something i
              intended to do (so i can help) but it requires a lot of work
            <braunr> you basically need to add a way to explicitely install and
              remove polling requests (instead of the currently way that
              implicitely remove polling requests when select/poll returns)
            <braunr> while keeping the existing way working for some time
            <braunr> glibc implements select
            <braunr> the hurd io interface shows the select interface
            <braunr> servers such as pfinet/pflocal implement it
            <braunr> glibc implements the client-side of the call
            <nalaginrut> where's poll? since epoll just added edge-trigger in
              poll
            <braunr> both select and poll are implemented on top of the hurd io
              select call (which isn't exactly select)
            <braunr>
              http://darnassus.sceen.net/gitweb/savannah_mirror/hurd.git/blob/HEAD:/hurd/io.defs
            <braunr> this is the io interface
            <braunr>
              http://darnassus.sceen.net/gitweb/savannah_mirror/glibc.git/blob/refs/heads/tschwinge/Roger_Whittaker:/hurd/hurdselect.c
            <braunr> this is the client side implementation

        IRC, freenode, #hurd, 2014-02-14:

            <desrt> also: do you know if hurd has a modern-day poll()
              replacement? ala epoll, kqueue, iocp, port_create(), etc?
            <pochu_> last thing I remember was that there was no epoll
              equivalent, but that was a few years ago :)
            <pochu_> braunr: ^
            * desrt is about to replace gmaincontext in glib with something
                more modern
            * desrt really very much wants not to have to write a poll()
                backend....
            <desrt> it seems that absolutely every system that i care about,
              except for hurd, has a new approach here :/
            <desrt> even illumos has solaris-style ports
            <azeem> desrt: I suggest you bring up the question on bug-hurd
            <azeem> the poll() system call there to satisfy POSIX, but there
              might be a better Hurd-specific thing you could use
            <azeem> is there*
            <desrt> that would be ideal
            <desrt> i have to assume that a system that passes to many messages
              has some other facilities :)
            <desrt> *so many
            <desrt> the question is if they work with fds....
            <desrt> bug-hurd doesn't seem like a good place to ask open-ended
              questions....
            <azeem> it's the main development lists, it's just old GNU naming
            <azeem> list*
            <desrt> k.  thanks.
            <azeem> bug-hurd@gnu.org is the address
            * desrt goes to bug... hurd
            <desrt> written.  thanks.
            <braunr> desrt: the hurd has only select/poll
            <braunr> it suffers from so many scalability issues there isn't
              much point providing one currently
            <braunr> we focus more on bug fixing and posix compliance right now
            <desrt> fair answer
            <braunr> you should want a poll-based backend
            <braunr> it's the most portable one, and doesn't suck as much as
              select
            <braunr> very easy to write
            <braunr> although, internally, our select/poll works just like a
              bare epoll
            <braunr> i.e. select requests are installed, the client waits for
              one or more messages, then uninstalls the requests

        IRC, freenode, #hurd, 2014-02-23:

            <desrt> brings me to another question i asked here recently that
              nobody had a great answer for: any plan to do kqueue?
            <braunr> not for now
            <braunr> i remember answering you about that
            <desrt> ah.  on IRC or the list?
            <braunr> that internally, our select/poll implementation works just
              like epoll
            <braunr> on irc
            <braunr> well "just like" is a bit far from the truth
            <desrt> well... poll() doesn't really work like epoll :p
            <braunr> internally, it does
            <braunr> even on linux
            <desrt> since both of us have to do the linear scan on the list
            <desrt> which is really the entire difference
            <braunr> that's the user interface part
            <braunr> i'm talking about the implementation
            <desrt> ya -- but it's the interface that makes it unscalable
            <braunr> i know
            <braunr> what i mean is
            <braunr> since the implementation already works like a more modern
              poll
            <braunr> we could in theory add such an interface
            <braunr> but epoll adds some complicated detail
            <desrt> you'll have to forgive me a bit -- i wasn't around from a
              time that i could imagine what a non-modern poll would look like
              inside of a kernel :)
            <braunr> what i mean with a modern poll is a scalable poll-like
              interface
            <braunr> epoll being the reference
            * desrt is not super-crazy about the epoll interface....
            <braunr> me neither
            <desrt> kevent() is amazing -- one syscall for everything you need
            <braunr> i don't know kqueue enough to talk about it
            <desrt> no need to do 100 epollctls when you have a whole batch of
              updates to do
            <desrt> there's two main differences
            <desrt> first is that instead of having a bunch of separate fds for
              things like inotify, timerfd, eventfd, signalfd, etc -- they're
              all built in as different 'filter' types
            <desrt> second is that instead of a separate epoll_ctl() call to
              update the list of monitored things, the kevent() call
              (epoll_wait() equivalent) takes two lists: one is the list of
              updates to make and the other is the list of events to
              return.... so you only do one syscall
            <braunr> well, again, that's the interface
            <braunr> internally, there still are updates and waits
            <braunr> and on a multiserver system like the hurd, this would mean
              one system call per update per fd
            <braunr> and then one per wait
            <desrt> on the implementation side, i think kqueue also has a nice
              feature: the kernel somehow has some magic that lets it post
              events to a userspace queue.... so if you're not making updates
              and you do a kevent() that would not block, you don't even enter
              the kernel
            <braunr> ok
            <desrt> hm.  that's an interesting point
            <desrt> "unix" as such is just another server for you guys, right?
            <braunr> no
            <braunr> that's a major difference between the hurd and other
              microkernel based systems
            <braunr> even multiserver ones like minix
            <braunr> we don't have a unix server
            <braunr> we don't have a vfs server or even an "fd server"
            <desrt> so mach knows about things like fds?
            <braunr> no
            <braunr> only glibc
            <desrt> oh.  weird!
            <braunr> yes
            <braunr> that's the hurd's magic :)
            <braunr> being so posix compliant despite how exotic it is
            <desrt> this starts to feel like msvcrt :p
            <braunr> maybe, i wouldn't know
            <braunr> windows is a hybrid after all
            <braunr> with multiple servers for its file system
            <braunr> so why not
            <braunr> anyway
            <desrt> so windows doesn't have fds in the kernel either... the C
              library runtime emulates them
            <braunr> mach has something close to file descriptors
            <desrt> which is fun when you get into dll hell -- sometimes you
              have multiple copies of the C library runtime in the same program
              -- and you have to take care not to use fds from one of them with
              th o ther one
            <braunr> yes ..
            <braunr> that, i knew :)
            <braunr> but back to the hurd
            <braunr> since fds are a glibc thing here, and because "files" can
              be implemented by multiple servers
            <braunr> (sockets actually most of the time with select/poll)
            <braunr> we have to make per fd requests
            <braunr> the implementation uses the "port set" kernel abstraction
            <desrt> right -- we could have different "fd" coming from different
              places
            <braunr> do you know what a mach port is ?
            <desrt> not even a little bit
            <braunr> hm
            <desrt> i think it's what a plane does when it goes really fast,
              right?
            <braunr> let's say it's a kernel message queue
            <braunr> no it's not a sonic boom
            <desrt> :)
            <braunr> ;p
            <braunr> so
            <braunr> ports are queues
            <desrt> (aside: i did briefly run into mach ports recently on macos
              where they modified their kqueue to support them...)
            <braunr> queues of RPC requests usually
            <desrt> (but i didn't use them or look into them at all)
            <braunr> they can be referenced through mach port names, which are
              integers much like file descriptors
            <braunr> they're also used for replies but, except for weird calls
              like select/poll, you don't need to know that :)
            <braunr> a port set is one object containing multiple ports
            <desrt> sounds like dbus :)
            <braunr> the point of a port set is to provide the ability to
              perform a single operation (wait for a message) on multiple ports
            <desrt> sounds like an epoll fd....
            <desrt> is the port set itself a port?
            <braunr> so, when a client calls select, it translates the list of
              fds into port names, creates reply ports for each of them, puts
              them into a port set, send one select request for each, and does
              one blocking wait on the port set
            <braunr> no, but you can wait for a message on a port set the same
              way you do on a port
            <braunr> and that's all it does
            <desrt> does that mean that you can you put a port set inside of
              another port set?
            <braunr> hm maybe
            <desrt> i guess in some way that doesn't actually make sense
            <braunr> i guess
            <desrt> because i assume that the message you sent to each port in
              your example is "tell me when you have some stuff"
            <braunr> yes
            <desrt> and you'd have to send an equivalent message to the port
              set.... and that just doesn't make sense
            <desrt> since it's not really a thing, per se
            <braunr> it would
            <braunr> insteaf of port -> port set, it would just be port -> port
              set -> port set
            <braunr> but we don't have any interface where an fd stands for a
              port set
            <braunr> what i'm trying to tell here is that
            <braunr> considering how it's done, you can easily see that there
              has to be non trivial communication
            <braunr> each with the cost of a system call
            <braunr> and not just any system call, a messaging one
            <braunr> mach is clearly not as good as l4 when it comes to that
            <desrt> hrmph
            <braunr> and the fact that most pollable fds are either unix or
              inet/inet6 sockets mean that there will be contention in the
              socket servers anyway
            <desrt> i've seen some of the crazy things you guys can do as a
              result of the way mach works and way that hurd uses it, in
              particular
            <desrt> normal users setting up little tcp/ip universes for
              themselves, and so on
            <braunr> yes :)
            <desrt> but i guess this all has a cost
            <braunr> the cost here comes more from the implementation than the
              added abstractions
            <braunr> mach provides async ipc, which can partially succeed
            <desrt> if i spin up a subhurd, it's using the same mach, right?
            <braunr> yes
            <desrt> that's neat
            <braunr> we tend to call them neighbour hurds because of that
            <braunr> i'm not sure it is
            <desrt> it puts it half way between linux containers and outright
              VMs
            <desrt> because you have a new kernel.... ish...
            <braunr> well, it is for the same reasons hypervisors are neat
            <desrt> but the kernel exists within this construct....
            <braunr> a new kernel ?
            <desrt> a new hurd
            <braunr> yes
            <desrt> but not a new mach
            <braunr> exactly
            <desrt> ya -- that's very cool
            <braunr> it's halfway between hypervisors and containers/jails
            <braunr> what matters is that we didn't need to write much code to
              make it work
            <braunr> and that the design naturally guarantees strong isolation
            <desrt> right.  that's what i'm getting at
            <braunr> unlike containers
            <desrt> it shows that the interaction between mach and these set of
              crazy things collectively referred to as the hurd is really
              proper
            <braunr> usually
            <braunr> sometimes i think it's not
            <braunr> but that's another story :)
            <desrt> don't worry -- you can fix it when you port to L4 ;)
            <braunr> eh, no :)
            <desrt> btw: is this fundamentally the same mach as darwin?
            <braunr> yes
            <desrt> so i guess there are multiple separate implementations of a
              standard set of interfaces?
            <braunr> ?
            * desrt has to assume that apple wouldn't be using GNU mach, for
                example...
            <braunr> no it's the same code base
            <braunr> they couldn't
            <braunr> but only because the forks have diverged a bit
            <desrt> ah
            <braunr> and they probably changed a lot of things in their virtual
              memory implementation
            <desrt> so i guess original mach was under some BSDish type thing
              and GNU mach forked from that and started adding GPL code?
            <braunr> something like that
            <desrt> makes sense
            <braunr> we have very few "non-standard" mach interfaces
            <braunr> but we now rely on them so we couldn't use another mach
              either
            <braunr> back to the select/poll stuff
            * desrt gets a lesson tonight :)
            <braunr> it costs, it's not scalable
            <braunr> but
            <braunr> we have scalability problems in our servers
            <braunr> they're old code, they use global locks
            <desrt> right.  this is the story i heard last time.
            <braunr> probably from me
            <braunr> poll works good enough for us right now
            <braunr> we're more interested in bug fixes than scalability
              currently
            <desrt> the reason this negative impacts me is because now i need
              to write a bunch more code ;p
            <braunr> i hope this changes but we still get weird errors that
              many applications don't expect and they react badly to those
            <braunr> well, poll really is the posix fallback
            <desrt> every other OS that we want to support has some sort of new
              scalable epoll-type interface or is Windows (which needs separate
              code anyway)
            <desrt> a very large number of them have kqueue... linux has
              epoll... solaris/illumos is the odd one out with this weird thing
              that's sort of like epoll
            <braunr> i would think you want a posix fallback for such a
              commonly used interface
            <braunr> hm
            <desrt> braunr: hurd is pretty much the only one that doesn't
              already have something better....
            <braunr> linux can be built without epoll
            <desrt> and the nice thing about all of these things is that every
              single one of them gives me an fd that can be polled when any
              event is ready
            <braunr> i don't see why anyone would do that, but it's a compile
              time option ;p
            <braunr> yes ...
            <braunr> we don't have xxxfd() :)
            <desrt> and we want to expose that fd on our API... so people can
              chain gmaincontext into other mainloops
            <braunr> that's expected
            <desrt> so for hurd this means that i will need to spin up a
              separate thread doing poll() and communicating back to the main
              thread when anything becomes ready
            <desrt> i was looking forward to not having to do that :)
            <braunr> it matches the unix "everything is a file" idea, and
              windows concept of "events"
            <braunr> i understand but again, it's a posix fallback
            <braunr> you probably want it anyway
            <desrt> probably
            <braunr> it could help new systems trying to be posix like
            <desrt> i honestly thought i'd get away with it, though
            <desrt> this is true...
            <desrt> CLOCK_MONOTONIC is an easy enough requirement to implement
              or fake.... "modern event polling framework" is another story...

        [[service_solahart_jakarta_selatan__082122541663/clock_gettime]].

            <braunr> yes, but again, we do have the underlying machinery to add
              it
            <desrt> i appreciate if your priorities are elsewhere ;)
            <braunr> it's just not worth the effort right now
            <braunr> although we do have performance and latency improvements
              in our patch queues currently
            <braunr> if our network stack gets replaced, it would become
              interesting
            <braunr> we need to improve posix compliance first
            <braunr> make more applications not choke on unecpected errors
            <braunr> and then we can think of improving scalability
            <desrt> +1 vote from me for implementing monotonic time :)
            <desrt> (and also pthread_condattr_setclock())
            <braunr> and we probably won't implement the epoll interface ;p
            <braunr> yes
            <desrt> it's worth noting that there is also a semi-widely
              available non-standard extension called
              pthread_cond_timedwait_relative_np that you could implement
              instead
            <desrt> it takes a (relative) timeout instead of an absolute one --
              we can use that if it's available
            <braunr> desrt: why would you want relative timeouts ?
            <desrt> braunr: if you're willing to take the calculations into
              your own hands and you don't have another way to base it on
              monotonic time it starts to look like a good alternative
            <desrt> and indeed, this is the case on android and macos at least
            <braunr> hm
            <desrt> not great as a user-facing API of course.... due to the
              spurious wakeup possibility and need to retry
            <braunr> so it's non standard alternative to a monotonic clock ?
            <desrt> no -- these systems have monotonic clocks
            <desrt> what they lack is pthread_condattr_setclock()
            <braunr> oh right
            <desrt> which is documented in POSIX but labelled as 'optional'
            <braunr> so relative is implicitely monotonic
            <desrt> yes
            <desrt> i imagine it would be the same 'relative' you get as the
              timeout you pass to poll()
            <desrt> since basing anything like this on wallclock time is
              absolutely insane
            <desrt> (which is exactly why we refuse to use wallclock time on
              our timed waits)
            <braunr> sure
            <braunr> i'm surprised clock_monotonic is even optional in posix
              2008
            <braunr> but i guess that's to give some transition margin for
              small embedded systems
            <desrt> when you think about it, CLOCK_REALTIME really ought to
              have been the optional feature
            <desrt> monotonic time is so utterly basic
            <braunr> yes
            <braunr> and that's how it's normally implemented
            <braunr> kernels provide a monotonic clock, and realtime is merely
              shifted from it

      * <a id=sys_eventfd.h>`sys/eventfd.h`</a>

      * <a id=sys_inotify.h>`sys/inotify.h`</a>

      * <a id=sys_signalfd.h>`sys/signalfd.h`</a>

      * <a id=sys_timerfd.h>`sys/timerfd.h`</a>

      * <a id=timespec_get>`timespec_get` (74033a2507841cf077e31221de2481ff30b43d51,
        87f51853ce3671f4ba9a9953de1fff952c5f7e52)</a>

      * <a id=waitflags.h>`waitflags.h` (`WEXITED`, `WNOWAIT`, `WSTOPPED`, `WCONTINUED`)</a>

        IRC, freenode, #hurd, 2012-04-20:

            <pinotree> in glibc, we use the generic waitflags.h which, unlike
              linux's version, does not define WEXITED, WNOWAIT, WSTOPPED,
              WCONTINUED
            <pinotree> should the generic bits/waitflags.h define them anyway,
              since they are posix?
            <youpi> well, we'd have to implement them anyway
            <youpi> but otherwise, I'd say yes
            <pinotree> sure, but since glibc headers should expose at least
              everything declared by posix, i thought they should be defined
              anyway
            <youpi> that might bring bugs
            <youpi> some applications might be #ifdefing them
            <youpi> and break when they are defined but not working
            <pinotree> i guess they would define them to 0, andd having them to
              non-zero values shouldn't break them (since those values don't do
              anything, so they would act as if they were 0.. or not?)
            <youpi> no, I mean they would do something else, not define them to
              0
            <pinotree> like posix/tst-waitid.c, you mean?
            <youpi> yes

        See `posix/tst-waitid.out` failure below.

      * <a id=getconf>`getconf` things (see below the results of `tst-getconf.out`)</a>

      * <a id=getsockopt>`getsockopt`, `setsockopt`</a>

        IRC, freenode, #hurd, 2013-02-14

            <gnu_srs> Hi, {get,set}sockopt is not supported on Hurd. This shows
              e.g. in the gnulib's test-{poll,select} code.
            <gnu_srs> Reading
              http://hea-www.harvard.edu/~fine/Tech/addrinuse.html there might
              be reasons _not_ to implement them, comments?
            <pinotree> uh? they are supported on hurd
            <gnu_srs> not  SO_REUSEPORT for setsockopt()
            <pinotree> that isn't the same as claiming "get/setsockopt is not
              supported on hurd"
            <pinotree> most probably that option is not implemented by the
              socket family you are using
            <gnu_srs> OK, some options like  SO_REUSEPORT then, more info in
              the link.
            <pinotree> note also SO_REUSEPORT is not posix
            <pinotree> and i don't see SO_REUSEPORT mentioned in the page you
              linked
            <gnu_srs> No, but SO_REUSEADDR

        IRC, freenode, #hurd, 2013-02-23

            <gnu_srs> as an example, the poll test code from gnulib fails due
              to that problem (and I've told you before)
            <pinotree> gnu_srs: what's the actual failure?
            <pinotree> can you provide a minimal test case showing the issue?
            <gnu_srs> pinotree: A smaller test program:
              http://paste.debian.net/237495/
            <pinotree> gnu_srs: setting SO_REUSEADDR before binding the socket
              works...
            <pinotree> and it seems it was a bug in the gnulib tests, see
              http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commit;h=6ed6dffbe79bcf95e2ed5593eee94ab32fcde3f4
            <gnu_srs> pinotree: You are right, still the code I pasted pass on
              Linux, not on Hurd.
            <pinotree> so?
            <pinotree> the code is wrong
            <pinotree> you cannot change what bind does after you have called
              it
            * pinotree → out
            <gnu_srs> so linux is buggy?
            <braunr> no, linux is more permissive
            <braunr> (at least, on this matter)

      * <a id=getcontext>`getcontext`/`makecontext`/`setcontext`/`swapcontext`</a>

        Support for these functions within the Hurd threadvar environment has
        been added, but for multi-threaded applications ([[libpthread]]), it is
        a bit clunky: as a practical requirement, a thread's stack size always
        has to be equal to `PTHREAD_STACK_DEFAULT`, 2 MiB, and also has to be
        naturally aligned.  The idea is still to [[get rid of Hurd threadvars
        and replace them with TLS|service_solahart_jakarta_selatan__082122541663/glibc/t/tls-threadvar]].

        Aside from [[gccgo]], the following packages might make use of these
        functions, searching on <http://codesearch.debian.net/> for
        `\b(get|set|make|swap)context\s*\(` on 2013-05-18: boost1.49,
        chromium-browser, gtk-vnc, guile-1.8, iceape, icedove, iceweasel,
        libgc, libsigsegv, luatex, mono, nspr, pth, ruby1.8, texlive-bin, uim,
        and more.

        IRC, OFTC, #debian-hurd, 2013-09-08:

            <pinotree> oh, and even ruby2.0 suffers because of fixed-stack
              threads
            <youpi> yes, we definitely need to finish fixing it
            <youpi> my current work is in our glibc repo, youpi/tls-threadvar
            <pinotree> | *** makecontext: a stack at 0xbc000 with size 0x40000
              is not usable with threadvars
            <pinotree> all 8 failing tests with that
            <youpi> maybe we can hand-disable the use of contexts in ruby for
              now?
            <pinotree> gg0: ↑ :)
            <gg0> after the pseudo-patch i RFCed, i don't deserve to say
              anything else about that :)
            <pinotree> i mean, feel free to investigate and "fix" ruby2.0 as
              above :)
            <gg0> eh maybe i'd just be able to hand-disable failing
              thread-related _tests_ :)
            <gg0> i'm still hoping some real developer picks and actually fixes
              it, seems it's not enough interesting though
            <azeem> 21:37 < youpi> yes, we definitely need to finish fixing it
            <gg0> afaiu youpi is working on threadvars-tls migration, which
              would mean fixing them all. i just meant fixing ruby, which would
              mean having puppet btw
            <youpi> gg0: "actually fixing" means fixing threadvars-tls
              migration
            <youpi> "just fixing" ruby can be done by simply disabling context
              use in ruby

        IRC, OFTC, #debian-hurd, 2013-09-10:

            <gg0> this one fixes make test by disabling context and giving more
              time to timing related tests http://paste.debian.net/plain/37977/
            <gg0> make test-all is another story
            <youpi> gg0: AIUI, the sleep part should get fixed by the next
              glibc upload, which will include the getclk patch
            <youpi> but the disabling context part could be good to submit to
              the debian ruby package, mentioning that this is a workaround for
              now
            <gg0> unfortunately still not enough, test-all still fails
            <youpi> does it make the package not build?
            <gg0> test-all is the second part of what we call tests
            <gg0> they build and package (they produce all ruby packages),
              after that they run debian/run-test-suites.bash which is make
              test + make test-all
            <gg0> well after or during the build doesn't matter, it's their
              testsuite
            <gg0> ok just failed:
            <gg0> TestBug4409#test_bug4409 = Illegal instruction
            <gg0> make: *** [yes-test-all] Error 132
            <gg0> what to do with Illegal instruction?
            <gg0> just found 2 words that make everybody shut up :p
            <pinotree> same as above: debug it
            <teythoon> gg0: have you confirmed that this is reproducible? I've
              once had a process die with SIGILL and it was not and I figured
              it might have been a (qemu?) glitch
            <gg0> seems i'm running tests which are disabled on _all_ archs,
              better so
            <gg0> well, this should be reproducible. i just got it on a qemu, i
              could try to reproduce it on real hardware but as just said, i
              was testing tests disabled by maintainer so completely useless
            <teythoon> gg0: yeah, I'm running all my hurd instances on qemu/kvm
              as well, I meant did you get this twice in a row?
            <gg0> to be honest i got another illegal instruction months ago but
              don't recall doing what
            <gg0> nope not twice, i've commented it out. then run the remaining
              and then found out i should not have done what i was doing
            <gg0> but i could try to reproduce it
            <gg0> ok now i recall i got it another one few hours ago on real
              hardware, from logs:
            <gg0> TestIO#test_copy_stream_socket = Illegal instruction
            <gg0> teythoon: on real hardware though
            <gg0> and this is the one i should debug once it finishes, still
              running

        IRC, freenode, #hurd, 2013-09-11:

            <gg0_> ../sysdeps/mach/hurd/jmp-unwind.c:53: _longjmp_unwind:
              Assertion `! __spin_lock_locked (&ss->critical_section_lock)'
              failed.
            <gg0_> and
            <gg0_> ../libpthread/sysdeps/mach/pt-thread-halt.c:51:
              __pthread_thread_halt: Unexpected error: (ipc/send) invalid
              destination port.
            <tschwinge> gg0_: Which libpthread source are these?  Stock Debian
              package?
            <gg0_> tschwinge: everything debian, ruby rebuilt with
              http://paste.debian.net/plain/38519/ which should disable
              *context

        IRC, OFTC, #debian-hurd, 2013-09-11:

            <gg0_> wrt ruby, i'd propose a patch that disables *context and
              comments out failed tests (a dozen). most of them are timing
              related, don't always fail
            <gg0_> if they failed gracefully, we could leave them enabled and
              just ignoring testsuite result, but most of them block testsuite
              run when fail
            <gg0_> anyone against? any better idea (and intention to implement
              it? :p)?
            <gg0_> youpi: is disabling some tests acceptable? ^
            <youpi> it'd be good to at least know what is failing
            <youpi> so as to know what impact hiding these failures will have
            <youpi> remember that hiding bugs usually means getting bitten by
              them even harder later :)
            <gg0_> many of them use pipes
            <gg0_> here the final list, see commented out ones
              http://paste.debian.net/plain/38426
            <gg0_> and as said some don't always fails
            <gg0_> test_copy_stream_socket uses a socket
            <youpi> note that we can still at least build packages with notest
            <youpi> at least to get the binaries uploaded
            <youpi> disabling *context should however really be done
            <youpi> and the pipe issues are concerning
            <youpi> I don't remember other pipe issues
            <youpi> so maybe it's a but in the ruby bindings
            <gg0_> i just remember they didn't die, then something unknown
              fixed it
            <youpi> I see something frightening in io.c
            <youpi> #if BSD_STDIO
            <youpi>          preserving_errno(fseeko(f, lseek(fileno(f),
              (off_t)0, SEEK_CUR), SEEK_SET));
            <youpi> #endif
            <youpi> this looks very much like a workaround for an odd thing in
              BSD
            <youpi> it happens that that gets enabled on hurd too, since
              __MACH__ is defined
            <youpi> you could try to drop these three lines, just to see
            <youpi> this is very probably very worth investigating, at any rate
            <youpi> even just test_gets_limit_extra_arg is a very simple test,
              that I fail to see why it should ever fail on hurd-i386
            <youpi> starting debugging it would be a matter of putting printfs
              in io.c, to check what gets called, with what parameters, etc.
            <youpi> just a matter of taking the time to do it, it's not very
              complex
            <gg0_> youpi: are you looking at 1.8? no BSD_STDIO here
            <youpi> yes, 1.8
            <gg0_> 1.9.3.448
            <gg0_> landed to sid few days ago
            <youpi> ah, I have 1.87
            <youpi> +.
            <gg0_> my favourites are TestIO#test_copy_stream_socket and
              TestIO#test_cross_thread_close_fd -> Illegal instruction
            <gg0_> TestIO#test_io_select_with_many_files sometimes Illegal
              instruction, sometimes ruby1.9.1:
              ../sysdeps/mach/hurd/jmp-unwind.c:53: _longjmp_unwind: Assertion
              `! __spin_lock_locked (&ss->critical_section_lock)' failed.

        [[thread-cancel_c_55_hurd_thread_cancel_assertion___spin_lock_locked_ss_critical_section_lock]]?

            <gg0_> trying to debug illegal instruction
              http://paste.debian.net/plain/38585/
            <gg0_> (yes, i'm not even good at gdbing)
            <gg0_> any hint?
            <gg0_> oh found out there's an intree .gdbinit, that might
              complicate things

        IRC, OFTC, #debian-hurd, 2013-09-13:

            <gg0_> where should it be implemented MAP_STACK? plus, is it worth
              doing it considering migration to tls, wouldn't it be useless?
            <gg0_> sysdeps/mach/hurd/mmap.c i should reduce stupid questions
              frequency from daily to weekly basis

        IRC, OFTC, #debian-hurd, 2013-09-14:

            <gg0_> say i managed to mmap 0x200000-aligned memory
            <gg0_> now i get almost the same failed tests i get disabling
              *context
            <gg0_> that would mean they don't depend on threading

        IRC, freenode, #hurd, 2013-09-16:

            <gg0> i get many ../sysdeps/mach/hurd/jmp-unwind.c:53:
              _longjmp_unwind: Assertion `! __spin_lock_locked
              (&ss->critical_section_lock)' failed.
            <gg0> by running ruby testsuite, especially during test_read* tests
              http://sources.debian.net/src/ruby1.9.1/1.9.3.448-1/test/ruby/test_io.rb#L972
            <gg0> read/write operations with pipes
            <braunr> gg0: that's weird
            <braunr> gg0: debian glibc ?
            <gg0> braunr: yep, debian 2.17-92
            <gg0> sometimes assertion above, sometimes tests in question get
              stuck reading
            <gg0> it would be nice reproducing it w/o ruby
            <gg0> probably massive io on pipes could do the job
            <gg0> also more nice finding someone who finds it interesting to
              fix :p
            <gg0> ruby is rebuilt with http://paste.debian.net/plain/40755/, no
              *context
            <gg0> pipe function in tests above creates one thread for write,
              one for read
              http://sources.debian.net/src/ruby1.9.1/1.9.3.448-1/test/ruby/test_io.rb#L26
            <tschwinge> gg0: About the jmp-unwind assertion failure: is it be
              chance this issue:
              <http://www.gnu.org/software/hurd/open_issues/thread-cancel_c_55_hurd_thread_cancel_assertion___spin_lock_locked_ss_critical_section_lock.html>?
              I didn't look in detail.
            <braunr> tschwinge: that's what i thought too about the assertion,
              which is why i find it strange
            <gg0> asserting it's not locked then locking it doesn't exclude
              race conditions

        IRC, OFTC, #debian-hurd, 2013-09-17:

            <gg0> youpi: i guess no one saw it anymore since
              tg-thread-cancel.diff patch
            <gg0> it =
              http://www.gnu.org/software/hurd/open_issues/thread-cancel_c_55_hurd_thread_cancel_assertion___spin_lock_locked_ss_critical_section_lock.html
            <gg0> this one comes from sysdeps/mach/hurd/jmp-unwind.c:53 though
            <gg0> another assertion to remove?
            <youpi> gg0: it's not exactly the same: in hurd_thread_cancel we
              hold no lock at all at the assertion point
            <youpi> in jmp-unwind.c, we do hold a lock
            <youpi> and the assertion might be actually true because all other
              threads are supposed to hold the first lock before taking the
              other one
            <youpi> you could check for that in other places
            <youpi> and maybe it's the other place which wouldhave to be fixed
            <youpi> also look for documentation which would say that

        IRC, freenode, #hurd, 2013-09-17:

            <braunr_> gg0: is that what we do ??
            <gg0> braunr: well, i was looking at
              http://sources.debian.net/src/eglibc/2.17-92/debian/patches/hurd-i386/tg-thread-cancel.diff
            <gg0> which afaics fixes
              http://www.gnu.org/software/hurd/open_issues/thread-cancel_c_55_hurd_thread_cancel_assertion___spin_lock_locked_ss_critical_section_lock.html
            <gg0> the one i get now is
              http://sources.debian.net/src/eglibc/2.17-92/sysdeps/mach/hurd/jmp-unwind.c#L53
            <gg0> 09:12 < youpi> gg0: it's not exactly the same: in
              hurd_thread_cancel we hold no lock at all at the assertion point
            <gg0> 09:13 < youpi> in jmp-unwind.c, we do hold a lock
            <gg0> 09:13 < youpi> and the assertion might be actually true
              because all other threads are supposed to hold the first lock
              before taking the other one
            <braunr> gg0: that assertion is normal
            <braunr> it says there is a deadlock
            <braunr> ss->critical_section_lock must be taken before ss->lock
            <gg0> you mean ss->lock before ss->critical_section_lock
            <braunr> no
            <gg0> ah ok got it
            <braunr> that's a bug
            <braunr> longjmp
            <braunr> ugh
            <braunr> you could make a pass through the various uses of those
              locks and check what the intended locking protocol should be
            <braunr> i inferred ss->critical_section_lock before ss->lock from
              hurd_thread_cancel
            <braunr> this might be wrong too but considering this function is
              used a lot, i doubt it
            <gg0> (no, i hadn't got it, i was looking at jmp-unwind.c where
              lock is before critical_section_lock)
            <gg0> could we get useful info from gdb'ing the assertion?
            <tschwinge> gg0: Only if you first get an understanding why it is
              happening, what you expect to happen instead/why it shall not
              happen/etc.  Then you can perhaps use GDB to verify that.
            <gg0> i can offer an irc interface if anyone is interested, it's
              ready, just to attach :)
            <gg0> this is the test
              http://sources.debian.net/src/ruby1.9.1/1.9.3.448-1/test/ruby/test_io.rb#L937
            <gg0> pipe function creates two threads
              http://sources.debian.net/src/ruby1.9.1/1.9.3.448-1/test/ruby/test_io.rb#L26
            <gg0> Attaching to pid 15552
            <gg0> [New Thread 15552.1]
            <gg0> [New Thread 15552.2]
            <gg0> (gdb) 

        IRC, freenode, #hurd, 2013-09-21:

            <youpi> gg0: it seems the assert (! __spin_lock_locked
              (&ss->critical_section_lock)); is bogus
            <youpi> but it'd be good to catch a call trace
            <youpi> well, it may not be bogus, in case that lock is only ever
              taken by the thread itself
            <youpi> in that case, inside longjmp_unwind we're not supposed to
              have it already
            <youpi> ok, that's what we had tried to discuss with Roland
            <youpi> it can happen when playing with thread cancelation
            <braunr> youpi: the assertion isn't exactly bogus
            <braunr> the lock ordering is
            <youpi> braunr: which one are you talking about?
            <youpi> the one in hurd_thread_cancel looks really wrong
            <youpi> and some parts of the code keep the critical section lock
              without ss->lock held, so I don't see how lock ordering can help

        IRC, OFTC, #debian-hurd, 2013-09-22:

            <gg0> how much does this patch suck on a scale from 1 to 10?
              http://paste.debian.net/plain/44810/
            <youpi> well, the stack allocation issue will go away once I get
              the threadvars away
            <youpi> I'm working on it right now
            <youpi> about the lib paths, it makes sense to add the gnu case,
              but i386-gnu shouldn't be put in the path
            <gg0> that's great
            <gg0> so seems the wrong moment for what i've already done
              ie. asking terceiro what he thinks about patch above :/
            <gg0> any distro-independent way to get libc.so and libm.so path?
            <gg0> ruby as last resource takes them from "ldd ruby"
            <pinotree> gg0: should work fine then
            <gg0> well it does. but gnu doesn't have a case so it hits default
              which is broken
              http://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/40235/entry/test/dl/test_base.rb
            <gg0> btw even linux and kfreebsd with debian multipath have broken
              cases but they don't hit default and get fixed by ldd later
            <pinotree> why it is broken? are arguments passed to that script?
            <gg0> i'm not sure about what propose. a broken case so it doesn't
              hit default like linux and kfbsd
            <gg0> yes they are :/
            <pinotree> and which ones are? who executes that script and which
              arguments does it pass to it?
            <gg0> other ruby scripts which have nothing to do with libc/libm
            <pinotree> well, if they pass arguments which should be the paths
              to libc and libm, they must be getting such paths, aren't they?
            <gg0> they don't. arguments are other ruby scripts, don't know why,
              maybe something else broken before
            <gg0> but that would mean that before there's a smarter path
              detection way, i doubt
            <pinotree> then add the case for hurd, but setting both libc and
              libm as nil
            <pinotree> so they will be fetched again
            <gg0> yep and would really ugly
            <gg0> +be
            <gg0> "please commit this one which wrongly sets paths."
            <gg0> an alternative would be removing default case
            <gg0> or pointing it out by proposing ldd in hurd case might make
              them review the whole detection
            <gg0> by setting correct paths like in patch above it wouldn't
              break a possible hurd-amd64, it would work due to ldd
            <youpi> gg0: that's why I said the patch is fine, but without the
              i386-gnu part of the path
            <youpi> just like it happens to be on linux & kfreebsd
            <gg0> i might take ldconfig -p output
            <gg0> to make it uselessly correct from start
            <gg0> http://bugs.ruby-lang.org/issues/8937
            <pinotree> note thar ruby 1.8 is EOL
            <pinotree> *that
            <gg0> -- If you're reporting a bug in both Ruby 1.9/2.0 and Ruby
              1.8: ruby-trunk, and write like "this bug can be reproduced in
              Ruby 1.8 as well." --
            <gg0> i suspect this one won't be the only one i'll file. unless
              upcoming youpi's tls and braunr's thread destruction patches fix
              all ruby tests
            <pinotree> did you check ruby2.0 too, btw?
            <gg0> switched to ruby2 few hours ago. i pointed out 2nd part of
              testsuite is not enabled, probably terceiro will enable it soon
            <gg0> by applying my patch above we'd completely fix current
              ruby2.0 build (yes because tests are not completely enabled)
            <pinotree> what you run those extra tests?
            <gg0>
              http://anonscm.debian.org/gitweb/?p=collab-maint/ruby1.9.1.git;a=blob;f=debian/run-test-suites.bash
            <gg0> make test + make test-all
            <gg0> (test-all is 2nd part)
            <gg0> many are problematic. i didn't finish yet to suppress them
              one-by-one. one i suppress, another one pops up
            <gg0> either get stuck or well known assertion
            <pinotree> check those that get stuck :)
            <gg0> which kind of check?
            <pinotree> "check" as in "debug"
            <gg0> btw i tested puppet few days ago (with ruby1.8), it seems to
              be working, at least at trasferring files from master
            <gg0> don't know about any advanced usage
            <pinotree> ruby 1.8 is going to die soon, so testing things against
              it is not totally useful
            <gg0> so you assume 1.8 is less broken than 1.9/2.0, right?
            <pinotree> no
            <gg0> i just can see it's been built without tests itself too
            <pinotree> erm no
            <gg0> well ok, if i can be wrong, i'll be wrong
            <gg0> i say that after a quick check time ago, might be wrong
            <pinotree> `getbuildlogs ruby1.8 last hurd-i386`, see the last
              build log
            <gg0> ah from pkg-kde-tools
            <gg0> i hate kde :)
            <pinotree> no?
            <gg0> no what?
            <pinotree> devscripts: /usr/bin/getbuildlog
            <gg0> pkg-kde-tools: /usr/bin/pkgkde-getbuildlogs
            <pinotree> which is not what i said
            <gg0> wait that's what apt-file found
            <gg0> maybe i should update it
            <gg0> is it so recent?
            <pinotree> no
            <pinotree> i just added an 's' more at the end of the command, but
              typing getbu<tab> could have been helpful anyway...
            <gg0> yeah just got it
            <gg0> my fault not to have tried to run it before looking for it
            <pinotree> and btw, i don't see what hating kde has to do with
              tools developed by qt/kde debian packagers
            <gg0> j/k i simply don't use kde, never used and apt-file search
              told me it was from pkg-kde-tools
            <gg0> btw build log says "make test" fails, doesn't even start. and
              its failure doesn't block the build
            <pinotree> exactly
            <gg0> s/make test/make test-all/
            <gg0> "make test" (aka "1st part" above) doesn't run. i guess it's
              missing in packaging

        IRC, freenode, #hurd, 2013-09-22:

            <braunr> youpi: i mean the lock order where the assertion occurs is
              reserved compared to the one in hurd_thread_cancel
            <braunr> (and the one in hurd_thread_cancel is the same used in
              hurd condition-related functions)
            <youpi> "reserved" ?
            <braunr> reversed
            <braunr> :)
            <youpi> by "the assertion occurs", you mean gg0's spot?
            <braunr> yes
            <youpi> well , the assertion also happens in hurd_thread_cancel
            <braunr> it does oO
            <braunr> i didn't see that
            <youpi> but otherwise yes, it's completely bogus that we have both
              locking in different orders
            <youpi> could you submit the fix for jmp-unwind.c to upstream?
            <braunr> what fix ?
            <youpi> reversing the lock order
            <braunr> ah, simply that
            <youpi> (well, provided that hurd_thread_cancel is right)
            <braunr> that's what i suggested to gg0
            <braunr> to check where those locks are held and determine the
              right order

        IRC, OFTC, #debian-hurd, 2013-09-28:

            <gg0_> now we'd just need tls
            <gg0_> http://bugs.ruby-lang.org/issues/8937
            <gg0_> well, it would pass makecheck at least. makecheckall would
              keep hanging on threads/pipes tests i guess, unless tls/thread
              destruction patches fix them

        IRC, OFTC, #debian-hurd, 2013-10-05:

            <youpi> so what is missing for ruby2.0, only disabling use of
              context for now, no?
            <pinotree> i'm not tracking it closely, gg0_ is
            <gg0_> maybe terceiro would accept a patch which only disables
              *context, "maybe" because he rightly said changes must go
              upstream
            <gg0_> anyway with or without *context, many many tests in
              makecheckall fail by making it hang, first with and without
              assertion you removed, now they all simply hang
            <gg0_> youpi: what do we want to do? if you're about finishing tls
              migration (as i thought a couple of weeks ago), i won't propose
              anything upstream. otherwise i could but that will have to be
              reverted upstream once you finish
            <gg0_> about tests, current ruby2.0 doesn't run makecheckall, only
              makecheck which succeeds on hurd (w/o context)
            <gg0_> if anyone wants to give it a try:
              http://paste.debian.net/plain/51089
            <gg0_> first hunk makes makecheck (not makecheckall) succeed and
              has been upstreamed, not packaged yet
            <pinotree> what about makecheckall for ruby2.0?
            <gg0_> 16:58 < gg0_> anyway with or without *context, many many
              tests in makecheckall fail by making it hang, first with and
              without assertion you  removed, now they all simply hang
            <pinotree> i for a moment thought it as for 1.9.1, ok
            <pinotree> these hangs should be debugged, yes
            <gg0_> nope, tests behavior doesn't change between 1.9 and 2.0. i
              started suppressing tests onebyone on 2.0 as well and as happened
              on 1.9, i gave up cause there were too many
            <gg0_> yep a smart mind could start debugging them, starting from
              patch above pasted by a lazy one owner
            <gg0_> one problem is that one can't reproduce them by isolate
              them, they don't fail. start makecheckall then wait for one fail
            <gg0_> now after my stupid report, someone like pinotree could take
              it over, play with it for half an hour/an hour (which equals to
              half a gg0's year/a gg0's year
            <gg0_> )
            <gg0_> and fix them all

            <gg0_> 17:05 < gg0_> youpi: what do we want to do? if you're about
              finishing tls migration (as i thought a couple of weeks ago), i
              won't propose  anything upstream. otherwise i could but that will
              have to be reverted upstream once you finish
            <youpi> gg0_: I don't really know what to answer
            <youpi> that's why I didn't answer :)
            <gg0_> youpi: well then we could upstream context disable and keep
              it disabled even if you fix tls. ruby won't be as fast as it
              would be with context but i don't think anyone will complain
              about that. then once packaged, if terceiro doesn't enable
              makecheckall, we will have ruby2.0 in main
            <youpi> that can be a plan yes
            <gg0_> btw reverting it upstream should not be a problem eventually
            <youpi> sure, the thing is remembering to do it
            <gg0_> filed http://bugs.ruby-lang.org/issues/8990
            <gg0_> please don't fix tls too soon :)
            <gg0_> s/makecheck/maketest/g

        IRC, OFTC, #debian-hurd, 2013-10-08:

            <gg0_> ok. *context disabled http://bugs.ruby-lang.org/issues/8990

            <gg0> bt full of an attached stuck ruby test
              http://paste.debian.net/plain/53788/
            <gg0> anything useful?
            <youpi> uh, is that really all?
            <youpi> there's not much interesting unfortunately
            <youpi> did you run thread apply all bt full ?
            <youpi> (not just bt full)
            <gg0> no just bt full
            <gg0> http://paste.debian.net/plain/53790/
            <gg0> wait, there's a child
            <gg0> damn ctrl-c'ing while it was loading symbols made it crash :/
            <gg0> restarted testsuite
            <gg0> isn't it interesting that failed tests fail only if testsuite
              runs from beginning, whereas if run singularly, they succeed?
            <gg0> as it got out of whatever resources
            <gg0> youpi: http://paste.debian.net/plain/53798/
            <youpi> the interesting part is actually right at the top
            <youpi> it's indeed stuck in the critical section spinlock
            <youpi> question being what is keeping it
            <youpi> iirc I had already checked in the whole glibc code that all
              paths which lock  critical_section_lock actually release it in
              all cases, but maybe I have missed some
            <youpi> (I did find some missing paths, which I fixed)
            <gg0> i guess the same check you and braunr talk about in
              discussion just before this anchor
              http://darnassus.sceen.net/~hurd-web/open_issues/glibc/#recvmmsg
            <youpi> yes, but the issue we were discussing there is not what
              happens here
            <youpi> we would see another thread stuck in the other way roudn,
              otherwise
            <gg0> no way to get what is locking?
            <youpi> no, that's not recorded
            <gg0> and what about writing it somewhere right after getting the
              lock?
            <youpi> one will have to do that in all spots taking that lock
            <youpi> but yes, that's the usual approach
            <gg0> i would give it try but eglibc rebuild takes too much time,
              that conflicts with my laziness
            <gg0> i read even making locks timed would help

        IRC, OFTC, #debian-hurd, 2013-10-09:

            <gg0> so correct order would be:
            <gg0> __spin_lock (&ss->lock); // locks sigstate
            <gg0> __spin_lock (&ss->critical_section_lock);
            <gg0> [do critical stuff]
            <gg0> __spin_unlock (&ss->critical_section_lock);
            <gg0> __spin_unlock (&ss->lock);  // unlocks sigstate
            <gg0> ?

            <gg0> 21:44 < gg0> terceiro: backported to 2.0 (backport to 1.9 is
              waiting) https://bugs.ruby-lang.org/issues/9000
            <gg0> 21:46 < gg0> that means that if you take a 2.0 snapshot,
              it'll build fine on hurd (unless you introduce maketestall as in
              1.9, that would make it get stuck like 1.9)
            <gg0> 21:48 < terceiro> gg0: nice
            <gg0> 21:48 < terceiro> I will try to upload a snapshot as soon as
              I can
            <gg0> 21:52 < gg0> no problem. you might break my "conditional
              satisfaction" by adding maketestall. better if you do that on
              next+1 upload so we'll have at least one 2.0 built :)

            <gg0> would it be a problem granting me access to a porter box to
              rebuild eglibc+ruby2.0?
            <gg0> i'm already doing it on another vm but host often loses power
            <pinotree> you cannot install random stuff on a porterbox though
            <gg0> i know i'd just need build-deps of eglibc+ruby2.0 i guess
            <gg0> (already accessed to porter machines in the past, account
              lele, mips iirc)
            <gg0> ldap should remember that
            <gg0> don't want to disturb anyone else work btw. if it's not a
              problem, nice. otherwise no problem
            <pinotree> please send a request to admin@exodar.debian.net so it
              is not forgotten
            <gg0> following this one would be too "official"?
              http://dsa.debian.org/doc/guest-account/
            <pinotree> hurd is not a release architecture, so hurd machines are
              not managed by DSA
            <gg0> ok
            <pinotree> the general procedure outlines is ok though, just need
              to be sent to the address above
            <gg0> sent
            <gg0> (1st signed mail with mutt, in the worst case i've attached
              passphrase :))
            <youpi> gg0: could you send me an ssh key?
            <pinotree> no alioth account?
            <youpi> yes, but EPERM
            <gg0> youpi: sent to youpi@
            <youpi> youpi@ ?
            <gg0> (... which doesn't exist :/)
            <gg0> sthibault@
            <youpi> please test gg0-guest@exodar.debian.net ?
            <youpi> (I'd rather not adduser the ldap name, who knows what might
              happen when you get your DD account)
            <gg0> i'm in. thanks
            <youpi> you're welcome
            <gg0> ldap users need to be adduser'ed?
            <youpi> I'm not getting your ldap user account from ud-replicate,
              at least
            <gg0> (btw i never planned to apply nm, i'd be honoured but i
              simply think not to deserve it)
            <youpi> never say never ;)
            <gg0> bah i like failing. that would be a success. i can't :)
            <gg0> gg0-guest@exodar:~$ dchroot   
            <gg0> E: Access not authorised
            <gg0> I: You do not have permission to access the schroot service.
            <gg0> I: This failure will be reported.
            <youpi> ah, right, iirc I need to add you somewhere
            <youpi> gg0: please retry?
            <gg0> works
            <youpi> good
            <gg0> are there already eglibc+ruby2.0 build-deps?
            <youpi> yes
            <gg0> oh that means i should do something myself now :)
            <youpi> yep, that had to happen at some point :)
            <gg0> my laziness thanks: "at some point" is better than "now" :)

        IRC, freenode, #hurd, 2013-10-10:

            <gg0> ok just reproduced the
              former. ../sysdeps/mach/hurd/jmp-unwind.c:53 waits
            <braunr> 20:37 < braunr> gg0: does ruby create and destroy threads
              ?
            <gg0> no idea
            <gg0> braunr: days ago you and youpi talked about locking order
              (just before this anchor
              http://darnassus.sceen.net/~hurd-web/open_issues/glibc/#recvmmsg)
            <braunr> oh right
            <gg0> <youpi> could you submit the fix for jmp-unwind.c to
              upstream?
            <braunr> it didn't made it in the todo list
            <gg0> so correct order is in hurd_thread_cancel, right?
            <braunr> sorry about that
            <braunr> we need to make a pass to make sure it is
            <gg0> that means locking first ss->critical_section_lock _then_
              ss->lock
            <gg0> correct?
            <braunr> but considering how critical hurd_thread_cancel is, i
              expect so

            <gg0> i get the same deadlock by swapping locks
            <gg0> braunr: youpi: fyi ^
            <gg0> 20:51 < braunr> 20:37 < braunr> gg0: does ruby create and
              destroy threads ?
            <gg0> how could i check it?
            <braunr> gg0: ps -eflw
            <youpi> gg0: that's not surprising, since in the b acktrace you
              posted there isn't another thread locked in the other order
            <youpi> so it's really that somehow the thread is already in
              critical sesction
            <braunr> youpi: you mean there is ?
            <braunr> ah, it's not the same bug
            <youpi> no, in what he posted, no other thread is stuck 
            <youpi> so it's not a locking order
            <youpi> just that the critical section is actually busy
            <gg0> youpi: ack
            <gg0> braunr: what's the other bug? ext2fs one?
            <braunr> gg0: idk
            <gg0> braunr: thanks. doesn't show threads (found -T for that) but
              at least doesn't limit columns number if piped (thanks to -w)
            <braunr> it does
            <braunr> there is a TH column
            <gg0> ok thread count. -T gives more info

        IRC, freenode, #hurd, 2013-10-24:

            <youpi> ruby2.0 builds fine with the to-be-uploaded libc btw
            <gg0> youpi: without d-ports patches? surprise me :)
            <youpi> gg0: plain main archive source
            <gg0> you did it. surprised
            <gg0> ah ok you just pushed your tls. great!
            <braunr> tls will fix a lot of things

        IRC, OFTC, #debian-hurd, 2013-11-03:

            <youpi> gg0: 
            <youpi> #252 test_fork.rb:30:in `<top (required)>': core dumped
              [ruby-core:28924]
            <youpi> FAIL 1/949 tests failed
            <youpi> with the to-be-uploaded glibc
            <gg0> why does it coredump?
            <gg0> that's the test i had workarounded by increasing sleep from 1
              to 3 but i don't recall it coredump'ed
            <gg0> *recall if
            <gg0> "sleep 1" at bootstraptest/test_fork.rb:33
            <youpi> how can I run the test alone?

        IRC, OFTC, #debian-hurd, 2013-11-04:

            <youpi> gg0: ^
            <gg0> it should not take much
            <gg0> run $ make OPTS=-v test
            <gg0> found out how to minimize
            <gg0> mkdir _youpi && cp bootstraptest/{runner,test_fork}.rb _youpi
            <gg0> then run $ ./miniruby -I./lib -I. -I.ext/common
              ./tool/runruby.rb --extout=.ext  -- --disable-gems
              "./_youpi/runner.rb" --ruby="ruby2.0 -I./lib" -q -v
            <gg0> youpi: that should work
            <youpi> #1 test_fork.rb:1:in `<top (required)>': No such file or
              directory - /usr/src/ruby1.9.1-1.9.3.448/ruby2.0
              -I/usr/src/ruby1.9.1-1.9.3.448/lib -W0  bootstraptest.tmp.rb
              [ruby-dev:32404]
            <gg0> seems it can't find /usr/src/ruby1.9.1-1.9.3.448/ruby2.0
            <youpi> well it's ruby1.9.1 indeed :)
            <youpi> ok, got core
            <gg0> replace 2.0 with 1.9, check what you have in rootdir
            <gg0> k
            <youpi> Mmm, no, there's no core file
            <gg0> does stupidly increasing sleep time work?
            <youpi> nope
            <gg0> without *context it runs "make test" fine. real problems come
              later with "make test-all"
            <gg0> wrt test_fork, is correspondence between signals correct? i
              recall i read something about USR1 not implemented
            <youpi> USR1 is implemented, it's SIGRT which is not implemented
            <gg0> my next wild guess is that that has something to do with
              atfork, whatever that means
            <gg0> it makes 2 forks: one sleeps for 1 sec then kills -USR1
              itself, the second traps USR1 in getting current time. in the
              meanwhile parent sleeps for 2 secs

        IRC, OFTC, #debian-hurd, 2013-11-07:

            <gg0> ruby2.0 just built on unstable

        IRC, OFTC, #debian-hurd, 2013-11-09:

            <gg0> youpi: just found out a more "official" way to run one test
              only
              http://anonscm.debian.org/gitweb/?p=collab-maint/ruby1.9.1.git;a=blob;f=debian/README.porters;h=94aff7dd3ecd9f748498f2e285b4a4313b4b8f36;hb=HEAD
            <gg0> btw still getting coredumps?

        IRC, OFTC, #debian-hurd, 2013-11-13:

            <gg0> wrt the other test test_fork i suppose you made it not to
              segfault anymore, it simply does fail
            <youpi> I haven't taken any particular care
            <youpi> didn't have any time to deal with it

        IRC, OFTC, #debian-hurd, 2013-11-14:

            <gg0> btw patches to disable *context have been backported to 1.9
              as well so next 1.9 point release should have *context disabled
            <gg0> as 2.0 have
            <gg0> *has
            <gg0> i guess you'd like to get them reverted now
            <gg0> youpi: ^
            <youpi> after testing that *context work, yes

      * `sigaltstack`

        IRC, freenode, #hurd, 2013-10-09:

            <gnu_srs1> Hi, is sigaltstack() really supported, even if it is
              defined as well as SA_ONSTACK?
            <braunr> probably not
            <braunr> well,
            <braunr> i don't know actually, mistaking with something else
            <braunr> it may be supported
            <pinotree> iirc no
            <gnu_srs1> pinotree: are you sure?
            <pinotree> this is what i remember
            <pinotree> if you want to be sure that $foo works, just do the
              usual way: test it yourself
            <gnu_srs1> found it: hurd/TODO: *** does sigaltstack/sigstack
              really work? -- NO
            <pinotree> well TODO is old and there were signal-related patches
              by jk in the meanwhile, although i don't think they would have
              changed this lack
            <pinotree> in any case, test it
            <gnu_srs1> anybody fluent in assembly? Looks like this code
              destroys the stack: http://paste.debian.net/54331/
            <braunr> gnu_srs1: why would it ?
            <braunr> it does something special with the stack pointer but it
              just looks like it aligns it to 16 bytes, maybe because of sse2
              restrictions (recent gcc align the stack already anyway)
            <gnu_srs1> Well, in that case it is the called function:
              http://paste.debian.net/54341/
            <braunr> how do you know there is a problem with the stack in the
              first place ?
            <gnu_srs1> tracing up to here, everything is OK. then esp and ebp
              are destroyed.
            <gnu_srs1> and single stepping goes backward until it segfaults
            <braunr> "destroyed" ?
            <gnu_srs1> zero if I remember correctly now. the x86 version built
              for is i586, should that be changed to i486?
            <braunr> this shouldn't change anything
            <braunr> and they shouldn't get to 0
            <braunr> use gdb to determine exactly which instruction resets the
              stack pointer
            <gnu_srs1> how to step into the assembly part? using 's' steps
              through the function since no line information:
            <gnu_srs1> Single stepping until exit from function
              wine_call_on_stack,
            <gnu_srs1> which has no line number information.
            <braunr> gnu_srs1: use break on the address
            <gnu_srs1> how do i get the address of where the assembly starts?

      * <a id=recvmmsg>`recvmmsg`/`sendmmsg` (`t/sendmmsg`)</a>

        From [[!message-id "20120625233206.C000A2C06F@topped-with-meat.com"]],
        Roland McGrath: *They are generally useful interfaces and there is
        nothing intrinsically Linuxoid about them.  At least when not given a
        timeout, they could be implemented in terms of sendmsg/recvmsg.  So
        perhaps we ought to have a sysdeps/posix implementation that the Hurd
        would use instead of stubs (and folks can consider adding new RPCs).
        Then perhaps the Linux fallback case should be that instead of stubs,
        too.*

      * <a id=SOCK_CLOEXEC>`SOCK_CLOEXEC`</a>

        IRC, freenode, #hurd, 2013-09-02:

            <gnu_srs1> Do we support  accept4  with the SOCK_CLOEXEC flag?
            <gnu_srs1> According to the code in  sysdeps/mach/hurd/accept4.c
              that case is not covered 
            <gnu_srs1> (only O_NONBLOCK, not SOCK_NONBLOCK??))
            <pinotree> gnu_srs1: we do
            <pinotree> but only for accept4, not for socket and socketpair
            <gnu_srs1> pinotree: cannot find the case for O_CLOEXEC covered in
              __libc_accept4()
            <pinotree> gnu_srs1: no, you need SOCK_*
            <gnu_srs1> The only code for accept4() is in sysdeps/mach/hurd/ and
              it uses O_* for flags ?
            <pinotree>   flags = sock_to_o_flags (flags);
            <pinotree> tried checking it?
            <gnu_srs1> Aha, tks:-D
            <pinotree> and you don't need an explicit case of O_CLOEXEC, since
              it is handled in other ways

        [[!message-id "1378154151.21738.15.camel@G3620.my.own.domain"]].

        IRC, freenode, #hurd, 2013-09-03:

            <gnu_srs> any ideas about the SOCK_CLOEXEC issue?
            <pinotree> didn't i tell already about it?
            <gnu_srs> I did not find any hurd related code in tschwinges
              branches.
            <pinotree> you didn't check deep then...
            <gnu_srs> so why does socket/socketpair not return ENOSYS then?
            <pinotree> why should it, since they are implemented?
            <braunr> ...
            <gnu_srs> for socket/socketpair?
            <braunr> gnu_srs: enosys means no system call
            <gnu_srs> s/ENOSYS/EINVAL/
            <gnu_srs> see the mail to the bug-hurd/debian-hurd ML for more info
            <gnu_srs> and tschwinges reply
            <pinotree> which is what i knew already?
            <gnu_srs> pinotree: please reply on the mailing list on the EINVAL
              vs EPROTOTYPE issue to clarify things
            <pinotree> gnu_srs:
              https://sourceware.org/ml/libc-alpha/2013-02/msg00092.html
            <pinotree> gnu_srs: things were clear already...
            <gnu_srs> pinotree: I've read that patch and still pflocal/pf.c
              returns EPROTOTYPE not changed by the __socket wrapper in eglibc
            <pinotree> gnu_srs: what about realizing SOCK_CLOEXEC and friends
              are NOT posix?
            <gnu_srs> since socket/socketpair does not return EINVAL the dbus
              code has to be patched then?
            <pinotree> pflocal should never ever get such flags mixed to the
              protocol, so any invalid value of protocol correctly returns
              EPROTOTYPE
            <gnu_srs> this is the question I need answered: Which way to go?
            <pinotree> all of them
            <gnu_srs> ?
            <pinotree> - applications should not assume that because you have
              accept4 (which is not posix) then SOCK_CLOEXEC and SOCK_NONBLOCK
              (flags for it) are usable to socket and socketpair
            <pinotree> - glibc should (as the idea of my patch) handle
              implementations providing SOCK_* but not supporting them for
              socket/socketpair
            <pinotree> - finally the hurd part of glibc could implement them
            <gnu_srs> to conclude: should I send a bug report for dbus then?
            <gnu_srs> pinotree: yes or no?
            <pinotree> gnu_srs: *shrug* i wrote it above, so an *upstream*
              report (not a debian one)

        IRC, freenode, #hurd, 2013-09-06:

            <gnu_srs> I've found another error code issue, now in  glib2.0 (and
              dbus). Are you really sure the error code 
            <gnu_srs> for protocol of pflocal/pf.c should be
              EPROTONOSUPPORT. The code expects EINVAL for a protocol with
            <gnu_srs>  SOCK_CLOEXEC, which is a flag. Maybe pf.c should add
              this case and return EINVAL instead of 
            <gnu_srs> submitting bug reports upstream. Yes, I know this is not
              POSIX, but it is defined for Hurd too, 
            <gnu_srs> currently only supported for accept4, not socket or
              socketpair. 
            <pinotree> gnu_srs: no, and i explained already why it is wrong
              this way
            <pinotree> pflocal shouldn't even get such flags
            <pinotree> (pflocal or any other server implementing socket_create)
            <gnu_srs> (20:19:35) pinotree: pflocal shouldn't even get such
              flags
            <gnu_srs> then the glibc wrapper code is missing to catch this
              flag:(
            <gnu_srs> youpi: ?
            <pinotree> gnu_srs: because, as told many times, socket and
              socketpair do not support such flags
            <pinotree> given they don't do, they filter nothing
            <pinotree> and no, you need to file bugs upstream, since having
              SOCK_* and accept4 does not imply at all that socket and
              socketpair support them

        IRC, freenode, #hurd, 2013-09-07:

            <gnu_srs> A correction from yesterdays discussion:
              s/EPROTONOSUPPORT/EPROTOTYPE

        IRC, freenode, #hurd, 2013-09-10:

            <gnu_srs> for dbus2.0 I found out that the third SOCK_CLOEXEC case
              needs a patch too (more working tests),
            <gnu_srs> the updated patch is at http://paste.debian.net/37948/ if
              you have the time, otherwise I'll do it.
            <pinotree> gnu_srs: which is what i wrote in my bug report...
            <gnu_srs> Yes you wrote that, but the patch is not updated yet?
            <pinotree> it refers to a different socket access, recently added,
              which is not used by default
            <gnu_srs> I got two more tests running when adding that patch:-/
            <pinotree> tests of what?
            <gnu_srs>  run-test.sh and run-test-systemserver.sh:P
            <pinotree> tests of what?
            <pinotree> i don't have the universal knowledge of the files in all
              the sources
            <gnu_srs> dbus-1.6.14/test/name-test/*

        [[!message-id "523A3D6C.2030200@gmx.de"]].

        IRC, OFTC, #debian-hurd, 2013-09-19:

            <pinotree> tschwinge: ehm, regarding the SOCK_* patches for
              socket/socketpair, didn't we talk about them when i worked on
              eglibc 2.17?

      * `mlock`, `munlock`, `mlockall`, `munlockall`

        IRC, freenode, #hurd, 2014-01-09:

            <gnu_srs> Hi, is mlock, mlockall et al implemented?
            <braunr> i doubt it
            <braunr> mlock could be, but mlockall only partially

      * [[service_solahart_jakarta_selatan__082122541663/Glibc_ioctls]]

      * Support for `$ORIGIN` in the dynamic linker, `ld.so`

        IRC, freenode, #hurd, 2014-02-23:

            <sjamaan>
              https://www.gnu.org/software/hurd/user/jkoenig/java/report.html
              says $ORIGIN patches have been added to Hurd.  Have those hit the
              mainline codebase?

        [[user/jkoenig/java]], [[user/jkoenig/java/report]].

            <sjamaan> It doesn't seem to work here, but perhaps I'm missing
              something (I'm using the prebuilt Debian/Hurd 2014-02-11 VM
              image)
            <sjamaan> objdump -x says the value of RPATH is $ORIGIN
            <sjamaan> But it doesn't load a library I placed in the same dir as
              the binary
            <braunr> sjamaan: i'm not sure
            <braunr> sjamaan: what are you trying to do ?

        IRC, freenode, #hurd, 2014-02-24:

            <sjamaan> braunr: I am working on a release of the CHICKEN Scheme
              compiler. Its test suite is currently failing on the stand-alone
              deployment tests.  Either it should work and use $ORIGIN, or the
              test should be disabled, saying Hurd is not supported for
              stand-alone deployment-directories
            <sjamaan> braunr: The basic idea is to be able to create "appdirs"
              like on OS X or PC-BSD, containing all the dependencies a program
              needs, which can then simply be untarred
            <braunr> sjamaan: ok so you do need $ORIGIN
            <sjamaan> yeah
            <sjamaan> iiuc, so does Java.  Does Java work on Hurd?
            <braunr> we had packages at the time jkoenig worked on it
            <braunr> integration of patches may have been incomplete, i wasn't
              there at the time and i'm not sure
            <sjamaan> So it's safest to claim it's unsupported, for now?
            <braunr> yes
            <sjamaan> Thank you, I'll do that and revisit it later

      * `mig_reply_setup`

        IRC, freenode, #hurd, 2014-02-24:

            <teythoon> braunr: neither hurd, gnu mach or glibc provides
              mig_reply_setup
            <teythoon> i want to provide this function, where should i put it ?
            <teythoon> i found some mach source that put it in libmach afaic
            <teythoon>
              ftp://ftp.sra.co.jp/.a/pub/os/mach/extracted/mach3/mk/user/libmach/mig_reply_setup.c
            <braunr> teythoon: what does it do ?
            <teythoon> braunr: not much, it just initializes the reply message
            <teythoon> libports does this as well, in the
              ports_manage_port_operations* functions
            <braunr> teythoon: is it a new function you're adding ?
            <teythoon> braunr: yes
            <teythoon> braunr: glibc has a declaration for it, but no
              implementation
            <braunr> teythoon: i think it should be in glibc
            <braunr> maybe in mach/

      * [[POSIX file record locking|file_locking]]

      * <a name="execve_relative_paths">`execve` with relative paths</a>

        [[!GNU_Savannah_bug 28934]], [[user/pochu]], [[!message-id
        "4BFA500A.7030502@gmail.com"]].

        IRC, freenode, #hurd, 2014-03-05:

            <teythoon> youpi: what about the exec_filename patch series? [...]
            <youpi> Roland was disagreeing with it

      * <a name="mount">`mount`/`umount`</a>

        IRC, freenode, #hurd, 2014-03-01:

            <gnu_srs1> Hi, how to handle packages depending on mount.h, et al?
              On Hurd mount/umount is supplied by hurd is not in libc?
            <azeem> gnu_srs1: mount or mount.h?
            <gnu_srs1> mount.h et al
            <gnu_srs1> man 2 mount
            <azeem> what is the question then?
            <gnu_srs1> some packages expect the mount 2 functionality
              available, not by the external command mount/umonut
            <gnu_srs1> umount*
            <gnu_srs1> azeem: one example is fuse
            <teythoon> gnu_srs1: that is correct
            <teythoon> gnu_srs1: i put a small hacks entry in the list about
              moving the mount/umount functionality from our utilities to the
              libc

      * <a name="posix_timers">POSIX Timers</a>

        `timer_create`, `timer_delete`, [[`clock_gettime`|service_solahart_jakarta_selatan__082122541663/clock_gettime]], and
        so on.

    For specific packages:

      * <a id=octave>[[service_solahart_jakarta_selatan__082122541663/glibc/octave]]</a>

  * <a id=t_cleanup_kernel-features.h>Create `t/cleanup_kernel-features.h`.</a>

  * <a id=Secure_file_descriptor_handling>[[service_solahart_jakarta_selatan__082122541663/Secure_file_descriptor_handling]].</a>

  * <a id=sendfile>In `sysdeps/unix/sysv/linux/Makefile`, there are a bunch of
    `-DHAVE_SENDFILE` -- but we do have `sendfile`, too.</a>

    Define `__ASSUME_SENDFILE` to 1 in `kernel-features.h`, if `sendfile`
    works.

  * <a id=pthreadoverwrite>`/usr/include/pthread.h` overwrite issue</a>

    `make`, after editing `nss/nss_db/db-initgroups.c`:

        [...]
        make[2]: Leaving directory `/media/erich/home/thomas/tmp/glibc/tschwinge/Roger_Whittaker/resolv'
        make  subdir=nss -C nss ..=../ others
        make[2]: Entering directory `/media/erich/home/thomas/tmp/glibc/tschwinge/Roger_Whittaker/nss'
        /usr/bin/install -c -m 644 ../include/pthread.h /usr/include/pthread.h
        /usr/bin/install: cannot remove `/usr/include/pthread.h': Permission denied
        make[2]: *** [/usr/include/pthread.h] Error 1
        make[2]: Leaving directory `/media/erich/home/thomas/tmp/glibc/tschwinge/Roger_Whittaker/nss'
        make[1]: *** [nss/others] Error 2
        make[1]: Leaving directory `/media/erich/home/thomas/tmp/glibc/tschwinge/Roger_Whittaker'
        make: *** [all] Error 2

    See [[!message-id "871uv99c59.fsf@kepler.schwinge.homeip.net"]].  Passing
    `install_root=/INVALID` to `make`/`make check` is a cheap cure.  For `make
    install`, prepending an additional slash to `install_root` (that is,
    `install_root=//[...]`) is enough to obfuscate the Makefile rules.

  * <a id=syslog.c>`sysdeps/unix/sysv/linux/syslog.c`</a>

  * <a id=fsync>`fsync` on a pipe</a>

    IRC, freenode, #hurd, 2012-08-21:

        <braunr> pinotree: i think gnu_srs spotted a conformance problem in
          glibc
        <pinotree> (only one?)
        <braunr> pinotree: namely, fsync on a pipe (which is actually a
          socketpair) doesn't return EINVAL when the "operation not supported"
          error is returned as a "bad request message ID"
        <braunr> pinotree: what do you think of this case ?
        <pinotree> i'm far from an expert on such stuff, but seems a proper E*
          should be returned
        <braunr> (there also is a problem in clisp falling in an infinite loop
          when trying to handle this, since it uses fsync inside the error
          handling code, eww, but we don't care :p)
        <braunr> basically, here is what clisp does
        <braunr> if fsync fails, and the error isn't EINVAL, let's report the
          error
        <braunr> and reporting the error in turn writes something on the
          output/error stream, which in turn calls fsync again
        <pinotree> smart
        <braunr> after the stack is exhausted, clisp happily crashes
        <braunr> gnu_srs: i'll alter the clisp code a bit so it knows about our
          mig specific error
        <braunr> if that's the problem (which i strongly suspect), the solution
          will be to add an error conversion for fsync so that it returns
          EINVAL
        <braunr> if pinotree is willing to do that, he'll be the only one
          suffering from the dangers of sending stuff to the glibc maintainers
          :p
        <pinotree> that shouldn't be an issue i think, there are other glibc
          hurd implementations that do such checks
        <gnu_srs> does fsync return EINVAL for other OSes?
        <braunr>        EROFS, EINVAL
        <braunr>               fd is bound to a special file which does not
          support synchronization.
        <braunr> obviously, pipes and sockets don't
        <pinotree>
          http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html
        <braunr> so yes, other OSes do just that
        <pinotree> now that you speak about it, it could be the failure that
          the gnulib fsync+fdatasync testcase have when being run with `make
          check` (although not when running as ./test-foo)
        <braunr> hm we may not need change glibc
        <braunr> clisp has a part where it defines a macro IS_EINVAL which is
          system specific
        <braunr> (but we should change it in glibc for conformance anyway)
        <braunr> #elif defined(UNIX_DARWIN) || defined(UNIX_FREEBSD) ||
          defined(UNIX_NETBSD) || defined(UNIX_OPENBSD) #define IS_EINVAL_EXTRA
          ((errno==EOPNOTSUPP)||(errno==ENOTSUP)||(errno==ENODEV))
        <pinotree> i'd rather add nothing to clisp
        <braunr> let's see what posix says
        <braunr> EINVAL
        <braunr> so right, we should simply convert it in glibc
        <gnu_srs> man fsync mentions EINVAL
        <braunr> man pages aren't posix, even if they are usually close
        <gnu_srs> aha
        <pinotree> i think checking for MIG_BAD_ID and EOPNOTSUPP (like other
          parts do) will b enough
        <pinotree> *be
        <braunr> gnu_srs: there, it finished correctly even when piped
        <gnu_srs> I saw that, congrats!
        <braunr> clisp is quite tricky to debug
        <braunr> i never had to deal with a program that installs break points
          and handles segfaults itself in order to implement growing stacks :p
        <braunr> i suppose most interpreters do that
        <gnu_srs> So the permanent change will be in glibc, not clisp?
        <braunr> yes

    IRC, freenode, #hurd, 2012-08-24:

        <gnu_srs1> pinotree: The changes needed for fsync.c is at
          http://paste.debian.net/185379/ if you want to try it out (confirmed
          with rbraun)
        <youpi> I agree with the patch, posix indeed documents einval as the
          "proper"  error value
        <pinotree> there's fdatasync too
        <pinotree> other places use MIG_BAD_ID instead of EMIG_BAD_ID
        <braunr> pinotree: i assume that if you're telling us, it's because
          they have different values
        <pinotree> braunr: tbh i never seen the E version, and everywhere in
          glibc the non-E version is used
        <gnu_srs1> in sysdeps/mach/hurd/bits/errno.h only the E version is
          defined
        <pinotree> look in gnumach/include/mach/mig_errors.h
        <pinotree> (as the comment in errno.h say)
        <gnu_srs1> mig_errors.h yes. Which comment: from errors.h: /* Errors
          from <mach/mig_errors.h>.  */ and then the EMIG_ stuff?
        <gnu_srs1> Which one is used when building libc?
        <gnu_srs1> Answer: At least in fsync.c errno.h is used: #include
          <errno.h>
        <gnu_srs1> Yes, fdatasync.c should be patched too.
        <gnu_srs1> pinotree: You are right: EMIG_ or MIG_ is confusing. 
        <gnu_srs1> /usr/include/i386-gnu/bits/errno.h:     /* Errors from
          <mach/mig_errors.h>.  */
        <gnu_srs1> /usr/include/hurd.h:#include <mach/mig_errors.h>

    IRC, freenode, #hurd, 2012-09-02:

        <antrik> braunr: regarding fsync(), I agree that EOPNOTSUPP probably
          should be translated to EINVAL, if that's what POSIX says. it does
          *not* sound right to translate MIG_BAD_ID though. the server should
          explicitly return EOPNOTSUPP, and that's what the default trivfs stub
          does. if you actually do see MIG_BAD_ID, there must be some other
          bug...
        <braunr> antrik: right, pflocal doesn't call the trivfs stub for socket
          objects
        <braunr> trivfs_demuxer is only called by the pflocal node demuxer, for
          socket objects it's another call, and i don't think it's the right
          thing to call trivfs_demuxer there either
        <pinotree> handling MAG_BAD_ID isn't a bad idea anyway, you never know
          what the underlying server actually implements
        <pinotree> (imho)
        <braunr> for me, a bad id is the same as a not supported operation
        <pinotree> ditto
        <pinotree> from fsync's POV, both the results are the same anyway, ie
          that the server does not support a file_sync operation
        <antrik> no, a bad ID means the server doesn't implement the protocol
          (or not properly at least)
        <antrik> it's usually a bug IMHO
        <antrik> there is a reason we have EOPNOTSUPP for operations that are
          part of a protocol but not implemented by a particular server
        <pinotree> antrik: even if it could be the case, there's no reason to
          make fsync fail anyway
        <antrik> pinotree: I think there is. it indicates a bug, which should
          not be hidden
        <pinotree> well, patches welcome then...
        <antrik> thing is, if sock objects are actually not supposed to
          implement the file interface, glibc shouldn't even *try* to call
          fsync on them
        <pinotree> how?
        <pinotree> i mean, can you check whether the file interface is not
          implemented, without doing a roundtrip^
        <pinotree> ?
        <antrik> well, the sock objects are not files, i.e. they were *not*
          obtained by file_name_lookup(), but rather a specific call. so glibc
          actually *knows* that they are not files.
        <braunr> antrik: this way of thinking means we need an "fd" protocol
        <braunr> so that objects accessed through a file descriptor implement
          all fd calls
        <antrik> now I wonder though whether there are conceivable use cases
          where it would make sense for objects obtained through the socket
          call to optionally implement the file interface...
        <antrik> which could actually make sense, if libc lets through other
          file calls as well (which I guess it does, if the sock ports are
          wrapped in normal fd structures?)
        <braunr> antrik: they are
        <braunr> and i'd personally be in favor of such an fd protocol, even if
          it means implementing stubs for many useless calls
        <braunr> but the way things are now suggest a bad id really means an
          operation is simply not supported
        <antrik> the question in this case is whether we should make the file
          protocol mandatory for anything that can end up in an FD; or whether
          we should keep it optional, and add the MIG_BAD_ID calls to *all* FD
          operations
        <antrik> (there is no reason for fsync to be special in this regard)
        <braunr> yes
        <antrik> braunr: BTW, I'm rather undecided whether the right approach
          is a) requiring an FD interface collection, b) always checking
          MIG_BAD_ID, or perhaps c) think about introducing a mechanism to
          explicitly query supported interfaces...

    IRC, freenode, #hurd, 2012-09-03:

        <braunr> antrik: querying interfaces sounds like an additional penalty
          on performance
        <antrik> braunr: the query usually has to be done only once. in fact it
          could be integrated into the name lookup...
        <braunr> antrik: once for every object
        <braunr> antrik: yes, along with the lookup would be a nice thing

    [[!message-id "1351231423.8019.19.camel@hp.my.own.domain"]].

  * <a id=t_no-hp-timing>`t/no-hp-timing`</a>

    IRC, freenode, #hurd, 2012-11-16

        <pinotree> tschwinge: wrt the glibc topgit branch t/no-hp-timing,
          couldn't that file be just replaced by #include
          <sysdeps/generic/hp-timing.h>?

  * <a id=flockfile>`flockfile`/`ftrylockfile`/`funlockfile`</a>

    IRC, freenode, #hurd, 2012-11-16

        <pinotree> youpi: uhm, in glibc we use
          stdio-common/f{,try,un}lockfile.c, which do nothing (as opposed to eg
          the nptl versions, which do lock/trylock/unlock); do you know more
          about them?
        <youpi> pinotree: ouch
        <youpi> no, I don't know
        <youpi> well, I do know what they're supposed to do
        <pinotree> i'm trying fillig them, let's see
        <youpi> but not why we don't have them
        <youpi> (except that libpthread is "recent")
        <youpi> yet another reason to build libpthread in glibc, btw
        <youpi> oh, but we do provide lockfile in libpthread, don't we ?
        <youpi> pinotree: yes, and libc has weak variants, so the libpthread
          will take over
        <pinotree> youpi: sure, but that in stuff linking to pthreads
        <pinotree> if you do a simple application doing eg main() { fopen +
          fwrite + fclose }, you get no locking
        <youpi> so?
        <youpi> if you don't have threads, you don't need locks :)
        <pinotree> ... unless there is some indirect recursion
        <youpi> ?
        <pinotree> basically, i was debugging why glibc tests with mtrace() and
          ending with muntrace() would die (while tests without muntrace call
          wouldn't)
        <youpi> well, I still don't see what a lock will bring
        <pinotree> if you look at the muntrace implementation (in
          malloc/mtrace.c), basically fclose can trigger a malloc hook (because
          of the free for the FILE*)
        <youpi> either you have threads, and it's need, or you don't, and it's
          a nop
        <youpi> yes, and ?
        <braunr> does the signal thread count ?
        <youpi> again, in linux, when you don't have threads, the lock is a nop
        <youpi> does the signal thread use IO ?
        <braunr> that's the question :)
        <braunr> i hope not
        <youpi> IIRC the signal thread just manages signals, and doesn't
          execute the handler itself
        <braunr> sure
        <braunr> i was more thinking about debug stuff
        <youpi> can't hurt to add them anyway, but let me still doubt that it'd
          fix muntrace, I don't see why it would, unless you have threads
        <pinotree> that's what i'm going next
        <pinotree> pardon, it seems i got confused a bit
        <pinotree> it'd look like a genuine muntrace bug (muntrace → fclose →
          free hook → lock lock → fprint (since the FILE is still set) → malloc
          → malloc hook → lock lock → spin)
        <pinotree> at least i got some light over the flockfile stuff, thanks
          ;)
        <pinotree> youpi: otoh, __libc_lock_lock (etc) are noop in the base
          implementation, while doing real locks on hurd in any case, and on
          linux only if nptl is loaded, it seems
        <pinotree> that would explain why on linux you get no deadlock
        <youpi> unless using nptl, that is?
        <pinotree> hm no, even with pthread it works
        <pinotree> but hey, at least the affected glibc test now passes
        <pinotree> will maybe try to do investigation on why it works on linux
          tomorrow

    [[!message-id "201211172058.21035.toscano.pino@tiscali.it"]].

    In context of [[libpthread]].

    IRC, freenode, #hurd, 2013-01-21

        <braunr> ah, found something interesting
        <braunr> tschwinge: there seems to be a race on our file descriptors
        <braunr> the content written by one thread seems to be retained
          somewhere and another thread writing data to the file descriptor will
          resend what the first already did
        <braunr> it could be a FILE race instead of fd one though
        <braunr> yes, it's not at the fd level, it's above
        <braunr> so good news, seems like the low level message/signalling code
          isn't faulty here
        <braunr> all right, simple explanation: our IO_lockfile functions are
          no-ops
        <pinotree> braunr: i found that out days ago, and samuel said they were
          okay
        <braunr> well, they're not no-ops in libpthreads
        <braunr> so i suppose they replace the default libc stubs, yes
        <pinotree> so the issue happens in cthreads-using apps?
        <braunr> no
        <braunr> we don't have cthreads apps any more
        <braunr> and aiui, libpthreads provides cthreads compatibility calls to
          libc, so everything is actually using pthreads
        <braunr> more buffer management debugging needed :/
        <pinotree> hm, so how can it be that there's a multithread app with no
          libpthread-provided file locking?
        <braunr> ?
        <braunr> file locking looks fine
        <braunr> hm, the recursive locking might be wrong though
        <braunr> ./sysdeps/mach/hurd/bits/libc-lock.h:#define
          __libc_lock_owner_self() ((void *) __hurd_threadvar_location (0))
        <braunr> nop, looks fine too
        <braunr> indeed, without stream buffering, the problem seems to go away
        <braunr> pinotree: it really looks like the stub IO_flockfile is used
        <braunr> i'll try to make sure it's the root of the problem
        <pinotree> braunr: you earlier said that there's some race with
          different threads, no?
        <braunr> yes
        <braunr> either a race or an error in the iostream management code
        <braunr> but i highly doubt the latter
        <pinotree> if the stub locks are used, then libpthread is not
          loaded... so which different threads are running?
        <braunr> that's the thing
        <braunr> the libpthread versions should be used
        <pinotree> so the application is linked to pthread?
        <braunr> yes
        <pinotree> i see, that was the detail i was missing earlier
        <braunr> the common code looks fine, but i can see wrong values even
          there
        <braunr> e.g. when vfprintf calls write, the buffer is already wrong
        <braunr> i've made similar tests on linux sid, and it behaves as it
          should
        <pinotree> hm
        <braunr> i even used load to "slow down" my test program so that
          preemption is much more likely to happen
        <pinotree> note we have slightly different behaviour in glibc's libio,
          ie different memory allocation ways (mmap on linux, malloc for us)
        <braunr> the problem gets systematic on the hurd while it never occurs
          on linux
        <braunr> that shouldn't matter either
        <pinotree> ok
        <braunr> but i'll make sure it doesn't anyway
        <braunr> this mach_print system call is proving very handy :)
        <braunr> and also, with load, unbuffered output is always correct too
        <pinotree> braunr: you could try the following hack
          http://paste.debian.net/227106/
        <braunr> what does it do ?
        <pinotree> (yes, ugly as f**k)
        <braunr> does it force libio to use mmap ?
        <braunr> or rather, enable ?
        <pinotree> provides a EXEC_PAGESIZE define in libio, so it makes it use
          mmap (like on linux) instead of malloc

  * <a id=t_pagesize>`t/pagesize`.</a>

        <braunr> yes, the stub is used instead of the libpthreads code
        <braunr> tschwinge: ^
        <braunr> i'll override those to check that it fixes the problem
        <braunr> hm, not that easy actually
        <pinotree> copy their files from libpthreads to sysdeps/mach/hurd
        <pinotree> hm right, in libpthread they are not that split as in glibc
        <braunr> let's check symbol declaration to understand why the stubs
          aren't overriden by ld
        <braunr> _IO_vfprintf correctly calls @plt versions
        <braunr> i don't know enough about dynamic linking to see what causes
          the problem :/
        <braunr> youpi: it seems our stdio functions use the stub IO_flockfile
          functions
        <youpi> really? I thought we were going through cthreads-compat.c
        <braunr> yes really
        <braunr> i don't know why, but that's the origin of the "duplicated"
          messages issue
        <braunr> messages aren't duplicated, there is a race that makes on
          thread reuse the content of the stream buffer
        <braunr> one*
        <youpi> k, quite bad
        <braunr> at least we know where the problem comes from now
        <braunr> youpi: what would be the most likely reason why weak symbols
          in libc wouldn't be overriden by global ones from libpthread ?
        <youpi> being loaded after libc
        <braunr> i tried preloading it
        <braunr> i'll compare with what is done on wheezy
        <youpi> you have the local-dl-dynamic-weak.diff patch, right?
        <braunr> (on squeeze, the _IO_flockfile function in libc seems to do
          real work unlike our noop stub)
        <braunr> it's the debian package, i have all patches provided there
        <braunr> indeed, on linux, libc provides valid IO_flock functions
        <braunr> ./sysdeps/pthread/flockfile.c:strong_alias (__flockfile,
          _IO_flockfile)
        <braunr> that's how ntpl exports it
        <braunr> nptl*
        <pinotree> imho we should restructure libpthread to be more close to
          nptl
        <braunr> i wish i knew what it involves
        <pinotree> file structing for sources and tests, for example
        <braunr> well yes obviously :)
        <braunr> i've just found a patch that does exactly that for linuxthreads
        <pinotree> that = fix the file locking?
        <braunr> in addition to linuxthreads/lockfile.c (which we also
          equivalently provide), there is
          linuxthreads/sysdeps/pthread/flockfile.c
        <braunr> no, restructiring
        <braunr> restructuring*
        <braunr> i still have only a very limited idea of how the glibc sources
          are organized
        <pinotree> the latter is used as source file when compiling flockfile.c
          in stdio-common
        <braunr> shouldn't we provide one too ?
        <pinotree> that would mean it would be compiled as part of libc proper,
          not libpthread
        <braunr> yes
        <braunr> that's what both linuxthreads and nptl seem to do
        <braunr> and the code is strictly the same, i.e. a call to the internal
          _IO_lock_xxx functions
        <youpi> I guess that's for the hot-dlopen case
        <youpi> you need to have locks properly taken at dlopen time
        <braunr> youpi: do you mean adding an flockfile.c file to our sysdeps
          will only solve the problem by side effect ?
        <braunr> and that the real problem is that the libpthread versions
          aren't used ?
        <youpi>  yes
        <braunr> ok
        <braunr> youpi: could it simply be a versioning issue ?
        <youpi> could be
        <braunr> it seems so
        <braunr> i've rebuilt with the flockfile functions versioned to 2.2.6
          (same as in libc) and the cthreads_compat functions are now used
        <braunr> and the problem doesn't occur any more with my test code
        <braunr> :)
        <youpi> could you post a patch?
        <braunr> i need a few info before
        <youpi> it'd be good to check which such functions are hooked
        <braunr> i suppose the version for functions declared in libpthreads
          shouldn't change, right ?
        <youpi> yes
        <braunr> ok
        <youpi> they didn't have a vresion before
        <braunr> shall i commit directly ?
        <youpi> so it should be fine
        <braunr> well, they did
        <braunr> 2.12
        <youpi> yes, but please tell me when it's done
        <braunr> sure
        <youpi> so I can commit that to debian's eglibc
        <youpi> I mean, before we integrated libpthread build into glibc
        <youpi> so they never had any version before 2.12
        <braunr> ok
        <youpi> basically we need to check the symbols which are both in
          libpthread and referenced in libc
        <youpi> to make sure they have the same version in the reference
        <braunr> ok
        <youpi> only weak references need to be checked, others would have
          produced a runtime error
        <braunr> youpi: done
        <braunr> arg, the version i mention in the comment is wrong
        <braunr> i suppose people understand nonetheless
        <youpi> probably, yes
        <braunr> ah, i can now appreciate the headache this bug hunting gave me
          these last days :)

    IRC, freenode, #hurd, 2013-01-22

        <youpi> braunr: commited to debian glibc
        <youpi> btw, it's normal that the program doesn't terminate, right?
        <youpi> (i.e. it's the original bug you were chasing)
        <braunr> youpi: about your earlier question (yesterday) about my test
          code, it's expected to block, which is the problem i was initially
          working on
        <youpi> ok, so all god
        <youpi> +o

  * <a id=t_pagesize2>`t/pagesize`</a>

    IRC, freenode, #hurd, 2012-11-16

        <pinotree> tschwinge: somehow related to your t/pagesize branch: due to
          the fact that EXEC_PAGESIZE is not defined on hurd, libio/libioP.h
          switches the allocation modes from mmap to malloc

    [[!message-id "87mxd9hl2n.fsf@kepler.schwinge.homeip.net"]].

    IRC, freenode, #hurd, 2013-01-21

        <braunr> why is it a hack ?
        <pinotree> because most probably glibc shouldn't rely on EXEC_PAGESIZE
          like that
        <braunr> ah
        <pinotree> there's a mail from roland, replying to thomas about this
          issue, that this use of EXEC_PAGESIZE to enable mmap or not is just
          wrong
        <braunr> ok
        <pinotree> (the above is
          http://thread.gmane.org/87mxd9hl2n.fsf@kepler.schwinge.homeip.net )
        <braunr> thanks
        <pinotree> (just added the reference to that in the wiki)
        <braunr> pinotree: btw, what's wrong with using malloc instead of mmap
          in libio ?
        <pinotree> braunr: i'm still not totally sure, most probably it should
          be slightly slower currently
        <braunr> locking contention ?
        <braunr> pinotree:
          http://www.sourceware.org/ml/libc-alpha/2006-11/msg00061.html
        <braunr> pinotree: it looks to me there is now no valid reason not to
          use malloc
        <braunr> the best argument for mmap is that libio requires zeroed
          memory, but as the OP says, zeroing a page is usually more expensive
          than a small calloc (even on kernel that keep a list of zeroed pages
          for quick allocations, frequent mmaps() often make this list empty)
        <pinotree> braunr: mmap allocations in libio are rounded to the page
          size
        <braunr> well they have to

  * <a id=LD_DEBUG>`LD_DEBUG`</a>

    IRC, freenode, #hurd, 2012-11-22

        <pinotree> woot, `LD_DEBUG=libs /bin/ls >/dev/null` prints stuff and
          then sigsegv
        <tschwinge> Yeah, that's known for years...  :-D
        <tschwinge> Probably not too difficult to resolve, though.

  * IRC, OFTC, #debian-hurd, 2013-08-16:

        <pinotree> http://paste.debian.net/25934/ ← _hurd_thread_sigstate calls
          malloc, boom

  * <a id=conformtest>`conformtest`</a>

    IRC, OFTC, #debian-hurd, 2013-09-22:

        <youpi> btw, I noticed that glibc has a head conformance test which we
          happily fail quite a bit :)
        <youpi> it's not so awful, we don't have twice as many failures as
          linux, but not so far
        <pinotree> youpi: do you mean "header" for "head", right?
        <youpi> err, where ? :)
        <pinotree> <youpi> btw, I noticed that glibc has a head conformance
          test which we happily fail quite a bit :)
        <youpi> ah, yes
        <pinotree> noticed that too
        <youpi> I had a quick look at the POSIX part, some things are probably
          not too hard to change (e.g. exposing pthread_kill in signal.h)
        <youpi> others will by quite hard to fix (short type instead of int
          type for some flock structure field)
        <youpi> s/by/be/

  * `truncate`/`ftruncate`

    Hurd fixed with 2013-10-03 commit 6c3825f2b750bf9b913c6ea986739e648c470603,
    glibc still to be done?

    IRC, freenode, #hurd, 2013-10-01:

        <pinotree> libdiskfs/node-drop.c:      assert (np->dn_stat.st_size == 0); ←
          this one?
        <pinotree> iirc you constantly get that when building ustr
        <braunr> is ustr a package ?
        <pinotree> yes
        <pinotree> iirc the ustr tests are mostly disk-intensive

    IRC, freenode, #hurd, 2013-10-02:

        <braunr> i've traced the problem up to truncate
        <braunr> which gets a negative size
        <braunr> shouldn't take long to find out where it comes from now
        <pinotree> it seems our truncate doesn't handle negative values well though
        <braunr>        EINVAL The argument length is negative or larger than the
          maximum file size.
        <braunr> i still have to see whether it comes from the user (unlikely) or
          if it's an internal inconsistency
        <braunr> i suspect some code wrongly handles vm_map failures
        <braunr> leading to that inconsistency
        <braunr> pinotree: looks like glibc doesn't check for length >= 0
        <pinotree> yeah
        <braunr> servers should do it nonetheless
        <pinotree> should we fix glibc, libdiskfs/libnetfs/libtrivfs/etc, or both?
        <braunr> it appears a client does the truncate
        <braunr> i'd say both
        <braunr> can you take the glibc part ? :)
        <pinotree> i was going to do the hurd part... :p
        <pinotree> ok, i'll pick libc
        <braunr> well i'm doing it already
        <braunr> i want to write a test case first
        <braunr> to make sure that's the problem
        <pinotree> already on the hurd part, you mean?
        <braunr> yes
        <pinotree> ok
        <braunr> ok looks like it
        <braunr> i can't reproduce the assertion but it does make ext2fs freeze
        <braunr> pinotree: http://darnassus.sceen.net/~rbraun/test_ftruncate.c
        <pinotree> merci
        <braunr> pinotree: ustr builds
        <pinotree> wow
        <braunr> the client code (ustr) seems to perform a ftruncate with size
          ((size_t)-1) whereas lengths are signed ..
        <braunr> i'll check other libraries and send a patch soon

    IRC, freenode, #hurd, 2013-10-03:

        <braunr> youpi: i've committed a fix to hurd that checks for negative sizes
          when truncating files
        <braunr> this allows building the ustr package without making ext2fs choke
          on an assertion
        <braunr> pinotree is preparing a patch for glibc
        <braunr> see truncate/ftruncate
        <braunr> with an off_t size parameter, which can be negative
        <braunr>        EINVAL The argument length is negative or larger than the
          maximum file size.
        <braunr> hurd servers were not conforming to that before my change

  * `t/ptrmangle`: `PTR_MANGLE`/`PTR_DEMANGLE`

      * <https://sourceware.org/glibc/wiki/PointerEncryption>

      * See also [[t/tls|service_solahart_jakarta_selatan__082122541663/glibc/t/tls]].

      * b7f2d27dbd85f6a0966dc389ad4f8205085b7ae8 `ARM: Add pointer encryption
        support.` may help to find all the places that need to be touched when
        adding support.

  * <a id=baselinechanges>Verify baseline changes, if we need any follow-up changes:</a>

      * a11ec63713ea3903c482dc907a108be404191a02
      * 7e2b0c8562b35155820f87b5ff02a8b6850344cc
      * 8c0677fe5d91b7269364ca08fa08ed09e4c2d8c9
      * 5a2a1d75043138e696222ced4560de2fb90b8024
      * 5ae958d74180e2572d198bd7872c86f391de6da7
      * 5b08ac571ff8e94fe96511a532f0d20997de5f52
      * 3d04ff3a5d3ce3616837e1d15e03b6e1b360cf26
      * b2ef2c014b9c66995a3eb4f310ae7c5c510279bf
      * 63c4ed22b5048c8701d8806026c23cc95f0df756
      * ac2b484c02b01307ab6bbe5d45ddbf16d64edf8c
      * e35fcef8b739ed24e083ff8a3078ac14e101cf67
      * 6fb8cbcb58a29fff73eb2101b34caa19a7f88eba
      * 8a492a675e566dc1e666df0a86cbf541442cb179
      * 5dbc3b6cc0b759bf4b22d851ccb9cbf3e3cbc6ef
      * c86434ccb576a3ce35b5a74f72b9f03bd45b522a
      * d22e4cc9397ed41534c9422d0b0ffef8c77bfa53
      * 15bac72bac03faeb3b725b1d208c62160f0c3ad7
      * c08fb0d7bba4015078406b28d3906ccc5fda9d5a
      * 10b3bedcb03386cc280113f552479793e4bac35f
      * 754f7da38b0904b4b989d3500cc8dd5be625cf6a
      * 3cdaa6adb113a088fdfb87aa6d7747557eccc58d
      * 962dba7828cf251a9025ccb43bc6effa30379b72
      * 3162f12e58c3a848db883916843b332b9f8c9d39
      * 1c06ba3100847da6bd1f2e011dc24fa8debd9615
      * 84b9230c404aed4fd3a7bb3d045ca367043dde8c
      * 090555538d4347a52807ba9f08cf20ed13206afe
      * 817328eea788c746131cf151b64fd250200da333
      * c3758feebf7c8786231465da664743c6f0ec79cc
      * 1ac7a2c7b448c851eb8976fcc290a906a4075203
      * c21cc9bcb38a87ff638d1099ca871d94a2192b31
      * 6484ba5ef092b62b7d2112c0d976dbd6d1a40fde
      * b8b4863d78bf26b39918fc753b03ed98ef262903
      * b76b818e6fe2061e778b3a9bbe63c554c3f9b3c1
      * 8e9f92e9d5d7737afdacf79b76d98c4c42980508 -- `_dl_map_object` in
        `sysdeps/mach/hurd/dl-sysdep.c`
      * 0e516e0e14f2f9783a21cd1727bc53776341f857
      * a1fb5e3ebe9d38b5ae6c5bfbfaa04882d52355bc
      * cf7c9078a5acdbb435498ace92cd81009637a971
      * db753e2cfb2051ebf20dc089f87c5b1297cc2cff
      * 4a531bb0b3b582cb693de9f76d2d97d970f9a5d5 -- looks good.
      * 5bd6dc5c2c68fe98691db9b40f87d9b68ea9565b
      * 451f001b50870604e1f2daef12f04f9f460d3997 +
        a85b5cb4d4a5fc56e2b38638d270bf2daa67eb6c -- BZ10484.  `nptl/Versions
        [libc] (GLIBC_PRIVATE): Export __libc_alloca_cutoff`.  We don't even
        define it yet.  Also see
        [[service_solahart_jakarta_selatan__082122541663/glibc___libc_alloca_cutoff_should_be_lowered]].
      * 1086d70d916fd0eb969b3d89ff88abd35f6a5c34
      * cfa28e560ef69372b9e15e9a2d924a0fbcfc7bca
      * 8cf8ce1702c354a8266e3cfa6ab54c2467d1873f
      * 68dc949774cb651d53541df4abdc60327f7e096b
      * 70181fddf1467996bea393d13294ffe76b8a0853
      * a77e8cbc394ab098aa1fc3f0a6645a38348d21ca
      * 32465c3ea007065acd8ca8199f130cdf4068130d
      * 18ba70a559c52719fd94a713cc380514d9d19125
      * 620a05296fe3380b7441ba7720e8b25c48a8c28c
      * [low] e6c61494125126d2ba77e5d99f83887a2ed49783 -- `Fix memory leak in
        TLS of loaded objects.` Do we need to replicate `nptl/allocatestack.c`
        hunk?
      * 6e04cbbe79f5965809fdbf1f28d7ae8b4af74d31 +
        1bfbe0d335d3fc44a492648b974a0db19975f6d8 -- `Fix
        pathconf(_PC_BUF_SIZE).`
      * 28377d1bf58625172a1734b92e835591d4d23a18 -- `Optimize fdopendir a bit.`
      * 7fb90fb89bbdf273ab7ab96517fe1b156cd7aee1 +
        6fb2dde3f1aa3a1419cb6c2dfa53dd1d506722a4 -- `Fix Linux getcwd for long
        paths`
      * f574184a0e4b6ed69a5d9a3234543fba6d2a7367 -- `Fix sched_setscheduler
        call in spawn implementation`
      * 3b85df27870a47ed1db84e948e37a5a50a178a92 +
        f50ef8f1efdd1f2b040acbb8324604f168e8832a -- sysconf
      * 68a3f91fcad464c4737c1eaed4ae0bf539801fb2 -- `Fix reporting of invalid
        timeouts in emulated pselect`
      * ea389b12b3b65c4a7fa91fa76f8c99867eb37865 -- `strndup -> __strndup`;
        strndupa?
      * 7e4afad5bcf49e03c3b987399c6a8f66a9018660 -- `Nicer output for negative
        error numbers in strerror_r`.  Change needed for
        `sysdeps/mach/_strerror.c`?
      * 7ea72f99966a65a56aedba817ee2413ff9b1f23c +
        adcd5c15d2a37794d021104160b425ff61f88219 -- `Always fill output buffer
        in XPG strerror function`.  Change needed for
        `sysdeps/mach/xpg-strerror.c`?
      * a91710475294c66d0005bdaae0919d36ef8ce3d2 -- sotruss ([[debugging]],
        [[service_solahart_jakarta_selatan__082122541663/profiling]]).  Does it work?
      * b1ebd700c5295a449f8d114740f0d1fb6e6b2eb5 +
        80e2212d8e59933a1641f029ebd360526ff0e074 +
        4997db742946d08be4378cf91221f558f928bc73 -- `Don't document si_code
        used for raise()`.  Also for `bits/siginfo.h`?
      * 11988f8f9656042c3dfd9002ac85dff33173b9bd -- pldd, Does it work?
        Probably not: needs `/proc/[PID]/auxv`, `/proc/[PID]/exe`,
        `/proc/[PID]/mem` ([[!tag open_issue_hurd]],
        [[hurd/translator/procfs]]).
      * 9113ea1f3f29b3aee710efc829e85a9772bcb836 -- `--experimental-malloc`.
        Watch what happens.
      * 4e34ac6a1e256f40ab0d8eeed37aa1ea83440e76 -- `-defsym=_begin=0`.  Watch
        what happens.  Native build: apparently OK.
      * f781ef4015504e8a1da649c266584976238aa079 (`--with-default-link`) +
        1b74661a6b93a892ecb1c717dedeedba5c2a976c +
        fd5e21c75d8e9221d766f4bc922a237265514ec2.  Watch what happens.  Native
        build: `use-default-link = no`.
      * de283087c74f720cf8a7171972e72b5fa2b45e79 (`Handle Lustre filesystem`),
        4e5f31c847982997c856f03bbc35134e9fd0f61f (`Handle ext4 in
        {,f}pathconf`).  What about stuff like that for us?
      * d30cf5bb00bfb286ff14d931fb69f5b53724bcdc (`Find readelf with
        AC_CHECK_TOOL`).  Aren't there more in other configure.in and Makefile
        files?
      * 7a03a9c8c4b37b88ac5e82b557d974f3161ddaf9 (`Add read barriers in
        cancellation initialization`).  Is this needed in other places, too?
      * [low] 5744c68d78f6ca6c6500e2c8d3d85b3a31f4ed2a (`Align x86 TCB to 64
        bytes`).  Probably we have hidden somewhere such a constant, too (in
        libpthread).
      * d96de9634a334af16c0ac711074c15ac1762b23c +
        ecb1482ffd85fd3279642b1dc045aa867ad4d415 (`Try shell in posix_spawn*
        only in compat mode`).  Change looks good, but what about
        `SPAWN_XFLAGS_TRY_SHELL` for us?
      * 3ce1f2959437e952b9db4eaeed2407424f11a4d1 (`Make several tool features
        mandatory and simplify the code.`).  Generally looks good.
          * `locale/global-locale.c`: Apparently, no one is using
            `_HURD_THREADVAR_LOCALE`.  But it is exported via
            `hurd/threadvar.h`.
          * `mach/devstream.c`: reversed.  Fixed in
            `t/repair-mach_devstream.c`.
          * `malloc/arena.c`: should be OK.
      * `Remove support for !USE___THREAD`.
        d063d164335938d557460bebaa7cfe388157b627 (generally looks good;
        `csu/errno-loc.c` (should be OK); `include/errno.h` (fixed)) +
        (de82006d43e198fd162807c9adc720c7ebd728a3 +
        037e9fe21c92216ef7032ea2796781ec27ca182a) +
        995a80dfbcb443ead5aa22682c884ec5c827a2ea (discussing) +
        bc7e1c3667b577ad418f7520df2a7dbccea04ee9 (should be ok).
      * [OK] 22a89187139a9083ca73989bfd11597e0f85cb61 (`malloc: Remove all
        kinds of unused configuration options and dead code.`).  `NO_STARTER`
        changes (should be OK).
      * [high] `pagesize`, 02d46fc4b969e25e4ba0c54aa95fa98d7279bd05 (`Simplify
        malloc initialization`); aebae0537dcb408100b88c6b7647a7e858c43237,
        [[!sourceware_PR 11929]].  Is this all kosher for us?  See
        [[!message-id "87mxd9hl2n.fsf@kepler.schwinge.homeip.net"]].
      * [OK] 83cd14204559abbb52635006832eaf4d2f42514a (`Remove --wth-tls
        option, TLS support is required`).
      * a7c8e6a1478de9f990b11e5e853318ccbe4330f2 (`Fix invalid conversion in
        __cmsg_nxthdr`).  Probably just a C++ thing and not relevant for us;
        see [[!message-id "87r52nk1kx.fsf@kepler.schwinge.homeip.net"]].
      * [low] `mmap`, 110946e473b38fc3896212e416d9d7064fecd5b7.  Kosher with
        respect to our [[glibc/mmap]] peculiarities?
      * [OK] `__attribute__ ((__leaf__))`, `BZ #13344`,
        aa78043a4aafe5db1a1a76d544a833b63b4c5f5c +
        49a43d80ec5c97cf6136b1ee2687414773b2d5aa +
        3871f58f065dac3917eb18220a479e9591769c8c +
        9beb2334930db81ceada5aa6051fe5ac0554db32 +
        0ffc4f3ebaace42cd545db55a2ac50b6e0cc7d89 +
        edc5984d4d18296d7aa3d8f4ed8f7336a743170e +
        57769839788e2c62b68d9dfbf4b35052321278ba.
        <http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>.
      * [low] `conformtest`, 3134156779108fe8b46e0f4cd60d837572faaa93 +
        4efeffc1d583597e4f52985b9747269e47b754e2 +
        d94a4670800de6e8f088b8630ad5142866127980 -- should probably mirror
        `bits/siginfo.h` changes.
      * [low] stack guard, 6c6a98c983c44b440ae66d2aa8f32529a9dd7bfe,
        [[!message-id "4F3BE241.9090409@mentor.com"]] -- anything needed for
        us?
      * [low] `libc-lockP.h` 9463518d0d314d7bd0160315e0ef30e15be08985 --
        probably should do similar changes, also to the generic file.
      * [low] `bits/socket.h`/`bits/socket_type.h` [[!message-id
        "Pine.LNX.4.64.1203090206420.18868@digraph.polyomino.org.uk"]]
        02a6f887cb3e2c048937111eb4cf150d397609de -- probably should do the same
        for the generic version as used by GNU Hurd.
      * [low] CFI for `_start`, 6a1bd2a100c958d30bbfe8c9b8f9071d24b7c3f4,
        [[!message-id "20120316180551.GA6291@host2.jankratochvil.net"]] -- what
        about other architectures?
      * `linkobj/libc.so`, 510bbf14b4f25fec8ee3a2d24de3f24bdbf84333 -- need to
        adapt for (conditional?) Sun RPC reversion (if that was the original
        cause for the patch)?
      * [low] `Add __fsword_t and use it in bits/statfs.h`,
        3e5aef87d76cfa7354f2b0d82b96e59280720796, [[!message-id
        "20120517134700.GA19046@intel.com"]] -- only updates one copy of
        `bits/statfs.h`; update the others, too, for consistency.
      * [low] 789bd351b45f024b7f51e4886bf46b8e887ab6da: remove
        `libc_hidden_def` in `sysdeps/mach/hurd/accept4.c`?
      * 0948c3af9dfb3bc1312d6bed2f3a6bfd4e96eef4,
        b80af2f40631871cf53a5e39d08d5d5516473b96,
        04570aaa8ad88caad303f8afe469beb4cf851e17 `_dl_initial_dtv`: OK?
      * [very low] ea4d37b3169908615b7c17c9c506c6a6c16b3a26 `Implement
        POSIX-generic sleep via nanosleep rather than SIGARLM.`: any benefit
        using that one (with `sysdeps/mach/nanosleep.c`) instead of
        `sysdeps/mach/sleep.c`?
      * ea4d37b3169908615b7c17c9c506c6a6c16b3a26 -- IRC, freenode, #hurd,
        2012-11-20, pinotree: »tschwinge: i agree on your comments on
        ea4d37b3169908615b7c17c9c506c6a6c16b3a26, especially since mach's
        sleep.c is buggy (not considers interruption, extra time() (= RPC)
        call)«.
      * ba384f6ed9275f3966505f2375b56d169e3dc588,
        0409959c86f6840510851a851a1588677a2e537b,
        e57b0c6100e63bfd816ae59339452eafc81f1d3a `C++11 thread_local
        destructors support`.  Anything needed to be done in our [[libpthread]]
        and configured for us in [[service_solahart_jakarta_selatan__082122541663/Gcc]]?  Probably need to replicate the
        `nptl/pthread_create.c` change, and fix
        `stdlib/Makefile`:`$(objpfx)tst-tls-atexit`.

            +++ include/link.h
            @@ -302,6 +302,9 @@ struct link_map
            +    /* Number of thread_local objects constructed by this DSO.  */
            +    size_t l_tls_dtor_count;
            
            +++ include/stdlib.h
            @@ -100,6 +100,11 @@ extern int __cxa_atexit (void (*func) (void *), void *arg, void *d);
            +extern int __cxa_thread_atexit_impl (void (*func) (void *), void *arg,
            +                                    void *d);
            +extern void __call_tls_dtors (void);
            +libc_hidden_proto (__call_tls_dtors);
            
            +++ nptl/pthread_create.c
            @@ -311,6 +311,9 @@ start_thread (void *arg)
             [after the thread function returns]
            +  /* Call destructors for the thread_local TLS variables.  */
            +  __call_tls_dtors ();
            
            +++ stdlib/Makefile
            +$(objpfx)tst-tls-atexit = $(common-objpfx)nptl/libpthread.so \
            +                        $(common-objpfx)dlfcn/libdl.so
            
            +++ stdlib/cxa_thread_atexit_impl.c
            
            +++ stdlib/exit.c
             __run_exit_handlers (int status, struct exit_function_list **listp,
                                 bool run_list_atexit)
             {
            +  /* First, call the TLS destructors.  */
            +  __call_tls_dtors ();

            +gcc-4.7 tst-tls-atexit.c -c -std=gnu99 -fgnu89-inline  -O2 -Wall -Winline -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wno-parenth
            +gcc-4.7 -nostdlib -nostartfiles -o [...]/tschwinge/Roger_Whittaker.build/stdlib/tst-tls-atexit   [...]/tschwinge/Roger_Whittaker.build/nptl/lib
            +gcc-4.7: error: [...]/tschwinge/Roger_Whittaker.build/nptl/libpthread.so: No such file or directory
            +make[2]: *** [[...]/tschwinge/Roger_Whittaker.build/stdlib/tst-tls-atexit] Error 1
            +gcc-4.7 tst-tls-atexit-lib.c -c -std=gnu99 -fgnu89-inline  -O2 -Wall -Winline -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wno-par
            +tst-tls-atexit-lib.c: In function 'do_foo':
            +tst-tls-atexit-lib.c:35:3: warning: implicit declaration of function '__cxa_thread_atexit_impl' [-Wimplicit-function-declaration]
      * a600e5cef53e10147932d910cdb2fdfc62afae4e `Consolidate Linux and POSIX
        libc_fatal code.` -- is `backtrace_and_maps` specific to Linux?

        IRC, freenode, #hurd, 2014-02-06:

            <braunr> why wouldn't glibc double free detection code also print
              the backtrace on hurd ?
            <youpi> I don't see any reason why
            <youpi> except missing telling glibc that it's essentially like on
              linux

      * 288f7d79fe2dcc8e62c539f57b25d7662a2cd5ff `Use __ehdr_start, if
        available, as fallback for AT_PHDR.` -- once we require Binutils 2.23,
        can we simplify [[glibc's process startup|glibc/process]]
        (initialization of `_dl_phdr` and `_dl_phnum`)?  As these are only used
        for `[!SHARED]`, can we completely remove them (that is, the `phdr` and
        `phdrsz` members) from `hurd_startup_data`, and simplify
        [[hurd/interface/exec_startup_get_info]], or do we still require these
        for the `[SHARED]` case?
      * fab7ce3f5b4060bf62659e8b58529de4156b5a2f `Link extra-libs consistently
        with libc and ld.so.`  Alright for us?  Probably have to adjust
        [libpthread]/Makefile.
      * b8c61b4b1d6afb69190169764c1b141f4659e48b `Remove trailing whitespace
        from mach/*.sub.`  Update `mach/Makefile`: generated
        `mach/errsystems.c` is no longer checked in as of
        66e3dda448406399136e6f144a1b46679d5b2613.  Rule had been disabled in
        421f82e5cc8f81ab003247d771bcecbad799be85, then re-enabled in
        8e3cc80f6d4f69ce003c82d3561ac324692792ad, but comment not removed.
      * [low] 61dd6208fb1e59a423b6dfa712a3c896c34b2590 `New API to set default
        thread attributes`.  Implement in libpthread ([[!taglink
        open_issue_libpthread]])?
      * [high] e4608715e6e1dd2adc91982fd151d5ba4f761d69 `CVE-2013-2207, BZ
        #15755: Disable pt_chown. -- [[!message-id
        "51E8D4C1.9000705@redhat.com"]]; do we need it (`--enable-pt_chown`)?
	cdfc721b8d2d5079325ea9f0beb5673d72b4cdd0.
      * 91ce40854d0b7f865cf5024ef95a8026b76096f3 `CVE-2013-4237, BZ #14699:
        Buffer overflow in readdir_r` -- [[!message-id
        "519220C7.6050705@redhat.com"]]; do we need corresponding changes to
        Hurd sysdep files?
      * 8cc3269f95fa7faa8f448d741f68cbc40efbf4ee `Flesh out 4.4 bits/socket.h
        with SOCK_CLOEXEC, SOCK_NONBLOCK.`,
        e041fb8b6557882b6710a655a97bbf3541b56b54 `Replace generic bits/socket.h
        with 4.4 file.` -- `sysdeps/mach/hurd/bits/socket.h` differs from the
        generic `bits/socket.h` now only in the values of
        [[`SOCK_CLOEXEC`|service_solahart_jakarta_selatan__082122541663/secure_file_descriptor_handling]] and
        `SOCK_NONBLOCK`.  If possible (no conflicts), would it make sense to
        transition to the latter file, continuing to accept the former values
        as deprecated for some time?
      * [high] 6a97b62a5b4f18aea849d6f4d8de58d1469d2521 `Fix unsafe compiler
        optimization` -- have to revert, see [[!sourceware_PR 15605]].  For
        analysis/fix also look at 384ca551743318bd9c9e24a496d6397f2e3f2a49.
      * 6c82a2f8d7c8e21e39237225c819f182ae438db3 `Coordinate IPv6 definitions
        for Linux and glibc` -- alright for us?
      * c61b4d41c9647a54a329aa021341c0eb032b793e `POINTER_CHK_GUARD` -- see
        [[t/tls|service_solahart_jakarta_selatan__082122541663/glibc/t/tls]].
      * 5f855e3598a576c35e54623a13b256f3e87fcd4d `Fix erroneous (and circular)
        implied pattern rule for linkobj/libc.so.` -- alright for us?
      * [high] 7b7bab1391a3b16fff7e325e2c8a36b68eacba90 [Hurd] `Add fork hooks
        for pthread_atfork` -- is that from a topic branch that can then be
        annihilated?  Verify emails.  Verify no further changes in topic
        branch.
      * [high] 43d5c02c72bdaf59a8e0d4b06f2ae87e42269cbd `Fix build on hurd` --
        is that from a topic branch that can then be annihilated?  Verify
        emails.  Verify no further changes in topic branch.
      * 69a17d9d245dc3551792e95e1823cc2d877592f3 `Patch [1/4] async-signal safe
        TLS.` -- do we also need an implementation of this?  (Not yet called
        from anywhere?)
      * *baseline*


## Update

`baseline`, `t/regenerate_configure` (could now be removed),
`t/master_backports`, `t/eglibc_backports`, `t/host-independency`,
`tschwinge/Roger_Whittaker`


# Build

Here's a log of a glibc build run; this is from our [[Git repository's
f57644d0bdfc1ebe2201a677a33af27e09a5bab6 (2013-12-20;
64a17f1adde4715bb6607f64decd73b2df9e6852 (2013-12-19))
plus 6a97b62a5b4f18aea849d6f4d8de58d1469d2521 reverted,
`id:"87zjnvn688.fsf@kepler.schwinge.homeip.net"`,
`id:"87ioujn0eq.fsf@kepler.schwinge.homeip.net"`,
1226676cd6f6f4451e6e6b75b8fbd9a35c949e8e reverted,
56798c444bc584c118b69a3506c4050b34edc35f reverted,
`id:"878uvfmwvs.fsf@kepler.schwinge.homeip.net"`
sources|source_repositories/glibc]], run on coulomb.SCHWINGE.

    $ export LC_ALL=C
    $ ../Roger_Whittaker/configure --prefix=/usr --disable-profile --disable-multi-arch --build=i486-gnu --host=i486-gnu CC=gcc-4.7 CXX=g++-4.7 2>&1 | tee log_build
    [...]
    $ make install_root=/INVALID 2>&1 | tee log_build_
    [...]

This takes up around 600 MiB, and needs roughly X min on kepler.SCHWINGE and
105 min on coulomb.SCHWINGE.

<!--

    $ (make install_root=/INVALID && touch .go-install) 2>&1 | tee log_build_ && test -f .go-install && (make install_root="$PWD".install install && touch .go-test) 2>&1 | tee log_install && test -f .go-test && ln -s /usr/lib/i386-*gnu/libstdc++.so.6 /lib/i386-*gnu/libgcc_s.so.1 mach/libmachuser.so.1 hurd/libhurduser.so.0.3 ./ && make -k install_root=/INVALID check fast-check=yes 2>&1 | tee log_test

-->


## Analysis

    $ toolchain/logs/process glibc build fetch coulomb.SCHWINGE

TODO.

  * baseline
    fd5bdc0924e0cfd1688b632068c1b26f3b0c88da..2ba92745c36eb3c3f3af0ce1b0aebd255c63a13b
    (or probably Samuel's mmap backport) introduces:

        ../sysdeps/mach/hurd/mmap.c: In function '__mmap':
        ../sysdeps/mach/hurd/mmap.c:54:15: warning: comparison between pointer and integer [enabled by default]
        ../sysdeps/mach/hurd/mmap.c:66:21: warning: comparison between pointer and integer [enabled by default]
        ../sysdeps/mach/hurd/mmap.c:143:13: warning: comparison between pointer and integer [enabled by default]
        ../sysdeps/mach/hurd/mmap.c:165:24: warning: comparison between pointer and integer [enabled by default]

  * baseline
    fd5bdc0924e0cfd1688b632068c1b26f3b0c88da..2ba92745c36eb3c3f3af0ce1b0aebd255c63a13b
    introduces:

        nscd_gethst_r.c: In function '__nscd_get_nl_timestamp':
        nscd_gethst_r.c:112:4: warning: implicit declaration of function 'time' [-Wimplicit-function-declaration]

    This was already present before:

        nscd_gethst_r.c: In function 'nscd_gethst_r':
        nscd_gethst_r.c:426:5: warning: implicit declaration of function '__close' [-Wimplicit-function-declaration]

  * baseline
    2ba92745c36eb3c3f3af0ce1b0aebd255c63a13b..7a270350a9bc3110cd5ba12bbd8c5c8c365e0032
    introduces:

        tst-relsort1.c:6:1: warning: function declaration isn't a prototype [-Wstrict-prototypes]

  * baseline
    fc56c5bbc1a0d56b9b49171dd377c73c268ebcfd..cbc818d0ee66065f3942beffdca82986615aa19a
    introduces

        +gcc-4.6 tst-printf-round.c -c -std=gnu99 -fgnu89-inline  -O2 -Wall -Winline -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wno-parentheses -Wstrict-prototypes         -I../include -I[...]/tschwinge/Roger_Whittaker.build-gcc-4.
        +tst-printf-round.c: In function 'do_test':
        +tst-printf-round.c:203:11: warning: passing argument 3 of 'test_hex_in_one_mode' discards 'const' qualifier from pointer target type [enabled by default]
        +tst-printf-round.c:139:1: note: expected 'const char **' but argument is of type 'const char * const*'
        +tst-printf-round.c:208:8: warning: passing argument 3 of 'test_hex_in_one_mode' discards 'const' qualifier from pointer target type [enabled by default]
        +tst-printf-round.c:139:1: note: expected 'const char **' but argument is of type 'const char * const*'
        +tst-printf-round.c:216:8: warning: passing argument 3 of 'test_hex_in_one_mode' discards 'const' qualifier from pointer target type [enabled by default]
        +tst-printf-round.c:139:1: note: expected 'const char **' but argument is of type 'const char * const*'
        +tst-printf-round.c:224:8: warning: passing argument 3 of 'test_hex_in_one_mode' discards 'const' qualifier from pointer target type [enabled by default]
        +tst-printf-round.c:139:1: note: expected 'const char **' but argument is of type 'const char * const*'

         gcc-4.6 test-wcschr.c -c -std=gnu99 -fgnu89-inline  -O2 -Wall -Winline -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wno-parentheses -Wstrict-prototypes         -I../include -I[...]/tschwinge/Roger_Whittaker.build-gcc-4.6-486
        +In file included from test-wcschr.c:2:0:
        +../string/test-strchr.c: In function 'check1':
        +../string/test-strchr.c:249:3: warning: passing argument 1 of 'stupid_STRCHR' from incompatible pointer type [enabled by default]
        +../string/test-strchr.c:77:1: note: expected 'const wchar_t *' but argument is of type 'char *'
        +../string/test-strchr.c:249:22: warning: initialization from incompatible pointer type [enabled by default]
        +../string/test-strchr.c:252:5: warning: passing argument 2 of 'check_result' from incompatible pointer type [enabled by default]
        +../string/test-strchr.c:92:1: note: expected 'const wchar_t *' but argument is of type 'char *'
        +../string/test-strchr.c:252:5: warning: passing argument 4 of 'check_result' from incompatible pointer type [enabled by default]
        +../string/test-strchr.c:92:1: note: expected 'const wchar_t *' but argument is of type 'char *'


# Install

TODO.

    $ make install_root="$PWD".install install 2>&1 | tee log_install
    [...]

This takes up around 100 MiB, and needs roughly X min on kepler.SCHWINGE and 16
min on coulomb.SCHWINGE.


## Analysis

    $ toolchain/logs/process glibc install fetch coulomb.SCHWINGE

TODO.


# Testsuite

    $ make -k install_root=/INVALID check fast-check=yes 2>&1 | tee log_test
    [...]

This needs roughly X min on kepler.SCHWINGE and 130 min on coulomb.SCHWINGE.

Specifying `fast-check=yes` disables the `conformtest` which takes 1.75 h (out
of 2.75 h total) on coulomb.SCHWINGE, doesn't pass anyway, and clearly isn't
our most critical issue to solve.
`elf/tst-xmmymm.out` is another candidate to disable: needs 90 min to run.


## Analysis

    $ toolchain/logs/process glibc test fetch coulomb.SCHWINGE

Failures, mostly in order of appearance:

  * `check-abi`, `check-abi-libmachuser`, `check-abi-libhurduser`,
    `check-abi-libBrokenLocale`, `check-abi-libm`, `check-abi-libdl`,
    `check-abi-libcrypt`, `check-abi-libresolv`, `check-abi-librt`,
    `check-abi-libnsl`, `check-abi-libutil`, `check-abi-libc`, `check-abi-ld`,
    `c++-types.data`

    Reference files are missing.

  * `math/test-float.out`, `math/test-double.out`

    A handful of ULP failures.

  * `math/test-ldouble`, `math/test-ildoubl`, `math/test-ifloat`,
    `math/test-idouble`

    SIGSEGV.  Or SIGILL.

  * `stdlib/tst-secure-getenv.out`

        open (/proc/self/exe): No such file or directory

    Needs [[`/proc/self/exe`|hurd/translator/procfs/jkoenig/discussion]].

  * `stdlib/tst-strtod-round.out`

        strtold (-0x0.7p-16445) returned -0x0.0000000000008p-16385 not -0x0.000000000000001p-16385 (FE_DOWNWARD)
        strtold (-0x0.7p-16494) returned -0x0.0000000000008p-16385 not -0x0.000000000000001p-16385 (FE_DOWNWARD)

  * `stdio-common/bug22.out`

        Timed out: killed the child process

    Known problem.

  * `libio/tst-atime.out`, `dirent/tst-fdopendir.out`

    [[!message-id "201305102256.56636.toscano.pino@tiscali.it"]].

    `libio/tst-atime.out`:

        atime has not changed

    Due to `ext2fs --no-atime`.

      * IRC, OFTC, #debian-hurd, 2013-05-08

            <youpi> bah, tst-atime failure :)
            <pinotree> do you have its output?
            <youpi> well it's very simple
            <youpi> I have the noatime option on / :)
            <pinotree> oh
            <youpi> fortunately fsysopts works :)
            <pinotree> the test checks whether ST_NOATIME is in the mount
              options, maybe it would be a good idea to provide it
            <youpi> yes
            <pinotree> unfortunately it isn't in posix, so i'm not sure whether
              adding it to the general bits/statvfs.h would be welcome
            <pinotree> or whether we should fork it, like it is done for linux 
            <pinotree> oh no, we fork it already
            <pinotree> \o/

    `dirent/tst-fdopendir.out`:

        directory atime changed

    Due to `ext2fs --atime` (default).

  * `libio/tst-fopenloc.check`, `posix/bug-regex31-mem`,
    `posix/tst-fnmatch-mem`, `misc/tst-error1-mem`

        Memory not freed:
        -----------------
           Address     Size     Caller
        0x0807e268   0x8000  at 0x10c71c4

    Caused by different memory allocation way in libio, see
    [[!message-id "87mxd9hl2n.fsf@kepler.schwinge.homeip.net"]]

  * `dlfcn/bug-atexit3.out`

    Originally:

        dlopen failed: libstdc++.so.6: cannot open shared object file: No such file or directory

    See [[!message-id "20090420002344.11798.qmail@s461.sureserver.com"]].
    Hacked around with `ln -s /usr/lib/i386-*gnu/libstdc++.so.6
    /lib/i386-*gnu/libpthread-stubs.so.0 /lib/i386-*gnu/libgcc_s.so.1 ./`.
    This is a bug in the glibc test harness.  Should probably use some
    `configure` magic akin to the `fixincludes` stuff (`gcc-4.4
    -print-file-name=libstdc++.so.6`, etc.).

    Even if that that is being worked around, the tests nowadays
    ([[service_solahart_jakarta_selatan__082122541663/packaging_libpthread]]) fail with:

        dlopen failed: [...]/libc.so.0.3: version `GLIBC_2.13_DEBIAN_31' not found (required by [...]/libstdc++.so.6)

  * `dlfcn/tststatic.out`, `dlfcn/tststatic2.out`, `dlfcn/tststatic3.out`,
    `dlfcn/tststatic4.out`, `dlfcn/tststatic5.out`

    SIGSEGV.

    `LD_LIBRARY_PATH` doesn't contain the `mach` and `hurd` directories; yet
    the test shouldn't just SIGSEGV.

  * `dirent/opendir-tst1.out`, `dirent/tst-fdopendir2.out`

    `dirent/opendir-tst1.out`:

        `opendir' succeeded on a FIFO???

    `dirent/tst-fdopendir2.out`:

        fdopendir with normal file descriptor did not fail

    `opendir` and `fdopendir` do not return `ENOTDIR` if `fd` is not a
    directory.

  * `posix/tst-waitid.out`

    Intermittent.

        SIGCHLD for stopped status 0
        SIGCHLD for stopped pid -1
        SIGCHLD for killed code 1
        SIGCHLD for killed status 0
        SIGCHLD for killed pid -1

  * `posix/bug-glob2.out`

    Intermittent.

        Timed out: killed the child process

  * `posix/annexc.out`

    Failure ignored by the glibc testsuite.

  * `posix/tst-getconf.out`

    Ends with:

        getconf POSIX_ALLOC_SIZE_MIN /: [...]/posix/getconf: pathconf: /: Invalid argument

    It fails because of unimplemented pathconf cases: `_PC_ALLOC_SIZE_MIN`,
    `_PC_REC_INCR_XFER_SIZE`, `_PC_REC_MAX_XFER_SIZE`, `_PC_REC_MIN_XFER_SIZE`,
    `_PC_REC_XFER_ALIGN`, `_PC_SYMLINK_MAX`, `_PC_2_SYMLINKS`.

    `_CS_GNU_LIBPTHREAD_VERSION` is provided by libpthread when compiled as
    add-on.

  * `posix/tst-vfork3-mem`

        + 0x0804cee0 Alloc 10 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 11 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        + 0x0804cfa8 Alloc 12 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x00000008 Alloc 17 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x0804cee0 Alloc 18 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 19 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        + 0x0804cfa8 Alloc 20 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x00000008 Alloc 25 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x0804cee0 Alloc 26 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 27 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        + 0x0804cfa8 Alloc 28 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x00000008 Alloc 33 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x0804cee0 Alloc 34 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 35 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        + 0x0804cfa8 Alloc 36 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x00000008 Alloc 41 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x0804cee0 Alloc 42 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 43 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        + 0x0804cfa8 Alloc 44 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x00000008 Alloc 49 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x0804cee0 Alloc 50 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 51 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        + 0x0804cfa8 Alloc 52 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x00000008 Alloc 57 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x0804cee0 Alloc 58 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 59 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        + 0x0804cfa8 Alloc 60 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x00000008 Alloc 65 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x0804cee0 Alloc 66 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 67 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        + 0x0804cfa8 Alloc 68 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x00000008 Alloc 73 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x0804cee0 Alloc 74 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 75 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        + 0x0804cfa8 Alloc 76 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x00000008 Alloc 81 duplicate: 0x10df0c8 $BUILDDIR/libc.so.0.3:(argz_create+0x68)[0x10df0c8]
        + 0x0804cee0 Alloc 82 duplicate: 0x1095389 $BUILDDIR/libc.so.0.3:[0x1095389]
        + 0x0804cf90 Alloc 83 duplicate: 0x1156963 $BUILDDIR/libc.so.0.3:(tsearch+0xe3)[0x1156963]
        - 0x0804c8d8 Free 84 was never alloc'd 0x10955fc
        - 0x0804c960 Free 87 was never alloc'd 0x115672f
        - 0x0804c9b8 Free 88 was never alloc'd 0x1156737
        
        Memory not freed:
        -----------------
           Address     Size     Caller
        0x0804cfa8     0x73  at 0x10df0c8
        0x00000008        0  at 0x10df0c8

    Perhps because we implement `vfork` in terms of `fork` (`posix/vfork.c`)?

  * `posix/tst-pathconf.out`

        pathconf on directory failed: (os/kern) successful

  * `io/test-lfs.out`

        /home/thomas/tmp/glibc/tschwinge/Roger_Whittaker.build/io/test-lfs: cannot write test string to large file: Invalid argument

  * `io/tst-futimesat.out`

        file created
        futimesat failed

    `futimesat` is a stub.

  * `misc/tst-pselect.o`

        tst-pselect.c: In function 'do_test':
        tst-pselect.c:33:17: error: 'SA_NOCLDWAIT' undeclared (first use in this function)

  * `gmon/tst-sprofil.out`

        Floating point exception

  * `nss//libnss_test1.so`

        [...]/nss/nss_test1.os: In function `_nss_test1_getpwent_r':
        [...]/nss/nss_test1.c:60: undefined reference to `pthread_mutex_lock'
        [...]/nss/nss_test1.c:85: undefined reference to `pthread_mutex_unlock'

  * `rt/tst-shm.out`

        read file outside of SHMDIR directory: (os/kern) successful

  * `rt/tst-timer.out`

    No message.

  * `rt/tst-timer2.o`

        tst-timer2.c: In function 'do_test':
        tst-timer2.c:33:23: error: 'SIGRTMIN' undeclared (first use in this function)

  * `rt/tst-aio2`, `rt/tst-aio3`, `rt/tst-aio9`, `rt/tst-aio10`,
    `rt/tst-mqueue3`, `rt/tst-mqueue5.o`, `rt/tst-mqueue6`, `rt/tst-mqueue8`,
    `rt/tst-timer3`, `rt/tst-timer4.o`, `rt/tst-timer5.o`,
    `rt/tst-cputimer1.o`, `rt/tst-cputimer2.o`, `rt/tst-cputimer3.o`,
    `elf/tst-thrlock`

        [...]/rt/tst-aio2.o: In function `do_test':
        [...]/rt/tst-aio2.c:62: undefined reference to `pthread_barrier_init'
        [...]/rt/tst-aio2.c:94: undefined reference to `pthread_barrier_wait'
        [...]/rt/tst-aio2.o: In function `thrfct':
        [...]/rt/tst-aio2.c:35: undefined reference to `pthread_barrier_wait'

        tst-mqueue5.c: In function 'rtmin_handler':
        tst-mqueue5.c:50:14: error: 'SIGRTMIN' undeclared (first use in this function)

        [...]/rt/tst-mqueue6.o: In function `do_test':
        [...]/rt/tst-mqueue6.c:127: undefined reference to `pthread_attr_init'
        [...]/rt/tst-mqueue6.c:149: undefined reference to `pthread_attr_setguardsize'
        [...]/rt/tst-mqueue6.c:211: undefined reference to `pthread_attr_setguardsize'
        [...]/rt/tst-mqueue6.c:262: undefined reference to `pthread_attr_destroy'
        [...]/rt/tst-mqueue6.c:128: undefined reference to `pthread_attr_setguardsize'
        [...]/rt/tst-mqueue6.o: In function `fct':
        [...]/rt/tst-mqueue6.c:79: undefined reference to `pthread_self'
        [...]/rt/tst-mqueue6.c:79: undefined reference to `pthread_getattr_np'
        [...]/rt/tst-mqueue6.c:88: undefined reference to `pthread_attr_getguardsize'
        [...]/rt/tst-mqueue6.c:95: undefined reference to `pthread_attr_destroy'
        [...]/rt/tst-mqueue6.c:95: undefined reference to `pthread_attr_destroy'

        [...]/elf/tst-thrlock.o: In function `do_test':
        [...]/elf/tst-thrlock.c:38: undefined reference to `pthread_create'
        [...]/elf/tst-thrlock.c:48: undefined reference to `pthread_join'

  * `rt/tst-aio8.out`

        r = -1, e = 1073741902 (Function not implemented)

    Should work with [[!message-id
    "201209302353.51055.toscano.pino@tiscali.it"]] in libpthread.

  * `debug/tst-chk1.out`

    Intermittent.  Timeout.  Unknown.

  * `debug/tst-chk2.out`, `debug/tst-chk3.out`, `debug/tst-lfschk2.out`,
    `debug/tst-lfschk3.out`

    Unknown.

  * `debug/tst-chk4.out`, `debug/tst-chk5.out`, `debug/tst-chk6.out`,
    `debug/tst-lfschk4.out`, `debug/tst-lfschk5.out`, `debug/tst-lfschk6.out`

        [...]/debug/tst-chk4: [...]/libc.so.0.3: version `GLIBC_2.13_DEBIAN_31' not found (required by [...]/libstdc++.so.6)
        [...]/debug/tst-chk4: [...]/libc.so.0.3: version `GLIBC_2.13_DEBIAN_31' not found (required by [...]/libgcc_s.so.1)

  * `debug/tst-longjmp_chk2.out`

    SIGSEGV.

        not on alternate stack
         in signal handler
         on alternate stack
         out of signal handler
         on alternate stack

    It says *alternate stack*.

  * `inet/tst-ether_line.o`

        tst-ether_line.c: In function 'do_test':
        tst-ether_line.c:19:19: error: 'ETH_ALEN' undeclared (first use in this function)

    Will either need a `hurd/netinet/if_ether.h` that includes
    `<net/if_ether.h>`, or can do that in the generic `netinet/if_ether.h`?
    See also [[!sourceware_PR 11142]].

  * `login/tst-grantpt.out`

        posix_openpt(O_RDWR) failed
        errno 1073741902 (Function not implemented)

    `posix_openpt` is a stub.

        grantpt(): expected: return = -1, errno = 1073741846
                   got: return = -1, errno = -303

    `grantpt` (actually `ptsname_r`), does not fail with `ENOTTY` when the `fd`
    does not refer to a PTY master.

  * `elf/tst-auxv.out`

    SIGSEGV.

  * `elf/tst-stackguard1-static.out`, `elf/tst-stackguard1.out`

        differences 0 defaults 0
        stack guard canaries are not randomized enough
        nor equal to the default canary value

    Sometimes times out.

  * `elf/tst-ptrguard1-static.o`, `elf/tst-ptrguard1.o`

        In file included from tst-ptrguard1-static.c:1:0:
        tst-ptrguard1.c: In function 'con':
        tst-ptrguard1.c:42:24: error: 'tcbhead_t' has no member named 'pointer_guard'
        tst-ptrguard1.c: In function 'do_test':
        tst-ptrguard1.c:65:29: error: 'tcbhead_t' has no member named 'pointer_guard'
        tst-ptrguard1.c:104:30: error: 'tcbhead_t' has no member named 'pointer_guard'

    See [[t/tls|service_solahart_jakarta_selatan__082122541663/glibc/t/tls]].

  * `elf/tst-tls9-static.out`

    SIGSEGV.

  * `elf/tst-dlmopen1.out`

    SIGSEGV.

  * `elf/tst-audit1.out`, `elf/tst-audit2.out`, `elf/tst-audit8.out`

    SIGKILL.

  * `elf/tst-null-argv.out`

        Inconsistency detected by ld.so: ../sysdeps/mach/hurd/dl-sysdep.c: 338: open_file: Assertion `!(flags & ~(0x0001 | 0x00400000))' failed!

  * `elf/check-textrel.out`

        $BUILDDIR/libc.so.dyn: *** text relocations used

  * `elf/check-execstack.out`

        $BUILDDIR/libc.so.phdr: *** executable stack signaled

  * `elf/check-localplt.out`

    Around 500 or so `Extra PLT reference`.

  * `check-local-headers.out`

    A lot.  Including `/usr/include/device/*.h`, `/usr/include/mach/*.h`,
    `/usr/include/hurd/*.h`.

  * `debug/tst-longjmp_chk2.out`, `debug/tst-longjmp_chk3.out`,
    `debug/tst-longjmp_chk4.out`, `debug/tst-longjmp_chk5.out`,
    `debug/tst-backtrace2.out`, `debug/tst-backtrace3.out`,
    `debug/tst-backtrace4.out`, `debug/tst-backtrace5.out`
    `debug/tst-backtrace6.out`

    All say: `Obtained backtrace with 0 functions`.

Earlier failures; no longer seen:

  * `test-assert-perr.out`

    Fails intermittently.  Unknown.

  * `test-multiarch.out`

    Needs [[`/proc/cpuinfo`|hurd/translator/procfs/jkoenig/discussion]]
    providing the `flags` line.

  * `elf/tst-array*`

    No longer fail with GCC 4.7.
    [[!message-id "50950082.1070906@df1tl.local.here"]].

  * `io/ftwtest`, `posix/globtest`, `iconvdata/iconv-test`, `intl/tst-gettext`,
    `malloc/tst-mtrace`, `elf/tst-pathopt`, `iconvdata/tst-tables`,
    `grp/tst_fgetgrent`,
    `posix/wordexp-tst`, `localedata/bug-setlocale1.out`, `posix/tst-getconf`

        /home/thomas/tmp/glibc/tschwinge/Roger_Whittaker.build-gcc-4.4-486.O/io/ftwtest: error while loading shared libraries: libmachuser.so.1: cannot open shared object file: No such file or directory

    Looking into `localedata/bug-setlocale1.c`, it is clear what it going on:
    only the root of the build directory is added for `--library-path`, but
    none of the other directories that are additionally used.  This is a bug in
    the glibc test harness.  Hacked around by `ln -s mach/libmachuser.so.1
    hurd/libhurduser.so.0.3 ./`.  Hopefully the other instances are similar.

  * `assert/test-assert.out`

    Fails sometimes...

  * `math/test-fenv.out`

    Used to fail (is listed in Debian eglibc-2.13-21's
    `expected-results-i486-gnu-libc`), but something between
    22bcba37dd3b782b1a1ec7bf51da468e48f4d2eb and
    005b7594ffe209639dd1ef2b9ed9a4c22307dec1 causes it to passe -- very likely
    Jérémie's signaling work.

  * `elf/tst-unused-dep.out` (1f393a11f65dcaa1952bdcaf0317a65a5f8aff9d,
    [[!sourceware_PR 13706]], [[!message-id "4F4210C1.1090704@redhat.com"]])

        Unused direct dependencies:
                /home/thomas/tmp/glibc/tschwinge/Roger_Whittaker.build-gcc-4.6-486/dlfcn/libdl.so.2

    As of 8958805c11c741d9211e20612c86271d906c9a0b, this test now passes --
    correct?

  * `stdlib/bug-getcontext.out`

        getcontext failed, errno: 1073741902.

    Fixed, implemented in `t/context_functions`.

  * `resource/bug-ulimit1.out`

        Result of ulimit (UL_SETFSIZE, 10000): 0
        Result of ulimit(UL_GETFSIZE): 10000

    Buggy `sysdeps/unix/bsd/ulimit.c` return values.

    Fixed, [[!message-id "201211182342.51619.toscano.pino@tiscali.it"]].

Compared to Debian:

    $ bash ~/tmp/glibc/debian/eglibc-2.13/debian/testsuite-checking/convertlog.sh log_test  > log_test.filtered
    $ bash ~/tmp/glibc/debian/eglibc-2.13/debian/testsuite-checking/compare.sh ~/tmp/glibc/debian/eglibc-2.13/debian/testsuite-checking/expected-results-i486-gnu-libc log_test.filtered