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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
"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>
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>
Date: Fri, 21 Feb 2014 06:03:00 +0100
Subject: [PATCH] Makefile: Don't clean what doesn't already exists
Trying to recurse into subdirectories of object files may lead to an
error if the directory doesn't exist. Even when cleaning.
Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
Date: Wed, 19 Feb 2014 05:18:14 +0100
Subject: [PATCH] make install: Don't overwrite up-to-date files
make install used to copy files unconditionnally to their destination.
However, if the destination is used by another Makefile, it will always
see modified files. "install" target now only update the files when they
need to.
Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
Status must be initialized before calling GrowBuffer() as it may
otherwise be uninitialized or set to EFI_BUFFER_TOO_SMALL by other
functions.
Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
directory) and TOPDIR (top of source tree) to separate the
build directory from the source tree.
Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
It contains verbatim copy of the comment at beginning of file from
elilo.
(there was no COPYING file in the elilo source that the comment refers
to.)
Signed-off-by: Jerry Hoemann <jerry.hoemann@hp.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
the kernel arch. The information actually needed is the default target
of gcc.
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
and SetNVVariable to store non volatile variable.
Signed-off-by: Sylvain Chouleur <sylvain.chouleur@gmail.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
e.g. tries to copy StrCmp, gcc will give you warnings about those
calls, and the warnings are right. These clutter up other things you
might miss that you should be more concerned about.
You could work around it through vigorous typecasting to non-const
types, but why should you have to? All of these functions are
rigorously defined as not changing their input - it is const, and should
be marked as such.
Signed-off-by: Peter Jones <pjones@redhat.com>
Please enter the commit message for your changes. Lines starting
Used to test/find memory fragmentation issues linux.
Signed-off-by: Jerry Hoemann <jerry.hoemann@hp.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>
Don't allow duplicate symbols, abort upon first error.
also make sure the linker script comes last for apps.
Signed-off-by: David Decotigny <decot@googlers.com>
make -C apps would fail on tcc.c because uefi_call_wrapper() doesn't
deal correctly with efi_call0-type invocation. Fixed by this patch.
Signed-off-by: David Decotigny <decot@googlers.com>
GCC 4.8.0 adds some optimizations that will use movups/movaps (and use
%xmm* registers) when they're faster, and of course that won't work at
all since UEFI firmwares aren't guaranteed to initialize the mmx/sse
instructions.
This will be even more annoying, since most UEFI firmwares don't
initialize the #DE or #UD trap handlers, and your backtrace will be a
random path through uninitialized memory, occasionally including
whatever address the IDT has for #UD, but also addresses like "0x4" and
"0x507" that you don't normally expect to see in your call path.
Signed-off-by: Peter Jones <pjones@redhat.com>
Some Makefiles tickle a bug in make 3.82 that cause libefi.a
and libgnuefi.a dependencies to expand to the odd values:
libefi.a: boxdraw.o) smbios.o) ...
libgnuefi.a(reloc_x86_64.o:
The patch replaces libgnuefi.a($(OBJS)) & libefi.a($(OBJS))
with an equivalent expansion that should work with any make
that supports $(patsubst).
Reorder variables in Make.defaults so that they are grouped by
functions. Also fixed ifeq (x,y) to have required syntax and make it
work for ARCH amd64->x86_64 renaming on BSD. Also provides top-level
Makefile with a "mkvars" target that displays effective variables.
Signed-off-by: David Decotigny <decot@googlers.com>
Instead of asking developers to explicitly pass the number of
parameters to the functions that get called, we determine them
automatically at preprocessing time. This should result in more
robust code.
Argument va_num is now ignored in x86_64 code, both with and
without HAVE_USE_MS_ABI.
Credits to the macro magic given in the comments.
Signed-off-by: David Decotigny <decot@googlers.com>