| ## Check that we are able to dump the SHT_MIPS_OPTIONS section using -A properly. |
| |
| ## Check we are able to dump multiple MIPS options properly. |
| # RUN: yaml2obj %s -o %t1 |
| # RUN: llvm-readobj -A %t1 | FileCheck %s |
| # RUN: llvm-readelf -A %t1 | FileCheck %s |
| |
| # CHECK: MIPS Options { |
| # CHECK-NEXT: ODK_REGINFO { |
| # CHECK-NEXT: GP: 0x807060504030201 |
| # CHECK-NEXT: General Mask: 0xD0C0B0A |
| # CHECK-NEXT: Co-Proc Mask0: 0x88776655 |
| # CHECK-NEXT: Co-Proc Mask1: 0xCCBBAA99 |
| # CHECK-NEXT: Co-Proc Mask2: 0x1EFFEEDD |
| # CHECK-NEXT: Co-Proc Mask3: 0x5E4E3E2E |
| # CHECK-NEXT: } |
| # CHECK-NEXT: ODK_REGINFO { |
| # CHECK-NEXT: GP: 0x0 |
| # CHECK-NEXT: General Mask: 0x0 |
| # CHECK-NEXT: Co-Proc Mask0: 0x0 |
| # CHECK-NEXT: Co-Proc Mask1: 0x0 |
| # CHECK-NEXT: Co-Proc Mask2: 0x0 |
| # CHECK-NEXT: Co-Proc Mask3: 0x0 |
| # CHECK-NEXT: } |
| # CHECK-NEXT: } |
| |
| ## Check that we try to dump the .MIPS.options section when we are able to locate it by name. |
| # RUN: yaml2obj -DNAME=0xffff %s -o %t.err1 |
| # RUN: llvm-readelf -A %t.err1 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.err1 --check-prefix=NAME-ERR-FOUND --implicit-check-not=warning: |
| # RUN: llvm-readobj -A %t.err1 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.err1 --check-prefix=NAME-ERR-FOUND --implicit-check-not=warning: |
| |
| # NAME-ERR-FOUND: warning: '[[FILE]]': unable to read the name of SHT_PROGBITS section with index 1: a section [index 1] has an invalid sh_name (0xffff) offset which goes past the end of the section name string table |
| # NAME-ERR-FOUND-NEXT: warning: '[[FILE]]': unable to read the name of SHT_PROGBITS section with index 3: a section [index 3] has an invalid sh_name (0xffff) offset which goes past the end of the section name string table |
| # NAME-ERR-FOUND: MIPS Options { |
| # NAME-ERR-FOUND-NEXT: ODK_REGINFO { |
| # NAME-ERR-FOUND-NEXT: GP: 0x807060504030201 |
| # NAME-ERR-FOUND-NEXT: General Mask: 0xD0C0B0A |
| # NAME-ERR-FOUND-NEXT: Co-Proc Mask0: 0x88776655 |
| # NAME-ERR-FOUND-NEXT: Co-Proc Mask1: 0xCCBBAA99 |
| # NAME-ERR-FOUND-NEXT: Co-Proc Mask2: 0x1EFFEEDD |
| # NAME-ERR-FOUND-NEXT: Co-Proc Mask3: 0x5E4E3E2E |
| # NAME-ERR-FOUND-NEXT: } |
| # NAME-ERR-FOUND-NEXT: ODK_REGINFO { |
| # NAME-ERR-FOUND-NEXT: GP: 0x0 |
| # NAME-ERR-FOUND-NEXT: General Mask: 0x0 |
| # NAME-ERR-FOUND-NEXT: Co-Proc Mask0: 0x0 |
| # NAME-ERR-FOUND-NEXT: Co-Proc Mask1: 0x0 |
| # NAME-ERR-FOUND-NEXT: Co-Proc Mask2: 0x0 |
| # NAME-ERR-FOUND-NEXT: Co-Proc Mask3: 0x0 |
| # NAME-ERR-FOUND-NEXT: } |
| # NAME-ERR-FOUND-NEXT: } |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_MIPS |
| Sections: |
| - Type: SHT_PROGBITS |
| ShName: [[NAME=<none>]] |
| - Name: .MIPS.options |
| Type: SHT_MIPS_OPTIONS |
| ShName: [[OPTNAME=<none>]] |
| ShSize: [[SECSIZE=<none>]] |
| ContentArray: [ [[KIND=0x1]], ## Kind. ODK_REGINFO == 1. |
| [[DESCSIZE=0x28]], ## Byte size of descriptor, including this header. |
| 0x0, 0x0, ## Section header index of section affected or 0 for global options. |
| 0x0, 0x0, 0x0, 0x0, ## Kind-specific information. |
| 0xA, 0xB, 0xC, 0xD, ## ODK_REGINFO: bit-mask of used general registers. |
| 0x11, 0x22, 0x33, 0x44, ## ODK_REGINFO: unused padding field. |
| 0x55, 0x66, 0x77, 0x88, ## ODK_REGINFO: bit-mask of used co-processor registers (0). |
| 0x99, 0xAA, 0xBB, 0xCC, ## ODK_REGINFO: bit-mask of used co-processor registers (1). |
| 0xDD, 0xEE, 0xFF, 0x1E, ## ODK_REGINFO: bit-mask of used co-processor registers (2). |
| 0x2E, 0x3E, 0x4E, 0x5E, ## ODK_REGINFO: bit-mask of used co-processor registers (3). |
| 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, ## ODK_REGINFO: gp register value. |
| ## A descriptor for one more arbirtary supported option. |
| 0x1, 0x28, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] |
| - Type: SHT_PROGBITS |
| ShName: [[NAME=<none>]] |
| |
| ## Check we report a warning when we are unable to find the .MIPS.options section due to an error. |
| # RUN: yaml2obj -DOPTNAME=0xffff %s -o %t.err2 |
| # RUN: llvm-readelf -A %t.err2 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.err2 --check-prefix=NAME-ERR-NOTFOUND --implicit-check-not=warning: --implicit-check-not="MIPS Options" |
| # RUN: llvm-readobj -A %t.err2 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.err2 --check-prefix=NAME-ERR-NOTFOUND --implicit-check-not=warning: --implicit-check-not="MIPS Options" |
| |
| # NAME-ERR-NOTFOUND: warning: '[[FILE]]': unable to read the name of SHT_MIPS_OPTIONS section with index 2: a section [index 2] has an invalid sh_name (0xffff) offset which goes past the end of the section name string table |
| |
| ## Check we report a warning when the .MIPS.options section has a size that is less than the |
| ## size of the .MIPS.options description header. |
| |
| # RUN: yaml2obj %s -DSECSIZE=0x1 -o %t2 |
| # RUN: llvm-readelf -A %t2 2>&1 | FileCheck %s -DFILE=%t2 --check-prefix=SEC-SIZE |
| # RUN: llvm-readobj -A %t2 2>&1 | FileCheck %s -DFILE=%t2 --check-prefix=SEC-SIZE |
| |
| # SEC-SIZE: MIPS Options { |
| # SEC-SIZE-NEXT: warning: '[[FILE]]': the .MIPS.options section has an invalid size (0x1) |
| # SEC-SIZE-NEXT: } |
| |
| ## Check we report a warning when the .MIPS.options description header has a size |
| ## that goes past the end of the section. |
| |
| # RUN: yaml2obj %s -DDESCSIZE=0x51 -o %t3 |
| # RUN: llvm-readelf -A %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=DESC-SIZE |
| # RUN: llvm-readobj -A %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=DESC-SIZE |
| |
| # DESC-SIZE: IPS Options { |
| # DESC-SIZE-NEXT: warning: '[[FILE]]': a descriptor of size 0x51 at offset 0x0 goes past the end of the .MIPS.options section of size 0x50 |
| # DESC-SIZE-NEXT: } |
| |
| ## Check we are able to skip unsupported options and continue dumping. |
| |
| # RUN: yaml2obj %s -DKIND=0x2 -o %t4 |
| # RUN: llvm-readelf -A %t4 2>&1 | FileCheck %s -DFILE=%t4 -DTAG="ODK_EXCEPTIONS (2)" --check-prefix=KIND |
| # RUN: llvm-readobj -A %t4 2>&1 | FileCheck %s -DFILE=%t4 -DTAG="ODK_EXCEPTIONS (2)" --check-prefix=KIND |
| |
| # RUN: yaml2obj %s -DKIND=0xFF -o %t5 |
| # RUN: llvm-readelf -A %t5 2>&1 | FileCheck %s -DFILE=%t5 -DTAG="Unknown (255)" --check-prefix=KIND |
| # RUN: llvm-readobj -A %t5 2>&1 | FileCheck %s -DFILE=%t5 -DTAG="Unknown (255)" --check-prefix=KIND |
| |
| # KIND: MIPS Options { |
| # KIND-NEXT: Unsupported MIPS options tag: [[TAG]] |
| # KIND-NEXT: ODK_REGINFO { |
| # KIND-NEXT: GP: 0x0 |
| # KIND-NEXT: General Mask: 0x0 |
| # KIND-NEXT: Co-Proc Mask0: 0x0 |
| # KIND-NEXT: Co-Proc Mask1: 0x0 |
| # KIND-NEXT: Co-Proc Mask2: 0x0 |
| # KIND-NEXT: Co-Proc Mask3: 0x0 |
| # KIND-NEXT: } |
| # KIND-NEXT: } |