2005-10-17 21:37:40

by Ben Dooks

[permalink] [raw]
Subject: [PATCH] mark __init code noinline to stop erroneous inclusions

Make __init also have the noinline attribute attached
to it, to stop code marked as __init being included
into non __init code. This not only wastes space, but
also makes it impossible to track down any calls from
non-init code as differing compilers and optimisations
make differing decisions on what to inline.

Signed-off-by: Ben Dooks <[email protected]>


Attachments:
(No filename) (361.00 B)
init-noinline-code.patch (643.00 B)
Download all attachments

2005-10-18 01:03:24

by Coywolf Qi Hunt

[permalink] [raw]
Subject: Re: [PATCH] mark __init code noinline to stop erroneous inclusions

On 10/18/05, Ben Dooks <[email protected]> wrote:
> Make __init also have the noinline attribute attached
> to it, to stop code marked as __init being included
> into non __init code. This not only wastes space, but
> also makes it impossible to track down any calls from
> non-init code as differing compilers and optimisations
> make differing decisions on what to inline.

I think this is overkill. __init code could be inlined into __init
code. Instead we should make sure to not to call __init code from
non-init code `directly'.

It is a gcc bug. Gcc really should respects __attribute__
((__section__ (".init.text"))), and not inline the code in that
section.
--
Coywolf Qi Hunt
http://sosdg.org/~coywolf/

2005-10-18 10:38:51

by Ben Dooks

[permalink] [raw]
Subject: Re: [PATCH] mark __init code noinline to stop erroneous inclusions

On Tue, Oct 18, 2005 at 09:03:20AM +0800, Coywolf Qi Hunt wrote:
> On 10/18/05, Ben Dooks <[email protected]> wrote:
> > Make __init also have the noinline attribute attached
> > to it, to stop code marked as __init being included
> > into non __init code. This not only wastes space, but
> > also makes it impossible to track down any calls from
> > non-init code as differing compilers and optimisations
> > make differing decisions on what to inline.
>
> I think this is overkill. __init code could be inlined into __init
> code. Instead we should make sure to not to call __init code from
> non-init code `directly'.

This is very difficult to detect when the compiler is inlining the
function code.

> It is a gcc bug. Gcc really should respects __attribute__
> ((__section__ (".init.text"))), and not inline the code in that
> section.


>From the gcc 4.0 manual,
http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html

section ("section-name")
Normally, the compiler places the code it generates in the
text section. Sometimes, however, you need additional sections,
or you need certain particular functions to appear in special sections.
The section attribute specifies that a function lives in a particular
section.

My reading of the passage is that the output code will be put in
the specified section. It does not say wether or not the compiler
is allowed to do any other optimisations it sees fit on the data.

My belief is that the compiler should be able to do this form of
optimisation, unless we tell it otherwise. The only harm is that
it makes it difficult to detect errors from compilers that do not
do it.

--
Ben ([email protected], http://www.fluff.org/)

'a smiley only costs 4 bytes'