arrfab / rpms / shim

Forked from rpms/shim 5 years ago
Clone

Blame SOURCES/0048-Add-support-for-64-bit-ARM-AArch64.patch

e97c83
From 04cba93d64b5ffd3a05be82aacea5c2b2d0ea94c Mon Sep 17 00:00:00 2001
e97c83
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
e97c83
Date: Tue, 12 Aug 2014 15:33:21 +0200
e97c83
Subject: [PATCH 48/74] Add support for 64-bit ARM (AArch64)
e97c83
e97c83
This adds support for building the shim for a 64-bit ARM UEFI environment.
e97c83
e97c83
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
e97c83
---
e97c83
 Cryptlib/OpenSSL/Makefile |  3 +++
e97c83
 Makefile                  | 10 ++++++++
e97c83
 elf_aarch64_efi.lds       | 65 +++++++++++++++++++++++++++++++++++++++++++++++
e97c83
 3 files changed, 78 insertions(+)
e97c83
 create mode 100644 elf_aarch64_efi.lds
e97c83
e97c83
diff --git a/Cryptlib/OpenSSL/Makefile b/Cryptlib/OpenSSL/Makefile
e97c83
index 9097580..17b5695 100644
e97c83
--- a/Cryptlib/OpenSSL/Makefile
e97c83
+++ b/Cryptlib/OpenSSL/Makefile
e97c83
@@ -12,6 +12,9 @@ ifeq ($(ARCH),ia32)
e97c83
 	CFLAGS	+= -mno-mmx -mno-sse -mno-red-zone -maccumulate-outgoing-args \
e97c83
 		-m32 -DTHIRTY_TWO_BIT
e97c83
 endif
e97c83
+ifeq ($(ARCH),aarch64)
e97c83
+	CFLAGS	+= -O2 -DSIXTY_FOUR_BIT_LONG -ffreestanding -I$(shell $(CC) -print-file-name=include)
e97c83
+endif
e97c83
 LDFLAGS		= -nostdlib -znocombreloc
e97c83
 
e97c83
 TARGET		= libopenssl.a
e97c83
diff --git a/Makefile b/Makefile
e97c83
index f65bb3b..3529b45 100644
e97c83
--- a/Makefile
e97c83
+++ b/Makefile
e97c83
@@ -37,6 +37,10 @@ ifeq ($(ARCH),ia32)
e97c83
 	CFLAGS	+= -mno-mmx -mno-sse -mno-red-zone -nostdinc -maccumulate-outgoing-args -m32
e97c83
 endif
e97c83
 
e97c83
+ifeq ($(ARCH),aarch64)
e97c83
+	CFLAGS	+= -ffreestanding -I$(shell $(CC) -print-file-name=include)
e97c83
+endif
e97c83
+
e97c83
 ifneq ($(origin VENDOR_CERT_FILE), undefined)
e97c83
 	CFLAGS += -DVENDOR_CERT_FILE=\"$(VENDOR_CERT_FILE)\"
e97c83
 endif
e97c83
@@ -108,6 +112,12 @@ Cryptlib/OpenSSL/libopenssl.a:
e97c83
 lib/lib.a:
e97c83
 	$(MAKE) -C lib
e97c83
 
e97c83
+ifeq ($(ARCH),aarch64)
e97c83
+FORMAT		:= -O binary
e97c83
+SUBSYSTEM	:= 0xa
e97c83
+LDFLAGS		+= --defsym=EFI_SUBSYSTEM=$(SUBSYSTEM)
e97c83
+endif
e97c83
+
e97c83
 FORMAT		?= --target efi-app-$(ARCH)
e97c83
 
e97c83
 %.efi: %.so
e97c83
diff --git a/elf_aarch64_efi.lds b/elf_aarch64_efi.lds
e97c83
new file mode 100644
e97c83
index 0000000..9c9a055
e97c83
--- /dev/null
e97c83
+++ b/elf_aarch64_efi.lds
e97c83
@@ -0,0 +1,65 @@
e97c83
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
e97c83
+OUTPUT_ARCH(aarch64)
e97c83
+ENTRY(_start)
e97c83
+SECTIONS
e97c83
+{
e97c83
+  .text 0x0 : {
e97c83
+    *(.text.head)
e97c83
+    *(.text)
e97c83
+    *(.text.*)
e97c83
+    *(.gnu.linkonce.t.*)
e97c83
+    *(.srodata)
e97c83
+    *(.rodata*)
e97c83
+    . = ALIGN(16);
e97c83
+    _etext = .;
e97c83
+  }
e97c83
+  .dynamic  : { *(.dynamic) }
e97c83
+  .data :
e97c83
+  {
e97c83
+   *(.sdata)
e97c83
+   *(.data)
e97c83
+   *(.data1)
e97c83
+   *(.data.*)
e97c83
+   *(.got.plt)
e97c83
+   *(.got)
e97c83
+
e97c83
+   /* the EFI loader doesn't seem to like a .bss section, so we stick
e97c83
+      it all into .data: */
e97c83
+   . = ALIGN(16);
e97c83
+   _bss = .;
e97c83
+   *(.sbss)
e97c83
+   *(.scommon)
e97c83
+   *(.dynbss)
e97c83
+   *(.bss)
e97c83
+   *(COMMON)
e97c83
+   . = ALIGN(16);
e97c83
+   _bss_end = .;
e97c83
+  }
e97c83
+
e97c83
+  . = ALIGN(4096);
e97c83
+  .vendor_cert :
e97c83
+  {
e97c83
+    *(.vendor_cert)
e97c83
+  }
e97c83
+  . = ALIGN(4096);
e97c83
+
e97c83
+  .rela.dyn : { *(.rela.dyn) }
e97c83
+  .rela.plt : { *(.rela.plt) }
e97c83
+  .rela.got : { *(.rela.got) }
e97c83
+  .rela.data : { *(.rela.data) *(.rela.data*) }
e97c83
+  _edata = .;
e97c83
+  _data_size = . - _etext;
e97c83
+
e97c83
+  . = ALIGN(4096);
e97c83
+  .dynsym   : { *(.dynsym) }
e97c83
+  . = ALIGN(4096);
e97c83
+  .dynstr   : { *(.dynstr) }
e97c83
+  . = ALIGN(4096);
e97c83
+  /DISCARD/ :
e97c83
+  {
e97c83
+    *(.rel.reloc)
e97c83
+    *(.eh_frame)
e97c83
+    *(.note.GNU-stack)
e97c83
+  }
e97c83
+  .comment 0 : { *(.comment) }
e97c83
+}
e97c83
-- 
e97c83
1.9.3
e97c83