signal preemptors
Coming back to the subject of signal preemptors... Why do we need them at all? Why not just use the existing POSIX signal facilities? We install a signal handler, saving the old signal handler, check the faulting memory address inside the new signal handler, and relay the signal on to the saved signal handler if it doesn't match. Also, codesearch.debian.net shows that the only place signal preemptors are used is in the hurd source tree itself (no great surprise), and the four places that it's used there (libpager, libstore, libdiskfs, and exec) don't do anything else with SIGBUS or SIGSEGV, so we don't even have to worry about nested signal handlers, really. We can just catch the signals. Signal preemptors, as a non standard addition to the already complicated POSIX signal API, raise questions like, what happens when a signal is preempted while a debugger is attached? Does the debugger get the signal before the preemptor, or does the preemptor fire without waiting for the debugger? agape brent
Re: gdb handling of Mach exceptions
On Wed, Nov 23, 2016 at 10:03 PM, Brent W. Baccalawrote: > > Any comments? > Well, yes, actually. :-) gdb's hurd target has a poorly documented command "set noninvasive". I don't completely understand it, but... I'm starting to see the rational for an "invasive" debugging mode. "Invasive" means that we debug by wrapping Mach ports - the task port needs to be wrapped along with the exception ports. "Non-invasive" means that we rely on the C library in the program under test to provide some debugging support. No port wrapping is done. Breakpoints, for example, work by letting the program's message thread generate a SIGTRAP, which gets relayed to the proc server and is presented to the debugger in response to a wait() call. Non-invasive is more efficient, but invasive is more reliable. I'd code it myself, except that we've got the same old problem with detaching a process when its ports are wrapped. This shows, incidentally, that adding a system call trace facility to the kernel isn't a complete solution. We don't just want to trace these messages - we want to intercept them and only deliver them after a human being has had the chance to inspect them at a debugger prompt. agape brent
Re: C++ vs. glibc/Hurd/Mach headers
On Fri, Nov 25, 2016 at 1:46 AM, Thomas Schwingewrote: > Hi! > > Motivation for bringing this up again: GDB has recently switched from > using a C to a C++ compiler. GDB, for obvious reasons, needs to access > low-level Hurd/Mach interfaces. > > I've also had problems compiling hurd code using g++. In addition to what Thomas has described, the ports library is unusable with C++ because struct port_info has a member named "class". Also, the initializer syntax used in /usr/include/refcount.h is unusable with g++. For example: 209 const union _references op = 210 { .references = { .weak = ~0U, .hard = 1} }; generates a compiler error: sorry, unimplemented: non-trivial designated initializers not supported To reproduce both problems, just create a file containing the line #include and try to compile it with g++. It doesn't matter if you put it inside an extern "C" block, either. agape brent
Re: сигнализация и видеонаблюдение
установка и ремонт домофонов видеодомофонов и систем видеонаблюдения http://pulsarvideo.ru/
Hurd port for gcc go PATCH 19-23(23)
* src_libgo_runtime_netpoll.goc.diff: Fix restricted word bug. Rename variable errno to errno1. * src_libgo_go_os_os_test.go.diff: Allow EFBIG return code to big seeks. * src_libgo_go_syscall_syscall_gnu_test.go: New file: Define Type and Whence as 32bit in syscall.Flock_t * src_libgo_testsuite_gotest.diff: Remove comm option for ps -o. * add-gnu-to-libgo-headers.diff: Add gnu to +build entry in file headers included in the build. FIXME: Index: gcc-6-6.2.1-4.1/src/libgo/go/archive/tar/stat_atim.go === --- gcc-6-6.2.1-4.1.orig/src/libgo/go/archive/tar/stat_atim.go +++ gcc-6-6.2.1-4.1/src/libgo/go/archive/tar/stat_atim.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build linux dragonfly openbsd solaris +// +build linux dragonfly openbsd solaris gnu package tar Index: gcc-6-6.2.1-4.1/src/libgo/go/net/cgo_resnew.go === --- gcc-6-6.2.1-4.1.orig/src/libgo/go/net/cgo_resnew.go +++ gcc-6-6.2.1-4.1/src/libgo/go/net/cgo_resnew.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // +build cgo,!netgo -// +build darwin linux,!android netbsd solaris +// +build darwin linux,!android netbsd solaris gnu package net Index: gcc-6-6.2.1-4.1/src/libgo/go/net/cgo_socknew.go === --- gcc-6-6.2.1-4.1.orig/src/libgo/go/net/cgo_socknew.go +++ gcc-6-6.2.1-4.1/src/libgo/go/net/cgo_socknew.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // +build cgo,!netgo -// +build android linux solaris +// +build android linux solaris gnu package net Index: gcc-6-6.2.1-4.1/src/libgo/go/net/hook_cloexec.go === --- gcc-6-6.2.1-4.1.orig/src/libgo/go/net/hook_cloexec.go +++ gcc-6-6.2.1-4.1/src/libgo/go/net/hook_cloexec.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build freebsd linux +// +build freebsd linux gnu package net Index: gcc-6-6.2.1-4.1/src/libgo/go/net/main_unix_test.go === --- gcc-6-6.2.1-4.1.orig/src/libgo/go/net/main_unix_test.go +++ gcc-6-6.2.1-4.1/src/libgo/go/net/main_unix_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris +// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris gnu package net Index: gcc-6-6.2.1-4.1/src/libgo/go/net/sock_cloexec.go === --- gcc-6-6.2.1-4.1.orig/src/libgo/go/net/sock_cloexec.go +++ gcc-6-6.2.1-4.1/src/libgo/go/net/sock_cloexec.go @@ -5,7 +5,7 @@ // This file implements sysSocket and accept for platforms that // provide a fast path for setting SetNonblock and CloseOnExec. -// +build freebsd linux +// +build freebsd linux gnu package net Index: gcc-6-6.2.1-4.1/src/libgo/go/net/sockoptip_posix.go === --- gcc-6-6.2.1-4.1.orig/src/libgo/go/net/sockoptip_posix.go +++ gcc-6-6.2.1-4.1/src/libgo/go/net/sockoptip_posix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build darwin dragonfly freebsd linux netbsd openbsd windows +// +build darwin dragonfly freebsd linux netbsd openbsd windows gnu package net Index: gcc-6-6.2.1-4.1/src/libgo/go/syscall/exec_unix.go === --- gcc-6-6.2.1-4.1.orig/src/libgo/go/syscall/exec_unix.go +++ gcc-6-6.2.1-4.1/src/libgo/go/syscall/exec_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build darwin dragonfly freebsd linux netbsd openbsd solaris +// +build darwin dragonfly freebsd linux netbsd openbsd solaris gnu // Fork, exec, wait, etc. Index: gcc-6-6.2.1-4.1/src/libgo/runtime/netpoll_select.c === --- gcc-6-6.2.1-4.1.orig/src/libgo/runtime/netpoll_select.c +++ gcc-6-6.2.1-4.1/src/libgo/runtime/netpoll_select.c @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build solaris +// +build solaris gnu #include "config.h" Index: gcc-6-6.2.1-4.1/src/libgo/go/os/exec/lp_unix.go === --- gcc-6-6.2.1-4.1.orig/src/libgo/go/os/exec/lp_unix.go +++ gcc-6-6.2.1-4.1/src/libgo/go/os/exec/lp_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be
Hurd port for gcc go PATCH 1-4(23)
Hi, Attached are patches to enable gccgo to build properly on Debian GNU/Hurd on gcc-6 (6-6.2.1-5). The first three patches are Debian-specific: * debian_rules.defs.diff: Enables build of gccgo for GNU/Hurd Define patches for the generated series file: * debian_rules.patch.diff: Enables split-stack support. * debian_rules.patch.diff: Does not enable split-stack support. * src_gcc_config_i386_gnu.h.diff: Enable split-stack support The test suite results are as follows: Without split-stack support: === go Summary === # of expected passes7359 # of unexpected failures7 # of expected failures 1 # of untested testcases 10 # of unsupported tests 2 === libgo Summary === # of expected passes121 # of unexpected failures13 With split-stack support: === go Summary === # of expected passes7366 # of unexpected failures8 # of expected failures 1 # of untested testcases 6 # of unsupported tests 2 === libgo Summary === # of expected passes120 # of unexpected failures14 All failing go tests and more than half of the libgo tests are runtime errors due to exception handling not working as expected: Aborted runtime_sighandler ... fatal error: unexpected signal during runtime execution panic: runtime error: invalid memory address or nil pointer dereference The above problems are probably due to some remaining issues in gnumach/hurd/glibc to be solved. According to Samuel Thibault these problems can be handled late when the patches are accepted upstream or in Debian gcc. Another more annoying gnumch/hurd/glibc bug is that the built program go (go-6 in Debian) gets killed when executed from the shell vi path, but not when issued directly: /usr/bin/go-6 works fine. go-6 Segmentation fault (core dumped) gdb /usr/bin/go-6 -c ./core warning: Unexpected size of section `.reg2/16883' in core file. Core was generated by `go-6'. Program terminated with signal SIGSEGV, Segmentation fault. warning: Unexpected size of section `.reg2/16883' in core file. #0 0x01e854ae in ?? () (gdb) bt #0 0x01e854ae in ?? () #1 0x in ?? () Nevertheless, it seems like not so much is left for gccgo working properly on GNU/Hurd. Thanks! --- a/debian/rules.defs 2014-01-07 11:10:44.0 +0100 +++ b/debian/rules.defs 2014-01-07 11:23:47.0 +0100 @@ -933,7 +933,7 @@ ifeq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick natty oneiric)) go_no_cpus := $(filter-out arm, $(go_no_cpus)) endif -go_no_systems := gnu kfreebsd-gnu +go_no_systems := kfreebsd ifneq ($(with_base_only),yes) ifneq ($(separate_lang),yes) @@ -943,7 +943,7 @@ ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(go_no_cpus))) with_go := disabled for cpu $(DEB_TARGET_ARCH_CPU) endif -ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(go_no_systems))) +ifneq (,$(findstring $(DEB_TARGET_ARCH_OS),$(go_no_systems))) with_go := disabled for system $(DEB_TARGET_GNU_SYSTEM) endif ifeq ($(go_no_cross)-$(DEB_CROSS),yes-yes) --- a/debian/rules.patch.orig 2016-11-12 16:50:46.0 +0100 +++ b/debian/rules.patch 2016-11-12 16:55:24.0 +0100 @@ -276,6 +276,27 @@ ifeq ($(DEB_TARGET_ARCH_OS),hurd) debian_patches += hurd-changes + debian_patches += \ + src_gcc_config_i386_gnu.h \ + src_libgo_configure.ac \ + src_libgo_go_net_sendfile_gnu.go \ + src_libgo_go_net_sock_gnu.go \ + src_libgo_go_net_sockopt_gnu.go \ + src_libgo_go_net_sockoptip_gnu.go \ + src_libgo_go_syscall_libcall_gnu_386.go \ + src_libgo_go_syscall_libcall_gnu.go \ + src_libgo_go_syscall_libcall_posix-1.go \ + src_libgo_go_syscall_socket_gnu.go \ + src_libgo_go_syscall_wait.c \ + src_libgo_Makefile.am \ + src_libgo_Makefile.in \ + src_libgo_mksysinfo.sh \ + src_libgo_runtime_getncpu-gnu.c \ + src_libgo_runtime_netpoll.goc \ + src_libgo_go_os_os_test.go \ + src_libgo_go_syscall_syscall_gnu_test.go \ + src_libgo_testsuite_gotest \ + add-gnu-to-libgo-headers endif debian_patches += gcc-ice-dump --- a/debian/rules.patch.orig 2016-11-12 16:50:46.0 +0100 +++ b/debian/rules.patch 2016-11-12 16:55:24.0 +0100 @@ -276,6 +276,26 @@ ifeq ($(DEB_TARGET_ARCH_OS),hurd) debian_patches += hurd-changes + debian_patches += \ + src_libgo_configure.ac \ + src_libgo_go_net_sendfile_gnu.go \ + src_libgo_go_net_sock_gnu.go \ + src_libgo_go_net_sockopt_gnu.go \ + src_libgo_go_net_sockoptip_gnu.go \ + src_libgo_go_syscall_libcall_gnu_386.go \ +