Re: [parisc-linux] [2.6 patch] parisc: "extern inline" -> "static

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> > I really don't think it makes any difference.  Such a function (returning
> > always 0) is always going to be inlined, and the only difference between
> > static inline and extern inline is what happens when it can't be inlined.
> 
> On !alpha we are defining inline to __attribute__((always_inline)) for 
> any non-ancient gcc making this a zero difference.

It looks as if there are subtle differences between "always_inline"
and "extern inline".  From the GCC extensions document:

  [always_inline]
  Generally, functions are not inlined unless optimization is specified.
  For functions declared inline, this attribute inlines the function even
  if no optimization level was specified.

  [extern inline]
  If you specify both @code{inline} and @code{extern} in the function
  definition, then the definition is used only for inlining.  In no case
  is the function compiled on its own, not even if you refer to its
  address explicitly.  Such an address becomes an external reference, as
  if you had only declared the function, and had not defined it.

The primary difference between "static inline" and "extern inline"
is in what happens when the address of the function is referenced.
With "extern inline", you need a unique library function to resolve
external references.  With "static inline", you may end up with
multiple copies of a function if its address is taken.

> The bigger issue is that "extern inline" generates a warning with 
> -Wmissing-prototypes and I'm currently working on getting the kernel 
> cleaned up for adding this to the CFLAGS since it will help us to avoid 
> a nasty class of runtime errors.

The prototypes could be added.

Dave
-- 
J. David Anglin                                  [email protected]
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux