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: 0x20084 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: 5 39# CHECK-NEXT: SectionHeaderEntrySize: 40 40# CHECK-NEXT: SectionHeaderCount: 9 41# CHECK-NEXT: StringTableSectionIndex: 7 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: 0x100D4 66# CHECK-NEXT: Offset: 0xD4 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: 0x100F0 81# CHECK-NEXT: Offset: 0xF0 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: .data 107# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 108# CHECK-NEXT: Flags [ (0x3) 109# CHECK-NEXT: SHF_ALLOC (0x2) 110# CHECK-NEXT: SHF_WRITE (0x1) 111# CHECK-NEXT: ] 112# CHECK-NEXT: Address: 0x30000 113# CHECK-NEXT: Offset: 0x20000 114# CHECK-NEXT: Size: 0 115# CHECK-NEXT: Link: 0 116# CHECK-NEXT: Info: 0 117# CHECK-NEXT: AddressAlignment: 16 118# CHECK-NEXT: EntrySize: 0 119# CHECK-NEXT: } 120# CHECK-NEXT: Section { 121# CHECK-NEXT: Index: 5 122# CHECK-NEXT: Name: .bss (37) 123# CHECK-NEXT: Type: SHT_NOBITS (0x8) 124# CHECK-NEXT: Flags [ (0x3) 125# CHECK-NEXT: SHF_ALLOC (0x2) 126# CHECK-NEXT: SHF_WRITE (0x1) 127# CHECK-NEXT: ] 128# CHECK-NEXT: Address: 0x30000 129# CHECK-NEXT: Offset: 0x20000 130# CHECK-NEXT: Size: 0 131# CHECK-NEXT: Link: 0 132# CHECK-NEXT: Info: 0 133# CHECK-NEXT: AddressAlignment: 16 134# CHECK-NEXT: EntrySize: 0 135# CHECK-NEXT: } 136# CHECK-NEXT: Section { 137# CHECK-NEXT: Index: 6 138# CHECK-NEXT: Name: .symtab 139# CHECK-NEXT: Type: SHT_SYMTAB (0x2) 140# CHECK-NEXT: Flags [ (0x0) 141# CHECK-NEXT: ] 142# CHECK-NEXT: Address: 0x0 143# CHECK-NEXT: Offset: 0x20000 144# CHECK-NEXT: Size: 48 145# CHECK-NEXT: Link: 8 146# CHECK-NEXT: Info: 1 147# CHECK-NEXT: AddressAlignment: 4 148# CHECK-NEXT: EntrySize: 16 149# CHECK-NEXT: } 150# CHECK-NEXT: Section { 151# CHECK-NEXT: Index: 7 152# CHECK-NEXT: Name: .shstrtab 153# CHECK-NEXT: Type: SHT_STRTAB (0x3) 154# CHECK-NEXT: Flags [ (0x0) 155# CHECK-NEXT: ] 156# CHECK-NEXT: Address: 0x0 157# CHECK-NEXT: Offset: 0x20030 158# CHECK-NEXT: Size: 68 159# CHECK-NEXT: Link: 0 160# CHECK-NEXT: Info: 0 161# CHECK-NEXT: AddressAlignment: 1 162# CHECK-NEXT: EntrySize: 0 163# CHECK-NEXT: } 164# CHECK-NEXT: Section { 165# CHECK-NEXT: Index: 8 166# CHECK-NEXT: Name: .strtab (60) 167# CHECK-NEXT: Type: SHT_STRTAB (0x3) 168# CHECK-NEXT: Flags [ (0x0) 169# CHECK-NEXT: ] 170# CHECK-NEXT: Address: 0x0 171# CHECK-NEXT: Offset: 0x20074 172# CHECK-NEXT: Size: 13 173# CHECK-NEXT: Link: 0 174# CHECK-NEXT: Info: 0 175# CHECK-NEXT: AddressAlignment: 1 176# CHECK-NEXT: EntrySize: 0 177# CHECK-NEXT: } 178# CHECK-NEXT: ] 179# CHECK-NEXT: Symbols [ 180# CHECK-NEXT: Symbol { 181# CHECK-NEXT: Name: (0) 182# CHECK-NEXT: Value: 0x0 183# CHECK-NEXT: Size: 0 184# CHECK-NEXT: Binding: Local (0x0) 185# CHECK-NEXT: Type: None (0x0) 186# CHECK-NEXT: Other: 0 187# CHECK-NEXT: Section: Undefined (0x0) 188# CHECK-NEXT: } 189# CHECK-NEXT: Symbol { 190# CHECK-NEXT: Name: _gp 191# CHECK-NEXT: Value: 0x0 192# CHECK-NEXT: Size: 0 193# CHECK-NEXT: Binding: Local (0x0) 194# CHECK-NEXT: Type: None (0x0) 195# CHECK-NEXT: Other: 0 196# CHECK-NEXT: Section: Absolute (0xFFF1) 197# CHECK-NEXT: } 198# CHECK-NEXT: Symbol { 199# CHECK-NEXT: Name: __start 200# CHECK-NEXT: Value: 0x20000 201# CHECK-NEXT: Size: 0 202# CHECK-NEXT: Binding: Global (0x1) 203# CHECK-NEXT: Type: None (0x0) 204# CHECK-NEXT: Other: 0 205# CHECK-NEXT: Section: .text 206# CHECK-NEXT: } 207# CHECK-NEXT: ] 208# CHECK-NEXT: ProgramHeaders [ 209# CHECK-NEXT: ProgramHeader { 210# CHECK-NEXT: Type: PT_PHDR (0x6) 211# CHECK-NEXT: Offset: 0x34 212# CHECK-NEXT: VirtualAddress: 0x10034 213# CHECK-NEXT: PhysicalAddress: 0x10034 214# CHECK-NEXT: FileSize: 160 215# CHECK-NEXT: MemSize: 160 216# CHECK-NEXT: Flags [ (0x4) 217# CHECK-NEXT: PF_R (0x4) 218# CHECK-NEXT: ] 219# CHECK-NEXT: Alignment: 8 220# CHECK-NEXT: } 221# CHECK-NEXT: ProgramHeader { 222# CHECK-NEXT: Type: PT_LOAD (0x1) 223# CHECK-NEXT: Offset: 0x0 224# CHECK-NEXT: VirtualAddress: 0x10000 225# CHECK-NEXT: PhysicalAddress: 0x10000 226# CHECK-NEXT: FileSize: 264 227# CHECK-NEXT: MemSize: 264 228# CHECK-NEXT: Flags [ (0x4) 229# CHECK-NEXT: PF_R (0x4) 230# CHECK-NEXT: ] 231# CHECK-NEXT: Alignment: 65536 232# CHECK-NEXT: } 233# CHECK-NEXT: ProgramHeader { 234# CHECK-NEXT: Type: PT_LOAD (0x1) 235# CHECK-NEXT: Offset: 0x10000 236# CHECK-NEXT: VirtualAddress: 0x20000 237# CHECK-NEXT: PhysicalAddress: 0x20000 238# CHECK-NEXT: FileSize: 12 239# CHECK-NEXT: MemSize: 12 240# CHECK-NEXT: Flags [ (0x5) 241# CHECK-NEXT: PF_R (0x4) 242# CHECK-NEXT: PF_X (0x1) 243# CHECK-NEXT: ] 244# CHECK-NEXT: Alignment: 65536 245# CHECK-NEXT: } 246# CHECK-NEXT: ProgramHeader { 247# CHECK-NEXT: Type: PT_LOAD (0x1) 248# CHECK-NEXT: Offset: 0x20000 249# CHECK-NEXT: VirtualAddress: 0x30000 250# CHECK-NEXT: PhysicalAddress: 0x30000 251# CHECK-NEXT: FileSize: 0 252# CHECK-NEXT: MemSize: 0 253# CHECK-NEXT: Flags [ 254# CHECK-NEXT: PF_R 255# CHECK-NEXT: PF_W 256# CHECK-NEXT: ] 257# CHECK-NEXT: Alignment: 65536 258# CHECK-NEXT: } 259# CHECK-NEXT: ProgramHeader { 260# CHECK-NEXT: Type: PT_GNU_STACK 261# CHECK-NEXT: Offset: 0x0 262# CHECK-NEXT: VirtualAddress: 0x0 263# CHECK-NEXT: PhysicalAddress: 0x0 264# CHECK-NEXT: FileSize: 0 265# CHECK-NEXT: MemSize: 0 266# CHECK-NEXT: Flags [ 267# CHECK-NEXT: PF_R 268# CHECK-NEXT: PF_W 269# CHECK-NEXT: ] 270# CHECK-NEXT: Alignment: 0 271# CHECK-NEXT: } 272# CHECK-NEXT:] 273