diff options
Diffstat (limited to 'open_issues')
-rw-r--r-- | open_issues/glibc.mdwn | 3453 |
1 files changed, 0 insertions, 3453 deletions
diff --git a/open_issues/glibc.mdwn b/open_issues/glibc.mdwn index 55bf9031..8b137891 100644 --- a/open_issues/glibc.mdwn +++ b/open_issues/glibc.mdwn @@ -1,3454 +1 @@ -[[!meta copyright="Copyright © 2007, 2008, 2010, 2011, 2012, 2013, 2014, 2015, -2016 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 9a869d822025be8e43b78234997b10bf0cf9d859 -(2014-02-07) 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://git.sceen.net/hurd/hurd.git/plain/hurd/io.defs - <braunr> this is the io interface - <braunr> - http://git.sceen.net/hurd/glibc.git/tree/hurd/hurdselect.c?h=tschwinge/Roger_Whittaker - <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. - - * `fd_to_filename` - - See [[translate_FD_or_port_to_file_name]]. - - 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?) Now used in - 7f507ee17aee720fa423fa38502bc3caa0dd03d7 `Async-signal safe TLS`. - 7f507ee17aee720fa423fa38502bc3caa0dd03d7 has been reverted in - 73d61e4f6c65da714c0f8a3a233725322553ceba. - 1f33d36a8a9e78c81bed59b47f260723f56bb7e6, - 063b2acbce83549df82ab30f5af573f1b9c4bd19, - b627fdd58554bc36bd344dc40a8787c4b7a9cc46, - e81c64bba13d2d8b2a4e53254a82cc80f27c8497 have been reverted in - dd654bf9ba1848bf9ed250f8ebaa5097c383dcf8. - 35e8f7ab94c910659de9d507aa0f3e1f8973d914 has been reverted in - 8b6785f0836011cace9a77f3c24e51a7379238a0. - 69a17d9d245dc3551792e95e1823cc2d877592f3 has been reverted in - bf06bcee84d4c19a99925c0f58026a8cbd87a688. - a494421f5268df333c589d71104a39bb6a9cff19 has been reverted in - f482dbbec775bf72eb6510b6091fca141893c466. - * [low] In various commits, `menual/*.texi` files have been annotated - regarding MTASC-safety properties. The focus has not necessarily been - on Hurd, though. - * *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 -f68531785b6d85fb0b405747688f93471b6a964f (2015-01-23; -9a869d822025be8e43b78234997b10bf0cf9d859 (2014-02-07)) -plus 6a97b62a5b4f18aea849d6f4d8de58d1469d2521 reverted, -`id:"87a9fvguwq.fsf@schwinge.name"`, -`_SERVERS_STARTUP` hard-coded to `/servers/startup` in `sysdeps/mach/hurd/reboot.c` -sources|source_repositories/glibc]], run on laplace.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 runs for [[TODO min|performance#measure]] on -kepler.SCHWINGE and [[19 min|performance#measure]] on laplace.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 laplace.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 runs for [[TODO min|performance#measure]] on -kepler.SCHWINGE and [[3 min|performance#measure]] on laplace.SCHWINGE. - - -## Analysis - - $ toolchain/logs/process glibc install fetch laplace.SCHWINGE - -TODO. - - -# Testsuite - - $ make -k install_root=/INVALID check fast-check=yes 2>&1 | tee log_test - [...] - -This runs for [[TODO min|performance#measure]] on kepler.SCHWINGE and [[10 -min|performance#measure]] on laplace.SCHWINGE. - -Specifying `fast-check=yes` disables the `conformtest` which ran for 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 laplace.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-sysconf.out` - - Fails with: - - sysconf(_SC_BARRIERS) must be 200809L - sysconf(_SC_READER_WRITER_LOCKS) must be 200809L - sysconf(_SC_SEMAPHORES) must be 200809L - sysconf(_SC_SPIN_LOCKS) must be 200809L - sysconf(_SC_THREAD_ATTR_STACKADDR) must be 200809L - sysconf(_SC_THREAD_ATTR_STACKSIZE) must be 200809L - sysconf(_SC_THREADS) must be 200809L - sysconf(_SC_TIMEOUTS) must be 200809L - - That, I presume, is in response to our `sysdeps/mach/hurd/bits/posix_opt.h` - file, which uses *200112L* values. - `nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h` uses *200809L* values. - - * `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-cpuclock2`, - `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-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 |