<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 --- - Disassemble with mixed source show more source code then reasonable"
   href="https://llvm.org/bugs/show_bug.cgi?id=23329">23329</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Disassemble with mixed source show more source code then reasonable
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>unspecified
          </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@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>tberghammer@google.com
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>LLDB displays 3 line of source code in each source block in assembly when the
display of the source code is requested inside the assembly code ("disassamble
-m").

Current result of a "disassamble -m" (source of Test-rdar-10449092.py on
android arm):
(lldb) dis -m
a.out`main at main.cpp:19
   18      int main ()
   19      {
   20          struct foo mine = {0x001122AA, 0x1122BB44};
a.out`main:
    0x2a0004d8 <+0>:   push   {r11, lr}
    0x2a0004dc <+4>:   add    r11, sp, #4
    0x2a0004e0 <+8>:   sub    sp, sp, #8
a.out`main + 12 at main.cpp:20
   19      {
   20          struct foo mine = {0x001122AA, 0x1122BB44};
   21          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
    0x2a0004e4 <+12>:  ldr    r2, [pc, #0x8c]           ; <+160> at main.cpp:27
    0x2a0004e8 <+16>:  add    r2, pc, r2
    0x2a0004ec <+20>:  sub    r3, r11, #12
    0x2a0004f0 <+24>:  ldm    r2, {r0, r1}
    0x2a0004f4 <+28>:  stm    r3, {r0, r1}
a.out`main + 32 at main.cpp:21
   20          struct foo mine = {0x001122AA, 0x1122BB44};
   21          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
   22          mine.first = 0xAABBCCDD; // Set break point at this line.
    0x2a0004f8 <+32>:  ldr    r2, [r11, #-0xc]
    0x2a0004fc <+36>:  ldr    r3, [r11, #-0x8]
    0x2a000500 <+40>:  ldr    r1, [pc, #0x74]           ; <+164> at main.cpp:27
    0x2a000504 <+44>:  add    r1, pc, r1
    0x2a000508 <+48>:  mov    r0, r1
    0x2a00050c <+52>:  mov    r1, r2
    0x2a000510 <+56>:  mov    r2, r3
    0x2a000514 <+60>:  bl     0x2a0003e0
a.out`main + 64 at main.cpp:22
   21          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
   22          mine.first = 0xAABBCCDD; // Set break point at this line.
   23          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
    0x2a000518 <+64>:  ldr    r3, [pc, #0x60]           ; <+168> at main.cpp:27
->  0x2a00051c <+68>:  str    r3, [r11, #-0xc]
a.out`main + 72 at main.cpp:23
   22          mine.first = 0xAABBCCDD; // Set break point at this line.
   23          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
   24          mine.second = 0xFF00FF00;
    0x2a000520 <+72>:  ldr    r2, [r11, #-0xc]
    0x2a000524 <+76>:  ldr    r3, [r11, #-0x8]
    0x2a000528 <+80>:  ldr    r1, [pc, #0x54]           ; <+172> at main.cpp:27
    0x2a00052c <+84>:  add    r1, pc, r1
    0x2a000530 <+88>:  mov    r0, r1
    0x2a000534 <+92>:  mov    r1, r2
    0x2a000538 <+96>:  mov    r2, r3
    0x2a00053c <+100>: bl     0x2a0003e0
a.out`main + 104 at main.cpp:24
   23          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
   24          mine.second = 0xFF00FF00;
   25          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
    0x2a000540 <+104>: ldr    r3, [pc, #0x40]           ; <+176> at main.cpp:27
    0x2a000544 <+108>: str    r3, [r11, #-0x8]
a.out`main + 112 at main.cpp:25
   24          mine.second = 0xFF00FF00;
   25          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
   26          return 0;
    0x2a000548 <+112>: ldr    r2, [r11, #-0xc]
    0x2a00054c <+116>: ldr    r3, [r11, #-0x8]
    0x2a000550 <+120>: ldr    r1, [pc, #0x34]           ; <+180> at main.cpp:27
    0x2a000554 <+124>: add    r1, pc, r1
    0x2a000558 <+128>: mov    r0, r1
    0x2a00055c <+132>: mov    r1, r2
    0x2a000560 <+136>: mov    r2, r3
    0x2a000564 <+140>: bl     0x2a0003e0
a.out`main + 144 at main.cpp:26
   25          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
   26          return 0;
   27      }
    0x2a000568 <+144>: mov    r3, #0
a.out`main + 148 at main.cpp:27
   26          return 0;
   27      }
   28      
    0x2a00056c <+148>: mov    r0, r3
    0x2a000570 <+152>: sub    sp, r11, #4
    0x2a000574 <+156>: pop    {r11, pc}
    0x2a000578 <+160>: andeq  r1, r0, r8, lsl #12
    0x2a00057c <+164>: strheq r1, [r0], -r12
    0x2a000580 <+168>: bge    0x28ef38fc
    0x2a000584 <+172>: .long  0x00001594                ; unknown opcode
    0x2a000588 <+176>: .long  0xff00ff00                ; unknown opcode
    0x2a00058c <+180>: andeq  r1, r0, r12, ror #10

Expected result (hand crafted, not exact):
(lldb) dis -m
   19      {
a.out`main:
    0x2a0004d8 <+0>:   push   {r11, lr}
    0x2a0004dc <+4>:   add    r11, sp, #4
    0x2a0004e0 <+8>:   sub    sp, sp, #8
   20          struct foo mine = {0x001122AA, 0x1122BB44};
    0x2a0004e4 <+12>:  ldr    r2, [pc, #0x8c]           ; <+160> at main.cpp:27
    0x2a0004e8 <+16>:  add    r2, pc, r2
    0x2a0004ec <+20>:  sub    r3, r11, #12
    0x2a0004f0 <+24>:  ldm    r2, {r0, r1}
    0x2a0004f4 <+28>:  stm    r3, {r0, r1}
   21          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
    0x2a0004f8 <+32>:  ldr    r2, [r11, #-0xc]
    0x2a0004fc <+36>:  ldr    r3, [r11, #-0x8]
    0x2a000500 <+40>:  ldr    r1, [pc, #0x74]           ; <+164> at main.cpp:27
    0x2a000504 <+44>:  add    r1, pc, r1
    0x2a000508 <+48>:  mov    r0, r1
    0x2a00050c <+52>:  mov    r1, r2
    0x2a000510 <+56>:  mov    r2, r3
    0x2a000514 <+60>:  bl     0x2a0003e0
   22          mine.first = 0xAABBCCDD; // Set break point at this line.
    0x2a000518 <+64>:  ldr    r3, [pc, #0x60]           ; <+168> at main.cpp:27
->  0x2a00051c <+68>:  str    r3, [r11, #-0xc]
   23          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
    0x2a000520 <+72>:  ldr    r2, [r11, #-0xc]
    0x2a000524 <+76>:  ldr    r3, [r11, #-0x8]
    0x2a000528 <+80>:  ldr    r1, [pc, #0x54]           ; <+172> at main.cpp:27
    0x2a00052c <+84>:  add    r1, pc, r1
    0x2a000530 <+88>:  mov    r0, r1
    0x2a000534 <+92>:  mov    r1, r2
    0x2a000538 <+96>:  mov    r2, r3
    0x2a00053c <+100>: bl     0x2a0003e0
   24          mine.second = 0xFF00FF00;
    0x2a000540 <+104>: ldr    r3, [pc, #0x40]           ; <+176> at main.cpp:27
    0x2a000544 <+108>: str    r3, [r11, #-0x8]
   25          printf("main.first = 0x%8.8x, main.second = 0x%8.8x\n",
mine.first, mine.second);
    0x2a000548 <+112>: ldr    r2, [r11, #-0xc]
    0x2a00054c <+116>: ldr    r3, [r11, #-0x8]
    0x2a000550 <+120>: ldr    r1, [pc, #0x34]           ; <+180> at main.cpp:27
    0x2a000554 <+124>: add    r1, pc, r1
    0x2a000558 <+128>: mov    r0, r1
    0x2a00055c <+132>: mov    r1, r2
    0x2a000560 <+136>: mov    r2, r3
    0x2a000564 <+140>: bl     0x2a0003e0
   26          return 0;
    0x2a000568 <+144>: mov    r3, #0
   27      }
    0x2a00056c <+148>: mov    r0, r3
    0x2a000570 <+152>: sub    sp, r11, #4
    0x2a000574 <+156>: pop    {r11, pc}
    0x2a000578 <+160>: andeq  r1, r0, r8, lsl #12
    0x2a00057c <+164>: strheq r1, [r0], -r12
    0x2a000580 <+168>: bge    0x28ef38fc
    0x2a000584 <+172>: .long  0x00001594                ; unknown opcode
    0x2a000588 <+176>: .long  0xff00ff00                ; unknown opcode
    0x2a00058c <+180>: andeq  r1, r0, r12, ror #10</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>