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: 0x200A0 31# CHECK-NEXT: Flags [ 32# CHECK-NEXT: EF_MIPS_ABI_O32 33# CHECK-NEXT: EF_MIPS_ARCH_32 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: 11 41# CHECK-NEXT: StringTableSectionIndex: 9 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: .MIPS.abiflags 61# CHECK-NEXT: Type: SHT_MIPS_ABIFLAGS (0x7000002A) 62# CHECK-NEXT: Flags [ (0x2) 63# CHECK-NEXT: SHF_ALLOC (0x2) 64# CHECK-NEXT: ] 65# CHECK-NEXT: Address: 0x100F8 66# CHECK-NEXT: Offset: 0xF8 67# CHECK-NEXT: Size: 24 68# CHECK-NEXT: Link: 0 69# CHECK-NEXT: Info: 0 70# CHECK-NEXT: AddressAlignment: 8 71# CHECK-NEXT: EntrySize: 24 72# CHECK-NEXT: } 73# CHECK-NEXT: Section { 74# CHECK-NEXT: Index: 2 75# CHECK-NEXT: Name: .reginfo 76# CHECK-NEXT: Type: SHT_MIPS_REGINFO (0x70000006) 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: 4 86# CHECK-NEXT: EntrySize: 24 87# CHECK-NEXT: } 88# CHECK-NEXT: Section { 89# CHECK-NEXT: Index: 3 90# CHECK-NEXT: Name: .text 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: .got 123# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 124# CHECK-NEXT: Flags [ (0x10000003) 125# CHECK-NEXT: SHF_ALLOC (0x2) 126# CHECK-NEXT: SHF_MIPS_GPREL (0x10000000) 127# CHECK-NEXT: SHF_WRITE (0x1) 128# CHECK-NEXT: ] 129# CHECK-NEXT: Address: 0x30000 130# CHECK-NEXT: Offset: 0x20000 131# CHECK-NEXT: Size: 8 132# CHECK-NEXT: Link: 0 133# CHECK-NEXT: Info: 0 134# CHECK-NEXT: AddressAlignment: 4 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: 0x20008 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: .comment 156# CHECK-NEXT: Type: SHT_PROGBITS (0x1) 157# CHECK-NEXT: Flags [ (0x30) 158# CHECK-NEXT: SHF_MERGE (0x10) 159# CHECK-NEXT: SHF_STRINGS (0x20) 160# CHECK-NEXT: ] 161# CHECK-NEXT: Address: 0x0 162# CHECK-NEXT: Offset: 0x20008 163# CHECK-NEXT: Size: 8 164# CHECK-NEXT: Link: 0 165# CHECK-NEXT: Info: 0 166# CHECK-NEXT: AddressAlignment: 1 167# CHECK-NEXT: EntrySize: 1 168# CHECK-NEXT: } 169# CHECK-NEXT: Section { 170# CHECK-NEXT: Index: 8 171# CHECK-NEXT: Name: .symtab 172# CHECK-NEXT: Type: SHT_SYMTAB (0x2) 173# CHECK-NEXT: Flags [ (0x0) 174# CHECK-NEXT: ] 175# CHECK-NEXT: Address: 0x0 176# CHECK-NEXT: Offset: 0x20010 177# CHECK-NEXT: Size: 48 178# CHECK-NEXT: Link: 10 179# CHECK-NEXT: Info: 1 180# CHECK-NEXT: AddressAlignment: 4 181# CHECK-NEXT: EntrySize: 16 182# CHECK-NEXT: } 183# CHECK-NEXT: Section { 184# CHECK-NEXT: Index: 9 185# CHECK-NEXT: Name: .shstrtab 186# CHECK-NEXT: Type: SHT_STRTAB (0x3) 187# CHECK-NEXT: Flags [ (0x0) 188# CHECK-NEXT: ] 189# CHECK-NEXT: Address: 0x0 190# CHECK-NEXT: Offset: 0x20040 191# CHECK-NEXT: Size: 82 192# CHECK-NEXT: Link: 0 193# CHECK-NEXT: Info: 0 194# CHECK-NEXT: AddressAlignment: 1 195# CHECK-NEXT: EntrySize: 0 196# CHECK-NEXT: } 197# CHECK-NEXT: Section { 198# CHECK-NEXT: Index: 10 199# CHECK-NEXT: Name: .strtab 200# CHECK-NEXT: Type: SHT_STRTAB (0x3) 201# CHECK-NEXT: Flags [ (0x0) 202# CHECK-NEXT: ] 203# CHECK-NEXT: Address: 0x0 204# CHECK-NEXT: Offset: 0x20092 205# CHECK-NEXT: Size: 13 206# CHECK-NEXT: Link: 0 207# CHECK-NEXT: Info: 0 208# CHECK-NEXT: AddressAlignment: 1 209# CHECK-NEXT: EntrySize: 0 210# CHECK-NEXT: } 211# CHECK-NEXT: ] 212# CHECK-NEXT: Symbols [ 213# CHECK-NEXT: Symbol { 214# CHECK-NEXT: Name: (0) 215# CHECK-NEXT: Value: 0x0 216# CHECK-NEXT: Size: 0 217# CHECK-NEXT: Binding: Local (0x0) 218# CHECK-NEXT: Type: None (0x0) 219# CHECK-NEXT: Other: 0 220# CHECK-NEXT: Section: Undefined (0x0) 221# CHECK-NEXT: } 222# CHECK-NEXT: Symbol { 223# CHECK-NEXT: Name: _gp 224# CHECK-NEXT: Value: 0x37FF0 225# CHECK-NEXT: Size: 0 226# CHECK-NEXT: Binding: Local 227# CHECK-NEXT: Type: None (0x0) 228# CHECK-NEXT: Other [ (0x2) 229# CHECK-NEXT: STV_HIDDEN (0x2) 230# CHECK-NEXT: ] 231# CHECK-NEXT: Section: Absolute 232# CHECK-NEXT: } 233# CHECK-NEXT: Symbol { 234# CHECK-NEXT: Name: __start 235# CHECK-NEXT: Value: 0x20000 236# CHECK-NEXT: Size: 0 237# CHECK-NEXT: Binding: Global (0x1) 238# CHECK-NEXT: Type: None (0x0) 239# CHECK-NEXT: Other: 0 240# CHECK-NEXT: Section: .text 241# CHECK-NEXT: } 242# CHECK-NEXT: ] 243# CHECK-NEXT: ProgramHeaders [ 244# CHECK-NEXT: ProgramHeader { 245# CHECK-NEXT: Type: PT_PHDR (0x6) 246# CHECK-NEXT: Offset: 0x34 247# CHECK-NEXT: VirtualAddress: 0x10034 248# CHECK-NEXT: PhysicalAddress: 0x10034 249# CHECK-NEXT: FileSize: 192 250# CHECK-NEXT: MemSize: 192 251# CHECK-NEXT: Flags [ (0x4) 252# CHECK-NEXT: PF_R (0x4) 253# CHECK-NEXT: ] 254# CHECK-NEXT: Alignment: 4 255# CHECK-NEXT: } 256# CHECK-NEXT: ProgramHeader { 257# CHECK-NEXT: Type: PT_LOAD (0x1) 258# CHECK-NEXT: Offset: 0x0 259# CHECK-NEXT: VirtualAddress: 0x10000 260# CHECK-NEXT: PhysicalAddress: 0x10000 261# CHECK-NEXT: FileSize: 296 262# CHECK-NEXT: MemSize: 296 263# CHECK-NEXT: Flags [ (0x4) 264# CHECK-NEXT: PF_R (0x4) 265# CHECK-NEXT: ] 266# CHECK-NEXT: Alignment: 65536 267# CHECK-NEXT: } 268# CHECK-NEXT: ProgramHeader { 269# CHECK-NEXT: Type: PT_LOAD (0x1) 270# CHECK-NEXT: Offset: 0x10000 271# CHECK-NEXT: VirtualAddress: 0x20000 272# CHECK-NEXT: PhysicalAddress: 0x20000 273# CHECK-NEXT: FileSize: 12 274# CHECK-NEXT: MemSize: 12 275# CHECK-NEXT: Flags [ (0x5) 276# CHECK-NEXT: PF_R (0x4) 277# CHECK-NEXT: PF_X (0x1) 278# CHECK-NEXT: ] 279# CHECK-NEXT: Alignment: 65536 280# CHECK-NEXT: } 281# CHECK-NEXT: ProgramHeader { 282# CHECK-NEXT: Type: PT_LOAD (0x1) 283# CHECK-NEXT: Offset: 0x20000 284# CHECK-NEXT: VirtualAddress: 0x30000 285# CHECK-NEXT: PhysicalAddress: 0x30000 286# CHECK-NEXT: FileSize: 8 287# CHECK-NEXT: MemSize: 65536 288# CHECK-NEXT: Flags [ 289# CHECK-NEXT: PF_R 290# CHECK-NEXT: PF_W 291# CHECK-NEXT: ] 292# CHECK-NEXT: Alignment: 65536 293# CHECK-NEXT: } 294# CHECK-NEXT: ProgramHeader { 295# CHECK-NEXT: Type: PT_GNU_RELRO (0x6474E552) 296# CHECK-NEXT: Offset: 0x20000 297# CHECK-NEXT: VirtualAddress: 0x30000 298# CHECK-NEXT: PhysicalAddress: 0x30000 299# CHECK-NEXT: FileSize: 8 300# CHECK-NEXT: MemSize: 65536 301# CHECK-NEXT: Flags [ (0x4) 302# CHECK-NEXT: PF_R (0x4) 303# CHECK-NEXT: ] 304# CHECK-NEXT: Alignment: 1 305# CHECK-NEXT: } 306# CHECK-NEXT: ProgramHeader { 307# CHECK-NEXT: Type: PT_GNU_STACK 308# CHECK-NEXT: Offset: 0x0 309# CHECK-NEXT: VirtualAddress: 0x0 310# CHECK-NEXT: PhysicalAddress: 0x0 311# CHECK-NEXT: FileSize: 0 312# CHECK-NEXT: MemSize: 0 313# CHECK-NEXT: Flags [ 314# CHECK-NEXT: PF_R 315# CHECK-NEXT: PF_W 316# CHECK-NEXT: ] 317# CHECK-NEXT: Alignment: 0 318# CHECK-NEXT: } 319# CHECK-NEXT:] 320