From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andi Kleen Subject: Re: [PATCH] compile with -funit-at-a-time option of gcc Date: 30 Jun 2005 11:12:11 +0200 Message-ID: References: <172e2cac785f4e158b35a6eea5d96fc7@cl.cam.ac.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: In-Reply-To: <172e2cac785f4e158b35a6eea5d96fc7@cl.cam.ac.uk> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: Ian.Pratt@cl.cam.ac.uk, xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Keir Fraser writes: > On 30 Jun 2005, at 08:21, Ian Pratt wrote: > > >> This patch makes xen compiled with gcc option > >> -funit-at-a-time if supported. This option is available for > >> gcc 3.4 and upward, which reduces the .text binary size considerably. > > > > I haven't come across this option before. What does it actually do? > > Considers whole file at a time when doing optimisation. It's the Basically it allows inlining even when a function is defined after the caller and makes the inliner more aggressive. Everything static with only one caller will be always inlined. > default on gcc4 with -O2 and above. We probably don;t want to enable > it before a general move to gcc4 as it does break stuff (albeit stuff > that was buggy/broken already ;-) ). Adding another skanky CFLAG that > will be defaulted anyway in future, to get the benefit of maybe subtly > breaking Xen, doesn;t sound like a big win to me. The main breakage that can usually happen with unit-at-a-time (short of broken inline asms) is that your stack frames grow too big because gcc before 4 is not very good at reusing the slots, but they add up with aggressive inlining. You can check for that with a simple objdump -S ... | grep sub.*[re]sp | sort ... and check for anything big enough that might overflow your kernel stack. The main kernel has a special check script for this too. -Andi