tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] ARM64 PE32+ and UEFI support


From: Andrei E. Warkentin
Subject: Re: [Tinycc-devel] ARM64 PE32+ and UEFI support
Date: Sat, 26 Aug 2017 22:44:04 -0400

Hi,

So answering my own question, MS tooling does not include base relocs for EXEs by default (although apparently a few others do, like Delphi, and base relocs are embedded if building with ASLR)

I changed the implementation to also embed base relocs if subsystem is EFI applications, EFI boot drivers and EFI runtime drivers, and the linker option has been changed to -Wl,-no-strip-base-relocs, as suggested.

I also re-worked the cleanup patch to address Grischka's comment. We can get rid of the clutter while still avoiding hard to understand (or maintain) constants.

PE: clean up characteristcs/subsystem code https://github.com/andreiw/tinycc/commit/b190796f26fe479db736b3387463bdfe262e99c5
PE: fix UEFI image generation https://github.com/andreiw/tinycc/commit/c0827b0eb90deba4d7d3211c0aa4c6aa4cee3fd0
PE: experimental ARM64 support https://github.com/andreiw/tinycc/commit/bfd77f13a45c62049fd5cf2f49534a5c75fcf7de

I tested this with OVMF on QEMU, VMware Fusion, ArmVirtPkg (AArch64 UEFI for QEMU) and a few real ARM server platforms (especially ones that had no RAM at the preferred loading address, forcing base relocs to be applied).


Inline image 1

Inline image 2
A

On Wed, Aug 23, 2017 at 8:57 AM, grischka <address@hidden> wrote:
Andrei E. Warkentin wrote:
Dear tinycc-devel,

A few more fixes for your review.

- support for generating ARM64 PE32+ images
- support for generating X64, ARM64, IA32 (untested) and ARM (untested)
UEFI images.

I don't think we want relocation entries by default in x86/x86-64
executables.  Maybe you can support -Wl,-no-strip-base-relocs

Also pe32.h and the longish portions with IMAGE_SUBSYSTEM_*/IMAGE_FILE_*
produce lots of visual clutter.  Maybe for something that changes once
in 10 years, we can use just hex numbers as before.

Other than that the patch seems to make sense.  On which system did
you test this?

-- gr

https://github.com/andreiw/tinycc/commit/5267c3c291841cb3c3ad1ec88b4ab91a16afc44b
(PE: clean up characteristcs/subsystem code)
https://github.com/andreiw/tinycc/commit/2df4e01b400211cce90b3d427bf06dbad35bb453
(PE: fix UEFI image generation)
https://github.com/andreiw/tinycc/commit/5cf413024d4a4a163cbf3a4f4329d75f3dd640f9
(PE: experimental ARM64 support)


The UEFI stuff was tested by building the following simple app (you need
Tiano edk2 for the headers).

$ ./x86_64-win32-tcc -I ../edk2/MdePkg/Include/ -I
../edk2/MdePkg/Include/X64/  ../efitest.c  -Wl,-subsystem=efiapp -nostdlib
-o ../efitest.x64.efi  -v

$ ./arm64-win32-tcc -I ../edk2/MdePkg/Include/ -I
../edk2/MdePkg/Include/AArch64/  ../efitest.c  -Wl,-subsystem=efiapp
-nostdlib -o ../efitest.aa64.efi

-->
#include <Uefi.h>

CHAR16 *gHello = L"Hello from a TinyCC compiled UEFI binary!\r\n";

EFI_STATUS EFIAPI
_start(EFI_HANDLE Handle,
       EFI_SYSTEM_TABLE *SystemTable)
{
  CHAR16 *StackString = L"String pointer on the stack\r\n";
  SystemTable->ConOut->OutputString(SystemTable->ConOut, StackString);
  SystemTable->ConOut->OutputString(SystemTable->ConOut, gHello);
  return EFI_SUCCESS;
}
-->


------------------------------------------------------------------------

_______________________________________________
Tinycc-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/tinycc-devel


_______________________________________________
Tinycc-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/tinycc-devel



--
A

reply via email to

[Prev in Thread] Current Thread [Next in Thread]