1## Check section headers when converting from hex to ELF. 2# RUN: yaml2obj %p/Inputs/ihex-elf-sections.yaml -o %t 3# RUN: llvm-objcopy -O ihex %t %t.hex 4# RUN: llvm-objcopy -I ihex -O elf32-i386 %t.hex %t2 5# RUN: llvm-readobj --section-headers %t2 | FileCheck %s 6 7# CHECK: Name: .sec1 8# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 9# CHECK-NEXT: Flags [ (0x3) 10# CHECK-NEXT: SHF_ALLOC (0x2) 11# CHECK-NEXT: SHF_WRITE (0x1) 12# CHECK-NEXT: ] 13# CHECK-NEXT: Address: 0x0 14# CHECK-NEXT: Offset: 15# CHECK-NEXT: Size: 21 16# CHECK-NEXT: Link: 0 17# CHECK-NEXT: Info: 0 18# CHECK-NEXT: AddressAlignment: 1 19# CHECK-NEXT: EntrySize: 0 20 21# CHECK: Name: .sec2 22# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 23# CHECK-NEXT: Flags [ (0x3) 24# CHECK-NEXT: SHF_ALLOC (0x2) 25# CHECK-NEXT: SHF_WRITE (0x1) 26# CHECK-NEXT: ] 27# CHECK-NEXT: Address: 0xFFF8 28# CHECK-NEXT: Offset: 29# CHECK-NEXT: Size: 11 30# CHECK-NEXT: Link: 0 31# CHECK-NEXT: Info: 0 32# CHECK-NEXT: AddressAlignment: 1 33# CHECK-NEXT: EntrySize: 0 34 35# CHECK: Name: .sec3 36# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 37# CHECK-NEXT: Flags [ (0x3) 38# CHECK-NEXT: SHF_ALLOC (0x2) 39# CHECK-NEXT: SHF_WRITE (0x1) 40# CHECK-NEXT: ] 41# CHECK-NEXT: Address: 0x10100 42# CHECK-NEXT: Offset: 43# CHECK-NEXT: Size: 4 44# CHECK-NEXT: Link: 0 45# CHECK-NEXT: Info: 0 46# CHECK-NEXT: AddressAlignment: 1 47# CHECK-NEXT: EntrySize: 0 48 49# CHECK: Name: .sec4 50# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 51# CHECK-NEXT: Flags [ (0x3) 52# CHECK-NEXT: SHF_ALLOC (0x2) 53# CHECK-NEXT: SHF_WRITE (0x1) 54# CHECK-NEXT: ] 55# CHECK-NEXT: Address: 0x10FFF8 56# CHECK-NEXT: Offset: 57# CHECK-NEXT: Size: 11 58# CHECK-NEXT: Link: 0 59# CHECK-NEXT: Info: 0 60# CHECK-NEXT: AddressAlignment: 1 61# CHECK-NEXT: EntrySize: 0 62 63## Check section contents. 64# RUN: llvm-objcopy -O binary --only-section=.text %t %t.text 65# RUN: llvm-objcopy -O binary --only-section=.sec1 %t2 %t2.sec1 66# RUN: cmp %t.text %t2.sec1 67# RUN: llvm-objcopy -O binary --only-section=.data %t %t.data 68# RUN: llvm-objcopy -O binary --only-section=.sec2 %t2 %t2.sec2 69# RUN: cmp %t.data %t2.sec2 70# RUN: llvm-objcopy -O binary --only-section=.data2 %t %t.data2 71# RUN: llvm-objcopy -O binary --only-section=.sec3 %t2 %t2.sec3 72# RUN: cmp %t.data2 %t2.sec3 73# RUN: llvm-objcopy -O binary --only-section=.data3 %t %t.data3 74# RUN: llvm-objcopy -O binary --only-section=.sec4 %t2 %t2.sec4 75# RUN: cmp %t.data3 %t2.sec4 76 77## Check loading from raw hex file. 78# RUN: llvm-objcopy -I ihex -O elf32-i386 %p/Inputs/sections.hex %t-raw 79# RUN: llvm-readobj --section-headers %t-raw | FileCheck %s --check-prefix=RAW 80 81# RAW: Name: .sec1 82# RAW-NEXT: Type: SHT_PROGBITS (0x1) 83# RAW-NEXT: Flags [ (0x3) 84# RAW-NEXT: SHF_ALLOC (0x2) 85# RAW-NEXT: SHF_WRITE (0x1) 86# RAW-NEXT: ] 87# RAW-NEXT: Address: 0x1FFF8 88# RAW-NEXT: Offset: 89# RAW-NEXT: Size: 11 90 91# RAW: Name: .sec2 92# RAW-NEXT: Type: SHT_PROGBITS (0x1) 93# RAW-NEXT: Flags [ (0x3) 94# RAW-NEXT: SHF_ALLOC (0x2) 95# RAW-NEXT: SHF_WRITE (0x1) 96# RAW-NEXT: ] 97# RAW-NEXT: Address: 0xFFFF8 98# RAW-NEXT: Offset: 99# RAW-NEXT: Size: 11 100 101# RAW: Name: .sec3 102# RAW-NEXT: Type: SHT_PROGBITS (0x1) 103# RAW-NEXT: Flags [ (0x3) 104# RAW-NEXT: SHF_ALLOC (0x2) 105# RAW-NEXT: SHF_WRITE (0x1) 106# RAW-NEXT: ] 107# RAW-NEXT: Address: 0x1FFFF8 108# RAW-NEXT: Offset: 109# RAW-NEXT: Size: 11 110 111## Check section contents. 112# RUN: llvm-objcopy -O ihex --only-section=.sec1 %t-raw - | FileCheck %s --check-prefix=RAW-SEC1 113 114# RAW-SEC1: :020000021000EC 115# RAW-SEC1-NEXT: :08FFF8000001020304050607E5 116# RAW-SEC1-NEXT: :020000022000DC 117# RAW-SEC1-NEXT: :0300000008090AE2 118 119# RUN: llvm-objcopy -O ihex --only-section=.sec2 %t-raw - | FileCheck %s --check-prefix=RAW-SEC2 120 121# RAW-SEC2: :02000002F0000C 122# RAW-SEC2-NEXT: :08FFF800303132333435363765 123# RAW-SEC2-NEXT: :020000020000FC 124# RAW-SEC2-NEXT: :020000040010EA 125# RAW-SEC2-NEXT: :030000003839404C 126 127# RUN: llvm-objcopy -O ihex --only-section=.sec3 %t-raw - | FileCheck %s --check-prefix=RAW-SEC3 128 129# RAW-SEC3: :02000004001FDB 130# RAW-SEC3-NEXT: :08FFF8004041424344454647E5 131# RAW-SEC3-NEXT: :020000040020DA 132# RAW-SEC3-NEXT: :030000004849501C 133 134## Check that line is trimmed from whitespace. 135# RUN: echo " :0100000001FE " | llvm-objcopy -I ihex -O elf64-x86-64 - - \ 136# RUN: | llvm-objcopy -O ihex - - | FileCheck %s --check-prefix=SPACES 137 138# SPACES: :0100000001FE 139# SPACES-NEXT: :00000001FF 140 141## Check for various parsing errors. 142## 1. String too short. 143# RUN: echo "01000000FF" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_LENGTH 144 145# BAD_LENGTH: error: '{{.*}}': line 1: line is too short: 10 chars 146 147## 2. Missing ':'. 148# RUN: echo "0100000000FF" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=MISSING_COLON 149 150# MISSING_COLON: error: '{{.*}}': line 1: missing ':' in the beginning of line 151 152## 3. Invalid charatcer. 153# RUN: echo ":01000000xF" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_CHAR 154 155# BAD_CHAR: error: '{{.*}}': line 1: invalid character at position 10 156 157## 4. Incorrect string length. 158# RUN: echo ":010000000000000F" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_LENGTH2 159 160# BAD_LENGTH2: error: '{{.*}}': line 1: invalid line length 17 (should be 13) 161 162## 5. Invalid type (06). 163# RUN: echo ":00000006FA" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_TYPE 164 165# BAD_TYPE: error: '{{.*}}': line 1: unknown record type: 6 166 167## 6. Invalid checksum. 168# RUN: echo ":00000001FA" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_CKSUM 169 170# BAD_CKSUM: error: '{{.*}}': line 1: incorrect checksum 171 172## 7. Zero data length. 173# RUN: echo ":00010000FF" | not llvm-objcopy -I ihex - - 2>&1 | FileCheck %s --check-prefix=ZERO_DATA_LEN 174 175# ZERO_DATA_LEN: error: '{{.*}}': line 1: zero data length is not allowed for data records 176 177## 8. Bad data length for '02' (SegmentAddr) record. 178# RUN: echo ":03000002000000FB" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_SEGADDR_LEN 179 180# BAD_SEGADDR_LEN: error: '{{.*}}': line 1: segment address data should be 2 bytes in size 181 182## 9. Bad data length for '03' (StartAddr80x86) record. 183# RUN: echo ":03000003000000FA" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_STARTADDR_LEN 184 185## 10. Bad data length for '05' (StartAddr) record. 186# RUN: echo ":03000005000000F8" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_STARTADDR_LEN 187 188# BAD_STARTADDR_LEN: error: '{{.*}}': line 1: start address data should be 4 bytes in size 189 190## 11. Address value for 'StartAddr80x86' is greater then 0xFFFFFU. 191# RUN: echo ":04000003FFFFFFFFFD" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_STARTADDR 192 193# BAD_STARTADDR: error: '{{.*}}': line 1: start address exceeds 20 bit for 80x86 194 195## 12. Invalid extended address data size. 196# RUN: echo ":04000004FFFFFFFFFC" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_EXTADDR_LEN 197 198# BAD_EXTADDR_LEN: error: '{{.*}}': line 1: extended address data should be 2 bytes in size 199 200## 13. No sections in the hex file. 201## a) try empty file: 202# RUN: echo "" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=NO_SECTIONS 203## b) EOF record should cancel processing further records. Not having any section data 204## before EOF should trigger an error. 205# RUN: echo ":00000001FF" > %t-bad14.hex 206# RUN: echo ":0100000001FE" >> %t-bad14.hex 207# RUN: not llvm-objcopy -I ihex %t-bad14.hex %t-none 2>&1 | FileCheck %s --check-prefix=NO_SECTIONS 208 209# NO_SECTIONS: error: '{{.*}}': no sections 210