<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - LLDB steps incorrectly for binaries compiled using GCC 6.2 on Ubuntu 16.10"
   href="https://llvm.org/bugs/show_bug.cgi?id=31212">31212</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>LLDB steps incorrectly for binaries compiled using GCC 6.2 on Ubuntu 16.10
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>lldb
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>3.9
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>All Bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>lldb-dev@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>eldar.abusalimov@jetbrains.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Step-over and step-in skip source lines and behave more like step-out for code
compiled on Ubuntu 16.10 using GCC 6.2, which by default compiles with -pie.
Everything works correctly when using -fno-pie explicitly. The weird thing is,
everything also works fine when compiling on Ubuntu 16.04 using GCC 6.2 from
ppa:ubuntu-toolchain-r/test.

The issue is also reproducible with binaries compiled on Ubuntu 16.10 using GCC
6.2 which are then debugged on another system, like Ubuntu 16.04.

Source code:

    #include <iostream>

    void printHello() {
        std::cout << "Hello, World! from function" << std::endl;
        std::cout << "Hello, World! from function" << std::endl;
        std::cout << "Hello, World! from function" << std::endl;
    }

    int main() {
        printHello();
        std::cout << "Hello, World! from main()" << std::endl;
        std::cout << "Hello, World! from main()" << std::endl;
        std::cout << "Hello, World! from main()" << std::endl;
        return 0;
    }


Debug session:

    $ lldb ClionProjects/bug_test/cmake-build-debug/bug_test
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    ImportError: No module named lldb.embedded_interpreter
    (lldb) target create "ClionProjects/bug_test/cmake-build-debug/bug_test"
    Current executable set to
'ClionProjects/bug_test/cmake-build-debug/bug_test' (x86_64).
    (lldb) b main.cpp:10
    Breakpoint 1: where = bug_test`main + 4 at main.cpp:10, address =
0x0000000000000993
    (lldb) r
    Process 2545 launched:
'/home/user/ClionProjects/bug_test/cmake-build-debug/bug_test' (x86_64)
    Process 2545 stopped
    * thread #1: tid = 2545, 0x0000555555554993 bug_test`main + 4 at
main.cpp:10, name = 'bug_test', stop reason = breakpoint 1.1
        frame #0: 0x0000555555554993 bug_test`main + 4 at main.cpp:10
       7       }
       8       
       9       int main() {
    -> 10          printHello();
       11          std::cout << "Hello, World! from main()" << std::endl;
       12          std::cout << "Hello, World! from main()" << std::endl;
       13          std::cout << "Hello, World! from main()" << std::endl;
    (lldb) s
    Process 2545 stopped
    * thread #1: tid = 2545, 0x0000555555554914 bug_test`printHello() + 4 at
main.cpp:4, name = 'bug_test', stop reason = step in
        frame #0: 0x0000555555554914 bug_test`printHello() + 4 at main.cpp:4
       1       #include <iostream>
       2       
       3       void printHello() {
    -> 4           std::cout << "Hello, World! from function" << std::endl;
       5           std::cout << "Hello, World! from function" << std::endl;
       6           std::cout << "Hello, World! from function" << std::endl;
       7       }
    (lldb) s
    Hello, World! from function
    Hello, World! from function
    Hello, World! from function
    Process 2545 stopped
    * thread #1: tid = 2545, 0x0000555555554998 bug_test`main + 9 at
main.cpp:11, name = 'bug_test', stop reason = step in
        frame #0: 0x0000555555554998 bug_test`main + 9 at main.cpp:11
       8       
       9       int main() {
       10          printHello();
    -> 11          std::cout << "Hello, World! from main()" << std::endl;
       12          std::cout << "Hello, World! from main()" << std::endl;
       13          std::cout << "Hello, World! from main()" << std::endl;
       14          return 0;
    (lldb) s
    Hello, World! from main()
    Hello, World! from main()
    Hello, World! from main()
    Process 2545 stopped
    * thread #1: tid = 2545, 0x00007ffff76a93f1 libc.so.6`__libc_start_main +
241, name = 'bug_test', stop reason = step in
        frame #0: 0x00007ffff76a93f1 libc.so.6`__libc_start_main + 241
    libc.so.6`__libc_start_main:
    ->  0x7ffff76a93f1 <+241>: movl   %eax, %edi
        0x7ffff76a93f3 <+243>: callq  0x7ffff76c3320            ; exit
        0x7ffff76a93f8 <+248>: xorl   %eax, %eax
        0x7ffff76a93fa <+250>: jmp    0x7ffff76a9337            ; <+55>
    (lldb)</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>