<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">while debugging lldb unit test “functionalities/step-avoids-no-debug”, i noticed that the mac version of clang associated a different set of machine code to a source line than the linux version of clang, even though the machine code generated by the two version was almost identical.  This difference was noticed when i was looking at the Range values passed to “Thread::QueueThreadPlanForSteoOverRange()” in lldb.<div><br></div><div>the source line in question is line 12 of “with-debug.c” in the unit test directory</div><div><br></div><div><br></div><div><br></div><div>mac clang associates source line 12 (return return_value;) with (9) machine code bytes starting at address <span style="font-family: Menlo; font-size: 11px;">100000e59 (shown below)</span></div><div><font face="Menlo"><span style="font-size: 11px;"><br></span></font><div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">0000000100000e30 <_called_from_nodebug_actual>:</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e30:<span class="Apple-tab-span" style="white-space:pre">  </span>55                   <span class="Apple-tab-span" style="white-space:pre">  </span>push   %rbp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e31:<span class="Apple-tab-span" style="white-space:pre">  </span>48 89 e5             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    %rsp,%rbp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e34:<span class="Apple-tab-span" style="white-space:pre">        </span>48 83 ec 10          <span class="Apple-tab-span" style="white-space:pre">      </span>sub    $0x10,%rsp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e38:<span class="Apple-tab-span" style="white-space:pre">       </span>48 8d 05 2f 01 00 00 <span class="Apple-tab-span" style="white-space:pre">       </span>lea    0x12f(%rip),%rax        # 100000f6e <_printf$stub+0x20></div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e3f:<span class="Apple-tab-span" style="white-space:pre">        </span>89 7d fc             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    %edi,-0x4(%rbp)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e42:<span class="Apple-tab-span" style="white-space:pre">  </span>c7 45 f8 00 00 00 00 <span class="Apple-tab-span" style="white-space:pre">       </span>movl   $0x0,-0x8(%rbp)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e49:<span class="Apple-tab-span" style="white-space:pre">       </span>8b 75 fc             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    -0x4(%rbp),%esi</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e4c:<span class="Apple-tab-span" style="white-space:pre">  </span>48 89 c7             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    %rax,%rdi</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e4f:<span class="Apple-tab-span" style="white-space:pre">        </span>b0 00                <span class="Apple-tab-span" style="white-space:pre">       </span>mov    $0x0,%al</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e51:<span class="Apple-tab-span" style="white-space:pre"> </span>e8 f8 00 00 00       <span class="Apple-tab-span" style="white-space:pre">        </span>callq  100000f4e <_printf$stub></div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e56:<span class="Apple-tab-span" style="white-space:pre">        </span>89 45 f8             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    %eax,-0x8(%rbp)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e59:<span class="Apple-tab-span" style="white-space:pre">  </span>8b 45 f8             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    -0x8(%rbp),%eax</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e5c:<span class="Apple-tab-span" style="white-space:pre">  </span>48 83 c4 10          <span class="Apple-tab-span" style="white-space:pre">      </span>add    $0x10,%rsp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e60:<span class="Apple-tab-span" style="white-space:pre">       </span>5d                   <span class="Apple-tab-span" style="white-space:pre">  </span>pop    %rbp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e61:<span class="Apple-tab-span" style="white-space:pre">     </span>c3                   <span class="Apple-tab-span" style="white-space:pre">  </span>retq   </div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e62:<span class="Apple-tab-span" style="white-space:pre"> </span>66 66 66 66 66 2e 0f <span class="Apple-tab-span" style="white-space:pre">       </span>data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   100000e69:<span class="Apple-tab-span" style="white-space:pre">     </span>1f 84 00 00 00 00 00 </div></div></div><div><br></div><div><br></div><div>linux clang associates source line 20 (return return_value;) with (20) machine code bytes starting at address 40055c (shown below)</div><div><br></div><div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">int</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">called_from_nodebug_actual(int some_value)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">{</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400530:<span class="Apple-tab-span" style="white-space:pre">      </span>55                   <span class="Apple-tab-span" style="white-space:pre">  </span>push   %rbp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400531:<span class="Apple-tab-span" style="white-space:pre">   </span>48 89 e5             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    %rsp,%rbp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400534:<span class="Apple-tab-span" style="white-space:pre"> </span>48 83 ec 10          <span class="Apple-tab-span" style="white-space:pre">      </span>sub    $0x10,%rsp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400538:<span class="Apple-tab-span" style="white-space:pre">        </span>48 b8 d4 06 40 00 00 <span class="Apple-tab-span" style="white-space:pre">       </span>movabs $0x4006d4,%rax</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  40053f:<span class="Apple-tab-span" style="white-space:pre">      </span>00 00 00 </div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400542:<span class="Apple-tab-span" style="white-space:pre">     </span>89 7d fc             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    %edi,-0x4(%rbp)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  int return_value = 0;</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400545:<span class="Apple-tab-span" style="white-space:pre">    </span>c7 45 f8 00 00 00 00 <span class="Apple-tab-span" style="white-space:pre">       </span>movl   $0x0,-0x8(%rbp)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  return_value  = printf ("Length: %d.\n", some_value);</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  40054c:<span class="Apple-tab-span" style="white-space:pre">  </span>8b 75 fc             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    -0x4(%rbp),%esi</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  40054f:<span class="Apple-tab-span" style="white-space:pre">   </span>48 89 c7             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    %rax,%rdi</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400552:<span class="Apple-tab-span" style="white-space:pre"> </span>b0 00                <span class="Apple-tab-span" style="white-space:pre">       </span>mov    $0x0,%al</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400554:<span class="Apple-tab-span" style="white-space:pre">  </span>e8 b7 fe ff ff       <span class="Apple-tab-span" style="white-space:pre">        </span>callq  400410 <printf@plt></div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400559:<span class="Apple-tab-span" style="white-space:pre">      </span>89 45 f8             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    %eax,-0x8(%rbp)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  return return_value; // Stop here and step out of me</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  40055c:<span class="Apple-tab-span" style="white-space:pre">     </span>8b 45 f8             <span class="Apple-tab-span" style="white-space:pre"> </span>mov    -0x8(%rbp),%eax</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  40055f:<span class="Apple-tab-span" style="white-space:pre">   </span>48 83 c4 10          <span class="Apple-tab-span" style="white-space:pre">      </span>add    $0x10,%rsp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400563:<span class="Apple-tab-span" style="white-space:pre">        </span>5d                   <span class="Apple-tab-span" style="white-space:pre">  </span>pop    %rbp</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400564:<span class="Apple-tab-span" style="white-space:pre">      </span>c3                   <span class="Apple-tab-span" style="white-space:pre">  </span>retq   </div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  400565:<span class="Apple-tab-span" style="white-space:pre">  </span>66 66 2e 0f 1f 84 00 <span class="Apple-tab-span" style="white-space:pre">       </span>data32 nopw %cs:0x0(%rax,%rax,1)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  40056c:<span class="Apple-tab-span" style="white-space:pre">   </span>00 00 00 00 </div><div style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px;"><br></div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">0000000000400570 <called_from_nodebug>:</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">}</div></div><div><br></div><div><br></div><div><br></div><div>the first 9 bytes of the associated machine code are identical for the mac and linux versions.  the next 11 bytes are data bytes that are present in both the mac and linux versions of the object code, but only linux clang associates these with line 12.</div><div><br></div><div>in the unit test i was debugging, this difference didn’t cause a unit test failure, but it was disconcerting to see this difference between the mac and linux versions.</div><div><br></div><div>is this difference expected?</div><div><br></div><div>thanks,</div><div>doug</div><div><br></div><div><br></div></body></html>