    Updated Changelog

    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

commit 37d7bee82a627999563069b090866076e055a871
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Thu May 14 12:38:39 2015 -0400

    Added some missing error code descriptions
    
    Signed-off-by: Peter Jones <pjones@redhat.com>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

commit dae0b4b0b0d522caecf09123db2cf0250c37a169
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Thu May 14 12:20:51 2015 -0400

    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>

commit b5a8e93cec396381a6d2beee022abbf50100f2fd
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Apr 10 08:49:50 2015 -0400

    Bump version to 3.0.2
    
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

commit 01c9f11ed5ad55661e8fc8a3eee35c578564754b
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Apr 10 08:46:40 2015 -0400

    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>

commit dada63fd3de148c6f8551d253355c113547cd5a0
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Mar 23 10:41:43 2015 -0400

    [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>

commit ce7098fb52e5fd4d16038964d029eb759f28eaaf
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Thu Feb 19 11:22:45 2015 -0500

    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>

commit f64cef26270bfbe04f038da33f95ae3f14c071bc
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Jan 6 15:49:50 2015 -0500

    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>

commit 322efb6b21ed0a5e42e8f124fd22bf0f8dbf01ae
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Jan 5 13:20:43 2015 -0500

    version number changed from VERSION = 3.0u to VERSION = 3.0.1
    
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

commit 09027207f7c18af6caa45a744fc15c90b2a829db
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Jan 5 13:13:22 2015 -0500

    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>

commit 15805ff38b83a72c2c7c96a24bd642ee1176d819
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Nov 25 14:23:21 2014 -0500

    Add README.git file. Instructions on how to archive.
    
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

commit b868aa75669723b7e32f46524822e17e388fe2ba
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Nov 25 13:26:45 2014 -0500

    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>

commit 530d68ba191850edafc6da22cb2df55bec0c5fa5
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Nov 25 10:09:50 2014 -0500

    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>

commit 00bd66ef46b59a1623a293491a8b2c65a6d61975
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Nov 24 14:33:09 2014 -0500

    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>

commit 56eb64d3c06854b9b68d61e3c2d3bdf6ff2a9853
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Nov 24 14:27:14 2014 -0500

    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>

commit 65e28a90a7be9e990b360286cea31e63319217fb
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Nov 24 12:17:45 2014 -0500

    Add current OsIndications values.
    
    Signed-off-by: Peter Jones <pjones@redhat.com>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com

commit be231055ce14d17610f0d7b6133a87b99a22662b
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Nov 24 12:15:34 2014 -0500

    Add the QueryVariableInfo() API.
    
    Signed-off-by: Peter Jones <pjones@redhat.com>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

commit 60efb7a2939b65a01e95aa8b535f1b756d984fba
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Nov 24 12:13:23 2014 -0500

    Add the capsule API.
    
    Signed-off-by: Peter Jones <pjones@redhat.com>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

commit ef08b655d1f8dfbd9a0f3a86d5685b24695ef12f
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Nov 17 16:05:42 2014 -0500

    Fix Table Header misspelling. Change from EFI_TABLE_HEARDER to
    EFI_TABLE_HEADER.
    
    Signed-Off-By: Nigel Croxon <nigel.croxon@hp.com>

commit 370cce41da3fff41ba38feb1262002aff2d85ffd
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Thu Nov 6 14:41:40 2014 -0500

    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>

commit d32fb845433ff6fb38e81ae0d9273454e7d18197
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Thu Nov 6 14:30:03 2014 -0500

    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>

commit aa1df67f48f3c035fa8891e1bb311ec21500d6d9
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Oct 21 11:08:47 2014 -0400

    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>

commit 5706dff09364cbbec37f47e2fe1350747f631d74
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Aug 26 10:54:22 2014 -0400

    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>

commit 6c10e225bc759d69af520a551b9d7b37f3ae0a82
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Aug 25 08:51:23 2014 -0400

    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>

commit 16d65c0669258c8044e3549b2d9eb0cf0eb08f5a
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Aug 19 12:07:00 2014 -0400

    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>

commit b28143d4fb4f6969dc0c87c853d3527d889951d7
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Aug 8 15:54:19 2014 -0400

    Updated Changelog
    
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

commit 1525190354f5faac33015e17c9ba7ea2bb2be35b
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Aug 8 15:35:09 2014 -0400

    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>

commit ac983081525f9483941517dfb53cf8d0163d49c0
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Aug 8 15:32:26 2014 -0400

    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>

commit fb063f0f65543b3e2bf55a39d5aa70b17a98c65e
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Aug 8 15:26:38 2014 -0400

    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>

commit 7a98d83fc32de6cf0b1ce5e12dfe80690f29fb3f
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Aug 8 15:25:03 2014 -0400

    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>

commit f42974dd9a7d0ea690d293f88396abd289f0014c
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Aug 8 15:21:16 2014 -0400

    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>

commit a61fa058e9a87f966de3342b8c95fdbdcb007827
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Aug 8 15:17:32 2014 -0400

    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>

commit 2f440200c855154f929d28971b2fd702ea7a207a
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Aug 8 15:15:59 2014 -0400

    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>

commit 7f173da1e54f8cfe4c7c7c091ab6585af07b25ce
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri Aug 8 15:14:26 2014 -0400

    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>

commit 0ad8fb87cbc59f58675b18253ad802ba51f1d132
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Wed Jul 30 15:06:36 2014 -0400

    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>

commit ff7ec964f2c0de0cfc4b52cfdd356003450f28bf
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Wed Jul 30 15:05:28 2014 -0400

    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>

commit 8d86ee202a9bb553375f56ae1d2944818112b68b
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Wed Jul 30 15:04:44 2014 -0400

    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>

commit 1ec094bfaf46a610a740dadc0150bf457dd72345
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Wed Jul 23 09:54:25 2014 -0400

    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>

commit 6caab22f23434f41f42cfe7591d9a7ae66de9f0a
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Thu Jun 19 10:39:23 2014 -0400

    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>

commit ecfd1ded9a799c3a572d4eb7fbb52582fe4d3390
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Jun 10 12:59:09 2014 -0400

    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>

commit f16d93f3b9e314336a387a3885c7fd2f176c41d3
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Fri May 16 11:33:51 2014 -0400

    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 644898eabc06c8efaa3aa54f84cdd468960a2f6c.

commit 644898eabc06c8efaa3aa54f84cdd468960a2f6c
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Wed May 14 09:09:47 2014 -0400

    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>

commit 8921ba2fc5f6163bdad3b5902c5d9d638415dde0
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Apr 14 18:49:23 2014 -0400

    Cleaned up compile warnings.
    
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

commit 42cca551dbf1c0be9e02e8d3d3c417ce35749638
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Apr 14 14:04:11 2014 -0400

    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>

commit 4e8460f1aedd2724de876be5b154eb5752bfada5
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Apr 14 13:53:03 2014 -0400

    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>

commit 6a0875ca2fcb67e7d1a1e2d15f3bcc645329dc75
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Apr 14 13:45:16 2014 -0400

    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>

commit d5f35dfb8008ba65bcc641559accd9bc13386ef9
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Apr 14 13:40:29 2014 -0400

    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>

commit 1a04669a7bb022984c9b54a0f73d7d67a2540fb7
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Apr 14 12:45:57 2014 -0400

    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>

commit 3c62e78556aea01e9798380cd46794c6ca09d4bd
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Apr 1 10:26:44 2014 -0400

       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>

commit f9baa4f622cf34576d73e00d4a774a31f0f81fd7
Author: Nigel Croxon <nigel.croxon@hp.com>
Date:   Mon Mar 31 08:37:56 2014 -0400

    Remove incumbent GPL 'debian' subdiretory.
    Update ChangeLog
    
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>


Changelog format change from here and above to 'git log' style.

2014-04-01 Nigel Croxon <nigel.croxon@hp.com>

   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-03-17 Nigel Croxon <nigel.croxon@hp.com>

   Add support for the simple pointer and absolute pointer protocols
       
    Signed-off-by: John Cronin <johncronin@users.sf.net>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

2014-03-14 Nigel Croxon <nigel.croxon@hp.com>

    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>

2014-03-14 Nigel Croxon <nigel.croxon@hp.com>

    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 updates the files when they need to.

    Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

2014-02-13 Nigel Croxon <nigel.croxon@hp.com>

    Patch GNU-EFI to remove the ELILO code
        
    Signed-off-by: Jerry Hoemann <jerry.hoemann@hp.com>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

2014-02-13 Nigel Croxon <nigel.croxon@hp.com>

    Initialize Status before calling GrowBuffer()
    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>

2014-01-23 Nigel Croxon <nigel.croxon@hp.com>

    These changes allow manually overridden SRCDIR (current source
    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>

2014-01-16 Nigel Croxon <nigel.croxon@hp.com>
    compilation: fix uninitialized variables warning
        
    Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

2014-01-13 Nigel Croxon <nigel.croxon@hp.com>
   Implement VSPrint function, prints a formatted unicode string to a buffer.
       
    Signed-off-by: Jeremy Compostella <jeremy.compostella@gmail.com>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

2014-01-10 Nigel Croxon <nigel.croxon@hp.com>
    Created lib/argify.c and inc/argify.h containing the function argify.
    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>

2014-01-08 Nigel Croxon <nigel.croxon@hp.com>
    The information needed is not really the host architecture as given by
    the kernel arch. The information actually needed is the default target
    of gcc.
	        
    Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

2013-10-11 Nigel Croxon <nigel.croxon@hp.com>
    Added support for SetVariable to store volatile variable,
    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>

2013-10-07 Nigel Croxon <nigel.croxon@hp.com>

    Atoi needs to have consistent declaration/definition.
    
    Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

2013-10-07 Nigel Croxon <nigel.croxon@hp.com>
    if you have a function that takes const arguments and then
    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 concered about.

    You could work around it through vigorous typecasting
    to non-const types, but why should you have to? All of these
    functions are regorously defined as not changing their input
    - it is const, and should be marked as such.

    Signed-off-by: Peter Jones <pjones@redhat.com>

2013-10-02 Nigel Croxon <nigel.croxon@hp.com>

    Added two simple applications to allocate/free memory at EFI.
    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>

2013-06-25 Nigel Croxon <nigel.croxon@hp.com>
    Sample boot service driver.
        
    Signed-off-by: David Decotigny <decot@googlers.com>

2013-06-25 Nigel Croxon <nigel.croxon@hp.com>
Date:   Tue Jun 25 08:47:03 2013 -0400

    Be more pedantic when linking, don't allow duplicate symbols,
    abort upon first error. Also make sure linker script comes 
    last for apps.

    Signed-off-by: David Decotigny <decot@googlers.com>

2013-06-25 Nigel Croxon <nigel.croxon@hp.com>
    Fix compilation on x86_64 without HAVE_USE_MS_ABI
    make -C apps would fail on tcc.c because uefi_call_wrapper()
    doesn't deal correctly with efi_callO-type invocation.

    Signed-off-by: David Decotigny <decot@googlers.com>

2013-06-12 Nigel Croxon <nigel.croxon@hp.com>
    Fix typo when disabling mno-mmx
        
    Signed-Off-By: Nigel Croxon <nigel.croxon@hp.com>

2013-06-12 Nigel Croxon <nigel.croxon@hp.com>
    Disable MMX and SSE
    
    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>

    Author: Nigel Croxon <nigel.croxon@hp.com>
    Date:   Wed Jun 12 10:29:40 2013 -0400

    bug in make 3.82 expand to odd values
    
    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).

    Author: Nigel Croxon <nigel.croxon@hp.com>
    Date:   Wed Jun 12 09:53:01 2013 -0400

    support .text.* sections on x86_64
    
    Group them in .text. Also add vague linkage sections in .text.
    
    Signed-off-by: David Decotigny <decot@googlers.com>

    Author: Nigel Croxon <nigel.croxon@hp.com>
    Date:   Wed Jun 12 09:51:36 2013 -0400

    cleanup and fix Make.defaults
    
    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>

    Author: Nigel Croxon <nigel.croxon@hp.com>
    Date:   Wed Jun 12 09:47:16 2013 -0400

    automatically determine number of uefi_call_wrapper() args on x86_64
    
    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>

    Author: Nigel Croxon <nigel.croxon@hp.com>
    Date:   Wed Jun 12 09:38:10 2013 -0400

    fix parameter-passing corruption on x86_64 for >= 5 args
    
    On x86_64 without HAVE_USE_MS_ABI support, uefi_call_wrapper() is a
    variadic function. Parameters >=5 are copied to the stack and, when
    passed small immediate values (and possibly other parameters), gcc
    would emit a movl instruction before calling uefi_call_wrapper(). As a
    result, only the lower 32b of these stack values are significant, the
    upper 32b potentially contain garbage. Considering that
    uefi_call_wrapper() assumes these arguments are clean 64b values
    before calling the efi_callX() trampolines, the latter may be passed
    garbage. This makes calling functions like
    EFI_PCI_IO_PROTOCOL.Mem.Read()/Write() or BS->OpenProtocol() quite
    unreliable.
    
    This patch fixes this by turning uefi_call_wrapper() into a macro that
    allows to expose the efi_callX() trampoline signatures to the callers,
    so that gcc can know upfront that it has to pass all arguments to
    efi_callX() as clean 64b values (eg. movq for immediates). The
    _cast64_efi_callX macros are just here to avoid a gcc warning, they do
    nothing otherwise.
    
    Signed-off-by: David Decotigny <decot@googlers.com>

    Author: noxorc <nigel.croxon@hp.com>
    Date:   Wed May 15 15:26:16 2013 -0400

    - Removes the ElfW() macro usage from reloc_ia32.c and reloc_x86_64.c. These
    macros only exist in link.h on Linux. On FreeBSD, the equivalent macro is
    __ElfN(). But the macro usage is redundant. You're only going to compile the
    ia32 file for IA32 binaries and the x86_64 file for X64 binaries. If you had
    just one file built for both cases, then using the macro might make more
    sense.
    
    - Removes the "#define foo_t efi_foo_t" macros from reloc_ia32.c and
    reloc_x86_64.c.
    
    - Modifies inc/x86_64/efibind.h and inc/ia32/efibind.h to use the new
    definitions for uint64_t, int64_t and int8_t. The 64-bit types are now defined
    as:
    
            typedef int __attribute__((__mode__(__DI__)))           int64_t;
            typedef unsigned int __attribute__((__mode__(__DI__)))  uint64_t;
    
    This removes the conflict between the host types dragged in by elf.h and the
    type definitions in efibind.h that made the #define foo_t efi_foo_t" hack
    necessary. Also, int8_t is now defined as signed char instead of just char
    (assuming char == signed char is apparently not good enough).
    
    - Also modifies these files to use stdint.h instead of stdint-gcc.h. It's
    unclear if this is completely correct, but stdint-gcc.h is not present with
    all GCC installs, and if you use -std=c99 or later you will force this case to
    be hit. This also can break clang, which doesn't have a stdint-gcc.h at all.
    
    - Removes the #include of <link.h> from reloc_ia32.c and reloc_x86_64.c (since
    with the previous changes it's not needed anymore).
    
    - Places the #include of <elf.h> after #include <efi>/#include <efilib.h> so
    that we know the types will always be defined properly, in case you build on a
    system where <elf.h> doesn't automatically pull in the right header files to
    define all the needed types. (This actually happens on VxWorks. It's harmless
    elsewhere. If you don't care about VxWorks, you can leave this out.)
    
    - Modifies setjmp_ia32.S and setjmp_x86_64.S so to change "function" to
    @function. The clang compiler doesn't like the former. Clang and GCC both like
    the latter.
    
    - Modifles Make.defaults so that if ARCH is detected as "amd64," it's changed
    to "x86_64." It happens that uname -m on 64-bit FreeBSD reports the former
    rather than the latter, which breaks the build. This may also be the case on
    some other OSes. There's a way to force uname(1) to return x86_64 as the
    machine type, but this way is a little friendlier.
    
    - Creates gnuefi/elf_ia32_fbsd_efi.lds which specifies the object file type as
    elf-ia32-freebsd. This is required for building on FreeBSD/i386, not just
    FreeBSD/amd64.
    
    - Modifies apps/Makefile to always use
    $(TOPDIR)/gnuefi/elf_$(ARCH)_fbsd_efi.lds when building on either 32-bit or
    64-bit FreeBSD instead of just for the x86_64 case.
    
    - Changed LDFLAGS in Make.defaults to include --no-undefined. This will cause
    linking to fail if there are any unsatisfied symbols when creating foo.so
    during any of the app builds, as opposed to just silently succeeding and
    producing an unusable binary.
    
    - Changed CFLAGS to include -ffreestanding -fno-stack-protector -fno-stack-
    check. This prevents clang from inserting a call to memset() when compiling
    the RtZeroMem() and RtSetMem() routines in lib/runtime/efirtlib.c and guards
    against the native compiler in some Linux distros from adding in stack
    checking code which relies on libc help that isn't present in the EFI runtime
    environment.
    
    This does the following:
    
    - Cleans up the ia32 and x86-64 relocation code a bit (tries to break the
    dependency between the host ELF headers and the EFI runtime environment)
    - Avoids the dependency on stdint-gcc.h which may not always be available
    - Allows GNU EFI to build out of the box on both FreeBSD/i386 and
    FreeBSD/amd64
    - Allows GNU EFI to build out of the box with either GCC or clang on
    FreeBSD/i386 and FreeBSD/amd64 9.0 and later.
    - Makes things a little easier to port to VxWorks
    - Avoids creating un-runable binaries with unresolved symbol definitions
    (which can be very confusing to debug)

    Author: noxorc <nigel.croxon@hp.com>
    Date:   Wed May 8 16:29:45 2013 -0400

    Add the definitions for TCP, UDP and IP, for both IPv4 and IPv6.


2013-05-02 Nigel Croxon <nigel.croxon@hp.com>
	* Chnage from Matt Fleming <matt.fleming@intel.com>
	  - Preparation for adding the networking protocol definitions.
	    Add the service binding protocol.

2013-02-21 Nigel Croxon <nigel.croxon@hp.com>
	* Change from Peter Jones <pjones@redhat.com>
	  - Previously we were incorrectly passing 3 functions with
            the System V ABI to UEFI functions as EFI ABI functions.
            Mark them as EFIAPI so the compiler will (in our new
            GNU_EFI_USE_MS_ABI world) use the correct ABI.
          - These need to be EFIAPI functions because in some cases
            they call ST->ConOut->OutputString(), which is an EFIAPI
            function. (Which means that previously in cases that 
            needed "cdecl", these didn't work right.)
          - If the compiler version is new enough, and GNU_EFI_USE_MS_ABI
            is defined, use the function attribute ms_abi on everything
            defined with "EFIAPI".  Such calls will no longer go through
            efi_call*, and as such will be properly type-checked.
          - Honor PREFIX and LIBDIR correctly when passed in during the build.
          - Add machine type defines for i386, arm/thumb, ia64, ebc, x86_64.
          - __STDC_VERSION__ never actually gets defined unless there's a
            --std=... line.  So we were accidentally defining lots of c99
            types ourself. Since it's 2012, use --std=c11 where appropriate,
            and if it's defined and we're using gcc, actually include gcc's
            stdint definitions.
          - New test application added: route80h. This is a test program
            for PciIo.  It routes ioport 80h on ICH10 to PCI. This is also
            useful on a very limited set of hardware to enable use of
            a port 80h debug card.
          - New test applcation added: modelist. This lists video modes
            the GOP driver is showing us.
	* Change from Finnbarr Murphy
          - https://sourceforge.net/p/gnu-efi/feature-requests/2/
            Please add the following status codes to <efierr.h>
            EFI_INCOMPATIBLE_VERSION 25
            EFI_SECURITY_VIOLATION 26 
            EFI_CRC_ERROR 27 
            EFI_END_OF_MEDIA 28 
            EFI_END_OF_FILE 31 
            EFI_INVALID_LANGUAGE 32 
            EFI_COMPROMISED_DATA 33
	* Change from SourceForge.net Bug report
          - https://sourceforge.net/p/gnu-efi/bugs/5/
            BufferSize is a UINT64 *. The file shipped with GNU EFI is from
            1998 whereas the latest one is from 2004. I suspect Intel changed
            the API in order handle 64-bit systems.
        * Change from Felipe Contreras <felipe.contreras@gmail.com>
          - The current code seems to screw the stack at certain points.
            Multiple people have complained that gummiboot hangs right away,
            which is in part the fault of gummiboot, but happens only
            because the stack gets screwed. x86_64 EFI already aligns the
            stack, so there's no need for so much code to find a proper
            alignment, we always need to shift by 8 anyway.
        * Change from A. Steinmetz
          - https://sourceforge.net/p/gnu-efi/patches/1/
            The patch prepares for elilo to support uefi pxe over ipv6
            See uefi spec 2.3.1 errata c page 963 as reference.
            Verfied on an ASUS Sabertooth X79 BIOS Rev. 2104 system which
            is able to do an IPv6 UEFI PXE boot.
	* Release 3.0t

2012-09-21 Nigel Croxon <nigel.croxon@hp.com>
	* Change from Peter Jones <pjones@redhat.com>
	  - EFI Block I/O protocol versions 2 and 3 provide more information
	    regarding physical disk layout, including alingment offset at the
	    beginning of the disk ("LowestAlignedLba"), logical block size
	    ("LogicalBlocksPerPhysicalBlock"), and optimal block transfer size
	    ("OptimalTransferLengthGranularity").
	* Release 3.0r

2012-04-30 Nigel Croxon <nigel.croxon@hp.com>
	* Change from Matt Fleming <matt.fleming@intel.com>
	  -  The .reloc section is now 4096-byte boundary for x86_64.
	     Without this patch the .reloc section will not adhere to
	     the alignment value in the FileAlignment field (512 bytes by
	     default) of the PE/COFF header. This results in a signed
	     executable failing to boot in a secure boot environment.
	* Release 3.0q

2011-12-12 Nigel Croxon <nigel.croxon@hp.com>
        * Changes from Fenghua Yu <fenghua.yu@intel.com>
          - This fixes redefined types compilation failure for tcc.c on x86_64 machines.
        * Release 3.0p

2011-11-15 Nigel Croxon <nigel.croxon@hp.com>
        * Changes from Darren Hart <dvhart@linux.intel.com>
          - Conditionally assign toolchain binaries to allow overriding them.
          - Force a dependency on lib for gnuefi.
        * Release 3.0n

2011-08-23 Nigel Croxon <nigel.croxon@hp.com>
        * Changes from Peter Jones <pjones@redhat.com>
          - Add guarantee 16-byte stack alignment on x86_64.
          - Add routine to make callbacks work.
          - Add apps/tcc.efi to test calling convention.
        * Release 3.0m

2011-07-22 Nigel Croxon <nigel.croxon@hp.com>
	* Changed Makefiles from GPL to BSD.
	* Changes from Peter Jones <pjones@redhat.com>
	  - Add ifdefs for ia64 to mirror ia32 and x86-64 so that
	    one can build with GCC.
	  - Add headers for PciIo.
	  - Add the UEFI 2.x bits for EFI_BOOT_SERVICES
	  - Add an ignore for .note.GNU-stack section in X86-64 linker maps.
        * Release 3.0l

2011-04-07  Nigel Croxon <nigel.croxon@hp.com>
        * Change license from GPL to BSD.
        * Release 3.0j

2009-09-12  Julien BLACHE <jb@jblache.org>
	* Add support for FreeBSD.
	* Release 3.0i

2009-09-11  Julien BLACHE <jb@jblache.org>
	* Fix elf_ia32_efi.lds linker script to be compatible with the new
          linker behaviour. Patch from the RedHat bugzilla 492183.

2009-06-18  Nigel Croxon <nigel.croxon@hp.com>
        * Release 3.0h

2008-11-06  Nigel Croxon <nigel.croxon@hp.com>
        * Fix to not having any relocations at all. 

2008-09-18  Nigel Croxon <nigel.croxon@hp.com>
        * Use LIBDIR in makefiles
        * Add setjmp/longjmp
        * Fixes incorrect section attribute in crt0-efi-ia32.S
        * Adds value EfiResetShutdown to enum EFI_RESET_TYPE
        * Fixes a RAW warning in reloc_ia64.S
        * Adds the USB HCI device path structure in the headers
          patches were supplied by Peter Jones @ RedHat

2008-02-22  Nigel Croxon <nigel.croxon@hp.com>
	* Added '-mno-red-zone' to x68_64 compiles.
	  Patch provided by Mats Andersson.

2008-01-23  Nigel Croxon <nigel.croxon@hp.com>
        * release 3.0e to support x86_64
          EFI calling convention, the stack should be aligned in 16 bytes
          to make it possible to use SSE2 in EFI boot services.
          This patch fixes this issue. Patch provided by Huang Ying from Intel.

2007-05-11 Nigel Croxon <nigel.croxon@hp.com>
        * release 3.0d to support x86_64 from Chandramouli Narayanan
          from Intel and based on 3.0c-1

2006-03-21  Stephane Eranian <eranian@hpl.hp.com>
	* merged patch to support gcc-4.1 submitted by
	  Raymund Will from Novell/SuSE

2006-03-20  Stephane Eranian <eranian@hpl.hp.com>
	* updated ia-64 and ia-32 linker scripts to
	  match latest gcc. The new gcc may put functions in
	  .text* sections. patch submitted by H.J. Lu from Intel.

2004-11-19  Stephane Eranian <eranian@hpl.hp.com>
	* added patch to ignore .eh_frame section for IA-32. Patch
	  submitted by Jim Wilson

2004-09-23  Stephane Eranian <eranian@hpl.hp.com>
	* added patch to discard unwind sections, newer toolchains
	  complained about them. Patch submitted by Jesse Barnes from SGI.

2003-09-29  Stephane Eranian <eranian@hpl.hp.com>
	* updated elf_ia64_efi.lds to reflect new data sections 
	  created by gcc-3.3. Patch provided by Andreas Schwab from Suse.

2003-06-20  Stephane Eranian <eranian@hpl.hp.com>
	* updated elf_ia64_efi.lds and elf_ia32_efi.lds to include
	  new types data sections produced by recent version of gcc-3.x

2002-02-22  Stephane Eranian <eranian@hpl.hp.com>
	* release 3.0a
	* modified both IA-64 and IA-32 loader scripts to add support for the
	  new .rodata sections names (such as rodata.str2.8). Required
	  for new versions of gcc3.x.

2001-06-20  Stephane Eranian <eranian@hpl.hp.com>
	* release 3.0
	* split gnu-efi package in two different packages: the libary+include+crt and the bootloader.
	* removed W2U() hack and related files to get from wide-char to unicode. 
	* Use -fshort-wchar option for unicode.
	* restructured Makefiles now install under INSTALLROOT.

2001-04-06  Stephane Eranian <eranian@hpl.hp.com>

	* incorporated patches from David and Michael Johnston at Intel
	  to get the package to compile for IA-32 linux target.

	* Fixed ELILO to compile for Ia-32 (does not execute yet, though):
	  Makefile and start_kernel() function.

2001-04-06  Andreas Schwab <schwab@suse.de>

	* Fixed config.c  to
	  get the timeout directive to do something. implemented the global
	  root= directive.

	* Fix the efi_main() to deal with the -C option properly

2001-04-05  Stephane Eranian <eranian@hpl.hp.com>

	* update efi library to latest EFI toolkit 1.02 as distributed
	  by Intel. Fixed header + library files to compile with GCC

	* merged ELI and LILO (as of gnu-efi-1.1) together, mostly
	  taking the config file feature of ELI.

	* renamed LILO to ELILO to make the distinction

	* restructured code to make it easier to understand and maintain

	* fixed FPSWA driver checking and loading: we try all possible
	  files and let the driver itself figure out if it is the most
	  recent.
	* added support for compression (gzip) but keep support for plain
	  ELF image. ELILO autodetects the format

	* change the way the kernel is invoked. Now we call it in 
	  physical memory mode. This breaks the dependency between the
	  kernel code and the loader. No more lilo_start.c madness.

	* changed the way the boot_params are passed. We don't use the 
	  ZERO_PAGE_ADDR trick anymore. Instead we use EFI runtime memory.
	  The address of the structure is passed to the kernel in r28
	  by our convention.

	* released as gnu-efi-2.0

2001-04-03  David Mosberger  <davidm@hpl.hp.com>

	* gnuefi/reloc_ia32.c (_relocate): Change return type from "void"
	to "int".  Return error status if relocation fails for some
	reason.

	* gnuefi/elf_ia32_efi.lds: Drop unneeded ".rel.reloc" section.

	* gnuefi/crt0-efi-ia32.S (_start): Exit if _relocate() returns with
	non-zero exit status.

	* inc/ia32/efibind.h [__GNUC__]: Force 8-byte alignment for 64-bit
	types as that is what EFI appears to be expecting, despite the
	"#pragma pack()" at the beginning of the file!

2001-03-29  David Mosberger  <davidm@hpl.hp.com>

	* gnuefi/reloc_ia32.c: Add a couple of defines to work around
	libc/efilib collision on uint64_t et al.
	(_relocate): Use ELF32_R_TYPE() instead of ELFW(R_TYPE)().

	* gnuefi/crt0-efi-ia32.S (dummy): Add a dummy relocation entry.

2001-03-29  David Mosberger  <davidm@hpl.hp.com>

        * gnuefi/reloc_ia32.c: Add a couple of defines to work around
        libc/efilib collision on uint64_t et al.
        (_relocate): Use ELF32_R_TYPE() instead of ELFW(R_TYPE)().

        * gnuefi/crt0-efi-ia32.S (dummy): Add a dummy relocation entry.

2000-10-26  David Mosberger  <davidm@hpl.hp.com>
 
 	* gnuefi/elf_ia64_efi.lds: Mention .rela.sdata.
 
 	* Make.defaults (CFLAGS): Remove -nostdinc flags so we can pick
 	up the C compiler's stdarg.h.
 
 	* inc/stdarg.h: Remove this file.  It's not correct for gcc (nor
 	most other optimizing compilers).

2000-10-10  Stephane Eranian <eranian@hpl.hp.com>

	* cleaned up the error message and printing of those.
	* added support to load the FPSWA from a file in case support is not
	  present in the firmware already
	* fixed split_args() to do the right thing when you have leading spaces
	  before kernel name
	* changed the argify() function to rely on \0 instead of LoadOptionSize
	  as the field seems to be broken with current firmware
	* bumped version to 1.0

2000-10-04  David Mosberger  <davidm@hpl.hp.com>
 
	* gnuefi/reloc_ia64.S: Reserve space for up to 750 function descriptors.

	* gnuefi/elf_ia64_efi.lds: Add .sdata section for small data and
	put __gp in the "middle" of it.

	* gnuefi/crt0-efi-ia64.S (_start): Use movl/add to load
	gp-relative addresses that could be out of the range of the addl
	offset.
	* gnuefi/reloc_ia64.S (_relocate): Ditto.

	* apps/Makefile: Remove standard rules and include Make.rules instead.
	* lilo/Makefile: Ditto.

	* Make.rules: New file.

2000-08-04  Stephane Eranian <eranian@hpl.hp.com>
	* released version 0.9
	* incorporated ACPI changes for Asuza by NEC < kouchi@hpc.bs1.fc.nec.co.jp>
	* added support for initrd (-i option) original ELI code from Bill Nottingham <notting@redhat.com>)
	* lots of cleanups 
	* got rid of #ifdef LILO_DEBUG and uses macro instead
	* fix a few extra memory leaks in create_boot_params()
	* added exit capability just before starting the kernel

2000-06-22  David Mosberger  <davidm@hpl.hp.com>

	* gnuefi/elf_ia64_efi.lds: Add .srodata, .ctors, .IA64.unwind,
	.IA64.unwind_info to .data section and .rela.ctors to .rela
	section.

2000-04-03  David Mosberger  <davidm@hpl.hp.com>

	* lilo/lilo.c (LILO_VERSION): Up version number to 0.9.

	* gnuefi/elf_ia64_efi.lds: Include .IA_64.unwind and
	.IA_64.unwind_info in .data segment to avoid EFI load error
	"ImageAddress: pointer outside of image" error due to the .dynsym
	relocations against these sections.

	* ChangeLog: Moved from lilo/ChangeLogs.

	* gnuefi/reloc_ia64.S: fixed typo: .space directive had constant
	100 hardcoded instead of using MAX_FUNCTION_DESCRIPTORS
	macro. Duh.

2000-03-17 Stephane Eranian <eranian@hpl.hp.com>

	* Released 0.8
	* replace the  getopt.c with new version free with better license
	* created a documentation file
	* fix a couple of memory leaks
	* code cleanups
	* created a separate directory for lilo in the gnu-efi package.
	* added support for the BOOT_IMAGE argument to kernel
	* default is to build natively now

