mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-01 16:31:13 +00:00
PR13013: ELF Type identification fails for MSB type ELF files.
Fix 'sys::IdentifyFileType' to work with big and little endian byte orderings when reading the ELF object file type. Initial patch by Stefan Hepp. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159138 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a0706a9ff4
commit
b935cd1514
@ -60,8 +60,11 @@ sys::IdentifyFileType(const char *magic, unsigned length) {
|
||||
|
||||
case '\177':
|
||||
if (magic[1] == 'E' && magic[2] == 'L' && magic[3] == 'F') {
|
||||
if (length >= 18 && magic[17] == 0)
|
||||
switch (magic[16]) {
|
||||
bool Data2MSB = magic[5] == 2;
|
||||
unsigned high = Data2MSB ? 16 : 17;
|
||||
unsigned low = Data2MSB ? 17 : 16;
|
||||
if (length >= 18 && magic[high] == 0)
|
||||
switch (magic[low]) {
|
||||
default: break;
|
||||
case 1: return ELF_Relocatable_FileType;
|
||||
case 2: return ELF_Executable_FileType;
|
||||
|
11
test/MC/Mips/elf-objdump.s
Normal file
11
test/MC/Mips/elf-objdump.s
Normal file
@ -0,0 +1,11 @@
|
||||
// 32 bit big endian
|
||||
// RUN: llvm-mc -filetype=obj -triple mips-unknown-linux %s -o - | llvm-objdump -d -triple mips-unknown-linux - | FileCheck %s
|
||||
// 32 bit little endian
|
||||
// RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux %s -o - | llvm-objdump -d -triple mips-unknown-linux - | FileCheck %s
|
||||
// 64 bit big endian
|
||||
// RUN: llvm-mc -filetype=obj -arch=mips64 -triple mips64-unknown-linux %s -o - | llvm-objdump -d -triple mips-unknown-linux - | FileCheck %s
|
||||
// 64 bit little endian
|
||||
// RUN: llvm-mc -filetype=obj -arch=mips64el -triple mips64el-unknown-linux %s -o - | llvm-objdump -d -triple mips-unknown-linux - | FileCheck %s
|
||||
|
||||
// We just want to see if llvm-objdump works at all.
|
||||
// CHECK: .text
|
Loading…
x
Reference in New Issue
Block a user