Commit Graph

183 Commits

Author SHA1 Message Date
Nigel Croxon
aac405cc66 Updated Changelog
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-05-14 12:49:40 -04:00
Nigel Croxon
37d7bee82a Added some missing error code descriptions
Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-05-14 12:38:39 -04:00
Nigel Croxon
dae0b4b0b0 Turns out we actually need setjmp in one of gnu-efi's prominent
users, and it seems to make more sense to put it here than in
the application.

All of these are derived from the Tiano code, but I re-wrote the
x86_64 one because we use the ELF psABI calling conventions instead
of the MS ABI calling conventions.  Which is to say you probably
shouldn't setjmp()/longjmp() between functions with EFIAPI (aka
__attribute__((ms_abi))) and those without.

Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-05-14 12:20:51 -04:00
Nigel Croxon
b5a8e93cec Bump version to 3.0.2
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-04-10 08:49:50 -04:00
Nigel Croxon
01c9f11ed5 Fix ARM32 and AARCH64 builds
Without these added into SUBDIRS the initplat.c compilation will fail.

Signed-off-by: Koen Kooi <koen.kooi@linaro.org>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-04-10 08:46:40 -04:00
Nigel Croxon
dada63fd3d [PATCH] _SPrint: fix NULL termination
maxlen is the maximum string length not the buffer size.

Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-03-23 10:41:43 -04:00
Nigel Croxon
ce7098fb52 Enable out-of-tree building
This patch enables building gnu-efi outside of the source tree.
That in turn enables building for multiple architectures in parallel.

The build directory is controlled by the OBJDIR make variable.  It
defaults to the value of ARCH, and can be overridden from the command
line.

This patch also cleans up some doubled slashes between INSTALLROOT
and PREFIX.

Signed-off-by: Jonathan Boeing <jonathan.n.boeing@gmail.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-02-19 11:22:45 -05:00
Nigel Croxon
f64cef2627 Since we're keeping this in git, it'd be nice not to see a bunch
of make targets in 'status'

Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-01-06 15:49:50 -05:00
Nigel Croxon
322efb6b21 version number changed from VERSION = 3.0u to VERSION = 3.0.1
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-01-05 13:20:43 -05:00
Nigel Croxon
09027207f7 From: Pete Batard <pete@akeo.ie>
Date: Wed, 10 Dec 2014 21:08:34 +0000
Subject: [PATCH] fixes for MSVC compilation

These fixes are needed to address the following error and warnings when compiling the library part
using Visual Studio 2013 Community Edition (as in https://github.com/pbatard/uefi-simple):
* "lib\x86_64\math.c(49): error C4235: nonstandard extension used : '_asm' keyword not supported
  on this architecture"
* "lib\print.c(98): error C2059: syntax error : '('" due to placement of EFIAPI macro
* "lib\cmdline.c(94): warning C4090: 'function' : different 'const' qualifiers"
* "lib\smbios.c(25): warning C4068: unknown pragma"
* Also update macro definitions in "inc\<arch>\efibind.h" for MSVC

Signed-off-by: Pete Batard <pete@akeo.ie>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2015-01-05 13:13:22 -05:00
Nigel Croxon
15805ff38b Add README.git file. Instructions on how to archive.
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-11-25 14:23:21 -05:00
Nigel Croxon
b868aa7566 This patch makes generating releases from git a very simple process; you
simply edit the makefile's "VERSION" line to the new version, commit
that as its own commit, and do: "make test-archive".  That'll make a
file in the current directory gnu-efi-$VERSION.tar.bz2 , with its top
level directory gnu-efi-$VERSION/ and the source tree under that.

Once you've tested that and you're sure it's what you want to release,
you do "make archive", which will tag a release in git and generate a
final tarball from it.  You then push to the archive, being sure to
include the tag:

git push origin master:master --tags

And upload the archive wherever it's supposed to go.

Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-11-25 13:26:45 -05:00
Nigel Croxon
530d68ba19 The gnu-efi-3.0 toplevel subdirectory is really annoying. Kill it.
Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-11-25 10:09:50 -05:00
Nigel Croxon
00bd66ef46 FreeBSD's binutils doesn't have "-j <glob>" support, so we need to
include non-globbed versions of .rel/.rela individually.

Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Bill Paul <wpaul@windriver.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-11-24 14:33:09 -05:00
Nigel Croxon
56eb64d3c0 Right now we wind up trying to build gnuefi/.o from a source file that's
an empty string.  This is caused by the macros trying to generate
install rules, but there's no real reason to have all that anyway.  So
just have some static install rules that are simpler and don't generate
stuff on the fly.

Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-11-24 14:27:14 -05:00
Nigel Croxon
65e28a90a7 Add current OsIndications values.
Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com
2014-11-24 12:17:45 -05:00
Nigel Croxon
be231055ce Add the QueryVariableInfo() API.
Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-11-24 12:15:34 -05:00
Nigel Croxon
60efb7a293 Add the capsule API.
Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-11-24 12:13:23 -05:00
Nigel Croxon
ef08b655d1 Fix Table Header misspelling. Change from EFI_TABLE_HEARDER to
EFI_TABLE_HEADER.

Signed-Off-By: Nigel Croxon <nigel.croxon@hp.com>
2014-11-17 16:08:00 -05:00
Nigel Croxon
370cce41da If CROSS_COMPILE is set, ignore the ARCH value supplied on the
command line and use the target machine of the cross compiler.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-11-06 14:41:40 -05:00
Nigel Croxon
d32fb84543 Allow reuse of this file beyond GPL compatible software,
update the license of crt0-efi-aarch64.S to dual 2-clause BSD/GPLv2+.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-11-06 14:30:03 -05:00
Nigel Croxon
aa1df67f48 Add the missing Variable attributes
From: Jeremy Compostella <jeremy.compostella@intel.com>
Date: Mon, 13 Oct 2014 17:50:50 +0200
Subject: [PATCH] Add the missing Variable attributes

Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-10-21 11:08:47 -04:00
Nigel Croxon
5706dff093 From: David Decotigny <decot@googlers.com>
Date: Mon, 25 Aug 2014 13:28:49 -0700
Subject: [PATCH] document that binutils >= 2.24 needed.

commit ac983081 "Add support for non-PE/COFF capable objcopy" depends
on objcopy accepting wildcards for the section names. This feature is
available only with binutils >= 2.24 (binutils 2e62b7218 "PR
binutils/15033").

Signed-off-by: David Decotigny <decot@googlers.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-26 10:54:22 -04:00
Nigel Croxon
6c10e225bc From: David Decotigny <decot@googlers.com>
Date: Thu, 31 Jul 2014 18:19:16 -0700
Subject: [PATCH 5/5] allow to use external stdarg.h

in cases we use gnu-efi together with other libs that define stdarg.h,
break the tie by telling gnu-efi to use that stdarg.h .

Signed-off-by: David Decotigny <decot@googlers.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-25 08:51:23 -04:00
Nigel Croxon
16d65c0669 From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Date: Mon, 11 Aug 2014 15:39:16 +0200
Subject: [PATCH] Add support for 32-bit ARM

This adds support for 32-bit ARM using an approach similar to the one used for
64-bit ARM (AArch64), i.e., it does not rely on an objcopy that is aware of EFI
or PE/COFF, but lays out the entire PE/COFF header using the assembler.

In the 32-bit ARM case (which does not have a division instruction), some code
has been imported from the Linux kernel to perform the division operations in
software.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-19 12:07:00 -04:00
Nigel Croxon
b28143d4fb Updated Changelog
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-08 15:54:19 -04:00
Nigel Croxon
1525190354 From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Date: Fri, 8 Aug 2014 18:16:59 +0200
Subject: [PATCH 4/4] Add support for 64-bit ARM (AArch64)

This adds support for 64-bit ARM (AArch64) environments. Since there is no
EFI-capable objcopy for this platform, this contains a manually laid out
PE/COFF header using the assembler.

In addition, it includes the relocation bits, some string functions that GCC
assumes are available and other glue to hold it all together.

This can be cross built using

	make CROSS_COMPILE=aarch64-linux-gnu-

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-08 15:35:09 -04:00
Nigel Croxon
ac98308152 From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Date: Fri, 8 Aug 2014 17:53:42 +0200
Subject: [PATCH 3/4] Add support for non-PE/COFF capable objcopy

Introduce HAVE_EFI_OBJCOPY and set it if objcopy for $ARCH support PE/COOF and
EFI, i.e., it supports --target efi-[app|bsdrv|rtdrv] options. Use it to decide
whether to invoke objcopy with those options or use the linker to populate the
PE/COFF header.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-08 15:32:26 -04:00
Nigel Croxon
fb063f0f65 From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Date: Fri, 8 Aug 2014 17:37:36 +0200
Subject: [PATCH 2/4] Add support for cross compilation

This changes the logic that defines ARCH (and HOSTARCH) to take CROSS_COMPILE
into account. Also, $prefix is not assigned, so that the default will be what
is on the path rather than hardcoded in /usr/bin.

This results in the build doing the right thing if CROSS_COMPILE is set in the
environment and no ARCH or prefix options are passed to make, aligning it with
most other CROSS_COMPILE compatible projects.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-08 15:26:38 -04:00
Nigel Croxon
7a98d83fc3 From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Date: Fri, 8 Aug 2014 16:50:45 +0200
Subject: [PATCH 1/4] Restrict GNU_EFI_USE_MS_ABI GCC version test to x86_64

The version test only applies to x86_64 builds, so no need to do it
for other archs.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-08 15:25:03 -04:00
Nigel Croxon
f42974dd9a From: David Decotigny <decot@googlers.com>
Date: Thu, 31 Jul 2014 13:42:23 -0700
Subject: [PATCH 4/4] Use Shell protocols to retrieve argc/argv, when
 available.

New header files efishellintf.h efishellparm.h are coming from EDK
II, initial location and license at top of files. Only modifications:
 - efishellintf.h: s/EFI_FILE_PROTOCOL/EFI_FILE/ + expand BITx macros (1<<x)
 - efishellparm.h: typedef VOID *SHELL_FILE_HANDLE to avoid including
   ShellBase.h
 - both: removed extern EFI_GUID variable decls

This also adds apps/t8.c, a simple demo.

Signed-off-by: David Decotigny <decot@googlers.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-08 15:21:16 -04:00
Nigel Croxon
a61fa058e9 From: David Decotigny <decot@googlers.com>
Date: Thu, 31 Jul 2014 13:41:52 -0700
Subject: [PATCH 3/4] document format of LoadedImage::LoadOptions data

Signed-off-by: David Decotigny <decot@googlers.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-08 15:17:32 -04:00
Nigel Croxon
2f440200c8 From: David Decotigny <decot@googlers.com>
Date: Thu, 31 Jul 2014 13:39:37 -0700
Subject: [PATCH 2/4] Use OpenProtocol instead of HandleProtocol

UEFI 2.x recommends OpenProtocol instead of HandleProtocol.

Signed-off-by: David Decotigny <decot@googlers.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-08 15:15:59 -04:00
Nigel Croxon
7f173da1e5 From: David Decotigny <decot@googlers.com>
Date: Thu, 31 Jul 2014 13:30:07 -0700
Subject: [PATCH 1/4] move cmdline parser to its own file

Signed-off-by: David Decotigny <decot@googlers.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-08-08 15:14:26 -04:00
Nigel Croxon
0ad8fb87cb From: David Decotigny <decot@googlers.com>
Date: Mon, 28 Jul 2014 21:28:50 -0700
Subject: [PATCH 3/3] make cmdline parsing a 1st class citizen

Refactor ParseCmdline and apps/Alloc+FreePages to factorize
boilerplate and move the new parser to the main API.

Signed-off-by: David Decotigny <decot@googlers.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-07-30 15:06:36 -04:00
Nigel Croxon
ff7ec964f2 From: David Decotigny <decot@googlers.com>
Date: Mon, 28 Jul 2014 21:00:52 -0700
Subject: [PATCH 2/3] Avoid buffer overflow while parsing the cmdline args

Signed-off-by: David Decotigny <decot@googlers.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-07-30 15:05:28 -04:00
Nigel Croxon
8d86ee202a From: David Decotigny <decot@googlers.com>
Date: Mon, 28 Jul 2014 21:01:35 -0700
Subject: [PATCH 1/3] Fix cmdline parser

The cmdline parser would not return the correct number of args, would
allocate one too many. Also make it clear from the declaration that we
expect a suitably lare argv.

Signed-off-by: David Decotigny <decot@googlers.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-07-30 15:04:44 -04:00
Nigel Croxon
1ec094bfaf From: Julian Klode <julian.klode@gmail.com>
Date: Mon, 21 Jul 2014 14:26:23 -0400
Subject: [PATCH] inc/efistdarg.h: Use gcc builtins instead of stdarg.h or broken stubs

We cannot use stdarg.h, as this breaks applications compiling
with -nostdinc because those will not find the header.
We also cannot use the stubs, as they just produce broken code,
as seen in the gummiboot 45-1 Debian release.

Signed-off-by: Julian Klode <julian.klode@gmail.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-07-23 09:54:25 -04:00
Nigel Croxon
6caab22f23 From: Laszlo Ersek <lersek@redhat.com>
Date: Mon, 2 Jun 2014 23:26:48 +0200
Subject: [PATCH] always observe EFIAPI calling convention when calling
 STO.SetAttribute

We have to consider the following cases wrt. the PRINT_STATE.Output and
PRINT_STATE.SetAttr EFIAPI function pointers, especially when building for
x86_64 with gcc:

(1) The compiler is new enough, and EFIAPI actually ensures the Microsoft
    calling convention. In this case everything happens to work fine even
    if we forget uefi_call_wrapper(), because the wrapper would expand to
    a normal C function call anyway.

(2) Otherwise (ie. gcc is old), EFIAPI expands to nothing, and we must
    take into account the called function's origin:

  (2a) If the callee that is declared EFIAPI is *defined* inside gnu-efi,
       then EFIAPI means nothing for the callee too, so caller and callee
       only understand each other if the caller intentionally omits
       uefi_call_wrapper().

  (2b) If the callee that is declared EFIAPI is defined by the platform
       UEFI implementation, then the caller *must* use
       uefi_call_wrapper().

The PRINT_STATE.Output EFIAPI function pointer is dereferenced correctly:
the PFLUSH() distinguishes cases (2a) from (2b) by using IsLocalPrint().

However use of the PRINT_STATE.SetAttr EFIAPI function pointer is not
always correct:

- The PSETATTR() helper function always relies on the wrapper (case (2b)).
  This is correct, because PRINT_STATE.SetAttr always points to a
  platform-provided function.

- The DbgPrint() function contains two incorrect calls: they mistakenly
  assume case (2a) (or case (1)), even though the pointer always points to
  a platform function, implying (2b). (The error is masked in case (1).)
  Fix them.

Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-06-19 10:39:23 -04:00
Nigel Croxon
ecfd1ded9a Add VPoolPrint Function
Equivalent to PoolPrint but using a va_list parameter

Signed-off-by: Sylvain Chouleur <sylvain.chouleur@intel.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-06-10 13:02:06 -04:00
Nigel Croxon
f16d93f3b9 Revert "The prototype of DbgPrint() is incorrect, at the end of "inc/efidebug.h"."
A problem was found compiling on GCC 4.8.

This reverts commit 644898eabc.
2014-05-16 11:33:51 -04:00
Nigel Croxon
644898eabc The prototype of DbgPrint() is incorrect, at the end of "inc/efidebug.h".
Consequently, when your program calls DbgPrint() via the DEBUG() macro,
it fails to set up the stack correctly (it does not pass the arguments
through the ellipsis (...) according to the EFIAPI calling convention).
However, va_start() inside DbgPrint() *assumes* that stack.

Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-05-14 09:12:52 -04:00
Nigel Croxon
8921ba2fc5 Cleaned up compile warnings.
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-04-14 18:49:23 -04:00
Nigel Croxon
42cca551db Module lib/ParseCmdLine.c has errors, it incorrectly mixes "char" and "CHAR16"
and uses a pointer to argv[] like it's argv[]. The compiler only issues
warnings though. Here is a patch to remove compiler warnings and make the
code behave.

Signed-off-by: Bernard Burette <bub75@users.sf.net>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-04-14 14:04:11 -04:00
Nigel Croxon
4e8460f1ae Here is a very small patch to remove a compiler warning when processing lib/smbios.c.
Signed-off-by: Bernard Burette <bub75@users.sf.net>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-04-14 13:53:03 -04:00
Nigel Croxon
6a0875ca2f Here is a very small patch to remove compiler warning in function
"LibLocateHandleByDiskSignature()" because the "Start" variable is
give a value which is not used.

Signed-off-by: Bernard Burette <bub75@users.sf.net>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-04-14 13:45:16 -04:00
Nigel Croxon
d5f35dfb80 Here is a very small patch to remove *~ files in include diretory.
Signed-off-by: Bernard Burette <bub75@users.sf.net>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-04-14 13:40:29 -04:00
Nigel Croxon
1a04669a7b Here is a patch for "DevicePathToStr()" to display device path according to UEFI 2 specification.
The path is in the two files inc/efidevp.h and lib/dpath.c.

It also add the Sata device path and removes the "/?" path for unknown device paths.

Signed-off-by: Bernard Burette <bub75@users.sf.net>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-04-14 12:45:57 -04:00
Nigel Croxon
3c62e78556 Removed GPL code setjmp_ia32.S, setjmp_ia64.S, setjmp_x86_64.S
Not used anymore.

   Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-04-01 10:26:44 -04:00
Nigel Croxon
f9baa4f622 Remove incumbent GPL 'debian' subdiretory.
Update ChangeLog

Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
2014-03-31 08:37:56 -04:00