262 lines · plain
1# REQUIRES: x862 3# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux %s -o %t4# 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 %s7 8# CHECK: (lldb) disassemble9# CHECK-NEXT: error: Cannot disassemble around the current function without a selected frame: no currently running process.10# CHECK-NEXT: (lldb) disassemble --line11# CHECK-NEXT: error: Cannot disassemble around the current line without a selected frame: no currently running process.12# CHECK-NEXT: (lldb) disassemble --frame13# CHECK-NEXT: error: Cannot disassemble around the current function without a selected frame: no currently running process.14# CHECK-NEXT: (lldb) disassemble --pc15# CHECK-NEXT: error: Cannot disassemble around the current PC without a selected frame: no currently running process.16# CHECK-NEXT: (lldb) disassemble --start-address 0x017# CHECK-NEXT: command-disassemble.s.tmp`foo:18# CHECK-NEXT: command-disassemble.s.tmp[0x0] <+0>: jmp 0x2 ; <+2>19# CHECK-NEXT: command-disassemble.s.tmp[0x2] <+2>: int $0x1120# CHECK-NEXT: command-disassemble.s.tmp[0x4] <+4>: int $0x1221# CHECK-NEXT: command-disassemble.s.tmp[0x6] <+6>: int $0x1322# CHECK-NEXT: command-disassemble.s.tmp[0x8] <+8>: int $0x1423# CHECK-NEXT: command-disassemble.s.tmp[0xa] <+10>: int $0x1524# CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>: int $0x1625# CHECK-EMPTY:26# CHECK-NEXT: command-disassemble.s.tmp`bar:27# CHECK-NEXT: command-disassemble.s.tmp[0xe] <+0>: int $0x1728# CHECK-NEXT: command-disassemble.s.tmp[0x10] <+2>: int $0x1829# CHECK-NEXT: command-disassemble.s.tmp[0x12] <+4>: int $0x1930# CHECK-NEXT: command-disassemble.s.tmp[0x14] <+6>: int $0x1a31# CHECK-NEXT: command-disassemble.s.tmp[0x16] <+8>: int $0x1b32# CHECK-NEXT: command-disassemble.s.tmp[0x18] <+10>: int $0x1c33# CHECK-NEXT: command-disassemble.s.tmp[0x1a] <+12>: int $0x1d34# CHECK-NEXT: command-disassemble.s.tmp[0x1c] <+14>: int $0x1e35# CHECK-NEXT: command-disassemble.s.tmp[0x1e] <+16>: int $0x1f36# CHECK-NEXT: (lldb) disassemble --start-address 0x4 --end-address 0x837# CHECK-NEXT: command-disassemble.s.tmp`foo:38# CHECK-NEXT: command-disassemble.s.tmp[0x4] <+4>: int $0x1239# CHECK-NEXT: command-disassemble.s.tmp[0x6] <+6>: int $0x1340# CHECK-NEXT: (lldb) disassemble --start-address 0x8 --end-address 0x441# CHECK-NEXT: error: End address before start address.42# CHECK-NEXT: (lldb) disassemble --address 0x043# CHECK-NEXT: command-disassemble.s.tmp`foo:44# CHECK-NEXT: command-disassemble.s.tmp[0x0] <+0>: jmp 0x2 ; <+2>45# CHECK-NEXT: command-disassemble.s.tmp[0x2] <+2>: int $0x1146# CHECK-NEXT: command-disassemble.s.tmp[0x4] <+4>: int $0x1247# CHECK-NEXT: command-disassemble.s.tmp[0x6] <+6>: int $0x1348# CHECK-NEXT: command-disassemble.s.tmp[0x8] <+8>: int $0x1449# CHECK-NEXT: command-disassemble.s.tmp[0xa] <+10>: int $0x1550# CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>: int $0x1651# CHECK-NEXT: (lldb) disassemble --address 0xdeadb52# CHECK-NEXT: error: Could not find function bounds for address 0xdeadb53# CHECK-NEXT: (lldb) disassemble --address 0x10054# 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 356# CHECK-NEXT: command-disassemble.s.tmp`very_long:57# CHECK-NEXT: command-disassemble.s.tmp[0x40] <+0>: int $0x2a58# CHECK-NEXT: command-disassemble.s.tmp[0x42] <+2>: int $0x2a59# CHECK-NEXT: command-disassemble.s.tmp[0x44] <+4>: int $0x2a60# CHECK-NEXT: (lldb) disassemble --address 0x100 --force61# CHECK-NEXT: command-disassemble.s.tmp`very_long:62# CHECK-NEXT: command-disassemble.s.tmp[0x40] <+0>: int $0x2a63# CHECK: command-disassemble.s.tmp[0x203e] <+8190>: int $0x2a64# CHECK-NEXT: (lldb) disassemble --start-address 0x0 --count 765# CHECK-NEXT: command-disassemble.s.tmp`foo:66# CHECK-NEXT: command-disassemble.s.tmp[0x0] <+0>: jmp 0x2 ; <+2>67# CHECK-NEXT: command-disassemble.s.tmp[0x2] <+2>: int $0x1168# CHECK-NEXT: command-disassemble.s.tmp[0x4] <+4>: int $0x1269# CHECK-NEXT: command-disassemble.s.tmp[0x6] <+6>: int $0x1370# CHECK-NEXT: command-disassemble.s.tmp[0x8] <+8>: int $0x1471# CHECK-NEXT: command-disassemble.s.tmp[0xa] <+10>: int $0x1572# CHECK-NEXT: command-disassemble.s.tmp[0xc] <+12>: int $0x1673# CHECK-NEXT: (lldb) disassemble --start-address 0x0 --end-address 0x20 --count 774# CHECK-NEXT: error: invalid combination of options for the given command75# CHECK-NEXT: (lldb) disassemble --name case176# CHECK-NEXT: command-disassemble.s.tmp`n1::case1:77# CHECK-NEXT: command-disassemble.s.tmp[0x2040] <+0>: int $0x3078# CHECK-EMPTY:79# CHECK-NEXT: command-disassemble.s.tmp`n2::case1:80# CHECK-NEXT: command-disassemble.s.tmp[0x2042] <+0>: int $0x3181# CHECK-EMPTY:82# CHECK-NEXT: (lldb) disassemble --name case283# CHECK-NEXT: command-disassemble.s.tmp`n1::case2:84# CHECK-NEXT: command-disassemble.s.tmp[0x2044] <+0>: int $0x3285# CHECK-NEXT: warning: Not disassembling a function 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 case387# CHECK-NEXT: error: Not disassembling a function because it is very large [0x0000000000006046-0x0000000000007046)[0x0000000000009046-0x000000000000a050). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.88# CHECK-NEXT: Not disassembling a function because it is very large [0x0000000000004046-0x0000000000006046). To disassemble specify an instruction count limit, start/stop addresses or use the --force option.89# CHECK-NEXT: (lldb) disassemble --name case3 --count 390# CHECK-NEXT: command-disassemble.s.tmp`n2::case3:91# CHECK-NEXT: command-disassemble.s.tmp[0x6046] <-12288>: int $0x2a92# CHECK-NEXT: command-disassemble.s.tmp[0x6048] <-12286>: int $0x2a93# CHECK-NEXT: command-disassemble.s.tmp[0x604a] <-12284>: int $0x2a94# CHECK-EMPTY:95# CHECK-NEXT: command-disassemble.s.tmp`n2::case3:96# CHECK-NEXT: command-disassemble.s.tmp[0x9046] <+0>: jmp 0x6046 ; <-12288>97# CHECK-NEXT: command-disassemble.s.tmp[0x904b] <+5>: jmp 0x7046 ; middle_of_case398# CHECK-NEXT: command-disassemble.s.tmp[0x9050] <+10>: int $0x2a99# CHECK-EMPTY:100# CHECK-NEXT: command-disassemble.s.tmp`n1::case3:101# CHECK-NEXT: command-disassemble.s.tmp[0x4046] <+0>: int $0x2a102# CHECK-NEXT: command-disassemble.s.tmp[0x4048] <+2>: int $0x2a103# CHECK-NEXT: command-disassemble.s.tmp[0x404a] <+4>: int $0x2a104# CHECK-EMPTY:105 106 107 .text108foo:109 jmp 1f1101: int $0x11111 int $0x12112 int $0x13113 int $0x14114 int $0x15115 int $0x16116bar:117 int $0x17118 int $0x18119 int $0x19120 int $0x1a121 int $0x1b122 int $0x1c123 int $0x1d124 int $0x1e125 int $0x1f126 int $0x20127 int $0x21128 int $0x22129 int $0x23130 int $0x24131 int $0x25132 int $0x26133 int $0x27134 int $0x28135 int $0x29136 int $0x2a137 int $0x2b138 int $0x2c139 int $0x2d140 int $0x2e141 int $0x2f142 143very_long:144 .rept 0x1000145 int $42146 .endr147 148_ZN2n15case1Ev:149 int $0x30150 151_ZN2n25case1Ev:152 int $0x31153 154_ZN2n15case2Ev:155 int $0x32156 157_ZN2n25case2Ev:158 .rept 0x1000159 int $42160 .endr161 162_ZN2n15case3Ev:163 .rept 0x1000164 int $42165 .endr166 .size _ZN2n15case3Ev, .-_ZN2n15case3Ev167 168.L_ZN2n25case3Ev.__part.1:169 .rept 0x800170 int $42171 .endr172.L_ZN2n25case3Ev.__part.1_end:173 174middle_of_case3:175 .rept 0x1000176 int $42177 .endr178 179_ZN2n25case3Ev:180 jmp .L_ZN2n25case3Ev.__part.1181 jmp middle_of_case3182 .rept 0x800183 int $42184 .endr185.L_ZN2n25case3Ev_end:186 187 .section .debug_abbrev,"",@progbits188 .byte 1 # Abbreviation Code189 .byte 17 # DW_TAG_compile_unit190 .byte 1 # DW_CHILDREN_yes191 .byte 37 # DW_AT_producer192 .byte 8 # DW_FORM_string193 .byte 19 # DW_AT_language194 .byte 5 # DW_FORM_data2195 .byte 17 # DW_AT_low_pc196 .byte 1 # DW_FORM_addr197 .byte 85 # DW_AT_ranges198 .byte 23 # DW_FORM_sec_offset199 .byte 0 # EOM(1)200 .byte 0 # EOM(2)201 .byte 2 # Abbreviation Code202 .byte 57 # DW_TAG_namespace203 .byte 1 # DW_CHILDREN_yes204 .byte 3 # DW_AT_name205 .byte 8 # DW_FORM_string206 .byte 0 # EOM(1)207 .byte 0 # EOM(2)208 .byte 3 # Abbreviation Code209 .byte 46 # DW_TAG_subprogram210 .byte 0 # DW_CHILDREN_no211 .byte 85 # DW_AT_ranges212 .byte 23 # DW_FORM_sec_offset213 .byte 3 # DW_AT_name214 .byte 8 # DW_FORM_string215 .byte 110 # DW_AT_linkage_name216 .byte 8 # DW_FORM_string217 .byte 0 # EOM(1)218 .byte 0 # EOM(2)219 .byte 0 # EOM(3)220 221 .section .debug_info,"",@progbits222.Lcu_begin0:223 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit224.Ldebug_info_start0:225 .short 5 # DWARF version number226 .byte 1 # DWARF Unit Type227 .byte 8 # Address Size (in bytes)228 .long .debug_abbrev # Offset Into Abbrev. Section229 .byte 1 # Abbrev DW_TAG_compile_unit230 .asciz "Hand-written DWARF" # DW_AT_producer231 .short 29 # DW_AT_language232 .quad 0 # DW_AT_low_pc233 .long .Ldebug_ranges0 # DW_AT_ranges234 .byte 2 # Abbrev DW_TAG_namespace235 .asciz "n2" # DW_AT_name236 .byte 3 # Abbrev DW_TAG_subprogram237 .long .Ldebug_ranges0 # DW_AT_ranges238 .asciz "case3" # DW_AT_name239 .asciz "_ZN2n25case3Ev" # DW_AT_linkage_name240 .byte 0 # End Of Children Mark241 .byte 0 # End Of Children Mark242.Ldebug_info_end0:243 244 .section .debug_rnglists,"",@progbits245 .long .Ldebug_list_header_end0-.Ldebug_list_header_start0 # Length246.Ldebug_list_header_start0:247 .short 5 # Version248 .byte 8 # Address size249 .byte 0 # Segment selector size250 .long 2 # Offset entry count251.Lrnglists_table_base0:252 .long .Ldebug_ranges0-.Lrnglists_table_base0253.Ldebug_ranges0:254 .byte 6 # DW_RLE_start_end255 .quad _ZN2n25case3Ev256 .quad .L_ZN2n25case3Ev_end257 .byte 6 # DW_RLE_start_end258 .quad .L_ZN2n25case3Ev.__part.1259 .quad .L_ZN2n25case3Ev.__part.1_end260 .byte 0 # DW_RLE_end_of_list261.Ldebug_list_header_end0:262