Re: Correct goarch.sh settings for gccgo on hppa?

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

 



Thank you both for the suggestions.  I tried the following values:

diff --git a/libgo/goarch.sh b/libgo/goarch.sh
index 977f318b3..e0d6a3ad8 100755
--- a/libgo/goarch.sh
+++ b/libgo/goarch.sh
@@ -88,6 +88,16 @@ case $goarch in
                ;;
        esac
        ;;
+    hppa)
+       bigendian=true
+       defaultphyspagesize=4096
+       family=HPPA
+       int64align=8
+       minframesize=64
+       pcquantum=4
+       ptrsize=4
+       stackalign=64
+       ;;
     ia64)
        family=IA64
        cachelinesize=128

But unfortunately got the same result. I wonder if there is something else missing?

Ian, if you have the time, I have a machine you can use to look at this.

-------- Original Message --------
Subject: Re: Correct goarch.sh settings for gccgo on hppa?
Date: 2022-11-25 13:45
From: John David Anglin <dave.anglin@xxxxxxxx>
To: matoro <matoro_mailinglist_kernel@xxxxxxxxx>, linux-parisc@xxxxxxxxxxxxxxx

I added some comments below.

Some years ago we hacked on gcc to add the go language but we didn't get it working.

Dave

On 2022-11-25 1:00 p.m., matoro wrote:
Hi, I was recommended to ask here but I'm trying to enable gccgo to run on parisc, however I am not sure what the proper values should be for the arch configuration settings.  The description is as follows:

# Code in Makefile.am will invoke this script with two arguments.
# The first is a GOARCH value.  The second is a keyword.
# The script will print the value of that keyword for that GOARCH.
# Keywords:
# - bigendian: true or false
# - cachelinesize: the cache line size in bytes
#    (for performance only; it's not essential to get this right)
# - defaultphyspagesize: the default physical page size in bytes
#    (not currently used, but maybe some day)
# - family: the processor family, from ALLGOARCHFAMILY in configure.ac
# - int64align: alignment of int64 type in bytes
# - maxalign: maximum alignment of values of Go types in bytes
# - minframesize: size of smallest possible function frame in bytes
#    (not currently used, may never be used)
# - pcquantum: minimum size of a single instruction in bytes
# - ptrsize: size of a pointer in bytes

There is also an undocumented "stackalign" variable.

# Default values
bigendian=false
cachelinesize=64
Depends on processor.  Max is 128 on machines with PA8800/PA8900 processors.
defaultphyspagesize=4096
family=unknown
int64align=8
maxalign=8
minframesize=0
pcquantum=1
ptrsize=8
stackalign=8

This was what I first attempted to set, according to a brief skim of the ISA manual:

diff --git a/libgo/goarch.sh b/libgo/goarch.sh
index 977f318b3..ed40815ac 100755
--- a/libgo/goarch.sh
+++ b/libgo/goarch.sh
@@ -88,6 +88,16 @@ case $goarch in
         ;;
     esac
     ;;
+    hppa)
+    family=HPPA
+    bigendian=true
+    defaultphyspagesize=4096
+    minframesize=16
I think this should be 0 when frame isn't needed.  In 32-bit runtime, minimum frame size is 64
when a frame is allocated.
+ int64align=8
+    stackalign=4
This probably should be 16.  It needs to be at least 8 for double and int64_t.  It was set to 16 for ldcw semaphores. This was needed for the original pthread implementation. Malloc alignment is 16.  However, this causes some issues with over alignment in some package builds.
+ pcquantum=4
+    ptrsize=4
+    ;;
     ia64)
     family=IA64
     cachelinesize=128

However this was clearly wrong, because while it did build, the resulting binary immediately segfaults.

unexpected fault address 0x33d8effc
fatal error: fault
[signal SIGSEGV: segmentation violation code=0x1 addr=0x33d8effc pc=0xf58f4284]
One would need to debug to find the cause...

goroutine 4 [running]:
runtime.dopanic__m
    /var/tmp/portage/sys-devel/gcc-12.2.1_p20221008/work/gcc-12-20221008/libgo/go/runtime/panic.go:1207
runtime.fatalthrow
    /var/tmp/portage/sys-devel/gcc-12.2.1_p20221008/work/gcc-12-20221008/libgo/go/runtime/panic.go:1073
runtime.throw
    /var/tmp/portage/sys-devel/gcc-12.2.1_p20221008/work/gcc-12-20221008/libgo/go/runtime/panic.go:1044
runtime.sigpanic
    /var/tmp/portage/sys-devel/gcc-12.2.1_p20221008/work/gcc-12-20221008/libgo/go/runtime/signal_unix.go:714
net_1http.connectMethod.scheme
    /var/tmp/portage/sys-devel/gcc-12.2.1_p20221008/work/gcc-12-20221008/libgo/go/net/http/transport.go:1829
net_1http.Transport.dialConn
    /var/tmp/portage/sys-devel/gcc-12.2.1_p20221008/work/gcc-12-20221008/libgo/go/net/http/transport.go:1612
net_1http.Transport.dialConnFor
    /var/tmp/portage/sys-devel/gcc-12.2.1_p20221008/work/gcc-12-20221008/libgo/go/net/http/transport.go:1449
runtime.kickoff
    /var/tmp/portage/sys-devel/gcc-12.2.1_p20221008/work/gcc-12-20221008/libgo/go/runtime/proc.go:1316
created by net_1http.Transport.queueForDial
    /var/tmp/portage/sys-devel/gcc-12.2.1_p20221008/work/gcc-12-20221008/libgo/go/net/http/transport.go:1418 +0x37b


Is there anybody who might be able to advise on what these values should be for parisc?




[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux