From mboxrd@z Thu Jan 1 00:00:00 1970 From: Denys Vlasenko Subject: Re: [PATCH 4/5] aic7xxx: teach aicasm to not emit unused debug code/data Date: Mon, 28 Apr 2008 10:25:22 +0200 Message-ID: <200804281025.22724.vda.linux@googlemail.com> References: <200804250432.16943.vda.linux@googlemail.com> <200804260242.45192.vda.linux@googlemail.com> <48157A34.1080600@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Return-path: Received: from fg-out-1718.google.com ([72.14.220.157]:24333 "EHLO fg-out-1718.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1762149AbYD1I0T (ORCPT ); Mon, 28 Apr 2008 04:26:19 -0400 Received: by fg-out-1718.google.com with SMTP id l27so4849582fgb.17 for ; Mon, 28 Apr 2008 01:26:17 -0700 (PDT) In-Reply-To: <48157A34.1080600@suse.de> Content-Disposition: inline Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: Hannes Reinecke Cc: linux-scsi@vger.kernel.org On Monday 28 April 2008 09:18, Hannes Reinecke wrote: > >> I would prefer this: Add a 'count' variable to each symbol > >> which gets increased every time the symbol is referenced. > >> And then modify the register definition to include counts > >> for symbols which are referenced from the source code only > >> and not from the sequencer code. > > > > To be honest, I don't understand how your patch achieves it. > > I am not familiar enough with the way aicasm machinery works. > > Ach, that's just straight lex/yacc stuff :-) > No, seriously, it's not that hard to understand. > Basically aicasm builds a list of all used symbols, then > builds a reference table on to of that list whenever a > symbol is referenced in the actual code, and then does > some cleanup etc. to be able to put out proper sequencer > code. > > So the trick here is that we can add a 'count' field to > the underlying symbol table, which will be incremented > everytime this symbol is referenced by the sequencer code. > Nice and clean. > > In theory. > > >> This will give us an automatic usage count for the symbols > >> with only minimal hand-crafting. > > > > I tested your patches atop my patches 1,2,3 versus my patches > > 1...5, and versus original scsi-misc-2.6-2008_04_15. > > They build successfully, although they result in bigger code: > > > [ .. ] > > > > As compared to my patches there are more than 20 kb > > of unused code. My patches can be improved too. > > "make namespacecheck" shows unused functions' names. > > > Yes, I know. There is a snag to the above reasoning: > Symbols are not only referenced by the sequencer code, but > also by the actual driver. And there are symbols which > are referenced from the driver source code only, not from > the sequencer. So aicasm will _not_ catch those. > > That's why I added to 'count' field explicitely to some > symbols; these are referenced from the source code only. Why some of these added counts are not 1 but, for example, 19 (CLRINT register)? > But now we're facing another problem: Those symbols > referenced from the sequencer code only will in most > cases _not_ be printed via the autogenerated _print > functions. > > So what we really need to do here to do this properly > is to write a preprocessor, which checks the _used_ > *_print() functions in the source code and generates > the aic7*xx_reg_print.c file on the fly. And remove > this code from aicasm entirely. I agree that this would be the proper solution in a sense that it would autodetect and generate only what is needed. > But this really might be considered a bit of an > overkill. Since this is an ad-hoc system, instead of spending time on more difficult system which does this detection we can simply manually instruct aicasm to not generate *_print() functions which won't be ever called by the driver. Basically this would be a respin of my patch #4. After you introduced reference counts, I will need to add much smaller number of "dont_generate_debug_code" fields than before. Are you ok with this in principle? -- vda