On Fri, Apr 17, 2009 at 11:54 PM, Pavel Roskin <
address@hidden> wrote:
> Hello!
>
> While I have just applied a patch adding NESTED_FUNC_ATTR to several
> functions as an emergency fix for a major breakage in ata, ohci, uhci
> and lspci modules, I would prefer a more radical solution.
>
> I suggest that we eliminate all nested functions. The reasons are:
>
> 1) They make the code less readable, as they make the parent functions
> longer.
>
> 2) They have problems with some popular compilers, as recent as gcc-4.0
> when regparm(3) is used.
>
> 3) We failed to implement a reliable test for such problems. We are
> using regparm(1) for all compilers.
>
> 4) The existing test is one of the obstacles making it impossible to
> compile without having libc for the target (x86_64->i386 would be really
> nice), as we need to run the compiled test executable.
>
> 5) Non-i386 architectures define NESTED_FUNC_ATTR as an empty symbol, so
> developers on such architectures don't see if they use it correctly.
>
> 6) NESTED_FUNC_ATTR tends to proliferate to the file scope functions, as
> it happened with grub_pci_iterate(). It only takes one caller using a
> nested function to force NESTED_FUNC_ATTR on all functions used as an
> argument to the same function.
>
> We can give all formerly nested functions better, more descriptive names
> starting like other functions in the file and ending with "_iter".
>
> --
> Regards,
> Pavel Roskin
>
>
> _______________________________________________
> Grub-devel mailing list
>
address@hidden
>
http://lists.gnu.org/mailman/listinfo/grub-devel
>