From owner-freebsd-hackers@FreeBSD.ORG Mon Jul 5 16:55:13 2010 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 CB4CA1065674; Mon, 5 Jul 2010 16:55:13 +0000 (UTC) (envelope-from avg@freebsd.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 3D17F8FC15; Mon, 5 Jul 2010 16:55:11 +0000 (UTC) Received: from odyssey.starpoint.kiev.ua (alpha-e.starpoint.kiev.ua [212.40.38.101]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id TAA01467; Mon, 05 Jul 2010 19:55:10 +0300 (EEST) (envelope-from avg@freebsd.org) Message-ID: <4C320E6E.4040007@freebsd.org> Date: Mon, 05 Jul 2010 19:55:10 +0300 From: Andriy Gapon User-Agent: Thunderbird 2.0.0.24 (X11/20100517) MIME-Version: 1.0 To: "Bjoern A. Zeeb" References: <4C246CD0.3020606@freebsd.org> <20100702082754.S14969@maildrop.int.zabbadoz.net> In-Reply-To: <20100702082754.S14969@maildrop.int.zabbadoz.net> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: freebsd-hackers@freebsd.org, Konstantin Belousov , Navdeep Parhar , Peter Wemm Subject: Re: elf obj load: skip zero-sized sections early 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: Mon, 05 Jul 2010 16:55:14 -0000 on 02/07/2010 11:29 Bjoern A. Zeeb said the following: > On Fri, 25 Jun 2010, Andriy Gapon wrote: > > Hey, > >> Proposed patch skips zero sized sections without going into trouble of >> allocating section entry (progtab), doing zero-sized memory allocs and >> copies. >> I observe that sometimes zero-sized set_pcpu sections are produced in >> module >> objects, maybe when a module doesn't create any per cpu data of its >> one, but >> references external pcpu data. Not sure. [snip] >> This work is based on np@'s investigation and original patch: >> http://lists.freebsd.org/pipermail/freebsd-hackers/2009-November/030093.html >> > > Have you guys figured this out already? By 'this' - do you mean why that zero-sized section is produced at all? Does it really matter why that happens? I stated my guess already. Now I see that it is enough to simply include sys/pcpu.h for this to happen. Inline assembly at the start of the said header unconditionally creates the section. If DPCPU_DEFINE is never used in a module, then set_pcpu section remains empty. Neither compiler nor linker have any reason to drop empty sections in the build process for amd64 modules. I am not sure if ".section set_pcpu" assembly can be made conditional or moved some place else, so that the section is only created when DPCPU_DEFINE is actually used. -- Andriy Gapon