1## Test that DWARF5 DW_FORM_addrx is correctly recognized 2## and converted into the DW_FORM_addr or just preserved 3## in case --update. 4 5## $ cat dwarf5-addrx.c 6## __attribute__ ((optnone)) int foo1 ( ) { 7## volatile int a = 0x1; return a; 8## } 9## 10## __attribute__ ((optnone)) int foo2 ( ) { 11## volatile int a = 0x2; return a; 12## } 13## 14## __attribute__ ((optnone)) int foo3 ( ) { 15## volatile int a = 0x3; return a; 16## } 17## 18## __attribute__ ((optnone)) int foo4 ( ) { 19## volatile int a = 0x4; return a; 20## } 21## 22## __attribute__ ((optnone)) int foo5 ( ) { 23## volatile int a = 0x5; return a; 24## } 25## 26## __attribute__ ((optnone)) int foo6 ( ) { 27## volatile int a = 0x6; return a; 28## } 29## 30## __attribute__ ((optnone)) int foo7 ( ) { 31## volatile int a = 0x7; return a; 32## } 33## 34## __attribute__ ((optnone)) int foo8 ( ) { 35## volatile int a = 0x8; return a; 36## } 37## 38## int main ( void ) { 39## return foo1()+foo2()+foo3()+foo4()+foo5()+foo6()+foo7()+foo8(); 40## } 41## 42## $ clang -gdwarf-5 dwarf5-addrx.c -c -o dwarf5-addrx.o 43## $ clang dwarf5-addrx.o -o dwarf5-addrx.out 44 45RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/dwarf5/dwarf5-addrx.out -o %t.dSYM 2>&1 | FileCheck %s --allow-empty 46RUN: llvm-dwarfdump --verify %t.dSYM 2>&1 | FileCheck %s 47 48RUN: llvm-dwarfdump --verbose %t.dSYM | FileCheck %s --check-prefix DWARF 49 50RUN: dsymutil --update -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/dwarf5/dwarf5-addrx.out -o %t.dSYM 2>&1 | FileCheck %s --allow-empty 51RUN: llvm-dwarfdump --verify %t.dSYM 2>&1 | FileCheck %s 52 53RUN: llvm-dwarfdump --verbose %t.dSYM | FileCheck %s --check-prefix UPDATE-DWARF 54 55RUN: dsymutil --linker parallel -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/dwarf5/dwarf5-addrx.out -o %t.dSYM 2>&1 | FileCheck %s --allow-empty 56RUN: llvm-dwarfdump --verify %t.dSYM 2>&1 | FileCheck %s 57 58RUN: llvm-dwarfdump --verbose %t.dSYM | FileCheck %s --check-prefix DWARF 59 60RUN: dsymutil --linker parallel --update -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/dwarf5/dwarf5-addrx.out -o %t.dSYM 2>&1 | FileCheck %s --allow-empty 61RUN: llvm-dwarfdump --verify %t.dSYM 2>&1 | FileCheck %s 62 63RUN: llvm-dwarfdump --verbose %t.dSYM | FileCheck %s --check-prefix UPDATE-DWARF 64 65 66CHECK-NOT: error: 67 68DWARF: DW_TAG_compile_unit 69DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "dwarf5-addrx.c" 70DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000100000eb0) 71DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000103) 72DWARF: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008) 73DWARF: DW_TAG_subprogram 74DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000100000eb0) 75DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 76DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo1" 77DWARF: DW_TAG_subprogram 78DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000100000ec0) 79DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 80DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo2" 81DWARF: DW_TAG_subprogram 82DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000100000ed0) 83DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 84DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo3" 85DWARF: DW_TAG_subprogram 86DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003) address = 0x0000000100000ee0) 87DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 88DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo4" 89DWARF: DW_TAG_subprogram 90DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000004) address = 0x0000000100000ef0) 91DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 92DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo5" 93DWARF: DW_TAG_subprogram 94DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000005) address = 0x0000000100000f00) 95DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 96DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo6" 97DWARF: DW_TAG_subprogram 98DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000006) address = 0x0000000100000f10) 99DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 100DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo7" 101DWARF: DW_TAG_subprogram 102DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000007) address = 0x0000000100000f20) 103DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 104DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo8" 105DWARF: DW_TAG_subprogram 106DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000008) address = 0x0000000100000f30) 107DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000083) 108DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "main" 109 110UPDATE-DWARF: DW_TAG_compile_unit 111UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "dwarf5-addrx.c" 112UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000000000) 113UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000103) 114UPDATE-DWARF: DW_TAG_subprogram 115UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000000000) 116UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 117UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo1" 118UPDATE-DWARF: DW_TAG_subprogram 119UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000010) 120UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 121UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo2" 122UPDATE-DWARF: DW_TAG_subprogram 123UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000000020) 124UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 125UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo3" 126UPDATE-DWARF: DW_TAG_subprogram 127UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003) address = 0x0000000000000030) 128UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 129UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo4" 130UPDATE-DWARF: DW_TAG_subprogram 131UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000004) address = 0x0000000000000040) 132UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 133UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo5" 134UPDATE-DWARF: DW_TAG_subprogram 135UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000005) address = 0x0000000000000050) 136UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 137UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo6" 138UPDATE-DWARF: DW_TAG_subprogram 139UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000006) address = 0x0000000000000060) 140UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 141UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo7" 142UPDATE-DWARF: DW_TAG_subprogram 143UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000007) address = 0x0000000000000070) 144UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000010) 145UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "foo8" 146UPDATE-DWARF: DW_TAG_subprogram 147UPDATE-DWARF: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000008) address = 0x0000000000000080) 148UPDATE-DWARF: DW_AT_high_pc [DW_FORM_data4] (0x00000083) 149UPDATE-DWARF: DW_AT_name [DW_FORM_strx] {{.*}} "main" 150UPDATE-DWARF: .debug_addr contents: 151UPDATE-DWARF: 0x00000000: Address table header: length = 0x0000004c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00 152UPDATE-DWARF: Addrs: [ 153UPDATE-DWARF: 0x0000000000000000 154UPDATE-DWARF: 0x0000000000000010 155UPDATE-DWARF: 0x0000000000000020 156UPDATE-DWARF: 0x0000000000000030 157UPDATE-DWARF: 0x0000000000000040 158UPDATE-DWARF: 0x0000000000000050 159UPDATE-DWARF: 0x0000000000000060 160UPDATE-DWARF: 0x0000000000000070 161UPDATE-DWARF: 0x0000000000000080 162UPDATE-DWARF: ] 163