[LLVMdev] [lldb-dev] How is variable info retrieved in debugging for executables generated by llvm backend?

杨勇勇 triple.yang at gmail.com
Tue Feb 18 23:10:52 PST 2014


Sorry, this is the attachment.


2014-02-19 15:08 GMT+08:00 杨勇勇 <triple.yang at gmail.com>:

> Thank you.
>
> Here is an example and the attchment contains extra files including object
> file and executable file.
> I want to print for example the value of "a", but lldb command "frame
> variable a" displays "0" and so does "b", and "c".
> Meanwhile, the value is correct if I directly check registers or memory.
>
> Following content is composed of three part:
> 1. C program.
> 2. assembly file including directives of dwarf debug info.
> 3. dwarf debug info dumpped from executable file with llvm-dwarfdump.
>
>
> ///////////////////////////////////////////////////////////////////////////////////////////
> // C
> int
> main(int argc, char *argv[])
> {
>   int a = 11;
>   int b = 22;
>   int c = a+b;
>   return c;
> }
>
> ######################################
> # asm including dwarf debugging info
> .file "test.c"
> .section .debug_info,"", at progbits
> Lsection_info:
> .section .debug_abbrev,"", at progbits
> Lsection_abbrev:
> .section .debug_aranges,"", at progbits
>  .section .debug_macinfo,"", at progbits
> .section .debug_line,"", at progbits
> Lsection_line:
> .section .debug_loc,"", at progbits
> .section .debug_pubtypes,"", at progbits
>  .section .debug_str,"MS", at progbits,1
> Linfo_string:
> .section .debug_ranges,"", at progbits
> Ldebug_range:
> .section .debug_loc,"", at progbits
> Lsection_debug_loc:
> .text
> Ltext_begin:
> .data
> .file 1 "test.c"
>  .text
> .global main
> .type main, at function
> main:                                   # @main
> Lfunc_begin0:
> .loc 1 3 0                   # test.c:3:0
> # BB#0:                                 # %entry
> .loc 1 2 0 prologue_end      # test.c:2:0
> [SP + -4] = FP;;
>  [SP + -8] = J30;;
> FP = SP;;
> J31 = -40;;
> SP = SP + J31;;
>  #DEBUG_VALUE: main:argc <- undef
> #DEBUG_VALUE: main:argv <- undef
> R2 = 0;;
>  R3 = 11;;
> [FP + -12] = R2;;
> [FP + -16] = R0;;
>  [FP + -20] = R1;;
> .loc 1 4 0                   # test.c:4:0
> [FP + -24] = R3;;
>  R2 = 22;;
> .loc 1 5 0                   # test.c:5:0
> [FP + -28] = R2;;
>  .loc 1 6 0                   # test.c:6:0
> R3 = [FP + -24];;
>  R2 = R3 + R2 (T);;
> [FP + -32] = R2;;
> .loc 1 7 0                   # test.c:7:0
>  [FP + -36] = R0;;
> R0 = R2;;
> [FP + -40] = R1;;
>  SP = FP;;
> J30 = [SP + -8];;
> FP = [SP + -4];;
> jump J30;;
> Ltmp0:
> Ltmp1:
> .size main, Ltmp1-main
> Lfunc_end0:
>
> Ltext_end:
>  .data
> Ldata_end:
> .text
> Lsection_end1:
> .section .debug_info,"", at progbits
> L.debug_info_begin0:
> .int 148                     # Length of Compilation Unit Info
> .short 2                       # DWARF version number
>  .int L.debug_abbrev_begin    # Offset Into Abbrev. Section
> .byte 4                       # Address Size (in bytes)
>  .byte 1                       # Abbrev [1] 0xb:0x8d DW_TAG_compile_unit
> .int Linfo_string0           # DW_AT_producer
>  .short 12                      # DW_AT_language
> .int Linfo_string1           # DW_AT_name
>  .int 0                       # DW_AT_low_pc
> .int Lsection_line           # DW_AT_stmt_list
>  .int Linfo_string2           # DW_AT_comp_dir
> .byte 2                       # Abbrev [2] 0x22:0x5d DW_TAG_subprogram
>  .int Linfo_string3           # DW_AT_name
> .byte 1                       # DW_AT_decl_file
>  .byte 2                       # DW_AT_decl_line
>                                         # DW_AT_prototyped
>  .int 127                     # DW_AT_type
>                                         # DW_AT_external
> .int Lfunc_begin0            # DW_AT_low_pc
>  .int Lfunc_end0              # DW_AT_high_pc
> .byte 2                       # DW_AT_frame_base
>  .byte 144
> .byte 60
>  .byte 3                       # Abbrev [3] 0x38:0xe
> DW_TAG_formal_parameter
> .int Linfo_string5           # DW_AT_name
>  .byte 1                       # DW_AT_decl_file
> .byte 2                       # DW_AT_decl_line
>  .int 127                     # DW_AT_type
> .byte 2                       # DW_AT_location
>  .byte 145
> .byte 24
>  .byte 3                       # Abbrev [3] 0x46:0xe
> DW_TAG_formal_parameter
> .int Linfo_string6           # DW_AT_name
>  .byte 1                       # DW_AT_decl_file
> .byte 2                       # DW_AT_decl_line
>  .int 146                     # DW_AT_type
> .byte 2                       # DW_AT_location
>  .byte 145
> .byte 20
>  .byte 4                       # Abbrev [4] 0x54:0xe DW_TAG_variable
> .int Linfo_string8           # DW_AT_name
>  .byte 1                       # DW_AT_decl_file
> .byte 4                       # DW_AT_decl_line
>  .int 127                     # DW_AT_type
> .byte 2                       # DW_AT_location
>  .byte 145
> .byte 16
>  .byte 4                       # Abbrev [4] 0x62:0xe DW_TAG_variable
> .int Linfo_string9           # DW_AT_name
>  .byte 1                       # DW_AT_decl_file
> .byte 5                       # DW_AT_decl_line
>  .int 127                     # DW_AT_type
> .byte 2                       # DW_AT_location
>  .byte 145
> .byte 12
>  .byte 4                       # Abbrev [4] 0x70:0xe DW_TAG_variable
> .int Linfo_string10          # DW_AT_name
>  .byte 1                       # DW_AT_decl_file
> .byte 6                       # DW_AT_decl_line
>  .int 127                     # DW_AT_type
> .byte 2                       # DW_AT_location
>  .byte 145
> .byte 8
>  .byte 0                       # End Of Children Mark
> .byte 5                       # Abbrev [5] 0x7f:0x7 DW_TAG_base_type
>  .int Linfo_string4           # DW_AT_name
> .byte 5                       # DW_AT_encoding
>  .byte 4                       # DW_AT_byte_size
> .byte 5                       # Abbrev [5] 0x86:0x7 DW_TAG_base_type
>  .int Linfo_string7           # DW_AT_name
> .byte 6                       # DW_AT_encoding
>  .byte 1                       # DW_AT_byte_size
> .byte 6                       # Abbrev [6] 0x8d:0x5 DW_TAG_pointer_type
>  .int 134                     # DW_AT_type
> .byte 6                       # Abbrev [6] 0x92:0x5 DW_TAG_pointer_type
>  .int 141                     # DW_AT_type
> .byte 0                       # End Of Children Mark
> L.debug_info_end0:
> .section .debug_abbrev,"", at progbits
> L.debug_abbrev_begin:
> .byte 1                       # Abbreviation Code
>  .byte 17                      # DW_TAG_compile_unit
> .byte 1                       # DW_CHILDREN_yes
>  .byte 37                      # DW_AT_producer
> .byte 14                      # DW_FORM_strp
>  .byte 19                      # DW_AT_language
> .byte 5                       # DW_FORM_data2
>  .byte 3                       # DW_AT_name
> .byte 14                      # DW_FORM_strp
>  .byte 17                      # DW_AT_low_pc
> .byte 1                       # DW_FORM_addr
>  .byte 16                      # DW_AT_stmt_list
> .byte 6                       # DW_FORM_data4
>  .byte 27                      # DW_AT_comp_dir
> .byte 14                      # DW_FORM_strp
>  .byte 0                       # EOM(1)
> .byte 0                       # EOM(2)
>  .byte 2                       # Abbreviation Code
> .byte 46                      # DW_TAG_subprogram
>  .byte 1                       # DW_CHILDREN_yes
> .byte 3                       # DW_AT_name
>  .byte 14                      # DW_FORM_strp
> .byte 58                      # DW_AT_decl_file
>  .byte 11                      # DW_FORM_data1
> .byte 59                      # DW_AT_decl_line
>  .byte 11                      # DW_FORM_data1
> .byte 39                      # DW_AT_prototyped
>  .byte 25                      # DW_FORM_flag_present
> .byte 73                      # DW_AT_type
>  .byte 19                      # DW_FORM_ref4
> .byte 63                      # DW_AT_external
>  .byte 25                      # DW_FORM_flag_present
> .byte 17                      # DW_AT_low_pc
>  .byte 1                       # DW_FORM_addr
> .byte 18                      # DW_AT_high_pc
>  .byte 1                       # DW_FORM_addr
> .byte 64                      # DW_AT_frame_base
>  .byte 10                      # DW_FORM_block1
> .byte 0                       # EOM(1)
>  .byte 0                       # EOM(2)
> .byte 3                       # Abbreviation Code
>  .byte 5                       # DW_TAG_formal_parameter
> .byte 0                       # DW_CHILDREN_no
>  .byte 3                       # DW_AT_name
> .byte 14                      # DW_FORM_strp
>  .byte 58                      # DW_AT_decl_file
> .byte 11                      # DW_FORM_data1
>  .byte 59                      # DW_AT_decl_line
> .byte 11                      # DW_FORM_data1
>  .byte 73                      # DW_AT_type
> .byte 19                      # DW_FORM_ref4
>  .byte 2                       # DW_AT_location
> .byte 10                      # DW_FORM_block1
>  .byte 0                       # EOM(1)
> .byte 0                       # EOM(2)
>  .byte 4                       # Abbreviation Code
> .byte 52                      # DW_TAG_variable
>  .byte 0                       # DW_CHILDREN_no
> .byte 3                       # DW_AT_name
>  .byte 14                      # DW_FORM_strp
> .byte 58                      # DW_AT_decl_file
>  .byte 11                      # DW_FORM_data1
> .byte 59                      # DW_AT_decl_line
>  .byte 11                      # DW_FORM_data1
> .byte 73                      # DW_AT_type
>  .byte 19                      # DW_FORM_ref4
> .byte 2                       # DW_AT_location
>  .byte 10                      # DW_FORM_block1
> .byte 0                       # EOM(1)
>  .byte 0                       # EOM(2)
> .byte 5                       # Abbreviation Code
>  .byte 36                      # DW_TAG_base_type
> .byte 0                       # DW_CHILDREN_no
>  .byte 3                       # DW_AT_name
> .byte 14                      # DW_FORM_strp
>  .byte 62                      # DW_AT_encoding
> .byte 11                      # DW_FORM_data1
>  .byte 11                      # DW_AT_byte_size
> .byte 11                      # DW_FORM_data1
>  .byte 0                       # EOM(1)
> .byte 0                       # EOM(2)
>  .byte 6                       # Abbreviation Code
> .byte 15                      # DW_TAG_pointer_type
>  .byte 0                       # DW_CHILDREN_no
> .byte 73                      # DW_AT_type
>  .byte 19                      # DW_FORM_ref4
> .byte 0                       # EOM(1)
>  .byte 0                       # EOM(2)
> .byte 0                       # EOM(3)
> L.debug_abbrev_end:
> .section .debug_aranges,"", at progbits
> .section .debug_ranges,"", at progbits
>  .section .debug_macinfo,"", at progbits
> .section .debug_str,"MS", at progbits,1
> Linfo_string0:
> .asciz "clang version 3.3 (/opt/git.repo/clang.git/
> b422d20530588813b09057b45d5b383f0b175ced) (/opt/git.repo/llvm.git/
> 57b428f0a6be7b81bc364b0088992b1f820b516e)"
> Linfo_string1:
> .asciz "test.c"
> Linfo_string2:
> .asciz "/home/yangyy/workspace/newlib"
> Linfo_string3:
> .asciz "main"
> Linfo_string4:
> .asciz "int"
> Linfo_string5:
> .asciz "argc"
> Linfo_string6:
> .asciz "argv"
> Linfo_string7:
> .asciz "char"
> Linfo_string8:
> .asciz "a"
> Linfo_string9:
> .asciz "b"
> Linfo_string10:
> .asciz "c"
>
> #########################################
> # dwarf debug info dumpped from its executable file with llvm-dwarfdump
> mspu.out: file format ELF32-mspu
>
> .debug_abbrev contents:
> Abbrev table for offset: 0x00000000
> [1] DW_TAG_compile_unit DW_CHILDREN_yes
> DW_AT_producer DW_FORM_strp
>  DW_AT_language DW_FORM_data2
> DW_AT_name DW_FORM_strp
>  DW_AT_low_pc DW_FORM_addr
> DW_AT_stmt_list DW_FORM_data4
>  DW_AT_comp_dir DW_FORM_strp
>
> [2] DW_TAG_subprogram DW_CHILDREN_yes
>  DW_AT_name DW_FORM_strp
> DW_AT_decl_file DW_FORM_data1
>  DW_AT_decl_line DW_FORM_data1
> DW_AT_prototyped DW_FORM_flag_present
>  DW_AT_type DW_FORM_ref4
> DW_AT_external DW_FORM_flag_present
>  DW_AT_low_pc DW_FORM_addr
> DW_AT_high_pc DW_FORM_addr
>  DW_AT_frame_base DW_FORM_block1
>
> [3] DW_TAG_formal_parameter DW_CHILDREN_no
>  DW_AT_name DW_FORM_strp
> DW_AT_decl_file DW_FORM_data1
>  DW_AT_decl_line DW_FORM_data1
> DW_AT_type DW_FORM_ref4
>  DW_AT_location DW_FORM_block1
>
> [4] DW_TAG_variable DW_CHILDREN_no
>  DW_AT_name DW_FORM_strp
> DW_AT_decl_file DW_FORM_data1
>  DW_AT_decl_line DW_FORM_data1
> DW_AT_type DW_FORM_ref4
>  DW_AT_location DW_FORM_block1
>
> [5] DW_TAG_base_type DW_CHILDREN_no
>  DW_AT_name DW_FORM_strp
> DW_AT_encoding DW_FORM_data1
>  DW_AT_byte_size DW_FORM_data1
>
> [6] DW_TAG_pointer_type DW_CHILDREN_no
>  DW_AT_type DW_FORM_ref4
>
>
> .debug_info contents:
> 0x00000000: Compile Unit: length = 0x00000094 version = 0x0002 abbr_offset
> = 0x0000 addr_size = 0x04 (next CU at 0x00000098)
>
> 0x0000000b: DW_TAG_compile_unit [1] *
> 0x0000000c:   DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] =
> "clang version 3.3 (/opt/git.repo/clang.git/
> b422d20530588813b09057b45d5b383f0b175ced) (/opt/git.repo/llvm.git/
> 57b428f0a6be7b81bc364b0088992b1f820b516e)")
> 0x00000010:   DW_AT_language [DW_FORM_data2] (0x000c)
> 0x00000012:   DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000099] =
> "test.c")
> 0x00000016:   DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
> 0x0000001a:   DW_AT_stmt_list [DW_FORM_data4] (0x00000000)
> 0x0000001e:   DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a0] =
> "/home/yangyy/workspace/newlib")
>
> 0x00000022:   DW_TAG_subprogram [2] *
> 0x00000023:     DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000be] =
> "main")
> 0x00000027:     DW_AT_decl_file [DW_FORM_data1] (0x01)
> 0x00000028:     DW_AT_decl_line [DW_FORM_data1] (0x02)
> 0x00000029:     DW_AT_prototyped [DW_FORM_flag_present] (true)
> 0x00000029:     DW_AT_type [DW_FORM_ref4] (cu + 0x007f => {0x0000007f})
> 0x0000002d:     DW_AT_external [DW_FORM_flag_present] (true)
> 0x0000002d:     DW_AT_low_pc [DW_FORM_addr] (0x0000000000000028)
> 0x00000031:     DW_AT_high_pc [DW_FORM_addr] (0x0000000000000084)
> 0x00000035:     DW_AT_frame_base [DW_FORM_block1] (<0x02> 90 3c )
>
> 0x00000038:     DW_TAG_formal_parameter [3]
> 0x00000039:       DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c7] =
> "argc")
> 0x0000003d:       DW_AT_decl_file [DW_FORM_data1] (0x01)
> 0x0000003e:       DW_AT_decl_line [DW_FORM_data1] (0x02)
> 0x0000003f:       DW_AT_type [DW_FORM_ref4] (cu + 0x007f => {0x0000007f})
> 0x00000043:       DW_AT_location [DW_FORM_block1] (<0x02> 91 18 )
>
> 0x00000046:     DW_TAG_formal_parameter [3]
> 0x00000047:       DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cc] =
> "argv")
> 0x0000004b:       DW_AT_decl_file [DW_FORM_data1] (0x01)
> 0x0000004c:       DW_AT_decl_line [DW_FORM_data1] (0x02)
> 0x0000004d:       DW_AT_type [DW_FORM_ref4] (cu + 0x0092 => {0x00000092})
> 0x00000051:       DW_AT_location [DW_FORM_block1] (<0x02> 91 14 )
>
> 0x00000054:     DW_TAG_variable [4]
> 0x00000055:       DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] =
> "a")
> 0x00000059:       DW_AT_decl_file [DW_FORM_data1] (0x01)
> 0x0000005a:       DW_AT_decl_line [DW_FORM_data1] (0x04)
> 0x0000005b:       DW_AT_type [DW_FORM_ref4] (cu + 0x007f => {0x0000007f})
> 0x0000005f:       DW_AT_location [DW_FORM_block1] (<0x02> 91 10 )
>
> 0x00000062:     DW_TAG_variable [4]
> 0x00000063:       DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d8] =
> "b")
> 0x00000067:       DW_AT_decl_file [DW_FORM_data1] (0x01)
> 0x00000068:       DW_AT_decl_line [DW_FORM_data1] (0x05)
> 0x00000069:       DW_AT_type [DW_FORM_ref4] (cu + 0x007f => {0x0000007f})
> 0x0000006d:       DW_AT_location [DW_FORM_block1] (<0x02> 91 0c )
>
> 0x00000070:     DW_TAG_variable [4]
> 0x00000071:       DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000da] =
> "c")
> 0x00000075:       DW_AT_decl_file [DW_FORM_data1] (0x01)
> 0x00000076:       DW_AT_decl_line [DW_FORM_data1] (0x06)
> 0x00000077:       DW_AT_type [DW_FORM_ref4] (cu + 0x007f => {0x0000007f})
> 0x0000007b:       DW_AT_location [DW_FORM_block1] (<0x02> 91 08 )
>
> 0x0000007e:     NULL
>
> 0x0000007f:   DW_TAG_base_type [5]
> 0x00000080:     DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c3] =
> "int")
> 0x00000084:     DW_AT_encoding [DW_FORM_data1] (0x05)
> 0x00000085:     DW_AT_byte_size [DW_FORM_data1] (0x04)
>
> 0x00000086:   DW_TAG_base_type [5]
> 0x00000087:     DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d1] =
> "char")
> 0x0000008b:     DW_AT_encoding [DW_FORM_data1] (0x06)
> 0x0000008c:     DW_AT_byte_size [DW_FORM_data1] (0x01)
>
> 0x0000008d:   DW_TAG_pointer_type [6]
> 0x0000008e:     DW_AT_type [DW_FORM_ref4] (cu + 0x0086 => {0x00000086})
>
> 0x00000092:   DW_TAG_pointer_type [6]
> 0x00000093:     DW_AT_type [DW_FORM_ref4] (cu + 0x008d => {0x0000008d})
>
> 0x00000097:   NULL
>
> .debug_frame contents:
>
>
> .debug_aranges contents:
>
> .debug_line contents:
> Line table prologue:
>    total_length: 0x00000037
>         version: 2
> prologue_length: 0x0000001d
> min_inst_length: 1
> default_is_stmt: 1
>       line_base: -5
>      line_range: 14
>     opcode_base: 13
> standard_opcode_lengths[DW_LNS_copy] = 0
> standard_opcode_lengths[DW_LNS_advance_pc] = 1
> standard_opcode_lengths[DW_LNS_advance_line] = 1
> standard_opcode_lengths[DW_LNS_set_file] = 1
> standard_opcode_lengths[DW_LNS_set_column] = 1
> standard_opcode_lengths[DW_LNS_negate_stmt] = 0
> standard_opcode_lengths[DW_LNS_set_basic_block] = 0
> standard_opcode_lengths[DW_LNS_const_add_pc] = 0
> standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
> standard_opcode_lengths[DW_LNS_set_prologue_end] = 0
> standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0
> standard_opcode_lengths[DW_LNS_set_isa] = 1
>                 Dir  Mod Time   File Len   File Name
>                 ---- ---------- ---------- ---------------------------
> file_names[  1]    0 0x00000000 0x00000000 test.c
>
> Address            Line   Column File   ISA Flags
> ------------------ ------ ------ ------ --- -------------
> 0x0000000000000028      2      0      1   0  is_stmt prologue_end
> 0x0000000000000050      4      0      1   0  is_stmt
> 0x0000000000000058      5      0      1   0  is_stmt
> 0x000000000000005c      6      0      1   0  is_stmt
> 0x0000000000000068      7      0      1   0  is_stmt
> 0x0000000000000084      7      0      1   0  is_stmt end_sequence
>
> .debug_str contents:
> 0x00000000: "clang version 3.3 (/opt/git.repo/clang.git/
> b422d20530588813b09057b45d5b383f0b175ced) (/opt/git.repo/llvm.git/
> 57b428f0a6be7b81bc364b0088992b1f820b516e)"
> 0x00000099: "test.c"
> 0x000000a0: "/home/yangyy/workspace/newlib"
> 0x000000be: "main"
> 0x000000c3: "int"
> 0x000000c7: "argc"
> 0x000000cc: "argv"
> 0x000000d1: "char"
> 0x000000d6: "a"
> 0x000000d8: "b"
> 0x000000da: "c"
>
> .debug_ranges contents:
>
> .debug_pubnames contents:
> Length:                0
> Version:               0
> Offset in .debug_info: 0
> Size:                  0
>
>   Offset    Name
>
> .debug_abbrev.dwo contents:
> < EMPTY >
>
>
>
> 2014-02-19 2:28 GMT+08:00 Greg Clayton <gclayton at apple.com>:
>
> All of this information is contained in the DWARF debug info that you must
>> generate. Are you generating DWARF? If not, you will need to. If so, please
>> attach an example program that contains DWARF and specify which function
>> you are having trouble getting variable information for.
>>
>> Greg Clayton
>>
>> On Feb 18, 2014, at 12:44 AM, 杨勇勇 <triple.yang at gmail.com> wrote:
>>
>> > Hi, all
>> >
>> > I ported llvm backend and lldb recently. Both tools can basically work.
>> > lldb is able to debug programs in asm style and frame unwinding is OK.
>> >
>> > But "frame variable XX" does not work because lldb is not able to
>> determine the address of
>> > XX from debug info.
>> >
>> > Can someone give any clue?
>> > Thanks in advance.
>> >
>> > --
>> > 杨勇勇 (Yang Yong-Yong)
>> > _______________________________________________
>> > lldb-dev mailing list
>> > lldb-dev at cs.uiuc.edu
>> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>
>>
>
>
> --
> 杨勇勇 (Yang Yong-Yong)
>



-- 
杨勇勇 (Yang Yong-Yong)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140219/09066e6f/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: example.tar.bz2
Type: application/x-bzip2
Size: 4779 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140219/09066e6f/attachment.bin>


More information about the llvm-dev mailing list