Commit Graph

279 Commits

Author SHA1 Message Date
b'Nigel Croxon 75e4ef25ad Merge /u/gmbr3/gnu-efi/ branch fix-apps into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/39/
2023-03-07 13:46:37 +00:00
b'Nigel Croxon 330c88aa0c Merge /u/gmbr3/gnu-efi/ branch function-sections into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/38/
2023-03-07 13:45:45 +00:00
Callum Farmer 3f9a656929 apps: Fix Makefile install and ordering
Create a new directory called $APPSDIR
which is the default install location of
these examples. apps must be ordered after
gnuefi target.

Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-03-06 13:36:27 +00:00
Callum Farmer 02f96e8a26 *.efi.lds: Add .rel.dyn section
LLVM LLD always calls it .rel[a].dyn no matter what
so add this to the .rel[a] section

Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-03-04 17:57:39 +00:00
Callum Farmer 15f10734e7 Add some COMDAT sections
When using function/data sections option from
gcc, some additional un-packed sections get created
move these to there correct placement if not already
included

sections seen on x86/x86_64/aarch64:
.gcc_except_table.efi_main
.bss.debugging

.gcc_except_table.* only appears on objcopy archs

Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-03-03 21:00:32 +00:00
b'Nigel Croxon d78b78cb2e Merge /u/gmbr3/gnu-efi/ branch merge-rela2 into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/37/
2023-02-22 13:42:44 +00:00
Callum Farmer eea6d31a22 *.efi.lds: Merge all rela sections into one
Objcopy sometimes generates .rela.plt and .rela.data
sections for which their names are longer than the 8
characters limit of PE32

Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-02-21 11:57:47 +00:00
Nigel Croxon 637b3bdb9b Author: Callum Farmer <gmbr3@opensuse.org>
Date:   Tue Feb 7 21:48:27 2023 +0000

    ARM32/x86_64 lds: Force data segment align to 4KiB

    Some newer versions of binutils can set invalid COMMONPAGESIZE
    and MAXPAGESIZE values on these architectures

    git fetch git.code.sf.net/u/gmbr3/gnu-efi arm-pagesize
    git merge 89d55b364d

    Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-02-08 09:25:01 -05:00
Callum Farmer 89d55b364d ARM32/x86_64 lds: Force data segment align to 4KiB
Some newer versions of binutils can set invalid COMMONPAGESIZE
and MAXPAGESIZE values on these architectures

Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-02-07 21:53:29 +00:00
Callum Farmer 04e6df709d Make.defaults: Force 4K page size on ARM64
Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-02-07 21:18:41 +00:00
Callum Farmer 1e00550694 aarch64 lds: Force data segment align to 64KiB
Required by UEFI 2.10 AArch64 specification
https://uefi.org/specs/UEFI/2.10/02_Overview.html#aarch64-platforms

Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-02-07 21:18:23 +00:00
Callum Farmer a90c2f16fa Make.defaults: Enable objcopy on aarch64
Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-02-07 16:38:05 +00:00
b'Nigel Croxon f7b2e1ff6d Merge /u/gmbr3/gnu-efi/ branch master into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/34/
2023-01-20 12:41:14 +00:00
Callum Farmer 593e13937c Make aarch64 crt0/lds more like x86_64
Binutils 2.38 now supports efi-app-aarch64 so
to use this we must add a dummy reloc section
and remove the PE header definition from crt0
as this will conflict with the version added
by objcopy

Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-01-19 17:22:19 +00:00
Callum Farmer 231c7632c0 *.efi.lds: Use proper data segment placement
Use ld commands DATA_SEGMENT_ALIGN and DATA_SEGMENT_END

Fixes binutils 2.39 warning:
/usr/bin/ld: warning: efi/fwup.so has a LOAD segment with RWX
permissions

Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
2023-01-19 17:22:13 +00:00
b'Nigel Croxon c2102ae059 Merge /u/mingtaoxt/gnu-efi/ branch master into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/29/
2022-11-16 20:56:17 +00:00
b'Nigel Croxon 156d50d2de Merge /u/fantasquex/gnu-efi/ branch makefile-1 into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/30/
2022-11-16 20:54:10 +00:00
Letu Ren 98f1250742 riscv: Fix ld RWX warning
The current ld script places .dynamic section right after .text, which
results in that one LOAD segment contains both data and code. Binutils
2.39 and later will throw a warning if RWX segments exist. Code and
data should be placed in different LOAD segments with different
permissions. This patch adds a gap between data and code sections which
is taken from the default ld script in riscv64.

Co-developed-by: Moody Liu <mooodyhunter@outlook.com>
Signed-off-by: Moody Liu <mooodyhunter@outlook.com>
Signed-off-by: Letu Ren <fantasquex@gmail.com>
2022-10-10 11:03:20 +02:00
Letu Ren c26275184c Makefile: Change default target to all
According to README.gnuefi,

To build the sample EFI applications provided in subdirectory "apps",
simply invoke "make" in the toplevel directory (the directory
containing this README file).  This should build lib/libefi.a and
gnuefi/libgnuefi.a first and then all the EFI applications such as a
apps/t6.efi.

The default target of top directory Makefile should be all instead of
gnuefi.

Signed-off-by: Letu Ren <fantasquex@gmail.com>
2022-10-09 18:31:38 +02:00
Dwight Engen 4a566dd746 aarch64: fix setjmp overrun
The assembly code uses fixed offsets into the jmp_buf and leaves an 8 byte
gap between the GPRs and the FPRs, but the jmp_buf structure was not laid
out to account for this so the code would overrun the jmp_buf by 8 bytes.

Found-by: Oskar Engen <oskar.engen@gmail.com>
Signed-off-by: Dwight Engen <dwight.engen@gmail.com>
2022-09-28 12:01:29 -04:00
Nigel Croxon 8b018e6721 Bump revision to VERSION = 3.0.15 2022-08-08 11:38:33 -04:00
Sergei Trofimovich 803b49c40b */*.S: add non-executable GNU stack marking on ELF-linux
binutils-2.39 enabed a few warning by default
(https://sourceware.org/pipermail/binutils/2022-August/122246.html):

> The ELF linker will now generate a warning message if the stack is made executable.

Let's suppress the warnings in assembly files by adding non-executables
stack markings. This fixes at least systemd build which uses '-Wl,--fatal-warnings':

    https://github.com/systemd/systemd/issues/24226
2022-08-08 11:35:10 -04:00
Sergei Trofimovich 2ed6486834 lib/Makefile: add .o file dependency on libsubdirs targets
Without the change there is no guarantee that .o files will be built
after directories are created for them and build fails as:

    gcc -I/build/gnu-efi-code//lib ... -c lib/runtime/rtstr.c -o runtime/rtstr.o
    Assembler messages:
    Fatal error: can't create runtime/rtstr.o: No such file or directory
2022-07-25 10:39:43 -04:00
Fabrice Fontaine 6b28563584 Handle __mips64
Handle __mips64 to avoid a build failure since
b1c7a1c5f2

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2022-07-25 10:36:14 -04:00
zhoumingtao 5849eacdce use jr instead of jirl
jirl -> jr
2022-07-07 15:16:10 +08:00
zhoumingtao e7db4418b1 Add support for LoongArch64 architecture 2021-12-30 15:39:47 +08:00
Nigel Croxon af773c779d Bump revision to VERSION = 3.0.14 2021-08-19 12:25:25 -04:00
Pete Batard b136460925 riscv64: finalize efibind.h
There's little reason not to derive the RISCV64 version of efibind.h
from the AARCH64 version, especially as the current version is missing
required macros such as EFI_DRIVER_ENTRY_POINT() which breaks the
compilation of some drivers.

The only major difference we introduce from AARCH64 is to consider
that any toolchain that supports RISCV64 is modern enough to support
<stdint.h>. Also, as we preserve the added definition for BOOLEAN,
we guard it with an ifndef in anticipation of MSVC RISCV64 support.

We validated these changes by confirming that they now allow gnu-efi
to be used to compile a set of UEFI drivers for RISCV64.
2021-08-19 12:21:14 -04:00
Alfonso Sánchez-Beato 31a6aab44c Set NumberOfSymbols to zero
Acoording to what the spec says about the number of sybols [1]:

"This value should be zero for an image because COFF debugging
information is deprecated."

Changing as if not zero it causes problems to llvm-objcopy. This
affects only the architectures where COFF is not supported by objcopy
and where we build the PE header via assembly code.

[1] https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
2021-07-29 11:38:16 +02:00
b'Nigel Croxon 269ef9dbc7 Merge /u/abeato/gnu-efi/ branch add-guids into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/26/
2021-07-16 16:48:28 +00:00
Pete Batard 4ef183353c Fix VS2019 Code Analysis warnings
When compiling for x64, Visual Studio 2019's Code Analysis produces the following warnings:

C:\Projects\gnu-efi\lib\print.c(1380): warning C26451: Arithmetic overflow: Using operator '+' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator '+' to avoid overflow (io.2).
C:\Projects\gnu-efi\lib\smbios.c(47): warning C26451: Arithmetic overflow: Using operator '+' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator '+' to avoid overflow (io.2).
C:\Projects\gnu-efi\lib\str.c(289): warning C26451: Arithmetic overflow: Using operator '-' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator '-' to avoid overflow (io.2).

Fix these by adding an explicit cast to UINTN.
2021-07-16 12:43:24 -04:00
Alfonso Sánchez-Beato fbbbf47e5c Add definitions for the EFI device tree table
Add definitions for the EFI device tree table, as specified in UEFI
specification 2.9 (March 2021).

Signed-off-by: Alfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
2021-07-16 16:36:46 +02:00
b'Nigel Croxon 40160210a7 Merge /u/xypron/gnu-efi/ branch misc_fixes into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/25/
2021-06-24 12:16:12 +00:00
Heinrich Schuchardt 4fe83e1026 apps: memory leak in draw_boxes()
Free the buffer allocated to draw boxes.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-06-23 23:22:41 +02:00
Heinrich Schuchardt 58124a7fea apps: define FrameBufferAddr for riscv64
The size of FrameBufferAddr is architecture dependent. Add the missing
definition for the riscv64 architecture.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-06-23 22:56:29 +02:00
Heinrich Schuchardt df31239ac5 riscv64: provide efisetjmp_arch.h
efisetjmp_arch.h is required for 'make apps'.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-06-23 22:56:29 +02:00
Heinrich Schuchardt b5f98d40fe riscv64: missing EFI_FUNCTION
Add missing definition. It is needed for 'make apps'.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-06-23 22:56:29 +02:00
Heinrich Schuchardt 01a8d3bb00 apps: simplify logical constraints
EFI_ERROR(EFI_NOT_STARTED) is true. So we can simplify

    (EFI_ERROR(rc) && rc == EFI_NOT_STARTED)

to

    (rc == EFI_NOT_STARTED)

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-06-23 22:53:26 +02:00
b'Nigel Croxon 2a7829c50b Merge /u/xypron/gnu-efi/ branch misc_fixes into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/22/
2021-06-23 15:18:12 +00:00
Nigel Croxon 860b1c8cbe efiapi.h: add RISC-V machine type definitions
These values are from the UEFI specification version 2.9.

Signed-off-by: David Michael <fedora.dm0@...>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
2021-06-23 09:37:54 -04:00
Heinrich Schuchardt e2fc15ae0e lib/str: simplify Atoi()
Checking that str is non-zero is superfluous in

	(*str && *str == ' ')

0x20 is always non-zero.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-06-22 00:17:00 +02:00
Heinrich Schuchardt 500c10f191 lib/misc: avoid NULL dereference in LibInsertToTailOfBootOrder
AllocatePool() may return NULL. We must check the return value before
dereferencing it.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-06-22 00:17:00 +02:00
Heinrich Schuchardt 70402aa91d lib/hand: missing va_end() in LibReinstallProtocolInterfaces()
For each va_start() there must be a call to va_end().

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-06-22 00:17:00 +02:00
b'Nigel Croxon 9e7e6822b7 Merge /u/xypron/gnu-efi/ branch GCC_visibility into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/20/
2021-05-17 14:20:24 +00:00
Ard Biesheuvel fa506bd242 ARM: hide 'hidden' pragma for hosted build
The hidden visibility #pragma in inc/arm/efibind.h was meant to inform
the compiler that symbols with external linkage are never exported from
shared libraries [and thus never preempted] when executing in UEFI context
(since UEFI does not support shared libraries). This allows the compiler to
generate relative symbol references instead of GOT entries, which is much more
efficient since the latter need to be relocated before invoking the entry
point of the UEFI app.

However, as it turns out, this pragma is leaking into other code that does
not run in UEFI context, but simply needs to access data structures that
UEFI defines. So make the pragma dependent on whether we are building with
-ffreestanding, which is only used for bare metal code such as UEFI.

Last-Update: 2018-08-24

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

Elder versions of sbsigntool failed to build on armhf without the patch,
cf. https://launchpad.net/ubuntu/+source/gnu-efi/3.0.8-0ubuntu1~16.04.1
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-05-08 11:40:21 +00:00
Peter Jones 69df7422b1 Add EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID.
Signed-off-by: Peter Jones <pjones@redhat.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-05-08 11:07:25 +00:00
Marvin Häuser b916d1e54e Fix dummy relocation block alignment
As per the PE format specification, relocation blocks must be aligned on 32-bit boundaries. Fix the dummy relocations to obey the alignment constraints.
2021-04-06 22:35:03 +02:00
b'Nigel Croxon 3676bc353c Merge /u/xypron/gnu-efi/ branch riscv64 into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/17/
2021-04-05 14:13:03 +00:00
b'Nigel Croxon ea4c77ffc5 Merge /u/xypron/gnu-efi/ branch va_args into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/16/
2021-04-05 14:12:39 +00:00
b'Nigel Croxon e686743ba6 Merge /u/xypron/gnu-efi/ branch xtoi into master
https://sourceforge.net/p/gnu-efi/code/merge-requests/15/
2021-04-05 14:11:53 +00:00