| ## This test checks that overlapping function address ranges |
| ## are combined during --garbage-collection optimisation. |
| |
| # RUN: yaml2obj %s -o %t.o |
| # RUN: llvm-dwarfutil --garbage-collection %t.o %t1 |
| # RUN: llvm-dwarfdump -a %t1 | FileCheck %s |
| |
| # CHECK: DW_TAG_compile_unit |
| # CHECK: DW_AT_name{{.*}}"CU1" |
| # CHECK: DW_AT_low_pc{{.*}}0000000000001000 |
| # CHECK: DW_AT_ranges |
| # CHECK: [0x0000000000001000, 0x000000000000102d) |
| # CHECK: [0x0000000000002002, 0x000000000000200d) |
| # CHECK: [0x000000000000201b, 0x000000000000202a) |
| # CHECK: [0x0000000000003002, 0x0000000000003007) |
| # CHECK: [0x0000000000003012, 0x0000000000003017) |
| # CHECK: [0x0000000000003018, 0x000000000000301a) |
| # CHECK: [0x0000000000003022, 0x0000000000003027 |
| # CHECK: DW_TAG_class_type |
| # CHECK: DW_AT_name{{.*}}"class1" |
| # CHECK: DW_TAG_class_type |
| # CHECK: "class2" |
| # CHECK: DW_TAG_subprogram |
| # CHECK: DW_AT_name{{.*}}"foo1" |
| # CHECK: DW_AT_low_pc{{.*}}0x0000000000001000 |
| # CHECK: DW_AT_high_pc{{.*}}0x0000000000001010 |
| # CHECK: DW_AT_type{{.*}}"class1" |
| # CHECK: DW_TAG_subprogram |
| # CHECK: "foo2" |
| # CHECK: DW_AT_low_pc{{.*}}0x0000000000001004 |
| # CHECK: DW_AT_high_pc{{.*}}0x0000000000001007 |
| # CHECK: DW_AT_type{{.*}}"class2" |
| # CHECK: DW_TAG_subprogram |
| # CHECK: "foo3" |
| # CHECK: DW_AT_low_pc{{.*}}0x000000000000100d |
| # CHECK: DW_AT_high_pc{{.*}}0x000000000000102d |
| # CHECK: DW_TAG_subprogram |
| # CHECK: "foo4" |
| # CHECK: DW_AT_low_pc{{.*}}0x0000000000002002 |
| # CHECK: DW_AT_high_pc{{.*}}0x000000000000200d |
| # CHECK: DW_TAG_subprogram |
| # CHECK: "foo5" |
| # CHECK: DW_AT_low_pc{{.*}}0x000000000000201b |
| # CHECK: DW_AT_high_pc{{.*}}0x000000000000202a |
| # CHECK: DW_TAG_subprogram |
| # CHECK: "foo6" |
| # CHECK: DW_AT_low_pc{{.*}}0x0000000000003002 |
| # CHECK: DW_AT_high_pc{{.*}}0x0000000000003007 |
| # CHECK: DW_TAG_subprogram |
| # CHECK: "foo7" |
| # CHECK: DW_AT_low_pc{{.*}}0x0000000000003012 |
| # CHECK: DW_AT_high_pc{{.*}}0x0000000000003017 |
| # CHECK: DW_TAG_subprogram |
| # CHECK: "foo8" |
| # CHECK: DW_AT_low_pc{{.*}}0x0000000000003022 |
| # CHECK: DW_AT_high_pc{{.*}}0x0000000000003027 |
| # CHECK: DW_TAG_subprogram |
| # CHECK: "foo9" |
| # CHECK: DW_AT_low_pc{{.*}}0x0000000000003012 |
| # CHECK: DW_AT_high_pc{{.*}}0x0000000000003017 |
| # CHECK: "foo10" |
| # CHECK: DW_AT_low_pc{{.*}}0x0000000000003018 |
| # CHECK: DW_AT_high_pc{{.*}}0x000000000000301a |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_EXECINSTR ] |
| Address: 0x1000 |
| AddressAlign: 0x0000000000000010 |
| Content: "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" |
| - Name: .text2 |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_EXECINSTR ] |
| Address: 0x2000 |
| AddressAlign: 0x0000000000000010 |
| Content: "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" |
| - Name: .text3 |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_EXECINSTR ] |
| Address: 0x3000 |
| AddressAlign: 0x0000000000000010 |
| Content: "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" |
| DWARF: |
| debug_abbrev: |
| - Table: |
| - Tag: DW_TAG_compile_unit |
| Children: DW_CHILDREN_yes |
| Attributes: |
| - Attribute: DW_AT_producer |
| Form: DW_FORM_string |
| - Attribute: DW_AT_language |
| Form: DW_FORM_data2 |
| - Attribute: DW_AT_name |
| Form: DW_FORM_string |
| - Attribute: DW_AT_low_pc |
| Form: DW_FORM_addr |
| - Attribute: DW_AT_ranges |
| Form: DW_FORM_sec_offset |
| - Tag: DW_TAG_subprogram |
| Children: DW_CHILDREN_no |
| Attributes: |
| - Attribute: DW_AT_name |
| Form: DW_FORM_string |
| - Attribute: DW_AT_low_pc |
| Form: DW_FORM_addr |
| - Attribute: DW_AT_high_pc |
| Form: DW_FORM_data8 |
| - Attribute: DW_AT_type |
| Form: DW_FORM_ref4 |
| - Tag: DW_TAG_class_type |
| Children: DW_CHILDREN_yes |
| Attributes: |
| - Attribute: DW_AT_name |
| Form: DW_FORM_string |
| - Tag: DW_TAG_member |
| Children: DW_CHILDREN_no |
| Attributes: |
| - Attribute: DW_AT_type |
| Form: DW_FORM_ref4 |
| - Attribute: DW_AT_name |
| Form: DW_FORM_string |
| - Tag: DW_TAG_class_type |
| Children: DW_CHILDREN_no |
| Attributes: |
| - Attribute: DW_AT_name |
| Form: DW_FORM_string |
| - Attribute: DW_AT_declaration |
| Form: DW_FORM_flag_present |
| - Tag: DW_TAG_class_type |
| Children: DW_CHILDREN_yes |
| Attributes: |
| - Attribute: DW_AT_name |
| Form: DW_FORM_string |
| - Attribute: DW_AT_declaration |
| Form: DW_FORM_flag_present |
| - Tag: DW_TAG_template_type_parameter |
| Children: DW_CHILDREN_no |
| Attributes: |
| - Attribute: DW_AT_type |
| Form: DW_FORM_ref4 |
| - Tag: DW_TAG_base_type |
| Children: DW_CHILDREN_no |
| Attributes: |
| - Attribute: DW_AT_name |
| Form: DW_FORM_string |
| debug_info: |
| - Version: 4 |
| Entries: |
| - AbbrCode: 1 |
| Values: |
| - CStr: by_hand |
| - Value: 0x04 |
| - CStr: CU1 |
| - Value: 0x00 |
| - Value: 0x00 |
| - AbbrCode: 3 |
| Values: |
| - CStr: class1 |
| - AbbrCode: 4 |
| Values: |
| - Value: 0x00000052 |
| - CStr: member1 |
| - AbbrCode: 0 |
| - AbbrCode: 3 |
| Values: |
| - CStr: class2 |
| - AbbrCode: 4 |
| Values: |
| - Value: 0x00000052 |
| - CStr: member1 |
| - AbbrCode: 0 |
| - AbbrCode: 8 |
| Values: |
| - CStr: int |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo1 |
| - Value: 0x1000 |
| - Value: 0x10 |
| - Value: 0x00000026 |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo2 |
| - Value: 0x1004 |
| - Value: 0x3 |
| - Value: 0x0000003c |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo3 |
| - Value: 0x100d |
| - Value: 0x20 |
| - Value: 0x0000003c |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo4 |
| - Value: 0x2002 |
| - Value: 0xb |
| - Value: 0x0000003c |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo5 |
| - Value: 0x201b |
| - Value: 0xf |
| - Value: 0x0000003c |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo6 |
| - Value: 0x3002 |
| - Value: 0x5 |
| - Value: 0x0000003c |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo7 |
| - Value: 0x3012 |
| - Value: 0x5 |
| - Value: 0x0000003c |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo8 |
| - Value: 0x3022 |
| - Value: 0x5 |
| - Value: 0x0000003c |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo9 |
| - Value: 0x3012 |
| - Value: 0x5 |
| - Value: 0x0000003c |
| - AbbrCode: 2 |
| Values: |
| - CStr: foo10 |
| - Value: 0x3018 |
| - Value: 0x2 |
| - Value: 0x0000003c |
| - AbbrCode: 0 |
| |
| debug_ranges: |
| - Offset: 0x00000000 |
| AddrSize: 0x08 |
| Entries: |
| - LowOffset: 0x0000000000001000 |
| HighOffset: 0x000000000000102d |
| - LowOffset: 0x0000000000002000 |
| HighOffset: 0x000000000000202d |
| - LowOffset: 0x0000000000000000 |
| HighOffset: 0x0000000000000000 |
| ... |