This is the mail archive of the
mailing list for the Cygwin project.
Re: Is a function actually inlined?
On Wed, 8 Oct 2003, Alex Vinokur wrote:
> "Igor Pechtchanski" <firstname.lastname@example.org> wrote in message Pine.GSO.email@example.com">news:Pine.GSO.firstname.lastname@example.org...
> > On Wed, 8 Oct 2003, Alex Vinokur wrote:
> > > "Corinna Vinschen" wrote in message 20031008100004.GC2070@cygbert.vinschen.de">news:20031008100004.GC2070@cygbert.vinschen.de...
> > > > On Wed, Oct 08, 2003 at 11:19:27AM +0200, Alex Vinokur wrote:
> > > > > How can one know if a function requested to be inlined is actually
> > > > > inlined?
> > > >
> > > > A look into the assembler output generated by gcc/g++ will show you.
> > >
> > > How can one conclude if a function is actually inlined on the basis
> > > working with the nm and objdump utilities? For instance, are 'the foo2()
> > > and foo3() function from my original posting' actually inlined?
> > The general rule of thumb is: if there's a call to a function, it's not
> > inlined.
> > > $ grep foo t.s
> > >
> > > .globl __ZN3Foo4foo1Ev
> > > .def __ZN3Foo4foo1Ev; .scl 2; .type 32; .endef
> > > __ZN3Foo4foo1Ev:
> > > call __ZN3Foo4foo1Ev
> > > call __ZN3Foo4foo2Ev
> > > call __ZN3Foo4foo3Ev
> > ^^^^^^^^^^^^^^^^^^^^
> > FWIW, it doesn't look like they are inlined.
> On the other hand we don't see
> * call foo2()
> * call foo3()
> here :
> $ objdump -CS t.o | grep foo
> 1a: e8 00 00 00 00 call 1f <main+0x19>
> 1f: e8 00 00 00 00 call 24 <main+0x1e>
> 2a: e8 d1 ff ff ff call 0 <Foo::foo1()>
> 35: e8 00 00 00 00 call 3a <main+0x34>
> 40: e8 00 00 00 00 call 45 <main+0x3f>
Yes, apparently the .s file is not the final assembly output -- some
transformations do happen between that and the object file. So, look at
the output of objdump and see if there are calls to those functions.
One thing to note is that in gcc (as in many other compilers) inlining can
happen at different levels. What you're probably seeing here, IMO, is a
peephole optimization that inlines any empty functions, rather than gcc
considering the 'inline' keyword.
So, to answer your original question, I don't think the 'inline' keyword
influenced the final binary, but the functions did get inlined by some
|\ _,,,---,,_ email@example.com
ZZZzz /,`.-'`' -. ;-;;,_ firstname.lastname@example.org
|,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski, Ph.D.
'---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow!
"I have since come to realize that being between your mentor and his route
to the bathroom is a major career booster." -- Patrick Naughton
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html