Hi Adam

Do these arguments sound reasonable to apply the patch?

On Thu, Jun 8, 2017 at 2:07 PM, Anatol Pomozov <anatol.pomo...@gmail.com> wrote:
> +reply-all
>
> On Thu, Jun 8, 2017 at 1:41 PM, Adam Lackorzynski
> <a...@os.inf.tu-dresden.de> wrote:
>>
>> On Tue Jun 06, 2017 at 21:41:48 -0700, Anatol Pomozov wrote:
>>> It is possible to create a 64 bit elf image that has valid multiboot header.
>>> qemu should be able to boot such images.
>>
>> But this 64bit image actually starts with 32bit code, right?
>
> Correct. The very first part of the startup code has to be 32bit.
> After it sets "long mode" it can use 64bit instructions. To make sure
> that the preamble has only 32bit instructions one have to use asm
> directive such as ".code32".
>
> Here is an example from LitleKernel sturtup code:
>
> https://github.com/littlekernel/lk/blob/master/arch/x86/64/start.S#L50
>
> .code32 tells assembler to treat following text as 32 bit code. And
> later when it jumps into "long mode"
>
> https://github.com/littlekernel/lk/blob/master/arch/x86/64/start.S#L214
> one can use 64bit code.
>
>> So it's a 32bit program and the check verifies that this is the case.
>
> While preamble have to contain 32 only instructions the rest of the
> image can perfectly contain 64bit code. Right now 64bit binary cannot
> be run with "qemu-system-x86_64 -kernel". But the same binary runs
> fine if packed with GRUB as iso.
>
> I tried to hack around this restriction by adding
> "OUTPUT_FORMAT(elf32-i386)" to the linker file and compiling project
> with 64bit support. But GNU ld program crashed at Ubuntu 14.04. It
> means not that many people use this code path. GNU ld compiled from
> HEAD does not have this problem but now GDB is confused by the fact
> that ELF contains 64bit code while header reports i386.
>
> Practically there is no reason for this check as it prevents running
> 64bit binaries with "qemu-system-x86_64 -kernel".

Reply via email to