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