<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/78119>78119</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LLDB] mismatch behavior for step-inst-over
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
XMadrid
</td>
</tr>
</table>
<pre>
## Descriptions
LLDB executes `ni` like a `si` command in dynamically generated machine code.
## Environment
lldb version: 17.0.2
clang: Homebrew clang version 17.0.2
OS: MacOS 13.5.1 (22G90)
## Reproduce steps
with code
```c
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/mman.h>
int add() {
return 100;
}
int main() {
size_t binarySize = getpagesize();
void *ptr = mmap(NULL, binarySize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
if (ptr == MAP_FAILED) {
perror("mmap");
return 1;
}
memcpy(ptr, (void *)&add, binarySize);
if (mprotect(ptr, binarySize, PROT_READ | PROT_EXEC) == -1) {
perror("mprotect");
munmap(ptr, binarySize);
return 1;
}
int (* func)() = ptr;
int result = func();
printf("memcpy call result: %d\n", result);
int unmapResult = munmap(ptr, binarySize);
if (unmapResult != 0) {
perror("munmap");
return 1;
}
return 0;
}
```
build command: `clang test.c -g`
LLDB operations:
```shell
(lldb) file scripts/test
Current executable set to '/scripts/test' (arm64).
(lldb) breakpoint set --file test.c --line 26
Breakpoint 1: where = test`main + 208 at test.c:26:18, address = 0x0000000100003ea0
(lldb) target stop-hook add --one-liner "disassemble --pc"
Stop hook #1 added.
(lldb) r
Process 37668 launched: '/scripts/test' (arm64)
test`main:
-> 0x100003ea0 <+208>: ldr x8, [sp, #0x10]
0x100003ea4 <+212>: blr x8
0x100003ea8 <+216>: str w0, [sp, #0xc]
0x100003eac <+220>: ldr w9, [sp, #0xc]
Process 37668 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100003ea0 test`main at test.c:26:18
23 }
24
25 int (* func)() = ptr;
-> 26 int result = func();
27 printf("memcpy call result: %d\n", result);
28
29 int unmapResult = munmap(ptr, binarySize);
(lldb) ni
test`main:
-> 0x100003ea4 <+212>: blr x8
0x100003ea8 <+216>: str w0, [sp, #0xc]
0x100003eac <+220>: ldr w9, [sp, #0xc]
0x100003eb0 <+224>: mov x8, x9
Process 37668 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = instruction step over
frame #0: 0x0000000100003ea4 test`main at test.c:26:18
23 }
24
25 int (* func)() = ptr;
-> 26 int result = func();
27 printf("memcpy call result: %d\n", result);
28
29 int unmapResult = munmap(ptr, binarySize);
(lldb) ni
memcpy call result: 100
dyld`start:
-> 0x19a8e3f28 <+2236>: mov x19, x0
0x19a8e3f2c <+2240>: ldur x8, [x29, #-0x48]
0x19a8e3f30 <+2244>: ldr x8, [x8, #0x8]
0x19a8e3f34 <+2248>: ldr w0, [x8, #0x44]
Process 37668 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = instruction step over
frame #0: 0x000000019a8e3f28 dyld`start + 2236
dyld`start:
-> 0x19a8e3f28 <+2236>: mov x19, x0
0x19a8e3f2c <+2240>: ldur x8, [x29, #-0x48]
0x19a8e3f30 <+2244>: ldr x8, [x8, #0x8]
0x19a8e3f34 <+2248>: ldr w0, [x8, #0x44]
(lldb)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWN9zo74R_2vklx08QmAMD35wYqe9mdwlk3zb3tuNQLKtHggqicS5v76zAtvgOE3a3t30oZ4MGdjdz_767AqbW6u2WsoFmV2R2WrCW7erzeLrZy6MEpO8Fi8LwiLCIlhJWxjVOFVrS-iK0GV3vb1dXYHcy6J10gJJqFYkoVCq7xI43lt_X9RVxbUApUG8aF6pgpflC2ylloY7KaDixU5pCUUt5HTooL92Uaz1kzK1rqR2Q2lZihyepLGq1iRaQjif0inrZEXJ9RYf_rmuZG7kM_gnB_WR7t0jKn7mxd0jhNF0Ng2BsJSxP2WUsOxCPA-yMbVoCwnWyWZUmGfldj6b_mFCu7_iCKB0UbZCAomurROqnu5ItL4kbbWyTrwpts4ovX1b_GIJu8HyD1X8VWkHXAjCUsIyIPOr7jEAgJGuNRpCSknUPybz1blxxZW-ZG3VD_nNQa40Ny-P6gcGsoKtdA3fShR2RkdoeKqVAMKWjTNetap4Q1j65S-3t4RdD4Dw7v7h7o9vD-vlCsi8v_vbw6c_1ij7vLz_tvxy98WL8Ob-4dNfl50sCPFKR44BQG2wy71ndI5mN8tPt-vVOLFGGlMbHzrrAmTnWMPSjQTH4uFNJauieemcYkiEpYcCICBLfFPGaZ_8nEdeNaZ2snAnvHfLtf66vva5dQljYc46iJ9RvkcnF3OuWt117EIE_26FBvlpB979EjatLnxt0j5uQE-jNmoHRtq2dF7cGaTn7hujtNv0Ofk2AK6i3hLHn7CZILNr7TO9Pggu11878Ik_nPx-vBJd90b2LEQI-n43eicf5N-IfL340lwfdtQwz7xVpTjsb1-fhHYb1EnrpgUE2zMLfyTUDS52f1qgzRjf7mRZHnZVitsbM96oUkJ3yuDGQvhO57o1RmrXHzM8RzXpwNVA2JywmzMbNse6clMlMWHZ9JWf3Ej-vamxeQgTBN7xIZugxGOIJZ3Z1Uk3xESed9J0y8y7SihuQCDsChhNgbsehkRLlpBoGaZIAS6EkdZ6M7qn3SfESyQ5fRWf42YrHVhXN8Gurr-jPQRBraWPzQBhTCjLrZUV1iIImgKp4HEeXd2AtyIsCtFUitclMN2Te1MXGFg0T5IUSt7qYie7Jr9f2A5iUAYS9QQISLQGuj9miKcQYVeMpnj-REsohUEm7n11yOzKNt0WjNCIzAZkPaHEB5SQ9Sh5aRDigm561E16Xeu8x2f62mPxhsPiAMLoOOzn7F-BjGuKTWykODRgCW5nJBe-OWj8j1a2HZ8Imxd1NeVNU8opljPoVH0nrj0QGMltrb36gMThNDzFvzG8kj4mjPg120a8vcTXAxKL-nUyXB4shn6Wgc16-YeXtKcFSwZm765rNv8ZCxuB0mPgACz7Lzb3YIq0-vAMXGZvNwP_YwQegeTH4WVxD1LVT6fh3We_lfVKW2faAs8V_8YN9ZM0HyZ__H_y_3zyXw4Lvzd4sXgpBZ74jhs3Hg4kWcZTGW3Yke4sSs5YFnqu7nu0gc2J3fGJ3q0ZHit7lvX8Dug-Ts8Z3gFFA4bHgzk5oaTHIXkLIj5BnB1xx3kdoMTx7z4s_sOxOXZn2MTuZQcb9Sv6OyzrL2_xCOgXdnkwNRdftCdiEYksyvhELsI5nbE0jSmb7BZxEYkwjuYspnEsaCI3Mgw3ORVUFEmWJBO1YJTFNAxnNAojxqZ5nOW0ENksFixJsg2Jqay4Kqdl-VRNa7OdKGtbuZinYZhNSp7L0vpffxjT8hm8EFfJbDUxC7QJ8nZrSUxLZZ09oTjlSv-zEb7sk9kKKmUr7ood5HLHn1RtYFMbT7YA2Rcg42DSmnKxc67BLwWE3RB2s1Vu1-bToq4Iu0H4_l_QmPrv_vvmjQ8KX0J90P8MAAD__yAUChs">