X86: Make the loader recognize 32 bit x86 processes.
This commit is contained in:
parent
e0f425bb94
commit
6923282fb5
3 changed files with 13 additions and 7 deletions
|
@ -89,10 +89,10 @@ ElfObject::tryFile(const string &fname, int fd, size_t len, uint8_t *data)
|
|||
}
|
||||
} else if (ehdr.e_machine == EM_X86_64 &&
|
||||
ehdr.e_ident[EI_CLASS] == ELFCLASS64) {
|
||||
//In the future, we might want to differentiate between 32 bit
|
||||
//and 64 bit x86 processes in case there are differences in their
|
||||
//initial stack frame.
|
||||
arch = ObjectFile::X86;
|
||||
arch = ObjectFile::X86_64;
|
||||
} else if (ehdr.e_machine == EM_386 &&
|
||||
ehdr.e_ident[EI_CLASS] == ELFCLASS32) {
|
||||
arch = ObjectFile::I386;
|
||||
} else if (ehdr.e_ident[EI_CLASS] == ELFCLASS64) {
|
||||
arch = ObjectFile::Alpha;
|
||||
} else if (ehdr.e_machine == EM_ARM) {
|
||||
|
|
|
@ -50,7 +50,8 @@ class ObjectFile
|
|||
SPARC64,
|
||||
SPARC32,
|
||||
Mips,
|
||||
X86,
|
||||
X86_64,
|
||||
I386,
|
||||
Arm
|
||||
};
|
||||
|
||||
|
|
|
@ -708,14 +708,19 @@ LiveProcess::create(LiveProcessParams * params)
|
|||
fatal("Unknown/unsupported operating system.");
|
||||
}
|
||||
#elif THE_ISA == X86_ISA
|
||||
if (objFile->getArch() != ObjectFile::X86)
|
||||
if (objFile->getArch() != ObjectFile::X86_64 &&
|
||||
objFile->getArch() != ObjectFile::I386)
|
||||
fatal("Object file architecture does not match compiled ISA (x86).");
|
||||
switch (objFile->getOpSys()) {
|
||||
case ObjectFile::UnknownOpSys:
|
||||
warn("Unknown operating system; assuming Linux.");
|
||||
// fall through
|
||||
case ObjectFile::Linux:
|
||||
process = new X86LinuxProcess(params, objFile);
|
||||
if (objFile->getArch() == ObjectFile::X86_64) {
|
||||
process = new X86LinuxProcess(params, objFile);
|
||||
} else {
|
||||
panic("32 bit x86 Linux process aren't implemented.\n");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue