From patchwork Sun Apr 3 17:46:27 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Uros Bizjak X-Patchwork-Id: 89541 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 423AFB6F85 for ; Mon, 4 Apr 2011 03:46:36 +1000 (EST) Received: (qmail 10353 invoked by alias); 3 Apr 2011 17:46:34 -0000 Received: (qmail 10345 invoked by uid 22791); 3 Apr 2011 17:46:33 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, TW_ZJ X-Spam-Check-By: sourceware.org Received: from mail-pz0-f47.google.com (HELO mail-pz0-f47.google.com) (209.85.210.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 03 Apr 2011 17:46:28 +0000 Received: by pzk35 with SMTP id 35so1946728pzk.20 for ; Sun, 03 Apr 2011 10:46:27 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.144.20 with SMTP id r20mr5523003wfd.76.1301852787609; Sun, 03 Apr 2011 10:46:27 -0700 (PDT) Received: by 10.143.165.9 with HTTP; Sun, 3 Apr 2011 10:46:27 -0700 (PDT) In-Reply-To: References: Date: Sun, 3 Apr 2011 19:46:27 +0200 Message-ID: Subject: Re: [RFC PATCH, go]: Port to ALPHA arch From: Uros Bizjak To: Ian Lance Taylor Cc: gcc-patches@gcc.gnu.org, gofrontend-dev@googlegroups.com Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org On Sat, Apr 2, 2011 at 1:09 AM, Ian Lance Taylor wrote: > On Wed, Mar 30, 2011 at 12:58 PM, Uros Bizjak wrote: >> >> Attached ports go to ALPHA architecture. > > Thanks! > > Committed. > > >> b) alpha doesn't define "struct user_regs_struct" from which "type >> PtraceRegs" is derived. I have manually created PtraceRegs from >> pt_regs structure and patched generated libgo/sysinfo.go in build >> directory after the build broke. However - the comment from sys/user.h >> says that this file is for GDB and GDB only... > > libgo uses it to support ptrace, which in effect is the same as what > gdb does.  If mksysinfo.sh is unable to provide any definition for the > structure, then the choices are either to patch up mksysinfo.sh so > that it works, or to simply define the structure in > libgo/syscalls/syscall_linux_alpha.go.  it is unlikely to change so > the latter seems acceptable if patching mksysinfo is too hard. Attached patch implements this suggestion and builds libgo without problems. >> c) some weird issue with double definition of "const _SOCK_NONBLOCK" >> in gen-sysinfo.go and consequently sysinfo.go. > > The code in gcc/godump.c uses a hash table to keep this from > happening; I'm not sure why that is not working in this case.  Is > SOCK_NONBLOCK both a #define macro and an enum value? Yes, SOCK_NONBLOCK is defined in bits/sock.h as --cut here-- enum __socket_type { #undef SOCK_NONBLOCK SOCK_NONBLOCK = 0x40000000 /* Atomically mark descriptor(s) as non-blocking. */ #define SOCK_NONBLOCK SOCK_NONBLOCK }; /* Get socket manipulation related informations from kernel headers. */ #include "asm/socket.h" --cut here-- asm/socket.h: --cut here-- /* O_NONBLOCK clashes with the bits used for socket types. Therefore we * have to define SOCK_NONBLOCK to a different value here. */ #define SOCK_NONBLOCK 0x40000000 --cut here-- Processing bits/socket.h with -fdumo-go-spec= , we get: // unknowndefine SOCK_NONBLOCK SOCK_NONBLOCK const _SOCK_NONBLOCK = 0x40000000 const _SOCK_NONBLOCK = 1073741824 > >> The test results from "make -k check" in libgo directory are quite encouraging: > > Yes. > >> FAIL: cmath >> panic: runtime error: integer divide by zero or floating point error > > This is peculiar--it looks like there is something systematically > causing a division by zero.  I wonder what it could be. I will try to analyse these failures. Perhaps these failures are due to the fact that alpha needs -mieee to handle NaN and Inf values (a FPE is generated otherwise). Thanks, Uros. Index: libgo/syscalls/syscall_linux_alpha.go =================================================================== --- libgo/syscalls/syscall_linux_alpha.go (revision 171911) +++ libgo/syscalls/syscall_linux_alpha.go (working copy) @@ -6,6 +6,38 @@ package syscall +type PtraceRegs struct { + R0 uint64 + R1 uint64 + R2 uint64 + R3 uint64 + R4 uint64 + R5 uint64 + R6 uint64 + R7 uint64 + R8 uint64 + R19 uint64 + R20 uint64 + R21 uint64 + R22 uint64 + R23 uint64 + R24 uint64 + R25 uint64 + R26 uint64 + R27 uint64 + R28 uint64 + Hae uint64 + Trap_a0 uint64 + Trap_a1 uint64 + Trap_a2 uint64 + Ps uint64 + Pc uint64 + Gp uint64 + R16 uint64 + R17 uint64 + R18 uint64 +} + func (r *PtraceRegs) PC() uint64 { return r.Pc; }