diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2015-02-18 00:58:35 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2015-02-18 00:58:35 +0100 |
commit | 49a086299e047b18280457b654790ef4a2e5abfa (patch) | |
tree | c2b29e0734d560ce4f58c6945390650b5cac8a1b /open_issues/glibc.mdwn | |
parent | e2b3602ea241cd0f6bc3db88bf055bee459028b6 (diff) | |
download | web-49a086299e047b18280457b654790ef4a2e5abfa.tar.gz web-49a086299e047b18280457b654790ef4a2e5abfa.tar.bz2 web-49a086299e047b18280457b654790ef4a2e5abfa.zip |
Revert "rename open_issues.mdwn to service_solahart_jakarta_selatan__082122541663.mdwn"
This reverts commit 95878586ec7611791f4001a4ee17abf943fae3c1.
Diffstat (limited to 'open_issues/glibc.mdwn')
-rw-r--r-- | open_issues/glibc.mdwn | 3422 |
1 files changed, 3422 insertions, 0 deletions
diff --git a/open_issues/glibc.mdwn b/open_issues/glibc.mdwn new file mode 100644 index 00000000..33041e71 --- /dev/null +++ b/open_issues/glibc.mdwn @@ -0,0 +1,3422 @@ +[[!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]] + + * [[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> + + [[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`|t/tls]]</a> + + * <a id=t_tls-threadvar>[[`t/tls-threadvar`|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|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>[[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... + + [[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|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 + + * [[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`|clock_gettime]], and + so on. + + For specific packages: + + * <a id=octave>[[octave]]</a> + + * <a id=t_cleanup_kernel-features.h>Create `t/cleanup_kernel-features.h`.</a> + + * <a id=Secure_file_descriptor_handling>[[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|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 + [[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]], + [[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 [[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`|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|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 + ([[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|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 |