[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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 passes            7359
# of unexpected failures        7
# of expected failures          1
# of untested testcases         10
# of unsupported tests          2
                === libgo Summary ===
# of expected passes            121
# of unexpected failures        13

With split-stack support:

                === go Summary ===
# of expected passes            7366
# of unexpected failures        8
# of expected failures          1
# of untested testcases         6
# of unsupported tests          2
                === libgo Summary ===
# of expected passes            120
# of unexpected failures        14

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  0x00000000 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.000000000 +0100
+++ b/debian/rules.defs	2014-01-07 11:23:47.000000000 +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.000000000 +0100
+++ b/debian/rules.patch	2016-11-12 16:55:24.000000000 +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.000000000 +0100
+++ b/debian/rules.patch	2016-11-12 16:55:24.000000000 +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 \
+                 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
Index: gcc-6-6.2.1-4.1/src/gcc/config/i386/gnu.h
===================================================================
--- gcc-6-6.2.1-4.1.orig/src/gcc/config/i386/gnu.h
+++ gcc-6-6.2.1-4.1/src/gcc/config/i386/gnu.h
@@ -37,11 +37,14 @@ along with GCC.  If not, see <http://www
 
 #ifdef TARGET_LIBC_PROVIDES_SSP
 
-/* Not supported yet.  */
-# undef TARGET_THREAD_SSP_OFFSET
-
-/* Not supported yet.  */
-# undef TARGET_CAN_SPLIT_STACK
-# undef TARGET_THREAD_SPLIT_STACK_OFFSET
+/* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
+#define TARGET_THREAD_SSP_OFFSET        0x14
 
+/* We only build the -fsplit-stack support in libgcc if the
+   assembler has full support for the CFI directives.  */
+#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
+#define TARGET_CAN_SPLIT_STACK
+#endif
+/* We steal the last transactional memory word.  */
+#define TARGET_THREAD_SPLIT_STACK_OFFSET 0x30
 #endif

Reply to: