gcc inline option

Solution Unverified - Updated -

Issue

When defining a function as inline, how to make sure that gcc will integrate its code into the code of its caller without using any of the optimisation options (-O).

#include <stdio.h>
inline int function_inline(int a, int b);

int function_inline(int a, int b) {
   return (a * b) + 3;
}

int main(int argc, char* argv[])
{
   int i = argc;
  i = function_inline(i, i+1);
  return 0;
}

Compiling the code above create the following assembly code:

$ objdump -d a.out
<output truncated>
00000000004004f6 <function_inline>:
  4004f6:       55                      push   %rbp
  4004f7:       48 89 e5                mov    %rsp,%rbp
  4004fa:       89 7d fc                mov    %edi,-0x4(%rbp)
  4004fd:       89 75 f8                mov    %esi,-0x8(%rbp)
  400500:       8b 45 fc                mov    -0x4(%rbp),%eax
  400503:       0f af 45 f8             imul   -0x8(%rbp),%eax
  400507:       83 c0 03                add    $0x3,%eax
  40050a:       5d                      pop    %rbp
  40050b:       c3                      retq   

000000000040050c <main>:
  40050c:       55                      push   %rbp
  40050d:       48 89 e5                mov    %rsp,%rbp
  400510:       48 83 ec 20             sub    $0x20,%rsp
  400514:       89 7d ec                mov    %edi,-0x14(%rbp)
  400517:       48 89 75 e0             mov    %rsi,-0x20(%rbp)
  40051b:       8b 45 ec                mov    -0x14(%rbp),%eax
  40051e:       89 45 fc                mov    %eax,-0x4(%rbp)
  400521:       8b 45 fc                mov    -0x4(%rbp),%eax
  400524:       8d 50 01                lea    0x1(%rax),%edx
  400527:       8b 45 fc                mov    -0x4(%rbp),%eax
  40052a:       89 d6                   mov    %edx,%esi
  40052c:       89 c7                   mov    %eax,%edi
  40052e:       e8 c3 ff ff ff          callq  4004f6 <function_inline>
  400533:       89 45 fc                mov    %eax,-0x4(%rbp)
  400536:       b8 00 00 00 00          mov    $0x0,%eax
  40053b:       c9                      leaveq 
  40053c:       c3                      retq   
  40053d:       0f 1f 00                nopl   (%rax)

There shouldn't be a call to function_inline() in main() but the code of the function itself.

Environment

  • Red Hat Enterprise Linux 6
  • gcc-4.4.7-16.el6.x86_64

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.

Current Customers and Partners

Log in for full access

Log In
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.