Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
9e6cb21
Avoid processor dependent sizes in assembly
gmbr3 May 20, 2023
1e0f0df
riscv: Avoid TEXTREL
gmbr3 May 20, 2023
d8e6b53
riscv64 lds: fix ctors/dtors
gmbr3 May 20, 2023
d96b34e
riscv: Use new ctors _entry func as entry point
gmbr3 May 20, 2023
a1ffc0d
Merge /u/gmbr3/gnu-efi/ branch ia32 into master
May 22, 2023
584425e
ctors.S: Fix section definitions
gmbr3 May 23, 2023
0fe8def
ARM32: fix L_DYNAMIC
gmbr3 May 23, 2023
67762bd
Merge /u/gmbr3/gnu-efi/ branch ia32 into master
May 23, 2023
039ca9d
Add full Data Directories table
gmbr3 May 31, 2023
db351e8
ARM32: _start must be global
gmbr3 Jun 2, 2023
64027ee
Mark _start as function
gmbr3 Jun 7, 2023
53b89f5
X86_64: fix clang
gmbr3 Jun 10, 2023
5e85f47
Add C++ extern C header markers
gmbr3 Jun 13, 2023
2011093
Clean up size symbols
gmbr3 Jun 13, 2023
1be0241
.dynsym not required
gmbr3 Jun 13, 2023
b3e80c3
Split out rodata
gmbr3 Jun 13, 2023
8abf159
Merge .plt into .text
gmbr3 Jun 19, 2023
50b27a8
ARM32: fix image
gmbr3 Jun 15, 2023
58dce69
riscv64: fix image
gmbr3 Jun 16, 2023
708f66a
riscv64: ignore unknown relocs
gmbr3 Jun 21, 2023
6f333cf
Tail calls break ctors/dtors
gmbr3 Jun 21, 2023
bbffe42
Move OPTNONE macro to eficompiler.h
gmbr3 Jun 21, 2023
4b6f37e
remove superfluous -fno-stack-check
ncroxon Jul 3, 2023
108666f
Fix some EFI_MEMORY_FOO definitions
vathpela Dec 2, 2021
ce625f3
Add EFI_MEMORY_ATTRIBUTE_PROTOCOL
vathpela Dec 2, 2021
deb8a7f
Make CopyMem() and SetMem() be EFIAPI
vathpela Aug 4, 2021
93b2524
Add some missing definitions for system table revisions
vathpela Aug 4, 2021
6ba063f
Add missing EFI_VARIABLE_... definition.
vathpela Jul 22, 2021
cd78649
ARM32: Only use 4K pages
gmbr3 Jul 6, 2023
f5bb511
Merge /u/gmbr3/gnu-efi/ branch shim into master
Jul 7, 2023
7c6975a
Update table revisions to 2.10
gmbr3 Jul 8, 2023
de6f925
Update error/warning codes to 2.10
gmbr3 Jul 9, 2023
fd37daf
Update memory types to 2.10
gmbr3 Jul 10, 2023
965f557
Update OS Indications to 2.10
gmbr3 Jul 10, 2023
3d83038
Rename ALIGN to EFI_ALIGN
gmbr3 Aug 12, 2023
ebe2358
Add EFI_NORETURN for declspec
gmbr3 Aug 12, 2023
b9c62d6
Add some definitions for LoongArch
yetist May 17, 2023
9298f84
Make loongarch64 use efi-app-loongarch64
yetist May 18, 2023
98f7e9b
add non-executable GNU stack marking on ELF-linux
yetist Aug 26, 2023
a5f306c
ctors.S: Align with linker scripts
gmbr3 Nov 26, 2023
c600b4e
arm64 lds: move 64K gap to reloc
gmbr3 Nov 26, 2023
adbd7ae
Remove 64k gap on ARM32
gmbr3 Dec 4, 2023
4d4cb5a
Make apps link against the local gnuefi and crt objects
soopproject Mar 18, 2024
a3772f2
make: Make "make clean" use @ and rm -v everywhere
vathpela Mar 18, 2024
bd864bd
Make: make TOPDIR actually work and get rid of unused CDIR
vathpela Mar 18, 2024
8c9ad45
Merge /u/gmbr3/gnu-efi/ branch header into master
Mar 22, 2024
52455a5
Merge /u/yetist/gnu-efi/ branch dev-master into master
Mar 22, 2024
74bd9b6
Bump revision to VERSION = 3.0.18
ncroxon Mar 22, 2024
77c0a1f
gitignore *.so
viomck Nov 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
*.a
*.tar.*
*.tar
*.so
36 changes: 19 additions & 17 deletions Make.defaults
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
# SUCH DAMAGE.
#

TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
TOPDIR ?= $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)

#
# Variables below overridable from command-line:
Expand Down Expand Up @@ -89,6 +89,16 @@ ifeq ($(ARCH),amd64)
override ARCH := x86_64
endif

GCCVERSION := $(shell $(CC) -dumpversion | cut -f1 -d.)
GCCMINOR := $(shell $(CC) -dumpversion | cut -f2 -d.)
USING_CLANG := $(shell $(CC) -v 2>&1 | grep -q 'clang version' && echo clang)

# Rely on GCC MS ABI support?
GCCNEWENOUGH := $(shell ( [ $(GCCVERSION) -gt "4" ] \
|| ( [ $(GCCVERSION) -eq "4" ] \
&& [ $(GCCMINOR) -ge "7" ] ) ) \
&& echo 1)

#
# Where to build the package
#
Expand All @@ -114,20 +124,15 @@ ifeq ($(ARCH),ia32)
endif
endif

# Set ISO C mode
CPPFLAGS += -std=c11

ifeq ($(ARCH),x86_64)
GCCVERSION := $(shell $(CC) -dumpversion | cut -f1 -d.)
GCCMINOR := $(shell $(CC) -dumpversion | cut -f2 -d.)
USING_CLANG := $(shell $(CC) -v 2>&1 | grep -q 'clang version' && echo clang)

# Rely on GCC MS ABI support?
GCCNEWENOUGH := $(shell ( [ $(GCCVERSION) -gt "4" ] \
|| ( [ $(GCCVERSION) -eq "4" ] \
&& [ $(GCCMINOR) -ge "7" ] ) ) \
&& echo 1)
ifeq ($(GCCNEWENOUGH),1)
CPPFLAGS += -DGNU_EFI_USE_MS_ABI -maccumulate-outgoing-args -std=c11
else ifeq ($(USING_CLANG),clang)
CPPFLAGS += -DGNU_EFI_USE_MS_ABI -std=c11
CPPFLAGS += -DGNU_EFI_USE_MS_ABI
ifneq ($(USING_CLANG),clang)
CPPFLAGS += -maccumulate-outgoing-args
endif
endif

CFLAGS += -mno-red-zone
Expand Down Expand Up @@ -156,18 +161,16 @@ endif
ifneq ($(ARCH),arm)
ifneq ($(ARCH),mips64el)
ifneq ($(ARCH),riscv64)
ifneq ($(ARCH),loongarch64)
export HAVE_EFI_OBJCOPY=y
endif
endif
endif
endif

ifeq ($(ARCH),arm)
CFLAGS += -marm
endif

ifeq ($(ARCH),aarch64)
ifneq (,$(filter $(ARCH),aarch64 arm loongarch64))
LDFLAGS += -z common-page-size=4096
LDFLAGS += -z max-page-size=4096
endif
Expand All @@ -190,7 +193,6 @@ else
CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Wno-pointer-sign -Werror \
-funsigned-char -fshort-wchar -fno-strict-aliasing \
-ffreestanding -fno-stack-protector -fno-stack-check \
-fno-stack-check \
$(if $(findstring gcc,$(CC)),-fno-merge-all-constants,)
endif

Expand Down
4 changes: 2 additions & 2 deletions Make.rules
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@
.SECONDARY:

%.efi: %.so
$(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
$(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .rodata -j .rel \
-j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* \
-j .reloc $(FORMAT) $*.so $@
-j .areloc -j .reloc $(FORMAT) $*.so $@

%.efi.debug: %.so
$(OBJCOPY) -j .debug_info -j .debug_abbrev -j .debug_aranges \
Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
# SUCH DAMAGE.
#

export VERSION = 3.0.17
export VERSION = 3.0.18

MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
SRCDIR = $(dir $(MKFILE_PATH))
Expand Down Expand Up @@ -82,7 +82,7 @@ $(SUBDIRS):
$(MAKE) -C $(OBJDIR)/$@ -f $(SRCDIR)/$@/Makefile SRCDIR=$(SRCDIR)/$@ ARCH=$(ARCH)

clean:
rm -f *~
@rm -vrf *~
@set -e ; for d in $(SUBDIRS); do \
if [ -d $(OBJDIR)/$$d ]; then \
$(MAKE) -C $(OBJDIR)/$$d -f $(SRCDIR)/$$d/Makefile SRCDIR=$(SRCDIR)/$$d clean; \
Expand Down
10 changes: 4 additions & 6 deletions apps/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,21 @@
SRCDIR = .

VPATH = $(SRCDIR)
TOPDIR = $(SRCDIR)/..

include $(SRCDIR)/../Make.defaults

TOPDIR = $(SRCDIR)/..

CDIR=$(TOPDIR)/..
LINUX_HEADERS = /usr/src/sys/build
APPSDIR = $(LIBDIR)/gnuefi/apps
CPPFLAGS += -D__KERNEL__ -I$(LINUX_HEADERS)/include
CRTOBJS = ../gnuefi/crt0-efi-$(ARCH).o
CRTOBJS = $(TOPDIR)/$(ARCH)/gnuefi/crt0-efi-$(ARCH).o

LDSCRIPT = $(TOPDIR)/gnuefi/elf_$(ARCH)_efi.lds
ifneq (,$(findstring FreeBSD,$(OS)))
LDSCRIPT = $(TOPDIR)/gnuefi/elf_$(ARCH)_fbsd_efi.lds
endif

LDFLAGS += -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS)
LDFLAGS += -shared -Bsymbolic -L$(TOPDIR)/$(ARCH)/lib -L$(TOPDIR)/$(ARCH)/gnuefi $(CRTOBJS)

LOADLIBES += -lefi -lgnuefi
LOADLIBES += $(LIBGCC)
Expand Down Expand Up @@ -92,7 +90,7 @@ all: $(TARGETS)
ctors_test.so : ctors_fns.o ctors_test.o

clean:
rm -f $(TARGETS) *~ *.o *.so
@rm -vf $(TARGETS) *~ *.o *.so

install:
mkdir -p $(INSTALLROOT)$(APPSDIR)
Expand Down
8 changes: 4 additions & 4 deletions apps/ctors_dtors_priority_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@
#include <efilib.h>

// 101 in init_array, 65434 in ctors
static void __attribute__((constructor(101))) ctors101() {
static void __attribute__((constructor(101))) EFI_NO_TAIL_CALL ctors101() {
Print(L"1) ctor with lower numbered priority \r\n");
}

// 65434 in init_array, 101 in ctors
static void __attribute__((constructor(65434))) ctors65434() {
static void __attribute__((constructor(65434))) EFI_NO_TAIL_CALL ctors65434() {
Print(L"2) ctor with higher numbered priority \r\n");
}

// 101 in fini_array, 65434 in dtors
static void __attribute__((destructor(101))) dtors101() {
static void __attribute__((destructor(101))) EFI_NO_TAIL_CALL dtors101() {
Print(L"4) dtor with lower numbered priority \r\n");
}

// 65434 in fini_array, 101 in dtors
static void __attribute__((destructor(65434))) dtors65434() {
static void __attribute__((destructor(65434))) EFI_NO_TAIL_CALL dtors65434() {
Print(L"3) dtor with higher numbered priority \r\n");
}

Expand Down
4 changes: 2 additions & 2 deletions apps/ctors_fns.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@

int constructed_value = 0;

static void __attribute__((__constructor__)) ctor(void)
static void __attribute__((__constructor__)) EFI_NO_TAIL_CALL ctor(void)
{
Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
constructed_value = 1;
Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
}

static void __attribute__((__destructor__)) dtor(void)
static void __attribute__((__destructor__)) EFI_NO_TAIL_CALL dtor(void)
{
Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
constructed_value = 0;
Expand Down
8 changes: 1 addition & 7 deletions apps/debughook.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,7 @@ GetVariable(CHAR16 *var, UINT8 **data, UINTN *len, EFI_GUID owner)
EFI_GUID DUMMY_GUID =
{0x55aad538, 0x8f82, 0x4e2a, {0xa4,0xf0,0xbe, 0x59, 0x13, 0xb6, 0x5f, 0x1e}};

#if defined(__clang__)
# define _OPTNONE __attribute__((optnone))
#else
# define _OPTNONE __attribute__((__optimize__("0")))
#endif

static _OPTNONE void
static EFI_OPTNONE void
DebugHook(void)
{
EFI_GUID guid = DUMMY_GUID;
Expand Down
6 changes: 2 additions & 4 deletions gnuefi/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,10 @@
SRCDIR = .

VPATH = $(SRCDIR)
TOPDIR = $(SRCDIR)/..

include $(SRCDIR)/../Make.defaults

TOPDIR = $(SRCDIR)/..

CDIR=$(TOPDIR)/..
PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig
FILES = reloc_$(ARCH)

Expand All @@ -69,7 +67,7 @@ gnu-efi.pc:


clean:
rm -f $(TARGETS) *~ *.o $(OBJS)
@rm -vf $(TARGETS) *~ *.o $(OBJS)

install:
mkdir -p $(INSTALLROOT)$(LIBDIR)
Expand Down
11 changes: 6 additions & 5 deletions gnuefi/crt0-efi-aarch64.S
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
.align 12

.globl _start
.type _start,%function
_start:
stp x29, x30, [sp, #-32]!
mov x29, sp
Expand All @@ -42,15 +43,15 @@ _start:
// hand-craft a dummy .reloc section so EFI knows it's a relocatable executable:

.data
dummy: .long 0
dummy: .4byte 0

#define IMAGE_REL_ABSOLUTE 0
.section .reloc, "a"
label1:
.long dummy-label1 // Page RVA
.long 12 // Block Size (2*4+2*2), must be aligned by 32 Bits
.word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy
.word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy
.4byte dummy-label1 // Page RVA
.4byte 12 // Block Size (2*4+2*2), must be aligned by 32 Bits
.2byte (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy
.2byte (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy

#if defined(__ELF__) && defined(__linux__)
.section .note.GNU-stack,"",%progbits
Expand Down
Loading