I learned something new today. The .note.ABI-tag section isn't generated by the compiler, but is instead part of crt1.o. So, if you don't link with crt1.o because you used nasm or gcc -nostdlib there isn't an .note.ABI-tag. BTW, apparently the reason that compilers stopped setting the operating system in the elf headers has to do with either the elf standards body dragging their feet on assigning new numbers or someone just never bothering to ask and the same number being used for two different operating systems.
Ali On Nov 20, 2008, at 11:24 PM, Steve Reinhardt wrote: > See attached, generated as follows: > > % echo "global _start\n_start: hlt" > test.asm > % nasm -f elf64 test.asm > % ld -static test.o > % build/X86_SE/m5.debug configs/example/se.py -c a.out > M5 Simulator System > > Copyright (c) 2001-2008 > The Regents of The University of Michigan > All Rights Reserved > > > M5 compiled Nov 17 2008 12:39:07 > M5 revision 5751:54cb03a1a577549cd113bdc2dcaae9b10016aae2 > M5 commit date Mon Nov 17 11:22:16 2008 -0800 > M5 started Nov 20 2008 20:22:58 > M5 executing on phenom > command line: build/X86_SE/m5.debug configs/example/se.py -c a.out > Global frequency set at 1000000000000 ticks per second > fatal: Unknown/unsupported operating system. > @ cycle 0 > [create:build/X86_SE/sim/process.cc, line 704] > Memory Usage: 583452 KBytes > > > > On Thu, Nov 20, 2008 at 8:14 PM, Ali Saidi <[EMAIL PROTECTED]> wrote: >> Could someone send me a binary that doesn't get recognized? I >> implemented the .note-ABI-tag code to figure out the OS/Arch when it >> wasn't set on the binary and that section in the file should still >> exist. I want to figure out what is going on there. >> >> Thanks, >> Ali >> >> On Nov 20, 2008, at 10:48 PM, Steve Reinhardt wrote: >> >>> changeset db1653549204 in /z/repo/m5 >>> details: http://repo.m5sim.org/m5?cmd=changeset;node=db1653549204 >>> description: >>> Assume files w/o obvious OS are Linux (with warning) >>> instead of giving a fatal error. >>> >>> diffstat: >>> >>> 1 file changed, 3 insertions(+) >>> src/sim/process.cc | 3 +++ >>> >>> diffs (85 lines): >>> >>> diff -r 32ec0a0e41b2 -r db1653549204 src/sim/process.cc >>> --- a/src/sim/process.cc Mon Nov 17 12:41:50 2008 -0800 >>> +++ b/src/sim/process.cc Thu Nov 20 19:08:46 2008 -0800 >>> @@ -655,18 +655,22 @@ >>> "executable as a static binary and try again.\n"); >>> >>> #if THE_ISA == ALPHA_ISA >>> + if (objFile->getArch() != ObjectFile::Alpha) >>> + fatal("Object file architecture does not match compiled ISA >>> (Alpha)."); >>> + >>> if (objFile->hasTLS()) >>> fatal("Object file has a TLS section and single threaded TLS >>> is not\n" >>> " currently supported for Alpha! Please >>> recompile your " >>> "executable with \n a non-TLS toolchain.\n"); >>> >>> - if (objFile->getArch() != ObjectFile::Alpha) >>> - fatal("Object file architecture does not match compiled ISA >>> (Alpha)."); >>> switch (objFile->getOpSys()) { >>> case ObjectFile::Tru64: >>> process = new AlphaTru64Process(params, objFile); >>> break; >>> >>> + case ObjectFile::UnknownOpSys: >>> + warn("Unknown operating system; assuming Linux."); >>> + // fall through >>> case ObjectFile::Linux: >>> process = new AlphaLinuxProcess(params, objFile); >>> break; >>> @@ -675,9 +679,13 @@ >>> fatal("Unknown/unsupported operating system."); >>> } >>> #elif THE_ISA == SPARC_ISA >>> - if (objFile->getArch() != ObjectFile::SPARC64 && objFile- >>>> getArch() != ObjectFile::SPARC32) >>> + if (objFile->getArch() != ObjectFile::SPARC64 && >>> + objFile->getArch() != ObjectFile::SPARC32) >>> fatal("Object file architecture does not match compiled ISA >>> (SPARC)."); >>> switch (objFile->getOpSys()) { >>> + case ObjectFile::UnknownOpSys: >>> + warn("Unknown operating system; assuming Linux."); >>> + // fall through >>> case ObjectFile::Linux: >>> if (objFile->getArch() == ObjectFile::SPARC64) { >>> process = new Sparc64LinuxProcess(params, objFile); >>> @@ -690,6 +698,7 @@ >>> case ObjectFile::Solaris: >>> process = new SparcSolarisProcess(params, objFile); >>> break; >>> + >>> default: >>> fatal("Unknown/unsupported operating system."); >>> } >>> @@ -697,9 +706,13 @@ >>> if (objFile->getArch() != ObjectFile::X86) >>> 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); >>> break; >>> + >>> default: >>> fatal("Unknown/unsupported operating system."); >>> } >>> @@ -707,6 +720,9 @@ >>> if (objFile->getArch() != ObjectFile::Mips) >>> fatal("Object file architecture does not match compiled ISA >>> (MIPS)."); >>> switch (objFile->getOpSys()) { >>> + case ObjectFile::UnknownOpSys: >>> + warn("Unknown operating system; assuming Linux."); >>> + // fall through >>> case ObjectFile::Linux: >>> process = new MipsLinuxProcess(params, objFile); >>> break; >>> @@ -718,6 +734,9 @@ >>> if (objFile->getArch() != ObjectFile::Arm) >>> fatal("Object file architecture does not match compiled ISA >>> (ARM)."); >>> switch (objFile->getOpSys()) { >>> + case ObjectFile::UnknownOpSys: >>> + warn("Unknown operating system; assuming Linux."); >>> + // fall through >>> case ObjectFile::Linux: >>> process = new ArmLinuxProcess(params, objFile); >>> break; >>> _______________________________________________ >>> m5-dev mailing list >>> [email protected] >>> http://m5sim.org/mailman/listinfo/m5-dev >>> >> >> _______________________________________________ >> m5-dev mailing list >> [email protected] >> http://m5sim.org/mailman/listinfo/m5-dev >> > <a.out>_______________________________________________ > m5-dev mailing list > [email protected] > http://m5sim.org/mailman/listinfo/m5-dev _______________________________________________ m5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/m5-dev
