From patchwork Thu Jan 26 20:24:11 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Lance Taylor X-Patchwork-Id: 138030 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 954DCB6F67 for ; Fri, 27 Jan 2012 07:24:37 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1328214278; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:Received:From:To:Cc:Subject:References:Date:In-Reply-To: Message-ID:User-Agent:MIME-Version:Content-Type:Mailing-List: Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:Sender:Delivered-To; bh=gk2TAyOvPRJI9yNlKiamm938+PY=; b=p2A9Ea/9oc+w598NgaX12nqiyfezXUZRPbV05kC8SvM5KEX6O1XB1aZdnOMNav ccIxnGXhVvcYLmnBcUgHuPHSNwbO7d+7j/ELNam3dFimIGnRV5oO2di8JgOBFrWR 1F7KXk7xnpXZ9Ax7gpineT/z2sYtgJUcBmaQ225hBO0Z0= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Received:Received:From:To:Cc:Subject:References:Date:In-Reply-To:Message-ID:User-Agent:MIME-Version:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=Q7dBeWKU29THgZdiUKxUJrETyJtWHs7n9EuTK6ia2MdG5QpwJO3SIKVlUNEaaP 7dSvAiknVcEyKaRrPSglNlA1M4mJVwmPEe8O7pYETxlA5nici43Q5TsrjDHRX07q 3UOdunssDpJTi6bvN7iuBFJoRmd6Pit6PJMSPVaLLsXUY=; Received: (qmail 9420 invoked by alias); 26 Jan 2012 20:24:31 -0000 Received: (qmail 9407 invoked by uid 22791); 26 Jan 2012 20:24:29 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_LOW, TW_MK, T_RP_MATCHES_RCVD, T_TVD_MIME_NO_HEADERS X-Spam-Check-By: sourceware.org Received: from mail-pw0-f47.google.com (HELO mail-pw0-f47.google.com) (209.85.160.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 26 Jan 2012 20:24:15 +0000 Received: by pbaa13 with SMTP id a13so938878pba.20 for ; Thu, 26 Jan 2012 12:24:14 -0800 (PST) Received: by 10.68.115.195 with SMTP id jq3mr7951077pbb.34.1327609454786; Thu, 26 Jan 2012 12:24:14 -0800 (PST) Received: by 10.68.115.195 with SMTP id jq3mr7951048pbb.34.1327609454632; Thu, 26 Jan 2012 12:24:14 -0800 (PST) Received: from coign.google.com ([216.239.45.130]) by mx.google.com with ESMTPS id o7sm13889701pbq.8.2012.01.26.12.24.12 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 26 Jan 2012 12:24:13 -0800 (PST) From: Ian Lance Taylor To: Rainer Orth Cc: gcc-patches@gcc.gnu.org, gofrontend-dev@googlegroups.com Subject: Re: libgo patch committed: Update to weekly.2011-12-22 References: Date: Thu, 26 Jan 2012 12:24:11 -0800 In-Reply-To: (Rainer Orth's message of "Wed, 18 Jan 2012 17:54:20 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) MIME-Version: 1.0 X-IsSubscribed: yes 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 Rainer Orth writes: > Ian Lance Taylor writes: > >>> This also broke bootstrap on x86_64-unknown-linux-gnu (CentOS 5.5): >>> >>> /vol/gcc/src/hg/trunk/local/libgo/go/net/fd_linux.go:40:46: error: reference to undefined identifier 'syscall.EPOLL_CLOEXEC' >> >> Thanks. Fixed like so. Bootstrapped on x86_64-unknown-linux-gnu. >> Committed to mainline. > > Thanks. Unfortunately, this is not enough: while the build finishes > now, all tests fail with > > /var/gcc/regression/trunk/2.6.18-gcc-gas-gld/build/x86_64-unknown-linux-gnu/./libgo/.libs/libgo.so: undefined reference to `epoll_create1' > collect2: error: ld returned 1 exit status Fixed with the appended patch, which also gathers up all the possibly missing functions that I noticed. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu, which proves little as the system I tested on has all these functions anyhow. Committed to mainline. Thanks for the bug report. Ian diff -r 9013911dbab2 libgo/Makefile.am --- a/libgo/Makefile.am Wed Jan 25 21:42:35 2012 -0800 +++ b/libgo/Makefile.am Thu Jan 26 12:15:48 2012 -0800 @@ -449,6 +449,7 @@ runtime/go-now.c \ runtime/go-new-map.c \ runtime/go-new.c \ + runtime/go-nosys.c \ runtime/go-panic.c \ runtime/go-print.c \ runtime/go-recover.c \ diff -r 9013911dbab2 libgo/configure.ac --- a/libgo/configure.ac Wed Jan 25 21:42:35 2012 -0800 +++ b/libgo/configure.ac Thu Jan 26 12:15:48 2012 -0800 @@ -33,6 +33,8 @@ AM_MAINTAINER_MODE +AC_INCLUDES_DEFAULT + AC_PROG_LD AC_PROG_RANLIB AC_CHECK_TOOL(OBJCOPY, objcopy, missing-objcopy) @@ -465,6 +467,9 @@ AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes) AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes) +AC_CHECK_FUNCS(epoll_create1 faccessat fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_rm_watch mkdirat mknodat openat renameat splice tee unlinkat unshare) +AC_CHECK_TYPES([loff_t]) + CFLAGS_hold="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS_hold="$LIBS" @@ -519,7 +524,7 @@ CFLAGS_hold=$CFLAGS CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" -AC_CHECK_TYPES(off64_t) +AC_CHECK_TYPES([off64_t]) CFLAGS=$CFLAGS_hold dnl Work out the size of the epoll_events struct on GNU/Linux. diff -r 9013911dbab2 libgo/runtime/go-nosys.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgo/runtime/go-nosys.c Thu Jan 26 12:15:48 2012 -0800 @@ -0,0 +1,192 @@ +/* go-nosys.c -- functions missing from system. + + Copyright 2012 The Go Authors. All rights reserved. + Use of this source code is governed by a BSD-style + license that can be found in the LICENSE file. */ + +/* This file exists to provide definitions for functions that are + missing from libc, according to the configure script. This permits + the Go syscall package to not worry about whether the functions + exist or not. */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include + +#ifndef HAVE_OFF64_T +typedef signed int off64_t __attribute__ ((mode (DI))); +#endif + +#ifndef HAVE_LOFF_T +typedef off64_t loff_t; +#endif + +#ifndef HAVE_EPOLL_CREATE1 +int +epoll_create1 (int flags __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_FACCESSAT +int +faccessat (int fd __attribute__ ((unused)), + const char *pathname __attribute__ ((unused)), + int mode __attribute__ ((unused)), + int flags __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_FCHMODAT +int +fchmodat (int dirfd __attribute__ ((unused)), + const char *pathname __attribute__ ((unused)), + mode_t mode __attribute__ ((unused)), + int flags __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_FCHOWNAT +int +fchownat (int dirfd __attribute__ ((unused)), + const char *pathname __attribute__ ((unused)), + uid_t owner __attribute__ ((unused)), + gid_t group __attribute__ ((unused)), + int flags __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_FUTIMESAT +int +futimesat (int dirfd __attribute__ ((unused)), + const char *pathname __attribute__ ((unused)), + const struct timeval times[2] __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_INOTIFY_ADD_WATCH +int +inotify_add_watch (int fd __attribute__ ((unused)), + const char* pathname __attribute__ ((unused)), + uint32_t mask __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_INOTIFY_INIT +int +inotify_init (void) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_INOTIFY_RM_WATCH +int +inotify_rm_watch (int fd __attribute__ ((unused)), + uint32_t wd __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_MKDIRAT +int +mkdirat (int dirfd __attribute__ ((unused)), + const char *pathname __attribute__ ((unused)), + mode_t mode __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_MKNODAT +int +mknodat (int dirfd __attribute__ ((unused)), + const char *pathname __attribute__ ((unused)), + mode_t mode __attribute__ ((unused)), + dev_t dev __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_OPENAT +int +openat (int dirfd __attribute__ ((unused)), + const char *pathname __attribute__ ((unused)), + int oflag __attribute__ ((unused)), + ...) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_RENAMEAT +int +renameat (int olddirfd __attribute__ ((unused)), + const char *oldpath __attribute__ ((unused)), + int newdirfd __attribute__ ((unused)), + const char *newpath __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_SPLICE +int +splice (int fd __attribute__ ((unused)), + loff_t *off_in __attribute__ ((unused)), + int fd_out __attribute__ ((unused)), + loff_t *off_out __attribute__ ((unused)), + size_t len __attribute__ ((unused)), + unsigned int flags __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_TEE +int +tee (int fd_in __attribute__ ((unused)), + int fd_out __attribute__ ((unused)), + size_t len __attribute__ ((unused)), + unsigned int flags __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_UNLINKAT +int +unlinkat (int dirfd __attribute__ ((unused)), + const char *pathname __attribute__ ((unused)), + int flags __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif + +#ifndef HAVE_UNSHARE +int +unshare (int flags __attribute__ ((unused))) +{ + return ENOSYS; +} +#endif