From owner-freebsd-hackers@FreeBSD.ORG Wed Jun 1 00:41:56 2011 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E30A1106566B; Wed, 1 Jun 2011 00:41:56 +0000 (UTC) (envelope-from nwhitehorn@freebsd.org) Received: from agogare.doit.wisc.edu (agogare.doit.wisc.edu [144.92.197.211]) by mx1.freebsd.org (Postfix) with ESMTP id B62F98FC0A; Wed, 1 Jun 2011 00:41:56 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII; format=flowed Received: from avs-daemon.smtpauth2.wiscmail.wisc.edu by smtpauth2.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) id <0LM30060035VNV00@smtpauth2.wiscmail.wisc.edu>; Tue, 31 May 2011 18:41:55 -0500 (CDT) Received: from comporellon.tachypleus.net (adsl-71-150-248-94.dsl.mdsnwi.sbcglobal.net [71.150.248.94]) by smtpauth2.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) with ESMTPSA id <0LM3000TJ35U5B10@smtpauth2.wiscmail.wisc.edu>; Tue, 31 May 2011 18:41:54 -0500 (CDT) Date: Tue, 31 May 2011 18:41:53 -0500 From: Nathan Whitehorn In-reply-to: To: freebsd-hackers@freebsd.org, mdf@FreeBSD.org Message-id: <4DE57CC1.6000105@freebsd.org> X-Spam-Report: AuthenticatedSender=yes, SenderIP=71.150.248.94 X-Spam-PmxInfo: Server=avs-14, Version=5.6.0.2009776, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2011.5.31.233322, SenderIP=71.150.248.94 References: User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.17) Gecko/20110429 Thunderbird/3.1.10 Cc: Subject: Re: sizeof(function pointer) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jun 2011 00:41:57 -0000 On 05/31/11 18:18, Warner Losh wrote: > On May 31, 2011, at 5:07 PM, mdf@freebsd.org wrote: > >> I am looking into potentially MFC'ing r212367 and related, that adds >> drains to sbufs. The reason for MFC is that several pieces of new >> code in CURRENT are using the drain functionality and it would make >> MFCing those changes much easier. >> >> The problem is that r212367 added a pointer to a drain function in the >> sbuf (it replaced a pointer to void). The C standard doesn't >> guarantee that a void * and a function pointer have the same size, >> though its true on amd64, i386 and I believe PPC. What I'm wondering >> is, though not guaranteed by the standard, is it *practically* true >> that sizeof(void *) == sizeof(int(*)(void)), such that an MFC won't >> break binary compatibility for any supported architecture? (The >> standard does guarantee, though not in words, that all function >> pointers have the same size, since it guarantees that pointers to >> functions can be cast to other pointers to functions and back without >> changing the value). >> >> Another possibility is to malloc a blob that is sizeof(int(*)(void)) >> and store that in a renamed s_unused; this is a bit messier but >> guaranteed to work. I'd just rather the code be an MCF instead of a >> partial re-write. > It is the same on MIPS too for all three ABIs that we support (and all ABIs that I know about). It is true on ARM as well. > > Usually it is different only on segmented architectures like 16-bit x86. It is also true on ARM, PPC, PPC64, and ia64, which I just tested. I think you're safe. -Nathan