1# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t.o 2# RUN: ld.lld %t.o -o %t.exe 3# RUN: llvm-readobj -file-headers -sections -program-headers -symbols %t.exe \ 4# RUN: | FileCheck %s 5 6# REQUIRES: mips 7 8# Exits with return code 1 on Linux. 9 .globl __start 10__start: 11 li $a0,1 12 li $v0,4001 13 syscall 14 15# CHECK: ElfHeader { 16# CHECK-NEXT: Ident { 17# CHECK-NEXT: Magic: (7F 45 4C 46) 18# CHECK-NEXT: Class: 32-bit (0x1) 19# CHECK-NEXT: DataEncoding: LittleEndian (0x1) 20# CHECK-NEXT: FileVersion: 1 21# CHECK-NEXT: OS/ABI: SystemV (0x0) 22# CHECK-NEXT: ABIVersion: 0 23# CHECK-NEXT: Unused: (00 00 00 00 00 00 00) 24# CHECK-NEXT: } 25# CHECK-NEXT: Type: Executable (0x2) 26# CHECK-NEXT: Machine: EM_MIPS (0x8) 27# CHECK-NEXT: Version: 1 28# CHECK-NEXT: Entry: 0x20000 29# CHECK-NEXT: ProgramHeaderOffset: 0x34 30# CHECK-NEXT: SectionHeaderOffset: 0x30088 31# CHECK-NEXT: Flags [ 32# CHECK-NEXT: EF_MIPS_ABI_O32 33# CHECK-NEXT: EF_MIPS_ARCH_32R2 34# CHECK-NEXT: EF_MIPS_CPIC 35# CHECK-NEXT: ] 36# CHECK-NEXT: HeaderSize: 52 37# CHECK-NEXT: ProgramHeaderEntrySize: 32 38# CHECK-NEXT: ProgramHeaderCount: 6 39# CHECK-NEXT: SectionHeaderEntrySize: 40 40# CHECK-NEXT: SectionHeaderCount: 10 41# CHECK-NEXT: StringTableSectionIndex: 8 42# CHECK-NEXT: } 43# CHECK-NEXT: Sections [ 44# CHECK-NEXT: Section { 45# CHECK-NEXT: Index: 0 46# CHECK-NEXT: Name: (0) 47# CHECK-NEXT: Type: SHT_NULL (0x0) 48# CHECK-NEXT: Flags [ (0x0) 49# CHECK-NEXT: ] 50# CHECK-NEXT: Address: 0x0 51# CHECK-NEXT: Offset: 0x0 52# CHECK-NEXT: Size: 0 53# CHECK-NEXT: Link: 0 54# CHECK-NEXT: Info: 0 55# CHECK-NEXT: AddressAlignment: 0 56# CHECK-NEXT: EntrySize: 0 57# CHECK-NEXT: } 58# CHECK-NEXT: Section { 59# CHECK-NEXT: Index: 1 60# CHECK-NEXT: Name: .reginfo 61# CHECK-NEXT: Type: SHT_MIPS_REGINFO (0x70000006) 62# CHECK-NEXT: Flags [ (0x2) 63# CHECK-NEXT: SHF_ALLOC (0x2) 64# CHECK-NEXT: ] 65# CHECK-NEXT: Address: 0x100F4 66# CHECK-NEXT: Offset: 0xF4 67# CHECK-NEXT: Size: 24 68# CHECK-NEXT: Link: 0 69# CHECK-NEXT: Info: 0 70# CHECK-NEXT: AddressAlignment: 4 71# CHECK-NEXT: EntrySize: 24 72# CHECK-NEXT: } 73# CHECK-NEXT: Section { 74# CHECK-NEXT: Index: 2 75# CHECK-NEXT: Name: .MIPS.abiflags 76# CHECK-NEXT: Type: SHT_MIPS_ABIFLAGS (0x7000002A) 77# CHECK-NEXT: Flags [ (0x2) 78# CHECK-NEXT: SHF_ALLOC (0x2) 79# CHECK-NEXT: ] 80# CHECK-NEXT: Address: 0x10110 81# CHECK-NEXT: Offset: 0x110 82# CHECK-NEXT: Size: 24 83# CHECK-NEXT: Link: 0 84# CHECK-NEXT: Info: 0 85# CHECK-NEXT: AddressAlignment: 8 86# CHECK-NEXT: EntrySize: 0 87# CHECK-NEXT: } 88# CHECK-NEXT: Section { 89# CHECK-NEXT: Index: 3 90# CHECK-NEXT: Name: .text (25) 91# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 92# CHECK-NEXT: Flags [ (0x6) 93# CHECK-NEXT: SHF_ALLOC (0x2) 94# CHECK-NEXT: SHF_EXECINSTR (0x4) 95# CHECK-NEXT: ] 96# CHECK-NEXT: Address: 0x20000 97# CHECK-NEXT: Offset: 0x10000 98# CHECK-NEXT: Size: 12 99# CHECK-NEXT: Link: 0 100# CHECK-NEXT: Info: 0 101# CHECK-NEXT: AddressAlignment: 16 102# CHECK-NEXT: EntrySize: 0 103# CHECK-NEXT: } 104# CHECK-NEXT: Section { 105# CHECK-NEXT: Index: 4 106# CHECK-NEXT: Name: .got (31) 107# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 108# CHECK-NEXT: Flags [ (0x10000003) 109# CHECK-NEXT: SHF_ALLOC (0x2) 110# CHECK-NEXT: SHF_MIPS_GPREL (0x10000000) 111# CHECK-NEXT: SHF_WRITE (0x1) 112# CHECK-NEXT: ] 113# CHECK-NEXT: Address: 0x30000 114# CHECK-NEXT: Offset: 0x20000 115# CHECK-NEXT: Size: 8 116# CHECK-NEXT: Link: 0 117# CHECK-NEXT: Info: 0 118# CHECK-NEXT: AddressAlignment: 4 119# CHECK-NEXT: EntrySize: 0 120# CHECK-NEXT: } 121# CHECK-NEXT: Section { 122# CHECK-NEXT: Index: 5 123# CHECK-NEXT: Name: .data 124# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 125# CHECK-NEXT: Flags [ (0x3) 126# CHECK-NEXT: SHF_ALLOC (0x2) 127# CHECK-NEXT: SHF_WRITE (0x1) 128# CHECK-NEXT: ] 129# CHECK-NEXT: Address: 0x40000 130# CHECK-NEXT: Offset: 0x30000 131# CHECK-NEXT: Size: 0 132# CHECK-NEXT: Link: 0 133# CHECK-NEXT: Info: 0 134# CHECK-NEXT: AddressAlignment: 16 135# CHECK-NEXT: EntrySize: 0 136# CHECK-NEXT: } 137# CHECK-NEXT: Section { 138# CHECK-NEXT: Index: 6 139# CHECK-NEXT: Name: .bss 140# CHECK-NEXT: Type: SHT_NOBITS (0x8) 141# CHECK-NEXT: Flags [ (0x3) 142# CHECK-NEXT: SHF_ALLOC (0x2) 143# CHECK-NEXT: SHF_WRITE (0x1) 144# CHECK-NEXT: ] 145# CHECK-NEXT: Address: 0x40000 146# CHECK-NEXT: Offset: 0x30000 147# CHECK-NEXT: Size: 0 148# CHECK-NEXT: Link: 0 149# CHECK-NEXT: Info: 0 150# CHECK-NEXT: AddressAlignment: 16 151# CHECK-NEXT: EntrySize: 0 152# CHECK-NEXT: } 153# CHECK-NEXT: Section { 154# CHECK-NEXT: Index: 7 155# CHECK-NEXT: Name: .symtab 156# CHECK-NEXT: Type: SHT_SYMTAB (0x2) 157# CHECK-NEXT: Flags [ (0x0) 158# CHECK-NEXT: ] 159# CHECK-NEXT: Address: 0x0 160# CHECK-NEXT: Offset: 0x30000 161# CHECK-NEXT: Size: 48 162# CHECK-NEXT: Link: 9 163# CHECK-NEXT: Info: 1 164# CHECK-NEXT: AddressAlignment: 4 165# CHECK-NEXT: EntrySize: 16 166# CHECK-NEXT: } 167# CHECK-NEXT: Section { 168# CHECK-NEXT: Index: 8 169# CHECK-NEXT: Name: .shstrtab 170# CHECK-NEXT: Type: SHT_STRTAB (0x3) 171# CHECK-NEXT: Flags [ (0x0) 172# CHECK-NEXT: ] 173# CHECK-NEXT: Address: 0x0 174# CHECK-NEXT: Offset: 0x30030 175# CHECK-NEXT: Size: 73 176# CHECK-NEXT: Link: 0 177# CHECK-NEXT: Info: 0 178# CHECK-NEXT: AddressAlignment: 1 179# CHECK-NEXT: EntrySize: 0 180# CHECK-NEXT: } 181# CHECK-NEXT: Section { 182# CHECK-NEXT: Index: 9 183# CHECK-NEXT: Name: .strtab 184# CHECK-NEXT: Type: SHT_STRTAB (0x3) 185# CHECK-NEXT: Flags [ (0x0) 186# CHECK-NEXT: ] 187# CHECK-NEXT: Address: 0x0 188# CHECK-NEXT: Offset: 0x30079 189# CHECK-NEXT: Size: 13 190# CHECK-NEXT: Link: 0 191# CHECK-NEXT: Info: 0 192# CHECK-NEXT: AddressAlignment: 1 193# CHECK-NEXT: EntrySize: 0 194# CHECK-NEXT: } 195# CHECK-NEXT: ] 196# CHECK-NEXT: Symbols [ 197# CHECK-NEXT: Symbol { 198# CHECK-NEXT: Name: (0) 199# CHECK-NEXT: Value: 0x0 200# CHECK-NEXT: Size: 0 201# CHECK-NEXT: Binding: Local (0x0) 202# CHECK-NEXT: Type: None (0x0) 203# CHECK-NEXT: Other: 0 204# CHECK-NEXT: Section: Undefined (0x0) 205# CHECK-NEXT: } 206# CHECK-NEXT: Symbol { 207# CHECK-NEXT: Name: _gp 208# CHECK-NEXT: Value: 0x37FF0 209# CHECK-NEXT: Size: 0 210# CHECK-NEXT: Binding: Local 211# CHECK-NEXT: Type: None (0x0) 212# CHECK-NEXT: Other [ (0x2) 213# CHECK-NEXT: STV_HIDDEN (0x2) 214# CHECK-NEXT: ] 215# CHECK-NEXT: Section: .got 216# CHECK-NEXT: } 217# CHECK-NEXT: Symbol { 218# CHECK-NEXT: Name: __start 219# CHECK-NEXT: Value: 0x20000 220# CHECK-NEXT: Size: 0 221# CHECK-NEXT: Binding: Global (0x1) 222# CHECK-NEXT: Type: None (0x0) 223# CHECK-NEXT: Other: 0 224# CHECK-NEXT: Section: .text 225# CHECK-NEXT: } 226# CHECK-NEXT: ] 227# CHECK-NEXT: ProgramHeaders [ 228# CHECK-NEXT: ProgramHeader { 229# CHECK-NEXT: Type: PT_PHDR (0x6) 230# CHECK-NEXT: Offset: 0x34 231# CHECK-NEXT: VirtualAddress: 0x10034 232# CHECK-NEXT: PhysicalAddress: 0x10034 233# CHECK-NEXT: FileSize: 192 234# CHECK-NEXT: MemSize: 192 235# CHECK-NEXT: Flags [ (0x4) 236# CHECK-NEXT: PF_R (0x4) 237# CHECK-NEXT: ] 238# CHECK-NEXT: Alignment: 4 239# CHECK-NEXT: } 240# CHECK-NEXT: ProgramHeader { 241# CHECK-NEXT: Type: PT_LOAD (0x1) 242# CHECK-NEXT: Offset: 0x0 243# CHECK-NEXT: VirtualAddress: 0x10000 244# CHECK-NEXT: PhysicalAddress: 0x10000 245# CHECK-NEXT: FileSize: 296 246# CHECK-NEXT: MemSize: 296 247# CHECK-NEXT: Flags [ (0x4) 248# CHECK-NEXT: PF_R (0x4) 249# CHECK-NEXT: ] 250# CHECK-NEXT: Alignment: 65536 251# CHECK-NEXT: } 252# CHECK-NEXT: ProgramHeader { 253# CHECK-NEXT: Type: PT_LOAD (0x1) 254# CHECK-NEXT: Offset: 0x10000 255# CHECK-NEXT: VirtualAddress: 0x20000 256# CHECK-NEXT: PhysicalAddress: 0x20000 257# CHECK-NEXT: FileSize: 12 258# CHECK-NEXT: MemSize: 12 259# CHECK-NEXT: Flags [ (0x5) 260# CHECK-NEXT: PF_R (0x4) 261# CHECK-NEXT: PF_X (0x1) 262# CHECK-NEXT: ] 263# CHECK-NEXT: Alignment: 65536 264# CHECK-NEXT: } 265# CHECK-NEXT: ProgramHeader { 266# CHECK-NEXT: Type: PT_LOAD (0x1) 267# CHECK-NEXT: Offset: 0x20000 268# CHECK-NEXT: VirtualAddress: 0x30000 269# CHECK-NEXT: PhysicalAddress: 0x30000 270# CHECK-NEXT: FileSize: 65536 271# CHECK-NEXT: MemSize: 65536 272# CHECK-NEXT: Flags [ 273# CHECK-NEXT: PF_R 274# CHECK-NEXT: PF_W 275# CHECK-NEXT: ] 276# CHECK-NEXT: Alignment: 65536 277# CHECK-NEXT: } 278# CHECK-NEXT: ProgramHeader { 279# CHECK-NEXT: Type: PT_GNU_RELRO (0x6474E552) 280# CHECK-NEXT: Offset: 0x20000 281# CHECK-NEXT: VirtualAddress: 0x30000 282# CHECK-NEXT: PhysicalAddress: 0x30000 283# CHECK-NEXT: FileSize: 8 284# CHECK-NEXT: MemSize: 8 285# CHECK-NEXT: Flags [ (0x4) 286# CHECK-NEXT: PF_R (0x4) 287# CHECK-NEXT: ] 288# CHECK-NEXT: Alignment: 1 289# CHECK-NEXT: } 290# CHECK-NEXT: ProgramHeader { 291# CHECK-NEXT: Type: PT_GNU_STACK 292# CHECK-NEXT: Offset: 0x0 293# CHECK-NEXT: VirtualAddress: 0x0 294# CHECK-NEXT: PhysicalAddress: 0x0 295# CHECK-NEXT: FileSize: 0 296# CHECK-NEXT: MemSize: 0 297# CHECK-NEXT: Flags [ 298# CHECK-NEXT: PF_R 299# CHECK-NEXT: PF_W 300# CHECK-NEXT: ] 301# CHECK-NEXT: Alignment: 0 302# CHECK-NEXT: } 303# CHECK-NEXT:] 304