1## Validate MSPABI ELF Build Attributes 2 3## The header of .MSP430.attributes can be specified with. 4## ContentArray: [ 0x41, 0x16, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x70, 0x61, 0x62, 5## 0x69, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x00, 6## 7## Following that are individual bytes describing the ISA, code model, data 8## model and optionally enum size. 9## 10## If enum size is being tested, then the second byte (indicating the length of 11## the section), and last 32-bit int (indicating the length of the 12## subsection) of the header should be incremented by 2. This is to account for 13## the additional bytes for the enum size tag and value. 14 15# HEADER: BuildAttributes { 16# HEADER-NEXT: FormatVersion: 0x41 17# HEADER-NEXT: Section 1 { 18# HEADER-NEXT: SectionLength: 22 19# HEADER-NEXT: Vendor: mspabi 20# HEADER-NEXT: Tag: Tag_File (0x1) 21# HEADER-NEXT: Size: 11 22 23# ENUM-HEADER: BuildAttributes { 24# ENUM-HEADER-NEXT: FormatVersion: 0x41 25# ENUM-HEADER-NEXT: Section 1 { 26# ENUM-HEADER-NEXT: SectionLength: 24 27# ENUM-HEADER-NEXT: Vendor: mspabi 28# ENUM-HEADER-NEXT: Tag: Tag_File (0x1) 29# ENUM-HEADER-NEXT: Size: 13 30 31# MSP430: Tag: 4 32# MSP430-NEXT: Value: 1 33# MSP430-NEXT: TagName: ISA 34# MSP430-NEXT: Description: MSP430 35 36# MSP430X: Tag: 4 37# MSP430X-NEXT: Value: 2 38# MSP430X-NEXT: TagName: ISA 39# MSP430X-NEXT: Description: MSP430X 40 41# SMALL-CODE: Tag: 6 42# SMALL-CODE-NEXT: Value: 1 43# SMALL-CODE-NEXT: TagName: Code_Model 44# SMALL-CODE-NEXT: Description: Small 45 46# LARGE-CODE: Tag: 6 47# LARGE-CODE-NEXT: Value: 2 48# LARGE-CODE-NEXT: TagName: Code_Model 49# LARGE-CODE-NEXT: Description: Large 50 51# SMALL-DATA: Tag: 8 52# SMALL-DATA-NEXT: Value: 1 53# SMALL-DATA-NEXT: TagName: Data_Model 54# SMALL-DATA-NEXT: Description: Small 55 56# LARGE-DATA: Tag: 8 57# LARGE-DATA-NEXT: Value: 2 58# LARGE-DATA-NEXT: TagName: Data_Model 59# LARGE-DATA-NEXT: Description: Large 60 61# RESTRICTED-DATA: Tag: 8 62# RESTRICTED-DATA-NEXT: Value: 3 63# RESTRICTED-DATA-NEXT: TagName: Data_Model 64# RESTRICTED-DATA-NEXT: Description: Restricted 65 66# SMALL-ENUM: Tag: 10 67# SMALL-ENUM-NEXT: Value: 1 68# SMALL-ENUM-NEXT: TagName: Enum_Size 69# SMALL-ENUM-NEXT: Description: Small 70 71# INTEGER-ENUM: Tag: 10 72# INTEGER-ENUM-NEXT: Value: 2 73# INTEGER-ENUM-NEXT: TagName: Enum_Size 74# INTEGER-ENUM-NEXT: Description: Integer 75 76# DONT-CARE-ENUM: Tag: 10 77# DONT-CARE-ENUM-NEXT: Value: 3 78# DONT-CARE-ENUM-NEXT: TagName: Enum_Size 79# DONT-CARE-ENUM-NEXT: Description: Don't Care 80 81## MSP430 ISA 82# RUN: yaml2obj --docnum=1 %s -o %t.o 83# RUN: llvm-readobj -A %t.o | FileCheck %s --check-prefixes HEADER,MSP430,SMALL-CODE,SMALL-DATA 84 85--- !ELF 86FileHeader: 87 Class: ELFCLASS32 88 Data: ELFDATA2LSB 89 Type: ET_REL 90 Machine: EM_MSP430 91Sections: 92 - Name: .MSP430.attributes 93 Type: SHT_MSP430_ATTRIBUTES 94 ContentArray: [ 0x41, 0x16, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x70, 0x61, 0x62, 95 0x69, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x00, 96 0x04, 0x01, 0x06, 0x01, 0x08, 0x01 ] 97 98 99## MSP430X ISA, Small Code Model, Small Data Model 100# RUN: yaml2obj --docnum=2 %s -o %t.o 101# RUN: llvm-readobj -A %t.o | FileCheck %s --check-prefixes HEADER,MSP430X,SMALL-CODE,SMALL-DATA 102 103--- !ELF 104FileHeader: 105 Class: ELFCLASS32 106 Data: ELFDATA2LSB 107 Type: ET_REL 108 Machine: EM_MSP430 109Sections: 110 - Name: .MSP430.attributes 111 Type: SHT_MSP430_ATTRIBUTES 112 ContentArray: [ 0x41, 0x16, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x70, 0x61, 0x62, 113 0x69, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x00, 114 0x04, 0x02, 0x06, 0x01, 0x08, 0x01 ] 115 116## MSP430X Large Code Model, Small Data Model 117# RUN: yaml2obj --docnum=3 %s -o %t.o 118# RUN: llvm-readobj -A %t.o | FileCheck %s --check-prefixes HEADER,MSP430X,LARGE-CODE,SMALL-DATA 119 120--- !ELF 121FileHeader: 122 Class: ELFCLASS32 123 Data: ELFDATA2LSB 124 Type: ET_REL 125 Machine: EM_MSP430 126Sections: 127 - Name: .MSP430.attributes 128 Type: SHT_MSP430_ATTRIBUTES 129 ContentArray: [ 0x41, 0x16, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x70, 0x61, 0x62, 130 0x69, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x00, 131 0x04, 0x02, 0x06, 0x02, 0x08, 0x01 ] 132 133## MSP430X Small Code Model, Large Data Model 134# RUN: yaml2obj --docnum=4 %s -o %t.o 135# RUN: llvm-readobj -A %t.o | FileCheck %s --check-prefixes HEADER,MSP430X,SMALL-CODE,LARGE-DATA 136 137--- !ELF 138FileHeader: 139 Class: ELFCLASS32 140 Data: ELFDATA2LSB 141 Type: ET_REL 142 Machine: EM_MSP430 143Sections: 144 - Name: .MSP430.attributes 145 Type: SHT_MSP430_ATTRIBUTES 146 ContentArray: [ 0x41, 0x16, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x70, 0x61, 0x62, 147 0x69, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x00, 148 0x04, 0x02, 0x06, 0x01, 0x08, 0x02 ] 149 150## MSP430X Small Code Model, Restricted Data Model 151# RUN: yaml2obj --docnum=5 %s -o %t.o 152# RUN: llvm-readobj -A %t.o | FileCheck %s --check-prefixes HEADER,MSP430X,SMALL-CODE,RESTRICTED-DATA 153 154--- !ELF 155FileHeader: 156 Class: ELFCLASS32 157 Data: ELFDATA2LSB 158 Type: ET_REL 159 Machine: EM_MSP430 160Sections: 161 - Name: .MSP430.attributes 162 Type: SHT_MSP430_ATTRIBUTES 163 ContentArray: [ 0x41, 0x16, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x70, 0x61, 0x62, 164 0x69, 0x00, 0x01, 0x0b, 0x00, 0x00, 0x00, 165 0x04, 0x02, 0x06, 0x01, 0x08, 0x03 ] 166 167## MSP430X Small Code Model, Small Data Model, Small Enums 168# RUN: yaml2obj --docnum=6 %s -o %t.o 169# RUN: llvm-readobj -A %t.o | FileCheck %s --check-prefixes ENUM-HEADER,MSP430X,SMALL-CODE,SMALL-DATA,SMALL-ENUM 170 171--- !ELF 172FileHeader: 173 Class: ELFCLASS32 174 Data: ELFDATA2LSB 175 Type: ET_REL 176 Machine: EM_MSP430 177Sections: 178 - Name: .MSP430.attributes 179 Type: SHT_MSP430_ATTRIBUTES 180 ContentArray: [ 0x41, 0x18, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x70, 0x61, 0x62, 181 0x69, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x00, 182 0x04, 0x02, 0x06, 0x01, 0x08, 0x01, 0x0a, 0x01 ] 183 184## MSP430X Small Code Model, Small Data Model, Integer Enums 185# RUN: yaml2obj --docnum=7 %s -o %t.o 186# RUN: llvm-readobj -A %t.o | FileCheck %s --check-prefixes ENUM-HEADER,MSP430X,SMALL-CODE,SMALL-DATA,INTEGER-ENUM 187 188--- !ELF 189FileHeader: 190 Class: ELFCLASS32 191 Data: ELFDATA2LSB 192 Type: ET_REL 193 Machine: EM_MSP430 194Sections: 195 - Name: .MSP430.attributes 196 Type: SHT_MSP430_ATTRIBUTES 197 ContentArray: [ 0x41, 0x18, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x70, 0x61, 0x62, 198 0x69, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x00, 199 0x04, 0x02, 0x06, 0x01, 0x08, 0x01, 0x0a, 0x02 ] 200 201 202## MSP430X Small Code Model, Small Data Model, "Don't Care" Enums 203# RUN: yaml2obj --docnum=8 %s -o %t.o 204# RUN: llvm-readobj -A %t.o | FileCheck %s --check-prefixes ENUM-HEADER,MSP430X,SMALL-CODE,SMALL-DATA,DONT-CARE-ENUM 205 206--- !ELF 207FileHeader: 208 Class: ELFCLASS32 209 Data: ELFDATA2LSB 210 Type: ET_REL 211 Machine: EM_MSP430 212Sections: 213 - Name: .MSP430.attributes 214 Type: SHT_MSP430_ATTRIBUTES 215 ContentArray: [ 0x41, 0x18, 0x00, 0x00, 0x00, 0x6D, 0x73, 0x70, 0x61, 0x62, 216 0x69, 0x00, 0x01, 0x0d, 0x00, 0x00, 0x00, 217 0x04, 0x02, 0x06, 0x01, 0x08, 0x01, 0x0a, 0x03 ] 218