615 lines · plain
1# REQUIRES: bpf-registered-target2 3## Verify that when llvm-objdump uses .BTF.ext to show CO-RE4## relocations formatting options operate as expected.5 6# RUN: llvm-mc --triple bpfel %s --filetype=obj | \7# RUN: llvm-objdump --no-addresses --no-show-raw-insn -dr - | \8# RUN: FileCheck --strict-whitespace --check-prefix=NOADDR %s9 10# RUN: llvm-mc --triple bpfel %s --filetype=obj | \11# RUN: llvm-objdump --no-addresses --no-show-raw-insn -d - | \12# RUN: FileCheck --strict-whitespace --check-prefix=NORELO %s13 14# RUN: llvm-mc --triple bpfel %s --filetype=obj | \15# RUN: llvm-objdump --no-show-raw-insn -dr - | \16# RUN: FileCheck --strict-whitespace --check-prefix=ADDR %s17 18# RUN: llvm-mc --triple bpfel %s --filetype=obj | \19# RUN: llvm-objdump --adjust-vma=0x10 --no-show-raw-insn -dr - | \20# RUN: FileCheck --strict-whitespace --check-prefix=VMA %s21 22## Input generated from the following C code:23##24## #define __pai __attribute__((preserve_access_index))25## struct foo {26## int a;27## } __pai;28## enum bar { U, V };29## extern void consume(unsigned long);30## void root() {31## asm volatile("r0 = 42;":::);32## struct foo *foo = 0;33## consume(__builtin_preserve_type_info(*foo, 0));34## consume((unsigned long) &foo->a);35## consume(__builtin_preserve_enum_value(*(enum bar *)U, 0));36## }37##38## Using the following command:39##40## clang -target bpf -g -O2 -S t.c41 42# NOADDR: r1 = 0x143# NOADDR-NEXT: CO-RE <type_exists> [3] struct foo44# NOADDR-NEXT: call -0x145# NOADDR-NEXT: R_BPF_64_32 consume46# NOADDR-NEXT: r1 = 0x047# NOADDR-NEXT: CO-RE <byte_off> [3] struct foo::a (0:0)48# NOADDR-NEXT: call -0x149# NOADDR-NEXT: R_BPF_64_32 consume50# NOADDR-NEXT: r1 = 0x1 ll51# NOADDR-NEXT: CO-RE <enumval_exists> [8] enum bar::U = 052# NOADDR-NEXT: call -0x153# NOADDR-NEXT: R_BPF_64_32 consume54# NOADDR-NEXT: exit55 56# NORELO: r1 = 0x157# NORELO-NEXT: call -0x158# NORELO-NEXT: r1 = 0x059# NORELO-NEXT: call -0x160# NORELO-NEXT: r1 = 0x1 ll61# NORELO-NEXT: call -0x162# NORELO-NEXT: exit63 64# ADDR: 1: r1 = 0x165# ADDR-NEXT: 0000000000000008: CO-RE <type_exists> [3] struct foo66# ADDR-NEXT: 2: call -0x167# ADDR-NEXT: 0000000000000010: R_BPF_64_32 consume68# ADDR-NEXT: 3: r1 = 0x069# ADDR-NEXT: 0000000000000018: CO-RE <byte_off> [3] struct foo::a (0:0)70# ADDR-NEXT: 4: call -0x171# ADDR-NEXT: 0000000000000020: R_BPF_64_32 consume72# ADDR-NEXT: 5: r1 = 0x1 ll73# ADDR-NEXT: 0000000000000028: CO-RE <enumval_exists> [8] enum bar::U = 074# ADDR-NEXT: 7: call -0x175# ADDR-NEXT: 0000000000000038: R_BPF_64_32 consume76# ADDR-NEXT: 8: exit77 78# VMA: 3: r1 = 0x179# VMA-NEXT: 0000000000000018: CO-RE <type_exists> [3] struct foo80# VMA-NEXT: 4: call -0x181# VMA-NEXT: 0000000000000020: R_BPF_64_32 consume82# VMA-NEXT: 5: r1 = 0x083# VMA-NEXT: 0000000000000028: CO-RE <byte_off> [3] struct foo::a (0:0)84# VMA-NEXT: 6: call -0x185# VMA-NEXT: 0000000000000030: R_BPF_64_32 consume86# VMA-NEXT: 7: r1 = 0x1 ll87# VMA-NEXT: 0000000000000038: CO-RE <enumval_exists> [8] enum bar::U = 088# VMA-NEXT: 9: call -0x189# VMA-NEXT: 0000000000000048: R_BPF_64_32 consume90# VMA-NEXT: 10: exit91 92 .text93 .file "t.c"94 .file 0 "/home/eddy/work/tmp" "t.c" md5 0x7675be79a30f35c69b89cf826ff55a5f95 .globl root # -- Begin function root96 .p2align 397 .type root,@function98root: # @root99.Lfunc_begin0:100 .cfi_sections .debug_frame101 .cfi_startproc102# %bb.0: # %entry103 .loc 0 8 3 prologue_end # t.c:8:3104.Ltmp0:105 #APP106 r0 = 42107 108 #NO_APP109.Ltmp1:110.Ltmp2:111 #DEBUG_VALUE: root:foo <- 0112 .loc 0 10 3 # t.c:10:3113.Ltmp3:114.Ltmp4:115 r1 = 1116 call consume117.Ltmp5:118 .loc 0 11 3 # t.c:11:3119.Ltmp6:120.Ltmp7:121 r1 = 0122 call consume123.Ltmp8:124 .loc 0 12 3 # t.c:12:3125.Ltmp9:126.Ltmp10:127 r1 = 1 ll128 call consume129.Ltmp11:130 .loc 0 13 1 # t.c:13:1131.Ltmp12:132 exit133.Ltmp13:134.Ltmp14:135.Lfunc_end0:136 .size root, .Lfunc_end0-root137 .cfi_endproc138 # -- End function139 .section .debug_loclists,"",@progbits140 .long .Ldebug_list_header_end0-.Ldebug_list_header_start0 # Length141.Ldebug_list_header_start0:142 .short 5 # Version143 .byte 8 # Address size144 .byte 0 # Segment selector size145 .long 1 # Offset entry count146.Lloclists_table_base0:147 .long .Ldebug_loc0-.Lloclists_table_base0148.Ldebug_loc0:149 .byte 4 # DW_LLE_offset_pair150 .uleb128 .Ltmp1-.Lfunc_begin0 # starting offset151 .uleb128 .Lfunc_end0-.Lfunc_begin0 # ending offset152 .byte 2 # Loc expr size153 .byte 48 # DW_OP_lit0154 .byte 159 # DW_OP_stack_value155 .byte 0 # DW_LLE_end_of_list156.Ldebug_list_header_end0:157 .section .debug_abbrev,"",@progbits158 .byte 1 # Abbreviation Code159 .byte 17 # DW_TAG_compile_unit160 .byte 1 # DW_CHILDREN_yes161 .byte 37 # DW_AT_producer162 .byte 37 # DW_FORM_strx1163 .byte 19 # DW_AT_language164 .byte 5 # DW_FORM_data2165 .byte 3 # DW_AT_name166 .byte 37 # DW_FORM_strx1167 .byte 114 # DW_AT_str_offsets_base168 .byte 23 # DW_FORM_sec_offset169 .byte 16 # DW_AT_stmt_list170 .byte 23 # DW_FORM_sec_offset171 .byte 27 # DW_AT_comp_dir172 .byte 37 # DW_FORM_strx1173 .byte 17 # DW_AT_low_pc174 .byte 27 # DW_FORM_addrx175 .byte 18 # DW_AT_high_pc176 .byte 6 # DW_FORM_data4177 .byte 115 # DW_AT_addr_base178 .byte 23 # DW_FORM_sec_offset179 .ascii "\214\001" # DW_AT_loclists_base180 .byte 23 # DW_FORM_sec_offset181 .byte 0 # EOM(1)182 .byte 0 # EOM(2)183 .byte 2 # Abbreviation Code184 .byte 4 # DW_TAG_enumeration_type185 .byte 1 # DW_CHILDREN_yes186 .byte 73 # DW_AT_type187 .byte 19 # DW_FORM_ref4188 .byte 3 # DW_AT_name189 .byte 37 # DW_FORM_strx1190 .byte 11 # DW_AT_byte_size191 .byte 11 # DW_FORM_data1192 .byte 58 # DW_AT_decl_file193 .byte 11 # DW_FORM_data1194 .byte 59 # DW_AT_decl_line195 .byte 11 # DW_FORM_data1196 .byte 0 # EOM(1)197 .byte 0 # EOM(2)198 .byte 3 # Abbreviation Code199 .byte 40 # DW_TAG_enumerator200 .byte 0 # DW_CHILDREN_no201 .byte 3 # DW_AT_name202 .byte 37 # DW_FORM_strx1203 .byte 28 # DW_AT_const_value204 .byte 15 # DW_FORM_udata205 .byte 0 # EOM(1)206 .byte 0 # EOM(2)207 .byte 4 # Abbreviation Code208 .byte 36 # DW_TAG_base_type209 .byte 0 # DW_CHILDREN_no210 .byte 3 # DW_AT_name211 .byte 37 # DW_FORM_strx1212 .byte 62 # DW_AT_encoding213 .byte 11 # DW_FORM_data1214 .byte 11 # DW_AT_byte_size215 .byte 11 # DW_FORM_data1216 .byte 0 # EOM(1)217 .byte 0 # EOM(2)218 .byte 5 # Abbreviation Code219 .byte 46 # DW_TAG_subprogram220 .byte 1 # DW_CHILDREN_yes221 .byte 17 # DW_AT_low_pc222 .byte 27 # DW_FORM_addrx223 .byte 18 # DW_AT_high_pc224 .byte 6 # DW_FORM_data4225 .byte 64 # DW_AT_frame_base226 .byte 24 # DW_FORM_exprloc227 .byte 122 # DW_AT_call_all_calls228 .byte 25 # DW_FORM_flag_present229 .byte 3 # DW_AT_name230 .byte 37 # DW_FORM_strx1231 .byte 58 # DW_AT_decl_file232 .byte 11 # DW_FORM_data1233 .byte 59 # DW_AT_decl_line234 .byte 11 # DW_FORM_data1235 .byte 63 # DW_AT_external236 .byte 25 # DW_FORM_flag_present237 .byte 0 # EOM(1)238 .byte 0 # EOM(2)239 .byte 6 # Abbreviation Code240 .byte 52 # DW_TAG_variable241 .byte 0 # DW_CHILDREN_no242 .byte 2 # DW_AT_location243 .byte 34 # DW_FORM_loclistx244 .byte 3 # DW_AT_name245 .byte 37 # DW_FORM_strx1246 .byte 58 # DW_AT_decl_file247 .byte 11 # DW_FORM_data1248 .byte 59 # DW_AT_decl_line249 .byte 11 # DW_FORM_data1250 .byte 73 # DW_AT_type251 .byte 19 # DW_FORM_ref4252 .byte 0 # EOM(1)253 .byte 0 # EOM(2)254 .byte 7 # Abbreviation Code255 .byte 72 # DW_TAG_call_site256 .byte 0 # DW_CHILDREN_no257 .byte 127 # DW_AT_call_origin258 .byte 19 # DW_FORM_ref4259 .byte 125 # DW_AT_call_return_pc260 .byte 27 # DW_FORM_addrx261 .byte 0 # EOM(1)262 .byte 0 # EOM(2)263 .byte 8 # Abbreviation Code264 .byte 46 # DW_TAG_subprogram265 .byte 1 # DW_CHILDREN_yes266 .byte 3 # DW_AT_name267 .byte 37 # DW_FORM_strx1268 .byte 58 # DW_AT_decl_file269 .byte 11 # DW_FORM_data1270 .byte 59 # DW_AT_decl_line271 .byte 11 # DW_FORM_data1272 .byte 39 # DW_AT_prototyped273 .byte 25 # DW_FORM_flag_present274 .byte 60 # DW_AT_declaration275 .byte 25 # DW_FORM_flag_present276 .byte 63 # DW_AT_external277 .byte 25 # DW_FORM_flag_present278 .byte 0 # EOM(1)279 .byte 0 # EOM(2)280 .byte 9 # Abbreviation Code281 .byte 5 # DW_TAG_formal_parameter282 .byte 0 # DW_CHILDREN_no283 .byte 73 # DW_AT_type284 .byte 19 # DW_FORM_ref4285 .byte 0 # EOM(1)286 .byte 0 # EOM(2)287 .byte 10 # Abbreviation Code288 .byte 15 # DW_TAG_pointer_type289 .byte 0 # DW_CHILDREN_no290 .byte 73 # DW_AT_type291 .byte 19 # DW_FORM_ref4292 .byte 0 # EOM(1)293 .byte 0 # EOM(2)294 .byte 11 # Abbreviation Code295 .byte 19 # DW_TAG_structure_type296 .byte 1 # DW_CHILDREN_yes297 .byte 3 # DW_AT_name298 .byte 37 # DW_FORM_strx1299 .byte 11 # DW_AT_byte_size300 .byte 11 # DW_FORM_data1301 .byte 58 # DW_AT_decl_file302 .byte 11 # DW_FORM_data1303 .byte 59 # DW_AT_decl_line304 .byte 11 # DW_FORM_data1305 .byte 0 # EOM(1)306 .byte 0 # EOM(2)307 .byte 12 # Abbreviation Code308 .byte 13 # DW_TAG_member309 .byte 0 # DW_CHILDREN_no310 .byte 3 # DW_AT_name311 .byte 37 # DW_FORM_strx1312 .byte 73 # DW_AT_type313 .byte 19 # DW_FORM_ref4314 .byte 58 # DW_AT_decl_file315 .byte 11 # DW_FORM_data1316 .byte 59 # DW_AT_decl_line317 .byte 11 # DW_FORM_data1318 .byte 56 # DW_AT_data_member_location319 .byte 11 # DW_FORM_data1320 .byte 0 # EOM(1)321 .byte 0 # EOM(2)322 .byte 0 # EOM(3)323 .section .debug_info,"",@progbits324.Lcu_begin0:325 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit326.Ldebug_info_start0:327 .short 5 # DWARF version number328 .byte 1 # DWARF Unit Type329 .byte 8 # Address Size (in bytes)330 .long .debug_abbrev # Offset Into Abbrev. Section331 .byte 1 # Abbrev [1] 0xc:0x7d DW_TAG_compile_unit332 .byte 0 # DW_AT_producer333 .short 29 # DW_AT_language334 .byte 1 # DW_AT_name335 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base336 .long .Lline_table_start0 # DW_AT_stmt_list337 .byte 2 # DW_AT_comp_dir338 .byte 0 # DW_AT_low_pc339 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc340 .long .Laddr_table_base0 # DW_AT_addr_base341 .long .Lloclists_table_base0 # DW_AT_loclists_base342 .byte 2 # Abbrev [2] 0x27:0x10 DW_TAG_enumeration_type343 .long 55 # DW_AT_type344 .byte 6 # DW_AT_name345 .byte 4 # DW_AT_byte_size346 .byte 0 # DW_AT_decl_file347 .byte 5 # DW_AT_decl_line348 .byte 3 # Abbrev [3] 0x30:0x3 DW_TAG_enumerator349 .byte 4 # DW_AT_name350 .byte 0 # DW_AT_const_value351 .byte 3 # Abbrev [3] 0x33:0x3 DW_TAG_enumerator352 .byte 5 # DW_AT_name353 .byte 1 # DW_AT_const_value354 .byte 0 # End Of Children Mark355 .byte 4 # Abbrev [4] 0x37:0x4 DW_TAG_base_type356 .byte 3 # DW_AT_name357 .byte 7 # DW_AT_encoding358 .byte 4 # DW_AT_byte_size359 .byte 4 # Abbrev [4] 0x3b:0x4 DW_TAG_base_type360 .byte 7 # DW_AT_name361 .byte 7 # DW_AT_encoding362 .byte 8 # DW_AT_byte_size363 .byte 5 # Abbrev [5] 0x3f:0x27 DW_TAG_subprogram364 .byte 0 # DW_AT_low_pc365 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc366 .byte 1 # DW_AT_frame_base367 .byte 90368 # DW_AT_call_all_calls369 .byte 9 # DW_AT_name370 .byte 0 # DW_AT_decl_file371 .byte 7 # DW_AT_decl_line372 # DW_AT_external373 .byte 6 # Abbrev [6] 0x4a:0x9 DW_TAG_variable374 .byte 0 # DW_AT_location375 .byte 10 # DW_AT_name376 .byte 0 # DW_AT_decl_file377 .byte 9 # DW_AT_decl_line378 .long 112 # DW_AT_type379 .byte 7 # Abbrev [7] 0x53:0x6 DW_TAG_call_site380 .long 102 # DW_AT_call_origin381 .byte 1 # DW_AT_call_return_pc382 .byte 7 # Abbrev [7] 0x59:0x6 DW_TAG_call_site383 .long 102 # DW_AT_call_origin384 .byte 2 # DW_AT_call_return_pc385 .byte 7 # Abbrev [7] 0x5f:0x6 DW_TAG_call_site386 .long 102 # DW_AT_call_origin387 .byte 3 # DW_AT_call_return_pc388 .byte 0 # End Of Children Mark389 .byte 8 # Abbrev [8] 0x66:0xa DW_TAG_subprogram390 .byte 8 # DW_AT_name391 .byte 0 # DW_AT_decl_file392 .byte 6 # DW_AT_decl_line393 # DW_AT_prototyped394 # DW_AT_declaration395 # DW_AT_external396 .byte 9 # Abbrev [9] 0x6a:0x5 DW_TAG_formal_parameter397 .long 59 # DW_AT_type398 .byte 0 # End Of Children Mark399 .byte 10 # Abbrev [10] 0x70:0x5 DW_TAG_pointer_type400 .long 117 # DW_AT_type401 .byte 11 # Abbrev [11] 0x75:0xf DW_TAG_structure_type402 .byte 10 # DW_AT_name403 .byte 4 # DW_AT_byte_size404 .byte 0 # DW_AT_decl_file405 .byte 2 # DW_AT_decl_line406 .byte 12 # Abbrev [12] 0x7a:0x9 DW_TAG_member407 .byte 11 # DW_AT_name408 .long 132 # DW_AT_type409 .byte 0 # DW_AT_decl_file410 .byte 3 # DW_AT_decl_line411 .byte 0 # DW_AT_data_member_location412 .byte 0 # End Of Children Mark413 .byte 4 # Abbrev [4] 0x84:0x4 DW_TAG_base_type414 .byte 12 # DW_AT_name415 .byte 5 # DW_AT_encoding416 .byte 4 # DW_AT_byte_size417 .byte 0 # End Of Children Mark418.Ldebug_info_end0:419 .section .debug_str_offsets,"",@progbits420 .long 56 # Length of String Offsets Set421 .short 5422 .short 0423.Lstr_offsets_base0:424 .section .debug_str,"MS",@progbits,1425.Linfo_string0:426 .asciz "clang version 17.0.0 (/home/eddy/work/llvm-project/clang 76d673bb89f8ec8cf65a4294a98a83c9d6646b11)" # string offset=0427.Linfo_string1:428 .asciz "t.c" # string offset=99429.Linfo_string2:430 .asciz "/home/eddy/work/tmp" # string offset=103431.Linfo_string3:432 .asciz "unsigned int" # string offset=123433.Linfo_string4:434 .asciz "U" # string offset=136435.Linfo_string5:436 .asciz "V" # string offset=138437.Linfo_string6:438 .asciz "bar" # string offset=140439.Linfo_string7:440 .asciz "unsigned long" # string offset=144441.Linfo_string8:442 .asciz "consume" # string offset=158443.Linfo_string9:444 .asciz "root" # string offset=166445.Linfo_string10:446 .asciz "foo" # string offset=171447.Linfo_string11:448 .asciz "a" # string offset=175449.Linfo_string12:450 .asciz "int" # string offset=177451 .section .debug_str_offsets,"",@progbits452 .long .Linfo_string0453 .long .Linfo_string1454 .long .Linfo_string2455 .long .Linfo_string3456 .long .Linfo_string4457 .long .Linfo_string5458 .long .Linfo_string6459 .long .Linfo_string7460 .long .Linfo_string8461 .long .Linfo_string9462 .long .Linfo_string10463 .long .Linfo_string11464 .long .Linfo_string12465 .section .debug_addr,"",@progbits466 .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution467.Ldebug_addr_start0:468 .short 5 # DWARF version number469 .byte 8 # Address size470 .byte 0 # Segment selector size471.Laddr_table_base0:472 .quad .Lfunc_begin0473 .quad .Ltmp5474 .quad .Ltmp8475 .quad .Ltmp11476.Ldebug_addr_end0:477 .section .BTF,"",@progbits478 .short 60319 # 0xeb9f479 .byte 1480 .byte 0481 .long 24482 .long 0483 .long 140484 .long 140485 .long 262486 .long 0 # BTF_KIND_FUNC_PROTO(id = 1)487 .long 218103808 # 0xd000000488 .long 0489 .long 1 # BTF_KIND_FUNC(id = 2)490 .long 201326593 # 0xc000001491 .long 1492 .long 67 # BTF_KIND_STRUCT(id = 3)493 .long 67108865 # 0x4000001494 .long 4495 .long 71496 .long 4497 .long 0 # 0x0498 .long 73 # BTF_KIND_INT(id = 4)499 .long 16777216 # 0x1000000500 .long 4501 .long 16777248 # 0x1000020502 .long 0 # BTF_KIND_FUNC_PROTO(id = 5)503 .long 218103809 # 0xd000001504 .long 0505 .long 0506 .long 6507 .long 129 # BTF_KIND_INT(id = 6)508 .long 16777216 # 0x1000000509 .long 8510 .long 64 # 0x40511 .long 143 # BTF_KIND_FUNC(id = 7)512 .long 201326594 # 0xc000002513 .long 5514 .long 191 # BTF_KIND_ENUM(id = 8)515 .long 100663298 # 0x6000002516 .long 4517 .long 195518 .long 0519 .long 197520 .long 1521 .byte 0 # string offset=0522 .ascii "root" # string offset=1523 .byte 0524 .ascii ".text" # string offset=6525 .byte 0526 .ascii "/home/eddy/work/tmp/t.c" # string offset=12527 .byte 0528 .ascii " asm volatile(\"r0 = 42;\":::);" # string offset=36529 .byte 0530 .ascii "foo" # string offset=67531 .byte 0532 .byte 97 # string offset=71533 .byte 0534 .ascii "int" # string offset=73535 .byte 0536 .byte 48 # string offset=77537 .byte 0538 .ascii " consume(__builtin_preserve_type_info(*foo, 0));" # string offset=79539 .byte 0540 .ascii "unsigned long" # string offset=129541 .byte 0542 .ascii "consume" # string offset=143543 .byte 0544 .ascii "0:0" # string offset=151545 .byte 0546 .ascii " consume((unsigned long) &foo->a);" # string offset=155547 .byte 0548 .ascii "bar" # string offset=191549 .byte 0550 .byte 85 # string offset=195551 .byte 0552 .byte 86 # string offset=197553 .byte 0554 .ascii " consume(__builtin_preserve_enum_value(*(enum bar *)U, 0));" # string offset=199555 .byte 0556 .byte 125 # string offset=260557 .byte 0558 .section .BTF.ext,"",@progbits559 .short 60319 # 0xeb9f560 .byte 1561 .byte 0562 .long 32563 .long 0564 .long 20565 .long 20566 .long 92567 .long 112568 .long 60569 .long 8 # FuncInfo570 .long 6 # FuncInfo section string offset=6571 .long 1572 .long .Lfunc_begin0573 .long 2574 .long 16 # LineInfo575 .long 6 # LineInfo section string offset=6576 .long 5577 .long .Ltmp0578 .long 12579 .long 36580 .long 8195 # Line 8 Col 3581 .long .Ltmp4582 .long 12583 .long 79584 .long 10243 # Line 10 Col 3585 .long .Ltmp7586 .long 12587 .long 155588 .long 11267 # Line 11 Col 3589 .long .Ltmp10590 .long 12591 .long 199592 .long 12291 # Line 12 Col 3593 .long .Ltmp12594 .long 12595 .long 260596 .long 13313 # Line 13 Col 1597 .long 16 # FieldReloc598 .long 6 # Field reloc section string offset=6599 .long 3600 .long .Ltmp3601 .long 3602 .long 77603 .long 8604 .long .Ltmp6605 .long 3606 .long 151607 .long 0608 .long .Ltmp9609 .long 8610 .long 77611 .long 10612 .addrsig613 .section .debug_line,"",@progbits614.Lline_table_start0:615