From 78d2510a84a791479ff0bad78e21aca6c4ce78fa Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Tue, 21 May 2013 14:27:40 +0200 Subject: open_issues/glibc: bab06390aca40703514099a7022dac4ae4aac76b (2013-05-20; fbeafedeea37e0af1984a6511018d159f5ceed6a (2012-11-03)) --- open_issues/gccgo.mdwn | 6 ++-- open_issues/glibc.mdwn | 36 ++++++++++++++-------- open_issues/glibc/t/tls-threadvar.mdwn | 56 ---------------------------------- open_issues/libpthread.mdwn | 3 ++ toolchain/logs | 2 +- 5 files changed, 31 insertions(+), 72 deletions(-) diff --git a/open_issues/gccgo.mdwn b/open_issues/gccgo.mdwn index fb94cb83..9e724b95 100644 --- a/open_issues/gccgo.mdwn +++ b/open_issues/gccgo.mdwn @@ -34,8 +34,8 @@ First, make the language functional, have its test suite pass without errors. ## Svante's work Per [[!message-id "1335509732.3707.179.camel@hp.my.own.domain"]], Svante has -been working on this, has some (unpublished) patches, and this is currently -blocked on [[`getcontext`/`setcontext`|open_issues/glibc/t/tls-threadvar]]. +been working on this, has some (unpublished) patches, and this was blocked on +[[`getcontext`/`makecontext`/`setcontext`/`swapcontext`|glibc]]. ## `getcontext`/`makecontext`/`setcontext`/`swapcontext` usage analysis @@ -53,7 +53,7 @@ The `*context` functions are used in `libgo/runtime/go-signal.c` and `__splitstack_makecontext`, `__splitstack_resetcontext`, `__splitstack_block_signals_context` are to be provided by libgcc. However, in said libgo runtime files, they're used only `#ifdef USING_SPLIT_STACK`. -[[I|ŧschwinge]] would assume that before we can enable split stacks, first +[[I|tschwinge]] would assume that before we can enable split stacks, first [[open_issues/glibc/t/tls-threadvar]] needs to be fixed. In `libgo/runtime/proc.c`:`runtime_gogo`, `setcontext` is used to *switch diff --git a/open_issues/glibc.mdwn b/open_issues/glibc.mdwn index 33a1a071..65352d46 100644 --- a/open_issues/glibc.mdwn +++ b/open_issues/glibc.mdwn @@ -259,7 +259,7 @@ Last reviewed up to the [[Git mirror's d3bd58cf0a027016544949ffd27300ac5fb01bb8 so I'd say ignore the error for now, we'll add the declaration - * [[`getcontext`/`setcontext`|t/tls-threadvar]] + * [[t/tls-threadvar]] * `futimesat` @@ -373,6 +373,22 @@ Last reviewed up to the [[Git mirror's d3bd58cf0a027016544949ffd27300ac5fb01bb8 no, linux is more permissive (at least, on this matter) + * `getcontext`/`makecontext`/`setcontext`/`swapcontext` + + 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 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. + For specific packages: * [[octave]] @@ -1102,7 +1118,7 @@ Last reviewed up to the [[Git mirror's d3bd58cf0a027016544949ffd27300ac5fb01bb8 # Build Here's a log of a glibc build run; this is from our [[Git repository's -60f4d2f33666d77ac018cb9956675dcad04bb996 (2013-02-12; +bab06390aca40703514099a7022dac4ae4aac76b (2013-05-20; fbeafedeea37e0af1984a6511018d159f5ceed6a (2012-11-03)) sources|source_repositories/glibc]], run on coulomb.SCHWINGE. @@ -1270,16 +1286,6 @@ Failures, mostly in order of appearance: SIGSEGV. Or SIGILL. - * `stdlib/bug-getcontext.out` - - getcontext failed, errno: 1073741902. - - [[Not implemented|t/tls-threadvar]]. - In 8958805c11c741d9211e20612c86271d906c9a0b - testing, `stdlib/bug-getcontext.out` now says: *Skipping test; no support - for FP exceptions.*, in cba1c83ad62a11347684a9daf349e659237a1741 testing, - it's back to the previous failure. - * `stdlib/tst-secure-getenv.out` open (/proc/self/exe): No such file or directory @@ -1664,6 +1670,12 @@ Earlier failures; no longer seen: As of 8958805c11c741d9211e20612c86271d906c9a0b, this test now passes -- correct? + * `stdlib/bug-getcontext.out` + + getcontext failed, errno: 1073741902. + + Fixed, implemented in `t/context_functions`. + Compared to Debian: $ bash ~/tmp/glibc/debian/eglibc-2.13/debian/testsuite-checking/convertlog.sh log_test > log_test.filtered diff --git a/open_issues/glibc/t/tls-threadvar.mdwn b/open_issues/glibc/t/tls-threadvar.mdwn index 5f1345c6..105a07c7 100644 --- a/open_issues/glibc/t/tls-threadvar.mdwn +++ b/open_issues/glibc/t/tls-threadvar.mdwn @@ -64,59 +64,3 @@ dropped altogether, and `__thread` directly be used in glibc. I saw the mails, but didn't investigate at all [[!message-id "878vdyqht3.fsf@kepler.schwinge.homeip.net"]]. - - -# `getcontext`/`setcontext` - -Needed for [[gccgo]]. - -Instead of adding support for `getcontext`/`setcontext` within the Hurd -threadvar context, which might become a bit ugly, the idea is to get rid of -Hurd threadvars and replace them with TLS (as we want to, anyway). - - -## IRC, freenode, #hurd, 2012-04-19 - - How much work/knowledge is needed to implement - getcontext/setcontext? - Any already implemented alternatives available? - x86 registers knowledge, as well as unix signal masks - there's the linux implementation that can be taken as an - exxample, but the signal part has to be rewritten - Well, it's a pity they are not implemented. That's the - remaining hurdle to get gccgo working :-( - uh :/ - Everything builds, but the testsuite fails due to these - missing functions. - Regarding getcontext/setcontext they seem to be written - in assembly for linux but the code is not very long. - How much effort would it be to write something similar - for Hurd? Anybody fluent in asm? - And registers and signals. - gnu_srs: Signals is the key thing -- everything else we - can probably just copy. I have never/not yet looked at it, - though. - For kfreebsd it is written in C: kern_context.c, 3/4 in - one file: getcontext, setcontext, swapcontext, not makecontext. - Dunno how much assembly calls used though. - Hi, any preferences about implementing get/setcontext in - C or Asm? - gnu_srs: I think these will have to be implemented in - assembly. Based on the Linux x86 variants. - - -### IRC, freenode, #hurd, 2012-04-20 - - youpi: Your understanding of that is better than mine - -- the *context stuff can't be very useful at the moment, because - when the user changes uc_stack.ss_sp (which the glibc tests are - doing), we're losing access to the _hurd_threadvars. Correct? - At least the getcontext test works, the other get a - SIGILL. - others - _hurd_threadvars issue is just guessing. - tschwinge: yes, threadvars are on the stack - threadvars is not much code, it should just work, but care - has to be taken on the libpthread/libthread side, which does some - initialization - OK, that at least matches my understanding. diff --git a/open_issues/libpthread.mdwn b/open_issues/libpthread.mdwn index 28532320..e2fda122 100644 --- a/open_issues/libpthread.mdwn +++ b/open_issues/libpthread.mdwn @@ -601,6 +601,9 @@ Most of the issues raised on this page has been resolved, a few remain. Mhm, I see. so for now, i'm using this approach as a hack only I'm working on phasing out threadvars, but we're not there yet. + +[[glibc/t/tls-threadvar]]. + Yes, that's fine for the moment. tschwinge: a simple definition wouldn't work tschwinge: i resorted to a weak symbol, and see how it goes diff --git a/toolchain/logs b/toolchain/logs index a264dc20..27227e62 160000 --- a/toolchain/logs +++ b/toolchain/logs @@ -1 +1 @@ -Subproject commit a264dc206a1ebd541f01d3f3c496a80b3b8d978b +Subproject commit 27227e6223c3e45f2a4486cb032b8e0fd860f16a -- cgit v1.2.3 From de1e1abf967cd75e56558270e03f10c6c9649c27 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Tue, 21 May 2013 23:49:02 +0200 Subject: open_issues/glibc: 93236ed3b6207dc9544dda6615c94c938d29ae6b (2013-05-21; 542f94662e8235d9917b0783df70bcdf9d729503 (2013-02-02)) --- open_issues/glibc.mdwn | 61 ++++++++++++++++++++++++++++++++------------------ toolchain/logs | 2 +- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/open_issues/glibc.mdwn b/open_issues/glibc.mdwn index 65352d46..ed5ca3e8 100644 --- a/open_issues/glibc.mdwn +++ b/open_issues/glibc.mdwn @@ -30,14 +30,14 @@ Here's what's to be done for maintaining glibc. -Last reviewed up to the [[Git mirror's d3bd58cf0a027016544949ffd27300ac5fb01bb8 -(2012-11-03) sources|source_repositories/glibc]]. +Last reviewed up to the [[Git mirror's 542f94662e8235d9917b0783df70bcdf9d729503 +(2013-02-02) sources|source_repositories/glibc]]. * `t/hurdsig-fixes` @@ -221,9 +221,9 @@ Last reviewed up to the [[Git mirror's d3bd58cf0a027016544949ffd27300ac5fb01bb8 b1b2aaf8eb9eed301ea8f65b96844568ca017f8b), `RLIMIT_RTTIME`, `SEEK_DATA` (`unistd.h`), `SEEK_HOLE` (`unistd.h`) `clock_adjtime`, `fallocate`, `fallocate64`, `name_to_handle_at`, - `open_by_handle_at`, `process_vm_readv`, `process_vm_writev`, `sendmmsg`, + `open_by_handle_at`, `process_vm_readv`, `process_vm_writev`, `setns`, `sync_file_range`, [[`mremap`|mremap]] and [[several - `MAP_*`|glibc/mmap]] + `MAP_*`|glibc/mmap]], `PTR_MANGLE`/`PTR_DEMANGLE` (`t/ptrmangle`) Check also the content of `gnu/stubs.h`, which lists all the functions marked as stub which only return `ENOSYS`. @@ -389,6 +389,17 @@ Last reviewed up to the [[Git mirror's d3bd58cf0a027016544949ffd27300ac5fb01bb8 libgc, libsigsegv, luatex, mono, nspr, pth, ruby1.8, texlive-bin, uim, and more. + * `recvmmsg`/`sendmmsg` (`t/sendmmsg`) + + 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.* + For specific packages: * [[octave]] @@ -1118,8 +1129,8 @@ Last reviewed up to the [[Git mirror's d3bd58cf0a027016544949ffd27300ac5fb01bb8 # Build Here's a log of a glibc build run; this is from our [[Git repository's -bab06390aca40703514099a7022dac4ae4aac76b (2013-05-20; -fbeafedeea37e0af1984a6511018d159f5ceed6a (2012-11-03)) +93236ed3b6207dc9544dda6615c94c938d29ae6b (2013-05-21; +542f94662e8235d9917b0783df70bcdf9d729503 (2013-02-02)) sources|source_repositories/glibc]], run on coulomb.SCHWINGE. $ export LC_ALL=C @@ -1240,7 +1251,7 @@ TODO. $ make install_root="$PWD".install install 2>&1 | tee log_install [...] -This takes up around 100 MiB, and needs roughly X min on kepler.SCHWINGE and 16 +This takes up around 100 MiB, and needs roughly X min on kepler.SCHWINGE and 14 min on coulomb.SCHWINGE. @@ -1256,11 +1267,12 @@ TODO. $ make -k install_root=/INVALID check fast-check=yes 2>&1 | tee log_test [...] -This needs roughly X min on kepler.SCHWINGE and 60 min on coulomb.SCHWINGE. +This needs roughly X min on kepler.SCHWINGE and 145 min on coulomb.SCHWINGE. Specifying `fast-check=yes` disables the `conformtest` which takes 1.75 h (out of 2.75 h total) on coulomb.SCHWINGE, doesn't pass anyway, and clearly isn't our most critical issue to solve. +`elf/tst-xmmymm.out` is another candidate to disable: needs 90 min to run. ## Analysis @@ -1378,6 +1390,8 @@ Failures, mostly in order of appearance: * `posix/bug-glob2.out` + Intermittent. + Timed out: killed the child process * `posix/annexc.out` @@ -1460,17 +1474,6 @@ Failures, mostly in order of appearance: `futimesat` is a stub. - * `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. - - [[!message-id "201211182342.51619.toscano.pino@tiscali.it"]] - - Fixed in glibc >= 2.18. - * `misc/tst-pselect.o` tst-pselect.c: In function 'do_test': @@ -1599,7 +1602,7 @@ Failures, mostly in order of appearance: SIGSEGV. - * `elf/tst-audit1.out`, `elf/tst-audit2.out` + * `elf/tst-audit1.out`, `elf/tst-audit2.out`, `elf/tst-audit8.out` SIGKILL. @@ -1620,6 +1623,11 @@ Failures, mostly in order of appearance: 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` + + All say: `Obtained backtrace with 0 functions`. + Earlier failures; no longer seen: * `test-assert-perr.out` @@ -1676,6 +1684,15 @@ Earlier failures; no longer seen: 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 diff --git a/toolchain/logs b/toolchain/logs index 27227e62..366196b0 160000 --- a/toolchain/logs +++ b/toolchain/logs @@ -1 +1 @@ -Subproject commit 27227e6223c3e45f2a4486cb032b8e0fd860f16a +Subproject commit 366196b0ec8c8d5dd91ee7b71dcd05c76239bf30 -- cgit v1.2.3 From 8f0dee8eedc3a77b5f909a998a8603ad1934a545 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Fri, 24 May 2013 15:58:41 +0200 Subject: open_issues/glibc: 3e1dec8e8cf102ed1e9b8ddf2e8fa40fc259ab00 (2013-05-23; af15c191766fd413ef6fedc9d54b87962332ca71 (2013-03-28)) --- open_issues/glibc.mdwn | 64 ++++++++++++++++++++++++++++++++++++++++++++++---- toolchain/logs | 2 +- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/open_issues/glibc.mdwn b/open_issues/glibc.mdwn index ed5ca3e8..b7dc1b18 100644 --- a/open_issues/glibc.mdwn +++ b/open_issues/glibc.mdwn @@ -36,8 +36,8 @@ git log --reverse --topo-order --pretty=fuller --stat=$COLUMNS,$COLUMNS -w -p -C --> -Last reviewed up to the [[Git mirror's 542f94662e8235d9917b0783df70bcdf9d729503 -(2013-02-02) sources|source_repositories/glibc]]. +Last reviewed up to the [[Git mirror's af15c191766fd413ef6fedc9d54b87962332ca71 +(2013-03-28) sources|source_repositories/glibc]]. * `t/hurdsig-fixes` @@ -1117,6 +1117,58 @@ Last reviewed up to the [[Git mirror's 542f94662e8235d9917b0783df70bcdf9d729503 ea4d37b3169908615b7c17c9c506c6a6c16b3a26, especially since mach's sleep.c is buggy (not considers interruption, extra time() (= RPC) call)«. + * ba384f6ed9275f3966505f2375b56d169e3dc588, + 0409959c86f6840510851a851a1588677a2e537b `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`:`LDFLAGS-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 + +LDFLAGS-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] + + * bc16e260d0e74b36e48d30edc6ea4f1152700c09 `Move _dl_non_dynamic_init, + _dl_aux_init declarations.` -- can remove + `sysdeps/mach/hurd/i386/init-first.c`:`_dl_non_dynamic_init` + declaration? + * a600e5cef53e10147932d910cdb2fdfc62afae4e `Consolidate Linux and POSIX + libc_fatal code.` -- is `backtrace_and_maps` specific to Linux? ## Update @@ -1129,8 +1181,8 @@ Last reviewed up to the [[Git mirror's 542f94662e8235d9917b0783df70bcdf9d729503 # Build Here's a log of a glibc build run; this is from our [[Git repository's -93236ed3b6207dc9544dda6615c94c938d29ae6b (2013-05-21; -542f94662e8235d9917b0783df70bcdf9d729503 (2013-02-02)) +3e1dec8e8cf102ed1e9b8ddf2e8fa40fc259ab00 (2013-05-23; +af15c191766fd413ef6fedc9d54b87962332ca71 (2013-03-28)) sources|source_repositories/glibc]], run on coulomb.SCHWINGE. $ export LC_ALL=C @@ -1463,6 +1515,10 @@ Failures, mostly in order of appearance: 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 diff --git a/toolchain/logs b/toolchain/logs index 366196b0..4942a80c 160000 --- a/toolchain/logs +++ b/toolchain/logs @@ -1 +1 @@ -Subproject commit 366196b0ec8c8d5dd91ee7b71dcd05c76239bf30 +Subproject commit 4942a80ce51d06f8c536c19d7220269aba40c18e -- cgit v1.2.3