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