Date   

Re: [PATCH] MdeModulePkg/NvmExpressDxe: fix check for Cap.Css

Wu, Hao A
 

The change is good to me.

Could you help to apply this change to the code in MdeModulePkg\Bus\Pci\NvmExpressPei\ as well?
Really sorry for missing the above comment in previous reply.

Best Regards,
Hao Wu

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Mara
Sophie Grosch via groups.io
Sent: Tuesday, March 22, 2022 1:06 AM
To: devel@edk2.groups.io; Wu, Hao A <hao.a.wu@...>
Subject: [edk2-devel] [PATCH] MdeModulePkg/NvmExpressDxe: fix check for
Cap.Css

Fix the check for NVMe command set being supported by the controller.

Was problematic with qemu (6.2.0, Debian 1:6.2+dfsg-3), which sets 0xC1 in that
register, making the OVMF think the NVMe controller does not support NVMe.

Uncovered by commit 9dd14fc91c174eae87fd122c7ac70073a363527f, which
changed the number of bits included in the Css register from 4 to 8.

Signed-off-by: Mara Sophie Grosch <littlefox@...>
---
MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
index d87212ffb2..b90c48731c 100644
--- a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
+++ b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
@@ -761,7 +761,7 @@ NvmeControllerInit (
return Status;
}

- if (Private->Cap.Css != 0x01) {
+ if ((Private->Cap.Css & BIT0) == 0) {
DEBUG ((DEBUG_INFO, "NvmeControllerInit: the controller doesn't support
NVMe command set\n"));
return EFI_UNSUPPORTED;
}
--
2.35.1




Now: Tools, CI, Code base construction meeting series - 03/21/2022 #cal-notice

devel@edk2.groups.io Calendar <noreply@...>
 

Tools, CI, Code base construction meeting series

When:
03/21/2022
4:30pm to 5:30pm
(UTC-07:00) America/Los Angeles

Where:
https://github.com/tianocore/edk2/discussions/2614

View Event

Description:

TianoCore community,

Microsoft and Intel will be hosting a series of open meetings to discuss build, CI, tools, and other related topics. If you are interested, have ideas/opinions please join us. These meetings will be Monday 4:30pm Pacific Time on Microsoft Teams.

MS Teams Link in following discussion: * https://github.com/tianocore/edk2/discussions/2614

Anyone is welcome to join.

MS Teams Browser Clients * https://docs.microsoft.com/en-us/microsoftteams/get-clients?tabs=Windows#browser-client


Re: [PATCH 1/2] Add filesystem drivers

Sean Rhodes
 

Hi Pedro/Patrick

Thank you, I'll adjust it for that :)


Kind regards,

Sean


Re: [PATCH 1/2] Add filesystem drivers

Pedro Falcato
 

Hi,

Ext4Pkg maintainer here. Just want to note that the aforementioned Ext4Pkg doesn't support ext2 filesystems yet (it has a bugzilla attached to it and is on my backlog, but I haven't really gotten around to it, though it should be simple).
So you could/should get rid of the ext4 binaries (and the licensing constraints that come with GPLv2), and in the future, the ext2 ones.

Best regards,
Pedro

On Mon, Mar 21, 2022 at 3:49 PM Patrick Rudolph <patrick.rudolph@...> wrote:
Hi Sean,
the Ext4 filesystem code is now available as source from
https://github.com/tianocore/edk2-platforms/tree/master/Features/Ext4Pkg

It looks like the UefiPayloadPkg needs to be generated from multiple
repositories to be feature complete.
I guess starting a UefiPayloadPkg in the platform repo would be the first step.

Regards,
Patrick Rudolph

On Mon, Mar 21, 2022 at 10:46 AM Sean Rhodes <sean@...> wrote:
>
> From: CoolStar <coolstarorganization@...>
>
> Add EXT2/EXT4, exFAT, NTFS filesystem drivers.
>
> Cc: Guo Dong <guo.dong@...>
> Cc: Ray Ni <ray.ni@...>
> Cc: Maurice Ma <maurice.ma@...>
> Cc: Benjamin You <benjamin.you@...>
> Signed-off-by: Sean Rhodes <sean@...>
> ---
>  FSDrivers/IA32/LICENSE.txt     |  47 +++++
>  FSDrivers/IA32/LICENSE_GPL.txt | 340 +++++++++++++++++++++++++++++++++
>  FSDrivers/IA32/exfat_ia32.efi  | Bin 0 -> 43008 bytes
>  FSDrivers/IA32/ext2_ia32.efi   | Bin 0 -> 19008 bytes
>  FSDrivers/IA32/ext4_ia32.efi   | Bin 0 -> 19520 bytes
>  FSDrivers/IA32/ntfs_ia32.efi   | Bin 0 -> 49152 bytes
>  FSDrivers/X64/LICENSE.txt      |  47 +++++
>  FSDrivers/X64/LICENSE_GPL.txt  | 340 +++++++++++++++++++++++++++++++++
>  FSDrivers/X64/exfat_ia32.efi   | Bin 0 -> 43008 bytes
>  FSDrivers/X64/exfat_x64.efi    | Bin 0 -> 40640 bytes
>  FSDrivers/X64/ext2_x64.efi     | Bin 0 -> 22280 bytes
>  FSDrivers/X64/ext4_x64.efi     | Bin 0 -> 22792 bytes
>  FSDrivers/X64/ntfs_x64.efi     | Bin 0 -> 47168 bytes
>  FSDrivers/exfat.inf            |  27 +++
>  FSDrivers/ext2.inf             |  25 +++
>  FSDrivers/ext4.inf             |  25 +++
>  FSDrivers/ntfs.inf             |  27 +++
>  17 files changed, 878 insertions(+)
>  create mode 100644 FSDrivers/IA32/LICENSE.txt
>  create mode 100644 FSDrivers/IA32/LICENSE_GPL.txt
>  create mode 100644 FSDrivers/IA32/exfat_ia32.efi
>  create mode 100644 FSDrivers/IA32/ext2_ia32.efi
>  create mode 100644 FSDrivers/IA32/ext4_ia32.efi
>  create mode 100644 FSDrivers/IA32/ntfs_ia32.efi
>  create mode 100644 FSDrivers/X64/LICENSE.txt
>  create mode 100644 FSDrivers/X64/LICENSE_GPL.txt
>  create mode 100644 FSDrivers/X64/exfat_ia32.efi
>  create mode 100644 FSDrivers/X64/exfat_x64.efi
>  create mode 100644 FSDrivers/X64/ext2_x64.efi
>  create mode 100644 FSDrivers/X64/ext4_x64.efi
>  create mode 100644 FSDrivers/X64/ntfs_x64.efi
>  create mode 100644 FSDrivers/exfat.inf
>  create mode 100644 FSDrivers/ext2.inf
>  create mode 100644 FSDrivers/ext4.inf
>  create mode 100644 FSDrivers/ntfs.inf
>
> diff --git a/FSDrivers/IA32/LICENSE.txt b/FSDrivers/IA32/LICENSE.txt
> new file mode 100644
> index 0000000000..cdeae2b89e
> --- /dev/null
> +++ b/FSDrivers/IA32/LICENSE.txt
> @@ -0,0 +1,47 @@
> +Licensing for the filesystem drivers is complex. Three different licenses
> +apply to various parts of the code:
> +
> +* Christoph Pfisterer's original file system wrapper (FSW) code is covered
> +  by a BSD-style license. Many of the source files with names that take the
> +  form fsw_*.[ch] are so licensed, but this is NOT generally true of
> +  filesystem-specific files (e.g., fsw_ext2.c or fsw_btrfs.c).
> +
> +* Certain filesystem drivers are licensed under the GPLv2, either because
> +  they borrow code from the Linux kernel or because a developer (typically
> +  Oracle) applied the GPLv2 license to them. This is true of the ext2fs,
> +  ext4fs, ReiserFS, HFS+, and ISO-9660 drivers.
> +
> +* At least one filesystem driver (Btrfs) uses code taken from GRUB, and so
> +  uses the GPLv3 (or later) license.
> +
> +Note that the GPLv2 and GPLv3 are, ironically, not compatible licenses.
> +Thus, code from GPLv2 and GPLv3 projects should not be mixed. The BSD
> +license used by Pfisterer's original code is compatible with both versions
> +of the GPL, so the fact that both GPLv2 and GPLv3 drivers is built upon it
> +is OK. If you intend to contribute to this project's drivers or use the
> +code yourself, please keep this fact in mind.
> +
> +The below was written by Christoph Pfisterer with respect to his original
> +code:
> +
> + File System Wrapper License
> +=============================
> +
> +The various parts of the File System Wrapper source code come from
> +different sources and may carry different licenses. Here's a quick
> +account of the situation:
> +
> + * The core code was written from scratch and is covered by a
> +   BSD-style license.
> +
> + * The EFI host driver was written from scratch, possibly using code
> +   from the TianoCore project and Intel's EFI Application Toolkit. It
> +   is covered by a BSD-style license.
> +
> + * The ext2 and reiserfs file system drivers use definitions from the
> +   Linux kernel source. The actual code was written from scratch,
> +   using multiple sources for reference. These drivers are covered by
> +   the GNU GPL.
> +
> +For more details, see each file's boilerplate comment. The full text
> +of the GNU GPL is in the file LICENSE_GPL.txt.
> diff --git a/FSDrivers/IA32/LICENSE_GPL.txt b/FSDrivers/IA32/LICENSE_GPL.txt
> new file mode 100644
> index 0000000000..d60c31a97a
> --- /dev/null
> +++ b/FSDrivers/IA32/LICENSE_GPL.txt
> @@ -0,0 +1,340 @@
> +                   GNU GENERAL PUBLIC LICENSE
> +                      Version 2, June 1991
> +
> + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
> +     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> + Everyone is permitted to copy and distribute verbatim copies
> + of this license document, but changing it is not allowed.
> +
> +                           Preamble
> +
> +  The licenses for most software are designed to take away your
> +freedom to share and change it.  By contrast, the GNU General Public
> +License is intended to guarantee your freedom to share and change free
> +software--to make sure the software is free for all its users.  This
> +General Public License applies to most of the Free Software
> +Foundation's software and to any other program whose authors commit to
> +using it.  (Some other Free Software Foundation software is covered by
> +the GNU Library General Public License instead.)  You can apply it to
> +your programs, too.
> +
> +  When we speak of free software, we are referring to freedom, not
> +price.  Our General Public Licenses are designed to make sure that you
> +have the freedom to distribute copies of free software (and charge for
> +this service if you wish), that you receive source code or can get it
> +if you want it, that you can change the software or use pieces of it
> +in new free programs; and that you know you can do these things.
> +
> +  To protect your rights, we need to make restrictions that forbid
> +anyone to deny you these rights or to ask you to surrender the rights.
> +These restrictions translate to certain responsibilities for you if you
> +distribute copies of the software, or if you modify it.
> +
> +  For example, if you distribute copies of such a program, whether
> +gratis or for a fee, you must give the recipients all the rights that
> +you have.  You must make sure that they, too, receive or can get the
> +source code.  And you must show them these terms so they know their
> +rights.
> +
> +  We protect your rights with two steps: (1) copyright the software, and
> +(2) offer you this license which gives you legal permission to copy,
> +distribute and/or modify the software.
> +
> +  Also, for each author's protection and ours, we want to make certain
> +that everyone understands that there is no warranty for this free
> +software.  If the software is modified by someone else and passed on, we
> +want its recipients to know that what they have is not the original, so
> +that any problems introduced by others will not reflect on the original
> +authors' reputations.
> +
> +  Finally, any free program is threatened constantly by software
> +patents.  We wish to avoid the danger that redistributors of a free
> +program will individually obtain patent licenses, in effect making the
> +program proprietary.  To prevent this, we have made it clear that any
> +patent must be licensed for everyone's free use or not licensed at all.
> +
> +  The precise terms and conditions for copying, distribution and
> +modification follow.
> +
> +                   GNU GENERAL PUBLIC LICENSE
> +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
> +
> +  0. This License applies to any program or other work which contains
> +a notice placed by the copyright holder saying it may be distributed
> +under the terms of this General Public License.  The "Program", below,
> +refers to any such program or work, and a "work based on the Program"
> +means either the Program or any derivative work under copyright law:
> +that is to say, a work containing the Program or a portion of it,
> +either verbatim or with modifications and/or translated into another
> +language.  (Hereinafter, translation is included without limitation in
> +the term "modification".)  Each licensee is addressed as "you".
> +
> +Activities other than copying, distribution and modification are not
> +covered by this License; they are outside its scope.  The act of
> +running the Program is not restricted, and the output from the Program
> +is covered only if its contents constitute a work based on the
> +Program (independent of having been made by running the Program).
> +Whether that is true depends on what the Program does.
> +
> +  1. You may copy and distribute verbatim copies of the Program's
> +source code as you receive it, in any medium, provided that you
> +conspicuously and appropriately publish on each copy an appropriate
> +copyright notice and disclaimer of warranty; keep intact all the
> +notices that refer to this License and to the absence of any warranty;
> +and give any other recipients of the Program a copy of this License
> +along with the Program.
> +
> +You may charge a fee for the physical act of transferring a copy, and
> +you may at your option offer warranty protection in exchange for a fee.
> +
> +  2. You may modify your copy or copies of the Program or any portion
> +of it, thus forming a work based on the Program, and copy and
> +distribute such modifications or work under the terms of Section 1
> +above, provided that you also meet all of these conditions:
> +
> +    a) You must cause the modified files to carry prominent notices
> +    stating that you changed the files and the date of any change.
> +
> +    b) You must cause any work that you distribute or publish, that in
> +    whole or in part contains or is derived from the Program or any
> +    part thereof, to be licensed as a whole at no charge to all third
> +    parties under the terms of this License.
> +
> +    c) If the modified program normally reads commands interactively
> +    when run, you must cause it, when started running for such
> +    interactive use in the most ordinary way, to print or display an
> +    announcement including an appropriate copyright notice and a
> +    notice that there is no warranty (or else, saying that you provide
> +    a warranty) and that users may redistribute the program under
> +    these conditions, and telling the user how to view a copy of this
> +    License.  (Exception: if the Program itself is interactive but
> +    does not normally print such an announcement, your work based on
> +    the Program is not required to print an announcement.)
> +
> +These requirements apply to the modified work as a whole.  If
> +identifiable sections of that work are not derived from the Program,
> +and can be reasonably considered independent and separate works in
> +themselves, then this License, and its terms, do not apply to those
> +sections when you distribute them as separate works.  But when you
> +distribute the same sections as part of a whole which is a work based
> +on the Program, the distribution of the whole must be on the terms of
> +this License, whose permissions for other licensees extend to the
> +entire whole, and thus to each and every part regardless of who wrote it.
> +
> +Thus, it is not the intent of this section to claim rights or contest
> +your rights to work written entirely by you; rather, the intent is to
> +exercise the right to control the distribution of derivative or
> +collective works based on the Program.
> +
> +In addition, mere aggregation of another work not based on the Program
> +with the Program (or with a work based on the Program) on a volume of
> +a storage or distribution medium does not bring the other work under
> +the scope of this License.
> +
> +  3. You may copy and distribute the Program (or a work based on it,
> +under Section 2) in object code or executable form under the terms of
> +Sections 1 and 2 above provided that you also do one of the following:
> +
> +    a) Accompany it with the complete corresponding machine-readable
> +    source code, which must be distributed under the terms of Sections
> +    1 and 2 above on a medium customarily used for software interchange; or,
> +
> +    b) Accompany it with a written offer, valid for at least three
> +    years, to give any third party, for a charge no more than your
> +    cost of physically performing source distribution, a complete
> +    machine-readable copy of the corresponding source code, to be
> +    distributed under the terms of Sections 1 and 2 above on a medium
> +    customarily used for software interchange; or,
> +
> +    c) Accompany it with the information you received as to the offer
> +    to distribute corresponding source code.  (This alternative is
> +    allowed only for noncommercial distribution and only if you
> +    received the program in object code or executable form with such
> +    an offer, in accord with Subsection b above.)
> +
> +The source code for a work means the preferred form of the work for
> +making modifications to it.  For an executable work, complete source
> +code means all the source code for all modules it contains, plus any
> +associated interface definition files, plus the scripts used to
> +control compilation and installation of the executable.  However, as a
> +special exception, the source code distributed need not include
> +anything that is normally distributed (in either source or binary
> +form) with the major components (compiler, kernel, and so on) of the
> +operating system on which the executable runs, unless that component
> +itself accompanies the executable.
> +
> +If distribution of executable or object code is made by offering
> +access to copy from a designated place, then offering equivalent
> +access to copy the source code from the same place counts as
> +distribution of the source code, even though third parties are not
> +compelled to copy the source along with the object code.
> +
> +  4. You may not copy, modify, sublicense, or distribute the Program
> +except as expressly provided under this License.  Any attempt
> +otherwise to copy, modify, sublicense or distribute the Program is
> +void, and will automatically terminate your rights under this License.
> +However, parties who have received copies, or rights, from you under
> +this License will not have their licenses terminated so long as such
> +parties remain in full compliance.
> +
> +  5. You are not required to accept this License, since you have not
> +signed it.  However, nothing else grants you permission to modify or
> +distribute the Program or its derivative works.  These actions are
> +prohibited by law if you do not accept this License.  Therefore, by
> +modifying or distributing the Program (or any work based on the
> +Program), you indicate your acceptance of this License to do so, and
> +all its terms and conditions for copying, distributing or modifying
> +the Program or works based on it.
> +
> +  6. Each time you redistribute the Program (or any work based on the
> +Program), the recipient automatically receives a license from the
> +original licensor to copy, distribute or modify the Program subject to
> +these terms and conditions.  You may not impose any further
> +restrictions on the recipients' exercise of the rights granted herein.
> +You are not responsible for enforcing compliance by third parties to
> +this License.
> +
> +  7. If, as a consequence of a court judgment or allegation of patent
> +infringement or for any other reason (not limited to patent issues),
> +conditions are imposed on you (whether by court order, agreement or
> +otherwise) that contradict the conditions of this License, they do not
> +excuse you from the conditions of this License.  If you cannot
> +distribute so as to satisfy simultaneously your obligations under this
> +License and any other pertinent obligations, then as a consequence you
> +may not distribute the Program at all.  For example, if a patent
> +license would not permit royalty-free redistribution of the Program by
> +all those who receive copies directly or indirectly through you, then
> +the only way you could satisfy both it and this License would be to
> +refrain entirely from distribution of the Program.
> +
> +If any portion of this section is held invalid or unenforceable under
> +any particular circumstance, the balance of the section is intended to
> +apply and the section as a whole is intended to apply in other
> +circumstances.
> +
> +It is not the purpose of this section to induce you to infringe any
> +patents or other property right claims or to contest validity of any
> +such claims; this section has the sole purpose of protecting the
> +integrity of the free software distribution system, which is
> +implemented by public license practices.  Many people have made
> +generous contributions to the wide range of software distributed
> +through that system in reliance on consistent application of that
> +system; it is up to the author/donor to decide if he or she is willing
> +to distribute software through any other system and a licensee cannot
> +impose that choice.
> +
> +This section is intended to make thoroughly clear what is believed to
> +be a consequence of the rest of this License.
> +
> +  8. If the distribution and/or use of the Program is restricted in
> +certain countries either by patents or by copyrighted interfaces, the
> +original copyright holder who places the Program under this License
> +may add an explicit geographical distribution limitation excluding
> +those countries, so that distribution is permitted only in or among
> +countries not thus excluded.  In such case, this License incorporates
> +the limitation as if written in the body of this License.
> +
> +  9. The Free Software Foundation may publish revised and/or new versions
> +of the General Public License from time to time.  Such new versions will
> +be similar in spirit to the present version, but may differ in detail to
> +address new problems or concerns.
> +
> +Each version is given a distinguishing version number.  If the Program
> +specifies a version number of this License which applies to it and "any
> +later version", you have the option of following the terms and conditions
> +either of that version or of any later version published by the Free
> +Software Foundation.  If the Program does not specify a version number of
> +this License, you may choose any version ever published by the Free Software
> +Foundation.
> +
> +  10. If you wish to incorporate parts of the Program into other free
> +programs whose distribution conditions are different, write to the author
> +to ask for permission.  For software which is copyrighted by the Free
> +Software Foundation, write to the Free Software Foundation; we sometimes
> +make exceptions for this.  Our decision will be guided by the two goals
> +of preserving the free status of all derivatives of our free software and
> +of promoting the sharing and reuse of software generally.
> +
> +                           NO WARRANTY
> +
> +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
> +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
> +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
> +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
> +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
> +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
> +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
> +REPAIR OR CORRECTION.
> +
> +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
> +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
> +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
> +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
> +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
> +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
> +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
> +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
> +POSSIBILITY OF SUCH DAMAGES.
> +
> +                    END OF TERMS AND CONDITIONS
> +
> +           How to Apply These Terms to Your New Programs
> +
> +  If you develop a new program, and you want it to be of the greatest
> +possible use to the public, the best way to achieve this is to make it
> +free software which everyone can redistribute and change under these terms.
> +
> +  To do so, attach the following notices to the program.  It is safest
> +to attach them to the start of each source file to most effectively
> +convey the exclusion of warranty; and each file should have at least
> +the "copyright" line and a pointer to where the full notice is found.
> +
> +    <one line to give the program's name and a brief idea of what it does.>
> +    Copyright (C) <year>  <name of author>
> +
> +    This program is free software; you can redistribute it and/or modify
> +    it under the terms of the GNU General Public License as published by
> +    the Free Software Foundation; either version 2 of the License, or
> +    (at your option) any later version.
> +
> +    This program is distributed in the hope that it will be useful,
> +    but WITHOUT ANY WARRANTY; without even the implied warranty of
> +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +    GNU General Public License for more details.
> +
> +    You should have received a copy of the GNU General Public License
> +    along with this program; if not, write to the Free Software
> +    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> +
> +
> +Also add information on how to contact you by electronic and paper mail.
> +
> +If the program is interactive, make it output a short notice like this
> +when it starts in an interactive mode:
> +
> +    Gnomovision version 69, Copyright (C) year  name of author
> +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
> +    This is free software, and you are welcome to redistribute it
> +    under certain conditions; type `show c' for details.
> +
> +The hypothetical commands `show w' and `show c' should show the appropriate
> +parts of the General Public License.  Of course, the commands you use may
> +be called something other than `show w' and `show c'; they could even be
> +mouse-clicks or menu items--whatever suits your program.
> +
> +You should also get your employer (if you work as a programmer) or your
> +school, if any, to sign a "copyright disclaimer" for the program, if
> +necessary.  Here is a sample; alter the names:
> +
> +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
> +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
> +
> +  <signature of Ty Coon>, 1 April 1989
> +  Ty Coon, President of Vice
> +
> +This General Public License does not permit incorporating your program into
> +proprietary programs.  If your program is a subroutine library, you may
> +consider it more useful to permit linking proprietary applications with the
> +library.  If this is what you want to do, use the GNU Library General
> +Public License instead of this License.
> diff --git a/FSDrivers/IA32/exfat_ia32.efi b/FSDrivers/IA32/exfat_ia32.efi
> new file mode 100644
> index 0000000000000000000000000000000000000000..d293a24ccdf14e8b7e4d82aab3499bfadeefc25d
> GIT binary patch
> literal 43008
> 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
>
> literal 0
> HcmV?d00001
>
> diff --git a/FSDrivers/IA32/ext2_ia32.efi b/FSDrivers/IA32/ext2_ia32.efi
> new file mode 100644
> index 0000000000000000000000000000000000000000..b512afe8289a0618e1d1d159380dbff8a177454f
> GIT binary patch
> literal 19008
> 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
>
> literal 0
> HcmV?d00001
>
> diff --git a/FSDrivers/IA32/ext4_ia32.efi b/FSDrivers/IA32/ext4_ia32.efi
> new file mode 100644
> index 0000000000000000000000000000000000000000..445b89c9164cb9e9e2f0d9c783a3d9054cb99298
> GIT binary patch
> literal 19520
> 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
>
> literal 0
> HcmV?d00001
>
> diff --git a/FSDrivers/IA32/ntfs_ia32.efi b/FSDrivers/IA32/ntfs_ia32.efi
> new file mode 100644
> index 0000000000000000000000000000000000000000..edea0d6eb2261053e23448ec54f0ec2772379ff5
> GIT binary patch
> literal 49152
> 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
> F_!A_c>i7Tv
>
> literal 0
> HcmV?d00001
>
> diff --git a/FSDrivers/X64/LICENSE.txt b/FSDrivers/X64/LICENSE.txt
> new file mode 100644
> index 0000000000..cdeae2b89e
> --- /dev/null
> +++ b/FSDrivers/X64/LICENSE.txt
> @@ -0,0 +1,47 @@
> +Licensing for the filesystem drivers is complex. Three different licenses
> +apply to various parts of the code:
> +
> +* Christoph Pfisterer's original file system wrapper (FSW) code is covered
> +  by a BSD-style license. Many of the source files with names that take the
> +  form fsw_*.[ch] are so licensed, but this is NOT generally true of
> +  filesystem-specific files (e.g., fsw_ext2.c or fsw_btrfs.c).
> +
> +* Certain filesystem drivers are licensed under the GPLv2, either because
> +  they borrow code from the Linux kernel or because a developer (typically
> +  Oracle) applied the GPLv2 license to them. This is true of the ext2fs,
> +  ext4fs, ReiserFS, HFS+, and ISO-9660 drivers.
> +
> +* At least one filesystem driver (Btrfs) uses code taken from GRUB, and so
> +  uses the GPLv3 (or later) license.
> +
> +Note that the GPLv2 and GPLv3 are, ironically, not compatible licenses.
> +Thus, code from GPLv2 and GPLv3 projects should not be mixed. The BSD
> +license used by Pfisterer's original code is compatible with both versions
> +of the GPL, so the fact that both GPLv2 and GPLv3 drivers is built upon it
> +is OK. If you intend to contribute to this project's drivers or use the
> +code yourself, please keep this fact in mind.
> +
> +The below was written by Christoph Pfisterer with respect to his original
> +code:
> +
> + File System Wrapper License
> +=============================
> +
> +The various parts of the File System Wrapper source code come from
> +different sources and may carry different licenses. Here's a quick
> +account of the situation:
> +
> + * The core code was written from scratch and is covered by a
> +   BSD-style license.
> +
> + * The EFI host driver was written from scratch, possibly using code
> +   from the TianoCore project and Intel's EFI Application Toolkit. It
> +   is covered by a BSD-style license.
> +
> + * The ext2 and reiserfs file system drivers use definitions from the
> +   Linux kernel source. The actual code was written from scratch,
> +   using multiple sources for reference. These drivers are covered by
> +   the GNU GPL.
> +
> +For more details, see each file's boilerplate comment. The full text
> +of the GNU GPL is in the file LICENSE_GPL.txt.
> diff --git a/FSDrivers/X64/LICENSE_GPL.txt b/FSDrivers/X64/LICENSE_GPL.txt
> new file mode 100644
> index 0000000000..d60c31a97a
> --- /dev/null
> +++ b/FSDrivers/X64/LICENSE_GPL.txt
> @@ -0,0 +1,340 @@
> +                   GNU GENERAL PUBLIC LICENSE
> +                      Version 2, June 1991
> +
> + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
> +     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> + Everyone is permitted to copy and distribute verbatim copies
> + of this license document, but changing it is not allowed.
> +
> +                           Preamble
> +
> +  The licenses for most software are designed to take away your
> +freedom to share and change it.  By contrast, the GNU General Public
> +License is intended to guarantee your freedom to share and change free
> +software--to make sure the software is free for all its users.  This
> +General Public License applies to most of the Free Software
> +Foundation's software and to any other program whose authors commit to
> +using it.  (Some other Free Software Foundation software is covered by
> +the GNU Library General Public License instead.)  You can apply it to
> +your programs, too.
> +
> +  When we speak of free software, we are referring to freedom, not
> +price.  Our General Public Licenses are designed to make sure that you
> +have the freedom to distribute copies of free software (and charge for
> +this service if you wish), that you receive source code or can get it
> +if you want it, that you can change the software or use pieces of it
> +in new free programs; and that you know you can do these things.
> +
> +  To protect your rights, we need to make restrictions that forbid
> +anyone to deny you these rights or to ask you to surrender the rights.
> +These restrictions translate to certain responsibilities for you if you
> +distribute copies of the software, or if you modify it.
> +
> +  For example, if you distribute copies of such a program, whether
> +gratis or for a fee, you must give the recipients all the rights that
> +you have.  You must make sure that they, too, receive or can get the
> +source code.  And you must show them these terms so they know their
> +rights.
> +
> +  We protect your rights with two steps: (1) copyright the software, and
> +(2) offer you this license which gives you legal permission to copy,
> +distribute and/or modify the software.
> +
> +  Also, for each author's protection and ours, we want to make certain
> +that everyone understands that there is no warranty for this free
> +software.  If the software is modified by someone else and passed on, we
> +want its recipients to know that what they have is not the original, so
> +that any problems introduced by others will not reflect on the original
> +authors' reputations.
> +
> +  Finally, any free program is threatened constantly by software
> +patents.  We wish to avoid the danger that redistributors of a free
> +program will individually obtain patent licenses, in effect making the
> +program proprietary.  To prevent this, we have made it clear that any
> +patent must be licensed for everyone's free use or not licensed at all.
> +
> +  The precise terms and conditions for copying, distribution and
> +modification follow.
> +
> +                   GNU GENERAL PUBLIC LICENSE
> +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
> +
> +  0. This License applies to any program or other work which contains
> +a notice placed by the copyright holder saying it may be distributed
> +under the terms of this General Public License.  The "Program", below,
> +refers to any such program or work, and a "work based on the Program"
> +means either the Program or any derivative work under copyright law:
> +that is to say, a work containing the Program or a portion of it,
> +either verbatim or with modifications and/or translated into another
> +language.  (Hereinafter, translation is included without limitation in
> +the term "modification".)  Each licensee is addressed as "you".
> +
> +Activities other than copying, distribution and modification are not
> +covered by this License; they are outside its scope.  The act of
> +running the Program is not restricted, and the output from the Program
> +is covered only if its contents constitute a work based on the
> +Program (independent of having been made by running the Program).
> +Whether that is true depends on what the Program does.
> +
> +  1. You may copy and distribute verbatim copies of the Program's
> +source code as you receive it, in any medium, provided that you
> +conspicuously and appropriately publish on each copy an appropriate
> +copyright notice and disclaimer of warranty; keep intact all the
> +notices that refer to this License and to the absence of any warranty;
> +and give any other recipients of the Program a copy of this License
> +along with the Program.
> +
> +You may charge a fee for the physical act of transferring a copy, and
> +you may at your option offer warranty protection in exchange for a fee.
> +
> +  2. You may modify your copy or copies of the Program or any portion
> +of it, thus forming a work based on the Program, and copy and
> +distribute such modifications or work under the terms of Section 1
> +above, provided that you also meet all of these conditions:
> +
> +    a) You must cause the modified files to carry prominent notices
> +    stating that you changed the files and the date of any change.
> +
> +    b) You must cause any work that you distribute or publish, that in
> +    whole or in part contains or is derived from the Program or any
> +    part thereof, to be licensed as a whole at no charge to all third
> +    parties under the terms of this License.
> +
> +    c) If the modified program normally reads commands interactively
> +    when run, you must cause it, when started running for such
> +    interactive use in the most ordinary way, to print or display an
> +    announcement including an appropriate copyright notice and a
> +    notice that there is no warranty (or else, saying that you provide
> +    a warranty) and that users may redistribute the program under
> +    these conditions, and telling the user how to view a copy of this
> +    License.  (Exception: if the Program itself is interactive but
> +    does not normally print such an announcement, your work based on
> +    the Program is not required to print an announcement.)
> +
> +These requirements apply to the modified work as a whole.  If
> +identifiable sections of that work are not derived from the Program,
> +and can be reasonably considered independent and separate works in
> +themselves, then this License, and its terms, do not apply to those
> +sections when you distribute them as separate works.  But when you
> +distribute the same sections as part of a whole which is a work based
> +on the Program, the distribution of the whole must be on the terms of
> +this License, whose permissions for other licensees extend to the
> +entire whole, and thus to each and every part regardless of who wrote it.
> +
> +Thus, it is not the intent of this section to claim rights or contest
> +your rights to work written entirely by you; rather, the intent is to
> +exercise the right to control the distribution of derivative or
> +collective works based on the Program.
> +
> +In addition, mere aggregation of another work not based on the Program
> +with the Program (or with a work based on the Program) on a volume of
> +a storage or distribution medium does not bring the other work under
> +the scope of this License.
> +
> +  3. You may copy and distribute the Program (or a work based on it,
> +under Section 2) in object code or executable form under the terms of
> +Sections 1 and 2 above provided that you also do one of the following:
> +
> +    a) Accompany it with the complete corresponding machine-readable
> +    source code, which must be distributed under the terms of Sections
> +    1 and 2 above on a medium customarily used for software interchange; or,
> +
> +    b) Accompany it with a written offer, valid for at least three
> +    years, to give any third party, for a charge no more than your
> +    cost of physically performing source distribution, a complete
> +    machine-readable copy of the corresponding source code, to be
> +    distributed under the terms of Sections 1 and 2 above on a medium
> +    customarily used for software interchange; or,
> +
> +    c) Accompany it with the information you received as to the offer
> +    to distribute corresponding source code.  (This alternative is
> +    allowed only for noncommercial distribution and only if you
> +    received the program in object code or executable form with such
> +    an offer, in accord with Subsection b above.)
> +
> +The source code for a work means the preferred form of the work for
> +making modifications to it.  For an executable work, complete source
> +code means all the source code for all modules it contains, plus any
> +associated interface definition files, plus the scripts used to
> +control compilation and installation of the executable.  However, as a
> +special exception, the source code distributed need not include
> +anything that is normally distributed (in either source or binary
> +form) with the major components (compiler, kernel, and so on) of the
> +operating system on which the executable runs, unless that component
> +itself accompanies the executable.
> +
> +If distribution of executable or object code is made by offering
> +access to copy from a designated place, then offering equivalent
> +access to copy the source code from the same place counts as
> +distribution of the source code, even though third parties are not
> +compelled to copy the source along with the object code.
> +
> +  4. You may not copy, modify, sublicense, or distribute the Program
> +except as expressly provided under this License.  Any attempt
> +otherwise to copy, modify, sublicense or distribute the Program is
> +void, and will automatically terminate your rights under this License.
> +However, parties who have received copies, or rights, from you under
> +this License will not have their licenses terminated so long as such
> +parties remain in full compliance.
> +
> +  5. You are not required to accept this License, since you have not
> +signed it.  However, nothing else grants you permission to modify or
> +distribute the Program or its derivative works.  These actions are
> +prohibited by law if you do not accept this License.  Therefore, by
> +modifying or distributing the Program (or any work based on the
> +Program), you indicate your acceptance of this License to do so, and
> +all its terms and conditions for copying, distributing or modifying
> +the Program or works based on it.
> +
> +  6. Each time you redistribute the Program (or any work based on the
> +Program), the recipient automatically receives a license from the
> +original licensor to copy, distribute or modify the Program subject to
> +these terms and conditions.  You may not impose any further
> +restrictions on the recipients' exercise of the rights granted herein.
> +You are not responsible for enforcing compliance by third parties to
> +this License.
> +
> +  7. If, as a consequence of a court judgment or allegation of patent
> +infringement or for any other reason (not limited to patent issues),
> +conditions are imposed on you (whether by court order, agreement or
> +otherwise) that contradict the conditions of this License, they do not
> +excuse you from the conditions of this License.  If you cannot
> +distribute so as to satisfy simultaneously your obligations under this
> +License and any other pertinent obligations, then as a consequence you
> +may not distribute the Program at all.  For example, if a patent
> +license would not permit royalty-free redistribution of the Program by
> +all those who receive copies directly or indirectly through you, then
> +the only way you could satisfy both it and this License would be to
> +refrain entirely from distribution of the Program.
> +
> +If any portion of this section is held invalid or unenforceable under
> +any particular circumstance, the balance of the section is intended to
> +apply and the section as a whole is intended to apply in other
> +circumstances.
> +
> +It is not the purpose of this section to induce you to infringe any
> +patents or other property right claims or to contest validity of any
> +such claims; this section has the sole purpose of protecting the
> +integrity of the free software distribution system, which is
> +implemented by public license practices.  Many people have made
> +generous contributions to the wide range of software distributed
> +through that system in reliance on consistent application of that
> +system; it is up to the author/donor to decide if he or she is willing
> +to distribute software through any other system and a licensee cannot
> +impose that choice.
> +
> +This section is intended to make thoroughly clear what is believed to
> +be a consequence of the rest of this License.
> +
> +  8. If the distribution and/or use of the Program is restricted in
> +certain countries either by patents or by copyrighted interfaces, the
> +original copyright holder who places the Program under this License
> +may add an explicit geographical distribution limitation excluding
> +those countries, so that distribution is permitted only in or among
> +countries not thus excluded.  In such case, this License incorporates
> +the limitation as if written in the body of this License.
> +
> +  9. The Free Software Foundation may publish revised and/or new versions
> +of the General Public License from time to time.  Such new versions will
> +be similar in spirit to the present version, but may differ in detail to
> +address new problems or concerns.
> +
> +Each version is given a distinguishing version number.  If the Program
> +specifies a version number of this License which applies to it and "any
> +later version", you have the option of following the terms and conditions
> +either of that version or of any later version published by the Free
> +Software Foundation.  If the Program does not specify a version number of
> +this License, you may choose any version ever published by the Free Software
> +Foundation.
> +
> +  10. If you wish to incorporate parts of the Program into other free
> +programs whose distribution conditions are different, write to the author
> +to ask for permission.  For software which is copyrighted by the Free
> +Software Foundation, write to the Free Software Foundation; we sometimes
> +make exceptions for this.  Our decision will be guided by the two goals
> +of preserving the free status of all derivatives of our free software and
> +of promoting the sharing and reuse of software generally.
> +
> +                           NO WARRANTY
> +
> +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
> +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
> +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
> +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
> +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
> +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
> +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
> +REPAIR OR CORRECTION.
> +
> +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
> +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
> +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
> +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
> +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
> +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
> +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
> +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
> +POSSIBILITY OF SUCH DAMAGES.
> +
> +                    END OF TERMS AND CONDITIONS
> +
> +           How to Apply These Terms to Your New Programs
> +
> +  If you develop a new program, and you want it to be of the greatest
> +possible use to the public, the best way to achieve this is to make it
> +free software which everyone can redistribute and change under these terms.
> +
> +  To do so, attach the following notices to the program.  It is safest
> +to attach them to the start of each source file to most effectively
> +convey the exclusion of warranty; and each file should have at least
> +the "copyright" line and a pointer to where the full notice is found.
> +
> +    <one line to give the program's name and a brief idea of what it does.>
> +    Copyright (C) <year>  <name of author>
> +
> +    This program is free software; you can redistribute it and/or modify
> +    it under the terms of the GNU General Public License as published by
> +    the Free Software Foundation; either version 2 of the License, or
> +    (at your option) any later version.
> +
> +    This program is distributed in the hope that it will be useful,
> +    but WITHOUT ANY WARRANTY; without even the implied warranty of
> +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +    GNU General Public License for more details.
> +
> +    You should have received a copy of the GNU General Public License
> +    along with this program; if not, write to the Free Software
> +    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> +
> +
> +Also add information on how to contact you by electronic and paper mail.
> +
> +If the program is interactive, make it output a short notice like this
> +when it starts in an interactive mode:
> +
> +    Gnomovision version 69, Copyright (C) year  name of author
> +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
> +    This is free software, and you are welcome to redistribute it
> +    under certain conditions; type `show c' for details.
> +
> +The hypothetical commands `show w' and `show c' should show the appropriate
> +parts of the General Public License.  Of course, the commands you use may
> +be called something other than `show w' and `show c'; they could even be
> +mouse-clicks or menu items--whatever suits your program.
> +
> +You should also get your employer (if you work as a programmer) or your
> +school, if any, to sign a "copyright disclaimer" for the program, if
> +necessary.  Here is a sample; alter the names:
> +
> +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
> +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
> +
> +  <signature of Ty Coon>, 1 April 1989
> +  Ty Coon, President of Vice
> +
> +This General Public License does not permit incorporating your program into
> +proprietary programs.  If your program is a subroutine library, you may
> +consider it more useful to permit linking proprietary applications with the
> +library.  If this is what you want to do, use the GNU Library General
> +Public License instead of this License.
> diff --git a/FSDrivers/X64/exfat_ia32.efi b/FSDrivers/X64/exfat_ia32.efi
> new file mode 100644
> index 0000000000000000000000000000000000000000..d293a24ccdf14e8b7e4d82aab3499bfadeefc25d
> GIT binary patch
> literal 43008
> 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
>
> literal 0
> HcmV?d00001
>
> diff --git a/FSDrivers/X64/exfat_x64.efi b/FSDrivers/X64/exfat_x64.efi
> new file mode 100644
> index 0000000000000000000000000000000000000000..5e1f8a8010ceee950fc31ea1d6701df8519f3683
> GIT binary patch
> literal 40640
> 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
>
> literal 0
> HcmV?d00001
>
> diff --git a/FSDrivers/X64/ext2_x64.efi b/FSDrivers/X64/ext2_x64.efi
> new file mode 100644
> index 0000000000000000000000000000000000000000..1da0928d38c0713e4a0e8eaa71d2edae08aaaa47
> GIT binary patch
> literal 22280
> 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
>
> literal 0
> HcmV?d00001
>
> diff --git a/FSDrivers/X64/ext4_x64.efi b/FSDrivers/X64/ext4_x64.efi
> new file mode 100644
> index 0000000000000000000000000000000000000000..bcb65fc0ffcaea918b49d77246a0c31236c5e7dd
> GIT binary patch
> literal 22792
> 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
> H9`wHfdAf{(
>
> literal 0
> HcmV?d00001
>
> diff --git a/FSDrivers/X64/ntfs_x64.efi b/FSDrivers/X64/ntfs_x64.efi
> new file mode 100644
> index 0000000000000000000000000000000000000000..5aaa97aca06fde7ea75f2475f155487b2fa3fb8d
> GIT binary patch
> literal 47168
> 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
> b-uTk^@>q_S#+C8v_}2LDc!z&h4aa{01X??2
>
> literal 0
> HcmV?d00001
>
> diff --git a/FSDrivers/exfat.inf b/FSDrivers/exfat.inf
> new file mode 100644
> index 0000000000..caf940cfda
> --- /dev/null
> +++ b/FSDrivers/exfat.inf
> @@ -0,0 +1,27 @@
> +# ReadOnly exFAT filesystem driver
> +# From https://efi.akeo.ie/ v1.5
> +##
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = exfat
> +  FILE_GUID                      = CB683001-379F-48C7-B7B6-707D29454BF5
> +  MODULE_TYPE                    = UEFI_DRIVER
> +  VERSION_STRING                 = 1.0
> +
> +
> +#
> +# The following information is for reference only and not required by the build tools.
> +#
> +#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
> +#
> +
> +VALID_ARCHITECTURES           = X64 IA32
> +
> +[Binaries.X64]
> +  PE32|X64/exfat_x64.efi|*
> +
> +[Binaries.IA32]
> +  PE32|IA32/exfat_ia32.efi|*
> +
> +
> diff --git a/FSDrivers/ext2.inf b/FSDrivers/ext2.inf
> new file mode 100644
> index 0000000000..67a985e385
> --- /dev/null
> +++ b/FSDrivers/ext2.inf
> @@ -0,0 +1,25 @@
> +# EXT2 filesystem driver. See */LICENSE.txt for details.
> +# https://www.rodsbooks.com/refind/ v0.12
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = ext2
> +  FILE_GUID                      = 8EC49C43-D1C4-4E6C-98BF-232CA5D89A1B
> +  MODULE_TYPE                    = UEFI_DRIVER
> +  VERSION_STRING                 = 1.0
> +
> +
> +#
> +# The following information is for reference only and not required by the build tools.
> +#
> +#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
> +#
> +
> +VALID_ARCHITECTURES           = X64 IA32
> +
> +[Binaries.X64]
> +  PE32|X64/ext2_x64.efi|*
> +
> +[Binaries.IA32]
> +  PE32|IA32/ext2_ia32.efi|*
> +
> diff --git a/FSDrivers/ext4.inf b/FSDrivers/ext4.inf
> new file mode 100644
> index 0000000000..c9d0807251
> --- /dev/null
> +++ b/FSDrivers/ext4.inf
> @@ -0,0 +1,25 @@
> +# EXT4 filesystem driver. See */LICENSE.txt for details.
> +# https://www.rodsbooks.com/refind/ v0.12
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = ext4
> +  FILE_GUID                      = 9d380387-a15a-4053-ae19-ff3495b6d0d5
> +  MODULE_TYPE                    = UEFI_DRIVER
> +  VERSION_STRING                 = 1.0
> +
> +
> +#
> +# The following information is for reference only and not required by the build tools.
> +#
> +#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
> +#
> +
> +VALID_ARCHITECTURES           = X64 IA32
> +
> +[Binaries.X64]
> +  PE32|X64/ext4_x64.efi|*
> +
> +[Binaries.IA32]
> +  PE32|IA32/ext4_ia32.efi|*
> +
> diff --git a/FSDrivers/ntfs.inf b/FSDrivers/ntfs.inf
> new file mode 100644
> index 0000000000..804f655cd7
> --- /dev/null
> +++ b/FSDrivers/ntfs.inf
> @@ -0,0 +1,27 @@
> +# ReadOnly NTFS filesystem driver
> +# From https://efi.akeo.ie/ v1.5
> +##
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = ntfs
> +  FILE_GUID                      = 2282efd0-678b-4753-8d06-200d5940285d
> +  MODULE_TYPE                    = UEFI_DRIVER
> +  VERSION_STRING                 = 1.0
> +
> +
> +#
> +# The following information is for reference only and not required by the build tools.
> +#
> +#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
> +#
> +
> +VALID_ARCHITECTURES           = X64 IA32
> +
> +[Binaries.X64]
> +  PE32|X64/ntfs_x64.efi|*
> +
> +[Binaries.IA32]
> +  PE32|IA32/ntfs_ia32.efi|*
> +
> +
> --
> 2.32.0
>
>
>
>
>
>







--
Pedro Falcato


[PATCH v2 0/3] BaseTools: Add support for gdb and lldb

Rebecca Cran <quic_rcran@...>
 

This patch set adds debugging support for gdb and lldb.
It also adds generic debugging classes that use a file like object to
make it easy to import into any debugger that supports Python.

Changes from v1 to v2:
- Moved scripts from the root of the repo into BaseTools/Scripts.
- Fixed typo of "RISCV" as "RISKV".

Testing:
- Tested gdb on Ubuntu and lldb on macOS for IA32 and X64.
- Tested gdb on openSUSE for AARCH64.

Rebecca Cran (3):
BaseTools: efi_debugging.py: Add debugger agnostic dbg Python Classes
BaseTools: Scripts/efi_gdb.py: Add gdb EFI commands and pretty Print
BaseTools: Scripts/efi_lldb.py: Add lldb EFI commands and pretty Print

BaseTools/Scripts/efi_debugging.py | 2185 ++++++++++++++++++++
BaseTools/Scripts/efi_gdb.py | 918 ++++++++
BaseTools/Scripts/efi_lldb.py | 1044 ++++++++++
3 files changed, 4147 insertions(+)
create mode 100755 BaseTools/Scripts/efi_debugging.py
create mode 100755 BaseTools/Scripts/efi_gdb.py
create mode 100755 BaseTools/Scripts/efi_lldb.py

--
2.34.1


[PATCH v2 3/3] BaseTools: Scripts/efi_lldb.py: Add lldb EFI commands and pretty Print

Rebecca Cran <quic_rcran@...>
 

https://bugzilla.tianocore.org/show_bug.cgi?id=3500

Use efi_debugging.py Python Classes to implement EFI gdb commands:
efi_symbols, guid, table, hob, and devicepath

You can attach to any standard gdb or kdp remote server and get EFI
symbols. No modifications of EFI are required.

Example usage:
OvmfPkg/build.sh qemu -gdb tcp::9000
lldb -o "gdb-remote localhost:9000" -o "command script import efi_lldb.py"
Note you may also have to teach lldb about QEMU:
-o "settings set plugin.process.gdb-remote.target-definition-file
x86_64_target_definition.py"

Cc: Leif Lindholm <quic_llindhol@...>
Cc: Michael D Kinney <michael.d.kinney@...>
Cc: Hao A Wu <hao.a.wu@...>
Cc: Bob Feng <bob.c.feng@...>
Cc: Liming Gao <gaoliming@...>
Cc: Yuwei Chen <yuwei.chen@...>
Signed-off-by: Rebecca Cran <quic_rcran@...>
---
BaseTools/Scripts/efi_lldb.py | 1044 ++++++++++++++++++++
1 file changed, 1044 insertions(+)

diff --git a/BaseTools/Scripts/efi_lldb.py b/BaseTools/Scripts/efi_lldb.py
new file mode 100755
index 000000000000..089b6ba58ab8
--- /dev/null
+++ b/BaseTools/Scripts/efi_lldb.py
@@ -0,0 +1,1044 @@
+#!/usr/bin/python3
+'''
+Copyright (c) Apple Inc. 2021
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+Example usage:
+OvmfPkg/build.sh qemu -gdb tcp::9000
+lldb -o "gdb-remote localhost:9000" -o "command script import efi_lldb.py"
+'''
+
+import optparse
+import shlex
+import subprocess
+import uuid
+import sys
+import os
+from pathlib import Path
+from efi_debugging import EfiDevicePath, EfiConfigurationTable, EfiTpl
+from efi_debugging import EfiHob, GuidNames, EfiStatusClass, EfiBootMode
+from efi_debugging import PeTeImage, patch_ctypes
+
+try:
+ # Just try for LLDB in case PYTHONPATH is already correctly setup
+ import lldb
+except ImportError:
+ try:
+ env = os.environ.copy()
+ env['LLDB_DEFAULT_PYTHON_VERSION'] = str(sys.version_info.major)
+ lldb_python_path = subprocess.check_output(
+ ["xcrun", "lldb", "-P"], env=env).decode("utf-8").strip()
+ sys.path.append(lldb_python_path)
+ import lldb
+ except ValueError:
+ print("Couldn't find LLDB.framework from lldb -P")
+ print("PYTHONPATH should match the currently selected lldb")
+ sys.exit(-1)
+
+
+class LldbFileObject(object):
+ '''
+ Class that fakes out file object to abstract lldb from the generic code.
+ For lldb this is memory so we don't have a concept of the end of the file.
+ '''
+
+ def __init__(self, process):
+ # _exe_ctx is lldb.SBExecutionContext
+ self._process = process
+ self._offset = 0
+ self._SBError = lldb.SBError()
+
+ def tell(self):
+ return self._offset
+
+ def read(self, size=-1):
+ if size == -1:
+ # arbitrary default size
+ size = 0x1000000
+
+ data = self._process.ReadMemory(self._offset, size, self._SBError)
+ if self._SBError.fail:
+ raise MemoryError(
+ f'lldb could not read memory 0x{size:x} '
+ f' bytes from 0x{self._offset:08x}')
+ else:
+ return data
+
+ def readable(self):
+ return True
+
+ def seek(self, offset, whence=0):
+ if whence == 0:
+ self._offset = offset
+ elif whence == 1:
+ self._offset += offset
+ else:
+ # whence == 2 is seek from end
+ raise NotImplementedError
+
+ def seekable(self):
+ return True
+
+ def write(self, data):
+ result = self._process.WriteMemory(self._offset, data, self._SBError)
+ if self._SBError.fail:
+ raise MemoryError(
+ f'lldb could not write memory to 0x{self._offset:08x}')
+ return result
+
+ def writable(self):
+ return True
+
+ def truncate(self, size=None):
+ raise NotImplementedError
+
+ def flush(self):
+ raise NotImplementedError
+
+ def fileno(self):
+ raise NotImplementedError
+
+
+class EfiSymbols:
+ """
+ Class to manage EFI Symbols
+ You need to pass file, and exe_ctx to load symbols.
+ You can print(EfiSymbols()) to see the currently loaded symbols
+ """
+
+ loaded = {}
+ stride = None
+ range = None
+ verbose = False
+
+ def __init__(self, target=None):
+ if target:
+ EfiSymbols.target = target
+ EfiSymbols._file = LldbFileObject(target.process)
+
+ @ classmethod
+ def __str__(cls):
+ return ''.join(f'{pecoff}\n' for (pecoff, _) in cls.loaded.values())
+
+ @ classmethod
+ def configure_search(cls, stride, range, verbose=False):
+ cls.stride = stride
+ cls.range = range
+ cls.verbose = verbose
+
+ @ classmethod
+ def clear(cls):
+ cls.loaded = {}
+
+ @ classmethod
+ def add_symbols_for_pecoff(cls, pecoff):
+ '''Tell lldb the location of the .text and .data sections.'''
+
+ if pecoff.LoadAddress in cls.loaded:
+ return 'Already Loaded: '
+
+ module = cls.target.AddModule(None, None, str(pecoff.CodeViewUuid))
+ if not module:
+ module = cls.target.AddModule(pecoff.CodeViewPdb,
+ None,
+ str(pecoff.CodeViewUuid))
+ if module.IsValid():
+ SBError = cls.target.SetModuleLoadAddress(
+ module, pecoff.LoadAddress + pecoff.TeAdjust)
+ if SBError.success:
+ cls.loaded[pecoff.LoadAddress] = (pecoff, module)
+ return ''
+
+ return 'Symbols NOT FOUND: '
+
+ @ classmethod
+ def address_to_symbols(cls, address, reprobe=False):
+ '''
+ Given an address search backwards for a PE/COFF (or TE) header
+ and load symbols. Return a status string.
+ '''
+ if not isinstance(address, int):
+ address = int(address)
+
+ pecoff, _ = cls.address_in_loaded_pecoff(address)
+ if not reprobe and pecoff is not None:
+ # skip the probe of the remote
+ return f'{pecoff} is already loaded'
+
+ pecoff = PeTeImage(cls._file, None)
+ if pecoff.pcToPeCoff(address, cls.stride, cls.range):
+ res = cls.add_symbols_for_pecoff(pecoff)
+ return f'{res}{pecoff}'
+ else:
+ return f'0x{address:08x} not in a PE/COFF (or TE) image'
+
+ @ classmethod
+ def address_in_loaded_pecoff(cls, address):
+ if not isinstance(address, int):
+ address = int(address)
+
+ for (pecoff, module) in cls.loaded.values():
+ if (address >= pecoff.LoadAddress and
+ address <= pecoff.EndLoadAddress):
+
+ return pecoff, module
+
+ return None, None
+
+ @ classmethod
+ def unload_symbols(cls, address):
+ pecoff, module = cls.address_in_loaded_pecoff(address)
+ if module:
+ name = str(module)
+ cls.target.ClearModuleLoadAddress(module)
+ cls.target.RemoveModule(module)
+ del cls.loaded[pecoff.LoadAddress]
+ return f'{name:s} was unloaded'
+ return f'0x{address:x} was not in a loaded image'
+
+
+def arg_to_address(frame, arg):
+ ''' convert an lldb command arg into a memory address (addr_t)'''
+
+ if arg is None:
+ return None
+
+ arg_str = arg if isinstance(arg, str) else str(arg)
+ SBValue = frame.EvaluateExpression(arg_str)
+ if SBValue.error.fail:
+ return arg
+
+ if (SBValue.TypeIsPointerType() or
+ SBValue.value_type == lldb.eValueTypeRegister or
+ SBValue.value_type == lldb.eValueTypeRegisterSet or
+ SBValue.value_type == lldb.eValueTypeConstResult):
+ try:
+ addr = SBValue.GetValueAsAddress()
+ except ValueError:
+ addr = SBValue.unsigned
+ else:
+ try:
+ addr = SBValue.address_of.GetValueAsAddress()
+ except ValueError:
+ addr = SBValue.address_of.unsigned
+
+ return addr
+
+
+def arg_to_data(frame, arg):
+ ''' convert an lldb command arg into a data vale (uint32_t/uint64_t)'''
+ if not isinstance(arg, str):
+ arg_str = str(str)
+
+ SBValue = frame.EvaluateExpression(arg_str)
+ return SBValue.unsigned
+
+
+class EfiDevicePathCommand:
+
+ def create_options(self):
+ ''' standard lldb command help/options parser'''
+ usage = "usage: %prog [options]"
+ description = '''Command that can EFI Config Tables
+'''
+
+ # Pass add_help_option = False, since this keeps the command in line
+ # with lldb commands, and we wire up "help command" to work by
+ # providing the long & short help methods below.
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='devicepath',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-v',
+ '--verbose',
+ action='store_true',
+ dest='verbose',
+ help='hex dump extra data',
+ default=False)
+
+ self.parser.add_option(
+ '-n',
+ '--node',
+ action='store_true',
+ dest='node',
+ help='dump a single device path node',
+ default=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ def get_short_help(self):
+ '''standard lldb function method'''
+ return "Display EFI Tables"
+
+ def get_long_help(self):
+ '''standard lldb function method'''
+ return self.help_string
+
+ def __init__(self, debugger, internal_dict):
+ '''standard lldb function method'''
+ self.create_options()
+ self.help_string = self.parser.format_help()
+
+ def __call__(self, debugger, command, exe_ctx, result):
+ '''standard lldb function method'''
+ # Use the Shell Lexer to properly parse up command options just like a
+ # shell would
+ command_args = shlex.split(command)
+
+ try:
+ (options, args) = self.parser.parse_args(command_args)
+ dev_list = []
+ for arg in args:
+ dev_list.append(arg_to_address(exe_ctx.frame, arg))
+ except ValueError:
+ # if you don't handle exceptions, passing an incorrect argument
+ # to the OptionParser will cause LLDB to exit (courtesy of
+ # OptParse dealing with argument errors by throwing SystemExit)
+ result.SetError("option parsing failed")
+ return
+
+ if options.help:
+ self.parser.print_help()
+ return
+
+ file = LldbFileObject(exe_ctx.process)
+
+ for dev_addr in dev_list:
+ if options.node:
+ print(EfiDevicePath(file).device_path_node_str(
+ dev_addr, options.verbose))
+ else:
+ device_path = EfiDevicePath(file, dev_addr, options.verbose)
+ if device_path.valid():
+ print(device_path)
+
+
+class EfiHobCommand:
+ def create_options(self):
+ ''' standard lldb command help/options parser'''
+ usage = "usage: %prog [options]"
+ description = '''Command that can EFI dump EFI HOBs'''
+
+ # Pass add_help_option = False, since this keeps the command in line
+ # with lldb commands, and we wire up "help command" to work by
+ # providing the long & short help methods below.
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='table',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-a',
+ '--address',
+ type="int",
+ dest='address',
+ help='Parse HOBs from address',
+ default=None)
+
+ self.parser.add_option(
+ '-t',
+ '--type',
+ type="int",
+ dest='type',
+ help='Only dump HOBS of his type',
+ default=None)
+
+ self.parser.add_option(
+ '-v',
+ '--verbose',
+ action='store_true',
+ dest='verbose',
+ help='hex dump extra data',
+ default=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ def get_short_help(self):
+ '''standard lldb function method'''
+ return "Display EFI Hobs"
+
+ def get_long_help(self):
+ '''standard lldb function method'''
+ return self.help_string
+
+ def __init__(self, debugger, internal_dict):
+ '''standard lldb function method'''
+ self.create_options()
+ self.help_string = self.parser.format_help()
+
+ def __call__(self, debugger, command, exe_ctx, result):
+ '''standard lldb function method'''
+ # Use the Shell Lexer to properly parse up command options just like a
+ # shell would
+ command_args = shlex.split(command)
+
+ try:
+ (options, _) = self.parser.parse_args(command_args)
+ except ValueError:
+ # if you don't handle exceptions, passing an incorrect argument
+ # to the OptionParser will cause LLDB to exit (courtesy of
+ # OptParse dealing with argument errors by throwing SystemExit)
+ result.SetError("option parsing failed")
+ return
+
+ if options.help:
+ self.parser.print_help()
+ return
+
+ address = arg_to_address(exe_ctx.frame, options.address)
+
+ file = LldbFileObject(exe_ctx.process)
+ hob = EfiHob(file, address, options.verbose).get_hob_by_type(
+ options.type)
+ print(hob)
+
+
+class EfiTableCommand:
+
+ def create_options(self):
+ ''' standard lldb command help/options parser'''
+ usage = "usage: %prog [options]"
+ description = '''Command that can display EFI Config Tables
+'''
+
+ # Pass add_help_option = False, since this keeps the command in line
+ # with lldb commands, and we wire up "help command" to work by
+ # providing the long & short help methods below.
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='table',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ def get_short_help(self):
+ '''standard lldb function method'''
+ return "Display EFI Tables"
+
+ def get_long_help(self):
+ '''standard lldb function method'''
+ return self.help_string
+
+ def __init__(self, debugger, internal_dict):
+ '''standard lldb function method'''
+ self.create_options()
+ self.help_string = self.parser.format_help()
+
+ def __call__(self, debugger, command, exe_ctx, result):
+ '''standard lldb function method'''
+ # Use the Shell Lexer to properly parse up command options just like a
+ # shell would
+ command_args = shlex.split(command)
+
+ try:
+ (options, _) = self.parser.parse_args(command_args)
+ except ValueError:
+ # if you don't handle exceptions, passing an incorrect argument
+ # to the OptionParser will cause LLDB to exit (courtesy of
+ # OptParse dealing with argument errors by throwing SystemExit)
+ result.SetError("option parsing failed")
+ return
+
+ if options.help:
+ self.parser.print_help()
+ return
+
+ gST = exe_ctx.target.FindFirstGlobalVariable('gST')
+ if gST.error.fail:
+ print('Error: This command requires symbols for gST to be loaded')
+ return
+
+ file = LldbFileObject(exe_ctx.process)
+ table = EfiConfigurationTable(file, gST.unsigned)
+ if table:
+ print(table, '\n')
+
+
+class EfiGuidCommand:
+
+ def create_options(self):
+ ''' standard lldb command help/options parser'''
+ usage = "usage: %prog [options]"
+ description = '''
+ Command that can display all EFI GUID's or give info on a
+ specific GUID's
+ '''
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='guid',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-n',
+ '--new',
+ action='store_true',
+ dest='new',
+ help='Generate a new GUID',
+ default=False)
+
+ self.parser.add_option(
+ '-v',
+ '--verbose',
+ action='store_true',
+ dest='verbose',
+ help='Also display GUID C structure values',
+ default=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ def get_short_help(self):
+ '''standard lldb function method'''
+ return "Display EFI GUID's"
+
+ def get_long_help(self):
+ '''standard lldb function method'''
+ return self.help_string
+
+ def __init__(self, debugger, internal_dict):
+ '''standard lldb function method'''
+ self.create_options()
+ self.help_string = self.parser.format_help()
+
+ def __call__(self, debugger, command, exe_ctx, result):
+ '''standard lldb function method'''
+ # Use the Shell Lexer to properly parse up command options just like a
+ # shell would
+ command_args = shlex.split(command)
+
+ try:
+ (options, args) = self.parser.parse_args(command_args)
+ if len(args) >= 1:
+ # guid { 0x414e6bdd, 0xe47b, 0x47cc,
+ # { 0xb2, 0x44, 0xbb, 0x61, 0x02, 0x0c,0xf5, 0x16 }}
+ # this generates multiple args
+ arg = ' '.join(args)
+ except ValueError:
+ # if you don't handle exceptions, passing an incorrect argument
+ # to the OptionParser will cause LLDB to exit (courtesy of
+ # OptParse dealing with argument errors by throwing SystemExit)
+ result.SetError("option parsing failed")
+ return
+
+ if options.help:
+ self.parser.print_help()
+ return
+
+ if options.new:
+ guid = uuid.uuid4()
+ print(str(guid).upper())
+ print(GuidNames.to_c_guid(guid))
+ return
+
+ if len(args) > 0:
+ if GuidNames.is_guid_str(arg):
+ # guid 05AD34BA-6F02-4214-952E-4DA0398E2BB9
+ key = arg.lower()
+ name = GuidNames.to_name(key)
+ elif GuidNames.is_c_guid(arg):
+ # guid { 0x414e6bdd, 0xe47b, 0x47cc,
+ # { 0xb2, 0x44, 0xbb, 0x61, 0x02, 0x0c,0xf5, 0x16 }}
+ key = GuidNames.from_c_guid(arg)
+ name = GuidNames.to_name(key)
+ else:
+ # guid gEfiDxeServicesTableGuid
+ name = arg
+ try:
+ key = GuidNames.to_guid(name)
+ name = GuidNames.to_name(key)
+ except ValueError:
+ return
+
+ extra = f'{GuidNames.to_c_guid(key)}: ' if options.verbose else ''
+ print(f'{key}: {extra}{name}')
+
+ else:
+ for key, value in GuidNames._dict_.items():
+ if options.verbose:
+ extra = f'{GuidNames.to_c_guid(key)}: '
+ else:
+ extra = ''
+ print(f'{key}: {extra}{value}')
+
+
+class EfiSymbolicateCommand(object):
+ '''Class to abstract an lldb command'''
+
+ def create_options(self):
+ ''' standard lldb command help/options parser'''
+ usage = "usage: %prog [options]"
+ description = '''Command that can load EFI PE/COFF and TE image
+ symbols. If you are having trouble in PEI try adding --pei.
+ '''
+
+ # Pass add_help_option = False, since this keeps the command in line
+ # with lldb commands, and we wire up "help command" to work by
+ # providing the long & short help methods below.
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='efi_symbols',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-a',
+ '--address',
+ type="int",
+ dest='address',
+ help='Load symbols for image at address',
+ default=None)
+
+ self.parser.add_option(
+ '-f',
+ '--frame',
+ action='store_true',
+ dest='frame',
+ help='Load symbols for current stack frame',
+ default=False)
+
+ self.parser.add_option(
+ '-p',
+ '--pc',
+ action='store_true',
+ dest='pc',
+ help='Load symbols for pc',
+ default=False)
+
+ self.parser.add_option(
+ '--pei',
+ action='store_true',
+ dest='pei',
+ help='Load symbols for PEI (searches every 4 bytes)',
+ default=False)
+
+ self.parser.add_option(
+ '-e',
+ '--extended',
+ action='store_true',
+ dest='extended',
+ help='Try to load all symbols based on config tables.',
+ default=False)
+
+ self.parser.add_option(
+ '-r',
+ '--range',
+ type="long",
+ dest='range',
+ help='How far to search backward for start of PE/COFF Image',
+ default=None)
+
+ self.parser.add_option(
+ '-s',
+ '--stride',
+ type="long",
+ dest='stride',
+ help='Boundary to search for PE/COFF header',
+ default=None)
+
+ self.parser.add_option(
+ '-t',
+ '--thread',
+ action='store_true',
+ dest='thread',
+ help='Load symbols for the frames of all threads',
+ default=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ def get_short_help(self):
+ '''standard lldb function method'''
+ return (
+ "Load symbols based on an address that is part of"
+ " a PE/COFF EFI image.")
+
+ def get_long_help(self):
+ '''standard lldb function method'''
+ return self.help_string
+
+ def __init__(self, debugger, unused):
+ '''standard lldb function method'''
+ self.create_options()
+ self.help_string = self.parser.format_help()
+
+ def lldb_print(self, lldb_str):
+ # capture command out like an lldb command
+ self.result.PutCString(lldb_str)
+ # flush the output right away
+ self.result.SetImmediateOutputFile(
+ self.exe_ctx.target.debugger.GetOutputFile())
+
+ def __call__(self, debugger, command, exe_ctx, result):
+ '''standard lldb function method'''
+ # Use the Shell Lexer to properly parse up command options just like a
+ # shell would
+ command_args = shlex.split(command)
+
+ try:
+ (options, _) = self.parser.parse_args(command_args)
+ except ValueError:
+ # if you don't handle exceptions, passing an incorrect argument
+ # to the OptionParser will cause LLDB to exit (courtesy of
+ # OptParse dealing with argument errors by throwing SystemExit)
+ result.SetError("option parsing failed")
+ return
+
+ if options.help:
+ self.parser.print_help()
+ return
+
+ file = LldbFileObject(exe_ctx.process)
+ efi_symbols = EfiSymbols(exe_ctx.target)
+ self.result = result
+ self.exe_ctx = exe_ctx
+
+ if options.pei:
+ # XIP code ends up on a 4 byte boundary.
+ options.stride = 4
+ options.range = 0x100000
+ efi_symbols.configure_search(options.stride, options.range)
+
+ if not options.pc and options.address is None:
+ # default to
+ options.frame = True
+
+ if options.frame:
+ if not exe_ctx.frame.IsValid():
+ result.SetError("invalid frame")
+ return
+
+ threads = exe_ctx.process.threads if options.thread else [
+ exe_ctx.thread]
+
+ for thread in threads:
+ for frame in thread:
+ res = efi_symbols.address_to_symbols(frame.pc)
+ self.lldb_print(res)
+
+ else:
+ if options.address is not None:
+ address = options.address
+ elif options.pc:
+ try:
+ address = exe_ctx.thread.GetSelectedFrame().pc
+ except ValueError:
+ result.SetError("invalid pc")
+ return
+ else:
+ address = 0
+
+ res = efi_symbols.address_to_symbols(address.pc)
+ print(res)
+
+ if options.extended:
+
+ gST = exe_ctx.target.FindFirstGlobalVariable('gST')
+ if gST.error.fail:
+ print('Error: This command requires symbols to be loaded')
+ else:
+ table = EfiConfigurationTable(file, gST.unsigned)
+ for address, _ in table.DebugImageInfo():
+ res = efi_symbols.address_to_symbols(address)
+ self.lldb_print(res)
+
+ # keep trying module file names until we find a GUID xref file
+ for m in exe_ctx.target.modules:
+ if GuidNames.add_build_guid_file(str(m.file)):
+ break
+
+
+def CHAR16_TypeSummary(valobj, internal_dict):
+ '''
+ Display CHAR16 as a String in the debugger.
+ Note: utf-8 is returned as that is the value for the debugger.
+ '''
+ SBError = lldb.SBError()
+ Str = ''
+ if valobj.TypeIsPointerType():
+ if valobj.GetValueAsUnsigned() == 0:
+ return "NULL"
+
+ # CHAR16 * max string size 1024
+ for i in range(1024):
+ Char = valobj.GetPointeeData(i, 1).GetUnsignedInt16(SBError, 0)
+ if SBError.fail or Char == 0:
+ break
+ Str += chr(Char)
+ return 'L"' + Str + '"'
+
+ if valobj.num_children == 0:
+ # CHAR16
+ return "L'" + chr(valobj.unsigned) + "'"
+
+ else:
+ # CHAR16 []
+ for i in range(valobj.num_children):
+ Char = valobj.GetChildAtIndex(i).data.GetUnsignedInt16(SBError, 0)
+ if Char == 0:
+ break
+ Str += chr(Char)
+ return 'L"' + Str + '"'
+
+ return Str
+
+
+def CHAR8_TypeSummary(valobj, internal_dict):
+ '''
+ Display CHAR8 as a String in the debugger.
+ Note: utf-8 is returned as that is the value for the debugger.
+ '''
+ SBError = lldb.SBError()
+ Str = ''
+ if valobj.TypeIsPointerType():
+ if valobj.GetValueAsUnsigned() == 0:
+ return "NULL"
+
+ # CHAR8 * max string size 1024
+ for i in range(1024):
+ Char = valobj.GetPointeeData(i, 1).GetUnsignedInt8(SBError, 0)
+ if SBError.fail or Char == 0:
+ break
+ Str += chr(Char)
+ Str = '"' + Str + '"'
+ return Str
+
+ if valobj.num_children == 0:
+ # CHAR8
+ return "'" + chr(valobj.unsigned) + "'"
+ else:
+ # CHAR8 []
+ for i in range(valobj.num_children):
+ Char = valobj.GetChildAtIndex(i).data.GetUnsignedInt8(SBError, 0)
+ if SBError.fail or Char == 0:
+ break
+ Str += chr(Char)
+ return '"' + Str + '"'
+
+ return Str
+
+
+def EFI_STATUS_TypeSummary(valobj, internal_dict):
+ if valobj.TypeIsPointerType():
+ return ''
+ return str(EfiStatusClass(valobj.unsigned))
+
+
+def EFI_TPL_TypeSummary(valobj, internal_dict):
+ if valobj.TypeIsPointerType():
+ return ''
+ return str(EfiTpl(valobj.unsigned))
+
+
+def EFI_GUID_TypeSummary(valobj, internal_dict):
+ if valobj.TypeIsPointerType():
+ return ''
+ return str(GuidNames(bytes(valobj.data.uint8)))
+
+
+def EFI_BOOT_MODE_TypeSummary(valobj, internal_dict):
+ if valobj.TypeIsPointerType():
+ return ''
+ '''Return #define name for EFI_BOOT_MODE'''
+ return str(EfiBootMode(valobj.unsigned))
+
+
+def lldb_type_formaters(debugger, mod_name):
+ '''Teach lldb about EFI types'''
+
+ category = debugger.GetDefaultCategory()
+ FormatBool = lldb.SBTypeFormat(lldb.eFormatBoolean)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("BOOLEAN"), FormatBool)
+
+ FormatHex = lldb.SBTypeFormat(lldb.eFormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("UINT64"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("INT64"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("UINT32"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("INT32"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("UINT16"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("INT16"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("UINT8"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("INT8"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("UINTN"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("INTN"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("CHAR8"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("CHAR16"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier(
+ "EFI_PHYSICAL_ADDRESS"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier(
+ "PHYSICAL_ADDRESS"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier("EFI_LBA"), FormatHex)
+ category.AddTypeFormat(
+ lldb.SBTypeNameSpecifier("EFI_BOOT_MODE"), FormatHex)
+ category.AddTypeFormat(lldb.SBTypeNameSpecifier(
+ "EFI_FV_FILETYPE"), FormatHex)
+
+ #
+ # Smart type printing for EFI
+ #
+
+ debugger.HandleCommand(
+ f'type summary add GUID - -python-function '
+ f'{mod_name}.EFI_GUID_TypeSummary')
+ debugger.HandleCommand(
+ f'type summary add EFI_GUID --python-function '
+ f'{mod_name}.EFI_GUID_TypeSummary')
+ debugger.HandleCommand(
+ f'type summary add EFI_STATUS --python-function '
+ f'{mod_name}.EFI_STATUS_TypeSummary')
+ debugger.HandleCommand(
+ f'type summary add EFI_TPL - -python-function '
+ f'{mod_name}.EFI_TPL_TypeSummary')
+ debugger.HandleCommand(
+ f'type summary add EFI_BOOT_MODE --python-function '
+ f'{mod_name}.EFI_BOOT_MODE_TypeSummary')
+
+ debugger.HandleCommand(
+ f'type summary add CHAR16 --python-function '
+ f'{mod_name}.CHAR16_TypeSummary')
+
+ # W605 this is the correct escape sequence for the lldb command
+ debugger.HandleCommand(
+ f'type summary add --regex "CHAR16 \[[0-9]+\]" ' # noqa: W605
+ f'--python-function {mod_name}.CHAR16_TypeSummary')
+
+ debugger.HandleCommand(
+ f'type summary add CHAR8 --python-function '
+ f'{mod_name}.CHAR8_TypeSummary')
+
+ # W605 this is the correct escape sequence for the lldb command
+ debugger.HandleCommand(
+ f'type summary add --regex "CHAR8 \[[0-9]+\]" ' # noqa: W605
+ f'--python-function {mod_name}.CHAR8_TypeSummary')
+
+
+class LldbWorkaround:
+ needed = True
+
+ @classmethod
+ def activate(cls):
+ if cls.needed:
+ lldb.debugger.HandleCommand("process handle SIGALRM -n false")
+ cls.needed = False
+
+
+def LoadEmulatorEfiSymbols(frame, bp_loc, internal_dict):
+ #
+ # This is an lldb breakpoint script, and assumes the breakpoint is on a
+ # function with the same prototype as SecGdbScriptBreak(). The
+ # argument names are important as lldb looks them up.
+ #
+ # VOID
+ # SecGdbScriptBreak (
+ # char *FileName,
+ # int FileNameLength,
+ # long unsigned int LoadAddress,
+ # int AddSymbolFlag
+ # )
+ # {
+ # return;
+ # }
+ #
+ # When the emulator loads a PE/COFF image, it calls the stub function with
+ # the filename of the symbol file, the length of the FileName, the
+ # load address and a flag to indicate if this is a load or unload operation
+ #
+ LldbWorkaround().activate()
+
+ symbols = EfiSymbols(frame.thread.process.target)
+ LoadAddress = frame.FindVariable("LoadAddress").unsigned
+ if frame.FindVariable("AddSymbolFlag").unsigned == 1:
+ res = symbols.address_to_symbols(LoadAddress)
+ else:
+ res = symbols.unload_symbols(LoadAddress)
+ print(res)
+
+ # make breakpoint command continue
+ return False
+
+
+def __lldb_init_module(debugger, internal_dict):
+ '''
+ This initializer is being run from LLDB in the embedded command interpreter
+ '''
+
+ mod_name = Path(__file__).stem
+ lldb_type_formaters(debugger, mod_name)
+
+ # Add any commands contained in this module to LLDB
+ debugger.HandleCommand(
+ f'command script add -c {mod_name}.EfiSymbolicateCommand efi_symbols')
+ debugger.HandleCommand(
+ f'command script add -c {mod_name}.EfiGuidCommand guid')
+ debugger.HandleCommand(
+ f'command script add -c {mod_name}.EfiTableCommand table')
+ debugger.HandleCommand(
+ f'command script add -c {mod_name}.EfiHobCommand hob')
+ debugger.HandleCommand(
+ f'command script add -c {mod_name}.EfiDevicePathCommand devicepath')
+
+ print('EFI specific commands have been installed.')
+
+ # patch the ctypes c_void_p values if the debuggers OS and EFI have
+ # different ideas on the size of the debug.
+ try:
+ patch_ctypes(debugger.GetSelectedTarget().addr_size)
+ except ValueError:
+ # incase the script is imported and the debugger has not target
+ # defaults to sizeof(UINTN) == sizeof(UINT64)
+ patch_ctypes()
+
+ try:
+ target = debugger.GetSelectedTarget()
+ if target.FindFunctions('SecGdbScriptBreak').symbols:
+ breakpoint = target.BreakpointCreateByName('SecGdbScriptBreak')
+ # Set the emulator breakpoints, if we are in the emulator
+ cmd = 'breakpoint command add -s python -F '
+ cmd += f'efi_lldb.LoadEmulatorEfiSymbols {breakpoint.GetID()}'
+ debugger.HandleCommand(cmd)
+ print('Type r to run emulator.')
+ else:
+ raise ValueError("No Emulator Symbols")
+
+ except ValueError:
+ # default action when the script is imported
+ debugger.HandleCommand("efi_symbols --frame --extended")
+ debugger.HandleCommand("register read")
+ debugger.HandleCommand("bt all")
+
+
+if __name__ == '__main__':
+ pass
--
2.34.1


[PATCH v2 2/3] BaseTools: Scripts/efi_gdb.py: Add gdb EFI commands and pretty Print

Rebecca Cran <quic_rcran@...>
 

https://bugzilla.tianocore.org/show_bug.cgi?id=3500

Use efi_debugging.py Python Classes to implement EFI gdb commands:
(gdb) help efi
Commands for debugging EFI. efi <cmd>

List of efi subcommands:

efi devicepath -- Display an EFI device path.
efi guid -- Display info about EFI GUID's.
efi hob -- Dump EFI HOBs. Type 'hob -h' for more info.
efi symbols -- Load Symbols for EFI. Type 'efi_symbols -h' for more info.
efi table -- Dump EFI System Tables. Type 'table -h' for more info.

This module is coded against a generic gdb remote serial stub. It should
work with QEMU, JTAG debugger, or a generic EFI gdb remote serial stub.
No modifications of EFI is required to load symbols.

Example usage:
OvmfPkg/build.sh qemu -gdb tcp::9000
gdb -ex "target remote localhost:9000" -ex "source efi_gdb.py"

Cc: Leif Lindholm <quic_llindhol@...>
Cc: Michael D Kinney <michael.d.kinney@...>
Cc: Hao A Wu <hao.a.wu@...>
Cc: Bob Feng <bob.c.feng@...>
Cc: Liming Gao <gaoliming@...>
Cc: Yuwei Chen <yuwei.chen@...>
Signed-off-by: Rebecca Cran <quic_rcran@...>
---
BaseTools/Scripts/efi_gdb.py | 918 ++++++++++++++++++++
1 file changed, 918 insertions(+)

diff --git a/BaseTools/Scripts/efi_gdb.py b/BaseTools/Scripts/efi_gdb.py
new file mode 100755
index 000000000000..e9bae8e9b913
--- /dev/null
+++ b/BaseTools/Scripts/efi_gdb.py
@@ -0,0 +1,918 @@
+#!/usr/bin/python3
+'''
+Copyright 2021 (c) Apple Inc. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+EFI gdb commands based on efi_debugging classes.
+
+Example usage:
+OvmfPkg/build.sh qemu -gdb tcp::9000
+gdb -ex "target remote localhost:9000" -ex "source efi_gdb.py"
+
+(gdb) help efi
+Commands for debugging EFI. efi <cmd>
+
+List of efi subcommands:
+
+efi devicepath -- Display an EFI device path.
+efi guid -- Display info about EFI GUID's.
+efi hob -- Dump EFI HOBs. Type 'hob -h' for more info.
+efi symbols -- Load Symbols for EFI. Type 'efi_symbols -h' for more info.
+efi table -- Dump EFI System Tables. Type 'table -h' for more info.
+
+This module is coded against a generic gdb remote serial stub. It should work
+with QEMU, JTAG debugger, or a generic EFI gdb remote serial stub.
+
+If you are debugging with QEMU or a JTAG hardware debugger you can insert
+a CpuDeadLoop(); in your code, attach with gdb, and then `p Index=1` to
+step past. If you have a debug stub in EFI you can use CpuBreakpoint();.
+'''
+
+from gdb.printing import RegexpCollectionPrettyPrinter
+from gdb.printing import register_pretty_printer
+import gdb
+import os
+import sys
+import uuid
+import optparse
+import shlex
+
+# gdb will not import from the same path as this script.
+# so lets fix that for gdb...
+sys.path.append(os.path.dirname(os.path.abspath(__file__)))
+
+from efi_debugging import PeTeImage, patch_ctypes # noqa: E402
+from efi_debugging import EfiHob, GuidNames, EfiStatusClass # noqa: E402
+from efi_debugging import EfiBootMode, EfiDevicePath # noqa: E402
+from efi_debugging import EfiConfigurationTable, EfiTpl # noqa: E402
+
+
+class GdbFileObject(object):
+ '''Provide a file like object required by efi_debugging'''
+
+ def __init__(self):
+ self.inferior = gdb.selected_inferior()
+ self.offset = 0
+
+ def tell(self):
+ return self.offset
+
+ def read(self, size=-1):
+ if size == -1:
+ # arbitrary default size
+ size = 0x1000000
+
+ try:
+ data = self.inferior.read_memory(self.offset, size)
+ except MemoryError:
+ data = bytearray(size)
+ assert False
+ if len(data) != size:
+ raise MemoryError(
+ f'gdb could not read memory 0x{size:x}'
+ + f' bytes from 0x{self.offset:08x}')
+ else:
+ # convert memoryview object to a bytestring.
+ return data.tobytes()
+
+ def readable(self):
+ return True
+
+ def seek(self, offset, whence=0):
+ if whence == 0:
+ self.offset = offset
+ elif whence == 1:
+ self.offset += offset
+ else:
+ # whence == 2 is seek from end
+ raise NotImplementedError
+
+ def seekable(self):
+ return True
+
+ def write(self, data):
+ self.inferior.write_memory(self.offset, data)
+ return len(data)
+
+ def writable(self):
+ return True
+
+ def truncate(self, size=None):
+ raise NotImplementedError
+
+ def flush(self):
+ raise NotImplementedError
+
+ def fileno(self):
+ raise NotImplementedError
+
+
+class EfiSymbols:
+ """Class to manage EFI Symbols"""
+
+ loaded = {}
+ stride = None
+ range = None
+ verbose = False
+
+ def __init__(self, file=None):
+ EfiSymbols.file = file if file else GdbFileObject()
+
+ @ classmethod
+ def __str__(cls):
+ return ''.join(f'{value}\n' for value in cls.loaded.values())
+
+ @ classmethod
+ def configure_search(cls, stride, range=None, verbose=False):
+ cls.stride = stride
+ cls.range = range
+ cls.verbose = verbose
+
+ @ classmethod
+ def clear(cls):
+ cls.loaded = {}
+
+ @ classmethod
+ def add_symbols_for_pecoff(cls, pecoff):
+ '''Tell lldb the location of the .text and .data sections.'''
+
+ if pecoff.TextAddress in cls.loaded:
+ return 'Already Loaded: '
+ try:
+ res = 'Loading Symbols Failed:'
+ res = gdb.execute('add-symbol-file ' + pecoff.CodeViewPdb +
+ ' ' + hex(pecoff.TextAddress) +
+ ' -s .data ' + hex(pecoff.DataAddress),
+ False, True)
+
+ cls.loaded[pecoff.TextAddress] = pecoff
+ if cls.verbose:
+ print(f'\n{res:s}\n')
+ return ''
+ except gdb.error:
+ return res
+
+ @ classmethod
+ def address_to_symbols(cls, address, reprobe=False):
+ '''
+ Given an address search backwards for a PE/COFF (or TE) header
+ and load symbols. Return a status string.
+ '''
+ if not isinstance(address, int):
+ address = int(address)
+
+ pecoff = cls.address_in_loaded_pecoff(address)
+ if not reprobe and pecoff is not None:
+ # skip the probe of the remote
+ return f'{pecoff} is already loaded'
+
+ pecoff = PeTeImage(cls.file, None)
+ if pecoff.pcToPeCoff(address, cls.stride, cls.range):
+ res = cls.add_symbols_for_pecoff(pecoff)
+ return f'{res}{pecoff}'
+ else:
+ return f'0x{address:08x} not in a PE/COFF (or TE) image'
+
+ @ classmethod
+ def address_in_loaded_pecoff(cls, address):
+ if not isinstance(address, int):
+ address = int(address)
+
+ for value in cls.loaded.values():
+ if (address >= value.LoadAddress and
+ address <= value.EndLoadAddress):
+ return value
+
+ return None
+
+ @ classmethod
+ def unload_symbols(cls, address):
+ if not isinstance(address, int):
+ address = int(address)
+
+ pecoff = cls.address_in_loaded_pecoff(address)
+ try:
+ res = 'Unloading Symbols Failed:'
+ res = gdb.execute(
+ f'remove-symbol-file -a {hex(pecoff.TextAddress):s}',
+ False, True)
+ del cls.loaded[pecoff.LoadAddress]
+ return res
+ except gdb.error:
+ return res
+
+
+class CHAR16_PrettyPrinter(object):
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ if int(self.val) < 0x20:
+ return f"L'\\x{int(self.val):02x}'"
+ else:
+ return f"L'{chr(self.val):s}'"
+
+
+class EFI_TPL_PrettyPrinter(object):
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ return str(EfiTpl(int(self.val)))
+
+
+class EFI_STATUS_PrettyPrinter(object):
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ status = int(self.val)
+ return f'{str(EfiStatusClass(status)):s} (0x{status:08x})'
+
+
+class EFI_BOOT_MODE_PrettyPrinter(object):
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ return str(EfiBootMode(int(self.val)))
+
+
+class EFI_GUID_PrettyPrinter(object):
+ """Print 'EFI_GUID' as 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'"""
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ # if we could get a byte like object of *(unsigned char (*)[16])
+ # then we could just use uuid.UUID() to convert
+ Data1 = int(self.val['Data1'])
+ Data2 = int(self.val['Data2'])
+ Data3 = int(self.val['Data3'])
+ Data4 = self.val['Data4']
+ guid = f'{Data1:08X}-{Data2:04X}-'
+ guid += f'{Data3:04X}-'
+ guid += f'{int(Data4[0]):02X}{int(Data4[1]):02X}-'
+ guid += f'{int(Data4[2]):02X}{int(Data4[3]):02X}'
+ guid += f'{int(Data4[4]):02X}{int(Data4[5]):02X}'
+ guid += f'{int(Data4[6]):02X}{int(Data4[7]):02X}'
+ return str(GuidNames(guid))
+
+
+def build_pretty_printer():
+ # Turn off via: disable pretty-printer global EFI
+ pp = RegexpCollectionPrettyPrinter("EFI")
+ # you can also tell gdb `x/sh <address>` to print CHAR16 string
+ pp.add_printer('CHAR16', '^CHAR16$', CHAR16_PrettyPrinter)
+ pp.add_printer('EFI_BOOT_MODE', '^EFI_BOOT_MODE$',
+ EFI_BOOT_MODE_PrettyPrinter)
+ pp.add_printer('EFI_GUID', '^EFI_GUID$', EFI_GUID_PrettyPrinter)
+ pp.add_printer('EFI_STATUS', '^EFI_STATUS$', EFI_STATUS_PrettyPrinter)
+ pp.add_printer('EFI_TPL', '^EFI_TPL$', EFI_TPL_PrettyPrinter)
+ return pp
+
+
+class EfiDevicePathCmd (gdb.Command):
+ """Display an EFI device path. Type 'efi devicepath -h' for more info"""
+
+ def __init__(self):
+ super(EfiDevicePathCmd, self).__init__(
+ "efi devicepath", gdb.COMMAND_NONE)
+
+ self.file = GdbFileObject()
+
+ def create_options(self, arg, from_tty):
+ usage = "usage: %prog [options] [arg]"
+ description = (
+ "Command that can load EFI PE/COFF and TE image symbols. ")
+
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='efi devicepath',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-v',
+ '--verbose',
+ action='store_true',
+ dest='verbose',
+ help='hex dump extra data',
+ default=False)
+
+ self.parser.add_option(
+ '-n',
+ '--node',
+ action='store_true',
+ dest='node',
+ help='dump a single device path node',
+ default=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ return self.parser.parse_args(shlex.split(arg))
+
+ def invoke(self, arg, from_tty):
+ '''gdb command to dump EFI device paths'''
+
+ try:
+ (options, _) = self.create_options(arg, from_tty)
+ if options.help:
+ self.parser.print_help()
+ return
+
+ dev_addr = int(gdb.parse_and_eval(arg))
+ except ValueError:
+ print("Invalid argument!")
+ return
+
+ if options.node:
+ print(EfiDevicePath(
+ self.file).device_path_node_str(dev_addr,
+ options.verbose))
+ else:
+ device_path = EfiDevicePath(self.file, dev_addr, options.verbose)
+ if device_path.valid():
+ print(device_path)
+
+
+class EfiGuidCmd (gdb.Command):
+ """Display info about EFI GUID's. Type 'efi guid -h' for more info"""
+
+ def __init__(self):
+ super(EfiGuidCmd, self).__init__("efi guid",
+ gdb.COMMAND_NONE,
+ gdb.COMPLETE_EXPRESSION)
+ self.file = GdbFileObject()
+
+ def create_options(self, arg, from_tty):
+ usage = "usage: %prog [options] [arg]"
+ description = (
+ "Show EFI_GUID values and the C name of the EFI_GUID variables"
+ "in the C code. If symbols are loaded the Guid.xref file"
+ "can be processed and the complete GUID database can be shown."
+ "This command also suports generating new GUID's, and showing"
+ "the value used to initialize the C variable.")
+
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='efi guid',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-n',
+ '--new',
+ action='store_true',
+ dest='new',
+ help='Generate a new GUID',
+ default=False)
+
+ self.parser.add_option(
+ '-v',
+ '--verbose',
+ action='store_true',
+ dest='verbose',
+ help='Also display GUID C structure values',
+ default=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ return self.parser.parse_args(shlex.split(arg))
+
+ def invoke(self, arg, from_tty):
+ '''gdb command to dump EFI System Tables'''
+
+ try:
+ (options, args) = self.create_options(arg, from_tty)
+ if options.help:
+ self.parser.print_help()
+ return
+ if len(args) >= 1:
+ # guid { 0x414e6bdd, 0xe47b, 0x47cc,
+ # { 0xb2, 0x44, 0xbb, 0x61, 0x02, 0x0c,0xf5, 0x16 }}
+ # this generates multiple args
+ guid = ' '.join(args)
+ except ValueError:
+ print('bad arguments!')
+ return
+
+ if options.new:
+ guid = uuid.uuid4()
+ print(str(guid).upper())
+ print(GuidNames.to_c_guid(guid))
+ return
+
+ if len(args) > 0:
+ if GuidNames.is_guid_str(arg):
+ # guid 05AD34BA-6F02-4214-952E-4DA0398E2BB9
+ key = guid.upper()
+ name = GuidNames.to_name(key)
+ elif GuidNames.is_c_guid(arg):
+ # guid { 0x414e6bdd, 0xe47b, 0x47cc,
+ # { 0xb2, 0x44, 0xbb, 0x61, 0x02, 0x0c,0xf5, 0x16 }}
+ key = GuidNames.from_c_guid(arg)
+ name = GuidNames.to_name(key)
+ else:
+ # guid gEfiDxeServicesTableGuid
+ name = guid
+ try:
+ key = GuidNames.to_guid(name)
+ name = GuidNames.to_name(key)
+ except ValueError:
+ return
+
+ extra = f'{GuidNames.to_c_guid(key)}: ' if options.verbose else ''
+ print(f'{key}: {extra}{name}')
+
+ else:
+ for key, value in GuidNames._dict_.items():
+ if options.verbose:
+ extra = f'{GuidNames.to_c_guid(key)}: '
+ else:
+ extra = ''
+ print(f'{key}: {extra}{value}')
+
+
+class EfiHobCmd (gdb.Command):
+ """Dump EFI HOBs. Type 'hob -h' for more info."""
+
+ def __init__(self):
+ super(EfiHobCmd, self).__init__("efi hob", gdb.COMMAND_NONE)
+ self.file = GdbFileObject()
+
+ def create_options(self, arg, from_tty):
+ usage = "usage: %prog [options] [arg]"
+ description = (
+ "Command that can load EFI PE/COFF and TE image symbols. ")
+
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='efi hob',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-a',
+ '--address',
+ type="int",
+ dest='address',
+ help='Parse HOBs from address',
+ default=None)
+
+ self.parser.add_option(
+ '-t',
+ '--type',
+ type="int",
+ dest='type',
+ help='Only dump HOBS of his type',
+ default=None)
+
+ self.parser.add_option(
+ '-v',
+ '--verbose',
+ action='store_true',
+ dest='verbose',
+ help='hex dump extra data',
+ default=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ return self.parser.parse_args(shlex.split(arg))
+
+ def invoke(self, arg, from_tty):
+ '''gdb command to dump EFI System Tables'''
+
+ try:
+ (options, _) = self.create_options(arg, from_tty)
+ if options.help:
+ self.parser.print_help()
+ return
+ except ValueError:
+ print('bad arguments!')
+ return
+
+ if options.address:
+ try:
+ value = gdb.parse_and_eval(options.address)
+ address = int(value)
+ except ValueError:
+ address = None
+ else:
+ address = None
+
+ hob = EfiHob(self.file,
+ address,
+ options.verbose).get_hob_by_type(options.type)
+ print(hob)
+
+
+class EfiTablesCmd (gdb.Command):
+ """Dump EFI System Tables. Type 'table -h' for more info."""
+
+ def __init__(self):
+ super(EfiTablesCmd, self).__init__("efi table", gdb.COMMAND_NONE)
+
+ self.file = GdbFileObject()
+
+ def create_options(self, arg, from_tty):
+ usage = "usage: %prog [options] [arg]"
+ description = "Dump EFI System Tables. Requires symbols to be loaded"
+
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='efi table',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ return self.parser.parse_args(shlex.split(arg))
+
+ def invoke(self, arg, from_tty):
+ '''gdb command to dump EFI System Tables'''
+
+ try:
+ (options, _) = self.create_options(arg, from_tty)
+ if options.help:
+ self.parser.print_help()
+ return
+ except ValueError:
+ print('bad arguments!')
+ return
+
+ gST = gdb.lookup_global_symbol('gST')
+ if gST is None:
+ print('Error: This command requires symbols for gST to be loaded')
+ return
+
+ table = EfiConfigurationTable(
+ self.file, int(gST.value(gdb.selected_frame())))
+ if table:
+ print(table, '\n')
+
+
+class EfiSymbolsCmd (gdb.Command):
+ """Load Symbols for EFI. Type 'efi symbols -h' for more info."""
+
+ def __init__(self):
+ super(EfiSymbolsCmd, self).__init__("efi symbols",
+ gdb.COMMAND_NONE,
+ gdb.COMPLETE_EXPRESSION)
+ self.file = GdbFileObject()
+ self.gST = None
+ self.efi_symbols = EfiSymbols(self.file)
+
+ def create_options(self, arg, from_tty):
+ usage = "usage: %prog [options]"
+ description = (
+ "Command that can load EFI PE/COFF and TE image symbols. "
+ "If you are having trouble in PEI try adding --pei. "
+ "Given any address search backward for the PE/COFF (or TE header) "
+ "and then parse the PE/COFF image to get debug info. "
+ "The address can come from the current pc, pc values in the "
+ "frame, or an address provided to the command"
+ "")
+
+ self.parser = optparse.OptionParser(
+ description=description,
+ prog='efi symbols',
+ usage=usage,
+ add_help_option=False)
+
+ self.parser.add_option(
+ '-a',
+ '--address',
+ type="str",
+ dest='address',
+ help='Load symbols for image that contains address',
+ default=None)
+
+ self.parser.add_option(
+ '-c',
+ '--clear',
+ action='store_true',
+ dest='clear',
+ help='Clear the cache of loaded images',
+ default=False)
+
+ self.parser.add_option(
+ '-f',
+ '--frame',
+ action='store_true',
+ dest='frame',
+ help='Load symbols for current stack frame',
+ default=False)
+
+ self.parser.add_option(
+ '-p',
+ '--pc',
+ action='store_true',
+ dest='pc',
+ help='Load symbols for pc',
+ default=False)
+
+ self.parser.add_option(
+ '--pei',
+ action='store_true',
+ dest='pei',
+ help='Load symbols for PEI (searches every 4 bytes)',
+ default=False)
+
+ self.parser.add_option(
+ '-e',
+ '--extended',
+ action='store_true',
+ dest='extended',
+ help='Try to load all symbols based on config tables',
+ default=False)
+
+ self.parser.add_option(
+ '-r',
+ '--range',
+ type="long",
+ dest='range',
+ help='How far to search backward for start of PE/COFF Image',
+ default=None)
+
+ self.parser.add_option(
+ '-s',
+ '--stride',
+ type="long",
+ dest='stride',
+ help='Boundary to search for PE/COFF header',
+ default=None)
+
+ self.parser.add_option(
+ '-t',
+ '--thread',
+ action='store_true',
+ dest='thread',
+ help='Load symbols for the frames of all threads',
+ default=False)
+
+ self.parser.add_option(
+ '-v',
+ '--verbose',
+ action='store_true',
+ dest='verbose',
+ help='Show more info on symbols loading in gdb',
+ default=False)
+
+ self.parser.add_option(
+ '-h',
+ '--help',
+ action='store_true',
+ dest='help',
+ help='Show help for the command',
+ default=False)
+
+ return self.parser.parse_args(shlex.split(arg))
+
+ def save_user_state(self):
+ self.pagination = gdb.parameter("pagination")
+ if self.pagination:
+ gdb.execute("set pagination off")
+
+ self.user_selected_thread = gdb.selected_thread()
+ self.user_selected_frame = gdb.selected_frame()
+
+ def restore_user_state(self):
+ self.user_selected_thread.switch()
+ self.user_selected_frame.select()
+
+ if self.pagination:
+ gdb.execute("set pagination on")
+
+ def canonical_address(self, address):
+ '''
+ Scrub out 48-bit non canonical addresses
+ Raw frames in gdb can have some funky values
+ '''
+
+ # Skip lowest 256 bytes to avoid interrupt frames
+ if address > 0xFF and address < 0x00007FFFFFFFFFFF:
+ return True
+ if address >= 0xFFFF800000000000:
+ return True
+
+ return False
+
+ def pc_set_for_frames(self):
+ '''Return a set for the PC's in the current frame'''
+ pc_list = []
+ frame = gdb.newest_frame()
+ while frame:
+ pc = int(frame.read_register('pc'))
+ if self.canonical_address(pc):
+ pc_list.append(pc)
+ frame = frame.older()
+
+ return set(pc_list)
+
+ def invoke(self, arg, from_tty):
+ '''gdb command to symbolicate all the frames from all the threads'''
+
+ try:
+ (options, _) = self.create_options(arg, from_tty)
+ if options.help:
+ self.parser.print_help()
+ return
+ except ValueError:
+ print('bad arguments!')
+ return
+
+ self.dont_repeat()
+
+ self.save_user_state()
+
+ if options.clear:
+ self.efi_symbols.clear()
+ return
+
+ if options.pei:
+ # XIP code can be 4 byte aligned in the FV
+ options.stride = 4
+ options.range = 0x100000
+ self.efi_symbols.configure_search(options.stride,
+ options.range,
+ options.verbose)
+
+ if options.thread:
+ thread_list = gdb.selected_inferior().threads()
+ else:
+ thread_list = (gdb.selected_thread(),)
+
+ address = None
+ if options.address:
+ value = gdb.parse_and_eval(options.address)
+ address = int(value)
+ elif options.pc:
+ address = gdb.selected_frame().pc()
+
+ if address:
+ res = self.efi_symbols.address_to_symbols(address)
+ print(res)
+ else:
+
+ for thread in thread_list:
+ thread.switch()
+
+ # You can not iterate over frames as you load symbols. Loading
+ # symbols changes the frames gdb can see due to inlining and
+ # boom. So we loop adding symbols for the current frame, and
+ # we test to see if new frames have shown up. If new frames
+ # show up we process those new frames. Thus 1st pass is the
+ # raw frame, and other passes are only new PC values.
+ NewPcSet = self.pc_set_for_frames()
+ while NewPcSet:
+ PcSet = self.pc_set_for_frames()
+ for pc in NewPcSet:
+ res = self.efi_symbols.address_to_symbols(pc)
+ print(res)
+
+ NewPcSet = PcSet.symmetric_difference(
+ self.pc_set_for_frames())
+
+ # find the EFI System tables the 1st time
+ if self.gST is None:
+ gST = gdb.lookup_global_symbol('gST')
+ if gST is not None:
+ self.gST = int(gST.value(gdb.selected_frame()))
+ table = EfiConfigurationTable(self.file, self.gST)
+ else:
+ table = None
+ else:
+ table = EfiConfigurationTable(self.file, self.gST)
+
+ if options.extended and table:
+ # load symbols from EFI System Table entry
+ for address, _ in table.DebugImageInfo():
+ res = self.efi_symbols.address_to_symbols(address)
+ print(res)
+
+ # sync up the GUID database from the build output
+ for m in gdb.objfiles():
+ if GuidNames.add_build_guid_file(str(m.filename)):
+ break
+
+ self.restore_user_state()
+
+
+class EfiCmd (gdb.Command):
+ """Commands for debugging EFI. efi <cmd>"""
+
+ def __init__(self):
+ super(EfiCmd, self).__init__("efi",
+ gdb.COMMAND_NONE,
+ gdb.COMPLETE_NONE,
+ True)
+
+ def invoke(self, arg, from_tty):
+ '''default to loading symbols'''
+ if '-h' in arg or '--help' in arg:
+ gdb.execute('help efi')
+ else:
+ # default to loading all symbols
+ gdb.execute('efi symbols --extended')
+
+
+class LoadEmulatorEfiSymbols(gdb.Breakpoint):
+ '''
+ breakpoint for EmulatorPkg to load symbols
+ Note: make sure SecGdbScriptBreak is not optimized away!
+ Also turn off the dlopen() flow like on macOS.
+ '''
+ def stop(self):
+ symbols = EfiSymbols()
+ # Emulator adds SizeOfHeaders so we need file alignment to search
+ symbols.configure_search(0x20)
+
+ frame = gdb.newest_frame()
+
+ try:
+ # gdb was looking at spill address, pre spill :(
+ LoadAddress = frame.read_register('rdx')
+ AddSymbolFlag = frame.read_register('rcx')
+ except gdb.error:
+ LoadAddress = frame.read_var('LoadAddress')
+ AddSymbolFlag = frame.read_var('AddSymbolFlag')
+
+ if AddSymbolFlag == 1:
+ res = symbols.address_to_symbols(LoadAddress)
+ else:
+ res = symbols.unload_symbols(LoadAddress)
+ print(res)
+
+ # keep running
+ return False
+
+
+# Get python backtraces to debug errors in this script
+gdb.execute("set python print-stack full")
+
+# tell efi_debugging how to walk data structures with pointers
+try:
+ pointer_width = gdb.lookup_type('int').pointer().sizeof
+except ValueError:
+ pointer_width = 8
+patch_ctypes(pointer_width)
+
+register_pretty_printer(None, build_pretty_printer(), replace=True)
+
+# gdb commands that we are adding
+# add `efi` prefix gdb command
+EfiCmd()
+
+# subcommands for `efi`
+EfiSymbolsCmd()
+EfiTablesCmd()
+EfiHobCmd()
+EfiDevicePathCmd()
+EfiGuidCmd()
+
+#
+bp = LoadEmulatorEfiSymbols('SecGdbScriptBreak', internal=True)
+if bp.pending:
+ try:
+ gdb.selected_frame()
+ # Not the emulator so do this when you attach
+ gdb.execute('efi symbols --frame --extended', True)
+ gdb.execute('bt')
+ # If you want to skip the above commands comment them out
+ pass
+ except gdb.error:
+ # If you load the script and there is no target ignore the error.
+ pass
+else:
+ # start the emulator
+ gdb.execute('run')
--
2.34.1


[PATCH v2 1/3] BaseTools: efi_debugging.py: Add debugger agnostic dbg Python Classes

Rebecca Cran <quic_rcran@...>
 

Add Scripts/efi_debugging.py to provide debugger agnostic debugging
utility Python classes.

Cc: Leif Lindholm <quic_llindhol@...>
Cc: Michael D Kinney <michael.d.kinney@...>
Cc: Hao A Wu <hao.a.wu@...>
Cc: Bob Feng <bob.c.feng@...>
Cc: Liming Gao <gaoliming@...>
Cc: Yuwei Chen <yuwei.chen@...>
Signed-off-by: Rebecca Cran <quic_rcran@...>
---
BaseTools/Scripts/efi_debugging.py | 2185 ++++++++++++++++++++
1 file changed, 2185 insertions(+)

diff --git a/BaseTools/Scripts/efi_debugging.py b/BaseTools/Scripts/efi_debugging.py
new file mode 100755
index 000000000000..af975f4e6ceb
--- /dev/null
+++ b/BaseTools/Scripts/efi_debugging.py
@@ -0,0 +1,2185 @@
+#!/usr/bin/python3
+'''
+Copyright (c) Apple Inc. 2021
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+Class that abstracts PE/COFF debug info parsing via a Python file like
+object. You can port this code into an arbitrary debugger by invoking
+the classes and passing in a file like object that abstracts the debugger
+reading memory.
+
+If you run this file directly it will parse the passed in PE/COFF files
+for debug info:
+python3 ./efi_pefcoff.py DxeCore.efi
+IA32`<path...>/DxeCore.dll load = 0x00000000
+EntryPoint = 0x000030d2 TextAddress = 0x00000240 DataAddress = 0x000042c0
+.text 0x00000240 (0x04080) flags:0x60000020
+.data 0x000042C0 (0x001C0) flags:0xC0000040
+.reloc 0x00004480 (0x00240) flags:0x42000040
+
+Note: PeCoffClass uses virtual addresses and not file offsets.
+ It needs to work when images are loaded into memory.
+ as long as virtual address map to file addresses this
+ code can process binary files.
+
+Note: This file can also contain generic worker functions (like GuidNames)
+ that abstract debugger agnostic services to the debugger.
+
+This file should never import debugger specific modules.
+'''
+
+import sys
+import os
+import uuid
+import struct
+import re
+from ctypes import c_char, c_uint8, c_uint16, c_uint32, c_uint64, c_void_p
+from ctypes import ARRAY, sizeof
+from ctypes import Structure, LittleEndianStructure
+
+#
+# The empty LittleEndianStructure must have _fields_ assigned prior to use or
+# sizeof(). Anything that is size UINTN may need to get adjusted.
+#
+# The issue is ctypes matches our local machine, not the machine we are
+# trying to debug. Call patch_ctypes() passing in the byte width from the
+# debugger python to make sure you are in sync.
+#
+# Splitting out the _field_ from the Structure (LittleEndianStructure) class
+# allows it to be patched.
+#
+
+
+class EFI_LOADED_IMAGE_PROTOCOL(LittleEndianStructure):
+ pass
+
+
+EFI_LOADED_IMAGE_PROTOCOL_fields_ = [
+ ('Revision', c_uint32),
+ ('ParentHandle', c_void_p),
+ ('SystemTable', c_void_p),
+ ('DeviceHandle', c_void_p),
+ ('FilePath', c_void_p),
+ ('Reserved', c_void_p),
+ ('LoadOptionsSize', c_uint32),
+ ('LoadOptions', c_void_p),
+ ('ImageBase', c_void_p),
+ ('ImageSize', c_uint64),
+ ('ImageCodeType', c_uint32),
+ ('ImageDataType', c_uint32),
+ ('Unload', c_void_p),
+]
+
+
+class EFI_GUID(LittleEndianStructure):
+ _fields_ = [
+ ('Data1', c_uint32),
+ ('Data2', c_uint16),
+ ('Data3', c_uint16),
+ ('Data4', ARRAY(c_uint8, 8))
+ ]
+
+
+class EFI_SYSTEM_TABLE_POINTER(LittleEndianStructure):
+ _fields_ = [
+ ('Signature', c_uint64),
+ ('EfiSystemTableBase', c_uint64),
+ ('Crc32', c_uint32)
+ ]
+
+
+class EFI_DEBUG_IMAGE_INFO_NORMAL(LittleEndianStructure):
+ pass
+
+
+EFI_DEBUG_IMAGE_INFO_NORMAL_fields_ = [
+ ('ImageInfoType', c_uint32),
+ ('LoadedImageProtocolInstance', c_void_p),
+ ('ImageHandle', c_void_p)
+]
+
+
+class EFI_DEBUG_IMAGE_INFO(LittleEndianStructure):
+ pass
+
+
+EFI_DEBUG_IMAGE_INFO_fields_ = [
+ ('NormalImage', c_void_p),
+]
+
+
+class EFI_DEBUG_IMAGE_INFO_TABLE_HEADER(LittleEndianStructure):
+ pass
+
+
+EFI_DEBUG_IMAGE_INFO_TABLE_HEADER_fields_ = [
+ ('UpdateStatus', c_uint32),
+ ('TableSize', c_uint32),
+ ('EfiDebugImageInfoTable', c_void_p),
+]
+
+
+class EFI_TABLE_HEADER(LittleEndianStructure):
+ _fields_ = [
+ ('Signature', c_uint64),
+ ('Revision', c_uint32),
+ ('HeaderSize', c_uint32),
+ ('CRC32', c_uint32),
+ ('Reserved', c_uint32),
+ ]
+
+
+class EFI_CONFIGURATION_TABLE(LittleEndianStructure):
+ pass
+
+
+EFI_CONFIGURATION_TABLE_fields_ = [
+ ('VendorGuid', EFI_GUID),
+ ('VendorTable', c_void_p)
+]
+
+
+class EFI_SYSTEM_TABLE(LittleEndianStructure):
+ pass
+
+
+EFI_SYSTEM_TABLE_fields_ = [
+ ('Hdr', EFI_TABLE_HEADER),
+ ('FirmwareVendor', c_void_p),
+ ('FirmwareRevision', c_uint32),
+ ('ConsoleInHandle', c_void_p),
+ ('ConIn', c_void_p),
+ ('ConsoleOutHandle', c_void_p),
+ ('ConOut', c_void_p),
+ ('StandardErrHandle', c_void_p),
+ ('StdErr', c_void_p),
+ ('RuntimeService', c_void_p),
+ ('BootService', c_void_p),
+ ('NumberOfTableEntries', c_void_p),
+ ('ConfigurationTable', c_void_p),
+]
+
+
+class EFI_IMAGE_DATA_DIRECTORY(LittleEndianStructure):
+ _fields_ = [
+ ('VirtualAddress', c_uint32),
+ ('Size', c_uint32)
+ ]
+
+
+class EFI_TE_IMAGE_HEADER(LittleEndianStructure):
+ _fields_ = [
+ ('Signature', ARRAY(c_char, 2)),
+ ('Machine', c_uint16),
+ ('NumberOfSections', c_uint8),
+ ('Subsystem', c_uint8),
+ ('StrippedSize', c_uint16),
+ ('AddressOfEntryPoint', c_uint32),
+ ('BaseOfCode', c_uint32),
+ ('ImageBase', c_uint64),
+ ('DataDirectoryBaseReloc', EFI_IMAGE_DATA_DIRECTORY),
+ ('DataDirectoryDebug', EFI_IMAGE_DATA_DIRECTORY)
+ ]
+
+
+class EFI_IMAGE_DOS_HEADER(LittleEndianStructure):
+ _fields_ = [
+ ('e_magic', c_uint16),
+ ('e_cblp', c_uint16),
+ ('e_cp', c_uint16),
+ ('e_crlc', c_uint16),
+ ('e_cparhdr', c_uint16),
+ ('e_minalloc', c_uint16),
+ ('e_maxalloc', c_uint16),
+ ('e_ss', c_uint16),
+ ('e_sp', c_uint16),
+ ('e_csum', c_uint16),
+ ('e_ip', c_uint16),
+ ('e_cs', c_uint16),
+ ('e_lfarlc', c_uint16),
+ ('e_ovno', c_uint16),
+ ('e_res', ARRAY(c_uint16, 4)),
+ ('e_oemid', c_uint16),
+ ('e_oeminfo', c_uint16),
+ ('e_res2', ARRAY(c_uint16, 10)),
+ ('e_lfanew', c_uint16)
+ ]
+
+
+class EFI_IMAGE_FILE_HEADER(LittleEndianStructure):
+ _fields_ = [
+ ('Machine', c_uint16),
+ ('NumberOfSections', c_uint16),
+ ('TimeDateStamp', c_uint32),
+ ('PointerToSymbolTable', c_uint32),
+ ('NumberOfSymbols', c_uint32),
+ ('SizeOfOptionalHeader', c_uint16),
+ ('Characteristics', c_uint16)
+ ]
+
+
+class EFI_IMAGE_OPTIONAL_HEADER32(LittleEndianStructure):
+ _fields_ = [
+ ('Magic', c_uint16),
+ ('MajorLinkerVersion', c_uint8),
+ ('MinorLinkerVersion', c_uint8),
+ ('SizeOfCode', c_uint32),
+ ('SizeOfInitializedData', c_uint32),
+ ('SizeOfUninitializedData', c_uint32),
+ ('AddressOfEntryPoint', c_uint32),
+ ('BaseOfCode', c_uint32),
+ ('BaseOfData', c_uint32),
+ ('ImageBase', c_uint32),
+ ('SectionAlignment', c_uint32),
+ ('FileAlignment', c_uint32),
+ ('MajorOperatingSystemVersion', c_uint16),
+ ('MinorOperatingSystemVersion', c_uint16),
+ ('MajorImageVersion', c_uint16),
+ ('MinorImageVersion', c_uint16),
+ ('MajorSubsystemVersion', c_uint16),
+ ('MinorSubsystemVersion', c_uint16),
+ ('Win32VersionValue', c_uint32),
+ ('SizeOfImage', c_uint32),
+ ('SizeOfHeaders', c_uint32),
+ ('CheckSum', c_uint32),
+ ('Subsystem', c_uint16),
+ ('DllCharacteristics', c_uint16),
+ ('SizeOfStackReserve', c_uint32),
+ ('SizeOfStackCommit', c_uint32),
+ ('SizeOfHeapReserve', c_uint32),
+ ('SizeOfHeapCommit', c_uint32),
+ ('LoaderFlags', c_uint32),
+ ('NumberOfRvaAndSizes', c_uint32),
+ ('DataDirectory', ARRAY(EFI_IMAGE_DATA_DIRECTORY, 16))
+ ]
+
+
+class EFI_IMAGE_NT_HEADERS32(LittleEndianStructure):
+ _fields_ = [
+ ('Signature', c_uint32),
+ ('FileHeader', EFI_IMAGE_FILE_HEADER),
+ ('OptionalHeader', EFI_IMAGE_OPTIONAL_HEADER32)
+ ]
+
+
+class EFI_IMAGE_OPTIONAL_HEADER64(LittleEndianStructure):
+ _fields_ = [
+ ('Magic', c_uint16),
+ ('MajorLinkerVersion', c_uint8),
+ ('MinorLinkerVersion', c_uint8),
+ ('SizeOfCode', c_uint32),
+ ('SizeOfInitializedData', c_uint32),
+ ('SizeOfUninitializedData', c_uint32),
+ ('AddressOfEntryPoint', c_uint32),
+ ('BaseOfCode', c_uint32),
+ ('BaseOfData', c_uint32),
+ ('ImageBase', c_uint32),
+ ('SectionAlignment', c_uint32),
+ ('FileAlignment', c_uint32),
+ ('MajorOperatingSystemVersion', c_uint16),
+ ('MinorOperatingSystemVersion', c_uint16),
+ ('MajorImageVersion', c_uint16),
+ ('MinorImageVersion', c_uint16),
+ ('MajorSubsystemVersion', c_uint16),
+ ('MinorSubsystemVersion', c_uint16),
+ ('Win32VersionValue', c_uint32),
+ ('SizeOfImage', c_uint32),
+ ('SizeOfHeaders', c_uint32),
+ ('CheckSum', c_uint32),
+ ('Subsystem', c_uint16),
+ ('DllCharacteristics', c_uint16),
+ ('SizeOfStackReserve', c_uint64),
+ ('SizeOfStackCommit', c_uint64),
+ ('SizeOfHeapReserve', c_uint64),
+ ('SizeOfHeapCommit', c_uint64),
+ ('LoaderFlags', c_uint32),
+ ('NumberOfRvaAndSizes', c_uint32),
+ ('DataDirectory', ARRAY(EFI_IMAGE_DATA_DIRECTORY, 16))
+ ]
+
+
+class EFI_IMAGE_NT_HEADERS64(LittleEndianStructure):
+ _fields_ = [
+ ('Signature', c_uint32),
+ ('FileHeader', EFI_IMAGE_FILE_HEADER),
+ ('OptionalHeader', EFI_IMAGE_OPTIONAL_HEADER64)
+ ]
+
+
+class EFI_IMAGE_DEBUG_DIRECTORY_ENTRY(LittleEndianStructure):
+ _fields_ = [
+ ('Characteristics', c_uint32),
+ ('TimeDateStamp', c_uint32),
+ ('MajorVersion', c_uint16),
+ ('MinorVersion', c_uint16),
+ ('Type', c_uint32),
+ ('SizeOfData', c_uint32),
+ ('RVA', c_uint32),
+ ('FileOffset', c_uint32),
+ ]
+
+
+class EFI_IMAGE_SECTION_HEADER(LittleEndianStructure):
+ _fields_ = [
+ ('Name', ARRAY(c_char, 8)),
+ ('VirtualSize', c_uint32),
+ ('VirtualAddress', c_uint32),
+ ('SizeOfRawData', c_uint32),
+ ('PointerToRawData', c_uint32),
+ ('PointerToRelocations', c_uint32),
+ ('PointerToLinenumbers', c_uint32),
+ ('NumberOfRelocations', c_uint16),
+ ('NumberOfLinenumbers', c_uint16),
+ ('Characteristics', c_uint32),
+ ]
+
+
+EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b
+EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b
+
+DIRECTORY_DEBUG = 6
+
+
+image_machine_dict = {
+ 0x014c: "IA32",
+ 0x0200: "IPF",
+ 0x0EBC: "EBC",
+ 0x8664: "X64",
+ 0x01c2: "ARM",
+ 0xAA64: "AArch64",
+ 0x5032: "RISC32",
+ 0x5064: "RISC64",
+ 0x5128: "RISCV128",
+}
+
+
+def patch_void_p_to_ctype(patch_type, to_patch):
+ '''Optionally patch c_void_p in the Structure._fields_'''
+ if patch_type is None:
+ return to_patch
+
+ result = []
+ for name, c_type in to_patch:
+ if type(c_type) == type(c_void_p):
+ result.append((name, c_uint32))
+ else:
+ result.append((name, c_type))
+ return result
+
+
+def patch_ctypes(pointer_width=8):
+ '''
+ Pass in the pointer width of the system being debugged. If it is not
+ the same as c_void_p then patch the _fields_ with the correct type.
+ For any ctypes Structure that has a c_void_p this function needs to be
+ called prior to use or sizeof() to initialize _fields_.
+ '''
+
+ if sizeof(c_void_p) == pointer_width:
+ patch_type = None
+ elif pointer_width == 16:
+ assert False
+ elif pointer_width == 8:
+ patch_type = c_uint64
+ elif pointer_width == 4:
+ patch_type = c_uint32
+ else:
+ raise Exception(f'ERROR: Unkown pointer_width = {pointer_width}')
+
+ # If you add a ctypes Structure class with a c_void_p you need to add
+ # it to this list. Note: you should use c_void_p for UINTN values.
+ EFI_LOADED_IMAGE_PROTOCOL._fields_ = patch_void_p_to_ctype(
+ patch_type, EFI_LOADED_IMAGE_PROTOCOL_fields_)
+ EFI_DEBUG_IMAGE_INFO_NORMAL._fields_ = patch_void_p_to_ctype(
+ patch_type, EFI_DEBUG_IMAGE_INFO_NORMAL_fields_)
+ EFI_DEBUG_IMAGE_INFO._fields_ = patch_void_p_to_ctype(
+ patch_type, EFI_DEBUG_IMAGE_INFO_fields_)
+ EFI_DEBUG_IMAGE_INFO_TABLE_HEADER._fields_ = patch_void_p_to_ctype(
+ patch_type, EFI_DEBUG_IMAGE_INFO_TABLE_HEADER_fields_)
+ EFI_CONFIGURATION_TABLE._fields_ = patch_void_p_to_ctype(
+ patch_type, EFI_CONFIGURATION_TABLE_fields_)
+ EFI_SYSTEM_TABLE._fields_ = patch_void_p_to_ctype(
+ patch_type, EFI_SYSTEM_TABLE_fields_)
+
+ # patch up anything else that needs to know pointer_width
+ EfiStatusClass(pointer_width)
+
+
+def ctype_to_str(ctype, indent='', hide_list=[]):
+ '''
+ Given a ctype object print out as a string by walking the _fields_
+ in the cstring Class
+ '''
+ result = ''
+ for field in ctype._fields_:
+ attr = getattr(ctype, field[0])
+ tname = type(attr).__name__
+ if field[0] in hide_list:
+ continue
+
+ result += indent + f'{field[0]} = '
+ if tname == 'EFI_GUID':
+ result += GuidNames.to_name(GuidNames.to_uuid(attr)) + '\n'
+ elif issubclass(type(attr), Structure):
+ result += f'{tname}\n' + \
+ ctype_to_str(attr, indent + ' ', hide_list)
+ elif isinstance(attr, int):
+ result += f'0x{attr:x}\n'
+ else:
+ result += f'{attr}\n'
+
+ return result
+
+
+def hexline(addr, data):
+ hexstr = ''
+ printable = ''
+ for i in range(0, len(data)):
+ hexstr += f'{data[i]:02x} '
+ printable += chr(data[i]) if data[i] > 0x20 and data[i] < 0x7f else '.'
+ return f'{addr:04x} {hexstr:48s} |{printable:s}|'
+
+
+def hexdump(data, indent=''):
+ if not isinstance(data, bytearray):
+ data = bytearray(data)
+
+ result = ''
+ for i in range(0, len(data), 16):
+ result += indent + hexline(i, data[i:i+16]) + '\n'
+ return result
+
+
+class EfiTpl:
+ ''' Return string for EFI_TPL'''
+
+ def __init__(self, tpl):
+ self.tpl = tpl
+
+ def __str__(self):
+ if self.tpl < 4:
+ result = f'{self.tpl:d}'
+ elif self.tpl < 8:
+ result = "TPL_APPLICATION"
+ if self.tpl - 4 > 0:
+ result += f' + {self.tpl - 4:d}'
+ elif self.tpl < 16:
+ result = "TPL_CALLBACK"
+ if self.tpl - 8 > 0:
+ result += f' + {self.tpl - 8:d}'
+ elif self.tpl < 31:
+ result = "TPL_NOTIFY"
+ if self.tpl - 16 > 0:
+ result += f' + {self.tpl - 16:d}'
+ elif self.tpl == 31:
+ result = "TPL_HIGH_LEVEL"
+ else:
+ result = f'Invalid TPL = {self.tpl:d}'
+ return result
+
+
+class EfiBootMode:
+ '''
+ Class to return human readable string for EFI_BOOT_MODE
+
+ Methods
+ -----------
+ to_str(boot_mode, default)
+ return string for boot_mode, and return default if there is not a
+ match.
+ '''
+
+ EFI_BOOT_MODE_dict = {
+ 0x00: "BOOT_WITH_FULL_CONFIGURATION",
+ 0x01: "BOOT_WITH_MINIMAL_CONFIGURATION",
+ 0x02: "BOOT_ASSUMING_NO_CONFIGURATION_CHANGES",
+ 0x03: "BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS",
+ 0x04: "BOOT_WITH_DEFAULT_SETTINGS",
+ 0x05: "BOOT_ON_S4_RESUME",
+ 0x06: "BOOT_ON_S5_RESUME",
+ 0x07: "BOOT_WITH_MFG_MODE_SETTINGS",
+ 0x10: "BOOT_ON_S2_RESUME",
+ 0x11: "BOOT_ON_S3_RESUME",
+ 0x12: "BOOT_ON_FLASH_UPDATE",
+ 0x20: "BOOT_IN_RECOVERY_MODE",
+ }
+
+ def __init__(self, boot_mode):
+ self._boot_mode = boot_mode
+
+ def __str__(self):
+ return self.to_str(self._boot_mode)
+
+ @classmethod
+ def to_str(cls, boot_mode, default=''):
+ return cls.EFI_BOOT_MODE_dict.get(boot_mode, default)
+
+
+class EfiStatusClass:
+ '''
+ Class to decode EFI_STATUS to a human readable string. You need to
+ pass in pointer_width to get the corret value since the EFI_STATUS
+ code values are different based on the sizeof UINTN. The default is
+ sizeof(UINTN) == 8.
+
+ Attributes
+ ——————
+ _dict_ : dictionary
+ dictionary of EFI_STATUS that has beed updated to match
+ pointer_width.
+
+ Methods
+ -----------
+ patch_dictionary(pointer_width)
+
+ to_str(status, default)
+ '''
+
+ _dict_ = {}
+ _EFI_STATUS_UINT32_dict = {
+ 0: "Success",
+ 1: "Warning Unknown Glyph",
+ 2: "Warning Delete Failure",
+ 3: "Warning Write Failure",
+ 4: "Warning Buffer Too Small",
+ 5: "Warning Stale Data",
+ 6: "Warngin File System",
+ (0x20000000 | 0): "Warning interrupt source pending",
+ (0x20000000 | 1): "Warning interrupt source quiesced",
+
+ (0x80000000 | 1): "Load Error",
+ (0x80000000 | 2): "Invalid Parameter",
+ (0x80000000 | 3): "Unsupported",
+ (0x80000000 | 4): "Bad Buffer Size",
+ (0x80000000 | 5): "Buffer Too Small",
+ (0x80000000 | 6): "Not Ready",
+ (0x80000000 | 7): "Device Error",
+ (0x80000000 | 8): "Write Protected",
+ (0x80000000 | 9): "Out of Resources",
+ (0x80000000 | 10): "Volume Corrupt",
+ (0x80000000 | 11): "Volume Full",
+ (0x80000000 | 12): "No Media",
+ (0x80000000 | 13): "Media changed",
+ (0x80000000 | 14): "Not Found",
+ (0x80000000 | 15): "Access Denied",
+ (0x80000000 | 16): "No Response",
+ (0x80000000 | 17): "No mapping",
+ (0x80000000 | 18): "Time out",
+ (0x80000000 | 19): "Not started",
+ (0x80000000 | 20): "Already started",
+ (0x80000000 | 21): "Aborted",
+ (0x80000000 | 22): "ICMP Error",
+ (0x80000000 | 23): "TFTP Error",
+ (0x80000000 | 24): "Protocol Error",
+ (0x80000000 | 25): "Incompatible Version",
+ (0x80000000 | 26): "Security Violation",
+ (0x80000000 | 27): "CRC Error",
+ (0x80000000 | 28): "End of Media",
+ (0x80000000 | 31): "End of File",
+ (0x80000000 | 32): "Invalid Language",
+ (0x80000000 | 33): "Compromised Data",
+ (0x80000000 | 35): "HTTP Error",
+
+ (0xA0000000 | 0): "Interrupt Pending",
+ }
+
+ def __init__(self, status=None, pointer_width=8):
+ self.status = status
+ # this will convert to 64-bit version if needed
+ self.patch_dictionary(pointer_width)
+
+ def __str__(self):
+ return self.to_str(self.status)
+
+ @classmethod
+ def to_str(cls, status, default=''):
+ return cls._dict_.get(status, default)
+
+ @classmethod
+ def patch_dictionary(cls, pointer_width):
+ '''Patch UINTN upper bits like values '''
+
+ if cls._dict_:
+ # only patch the class variable once
+ return False
+
+ if pointer_width == 4:
+ cls._dict = cls._EFI_STATUS_UINT32_dict
+ elif pointer_width == 8:
+ for key, value in cls._EFI_STATUS_UINT32_dict.items():
+ mask = (key & 0xE0000000) << 32
+ new_key = (key & 0x1FFFFFFF) | mask
+ cls._dict_[new_key] = value
+ return True
+ else:
+ return False
+
+
+class GuidNames:
+ '''
+ Class to expose the C names of EFI_GUID's. The _dict_ starts with
+ common EFI System Table entry EFI_GUID's. _dict_ can get updated with the
+ build generated Guid.xref file if a path to a module is passed
+ into add_build_guid_file(). If symbols are loaded for any module
+ in the build the path the build product should imply the
+ relative location of that builds Guid.xref file.
+
+ Attributes
+ ——————----
+ _dict_ : dictionary
+ dictionary of EFI_GUID (uuid) strings to C global names
+
+ Methods
+ -------
+ to_uuid(uuid)
+ convert a hex UUID string or bytearray to a uuid.UUID
+ to_name(uuid)
+ convert a UUID string to a C global constant name.
+ to_guid(guid_name)
+ convert a C global constant EFI_GUID name to uuid hex string.
+ is_guid_str(name)
+ name is a hex UUID string.
+ Example: 49152E77-1ADA-4764-B7A2-7AFEFED95E8B
+
+ to_c_guid(value)
+ convert a uuid.UUID or UUID string to a c_guid string
+ (see is_c_guid())
+ from_c_guid(value)
+ covert a C guid string to a hex UUID string.
+ is_c_guid(name)
+ name is the C initialization value for an EFI_GUID. Example:
+ { 0x414e6bdd, 0xe47b, 0x47cc, { 0xb2, 0x44, 0xbb, 0x61,
+ 0x02, 0x0c, 0xf5, 0x16 }}
+
+ add_build_guid_file(module_path, custom_file):
+ assume module_path is an edk2 build product and load the Guid.xref
+ file from that build to fill in _dict_. If you know the path and
+ file name of a custom Guid.xref you can pass it in as custom_file.
+
+ '''
+ _dict_ = { # Common EFI System Table values
+ '05AD34BA-6F02-4214-952E-4DA0398E2BB9':
+ 'gEfiDxeServicesTableGuid',
+ '7739F24C-93D7-11D4-9A3A-0090273FC14D':
+ 'gEfiHobListGuid',
+ '4C19049F-4137-4DD3-9C10-8B97A83FFDFA':
+ 'gEfiMemoryTypeInformationGuid',
+ '49152E77-1ADA-4764-B7A2-7AFEFED95E8B':
+ 'gEfiDebugImageInfoTableGuid',
+ '060CC026-4C0D-4DDA-8F41-595FEF00A502':
+ 'gMemoryStatusCodeRecordGuid',
+ 'EB9D2D31-2D88-11D3-9A16-0090273FC14D':
+ 'gEfiSmbiosTableGuid',
+ 'EB9D2D30-2D88-11D3-9A16-0090273FC14D':
+ 'gEfiAcpi10TableGuid',
+ '8868E871-E4F1-11D3-BC22-0080C73C8881':
+ 'gEfiAcpi20TableGuid',
+ }
+
+ guid_files = []
+
+ def __init__(self, uuid=None, pointer_width=8):
+ self.uuid = None if uuid is None else self.to_uuid(uuid)
+
+ def __str__(self):
+ if self.uuid is None:
+ result = ''
+ for key, value in GuidNames._dict_.items():
+ result += f'{key}: {value}\n'
+ else:
+ result = self.to_name(self.uuid)
+
+ return result
+
+ @classmethod
+ def to_uuid(cls, obj):
+ try:
+ return uuid.UUID(bytes_le=bytes(obj))
+ except (ValueError, TypeError):
+ try:
+ return uuid.UUID(bytes_le=obj)
+ except (ValueError, TypeError):
+ return uuid.UUID(obj)
+
+ @classmethod
+ def to_name(cls, uuid):
+ if not isinstance(uuid, str):
+ uuid = str(uuid)
+ if cls.is_c_guid(uuid):
+ uuid = cls.from_c_guid(uuid)
+ return cls._dict_.get(uuid.upper(), uuid.upper())
+
+ @classmethod
+ def to_guid(cls, guid_name):
+ for key, value in cls._dict_.items():
+ if guid_name == value:
+ return key.upper()
+ else:
+ raise KeyError(key)
+
+ @classmethod
+ def is_guid_str(cls, name):
+ if not isinstance(name, str):
+ return False
+ return name.count('-') >= 4
+
+ @classmethod
+ def to_c_guid(cls, value):
+ if isinstance(value, uuid.UUID):
+ guid = value
+ else:
+ guid = uuid.UUID(value)
+
+ (data1, data2, data3,
+ data4_0, data4_1, data4_2, data4_3,
+ data4_4, data4_5, data4_6, data4_7) = struct.unpack(
+ '<IHH8B', guid.bytes_le)
+ return (f'{{ 0x{data1:08X}, 0x{data2:04X}, 0x{data3:04X}, '
+ f'{{ 0x{data4_0:02X}, 0x{data4_1:02X}, 0x{data4_2:02X}, '
+ f'0x{data4_3:02X}, 0x{data4_4:02X}, 0x{data4_5:02X}, '
+ f'0x{data4_6:02X}, 0x{data4_7:02X} }} }}')
+
+ @ classmethod
+ def from_c_guid(cls, value):
+ try:
+ hex = [int(x, 16) for x in re.findall(r"[\w']+", value)]
+ return (f'{hex[0]:08X}-{hex[1]:04X}-{hex[2]:04X}'
+ + f'-{hex[3]:02X}{hex[4]:02X}-{hex[5]:02X}{hex[6]:02X}'
+ + f'{hex[7]:02X}{hex[8]:02X}{hex[9]:02X}{hex[10]:02X}')
+ except ValueError:
+ return value
+
+ @ classmethod
+ def is_c_guid(cls, name):
+ if not isinstance(name, str):
+ return False
+ return name.count('{') == 2 and name.count('}') == 2
+
+ @ classmethod
+ def add_build_guid_file(cls, module_path, custom_file=None):
+ if custom_file is not None:
+ xref = custom_file
+ else:
+ # module_path will look like:
+ # <repo>/Build/OvmfX64/DEBUG_XCODE5/X64/../DxeCore.dll
+ # Walk backwards looking for a toolchain like name.
+ # Then look for GUID database:
+ # Build/OvmfX64//DEBUG_XCODE5/FV/Guid.xref
+ for i in reversed(module_path.split(os.sep)):
+ if (i.startswith('DEBUG_') or
+ i.startswith('RELEASE_') or
+ i.startswith('NOOPT_')):
+ build_root = os.path.join(
+ module_path.rsplit(i, 1)[0], i)
+ break
+
+ xref = os.path.join(build_root, 'FV', 'Guid.xref')
+
+ if xref in cls.guid_files:
+ # only processes the file one time
+ return True
+
+ with open(xref) as f:
+ content = f.readlines()
+ cls.guid_files.append(xref)
+
+ for lines in content:
+ try:
+ if cls.is_guid_str(lines):
+ # a regex would be more pedantic
+ words = lines.split()
+ cls._dict_[words[0].upper()] = words[1].strip('\n')
+ except ValueError:
+ pass
+
+ return True
+
+ return False
+
+
+class EFI_HOB_GENERIC_HEADER(LittleEndianStructure):
+ _fields_ = [
+ ('HobType', c_uint16),
+ ('HobLength', c_uint16),
+ ('Reserved', c_uint32)
+ ]
+
+
+class EFI_HOB_HANDOFF_INFO_TABLE(LittleEndianStructure):
+ _fields_ = [
+ ('Header', EFI_HOB_GENERIC_HEADER),
+ ('Version', c_uint32),
+ ('BootMode', c_uint32),
+ ('EfiMemoryTop', c_uint64),
+ ('EfiMemoryBottom', c_uint64),
+ ('EfiFreeMemoryTop', c_uint64),
+ ('EfiFreeMemoryBottom', c_uint64),
+ ('EfiEndOfHobList', c_uint64),
+ ]
+
+
+class EFI_HOB_MEMORY_ALLOCATION(LittleEndianStructure):
+ _fields_ = [
+ ('Header', EFI_HOB_GENERIC_HEADER),
+ ('Name', EFI_GUID),
+ ('MemoryBaseAddress', c_uint64),
+ ('MemoryLength', c_uint64),
+ ('MemoryType', c_uint32),
+ ('Reserved', c_uint32),
+ ]
+
+
+class EFI_HOB_RESOURCE_DESCRIPTOR(LittleEndianStructure):
+ _fields_ = [
+ ('Header', EFI_HOB_GENERIC_HEADER),
+ ('Owner', EFI_GUID),
+ ('ResourceType', c_uint32),
+ ('ResourceAttribute', c_uint32),
+ ('PhysicalStart', c_uint64),
+ ('ResourceLength', c_uint64),
+ ]
+
+
+class EFI_HOB_GUID_TYPE(LittleEndianStructure):
+ _fields_ = [
+ ('Header', EFI_HOB_GENERIC_HEADER),
+ ('Name', EFI_GUID),
+ ]
+
+
+class EFI_HOB_FIRMWARE_VOLUME(LittleEndianStructure):
+ _fields_ = [
+ ('Header', EFI_HOB_GENERIC_HEADER),
+ ('BaseAddress', c_uint64),
+ ('Length', c_uint64),
+ ]
+
+
+class EFI_HOB_CPU(LittleEndianStructure):
+ _fields_ = [
+ ('Header', EFI_HOB_GENERIC_HEADER),
+ ('SizeOfMemorySpace', c_uint8),
+ ('SizeOfIoSpace', c_uint8),
+ ('Reserved', ARRAY(c_uint8, 6)),
+ ]
+
+
+class EFI_HOB_MEMORY_POOL(LittleEndianStructure):
+ _fields_ = [
+ ('Header', EFI_HOB_GENERIC_HEADER),
+ ]
+
+
+class EFI_HOB_FIRMWARE_VOLUME2(LittleEndianStructure):
+ _fields_ = [
+ ('Header', EFI_HOB_GENERIC_HEADER),
+ ('BaseAddress', c_uint64),
+ ('Length', c_uint64),
+ ('FvName', EFI_GUID),
+ ('FileName', EFI_GUID)
+ ]
+
+
+class EFI_HOB_FIRMWARE_VOLUME3(LittleEndianStructure):
+ _fields_ = [
+ ('HobType', c_uint16),
+ ('HobLength', c_uint16),
+ ('Reserved', c_uint32),
+ ('BaseAddress', c_uint64),
+ ('Length', c_uint64),
+ ('AuthenticationStatus', c_uint32),
+ ('ExtractedFv', c_uint8),
+ ('FvName', EFI_GUID),
+ ('FileName', EFI_GUID),
+ ]
+
+
+class EFI_HOB_UEFI_CAPSULE(LittleEndianStructure):
+ _fields_ = [
+ ('HobType', c_uint16),
+ ('HobLength', c_uint16),
+ ('Reserved', c_uint32),
+ ('BaseAddress', c_uint64),
+ ('Length', c_uint64),
+ ]
+
+
+class EfiHob:
+ '''
+ Parse EFI Device Paths based on the edk2 C Structures defined above.
+ In the context of this class verbose means hexdump extra data.
+
+
+ Attributes
+ ——————
+ Hob : list
+ List of HOBs. Each entry contains the name, HOB type, HOB length,
+ the ctype struct for the HOB, and any extra data.
+
+ Methods
+ -----------
+ get_hob_by_type(hob_type)
+ return string that decodes the HOBs of hob_type. If hob_type is
+ None then return all HOBs.
+ '''
+
+ Hob = []
+ verbose = False
+
+ hob_dict = {
+ 1: EFI_HOB_HANDOFF_INFO_TABLE,
+ 2: EFI_HOB_MEMORY_ALLOCATION,
+ 3: EFI_HOB_RESOURCE_DESCRIPTOR,
+ 4: EFI_HOB_GUID_TYPE,
+ 5: EFI_HOB_FIRMWARE_VOLUME,
+ 6: EFI_HOB_CPU,
+ 7: EFI_HOB_MEMORY_POOL,
+ 9: EFI_HOB_FIRMWARE_VOLUME2,
+ 0xb: EFI_HOB_UEFI_CAPSULE,
+ 0xc: EFI_HOB_FIRMWARE_VOLUME3,
+ 0xffff: EFI_HOB_GENERIC_HEADER,
+ }
+
+ def __init__(self, file, address=None, verbose=False, count=1000):
+ self._file = file
+ EfiHob.verbose = verbose
+
+ if len(EfiHob.Hob) != 0 and address is None:
+ return
+
+ if address is not None:
+ hob_ptr = address
+ else:
+ hob_ptr = EfiConfigurationTable(file).GetConfigTable(
+ '7739F24C-93D7-11D4-9A3A-0090273FC14D')
+
+ self.read_hobs(hob_ptr)
+
+ @ classmethod
+ def __str__(cls):
+ return cls.get_hob_by_type(None)
+
+ @ classmethod
+ def get_hob_by_type(cls, hob_type):
+ result = ""
+ for (Name, HobType, HobLen, chob, extra) in cls.Hob:
+ if hob_type is not None:
+ if hob_type != HobType:
+ continue
+
+ result += f'Type: {Name:s} (0x{HobType:01x}) Len: 0x{HobLen:03x}\n'
+ result += ctype_to_str(chob, ' ', ['Reserved'])
+ if cls.verbose:
+ if extra is not None:
+ result += hexdump(extra, ' ')
+
+ return result
+
+ def read_hobs(self, hob_ptr, count=1000):
+ if hob_ptr is None:
+ return
+
+ try:
+ for _ in range(count): # while True
+ hdr, _ = self._ctype_read_ex(EFI_HOB_GENERIC_HEADER, hob_ptr)
+ if hdr.HobType == 0xffff:
+ break
+
+ type_str = self.hob_dict.get(
+ hdr.HobType, EFI_HOB_GENERIC_HEADER)
+ hob, extra = self._ctype_read_ex(
+ type_str, hob_ptr, hdr.HobLength)
+ EfiHob.Hob.append(
+ (type(hob).__name__,
+ hdr.HobType,
+ hdr.HobLength,
+ hob,
+ extra))
+ hob_ptr += hdr.HobLength
+ except ValueError:
+ pass
+
+ def _ctype_read_ex(self, ctype_struct, offset=0, rsize=None):
+ if offset != 0:
+ self._file.seek(offset)
+
+ type_size = sizeof(ctype_struct)
+ size = rsize if rsize else type_size
+ data = self._file.read(size)
+ cdata = ctype_struct.from_buffer(bytearray(data))
+
+ if size > type_size:
+ return cdata, data[type_size:]
+ else:
+ return cdata, None
+
+
+class EFI_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Type', c_uint8),
+ ('SubType', c_uint8),
+
+ # UINT8 Length[2]
+ # Cheat and use c_uint16 since we don't care about alignment
+ ('Length', c_uint16)
+ ]
+
+
+class PCI_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('Function', c_uint8),
+ ('Device', c_uint8)
+ ]
+
+
+class PCCARD_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('FunctionNumber', c_uint8),
+ ]
+
+
+class MEMMAP_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('StartingAddress', c_uint64),
+ ('EndingAddress', c_uint64),
+ ]
+
+
+class VENDOR_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('Guid', EFI_GUID),
+ ]
+
+
+class CONTROLLER_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('ControllerNumber', c_uint32),
+ ]
+
+
+class BMC_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('InterfaceType', c_uint8),
+ ('BaseAddress', ARRAY(c_uint8, 8)),
+ ]
+
+
+class BBS_BBS_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('DeviceType', c_uint16),
+ ('StatusFlag', c_uint16)
+ ]
+
+
+class ACPI_HID_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('HID', c_uint32),
+ ('UID', c_uint32)
+ ]
+
+
+class ACPI_EXTENDED_HID_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('HID', c_uint32),
+ ('UID', c_uint32),
+ ('CID', c_uint32)
+ ]
+
+
+class ACPI_ADR_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('ARD', c_uint32)
+ ]
+
+
+class ACPI_NVDIMM_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('NFITDeviceHandle', c_uint32)
+ ]
+
+
+class ATAPI_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("PrimarySecondary", c_uint8),
+ ("SlaveMaster", c_uint8),
+ ("Lun", c_uint16)
+ ]
+
+
+class SCSI_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("Pun", c_uint16),
+ ("Lun", c_uint16)
+ ]
+
+
+class FIBRECHANNEL_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("Reserved", c_uint32),
+ ("WWN", c_uint64),
+ ("Lun", c_uint64)
+ ]
+
+
+class F1394_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("Reserved", c_uint32),
+ ("Guid", c_uint64)
+ ]
+
+
+class USB_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("ParentPortNumber", c_uint8),
+ ("InterfaceNumber", c_uint8),
+ ]
+
+
+class I2O_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("Tid", c_uint32)
+ ]
+
+
+class INFINIBAND_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("ResourceFlags", c_uint32),
+ ("PortGid", ARRAY(c_uint8, 16)),
+ ("ServiceId", c_uint64),
+ ("TargetPortId", c_uint64),
+ ("DeviceId", c_uint64)
+ ]
+
+
+class UART_FLOW_CONTROL_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("Guid", EFI_GUID),
+ ("FlowControlMap", c_uint32)
+ ]
+
+
+class SAS_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("Guid", EFI_GUID),
+ ("Reserved", c_uint32),
+ ("SasAddress", c_uint64),
+ ("Lun", c_uint64),
+ ("DeviceTopology", c_uint16),
+ ("RelativeTargetPort", c_uint16)
+ ]
+
+
+class EFI_MAC_ADDRESS(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ("Addr", ARRAY(c_uint8, 32)),
+ ]
+
+
+class MAC_ADDR_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('MacAddress', EFI_MAC_ADDRESS),
+ ('IfType', c_uint8)
+ ]
+
+
+class IPv4_ADDRESS(LittleEndianStructure):
+ _fields_ = [
+ ("Addr", ARRAY(c_uint8, 4)),
+ ]
+
+
+class IPv4_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('LocalIpAddress', IPv4_ADDRESS),
+ ('RemoteIpAddress', IPv4_ADDRESS),
+ ('LocalPort', c_uint16),
+ ('RemotePort', c_uint16),
+ ('Protocol', c_uint16),
+ ('StaticIpAddress', c_uint8),
+ ('GatewayIpAddress', IPv4_ADDRESS),
+ ('SubnetMask', IPv4_ADDRESS)
+ ]
+
+
+class IPv6_ADDRESS(LittleEndianStructure):
+ _fields_ = [
+ ("Addr", ARRAY(c_uint8, 16)),
+ ]
+
+
+class IPv6_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('LocalIpAddress', IPv6_ADDRESS),
+ ('RemoteIpAddress', IPv6_ADDRESS),
+ ('LocalPort', c_uint16),
+ ('RemotePort', c_uint16),
+ ('Protocol', c_uint16),
+ ('IpAddressOrigin', c_uint8),
+ ('PrefixLength', c_uint8),
+ ('GatewayIpAddress', IPv6_ADDRESS)
+ ]
+
+
+class UART_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('Reserved', c_uint32),
+ ('BaudRate', c_uint64),
+ ('DataBits', c_uint8),
+ ('Parity', c_uint8),
+ ('StopBits', c_uint8)
+ ]
+
+
+class USB_CLASS_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('VendorId', c_uint16),
+ ('ProductId', c_uint16),
+ ('DeviceClass', c_uint8),
+ ('DeviceCSjblass', c_uint8),
+ ('DeviceProtocol', c_uint8),
+ ]
+
+
+class USB_WWID_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('InterfaceNumber', c_uint16),
+ ('VendorId', c_uint16),
+ ('ProductId', c_uint16),
+ ]
+
+
+class DEVICE_LOGICAL_UNIT_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('Lun', c_uint8)
+ ]
+
+
+class SATA_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('HBAPortNumber', c_uint16),
+ ('PortMultiplierPortNumber', c_uint16),
+ ('Lun', c_uint16),
+ ]
+
+
+class ISCSI_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('NetworkProtocol', c_uint16),
+ ('LoginOption', c_uint16),
+ ('Lun', c_uint64),
+ ('TargetPortalGroupTag', c_uint16),
+ ]
+
+
+class VLAN_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("VlandId", c_uint16)
+ ]
+
+
+class FIBRECHANNELEX_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("Reserved", c_uint16),
+ ("WWN", ARRAY(c_uint8, 8)),
+ ("Lun", ARRAY(c_uint8, 8)),
+ ]
+
+
+class SASEX_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("SasAddress", ARRAY(c_uint8, 8)),
+ ("Lun", ARRAY(c_uint8, 8)),
+ ("DeviceTopology", c_uint16),
+ ("RelativeTargetPort", c_uint16)
+ ]
+
+
+class NVME_NAMESPACE_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("NamespaceId", c_uint32),
+ ("NamespaceUuid", c_uint64)
+ ]
+
+
+class DNS_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("IsIPv6", c_uint8),
+ ("DnsServerIp", IPv6_ADDRESS)
+
+ ]
+
+
+class UFS_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("Pun", c_uint8),
+ ("Lun", c_uint8),
+ ]
+
+
+class SD_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("SlotNumber", c_uint8)
+ ]
+
+
+class BLUETOOTH_ADDRESS(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ("Address", ARRAY(c_uint8, 6))
+ ]
+
+
+class BLUETOOTH_LE_ADDRESS(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ("Format", c_uint8),
+ ("Class", c_uint16)
+ ]
+
+
+class BLUETOOTH_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("BD_ADDR", BLUETOOTH_ADDRESS)
+ ]
+
+
+class WIFI_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("SSId", ARRAY(c_uint8, 32))
+ ]
+
+
+class EMMC_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("SlotNumber", c_uint8)
+ ]
+
+
+class BLUETOOTH_LE_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("BD_ADDR", BLUETOOTH_LE_ADDRESS)
+ ]
+
+
+class NVDIMM_NAMESPACE_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("Uuid", EFI_GUID)
+ ]
+
+
+class REST_SERVICE_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("RESTService", c_uint8),
+ ("AccessMode", c_uint8)
+ ]
+
+
+class REST_VENDOR_SERVICE_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ("RESTService", c_uint8),
+ ("AccessMode", c_uint8),
+ ("Guid", EFI_GUID),
+ ]
+
+
+class HARDDRIVE_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('PartitionNumber', c_uint32),
+ ('PartitionStart', c_uint64),
+ ('PartitionSize', c_uint64),
+ ('Signature', ARRAY(c_uint8, 16)),
+ ('MBRType', c_uint8),
+ ('SignatureType', c_uint8)
+ ]
+
+
+class CDROM_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('BootEntry', c_uint32),
+ ('PartitionStart', c_uint64),
+ ('PartitionSize', c_uint64)
+ ]
+
+
+class MEDIA_PROTOCOL_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('Protocol', EFI_GUID)
+ ]
+
+
+class MEDIA_FW_VOL_FILEPATH_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('FvFileName', EFI_GUID)
+ ]
+
+
+class MEDIA_FW_VOL_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('FvName', EFI_GUID)
+ ]
+
+
+class MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('Reserved', c_uint32),
+ ('StartingOffset', c_uint64),
+ ('EndingOffset', c_uint64)
+ ]
+
+
+class MEDIA_RAM_DISK_DEVICE_PATH(LittleEndianStructure):
+ _pack_ = 1
+ _fields_ = [
+ ('Header', EFI_DEVICE_PATH),
+ ('StartingAddr', c_uint64),
+ ('EndingAddr', c_uint64),
+ ('TypeGuid', EFI_GUID),
+ ('Instance', c_uint16)
+ ]
+
+
+class EfiDevicePath:
+ '''
+ Parse EFI Device Paths based on the edk2 C Structures defined above.
+ In the context of this class verbose means hexdump extra data.
+
+
+ Attributes
+ ——————
+ DevicePath : list
+ List of devixe path instances. Each instance is a list of nodes
+ for the given Device Path instance.
+
+ Methods
+ -----------
+ device_path_node(address)
+ return the Device Path ctype hdr, ctype, and any extra data in
+ the Device Path node. This is just a single Device Path node,
+ not the entire Device Path.
+ device_path_node_str(address)
+ return the device path node (not the entire Device Path) as a string
+ '''
+
+ DevicePath = []
+
+ device_path_dict = {
+ # ( Type, SubType ) : Device Path C typedef
+ # HARDWARE_DEVICE_PATH
+ (1, 1): PCI_DEVICE_PATH,
+ (1, 2): PCCARD_DEVICE_PATH,
+ (1, 3): MEMMAP_DEVICE_PATH,
+ (1, 4): VENDOR_DEVICE_PATH,
+ (1, 5): CONTROLLER_DEVICE_PATH,
+ (1, 6): BMC_DEVICE_PATH,
+
+ # ACPI_DEVICE_PATH
+ (2, 1): ACPI_HID_DEVICE_PATH,
+ (2, 2): ACPI_EXTENDED_HID_DEVICE_PATH,
+ (2, 3): ACPI_ADR_DEVICE_PATH,
+ (2, 4): ACPI_NVDIMM_DEVICE_PATH,
+
+ # MESSAGING_DEVICE_PATH
+ (3, 1): ATAPI_DEVICE_PATH,
+ (3, 2): SCSI_DEVICE_PATH,
+ (3, 3): FIBRECHANNEL_DEVICE_PATH,
+ (3, 4): F1394_DEVICE_PATH,
+ (3, 5): USB_DEVICE_PATH,
+ (3, 6): I2O_DEVICE_PATH,
+
+ (3, 9): INFINIBAND_DEVICE_PATH,
+ (3, 10): VENDOR_DEVICE_PATH,
+ (3, 11): MAC_ADDR_DEVICE_PATH,
+ (3, 12): IPv4_DEVICE_PATH,
+ (3, 13): IPv6_DEVICE_PATH,
+ (3, 14): UART_DEVICE_PATH,
+ (3, 15): USB_CLASS_DEVICE_PATH,
+ (3, 16): USB_WWID_DEVICE_PATH,
+ (3, 17): DEVICE_LOGICAL_UNIT_DEVICE_PATH,
+ (3, 18): SATA_DEVICE_PATH,
+ (3, 19): ISCSI_DEVICE_PATH,
+ (3, 20): VLAN_DEVICE_PATH,
+ (3, 21): FIBRECHANNELEX_DEVICE_PATH,
+ (3, 22): SASEX_DEVICE_PATH,
+ (3, 23): NVME_NAMESPACE_DEVICE_PATH,
+ (3, 24): DNS_DEVICE_PATH,
+ (3, 25): UFS_DEVICE_PATH,
+ (3, 26): SD_DEVICE_PATH,
+ (3, 27): BLUETOOTH_DEVICE_PATH,
+ (3, 28): WIFI_DEVICE_PATH,
+ (3, 29): EMMC_DEVICE_PATH,
+ (3, 30): BLUETOOTH_LE_DEVICE_PATH,
+ (3, 31): DNS_DEVICE_PATH,
+ (3, 32): NVDIMM_NAMESPACE_DEVICE_PATH,
+
+ (3, 33): REST_SERVICE_DEVICE_PATH,
+ (3, 34): REST_VENDOR_SERVICE_DEVICE_PATH,
+
+ # MEDIA_DEVICE_PATH
+ (4, 1): HARDDRIVE_DEVICE_PATH,
+ (4, 2): CDROM_DEVICE_PATH,
+ (4, 3): VENDOR_DEVICE_PATH,
+ (4, 4): EFI_DEVICE_PATH,
+ (4, 5): MEDIA_PROTOCOL_DEVICE_PATH,
+ (4, 6): MEDIA_FW_VOL_FILEPATH_DEVICE_PATH,
+ (4, 7): MEDIA_FW_VOL_DEVICE_PATH,
+ (4, 8): MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH,
+ (4, 9): MEDIA_RAM_DISK_DEVICE_PATH,
+
+ # BBS_DEVICE_PATH
+ (5, 1): BBS_BBS_DEVICE_PATH,
+
+ }
+
+ guid_override_dict = {
+ uuid.UUID('37499A9D-542F-4C89-A026-35DA142094E4'):
+ UART_FLOW_CONTROL_DEVICE_PATH,
+ uuid.UUID('D487DDB4-008B-11D9-AFDC-001083FFCA4D'):
+ SAS_DEVICE_PATH,
+ }
+
+ def __init__(self, file, ptr=None, verbose=False, count=64):
+ '''
+ Convert ptr into a list of Device Path nodes. If verbose also hexdump
+ extra data.
+ '''
+ self._file = file
+ self._verbose = verbose
+ if ptr is None:
+ return
+
+ try:
+ instance = []
+ for _ in range(count): # while True
+ hdr, _ = self._ctype_read_ex(EFI_DEVICE_PATH, ptr)
+ if hdr.Length < sizeof(EFI_DEVICE_PATH):
+ # Not a valid device path
+ break
+
+ if hdr.Type == 0x7F: # END_DEVICE_PATH_TYPE
+ self.DevicePath.append(instance)
+ if hdr.SubType == 0xFF: # END_ENTIRE_DEVICE_PATH_SUBTYPE
+ break
+ if hdr.SubType == 0x01: # END_INSTANCE_DEVICE_PATH_SUBTYPE
+ # start new device path instance
+ instance = []
+
+ type_str = self.device_path_dict.get(
+ (hdr.Type, hdr.SubType), EFI_DEVICE_PATH)
+ node, extra = self._ctype_read_ex(type_str, ptr, hdr.Length)
+ if 'VENDOR_DEVICE_PATH' in type(node).__name__:
+ guid_type = self.guid_override_dict.get(
+ GuidNames.to_uuid(node.Guid), None)
+ if guid_type:
+ # use the ctype associated with the GUID
+ node, extra = self._ctype_read_ex(
+ guid_type, ptr, hdr.Length)
+
+ instance.append((type(node).__name__, hdr.Type,
+ hdr.SubType, hdr.Length, node, extra))
+ ptr += hdr.Length
+ except ValueError:
+ pass
+
+ def __str__(self):
+ ''' '''
+ if not self.valid():
+ return '<class: EfiDevicePath>'
+
+ result = ""
+ for instance in self.DevicePath:
+ for (Name, Type, SubType, Length, cnode, extra) in instance:
+ result += f'{Name:s} {Type:2d}:{SubType:2d} Len: {Length:3d}\n'
+ result += ctype_to_str(cnode, ' ', ['Reserved'])
+ if self._verbose:
+ if extra is not None:
+ result += hexdump(extra, ' ')
+ result += '\n'
+
+ return result
+
+ def valid(self):
+ return True if self.DevicePath else False
+
+ def device_path_node(self, address):
+ try:
+ hdr, _ = self._ctype_read_ex(EFI_DEVICE_PATH, address)
+ if hdr.Length < sizeof(EFI_DEVICE_PATH):
+ return None, None, None
+
+ type_str = self.device_path_dict.get(
+ (hdr.Type, hdr.SubType), EFI_DEVICE_PATH)
+ cnode, extra = self._ctype_read_ex(type_str, address, hdr.Length)
+ return hdr, cnode, extra
+ except ValueError:
+ return None, None, None
+
+ def device_path_node_str(self, address, verbose=False):
+ hdr, cnode, extra = self.device_path_node(address)
+ if hdr is None:
+ return ''
+
+ cname = type(cnode).__name__
+ result = f'{cname:s} {hdr.Type:2d}:{hdr.SubType:2d} '
+ result += f'Len: 0x{hdr.Length:03x}\n'
+ result += ctype_to_str(cnode, ' ', ['Reserved'])
+ if verbose:
+ if extra is not None:
+ result += hexdump(extra, ' ')
+
+ return result
+
+ def _ctype_read_ex(self, ctype_struct, offset=0, rsize=None):
+ if offset != 0:
+ self._file.seek(offset)
+
+ type_size = sizeof(ctype_struct)
+ size = rsize if rsize else type_size
+ data = self._file.read(size)
+ if data is None:
+ return None, None
+
+ cdata = ctype_struct.from_buffer(bytearray(data))
+
+ if size > type_size:
+ return cdata, data[type_size:]
+ else:
+ return cdata, None
+
+
+class EfiConfigurationTable:
+ '''
+ A class to abstract EFI Configuration Tables from gST->ConfigurationTable
+ and gST->NumberOfTableEntries. Pass in the gST pointer from EFI,
+ likely you need to look up this address after you have loaded symbols
+
+ Attributes
+ ——————
+ ConfigurationTableDict : dictionary
+ dictionary of EFI Configuration Table entries
+
+ Methods
+ -----------
+ GetConfigTable(uuid)
+ pass in VendorGuid and return VendorTable from EFI System Table
+ DebugImageInfo(table)
+ return tuple of load address and size of PE/COFF images
+ '''
+
+ ConfigurationTableDict = {}
+
+ def __init__(self, file, gST_addr=None):
+ self._file = file
+ if gST_addr is None:
+ # ToDo add code to search for gST via EFI_SYSTEM_TABLE_POINTER
+ return
+
+ gST = self._ctype_read(EFI_SYSTEM_TABLE, gST_addr)
+ self.read_efi_config_table(gST.NumberOfTableEntries,
+ gST.ConfigurationTable,
+ self._ctype_read)
+
+ @ classmethod
+ def __str__(cls):
+ '''return EFI_CONFIGURATION_TABLE entries as a string'''
+ result = ""
+ for key, value in cls.ConfigurationTableDict.items():
+ result += f'{GuidNames().to_name(key):>37s}: '
+ result += f'VendorTable = 0x{value:08x}\n'
+
+ return result
+
+ def _ctype_read(self, ctype_struct, offset=0):
+ '''ctype worker function to read data'''
+ if offset != 0:
+ self._file.seek(offset)
+
+ data = self._file.read(sizeof(ctype_struct))
+ return ctype_struct.from_buffer(bytearray(data))
+
+ @ classmethod
+ def read_efi_config_table(cls, table_cnt, table_ptr, ctype_read):
+ '''Create a dictionary of EFI Configuration table entries'''
+ EmptryTables = EFI_CONFIGURATION_TABLE * table_cnt
+ Tables = ctype_read(EmptryTables, table_ptr)
+ for i in range(table_cnt):
+ cls.ConfigurationTableDict[str(GuidNames.to_uuid(
+ Tables[i].VendorGuid)).upper()] = Tables[i].VendorTable
+
+ return cls.ConfigurationTableDict
+
+ def GetConfigTable(self, uuid):
+ ''' Return VendorTable for VendorGuid (uuid.UUID) or None'''
+ return self.ConfigurationTableDict.get(uuid.upper())
+
+ def DebugImageInfo(self, table=None):
+ '''
+ Walk the debug image info table to find the LoadedImage protocols
+ for all the loaded PE/COFF images and return a list of load address
+ and image size.
+ '''
+ ImageLoad = []
+
+ if table is None:
+ table = self.GetConfigTable('49152e77-1ada-4764-b7a2-7afefed95e8b')
+
+ DbgInfoHdr = self._ctype_read(EFI_DEBUG_IMAGE_INFO_TABLE_HEADER, table)
+ NormalImageArray = EFI_DEBUG_IMAGE_INFO * DbgInfoHdr.TableSize
+ NormalImageArray = self._ctype_read(
+ NormalImageArray, DbgInfoHdr.EfiDebugImageInfoTable)
+ for i in range(DbgInfoHdr.TableSize):
+ ImageInfo = self._ctype_read(
+ EFI_DEBUG_IMAGE_INFO_NORMAL, NormalImageArray[i].NormalImage)
+ LoadedImage = self._ctype_read(
+ EFI_LOADED_IMAGE_PROTOCOL,
+ ImageInfo.LoadedImageProtocolInstance)
+ ImageLoad.append((LoadedImage.ImageBase, LoadedImage.ImageSize))
+
+ return ImageLoad
+
+
+class PeTeImage:
+ '''
+ A class to abstract PE/COFF or TE image processing via passing in a
+ Python file like object. If you pass in an address the PE/COFF is parsed,
+ if you pass in NULL for an address then you get a class instance you can
+ use to search memory for a PE/COFF hader given a pc value.
+
+ Attributes
+ ——————
+ LoadAddress : int
+ Load address of the PE/COFF image
+ AddressOfEntryPoint : int
+ Address of the Entry point of the PE/COFF image
+ TextAddress : int
+ Start of the PE/COFF text section
+ DataAddress : int
+ Start of the PE/COFF data section
+ CodeViewPdb : str
+ File name of the symbols file
+ CodeViewUuid : uuid:UUID
+ GUID for "RSDS" Debug Directory entry, or Mach-O UUID for "MTOC"
+
+ Methods
+ -----------
+ pcToPeCoff(address, step, max_range, rom_range)
+ Given an address(pc) find the PE/COFF image it is in
+ sections_to_str()
+ return a string giving info for all the PE/COFF sections
+ '''
+
+ def __init__(self, file, address=0):
+ self._file = file
+
+ # book keeping, but public
+ self.PeHdr = None
+ self.TeHdr = None
+ self.Machine = None
+ self.Subsystem = None
+ self.CodeViewSig = None
+ self.e_lfanew = 0
+ self.NumberOfSections = 0
+ self.Sections = None
+
+ # Things debuggers may want to know
+ self.LoadAddress = 0 if address is None else address
+ self.EndLoadAddress = 0
+ self.AddressOfEntryPoint = 0
+ self.TextAddress = 0
+ self.DataAddress = 0
+ self.CodeViewPdb = None
+ self.CodeViewUuid = None
+ self.TeAdjust = 0
+
+ self.dir_name = {
+ 0: 'Export Table',
+ 1: 'Import Table',
+ 2: 'Resource Table',
+ 3: 'Exception Table',
+ 4: 'Certificate Table',
+ 5: 'Relocation Table',
+ 6: 'Debug',
+ 7: 'Architecture',
+ 8: 'Global Ptr',
+ 9: 'TLS Table',
+ 10: 'Load Config Table',
+ 11: 'Bound Import',
+ 12: 'IAT',
+ 13: 'Delay Import Descriptor',
+ 14: 'CLR Runtime Header',
+ 15: 'Reserved',
+ }
+
+ if address is not None:
+ if self.maybe():
+ self.parse()
+
+ def __str__(self):
+ if self.PeHdr is None and self.TeHdr is None:
+ # no PE/COFF header found
+ return "<class: PeTeImage>"
+
+ if self.CodeViewPdb:
+ pdb = f'{self.Machine}`{self.CodeViewPdb}'
+ else:
+ pdb = 'No Debug Info:'
+
+ if self.CodeViewUuid:
+ guid = f'{self.CodeViewUuid}:'
+ else:
+ guid = ''
+
+ slide = f'slide = {self.TeAdjust:d} ' if self.TeAdjust != 0 else ' '
+ res = guid + f'{pdb} load = 0x{self.LoadAddress:08x} ' + slide
+ return res
+
+ def _seek(self, offset):
+ """
+ seek() relative to start of PE/COFF (TE) image
+ """
+ self._file.seek(self.LoadAddress + offset)
+
+ def _read_offset(self, size, offset=None):
+ """
+ read() relative to start of PE/COFF (TE) image
+ if offset is not None then seek() before the read
+ """
+ if offset is not None:
+ self._seek(offset)
+
+ return self._file.read(size)
+
+ def _read_ctype(self, ctype_struct, offset=None):
+ data = self._read_offset(sizeof(ctype_struct), offset)
+ return ctype_struct.from_buffer(bytearray(data), 0)
+
+ def _unsigned(self, i):
+ """return a 32-bit unsigned int (UINT32) """
+ return int.from_bytes(i, byteorder='little', signed=False)
+
+ def pcToPeCoff(self,
+ address,
+ step=None,
+ max_range=None,
+ rom_range=[0xFE800000, 0xFFFFFFFF]):
+ """
+ Given an address search backwards for PE/COFF (TE) header
+ For DXE 4K is probably OK
+ For PEI you might have to search every 4 bytes.
+ """
+ if step is None:
+ step = 0x1000
+
+ if max_range is None:
+ max_range = 0x200000
+
+ if address in range(*rom_range):
+ # The XIP code in the ROM ends up 4 byte aligned.
+ step = 4
+ max_range = min(max_range, 0x100000)
+
+ # Align address to page boundary for memory image search.
+ address = address & ~(step-1)
+ # Search every step backward
+ offset_range = list(range(0, min(max_range, address), step))
+ for offset in offset_range:
+ if self.maybe(address - offset):
+ if self.parse():
+ return True
+
+ return False
+
+ def maybe(self, offset=None):
+ """Probe to see if this offset is likely a PE/COFF or TE file """
+ self.LoadAddress = 0
+ e_magic = self._read_offset(2, offset)
+ header_ok = e_magic == b'MZ' or e_magic == b'VZ'
+ if offset is not None and header_ok:
+ self.LoadAddress = offset
+ return header_ok
+
+ def parse(self):
+ """Parse PE/COFF (TE) debug directory entry """
+ DosHdr = self._read_ctype(EFI_IMAGE_DOS_HEADER, 0)
+ if DosHdr.e_magic == self._unsigned(b'VZ'):
+ # TE image
+ self.TeHdr = self._read_ctype(EFI_TE_IMAGE_HEADER, 0)
+
+ self.TeAdjust = sizeof(self.TeHdr) - self.TeHdr.StrippedSize
+ self.Machine = image_machine_dict.get(self.TeHdr.Machine, None)
+ self.Subsystem = self.TeHdr.Subsystem
+ self.AddressOfEntryPoint = self.TeHdr.AddressOfEntryPoint
+
+ debug_dir_size = self.TeHdr.DataDirectoryDebug.Size
+ debug_dir_offset = (self.TeAdjust +
+ self.TeHdr.DataDirectoryDebug.VirtualAddress)
+ else:
+ if DosHdr.e_magic == self._unsigned(b'MZ'):
+ self.e_lfanew = DosHdr.e_lfanew
+ else:
+ self.e_lfanew = 0
+
+ self.PeHdr = self._read_ctype(
+ EFI_IMAGE_NT_HEADERS64, self.e_lfanew)
+ if self.PeHdr.Signature != self._unsigned(b'PE\0\0'):
+ return False
+
+ if self.PeHdr.OptionalHeader.Magic == \
+ EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC:
+ self.PeHdr = self._read_ctype(
+ EFI_IMAGE_NT_HEADERS32, self.e_lfanew)
+
+ if self.PeHdr.OptionalHeader.NumberOfRvaAndSizes <= \
+ DIRECTORY_DEBUG:
+ return False
+
+ self.Machine = image_machine_dict.get(
+ self.PeHdr.FileHeader.Machine, None)
+ self.Subsystem = self.PeHdr.OptionalHeader.Subsystem
+ self.AddressOfEntryPoint = \
+ self.PeHdr.OptionalHeader.AddressOfEntryPoint
+ self.TeAdjust = 0
+
+ debug_dir_size = self.PeHdr.OptionalHeader.DataDirectory[
+ DIRECTORY_DEBUG].Size
+ debug_dir_offset = self.PeHdr.OptionalHeader.DataDirectory[
+ DIRECTORY_DEBUG].VirtualAddress
+
+ if self.Machine is None or self.Subsystem not in [0, 10, 11, 12]:
+ return False
+
+ self.AddressOfEntryPoint += self.LoadAddress
+
+ self.sections()
+ return self.processDebugDirEntry(debug_dir_offset, debug_dir_size)
+
+ def sections(self):
+ '''Parse the PE/COFF (TE) section table'''
+ if self.Sections is not None:
+ return
+ elif self.TeHdr is not None:
+ self.NumberOfSections = self.TeHdr.NumberOfSections
+ offset = sizeof(EFI_TE_IMAGE_HEADER)
+ elif self.PeHdr is not None:
+ self.NumberOfSections = self.PeHdr.FileHeader.NumberOfSections
+ offset = sizeof(c_uint32) + \
+ sizeof(EFI_IMAGE_FILE_HEADER)
+ offset += self.PeHdr.FileHeader.SizeOfOptionalHeader
+ offset += self.e_lfanew
+ else:
+ return
+
+ self.Sections = EFI_IMAGE_SECTION_HEADER * self.NumberOfSections
+ self.Sections = self._read_ctype(self.Sections, offset)
+
+ for i in range(self.NumberOfSections):
+ name = str(self.Sections[i].Name, 'ascii', 'ignore')
+ addr = self.Sections[i].VirtualAddress
+ addr += self.LoadAddress + self.TeAdjust
+ if name == '.text':
+ self.TextAddress = addr
+ elif name == '.data':
+ self.DataAddress = addr
+
+ end_addr = addr + self.Sections[i].VirtualSize - 1
+ if end_addr > self.EndLoadAddress:
+ self.EndLoadAddress = end_addr
+
+ def sections_to_str(self):
+ # return text summary of sections
+ # name virt addr (virt size) flags:Characteristics
+ result = ''
+ for i in range(self.NumberOfSections):
+ name = str(self.Sections[i].Name, 'ascii', 'ignore')
+ result += f'{name:8s} '
+ result += f'0x{self.Sections[i].VirtualAddress:08X} '
+ result += f'(0x{self.Sections[i].VirtualSize:05X}) '
+ result += f'flags:0x{self.Sections[i].Characteristics:08X}\n'
+
+ return result
+
+ def directory_to_str(self):
+ result = ''
+ if self.TeHdr:
+ debug_size = self.TeHdr.DataDirectoryDebug.Size
+ if debug_size > 0:
+ debug_offset = (self.TeAdjust
+ + self.TeHdr.DataDirectoryDebug.VirtualAddress)
+ result += f"Debug 0x{debug_offset:08X} 0x{debug_size}\n"
+
+ relocation_size = self.TeHdr.DataDirectoryBaseReloc.Size
+ if relocation_size > 0:
+ relocation_offset = (
+ self.TeAdjust
+ + self.TeHdr.DataDirectoryBaseReloc.VirtualAddress)
+ result += f'Relocation 0x{relocation_offset:08X} '
+ result += f' 0x{relocation_size}\n'
+
+ elif self.PeHdr:
+ for i in range(self.PeHdr.OptionalHeader.NumberOfRvaAndSizes):
+ size = self.PeHdr.OptionalHeader.DataDirectory[i].Size
+ if size == 0:
+ continue
+
+ virt_addr = self.PeHdr.OptionalHeader.DataDirectory[
+ i].VirtualAddress
+ name = self.dir_name.get(i, '?')
+ result += f'{name:s} 0x{virt_addr:08X} 0x{size:X}\n'
+
+ return result
+
+ def processDebugDirEntry(self, virt_address, virt_size):
+ """Process PE/COFF Debug Directory Entry"""
+ if (virt_address == 0 or
+ virt_size < sizeof(EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)):
+ return False
+
+ data = bytearray(self._read_offset(virt_size, virt_address))
+ for offset in range(0,
+ virt_size,
+ sizeof(EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)):
+ DirectoryEntry = EFI_IMAGE_DEBUG_DIRECTORY_ENTRY.from_buffer(
+ data[offset:])
+ if DirectoryEntry.Type != 2:
+ continue
+
+ entry = self._read_offset(
+ DirectoryEntry.SizeOfData, DirectoryEntry.RVA + self.TeAdjust)
+ self.CodeViewSig = entry[:4]
+ if self.CodeViewSig == b'MTOC':
+ self.CodeViewUuid = uuid.UUID(bytes_le=entry[4:4+16])
+ PdbOffset = 20
+ elif self.CodeViewSig == b'RSDS':
+ self.CodeViewUuid = uuid.UUID(bytes_le=entry[4:4+16])
+ PdbOffset = 24
+ elif self.CodeViewSig == b'NB10':
+ PdbOffset = 16
+ else:
+ continue
+
+ # can't find documentation about Pdb string encoding?
+ # guessing utf-8 since that will match file systems in macOS
+ # and Linux Windows is UTF-16, or ANSI adjusted for local.
+ # We might need a different value for Windows here?
+ self.CodeViewPdb = entry[PdbOffset:].split(b'\x00')[
+ 0].decode('utf-8')
+ return True
+ return False
+
+
+def main():
+ '''Process arguments as PE/COFF files'''
+ for fname in sys.argv[1:]:
+ with open(fname, 'rb') as f:
+ image = PeTeImage(f)
+ print(image)
+ res = f'EntryPoint = 0x{image.AddressOfEntryPoint:08x} '
+ res += f'TextAddress = 0x{image.TextAddress:08x} '
+ res += f'DataAddress = 0x{image.DataAddress:08x}'
+ print(res)
+ print(image.sections_to_str())
+ print('Data Directories:')
+ print(image.directory_to_str())
+
+
+if __name__ == "__main__":
+ main()
--
2.34.1


Re: [PATCH 1/2] MdeModulePkg: StackOffset must be aligned to a 16-byte boundary in X64

Marvin Häuser
 

Good day,

Thanks for the update!

On 21.03.22 13:43, Kuo, Ted wrote:
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3865
For X64, StackOffset must be aligned to a 16-byte boundary as well as
old stack and new stack. Otherwise, it'll get wrong data from Private
pointer after switching from old stack to new stack.

Cc: Michael D Kinney <michael.d.kinney@...>
Cc: Dandan Bi <dandan.bi@...>
Cc: Liming Gao <gaoliming@...>
Cc: Debkumar De <debkumar.de@...>
Cc: Harry Han <harry.han@...>
Cc: Catharine West <catharine.west@...>
Cc: Jian J Wang <jian.j.wang@...>
Cc: Marvin Häuser <mhaeuser@...>
Signed-off-by: Ted Kuo <ted.kuo@...>
---
MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c b/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
index 3552feda8f..8a2c1ec779 100644
--- a/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
+++ b/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
@@ -823,6 +823,19 @@ PeiCheckAndSwitchStack (
(VOID **)&TemporaryRamSupportPpi
);
if (!EFI_ERROR (Status)) {
+ //
+ // For X64, StackOffset must be aligned to a 16-byte boundary. Otherwise, it'll get wrong data
+ // from Private pointer after switching to new stack.
+ //
+ if ((sizeof (UINTN) == sizeof (UINT64)) && ((StackOffset & 0x0F) == 8)) {
+ if (StackOffsetPositive == TRUE) {
+ StackOffset -= 8;
+ } else {
+ StackOffset += 8;
+ }
+ Private->StackOffset = StackOffset;
+ }
+
Hmm, the overall design (not your patch) looks very broken to me. So, if the PPI exists, it's responsible for the migration of the stack, but it is neither passed where to migrate the stack to, nor does it return where it did migrate it to. This means the StackOffset calculated here may be out-of-sync with what actually happens in the PPI, e.g., if the PPI code is changed. There also is no detailed explanation for the memory layout with FSP separate stack vs bootloader shared stack, so I cannot really give detailed comments quickly. *Sigh*.

Anyhow, as for the patch, I do not understand a few things:

1) Maybe most important of all, what even is broken? Which address is not 16-Byte-aligned to cause this issue in the first place?

2) Why do you align StackOffset? Like yes, if the old top of the stack and the offset to the new top of the stack are both 16-Byte-aligned, then the new top of the stack is 16-Byte-aligned too. However, StackOffset is more of a by-product and TopOfNewStack remains holding the old value. I just don't really understand the idea of this approach.

3) This only works when StackOffset is guaranteed to be 8-Byte-aligned (is it?). As we are dealing with the *top* of the stack (which should be 4K-aligned even for memory protection!), what would be wrong with just aligning down and up instead?
(Same question for the second patch to the FSP code)

4) The next patch performs a similar alignment operation (as mentioned before). However, while this patch aligns the *top* of the stack, the FSP patch aligns the *bottom* of the stack. This may or may not be correct based on your premises. Can you maybe document why this is correct, or even better, try to align the top of the stack in FSP as well? (By transitivity, if you align the top correctly, the bottom should be aligned correctly as well, as every nested call must preserve the alignment invariant)

5) Why does this only happen when the PPI is found? Would that not risk an unaligned stack if the PPI is not provided, the same way it is unaligned now?

6) The comment explicitly mentions X64, but checks only for 64-bit pointer size. So this should affect AArch64 and RISC-V-64 as well. Are they guaranteed to function correctly after this patch (especially with the PPI sync guarantees mentioned earlier)?

7) This only updates FSP code, similar to 5), but to QEMU and friends continue to work?

Thanks!

Best regards,
Marvin

//
// Heap Offset
//
@@ -852,7 +865,10 @@ PeiCheckAndSwitchStack (
// Temporary Ram Support PPI is provided by platform, it will copy
// temporary memory to permanent memory and do stack switching.
// After invoking Temporary Ram Support PPI, the following code's
- // stack is in permanent memory.
+ // stack is in permanent memory. For X64, the bit3:0 of the new stack
+ // produced by TemporaryRamMigration must be aligned with the bit3:0 of
+ // the old stack. Otherwise, it'll break the original stack alignment
+ // after switching to new stack.
//
TemporaryRamSupportPpi->TemporaryRamMigration (
PeiServices,


[PATCH] MdeModulePkg/NvmExpressDxe: fix check for Cap.Css

 

Fix the check for NVMe command set being supported by the controller.

Was problematic with qemu (6.2.0, Debian 1:6.2+dfsg-3), which sets 0xC1
in that register, making the OVMF think the NVMe controller does not
support NVMe.

Uncovered by commit 9dd14fc91c174eae87fd122c7ac70073a363527f, which
changed the number of bits included in the Css register from 4 to 8.

Signed-off-by: Mara Sophie Grosch <littlefox@...>
---
MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
index d87212ffb2..b90c48731c 100644
--- a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
+++ b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
@@ -761,7 +761,7 @@ NvmeControllerInit (
return Status;
}
- if (Private->Cap.Css != 0x01) {
+ if ((Private->Cap.Css & BIT0) == 0) {
DEBUG ((DEBUG_INFO, "NvmeControllerInit: the controller doesn't support NVMe command set\n"));
return EFI_UNSUPPORTED;
}
--
2.35.1


Re: [PATCH 1/2] Add filesystem drivers

Patrick Rudolph
 

Hi Sean,
the Ext4 filesystem code is now available as source from
https://github.com/tianocore/edk2-platforms/tree/master/Features/Ext4Pkg

It looks like the UefiPayloadPkg needs to be generated from multiple
repositories to be feature complete.
I guess starting a UefiPayloadPkg in the platform repo would be the first step.

Regards,
Patrick Rudolph

On Mon, Mar 21, 2022 at 10:46 AM Sean Rhodes <sean@...> wrote:

From: CoolStar <coolstarorganization@...>

Add EXT2/EXT4, exFAT, NTFS filesystem drivers.

Cc: Guo Dong <guo.dong@...>
Cc: Ray Ni <ray.ni@...>
Cc: Maurice Ma <maurice.ma@...>
Cc: Benjamin You <benjamin.you@...>
Signed-off-by: Sean Rhodes <sean@...>
---
FSDrivers/IA32/LICENSE.txt | 47 +++++
FSDrivers/IA32/LICENSE_GPL.txt | 340 +++++++++++++++++++++++++++++++++
FSDrivers/IA32/exfat_ia32.efi | Bin 0 -> 43008 bytes
FSDrivers/IA32/ext2_ia32.efi | Bin 0 -> 19008 bytes
FSDrivers/IA32/ext4_ia32.efi | Bin 0 -> 19520 bytes
FSDrivers/IA32/ntfs_ia32.efi | Bin 0 -> 49152 bytes
FSDrivers/X64/LICENSE.txt | 47 +++++
FSDrivers/X64/LICENSE_GPL.txt | 340 +++++++++++++++++++++++++++++++++
FSDrivers/X64/exfat_ia32.efi | Bin 0 -> 43008 bytes
FSDrivers/X64/exfat_x64.efi | Bin 0 -> 40640 bytes
FSDrivers/X64/ext2_x64.efi | Bin 0 -> 22280 bytes
FSDrivers/X64/ext4_x64.efi | Bin 0 -> 22792 bytes
FSDrivers/X64/ntfs_x64.efi | Bin 0 -> 47168 bytes
FSDrivers/exfat.inf | 27 +++
FSDrivers/ext2.inf | 25 +++
FSDrivers/ext4.inf | 25 +++
FSDrivers/ntfs.inf | 27 +++
17 files changed, 878 insertions(+)
create mode 100644 FSDrivers/IA32/LICENSE.txt
create mode 100644 FSDrivers/IA32/LICENSE_GPL.txt
create mode 100644 FSDrivers/IA32/exfat_ia32.efi
create mode 100644 FSDrivers/IA32/ext2_ia32.efi
create mode 100644 FSDrivers/IA32/ext4_ia32.efi
create mode 100644 FSDrivers/IA32/ntfs_ia32.efi
create mode 100644 FSDrivers/X64/LICENSE.txt
create mode 100644 FSDrivers/X64/LICENSE_GPL.txt
create mode 100644 FSDrivers/X64/exfat_ia32.efi
create mode 100644 FSDrivers/X64/exfat_x64.efi
create mode 100644 FSDrivers/X64/ext2_x64.efi
create mode 100644 FSDrivers/X64/ext4_x64.efi
create mode 100644 FSDrivers/X64/ntfs_x64.efi
create mode 100644 FSDrivers/exfat.inf
create mode 100644 FSDrivers/ext2.inf
create mode 100644 FSDrivers/ext4.inf
create mode 100644 FSDrivers/ntfs.inf

diff --git a/FSDrivers/IA32/LICENSE.txt b/FSDrivers/IA32/LICENSE.txt
new file mode 100644
index 0000000000..cdeae2b89e
--- /dev/null
+++ b/FSDrivers/IA32/LICENSE.txt
@@ -0,0 +1,47 @@
+Licensing for the filesystem drivers is complex. Three different licenses
+apply to various parts of the code:
+
+* Christoph Pfisterer's original file system wrapper (FSW) code is covered
+ by a BSD-style license. Many of the source files with names that take the
+ form fsw_*.[ch] are so licensed, but this is NOT generally true of
+ filesystem-specific files (e.g., fsw_ext2.c or fsw_btrfs.c).
+
+* Certain filesystem drivers are licensed under the GPLv2, either because
+ they borrow code from the Linux kernel or because a developer (typically
+ Oracle) applied the GPLv2 license to them. This is true of the ext2fs,
+ ext4fs, ReiserFS, HFS+, and ISO-9660 drivers.
+
+* At least one filesystem driver (Btrfs) uses code taken from GRUB, and so
+ uses the GPLv3 (or later) license.
+
+Note that the GPLv2 and GPLv3 are, ironically, not compatible licenses.
+Thus, code from GPLv2 and GPLv3 projects should not be mixed. The BSD
+license used by Pfisterer's original code is compatible with both versions
+of the GPL, so the fact that both GPLv2 and GPLv3 drivers is built upon it
+is OK. If you intend to contribute to this project's drivers or use the
+code yourself, please keep this fact in mind.
+
+The below was written by Christoph Pfisterer with respect to his original
+code:
+
+ File System Wrapper License
+=============================
+
+The various parts of the File System Wrapper source code come from
+different sources and may carry different licenses. Here's a quick
+account of the situation:
+
+ * The core code was written from scratch and is covered by a
+ BSD-style license.
+
+ * The EFI host driver was written from scratch, possibly using code
+ from the TianoCore project and Intel's EFI Application Toolkit. It
+ is covered by a BSD-style license.
+
+ * The ext2 and reiserfs file system drivers use definitions from the
+ Linux kernel source. The actual code was written from scratch,
+ using multiple sources for reference. These drivers are covered by
+ the GNU GPL.
+
+For more details, see each file's boilerplate comment. The full text
+of the GNU GPL is in the file LICENSE_GPL.txt.
diff --git a/FSDrivers/IA32/LICENSE_GPL.txt b/FSDrivers/IA32/LICENSE_GPL.txt
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/FSDrivers/IA32/LICENSE_GPL.txt
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/FSDrivers/IA32/exfat_ia32.efi b/FSDrivers/IA32/exfat_ia32.efi
new file mode 100644
index 0000000000000000000000000000000000000000..d293a24ccdf14e8b7e4d82aab3499bfadeefc25d
GIT binary patch
literal 43008
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

literal 0
HcmV?d00001

diff --git a/FSDrivers/IA32/ext2_ia32.efi b/FSDrivers/IA32/ext2_ia32.efi
new file mode 100644
index 0000000000000000000000000000000000000000..b512afe8289a0618e1d1d159380dbff8a177454f
GIT binary patch
literal 19008
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

literal 0
HcmV?d00001

diff --git a/FSDrivers/IA32/ext4_ia32.efi b/FSDrivers/IA32/ext4_ia32.efi
new file mode 100644
index 0000000000000000000000000000000000000000..445b89c9164cb9e9e2f0d9c783a3d9054cb99298
GIT binary patch
literal 19520
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

literal 0
HcmV?d00001

diff --git a/FSDrivers/IA32/ntfs_ia32.efi b/FSDrivers/IA32/ntfs_ia32.efi
new file mode 100644
index 0000000000000000000000000000000000000000..edea0d6eb2261053e23448ec54f0ec2772379ff5
GIT binary patch
literal 49152
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
F_!A_c>i7Tv

literal 0
HcmV?d00001

diff --git a/FSDrivers/X64/LICENSE.txt b/FSDrivers/X64/LICENSE.txt
new file mode 100644
index 0000000000..cdeae2b89e
--- /dev/null
+++ b/FSDrivers/X64/LICENSE.txt
@@ -0,0 +1,47 @@
+Licensing for the filesystem drivers is complex. Three different licenses
+apply to various parts of the code:
+
+* Christoph Pfisterer's original file system wrapper (FSW) code is covered
+ by a BSD-style license. Many of the source files with names that take the
+ form fsw_*.[ch] are so licensed, but this is NOT generally true of
+ filesystem-specific files (e.g., fsw_ext2.c or fsw_btrfs.c).
+
+* Certain filesystem drivers are licensed under the GPLv2, either because
+ they borrow code from the Linux kernel or because a developer (typically
+ Oracle) applied the GPLv2 license to them. This is true of the ext2fs,
+ ext4fs, ReiserFS, HFS+, and ISO-9660 drivers.
+
+* At least one filesystem driver (Btrfs) uses code taken from GRUB, and so
+ uses the GPLv3 (or later) license.
+
+Note that the GPLv2 and GPLv3 are, ironically, not compatible licenses.
+Thus, code from GPLv2 and GPLv3 projects should not be mixed. The BSD
+license used by Pfisterer's original code is compatible with both versions
+of the GPL, so the fact that both GPLv2 and GPLv3 drivers is built upon it
+is OK. If you intend to contribute to this project's drivers or use the
+code yourself, please keep this fact in mind.
+
+The below was written by Christoph Pfisterer with respect to his original
+code:
+
+ File System Wrapper License
+=============================
+
+The various parts of the File System Wrapper source code come from
+different sources and may carry different licenses. Here's a quick
+account of the situation:
+
+ * The core code was written from scratch and is covered by a
+ BSD-style license.
+
+ * The EFI host driver was written from scratch, possibly using code
+ from the TianoCore project and Intel's EFI Application Toolkit. It
+ is covered by a BSD-style license.
+
+ * The ext2 and reiserfs file system drivers use definitions from the
+ Linux kernel source. The actual code was written from scratch,
+ using multiple sources for reference. These drivers are covered by
+ the GNU GPL.
+
+For more details, see each file's boilerplate comment. The full text
+of the GNU GPL is in the file LICENSE_GPL.txt.
diff --git a/FSDrivers/X64/LICENSE_GPL.txt b/FSDrivers/X64/LICENSE_GPL.txt
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/FSDrivers/X64/LICENSE_GPL.txt
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/FSDrivers/X64/exfat_ia32.efi b/FSDrivers/X64/exfat_ia32.efi
new file mode 100644
index 0000000000000000000000000000000000000000..d293a24ccdf14e8b7e4d82aab3499bfadeefc25d
GIT binary patch
literal 43008
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

literal 0
HcmV?d00001

diff --git a/FSDrivers/X64/exfat_x64.efi b/FSDrivers/X64/exfat_x64.efi
new file mode 100644
index 0000000000000000000000000000000000000000..5e1f8a8010ceee950fc31ea1d6701df8519f3683
GIT binary patch
literal 40640
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

literal 0
HcmV?d00001

diff --git a/FSDrivers/X64/ext2_x64.efi b/FSDrivers/X64/ext2_x64.efi
new file mode 100644
index 0000000000000000000000000000000000000000..1da0928d38c0713e4a0e8eaa71d2edae08aaaa47
GIT binary patch
literal 22280
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

literal 0
HcmV?d00001

diff --git a/FSDrivers/X64/ext4_x64.efi b/FSDrivers/X64/ext4_x64.efi
new file mode 100644
index 0000000000000000000000000000000000000000..bcb65fc0ffcaea918b49d77246a0c31236c5e7dd
GIT binary patch
literal 22792
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
H9`wHfdAf{(

literal 0
HcmV?d00001

diff --git a/FSDrivers/X64/ntfs_x64.efi b/FSDrivers/X64/ntfs_x64.efi
new file mode 100644
index 0000000000000000000000000000000000000000..5aaa97aca06fde7ea75f2475f155487b2fa3fb8d
GIT binary patch
literal 47168
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
b-uTk^@>q_S#+C8v_}2LDc!z&h4aa{01X??2

literal 0
HcmV?d00001

diff --git a/FSDrivers/exfat.inf b/FSDrivers/exfat.inf
new file mode 100644
index 0000000000..caf940cfda
--- /dev/null
+++ b/FSDrivers/exfat.inf
@@ -0,0 +1,27 @@
+# ReadOnly exFAT filesystem driver
+# From https://efi.akeo.ie/ v1.5
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = exfat
+ FILE_GUID = CB683001-379F-48C7-B7B6-707D29454BF5
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+VALID_ARCHITECTURES = X64 IA32
+
+[Binaries.X64]
+ PE32|X64/exfat_x64.efi|*
+
+[Binaries.IA32]
+ PE32|IA32/exfat_ia32.efi|*
+
+
diff --git a/FSDrivers/ext2.inf b/FSDrivers/ext2.inf
new file mode 100644
index 0000000000..67a985e385
--- /dev/null
+++ b/FSDrivers/ext2.inf
@@ -0,0 +1,25 @@
+# EXT2 filesystem driver. See */LICENSE.txt for details.
+# https://www.rodsbooks.com/refind/ v0.12
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = ext2
+ FILE_GUID = 8EC49C43-D1C4-4E6C-98BF-232CA5D89A1B
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+VALID_ARCHITECTURES = X64 IA32
+
+[Binaries.X64]
+ PE32|X64/ext2_x64.efi|*
+
+[Binaries.IA32]
+ PE32|IA32/ext2_ia32.efi|*
+
diff --git a/FSDrivers/ext4.inf b/FSDrivers/ext4.inf
new file mode 100644
index 0000000000..c9d0807251
--- /dev/null
+++ b/FSDrivers/ext4.inf
@@ -0,0 +1,25 @@
+# EXT4 filesystem driver. See */LICENSE.txt for details.
+# https://www.rodsbooks.com/refind/ v0.12
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = ext4
+ FILE_GUID = 9d380387-a15a-4053-ae19-ff3495b6d0d5
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+VALID_ARCHITECTURES = X64 IA32
+
+[Binaries.X64]
+ PE32|X64/ext4_x64.efi|*
+
+[Binaries.IA32]
+ PE32|IA32/ext4_ia32.efi|*
+
diff --git a/FSDrivers/ntfs.inf b/FSDrivers/ntfs.inf
new file mode 100644
index 0000000000..804f655cd7
--- /dev/null
+++ b/FSDrivers/ntfs.inf
@@ -0,0 +1,27 @@
+# ReadOnly NTFS filesystem driver
+# From https://efi.akeo.ie/ v1.5
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = ntfs
+ FILE_GUID = 2282efd0-678b-4753-8d06-200d5940285d
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+VALID_ARCHITECTURES = X64 IA32
+
+[Binaries.X64]
+ PE32|X64/ntfs_x64.efi|*
+
+[Binaries.IA32]
+ PE32|IA32/ntfs_ia32.efi|*
+
+
--
2.32.0






[PATCH] UefiPayloadPkg: Fix architecture in the build instruction

Akihiko Odaki <akihiko.odaki@...>
 

Signed-off-by: Akihiko Odaki <akihiko.odaki@...>
---
UefiPayloadPkg/BuildAndIntegrationInstructions.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/UefiPayloadPkg/BuildAndIntegrationInstructions.txt b/UefiPaylo=
adPkg/BuildAndIntegrationInstructions.txt
index 61d31f1020..01b3d7f992 100644
--- a/UefiPayloadPkg/BuildAndIntegrationInstructions.txt
+++ b/UefiPayloadPkg/BuildAndIntegrationInstructions.txt
@@ -38,7 +38,7 @@ B. HOW TO BUILD
> edksetup.bat=0D
=0D
For pure X64 build:=0D
- > build -a x64 -p UefiPayloadPkg\UefiPayloadPkg.dsc -b <BuildType> -t <=
ToolChain>=0D
+ > build -a X64 -p UefiPayloadPkg\UefiPayloadPkg.dsc -b <BuildType> -t <=
ToolChain>=0D
-D BOOTLOADER=3D<Bootloader>=0D
=0D
For X64 build with IA32 entry point:=0D
--=20
2.35.1


Re: [PATCH 1/2] Add filesystem drivers

Michael D Kinney
 

Hi Sean,

Which repo is the patch targeted to?

We do not add any binaries to edk2 repo.

We have edk2-non-osi repo for binaries if the licenses are accepted by that repos maintainers.

Mike

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Sean Rhodes
Sent: Monday, March 21, 2022 2:47 AM
To: devel@edk2.groups.io
Cc: CoolStar <coolstarorganization@...>; Dong, Guo <guo.dong@...>; Ni, Ray <ray.ni@...>; Ma, Maurice
<maurice.ma@...>; You, Benjamin <benjamin.you@...>; Rhodes, Sean <sean@...>
Subject: [edk2-devel] [PATCH 1/2] Add filesystem drivers

From: CoolStar <coolstarorganization@...>

Add EXT2/EXT4, exFAT, NTFS filesystem drivers.

Cc: Guo Dong <guo.dong@...>
Cc: Ray Ni <ray.ni@...>
Cc: Maurice Ma <maurice.ma@...>
Cc: Benjamin You <benjamin.you@...>
Signed-off-by: Sean Rhodes <sean@...>
---
FSDrivers/IA32/LICENSE.txt | 47 +++++
FSDrivers/IA32/LICENSE_GPL.txt | 340 +++++++++++++++++++++++++++++++++
FSDrivers/IA32/exfat_ia32.efi | Bin 0 -> 43008 bytes
FSDrivers/IA32/ext2_ia32.efi | Bin 0 -> 19008 bytes
FSDrivers/IA32/ext4_ia32.efi | Bin 0 -> 19520 bytes
FSDrivers/IA32/ntfs_ia32.efi | Bin 0 -> 49152 bytes
FSDrivers/X64/LICENSE.txt | 47 +++++
FSDrivers/X64/LICENSE_GPL.txt | 340 +++++++++++++++++++++++++++++++++
FSDrivers/X64/exfat_ia32.efi | Bin 0 -> 43008 bytes
FSDrivers/X64/exfat_x64.efi | Bin 0 -> 40640 bytes
FSDrivers/X64/ext2_x64.efi | Bin 0 -> 22280 bytes
FSDrivers/X64/ext4_x64.efi | Bin 0 -> 22792 bytes
FSDrivers/X64/ntfs_x64.efi | Bin 0 -> 47168 bytes
FSDrivers/exfat.inf | 27 +++
FSDrivers/ext2.inf | 25 +++
FSDrivers/ext4.inf | 25 +++
FSDrivers/ntfs.inf | 27 +++
17 files changed, 878 insertions(+)
create mode 100644 FSDrivers/IA32/LICENSE.txt
create mode 100644 FSDrivers/IA32/LICENSE_GPL.txt
create mode 100644 FSDrivers/IA32/exfat_ia32.efi
create mode 100644 FSDrivers/IA32/ext2_ia32.efi
create mode 100644 FSDrivers/IA32/ext4_ia32.efi
create mode 100644 FSDrivers/IA32/ntfs_ia32.efi
create mode 100644 FSDrivers/X64/LICENSE.txt
create mode 100644 FSDrivers/X64/LICENSE_GPL.txt
create mode 100644 FSDrivers/X64/exfat_ia32.efi
create mode 100644 FSDrivers/X64/exfat_x64.efi
create mode 100644 FSDrivers/X64/ext2_x64.efi
create mode 100644 FSDrivers/X64/ext4_x64.efi
create mode 100644 FSDrivers/X64/ntfs_x64.efi
create mode 100644 FSDrivers/exfat.inf
create mode 100644 FSDrivers/ext2.inf
create mode 100644 FSDrivers/ext4.inf
create mode 100644 FSDrivers/ntfs.inf

diff --git a/FSDrivers/IA32/LICENSE.txt b/FSDrivers/IA32/LICENSE.txt
new file mode 100644
index 0000000000..cdeae2b89e
--- /dev/null
+++ b/FSDrivers/IA32/LICENSE.txt
@@ -0,0 +1,47 @@
+Licensing for the filesystem drivers is complex. Three different licenses
+apply to various parts of the code:
+
+* Christoph Pfisterer's original file system wrapper (FSW) code is covered
+ by a BSD-style license. Many of the source files with names that take the
+ form fsw_*.[ch] are so licensed, but this is NOT generally true of
+ filesystem-specific files (e.g., fsw_ext2.c or fsw_btrfs.c).
+
+* Certain filesystem drivers are licensed under the GPLv2, either because
+ they borrow code from the Linux kernel or because a developer (typically
+ Oracle) applied the GPLv2 license to them. This is true of the ext2fs,
+ ext4fs, ReiserFS, HFS+, and ISO-9660 drivers.
+
+* At least one filesystem driver (Btrfs) uses code taken from GRUB, and so
+ uses the GPLv3 (or later) license.
+
+Note that the GPLv2 and GPLv3 are, ironically, not compatible licenses.
+Thus, code from GPLv2 and GPLv3 projects should not be mixed. The BSD
+license used by Pfisterer's original code is compatible with both versions
+of the GPL, so the fact that both GPLv2 and GPLv3 drivers is built upon it
+is OK. If you intend to contribute to this project's drivers or use the
+code yourself, please keep this fact in mind.
+
+The below was written by Christoph Pfisterer with respect to his original
+code:
+
+ File System Wrapper License
+=============================
+
+The various parts of the File System Wrapper source code come from
+different sources and may carry different licenses. Here's a quick
+account of the situation:
+
+ * The core code was written from scratch and is covered by a
+ BSD-style license.
+
+ * The EFI host driver was written from scratch, possibly using code
+ from the TianoCore project and Intel's EFI Application Toolkit. It
+ is covered by a BSD-style license.
+
+ * The ext2 and reiserfs file system drivers use definitions from the
+ Linux kernel source. The actual code was written from scratch,
+ using multiple sources for reference. These drivers are covered by
+ the GNU GPL.
+
+For more details, see each file's boilerplate comment. The full text
+of the GNU GPL is in the file LICENSE_GPL.txt.
diff --git a/FSDrivers/IA32/LICENSE_GPL.txt b/FSDrivers/IA32/LICENSE_GPL.txt
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/FSDrivers/IA32/LICENSE_GPL.txt
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+


+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+


+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+


+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+


+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+


+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/FSDrivers/IA32/exfat_ia32.efi b/FSDrivers/IA32/exfat_ia32.efi
new file mode 100644
index 0000000000000000000000000000000000000000..d293a24ccdf14e8b7e4d82aab3499bfadeefc25d
GIT binary patch
literal 43008
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

literal 0
HcmV?d00001

diff --git a/FSDrivers/IA32/ext2_ia32.efi b/FSDrivers/IA32/ext2_ia32.efi
new file mode 100644
index 0000000000000000000000000000000000000000..b512afe8289a0618e1d1d159380dbff8a177454f
GIT binary patch
literal 19008
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

literal 0
HcmV?d00001

diff --git a/FSDrivers/IA32/ext4_ia32.efi b/FSDrivers/IA32/ext4_ia32.efi
new file mode 100644
index 0000000000000000000000000000000000000000..445b89c9164cb9e9e2f0d9c783a3d9054cb99298
GIT binary patch
literal 19520
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

literal 0
HcmV?d00001

diff --git a/FSDrivers/IA32/ntfs_ia32.efi b/FSDrivers/IA32/ntfs_ia32.efi
new file mode 100644
index 0000000000000000000000000000000000000000..edea0d6eb2261053e23448ec54f0ec2772379ff5
GIT binary patch
literal 49152
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