210 lines · plain
1## Check section headers when converting from hex to ELF.2# RUN: yaml2obj %p/Inputs/ihex-elf-sections.yaml -o %t3# RUN: llvm-objcopy -O ihex %t %t.hex4# RUN: llvm-objcopy -I ihex -O elf32-i386 %t.hex %t25# RUN: llvm-readobj --section-headers %t2 | FileCheck %s6 7# CHECK: Name: .sec18# 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: 0x014# CHECK-NEXT: Offset:15# CHECK-NEXT: Size: 2116# CHECK-NEXT: Link: 017# CHECK-NEXT: Info: 018# CHECK-NEXT: AddressAlignment: 119# CHECK-NEXT: EntrySize: 020 21# CHECK: Name: .sec222# 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: 0xFFF828# CHECK-NEXT: Offset:29# CHECK-NEXT: Size: 1130# CHECK-NEXT: Link: 031# CHECK-NEXT: Info: 032# CHECK-NEXT: AddressAlignment: 133# CHECK-NEXT: EntrySize: 034 35# CHECK: Name: .sec336# 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: 0x1010042# CHECK-NEXT: Offset:43# CHECK-NEXT: Size: 444# CHECK-NEXT: Link: 045# CHECK-NEXT: Info: 046# CHECK-NEXT: AddressAlignment: 147# CHECK-NEXT: EntrySize: 048 49# CHECK: Name: .sec450# 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: 0x10FFF856# CHECK-NEXT: Offset:57# CHECK-NEXT: Size: 1158# CHECK-NEXT: Link: 059# CHECK-NEXT: Info: 060# CHECK-NEXT: AddressAlignment: 161# CHECK-NEXT: EntrySize: 062 63## Check section contents.64# RUN: llvm-objcopy -O binary --only-section=.text %t %t.text65# RUN: llvm-objcopy -O binary --only-section=.sec1 %t2 %t2.sec166# RUN: cmp %t.text %t2.sec167# RUN: llvm-objcopy -O binary --only-section=.data %t %t.data68# RUN: llvm-objcopy -O binary --only-section=.sec2 %t2 %t2.sec269# RUN: cmp %t.data %t2.sec270# RUN: llvm-objcopy -O binary --only-section=.data2 %t %t.data271# RUN: llvm-objcopy -O binary --only-section=.sec3 %t2 %t2.sec372# RUN: cmp %t.data2 %t2.sec373# RUN: llvm-objcopy -O binary --only-section=.data3 %t %t.data374# RUN: llvm-objcopy -O binary --only-section=.sec4 %t2 %t2.sec475# RUN: cmp %t.data3 %t2.sec476 77## Check loading from raw hex file.78# RUN: llvm-objcopy -I ihex -O elf32-i386 %p/Inputs/sections.hex %t-raw79# RUN: llvm-readobj --section-headers %t-raw | FileCheck %s --check-prefix=RAW80 81# RAW: Name: .sec182# 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: 0x1FFF888# RAW-NEXT: Offset:89# RAW-NEXT: Size: 1190 91# RAW: Name: .sec292# 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: 0xFFFF898# RAW-NEXT: Offset:99# RAW-NEXT: Size: 11100 101# RAW: Name: .sec3102# 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: 0x1FFFF8108# RAW-NEXT: Offset:109# RAW-NEXT: Size: 11110 111## Check section contents.112# RUN: llvm-objcopy -O ihex --only-section=.sec1 %t-raw - | FileCheck %s --check-prefix=RAW-SEC1113 114# RAW-SEC1: :020000021000EC115# RAW-SEC1-NEXT: :08FFF8000001020304050607E5116# RAW-SEC1-NEXT: :020000022000DC117# RAW-SEC1-NEXT: :0300000008090AE2118 119# RUN: llvm-objcopy -O ihex --only-section=.sec2 %t-raw - | FileCheck %s --check-prefix=RAW-SEC2120 121# RAW-SEC2: :02000002F0000C122# RAW-SEC2-NEXT: :08FFF800303132333435363765123# RAW-SEC2-NEXT: :020000020000FC124# RAW-SEC2-NEXT: :020000040010EA125# RAW-SEC2-NEXT: :030000003839404C126 127# RUN: llvm-objcopy -O ihex --only-section=.sec3 %t-raw - | FileCheck %s --check-prefix=RAW-SEC3128 129# RAW-SEC3: :02000004001FDB130# RAW-SEC3-NEXT: :08FFF8004041424344454647E5131# RAW-SEC3-NEXT: :020000040020DA132# RAW-SEC3-NEXT: :030000004849501C133 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=SPACES137 138# SPACES: :0100000001FE139# SPACES-NEXT: :00000001FF140 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_LENGTH144 145# BAD_LENGTH: error: '{{.*}}': line 1: line is too short: 10 chars146 147## 2. Missing ':'.148# RUN: echo "0100000000FF" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=MISSING_COLON149 150# MISSING_COLON: error: '{{.*}}': line 1: missing ':' in the beginning of line151 152## 3. Invalid charatcer.153# RUN: echo ":01000000xF" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_CHAR154 155# BAD_CHAR: error: '{{.*}}': line 1: invalid character at position 10156 157## 4. Incorrect string length.158# RUN: echo ":010000000000000F" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_LENGTH2159 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_TYPE164 165# BAD_TYPE: error: '{{.*}}': line 1: unknown record type: 6166 167## 6. Invalid checksum.168# RUN: echo ":00000001FA" | not llvm-objcopy -I ihex -O elf32-i386 - - 2>&1 | FileCheck %s --check-prefix=BAD_CKSUM169 170# BAD_CKSUM: error: '{{.*}}': line 1: incorrect checksum171 172## 7. Zero data length.173# RUN: echo ":00010000FF" | not llvm-objcopy -I ihex - - 2>&1 | FileCheck %s --check-prefix=ZERO_DATA_LEN174 175# ZERO_DATA_LEN: error: '{{.*}}': line 1: zero data length is not allowed for data records176 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_LEN179 180# BAD_SEGADDR_LEN: error: '{{.*}}': line 1: segment address data should be 2 bytes in size181 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_LEN184 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_LEN187 188# BAD_STARTADDR_LEN: error: '{{.*}}': line 1: start address data should be 4 bytes in size189 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_STARTADDR192 193# BAD_STARTADDR: error: '{{.*}}': line 1: start address exceeds 20 bit for 80x86194 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_LEN197 198# BAD_EXTADDR_LEN: error: '{{.*}}': line 1: extended address data should be 2 bytes in size199 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_SECTIONS203## b) EOF record should cancel processing further records. Not having any section data204## before EOF should trigger an error.205# RUN: echo ":00000001FF" > %t-bad14.hex206# RUN: echo ":0100000001FE" >> %t-bad14.hex207# RUN: not llvm-objcopy -I ihex %t-bad14.hex %t-none 2>&1 | FileCheck %s --check-prefix=NO_SECTIONS208 209# NO_SECTIONS: error: '{{.*}}': no sections210