1# REQUIRES: x86
2
3# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux %s -o %t
4# RUN: %lldb %t -o "settings set interpreter.stop-command-source-on-error false" \
5# RUN:   -o "settings set stop-disassembly-max-size 8000" \
6# RUN:   -s %S/Inputs/command-disassemble.lldbinit -o exit 2>&1 | FileCheck %s
7
8# CHECK:      (lldb) disassemble
9# CHECK-NEXT: error: Cannot disassemble around the current function without a selected frame: no currently running process.
10# CHECK-NEXT: (lldb) disassemble --line
11# CHECK-NEXT: error: Cannot disassemble around the current line without a selected frame: no currently running process.
12# CHECK-NEXT: (lldb) disassemble --frame
13# CHECK-NEXT: error: Cannot disassemble around the current function without a selected frame: no currently running process.
14# CHECK-NEXT: (lldb) disassemble --pc
15# CHECK-NEXT: error: Cannot disassemble around the current PC without a selected frame: no currently running process.
16# CHECK-NEXT: (lldb) disassemble --start-address 0x0
17# CHECK-NEXT: command-disassemble.s.tmp`foo:
18# CHECK-NEXT: command-disassemble.s.tmp[0x0] <+0>:   int    $0x10
19# CHECK-NEXT: command-disassemble.s.tmp[0x2] <+2>:   int    $0x11
20# CHECK-NEXT: command-disassemble.s.tmp[0x4] <+4>:   int    $0x12
21# CHECK-NEXT: command-disassemble.s.tmp[0x6] <+6>:   int    $0x13
22# CHECK-NEXT: command-disassemble.s.tmp[0x8] <+8>:   int    $0x14
23# CHECK-NEXT: command-disassemble.s.tmp[0xa] <+10>:  int    $0x15
24# CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>:  int    $0x16
25# CHECK-EMPTY:
26# CHECK-NEXT: command-disassemble.s.tmp`bar:
27# CHECK-NEXT: command-disassemble.s.tmp[0xe] <+0>:   int    $0x17
28# CHECK-NEXT: command-disassemble.s.tmp[0x10] <+2>:  int    $0x18
29# CHECK-NEXT: command-disassemble.s.tmp[0x12] <+4>:  int    $0x19
30# CHECK-NEXT: command-disassemble.s.tmp[0x14] <+6>:  int    $0x1a
31# CHECK-NEXT: command-disassemble.s.tmp[0x16] <+8>:  int    $0x1b
32# CHECK-NEXT: command-disassemble.s.tmp[0x18] <+10>: int    $0x1c
33# CHECK-NEXT: command-disassemble.s.tmp[0x1a] <+12>: int    $0x1d
34# CHECK-NEXT: command-disassemble.s.tmp[0x1c] <+14>: int    $0x1e
35# CHECK-NEXT: command-disassemble.s.tmp[0x1e] <+16>: int    $0x1f
36# CHECK-NEXT: (lldb) disassemble --start-address 0x4 --end-address 0x8
37# CHECK-NEXT: command-disassemble.s.tmp`foo:
38# CHECK-NEXT: command-disassemble.s.tmp[0x4] <+4>: int    $0x12
39# CHECK-NEXT: command-disassemble.s.tmp[0x6] <+6>: int    $0x13
40# CHECK-NEXT: (lldb) disassemble --start-address 0x8 --end-address 0x4
41# CHECK-NEXT: error: End address before start address.
42# CHECK-NEXT: (lldb) disassemble --address 0x0
43# CHECK-NEXT: command-disassemble.s.tmp`foo:
44# CHECK-NEXT: command-disassemble.s.tmp[0x0] <+0>:  int    $0x10
45# CHECK-NEXT: command-disassemble.s.tmp[0x2] <+2>:  int    $0x11
46# CHECK-NEXT: command-disassemble.s.tmp[0x4] <+4>:  int    $0x12
47# CHECK-NEXT: command-disassemble.s.tmp[0x6] <+6>:  int    $0x13
48# CHECK-NEXT: command-disassemble.s.tmp[0x8] <+8>:  int    $0x14
49# CHECK-NEXT: command-disassemble.s.tmp[0xa] <+10>: int    $0x15
50# CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>: int    $0x16
51# CHECK-NEXT: (lldb) disassemble --address 0xdeadb
52# CHECK-NEXT: error: Could not find function bounds for address 0xdeadb
53# CHECK-NEXT: (lldb) disassemble --address 0x100
54# CHECK-NEXT: error: Not disassembling the function because it is very large [0x0000000000000040-0x0000000000002040). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.
55# CHECK-NEXT: (lldb) disassemble --address 0x100 --count 3
56# CHECK-NEXT: command-disassemble.s.tmp`very_long:
57# CHECK-NEXT: command-disassemble.s.tmp[0x40] <+0>: int    $0x2a
58# CHECK-NEXT: command-disassemble.s.tmp[0x42] <+2>: int    $0x2a
59# CHECK-NEXT: command-disassemble.s.tmp[0x44] <+4>: int    $0x2a
60# CHECK-NEXT: (lldb) disassemble --address 0x100 --force
61# CHECK-NEXT: command-disassemble.s.tmp`very_long:
62# CHECK-NEXT: command-disassemble.s.tmp[0x40]   <+0>:    int    $0x2a
63# CHECK:      command-disassemble.s.tmp[0x203e] <+8190>: int    $0x2a
64# CHECK-NEXT: (lldb) disassemble --start-address 0x0 --count 7
65# CHECK-NEXT: command-disassemble.s.tmp`foo:
66# CHECK-NEXT: command-disassemble.s.tmp[0x0] <+0>:  int    $0x10
67# CHECK-NEXT: command-disassemble.s.tmp[0x2] <+2>:  int    $0x11
68# CHECK-NEXT: command-disassemble.s.tmp[0x4] <+4>:  int    $0x12
69# CHECK-NEXT: command-disassemble.s.tmp[0x6] <+6>:  int    $0x13
70# CHECK-NEXT: command-disassemble.s.tmp[0x8] <+8>:  int    $0x14
71# CHECK-NEXT: command-disassemble.s.tmp[0xa] <+10>: int    $0x15
72# CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>: int    $0x16
73# CHECK-NEXT: (lldb) disassemble --start-address 0x0 --end-address 0x20 --count 7
74# CHECK-NEXT: error: invalid combination of options for the given command
75# CHECK-NEXT: (lldb) disassemble --name case1
76# CHECK-NEXT: command-disassemble.s.tmp`n1::case1:
77# CHECK-NEXT: command-disassemble.s.tmp[0x2040] <+0>: int    $0x30
78# CHECK-EMPTY:
79# CHECK-NEXT: command-disassemble.s.tmp`n2::case1:
80# CHECK-NEXT: command-disassemble.s.tmp[0x2042] <+0>: int    $0x31
81# CHECK-EMPTY:
82# CHECK-NEXT: (lldb) disassemble --name case2
83# CHECK-NEXT: command-disassemble.s.tmp`n1::case2:
84# CHECK-NEXT: command-disassemble.s.tmp[0x2044] <+0>: int    $0x32
85# CHECK-NEXT: warning: Not disassembling a range because it is very large [0x0000000000002046-0x0000000000004046). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.
86# CHECK-NEXT: (lldb) disassemble --name case3
87# CHECK-NEXT: error: Not disassembling a range because it is very large [0x0000000000004046-0x0000000000006046). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.
88# CHECK-NEXT: Not disassembling a range because it is very large [0x0000000000006046-0x0000000000008046). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.
89# CHECK-NEXT: (lldb) disassemble --name case3 --count 3
90# CHECK-NEXT: command-disassemble.s.tmp`n1::case3:
91# CHECK-NEXT: command-disassemble.s.tmp[0x4046] <+0>: int    $0x2a
92# CHECK-NEXT: command-disassemble.s.tmp[0x4048] <+2>: int    $0x2a
93# CHECK-NEXT: command-disassemble.s.tmp[0x404a] <+4>: int    $0x2a
94# CHECK-EMPTY:
95# CHECK-NEXT: command-disassemble.s.tmp`n2::case3:
96# CHECK-NEXT: command-disassemble.s.tmp[0x6046] <+0>: int    $0x2a
97# CHECK-NEXT: command-disassemble.s.tmp[0x6048] <+2>: int    $0x2a
98# CHECK-NEXT: command-disassemble.s.tmp[0x604a] <+4>: int    $0x2a
99# CHECK-EMPTY:
100
101
102        .text
103foo:
104        int $0x10
105        int $0x11
106        int $0x12
107        int $0x13
108        int $0x14
109        int $0x15
110        int $0x16
111bar:
112        int $0x17
113        int $0x18
114        int $0x19
115        int $0x1a
116        int $0x1b
117        int $0x1c
118        int $0x1d
119        int $0x1e
120        int $0x1f
121        int $0x20
122        int $0x21
123        int $0x22
124        int $0x23
125        int $0x24
126        int $0x25
127        int $0x26
128        int $0x27
129        int $0x28
130        int $0x29
131        int $0x2a
132        int $0x2b
133        int $0x2c
134        int $0x2d
135        int $0x2e
136        int $0x2f
137
138very_long:
139        .rept 0x1000
140        int $42
141        .endr
142
143_ZN2n15case1Ev:
144        int $0x30
145
146_ZN2n25case1Ev:
147        int $0x31
148
149_ZN2n15case2Ev:
150        int $0x32
151
152_ZN2n25case2Ev:
153        .rept 0x1000
154        int $42
155        .endr
156
157_ZN2n15case3Ev:
158        .rept 0x1000
159        int $42
160        .endr
161
162_ZN2n25case3Ev:
163        .rept 0x1000
164        int $42
165        .endr
166