From patchwork Mon Jul 25 15:04:03 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rainer Orth X-Patchwork-Id: 106696 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 E282EB6F8A for ; Tue, 26 Jul 2011 01:04:24 +1000 (EST) Received: (qmail 2912 invoked by alias); 25 Jul 2011 15:04:22 -0000 Received: (qmail 2901 invoked by uid 22791); 25 Jul 2011 15:04:21 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from snape.CeBiTec.Uni-Bielefeld.DE (HELO smtp-relay.CeBiTec.Uni-Bielefeld.DE) (129.70.160.84) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 25 Jul 2011 15:04:07 +0000 Received: from localhost (localhost.CeBiTec.Uni-Bielefeld.DE [127.0.0.1]) by smtp-relay.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTP id 44F9E9F7; Mon, 25 Jul 2011 17:04:06 +0200 (CEST) Received: from smtp-relay.CeBiTec.Uni-Bielefeld.DE ([127.0.0.1]) by localhost (malfoy.CeBiTec.Uni-Bielefeld.DE [127.0.0.1]) (amavisd-new, port 10024) with LMTP id WaZYr1mAsz9L; Mon, 25 Jul 2011 17:04:03 +0200 (CEST) Received: from manam.CeBiTec.Uni-Bielefeld.DE (manam.CeBiTec.Uni-Bielefeld.DE [129.70.161.120]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp-relay.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTPS id C39529F6; Mon, 25 Jul 2011 17:04:03 +0200 (CEST) Received: (from ro@localhost) by manam.CeBiTec.Uni-Bielefeld.DE (8.14.5+Sun/8.14.5/Submit) id p6PF43qs004838; Mon, 25 Jul 2011 17:04:03 +0200 (MEST) From: Rainer Orth To: gcc-patches@gcc.gnu.org Cc: Jakub Jelinek Subject: Fix libgomp alignment errors on Tru64 UNIX (PR libgomp/45351) Date: Mon, 25 Jul 2011 17:04:03 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (usg-unix-v) 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 As discussed in the PR, we need to force int alignment for sem_t on Tru64 UNIX to work around a bug in the native librt. The following patch does this. Tested by rebuilding libgomp, make check is still running. No failures or unaligned access errors so for. Ok for mainline if it passes? Thanks. Rainer 2011-07-22 Rainer Orth PR libgomp/45351 * config/osf/sem.h: New file. * configure.tgt (alpha*-dec-osf*): Prepend osf to config_path. diff --git a/libgomp/config/osf/sem.h b/libgomp/config/osf/sem.h new file mode 100644 --- /dev/null +++ b/libgomp/config/osf/sem.h @@ -0,0 +1,53 @@ +/* Copyright (C) 2011 Free Software Foundation, Inc. + + This file is part of the GNU OpenMP Library (libgomp). + + Libgomp is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + . */ + +/* This is a variant of config/posix/sem.h for Tru64 UNIX. The librt + sem_init implementation assumes int (4-byte) alignment for sem_t, while + the type only requires short (2-byte) alignment. This mismatch causes + lots of unaligned access warnings from the kernel, so enforce that + alignment. */ + +#ifndef GOMP_SEM_H +#define GOMP_SEM_H 1 + +#include + +typedef sem_t gomp_sem_t __attribute__((aligned (__alignof__ (int)))); + +static inline void gomp_sem_init (gomp_sem_t *sem, int value) +{ + sem_init (sem, 0, value); +} + +extern void gomp_sem_wait (gomp_sem_t *sem); + +static inline void gomp_sem_post (gomp_sem_t *sem) +{ + sem_post (sem); +} + +static inline void gomp_sem_destroy (gomp_sem_t *sem) +{ + sem_destroy (sem); +} +#endif /* GOMP_SEM_H */ diff --git a/libgomp/configure.tgt b/libgomp/configure.tgt --- a/libgomp/configure.tgt +++ b/libgomp/configure.tgt @@ -129,6 +129,11 @@ case "${target}" in XLDFLAGS="${XLDFLAGS} -lpthread" ;; + alpha*-dec-osf*) + # Use Tru64 UNIX-specific sem.h version. + config_path="osf posix" + ;; + mips-sgi-irix6*) # Need to link with -lpthread so libgomp.so is self-contained. XLDFLAGS="${XLDFLAGS} -lpthread"