Hi, I have the following i386 assembly code:
########## .text .globl _main _main: nop push %ebp mov %esp, %ebp sub $0x4, %esp push $msg1 call _puts add $0x8, %esp pop %ebp push %ebp sub $0x4, %esp push $msg2 call _puts add $0x8, %esp mov $5, %eax pop %ebp ret .data msg1: .ascii "Hello World!\0" len = . - msg1 msg2: .ascii "This is a second line.\0" len = . - msg2 ########## Compiled under Mac OS X 10.10 with the following commands: as -W -arch i386 -o build/test3-i386.o test3-i386.s ld -arch i386 -macosx_version_min 10.10 -no_pie -o build/test3-i386 build/test3-i386.o -lSystem When I run the compiled binary in the shell everything works fine, but when I debug it from _main step-by-step with "thread step-inst-over" in LLDB 340.99.0 (ToT) - LLDB automatically continues on the first "pop %ebp" instruction. :> lldb build/test3-i386 lldb:> target create "build/test3-i386" Current executable set to 'build/test3-i386' (i386). lldb:> br s -n main Breakpoint 1: where = test3-i386`main, address = 0x00001f6d lldb:> process launch Process 66822 launched: 'build/test3-i386' (i386) Process 66822 stopped * thread #1: tid = 0x2af723, 0x00001f6d test3-i386`main, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x00001f6d test3-i386`main -> 0x1f6d <test3-i386`main+0>: nop 0x1f6e <test3-i386`main+1>: pushl %ebp 0x1f6f <test3-i386`main+2>: movl %esp, %ebp 0x1f71 <test3-i386`main+4>: subl $0x4, %esp lldb:> ni Process 66822 stopped * thread #1: tid = 0x2af723, 0x00001f6e test3-i386`main + 1, queue = 'com.apple.main-thread', stop reason = instruction step over frame #0: 0x00001f6e test3-i386`main + 1 -> 0x1f6e <test3-i386`main+1>: pushl %ebp 0x1f6f <test3-i386`main+2>: movl %esp, %ebp 0x1f71 <test3-i386`main+4>: subl $0x4, %esp 0x1f74 <test3-i386`main+7>: pushl $0x200c lldb:> Process 66822 stopped * thread #1: tid = 0x2af723, 0x00001f6f test3-i386`main + 2, queue = 'com.apple.main-thread', stop reason = instruction step over frame #0: 0x00001f6f test3-i386`main + 2 -> 0x1f6f <test3-i386`main+2>: movl %esp, %ebp 0x1f71 <test3-i386`main+4>: subl $0x4, %esp 0x1f74 <test3-i386`main+7>: pushl $0x200c 0x1f79 <test3-i386`main+12>: calll 0x1f9a ; symbol stub for: puts lldb:> Process 66822 stopped * thread #1: tid = 0x2af723, 0x00001f71 test3-i386`main + 4, queue = 'com.apple.main-thread', stop reason = instruction step over frame #0: 0x00001f71 test3-i386`main + 4 -> 0x1f71 <test3-i386`main+4>: subl $0x4, %esp 0x1f74 <test3-i386`main+7>: pushl $0x200c 0x1f79 <test3-i386`main+12>: calll 0x1f9a ; symbol stub for: puts 0x1f7e <test3-i386`main+17>: addl $0x8, %esp lldb:> Process 66822 stopped * thread #1: tid = 0x2af723, 0x00001f74 test3-i386`main + 7, queue = 'com.apple.main-thread', stop reason = instruction step over frame #0: 0x00001f74 test3-i386`main + 7 -> 0x1f74 <test3-i386`main+7>: pushl $0x200c 0x1f79 <test3-i386`main+12>: calll 0x1f9a ; symbol stub for: puts 0x1f7e <test3-i386`main+17>: addl $0x8, %esp 0x1f81 <test3-i386`main+20>: popl %ebp lldb:> Process 66822 stopped * thread #1: tid = 0x2af723, 0x00001f79 test3-i386`main + 12, queue = 'com.apple.main-thread', stop reason = instruction step over frame #0: 0x00001f79 test3-i386`main + 12 -> 0x1f79 <test3-i386`main+12>: calll 0x1f9a ; symbol stub for: puts 0x1f7e <test3-i386`main+17>: addl $0x8, %esp 0x1f81 <test3-i386`main+20>: popl %ebp 0x1f82 <test3-i386`main+21>: pushl %ebp lldb:> Hello World! Process 66822 stopped * thread #1: tid = 0x2af723, 0x00001f7e test3-i386`main + 17, queue = 'com.apple.main-thread', stop reason = instruction step over frame #0: 0x00001f7e test3-i386`main + 17 -> 0x1f7e <test3-i386`main+17>: addl $0x8, %esp 0x1f81 <test3-i386`main+20>: popl %ebp 0x1f82 <test3-i386`main+21>: pushl %ebp 0x1f83 <test3-i386`main+22>: subl $0x4, %esp lldb:> Process 66822 stopped * thread #1: tid = 0x2af723, 0x00001f81 test3-i386`main + 20, queue = 'com.apple.main-thread', stop reason = instruction step over frame #0: 0x00001f81 test3-i386`main + 20 -> 0x1f81 <test3-i386`main+20>: popl %ebp 0x1f82 <test3-i386`main+21>: pushl %ebp 0x1f83 <test3-i386`main+22>: subl $0x4, %esp 0x1f86 <test3-i386`main+25>: pushl $0x2019 lldb:> This is a second line. Process 66822 exited with status = 5 (0x00000005) lldb:> ^D When I remove pop %ebp push %ebp it works fine. Then LLDB stops after each single instruction step over until to the end of the program. When I also remove the instructions for the output of the second puts() it continues at the bottom "pop %ebp", before "ret": ########## .text .globl _main _main: nop push %ebp mov %esp, %ebp sub $0x4, %esp push $msg1 call _puts add $0x8, %esp mov $5, %eax pop %ebp ret .data msg1: .ascii "Hello World!\0" len = . - msg1 msg2: .ascii "This is a second line.\0" len = . - msg2 ########## It should do only one instruction step over. What am I doing wrong? Br, Christian -- Christian Mayer software developer http://fox21.at _______________________________________________ lldb-dev mailing list lldb-dev@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev