diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index 355734a..dec608f 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -13,6 +13,7 @@
 # GNU General Public License for more details.
 #
 subdirs-y += loaders
+subdirs-y += gnat
 
 
 ifneq ($(CONFIG_BOOTBLOCK_CUSTOM),y)
diff --git a/src/lib/gnat/COPYING.RUNTIME b/src/lib/gnat/COPYING.RUNTIME
new file mode 100644
index 0000000..e1b3c69
--- /dev/null
+++ b/src/lib/gnat/COPYING.RUNTIME
@@ -0,0 +1,73 @@
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
+
diff --git a/src/lib/gnat/COPYING3 b/src/lib/gnat/COPYING3
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/src/lib/gnat/COPYING3
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  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
+them 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 prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  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.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU 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 that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  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.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+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.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     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
+state 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 3 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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program 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, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU 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 Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/src/lib/gnat/Makefile.inc b/src/lib/gnat/Makefile.inc
new file mode 100644
index 0000000..6ba274a
--- /dev/null
+++ b/src/lib/gnat/Makefile.inc
@@ -0,0 +1,62 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2016 Nico Huber <nico.h@gmx.de>
+##
+## 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; version 2 of the License.
+##
+## 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.
+##
+
+define libgnat-template
+# $1 arch
+
+additional-dirs += $$(obj)/libgnat-$(1)/adainclude
+additional-dirs += $$(obj)/libgnat-$(1)/adalib
+
+ADAFLAGS_libgnat-$(1) := \
+	--RTS=$$(obj)/libgnat-$(1)/ \
+	-gnatg \
+	-gnatpg \
+	-I$$(src)/lib/gnat/ \
+
+libgnat-$(1)-y += a-unccon.ads
+libgnat-$(1)-y += ada.ads
+libgnat-$(1)-y += g-souinf.ads
+libgnat-$(1)-y += gnat.ads
+libgnat-$(1)-y += i-c.adb
+libgnat-$(1)-y += i-c.ads
+libgnat-$(1)-y += interfac.ads
+libgnat-$(1)-y += s-atacco.ads
+libgnat-$(1)-y += s-imenne.adb
+libgnat-$(1)-y += s-imenne.ads
+libgnat-$(1)-y += s-maccod.ads
+libgnat-$(1)-y += s-parame.ads
+libgnat-$(1)-y += s-stoele.adb
+libgnat-$(1)-y += s-stoele.ads
+libgnat-$(1)-y += s-unstyp.ads
+libgnat-$(1)-y += system.ads
+
+# Copy bodies too for inlining
+$$(obj)/libgnat-$(1)/libgnat.a: $$$$(libgnat-$(1)-objs)
+	cp $$(libgnat-$(1)-srcs) $$(libgnat-$(1)-extra-specs) \
+	   $$(obj)/libgnat-$(1)/adainclude/
+	cp $$(libgnat-$(1)-alis) \
+	   $$(obj)/libgnat-$(1)/adalib/
+	rm -f $$@
+	@printf "    AR         $$(subst $$(obj)/,,$$(@))\n"
+	$$(AR_libgnat-$(1)) cr $$@ $$^
+
+endef
+
+
+$(foreach arch,$(standard-archs), \
+	$(eval $(call define_class,libgnat-$(arch),$(arch))))
+
+$(foreach arch,$(standard-archs), \
+	$(eval $(call libgnat-template,$(arch))))
diff --git a/src/lib/gnat/a-unccon.ads b/src/lib/gnat/a-unccon.ads
new file mode 100644
index 0000000..ffa84d9
--- /dev/null
+++ b/src/lib/gnat/a-unccon.ads
@@ -0,0 +1,23 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--              A D A . U N C H E C K E D _ C O N V E R S I O N             --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT.  In accordance with the copyright of that document, you can freely --
+-- copy and modify this specification,  provided that if you redistribute a --
+-- modified version,  any changes that you have made are clearly indicated. --
+--                                                                          --
+------------------------------------------------------------------------------
+
+generic
+   type Source (<>) is limited private;
+   type Target (<>) is limited private;
+
+function Ada.Unchecked_Conversion (S : Source) return Target;
+
+pragma Pure (Unchecked_Conversion);
+pragma Import (Intrinsic, Unchecked_Conversion);
diff --git a/src/lib/gnat/ada.ads b/src/lib/gnat/ada.ads
new file mode 100644
index 0000000..8c86011
--- /dev/null
+++ b/src/lib/gnat/ada.ads
@@ -0,0 +1,19 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                                  A D A                                   --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT.  In accordance with the copyright of that document, you can freely --
+-- copy and modify this specification,  provided that if you redistribute a --
+-- modified version,  any changes that you have made are clearly indicated. --
+--                                                                          --
+------------------------------------------------------------------------------
+
+package Ada is
+   pragma Pure;
+
+end Ada;
diff --git a/src/lib/gnat/g-souinf.ads b/src/lib/gnat/g-souinf.ads
new file mode 100644
index 0000000..610db23
--- /dev/null
+++ b/src/lib/gnat/g-souinf.ads
@@ -0,0 +1,92 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                     G N A T . S O U R C E _ I N F O                      --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 2000-2014, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This package provides some useful utility subprograms that provide access
+--  to source code information known at compile time. These subprograms are
+--  intrinsic operations that provide information known to the compiler in
+--  a form that can be embedded into the source program for identification
+--  and logging purposes. For example, an exception handler can print out
+--  the name of the source file in which the exception is handled.
+
+package GNAT.Source_Info is
+   pragma Preelaborate;
+   --  Note that this unit is Preelaborate, but not Pure, that's because the
+   --  functions here such as Line are clearly not pure functions, and normally
+   --  we mark intrinsic functions in a Pure unit as Pure, even though they are
+   --  imported.
+   --
+   --  Historical note: this used to be Pure, but that was when we marked all
+   --  intrinsics as not Pure, even in Pure units, so no problems arose.
+
+   function File return String with
+     Import, Convention => Intrinsic;
+   --  Return the name of the current file, not including the path information.
+   --  The result is considered to be a static string constant.
+
+   function Line return Positive with
+     Import, Convention => Intrinsic;
+   --  Return the current input line number. The result is considered to be a
+   --  static expression.
+
+   function Source_Location return String with
+     Import, Convention => Intrinsic;
+   --  Return a string literal of the form "name:line", where name is the
+   --  current source file name without path information, and line is the
+   --  current line number. In the event that instantiations are involved,
+   --  additional suffixes of the same form are appended after the separating
+   --  string " instantiated at ". The result is considered to be a static
+   --  string constant.
+
+   function Enclosing_Entity return String with
+     Import, Convention => Intrinsic;
+   --  Return the name of the current subprogram, package, task, entry or
+   --  protected subprogram. The string is in exactly the form used for the
+   --  declaration of the entity (casing and encoding conventions), and is
+   --  considered to be a static string constant. The name is fully qualified
+   --  using periods where possible (this is not always possible, notably in
+   --  the case of entities appearing in unnamed block statements.)
+   --
+   --  Note: if this function is used at the outer level of a generic package,
+   --  the string returned will be the name of the instance, not the generic
+   --  package itself. This is useful in identifying and logging information
+   --  from within generic templates.
+
+   function Compilation_Date return String with
+     Import, Convention => Intrinsic;
+   --  Returns date of compilation as a static string "mmm dd yyyy". This is
+   --  in local time form, and is exactly compatible with C macro __DATE__.
+
+   function Compilation_Time return String with
+     Import, Convention => Intrinsic;
+   --  Returns GMT time of compilation as a static string "hh:mm:ss". This is
+   --  in local time form, and is exactly compatible with C macro __TIME__.
+
+end GNAT.Source_Info;
diff --git a/src/lib/gnat/gnat.ads b/src/lib/gnat/gnat.ads
new file mode 100644
index 0000000..a0807b6
--- /dev/null
+++ b/src/lib/gnat/gnat.ads
@@ -0,0 +1,37 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                                 G N A T                                  --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--                     Copyright (C) 1992-2014, AdaCore                     --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This is the parent package for a library of useful units provided with GNAT
+
+package GNAT is
+   pragma Pure;
+
+end GNAT;
diff --git a/src/lib/gnat/i-c.adb b/src/lib/gnat/i-c.adb
new file mode 100644
index 0000000..6926a9e
--- /dev/null
+++ b/src/lib/gnat/i-c.adb
@@ -0,0 +1,73 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--                         I N T E R F A C E S . C                          --
+--                                                                          --
+--                                 B o d y                                  --
+--                                                                          --
+--          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+package body Interfaces.C is
+
+   -----------------------
+   -- Is_Nul_Terminated --
+   -----------------------
+
+   --  Case of char_array
+
+   function Is_Nul_Terminated (Item : char_array) return Boolean is
+   begin
+      for J in Item'Range loop
+         if Item (J) = nul then
+            return True;
+         end if;
+      end loop;
+
+      return False;
+   end Is_Nul_Terminated;
+
+   ------------
+   -- To_Ada --
+   ------------
+
+   --  Convert char to Character
+
+   function To_Ada (Item : char) return Character is
+   begin
+      return Character'Val (char'Pos (Item));
+   end To_Ada;
+
+   ----------
+   -- To_C --
+   ----------
+
+   --  Convert Character to char
+
+   function To_C (Item : Character) return char is
+   begin
+      return char'Val (Character'Pos (Item));
+   end To_C;
+
+end Interfaces.C;
diff --git a/src/lib/gnat/i-c.ads b/src/lib/gnat/i-c.ads
new file mode 100644
index 0000000..1403fce
--- /dev/null
+++ b/src/lib/gnat/i-c.ads
@@ -0,0 +1,78 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--                         I N T E R F A C E S . C                          --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT.  In accordance with the copyright of that document, you can freely --
+-- copy and modify this specification,  provided that if you redistribute a --
+-- modified version,  any changes that you have made are clearly indicated. --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with System.Parameters;
+
+package Interfaces.C is
+   pragma Pure;
+
+   --  Declaration's based on C's <limits.h>
+
+   CHAR_BIT  : constant := 8;
+   SCHAR_MIN : constant := -128;
+   SCHAR_MAX : constant := 127;
+   UCHAR_MAX : constant := 255;
+
+   --  Signed and Unsigned Integers. Note that in GNAT, we have ensured that
+   --  the standard predefined Ada types correspond to the standard C types
+
+   --  Note: the Integer qualifications used in the declaration of type long
+   --  avoid ambiguities when compiling in the presence of s-auxdec.ads and
+   --  a non-private system.address type.
+
+   type int   is new Integer;
+   type short is new Short_Integer;
+   type long  is range -(2 ** (System.Parameters.long_bits - Integer'(1)))
+     .. +(2 ** (System.Parameters.long_bits - Integer'(1))) - 1;
+
+   type signed_char is range SCHAR_MIN .. SCHAR_MAX;
+   for signed_char'Size use CHAR_BIT;
+
+   type unsigned       is mod 2 ** int'Size;
+   type unsigned_short is mod 2 ** short'Size;
+   type unsigned_long  is mod 2 ** long'Size;
+
+   type unsigned_char is mod (UCHAR_MAX + 1);
+   for unsigned_char'Size use CHAR_BIT;
+
+   subtype plain_char is unsigned_char; -- ??? should be parameterized
+
+   --  Note: the Integer qualifications used in the declaration of ptrdiff_t
+   --  avoid ambiguities when compiling in the presence of s-auxdec.ads and
+   --  a non-private system.address type.
+
+   type ptrdiff_t is
+     range -(2 ** (System.Parameters.ptr_bits - Integer'(1))) ..
+           +(2 ** (System.Parameters.ptr_bits - Integer'(1)) - 1);
+
+   type size_t is mod 2 ** System.Parameters.ptr_bits;
+
+   ----------------------------
+   -- Characters and Strings --
+   ----------------------------
+
+   type char is new Character;
+
+   nul : constant char := char'First;
+
+   function To_C   (Item : Character) return char;
+   function To_Ada (Item : char)      return Character;
+
+   type char_array is array (size_t range <>) of aliased char;
+   for char_array'Component_Size use CHAR_BIT;
+
+   function Is_Nul_Terminated (Item : char_array) return Boolean;
+
+end Interfaces.C;
diff --git a/src/lib/gnat/interfac.ads b/src/lib/gnat/interfac.ads
new file mode 100644
index 0000000..e7e196c
--- /dev/null
+++ b/src/lib/gnat/interfac.ads
@@ -0,0 +1,161 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--                           I N T E R F A C E S                            --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 2002-2014, Free Software Foundation, Inc.         --
+--                                                                          --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT. The copyright notice above, and the license provisions that follow --
+-- apply solely to the implementation dependent sections of this file.      --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+pragma Compiler_Unit_Warning;
+
+package Interfaces is
+   pragma Pure;
+
+   --  All identifiers in this unit are implementation defined
+
+   pragma Implementation_Defined;
+
+   type Integer_8  is range -2 **  7 .. 2 **  7 - 1;
+   for Integer_8'Size use  8;
+
+   type Integer_16 is range -2 ** 15 .. 2 ** 15 - 1;
+   for Integer_16'Size use 16;
+
+   type Integer_32 is range -2 ** 31 .. 2 ** 31 - 1;
+   for Integer_32'Size use 32;
+
+   type Integer_64 is new Long_Long_Integer;
+   for Integer_64'Size use 64;
+   --  Note: we use Long_Long_Integer'First instead of -2 ** 63 to allow this
+   --  unit to compile when using custom target configuration files where the
+   --  maximum integer is 32 bits. This is useful for static analysis tools
+   --  such as SPARK or CodePeer. In the normal case Long_Long_Integer is
+   --  always 64-bits so we get the desired 64-bit type.
+
+   type Unsigned_8  is mod 2 ** 8;
+   for Unsigned_8'Size use  8;
+
+   type Unsigned_16 is mod 2 ** 16;
+   for Unsigned_16'Size use 16;
+
+   type Unsigned_32 is mod 2 ** 32;
+   for Unsigned_32'Size use 32;
+
+   type Unsigned_64 is mod 2 ** Long_Long_Integer'Size;
+   for Unsigned_64'Size use 64;
+   --  See comment on Integer_64 above
+
+   function Shift_Left
+     (Value  : Unsigned_8;
+      Amount : Natural) return Unsigned_8;
+
+   function Shift_Right
+     (Value  : Unsigned_8;
+      Amount : Natural) return Unsigned_8;
+
+   function Shift_Right_Arithmetic
+     (Value  : Unsigned_8;
+      Amount : Natural) return Unsigned_8;
+
+   function Rotate_Left
+     (Value  : Unsigned_8;
+      Amount : Natural) return Unsigned_8;
+
+   function Rotate_Right
+     (Value  : Unsigned_8;
+      Amount : Natural) return Unsigned_8;
+
+   function Shift_Left
+     (Value  : Unsigned_16;
+      Amount : Natural) return Unsigned_16;
+
+   function Shift_Right
+     (Value  : Unsigned_16;
+      Amount : Natural) return Unsigned_16;
+
+   function Shift_Right_Arithmetic
+     (Value  : Unsigned_16;
+      Amount : Natural) return Unsigned_16;
+
+   function Rotate_Left
+     (Value  : Unsigned_16;
+      Amount : Natural) return Unsigned_16;
+
+   function Rotate_Right
+     (Value  : Unsigned_16;
+      Amount : Natural) return Unsigned_16;
+
+   function Shift_Left
+     (Value  : Unsigned_32;
+      Amount : Natural) return Unsigned_32;
+
+   function Shift_Right
+     (Value  : Unsigned_32;
+      Amount : Natural) return Unsigned_32;
+
+   function Shift_Right_Arithmetic
+     (Value  : Unsigned_32;
+      Amount : Natural) return Unsigned_32;
+
+   function Rotate_Left
+     (Value  : Unsigned_32;
+      Amount : Natural) return Unsigned_32;
+
+   function Rotate_Right
+     (Value  : Unsigned_32;
+      Amount : Natural) return Unsigned_32;
+
+   function Shift_Left
+     (Value  : Unsigned_64;
+      Amount : Natural) return Unsigned_64;
+
+   function Shift_Right
+     (Value  : Unsigned_64;
+      Amount : Natural) return Unsigned_64;
+
+   function Shift_Right_Arithmetic
+     (Value  : Unsigned_64;
+      Amount : Natural) return Unsigned_64;
+
+   function Rotate_Left
+     (Value  : Unsigned_64;
+      Amount : Natural) return Unsigned_64;
+
+   function Rotate_Right
+     (Value  : Unsigned_64;
+      Amount : Natural) return Unsigned_64;
+
+   pragma Import (Intrinsic, Shift_Left);
+   pragma Import (Intrinsic, Shift_Right);
+   pragma Import (Intrinsic, Shift_Right_Arithmetic);
+   pragma Import (Intrinsic, Rotate_Left);
+   pragma Import (Intrinsic, Rotate_Right);
+
+end Interfaces;
diff --git a/src/lib/gnat/s-atacco.ads b/src/lib/gnat/s-atacco.ads
new file mode 100644
index 0000000..fb6232d
--- /dev/null
+++ b/src/lib/gnat/s-atacco.ads
@@ -0,0 +1,63 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+-- S Y S T E M . A D D R E S S _ T O _ A C C E S S _ C O N V E R S I O N S  --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
+--                                                                          --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT. The copyright notice above, and the license provisions that follow --
+-- apply solely to the  contents of the part following the private keyword. --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+generic
+   type Object (<>) is limited private;
+
+package System.Address_To_Access_Conversions is
+   pragma Preelaborate;
+
+   pragma Compile_Time_Warning
+     (Object'Unconstrained_Array,
+      "Object is unconstrained array type" & ASCII.LF &
+      "To_Pointer results may not have bounds");
+
+   type Object_Pointer is access all Object;
+   for Object_Pointer'Size use Standard'Address_Size;
+
+   pragma No_Strict_Aliasing (Object_Pointer);
+   --  Strictly speaking, this routine should not be used to generate pointers
+   --  to other than proper values of the proper type, but in practice, this
+   --  is done all the time. This pragma stops the compiler from doing some
+   --  optimizations that may cause unexpected results based on the assumption
+   --  of no strict aliasing.
+
+   function To_Pointer (Value : Address)        return Object_Pointer;
+   function To_Address (Value : Object_Pointer) return Address;
+
+   pragma Import (Intrinsic, To_Pointer);
+   pragma Import (Intrinsic, To_Address);
+
+end System.Address_To_Access_Conversions;
diff --git a/src/lib/gnat/s-imenne.adb b/src/lib/gnat/s-imenne.adb
new file mode 100644
index 0000000..0c82dfd
--- /dev/null
+++ b/src/lib/gnat/s-imenne.adb
@@ -0,0 +1,129 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                  S Y S T E M . I M G _ E N U M _ N E W                   --
+--                                                                          --
+--                                 B o d y                                  --
+--                                                                          --
+--          Copyright (C) 2000-2013, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+pragma Compiler_Unit_Warning;
+pragma Assertion_Policy (Statement_Assertions => Ignore);
+
+with Ada.Unchecked_Conversion;
+
+package body System.Img_Enum_New is
+
+   -------------------------
+   -- Image_Enumeration_8 --
+   -------------------------
+
+   procedure Image_Enumeration_8
+     (Pos     : Natural;
+      S       : in out String;
+      P       : out Natural;
+      Names   : String;
+      Indexes : System.Address)
+   is
+      pragma Assert (S'First = 1);
+
+      type Natural_8 is range 0 .. 2 ** 7 - 1;
+      type Index_Table is array (Natural) of Natural_8;
+      type Index_Table_Ptr is access Index_Table;
+
+      function To_Index_Table_Ptr is
+        new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
+
+      IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+
+      Start : constant Natural := Natural (IndexesT (Pos));
+      Next  : constant Natural := Natural (IndexesT (Pos + 1));
+
+   begin
+      S (1 .. Next - Start) := Names (Start .. Next - 1);
+      P := Next - Start;
+   end Image_Enumeration_8;
+
+   --------------------------
+   -- Image_Enumeration_16 --
+   --------------------------
+
+   procedure Image_Enumeration_16
+     (Pos     : Natural;
+      S       : in out String;
+      P       : out Natural;
+      Names   : String;
+      Indexes : System.Address)
+   is
+      pragma Assert (S'First = 1);
+
+      type Natural_16 is range 0 .. 2 ** 15 - 1;
+      type Index_Table is array (Natural) of Natural_16;
+      type Index_Table_Ptr is access Index_Table;
+
+      function To_Index_Table_Ptr is
+        new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
+
+      IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+
+      Start : constant Natural := Natural (IndexesT (Pos));
+      Next  : constant Natural := Natural (IndexesT (Pos + 1));
+
+   begin
+      S (1 .. Next - Start) := Names (Start .. Next - 1);
+      P := Next - Start;
+   end Image_Enumeration_16;
+
+   --------------------------
+   -- Image_Enumeration_32 --
+   --------------------------
+
+   procedure Image_Enumeration_32
+     (Pos     : Natural;
+      S       : in out String;
+      P       : out Natural;
+      Names   : String;
+      Indexes : System.Address)
+   is
+      pragma Assert (S'First = 1);
+
+      type Natural_32 is range 0 .. 2 ** 31 - 1;
+      type Index_Table is array (Natural) of Natural_32;
+      type Index_Table_Ptr is access Index_Table;
+
+      function To_Index_Table_Ptr is
+        new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
+
+      IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+
+      Start : constant Natural := Natural (IndexesT (Pos));
+      Next  : constant Natural := Natural (IndexesT (Pos + 1));
+
+   begin
+      S (1 .. Next - Start) := Names (Start .. Next - 1);
+      P := Next - Start;
+   end Image_Enumeration_32;
+
+end System.Img_Enum_New;
diff --git a/src/lib/gnat/s-imenne.ads b/src/lib/gnat/s-imenne.ads
new file mode 100644
index 0000000..3726720
--- /dev/null
+++ b/src/lib/gnat/s-imenne.ads
@@ -0,0 +1,85 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                  S Y S T E M . I M G _ E N U M _ N E W                   --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 2000-2013, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  Enumeration_Type'Image for all enumeration types except those in package
+--  Standard (where we have no opportunity to build image tables), and in
+--  package System (where it is too early to start building image tables).
+--  Special routines exist for the enumeration types in these packages.
+
+--  This is the new version of the package, for use by compilers built after
+--  Nov 21st, 2007, which provides procedures that avoid using the secondary
+--  stack. The original package System.Img_Enum is maintained in the sources
+--  for bootstrapping with older versions of the compiler which expect to find
+--  functions in this package.
+
+pragma Compiler_Unit_Warning;
+
+package System.Img_Enum_New is
+   pragma Pure;
+
+   procedure Image_Enumeration_8
+     (Pos     : Natural;
+      S       : in out String;
+      P       : out Natural;
+      Names   : String;
+      Indexes : System.Address);
+   --  Used to compute Enum'Image (Str) where Enum is some enumeration type
+   --  other than those defined in package Standard. Names is a string with
+   --  a lower bound of 1 containing the characters of all the enumeration
+   --  literals concatenated together in sequence. Indexes is the address of
+   --  an array of type array (0 .. N) of Natural_8, where N is the number of
+   --  enumeration literals in the type. The Indexes values are the starting
+   --  subscript of each enumeration literal, indexed by Pos values, with an
+   --  extra entry at the end containing Names'Length + 1. The reason that
+   --  Indexes is passed by address is that the actual type is created on the
+   --  fly by the expander. The desired 'Image value is stored in S (1 .. P)
+   --  and P is set on return. The caller guarantees that S is long enough to
+   --  hold the result and that the lower bound is 1.
+
+   procedure Image_Enumeration_16
+     (Pos     : Natural;
+      S       : in out String;
+      P       : out Natural;
+      Names   : String;
+      Indexes : System.Address);
+   --  Identical to Set_Image_Enumeration_8 except that it handles types using
+   --  array (0 .. Num) of Natural_16 for the Indexes table.
+
+   procedure Image_Enumeration_32
+     (Pos     : Natural;
+      S       : in out String;
+      P       : out Natural;
+      Names   : String;
+      Indexes : System.Address);
+   --  Identical to Set_Image_Enumeration_8 except that it handles types using
+   --  array (0 .. Num) of Natural_32 for the Indexes table.
+
+end System.Img_Enum_New;
diff --git a/src/lib/gnat/s-maccod.ads b/src/lib/gnat/s-maccod.ads
new file mode 100644
index 0000000..a95e319
--- /dev/null
+++ b/src/lib/gnat/s-maccod.ads
@@ -0,0 +1,130 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--                   S Y S T E M . M A C H I N E _ C O D E                  --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This package provides machine code support, both for intrinsic machine
+--  operations, and also for machine code statements. See GNAT documentation
+--  for full details.
+
+package System.Machine_Code is
+   pragma Pure;
+
+   --  All identifiers in this unit are implementation defined
+
+   pragma Implementation_Defined;
+
+   type Asm_Input_Operand  is private;
+   type Asm_Output_Operand is private;
+   --  These types are never used directly, they are declared only so that
+   --  the calls to Asm are type correct according to Ada semantic rules.
+
+   No_Input_Operands  : constant Asm_Input_Operand;
+   No_Output_Operands : constant Asm_Output_Operand;
+
+   type Asm_Input_Operand_List  is
+     array (Integer range <>) of Asm_Input_Operand;
+
+   type Asm_Output_Operand_List is
+     array (Integer range <>) of Asm_Output_Operand;
+
+   type Asm_Insn is private;
+   --  This type is not used directly. It is declared only so that the
+   --  aggregates used in code statements are type correct by Ada rules.
+
+   procedure Asm (
+     Template : String;
+     Outputs  : Asm_Output_Operand_List;
+     Inputs   : Asm_Input_Operand_List;
+     Clobber  : String  := "";
+     Volatile : Boolean := False);
+
+   procedure Asm (
+     Template : String;
+     Outputs  : Asm_Output_Operand := No_Output_Operands;
+     Inputs   : Asm_Input_Operand_List;
+     Clobber  : String  := "";
+     Volatile : Boolean := False);
+
+   procedure Asm (
+     Template : String;
+     Outputs  : Asm_Output_Operand_List;
+     Inputs   : Asm_Input_Operand := No_Input_Operands;
+     Clobber  : String  := "";
+     Volatile : Boolean := False);
+
+   procedure Asm (
+     Template : String;
+     Outputs  : Asm_Output_Operand := No_Output_Operands;
+     Inputs   : Asm_Input_Operand  := No_Input_Operands;
+     Clobber  : String  := "";
+     Volatile : Boolean := False);
+
+   function Asm (
+     Template : String;
+     Outputs  : Asm_Output_Operand_List;
+     Inputs   : Asm_Input_Operand_List;
+     Clobber  : String  := "";
+     Volatile : Boolean := False) return Asm_Insn;
+
+   function Asm (
+     Template : String;
+     Outputs  : Asm_Output_Operand := No_Output_Operands;
+     Inputs   : Asm_Input_Operand_List;
+     Clobber  : String  := "";
+     Volatile : Boolean := False) return Asm_Insn;
+
+   function Asm (
+     Template : String;
+     Outputs  : Asm_Output_Operand_List;
+     Inputs   : Asm_Input_Operand := No_Input_Operands;
+     Clobber  : String  := "";
+     Volatile : Boolean := False) return Asm_Insn;
+
+   function Asm (
+     Template : String;
+     Outputs  : Asm_Output_Operand := No_Output_Operands;
+     Inputs   : Asm_Input_Operand  := No_Input_Operands;
+     Clobber  : String  := "";
+     Volatile : Boolean := False) return Asm_Insn;
+
+   pragma Import (Intrinsic, Asm);
+
+private
+
+   type Asm_Input_Operand  is new Integer;
+   type Asm_Output_Operand is new Integer;
+   type Asm_Insn           is new Integer;
+   --  All three of these types are dummy types, to meet the requirements of
+   --  type consistency. No values of these types are ever referenced.
+
+   No_Input_Operands  : constant Asm_Input_Operand  := 0;
+   No_Output_Operands : constant Asm_Output_Operand := 0;
+
+end System.Machine_Code;
diff --git a/src/lib/gnat/s-parame.ads b/src/lib/gnat/s-parame.ads
new file mode 100644
index 0000000..3bb8b10
--- /dev/null
+++ b/src/lib/gnat/s-parame.ads
@@ -0,0 +1,66 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--                    S Y S T E M . P A R A M E T E R S                     --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  Default version used when no target-specific version is provided
+
+--  This package defines some system dependent parameters for GNAT. These
+--  are values that are referenced by the runtime library and are therefore
+--  relevant to the target machine.
+
+--  The parameters whose value is defined in the spec are not generally
+--  expected to be changed. If they are changed, it will be necessary to
+--  recompile the run-time library.
+
+--  The parameters which are defined by functions can be changed by modifying
+--  the body of System.Parameters in file s-parame.adb. A change to this body
+--  requires only rebinding and relinking of the application.
+
+--  Note: do not introduce any pragma Inline statements into this unit, since
+--  otherwise the relinking and rebinding capability would be deactivated.
+
+pragma Compiler_Unit_Warning;
+
+package System.Parameters is
+   pragma Pure;
+
+   ----------------------------------------------
+   -- Characteristics of types in Interfaces.C --
+   ----------------------------------------------
+
+   long_bits : constant := Long_Integer'Size;
+   --  Number of bits in type long and unsigned_long. The normal convention
+   --  is that this is the same as type Long_Integer, but this may not be true
+   --  of all targets.
+
+   ptr_bits  : constant := Standard'Address_Size;
+   --  Number of bits in Interfaces.C pointers, normally a standard address
+
+end System.Parameters;
diff --git a/src/lib/gnat/s-stoele.adb b/src/lib/gnat/s-stoele.adb
new file mode 100644
index 0000000..1cb5f92
--- /dev/null
+++ b/src/lib/gnat/s-stoele.adb
@@ -0,0 +1,131 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--               S Y S T E M . S T O R A G E _ E L E M E N T S              --
+--                                                                          --
+--                                 B o d y                                  --
+--                                                                          --
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+pragma Compiler_Unit_Warning;
+
+with Ada.Unchecked_Conversion;
+
+package body System.Storage_Elements is
+
+   pragma Suppress (All_Checks);
+
+   --  Conversion to/from address
+
+   --  Note qualification below of To_Address to avoid ambiguities systems
+   --  where Address is a visible integer type.
+
+   function To_Address is
+     new Ada.Unchecked_Conversion (Storage_Offset, Address);
+   function To_Offset  is
+     new Ada.Unchecked_Conversion (Address, Storage_Offset);
+
+   --  Conversion to/from integers
+
+   --  These functions must be place first because they are inlined_always
+   --  and are used and inlined in other subprograms defined in this unit.
+
+   ----------------
+   -- To_Address --
+   ----------------
+
+   function To_Address (Value : Integer_Address) return Address is
+   begin
+      return Address (Value);
+   end To_Address;
+
+   ----------------
+   -- To_Integer --
+   ----------------
+
+   function To_Integer (Value : Address) return Integer_Address is
+   begin
+      return Integer_Address (Value);
+   end To_Integer;
+
+   --  Address arithmetic
+
+   ---------
+   -- "+" --
+   ---------
+
+   function "+" (Left : Address; Right : Storage_Offset) return Address is
+   begin
+      return Storage_Elements.To_Address
+        (To_Integer (Left) + To_Integer (To_Address (Right)));
+   end "+";
+
+   function "+" (Left : Storage_Offset; Right : Address) return Address is
+   begin
+      return Storage_Elements.To_Address
+        (To_Integer (To_Address (Left)) + To_Integer (Right));
+   end "+";
+
+   ---------
+   -- "-" --
+   ---------
+
+   function "-" (Left : Address; Right : Storage_Offset) return Address is
+   begin
+      return Storage_Elements.To_Address
+        (To_Integer (Left) - To_Integer (To_Address (Right)));
+   end "-";
+
+   function "-" (Left, Right : Address) return Storage_Offset is
+   begin
+      return To_Offset (Storage_Elements.To_Address
+                         (To_Integer (Left) - To_Integer (Right)));
+   end "-";
+
+   -----------
+   -- "mod" --
+   -----------
+
+   function "mod"
+     (Left  : Address;
+      Right : Storage_Offset) return Storage_Offset
+   is
+   begin
+      if Right > 0 then
+         return Storage_Offset
+           (To_Integer (Left) mod Integer_Address (Right));
+
+         --  The negative case makes no sense since it is a case of a mod where
+         --  the left argument is unsigned and the right argument is signed. In
+         --  accordance with the (spirit of the) permission of RM 13.7.1(16),
+         --  we raise CE, and also include the zero case here. Yes, the RM says
+         --  PE, but this really is so obviously more like a constraint error.
+
+      else
+         raise Constraint_Error;
+      end if;
+   end "mod";
+
+end System.Storage_Elements;
diff --git a/src/lib/gnat/s-stoele.ads b/src/lib/gnat/s-stoele.ads
new file mode 100644
index 0000000..bf773cb
--- /dev/null
+++ b/src/lib/gnat/s-stoele.ads
@@ -0,0 +1,117 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--               S Y S T E M . S T O R A G E _ E L E M E N T S              --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 2002-2013, Free Software Foundation, Inc.         --
+--                                                                          --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT. The copyright notice above, and the license provisions that follow --
+-- apply solely to the implementation dependent sections of this file.      --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  Warning: declarations in this package are ambiguous with respect to the
+--  extra declarations that can be introduced into System using Extend_System.
+--  It is a good idea to avoid use clauses for this package.
+
+pragma Compiler_Unit_Warning;
+
+package System.Storage_Elements is
+   pragma Pure;
+   --  Note that we take advantage of the implementation permission to make
+   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada 2005,
+   --  this is Pure in any case (AI-362).
+
+   --  We also add the pragma Pure_Function to the operations in this package,
+   --  because otherwise functions with parameters derived from Address are
+   --  treated as non-pure by the back-end (see exp_ch6.adb). This is because
+   --  in many cases such a parameter is used to hide read/out access to
+   --  objects, and it would be unsafe to treat such functions as pure.
+
+   type Storage_Offset is range
+     -(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+     +(2 ** (Integer'(Standard'Address_Size) - 1)) - Long_Long_Integer'(1);
+   --  Note: the reason for the Long_Long_Integer qualification here is to
+   --  avoid a bogus ambiguity when this unit is analyzed in an rtsfind
+   --  context. It may be possible to remove this in the future, but it is
+   --  certainly harmless in any case ???
+
+   subtype Storage_Count is Storage_Offset range 0 .. Storage_Offset'Last;
+
+   type Storage_Element is mod 2 ** Storage_Unit;
+   for Storage_Element'Size use Storage_Unit;
+
+   pragma Universal_Aliasing (Storage_Element);
+   --  This type is used by the expander to implement aggregate copy
+
+   type Storage_Array is
+     array (Storage_Offset range <>) of aliased Storage_Element;
+   for Storage_Array'Component_Size use Storage_Unit;
+
+   --  Address arithmetic
+
+   function "+" (Left : Address; Right : Storage_Offset) return Address;
+   pragma Convention (Intrinsic, "+");
+   pragma Inline_Always ("+");
+   pragma Pure_Function ("+");
+
+   function "+" (Left : Storage_Offset; Right : Address) return Address;
+   pragma Convention (Intrinsic, "+");
+   pragma Inline_Always ("+");
+   pragma Pure_Function ("+");
+
+   function "-" (Left : Address; Right : Storage_Offset) return Address;
+   pragma Convention (Intrinsic, "-");
+   pragma Inline_Always ("-");
+   pragma Pure_Function ("-");
+
+   function "-" (Left, Right : Address) return Storage_Offset;
+   pragma Convention (Intrinsic, "-");
+   pragma Inline_Always ("-");
+   pragma Pure_Function ("-");
+
+   function "mod"
+     (Left  : Address;
+      Right : Storage_Offset) return  Storage_Offset;
+   pragma Convention (Intrinsic, "mod");
+   pragma Inline_Always ("mod");
+   pragma Pure_Function ("mod");
+
+   --  Conversion to/from integers
+
+   type Integer_Address is mod Memory_Size;
+
+   function To_Address (Value : Integer_Address) return Address;
+   pragma Convention (Intrinsic, To_Address);
+   pragma Inline_Always (To_Address);
+   pragma Pure_Function (To_Address);
+
+   function To_Integer (Value : Address) return Integer_Address;
+   pragma Convention (Intrinsic, To_Integer);
+   pragma Inline_Always (To_Integer);
+   pragma Pure_Function (To_Integer);
+
+end System.Storage_Elements;
diff --git a/src/lib/gnat/s-unstyp.ads b/src/lib/gnat/s-unstyp.ads
new file mode 100644
index 0000000..9eefc15
--- /dev/null
+++ b/src/lib/gnat/s-unstyp.ads
@@ -0,0 +1,211 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                          GNAT RUN-TIME COMPONENTS                        --
+--                                                                          --
+--                S Y S T E M . U N S I G N E D _ T Y P E S                 --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This package contains definitions of standard unsigned types that
+--  correspond in size to the standard signed types declared in Standard,
+--  and (unlike the types in Interfaces) have corresponding names. It
+--  also contains some related definitions for other specialized types
+--  used by the compiler in connection with packed array types.
+
+pragma Compiler_Unit_Warning;
+
+package System.Unsigned_Types is
+   pragma Pure;
+
+   type Short_Short_Unsigned is mod 2 ** Short_Short_Integer'Size;
+   type Short_Unsigned       is mod 2 ** Short_Integer'Size;
+   type Unsigned             is mod 2 ** Integer'Size;
+   type Long_Unsigned        is mod 2 ** Long_Integer'Size;
+   type Long_Long_Unsigned   is mod 2 ** Long_Long_Integer'Size;
+
+   type Float_Unsigned       is mod 2 ** Float'Size;
+   --  Used in the implementation of Is_Negative intrinsic (see Exp_Intr)
+
+   type Packed_Byte is mod 2 ** 8;
+   pragma Universal_Aliasing (Packed_Byte);
+   for Packed_Byte'Size use 8;
+   --  Component type for Packed_Bytes1, Packed_Bytes2 and Packed_Byte4 arrays.
+   --  As this type is used by the compiler to implement operations on user
+   --  packed array, it needs to be able to alias any type.
+
+   type Packed_Bytes1 is array (Natural range <>) of aliased Packed_Byte;
+   for Packed_Bytes1'Alignment use 1;
+   for Packed_Bytes1'Component_Size use Packed_Byte'Size;
+   --  This is the type used to implement packed arrays where no alignment
+   --  is required. This includes the cases of 1,2,4 (where we use direct
+   --  masking operations), and all odd component sizes (where the clusters
+   --  are not aligned anyway, see, e.g. System.Pack_07 in file s-pack07
+   --  for details.
+
+   type Packed_Bytes2 is new Packed_Bytes1;
+   for Packed_Bytes2'Alignment use Integer'Min (2, Standard'Maximum_Alignment);
+   --  This is the type used to implement packed arrays where an alignment
+   --  of 2 (is possible) is helpful for maximum efficiency of the get and
+   --  set routines in the corresponding library unit. This is true of all
+   --  component sizes that are even but not divisible by 4 (other than 2 for
+   --  which we use direct masking operations). In such cases, the clusters
+   --  can be assumed to be 2-byte aligned if the array is aligned. See for
+   --  example System.Pack_10 in file s-pack10).
+
+   type Packed_Bytes4 is new Packed_Bytes1;
+   for Packed_Bytes4'Alignment use Integer'Min (4, Standard'Maximum_Alignment);
+   --  This is the type used to implement packed arrays where an alignment
+   --  of 4 (if possible) is helpful for maximum efficiency of the get and
+   --  set routines in the corresponding library unit. This is true of all
+   --  component sizes that are divisible by 4 (other than powers of 2, which
+   --  are either handled by direct masking or not packed at all). In such
+   --  cases the clusters can be assumed to be 4-byte aligned if the array
+   --  is aligned (see System.Pack_12 in file s-pack12 as an example).
+
+   type Bits_1 is mod 2**1;
+   type Bits_2 is mod 2**2;
+   type Bits_4 is mod 2**4;
+   --  Types used for packed array conversions
+
+   subtype Bytes_F is Packed_Bytes4 (1 .. Float'Size / 8);
+   --  Type used in implementation of Is_Negative intrinsic (see Exp_Intr)
+
+   function Shift_Left
+     (Value  : Short_Short_Unsigned;
+      Amount : Natural) return Short_Short_Unsigned;
+
+   function Shift_Right
+     (Value  : Short_Short_Unsigned;
+      Amount : Natural) return Short_Short_Unsigned;
+
+   function Shift_Right_Arithmetic
+     (Value  : Short_Short_Unsigned;
+      Amount : Natural) return Short_Short_Unsigned;
+
+   function Rotate_Left
+     (Value  : Short_Short_Unsigned;
+      Amount : Natural) return Short_Short_Unsigned;
+
+   function Rotate_Right
+     (Value  : Short_Short_Unsigned;
+      Amount : Natural) return Short_Short_Unsigned;
+
+   function Shift_Left
+     (Value  : Short_Unsigned;
+      Amount : Natural) return Short_Unsigned;
+
+   function Shift_Right
+     (Value  : Short_Unsigned;
+      Amount : Natural) return Short_Unsigned;
+
+   function Shift_Right_Arithmetic
+     (Value  : Short_Unsigned;
+      Amount : Natural) return Short_Unsigned;
+
+   function Rotate_Left
+     (Value  : Short_Unsigned;
+      Amount : Natural) return Short_Unsigned;
+
+   function Rotate_Right
+     (Value  : Short_Unsigned;
+      Amount : Natural) return Short_Unsigned;
+
+   function Shift_Left
+     (Value  : Unsigned;
+      Amount : Natural) return Unsigned;
+
+   function Shift_Right
+     (Value  : Unsigned;
+      Amount : Natural) return Unsigned;
+
+   function Shift_Right_Arithmetic
+     (Value  : Unsigned;
+      Amount : Natural) return Unsigned;
+
+   function Rotate_Left
+     (Value  : Unsigned;
+      Amount : Natural) return Unsigned;
+
+   function Rotate_Right
+     (Value  : Unsigned;
+      Amount : Natural) return Unsigned;
+
+   function Shift_Left
+     (Value  : Long_Unsigned;
+      Amount : Natural) return Long_Unsigned;
+
+   function Shift_Right
+     (Value  : Long_Unsigned;
+      Amount : Natural) return Long_Unsigned;
+
+   function Shift_Right_Arithmetic
+     (Value  : Long_Unsigned;
+      Amount : Natural) return Long_Unsigned;
+
+   function Rotate_Left
+     (Value  : Long_Unsigned;
+      Amount : Natural) return Long_Unsigned;
+
+   function Rotate_Right
+     (Value  : Long_Unsigned;
+      Amount : Natural) return Long_Unsigned;
+
+   function Shift_Left
+     (Value  : Long_Long_Unsigned;
+      Amount : Natural) return Long_Long_Unsigned;
+
+   function Shift_Right
+     (Value  : Long_Long_Unsigned;
+      Amount : Natural) return Long_Long_Unsigned;
+
+   function Shift_Right_Arithmetic
+     (Value  : Long_Long_Unsigned;
+      Amount : Natural) return Long_Long_Unsigned;
+
+   function Rotate_Left
+     (Value  : Long_Long_Unsigned;
+      Amount : Natural) return Long_Long_Unsigned;
+
+   function Rotate_Right
+     (Value  : Long_Long_Unsigned;
+      Amount : Natural) return Long_Long_Unsigned;
+
+   pragma Import (Intrinsic, Shift_Left);
+   pragma Import (Intrinsic, Shift_Right);
+   pragma Import (Intrinsic, Shift_Right_Arithmetic);
+   pragma Import (Intrinsic, Rotate_Left);
+   pragma Import (Intrinsic, Rotate_Right);
+
+   --  The following definitions are obsolescent. They were needed by the
+   --  previous version of the compiler and runtime, but are not needed
+   --  by the current version. We retain them to help with bootstrap path
+   --  problems. Also they seem harmless, and if any user programs have
+   --  been using these types, why discombobulate them?
+
+   subtype Packed_Bytes           is Packed_Bytes4;
+   subtype Packed_Bytes_Unaligned is Packed_Bytes1;
+
+end System.Unsigned_Types;
diff --git a/src/lib/gnat/system.ads b/src/lib/gnat/system.ads
new file mode 100644
index 0000000..aed5592
--- /dev/null
+++ b/src/lib/gnat/system.ads
@@ -0,0 +1,176 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                        GNAT RUN-TIME COMPONENTS                          --
+--                                                                          --
+--                               S Y S T E M                                --
+--                                                                          --
+--                                 S p e c                                  --
+--                              (LSH Version)                               --
+--                                                                          --
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
+--                                                                          --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT. The copyright notice above, and the license provisions that follow --
+-- apply solely to the  contents of the part following the private keyword. --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+pragma Restrictions (No_Exception_Propagation);
+pragma Restrictions (No_Exception_Registration);
+
+pragma Restrictions (No_Implicit_Dynamic_Code);
+pragma Restrictions (No_Finalization);
+pragma Restrictions (No_Tasking);
+
+package System is
+   pragma Pure;
+   --  Note that we take advantage of the implementation permission to make
+   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
+   --  2005, this is Pure in any case (AI-362).
+
+   pragma No_Elaboration_Code_All;
+   --  Allow the use of that restriction in units that WITH this unit
+
+   type Name is (SYSTEM_NAME_GNAT);
+   System_Name : constant Name := SYSTEM_NAME_GNAT;
+
+   --  System-Dependent Named Numbers
+
+   Min_Int               : constant := Long_Long_Integer'First;
+   Max_Int               : constant := Long_Long_Integer'Last;
+
+   Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
+   Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
+
+   Max_Base_Digits       : constant := Long_Long_Float'Digits;
+   Max_Digits            : constant := Long_Long_Float'Digits;
+
+   Max_Mantissa          : constant := 63;
+   Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
+
+   Tick                  : constant := 0.01;
+
+   --  Storage-related Declarations
+
+   type Address is private;
+   --  Note that we do NOT add pragma Preelaborable_Initialization in this
+   --  version of System, since it is used for the compiler only, and typical
+   --  earlier bootstrap compilers don't support this pragma. We don't need
+   --  it in this context, so there is no problem in omitting it.
+   Null_Address : constant Address;
+
+   Storage_Unit : constant := Standard'Storage_Unit;
+   Word_Size    : constant := Standard'Word_Size;
+   Memory_Size  : constant := 2 ** Standard'Address_Size;
+
+   --  Address comparison
+
+   function "<"  (Left, Right : Address) return Boolean;
+   function "<=" (Left, Right : Address) return Boolean;
+   function ">"  (Left, Right : Address) return Boolean;
+   function ">=" (Left, Right : Address) return Boolean;
+   function "="  (Left, Right : Address) return Boolean;
+
+   pragma Import (Intrinsic, "<");
+   pragma Import (Intrinsic, "<=");
+   pragma Import (Intrinsic, ">");
+   pragma Import (Intrinsic, ">=");
+   pragma Import (Intrinsic, "=");
+
+   --  Other System-Dependent Declarations
+
+   type Bit_Order is (High_Order_First, Low_Order_First);
+   Default_Bit_Order : constant Bit_Order :=
+                         Bit_Order'Val (Standard'Default_Bit_Order);
+   pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
+
+   --  Priority-related Declarations (RM D.1)
+
+   Max_Priority           : constant Positive := 30;
+   Max_Interrupt_Priority : constant Positive := 31;
+
+   subtype Any_Priority       is Integer      range  0 .. 31;
+   subtype Priority           is Any_Priority range  0 .. 30;
+   subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+
+   Default_Priority : constant Priority := 15;
+
+private
+
+   Run_Time_Name : constant String := "coreboot Zero Footprint Run Time";
+
+   type Address is mod Memory_Size;
+   Null_Address : constant Address := 0;
+
+   --------------------------------------
+   -- System Implementation Parameters --
+   --------------------------------------
+
+   --  These parameters provide information about the target that is used by
+   --  the compiler. They are in the private part of System, where they can be
+   --  accessed using the special circuitry in the Targparm unit whose source
+   --  should be consulted for more detailed descriptions of the individual
+   --  switch values.
+
+   --  This version of system.ads is used only for building the compiler.
+   --  We really ought to use the proper target system (i.e. the one that
+   --  corresponds to the host for the compiler), but that causes as yet
+   --  unsolved makefile problems. For the most part the setting of these
+   --  parameters is not too critical for the compiler version (e.g. we
+   --  do not use floating-point anyway in the compiler).
+
+   AAMP                      : constant Boolean := False;
+   Backend_Divide_Checks     : constant Boolean := False;
+   Backend_Overflow_Checks   : constant Boolean := True;
+   Command_Line_Args         : constant Boolean := False;
+   Configurable_Run_Time     : constant Boolean := True;
+   Denorm                    : constant Boolean := True;
+   Duration_32_Bits          : constant Boolean := False;
+   Exit_Status_Supported     : constant Boolean := False;
+   Fractional_Fixed_Ops      : constant Boolean := False;
+   Frontend_Layout           : constant Boolean := False;
+   Machine_Overflows         : constant Boolean := False;
+   Machine_Rounds            : constant Boolean := True;
+   Preallocated_Stacks       : constant Boolean := False;
+   Signed_Zeros              : constant Boolean := True;
+   Stack_Check_Default       : constant Boolean := False;
+   Stack_Check_Probes        : constant Boolean := False;
+   Stack_Check_Limits        : constant Boolean := False;
+   Support_Aggregates        : constant Boolean := True;
+   Support_Composite_Assign  : constant Boolean := True;
+   Support_Composite_Compare : constant Boolean := True;
+   Support_Long_Shifts       : constant Boolean := True;
+   Always_Compatible_Rep     : constant Boolean := True;
+   Suppress_Standard_Library : constant Boolean := True;
+   Use_Ada_Main_Program_Name : constant Boolean := False;
+   ZCX_By_Default            : constant Boolean := False;
+
+   --  Obsolete entries, to be removed eventually (bootstrap issues)
+
+   Front_End_ZCX_Support     : constant Boolean := False;
+   High_Integrity_Mode       : constant Boolean := False;
+   Long_Shifts_Inlined       : constant Boolean := True;
+   Functions_Return_By_DSP   : constant Boolean := False;
+   Support_64_Bit_Divides    : constant Boolean := True;
+   GCC_ZCX_Support           : constant Boolean := False;
+
+end System;
