mirror of
https://github.com/ivoszbg/uniLoader.git
synced 2024-11-24 21:20:08 +00:00
Compare commits
2 Commits
d85632eb76
...
2a2db5b325
Author | SHA1 | Date | |
---|---|---|---|
|
2a2db5b325 | ||
|
a1be36ae02 |
0
blob/Image
Normal file
0
blob/Image
Normal file
340
include/COPYING
Normal file
340
include/COPYING
Normal file
@ -0,0 +1,340 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
674
include/COPYING3
Normal file
674
include/COPYING3
Normal file
@ -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>.
|
82
include/_ansi.h
Normal file
82
include/_ansi.h
Normal file
@ -0,0 +1,82 @@
|
||||
/* Provide support for both ANSI and non-ANSI environments. */
|
||||
|
||||
/* To get a strict ANSI C environment, define macro __STRICT_ANSI__. This will
|
||||
"comment out" the non-ANSI parts of the ANSI header files (non-ANSI header
|
||||
files aren't affected). */
|
||||
|
||||
#ifndef _ANSIDECL_H_
|
||||
#define _ANSIDECL_H_
|
||||
|
||||
#include <newlib.h>
|
||||
#include <sys/config.h>
|
||||
|
||||
/* ISO C++. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if !(defined(_BEGIN_STD_C) && defined(_END_STD_C))
|
||||
#ifdef _HAVE_STD_CXX
|
||||
#define _BEGIN_STD_C namespace std { extern "C" {
|
||||
#define _END_STD_C } }
|
||||
#else
|
||||
#define _BEGIN_STD_C extern "C" {
|
||||
#define _END_STD_C }
|
||||
#endif
|
||||
#if __GNUC_PREREQ (3, 3)
|
||||
#define _NOTHROW __attribute__ ((__nothrow__))
|
||||
#else
|
||||
#define _NOTHROW throw()
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
#define _BEGIN_STD_C
|
||||
#define _END_STD_C
|
||||
#define _NOTHROW
|
||||
#endif
|
||||
|
||||
#ifndef _LONG_DOUBLE
|
||||
#define _LONG_DOUBLE long double
|
||||
#endif
|
||||
|
||||
/* Support gcc's __attribute__ facility. */
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define _ATTRIBUTE(attrs) __attribute__ (attrs)
|
||||
#else
|
||||
#define _ATTRIBUTE(attrs)
|
||||
#endif
|
||||
|
||||
/* The traditional meaning of 'extern inline' for GCC is not
|
||||
to emit the function body unless the address is explicitly
|
||||
taken. However this behaviour is changing to match the C99
|
||||
standard, which uses 'extern inline' to indicate that the
|
||||
function body *must* be emitted. Likewise, a function declared
|
||||
without either 'extern' or 'static' defaults to extern linkage
|
||||
(C99 6.2.2p5), and the compiler may choose whether to use the
|
||||
inline version or call the extern linkage version (6.7.4p6).
|
||||
If we are using GCC, but do not have the new behaviour, we need
|
||||
to use extern inline; if we are using a new GCC with the
|
||||
C99-compatible behaviour, or a non-GCC compiler (which we will
|
||||
have to hope is C99, since there is no other way to achieve the
|
||||
effect of omitting the function if it isn't referenced) we use
|
||||
'static inline', which c99 defines to mean more-or-less the same
|
||||
as the Gnu C 'extern inline'. */
|
||||
#if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__)
|
||||
/* We're using GCC, but without the new C99-compatible behaviour. */
|
||||
#define _ELIDABLE_INLINE extern __inline__ _ATTRIBUTE ((__always_inline__))
|
||||
#else
|
||||
/* We're using GCC in C99 mode, or an unknown compiler which
|
||||
we just have to hope obeys the C99 semantics of inline. */
|
||||
#define _ELIDABLE_INLINE static __inline__
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ (3, 1)
|
||||
#define _NOINLINE __attribute__ ((__noinline__))
|
||||
#define _NOINLINE_STATIC _NOINLINE static
|
||||
#else
|
||||
/* On non-GNU compilers and GCC prior to version 3.1 the compiler can't be
|
||||
trusted not to inline if it is static. */
|
||||
#define _NOINLINE
|
||||
#define _NOINLINE_STATIC
|
||||
#endif
|
||||
|
||||
#endif /* _ANSIDECL_H_ */
|
2
include/_newlib_version.h
Normal file
2
include/_newlib_version.h
Normal file
@ -0,0 +1,2 @@
|
||||
/* dummy file for external tools to use. Real file is created by
|
||||
newlib configuration. */
|
40
include/_syslist.h
Normal file
40
include/_syslist.h
Normal file
@ -0,0 +1,40 @@
|
||||
/* internal use only -- mapping of "system calls" for libraries that lose
|
||||
and only provide C names, so that we end up in violation of ANSI */
|
||||
#ifndef __SYSLIST_H
|
||||
#define __SYSLIST_H
|
||||
|
||||
#ifdef MISSING_SYSCALL_NAMES
|
||||
#define _close close
|
||||
#define _execve execve
|
||||
#define _fcntl fcntl
|
||||
#define _fork fork
|
||||
#define _fstat fstat
|
||||
#define _getpid getpid
|
||||
#define _gettimeofday gettimeofday
|
||||
#define _isatty isatty
|
||||
#define _kill kill
|
||||
#define _link link
|
||||
#define _lseek lseek
|
||||
#define _mkdir mkdir
|
||||
#define _open open
|
||||
#define _read read
|
||||
#define _sbrk sbrk
|
||||
#define _stat stat
|
||||
#define _times times
|
||||
#define _unlink unlink
|
||||
#define _wait wait
|
||||
#define _write write
|
||||
#endif /* MISSING_SYSCALL_NAMES */
|
||||
|
||||
#if defined MISSING_SYSCALL_NAMES || !defined HAVE_OPENDIR
|
||||
/* If the system call interface is missing opendir, readdir, and
|
||||
closedir, there is an implementation of these functions in
|
||||
libc/posix that is implemented using open, getdents, and close.
|
||||
Note, these functions are currently not in the libc/syscalls
|
||||
directory. */
|
||||
#define _opendir opendir
|
||||
#define _readdir readdir
|
||||
#define _closedir closedir
|
||||
#endif /* MISSING_SYSCALL_NAMES || !HAVE_OPENDIR */
|
||||
|
||||
#endif /* !__SYSLIST_H_ */
|
60
include/alloca-conf.h
Normal file
60
include/alloca-conf.h
Normal file
@ -0,0 +1,60 @@
|
||||
/* Copyright 2012 Free Software Foundation, Inc.
|
||||
|
||||
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/>. */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
/* This is a merge of code recommended in the autoconf-2.61 documentation
|
||||
with that recommended in the autoconf-2.13 documentation, with added
|
||||
tweaks to heed C_ALLOCA. */
|
||||
|
||||
#if defined HAVE_ALLOCA_H && !defined C_ALLOCA
|
||||
# include <alloca.h>
|
||||
#else
|
||||
# if defined __GNUC__ && !defined C_ALLOCA
|
||||
# if !defined alloca
|
||||
# define alloca __builtin_alloca
|
||||
# endif
|
||||
# else
|
||||
# if defined _AIX
|
||||
/* Indented so that pre-ansi C compilers will ignore it, rather than
|
||||
choke on it. Some versions of AIX require this to be the first
|
||||
thing seen by the compiler except for comments and preprocessor
|
||||
directives. */
|
||||
#pragma alloca
|
||||
# else
|
||||
# if defined _MSC_VER && !defined C_ALLOCA
|
||||
# include <malloc.h>
|
||||
# define alloca _alloca
|
||||
# else
|
||||
# if !defined alloca
|
||||
# if defined __STDC__ || defined __hpux
|
||||
# if defined HAVE_STDDEF_H
|
||||
# include <stddef.h>
|
||||
# if defined __cplusplus
|
||||
extern "C" void *alloca (size_t);
|
||||
# else
|
||||
extern void *alloca (size_t);
|
||||
# endif
|
||||
# else
|
||||
extern void *alloca ();
|
||||
# endif
|
||||
# else
|
||||
extern char *alloca ();
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
21
include/alloca.h
Normal file
21
include/alloca.h
Normal file
@ -0,0 +1,21 @@
|
||||
/* libc/include/alloca.h - Allocate memory on stack */
|
||||
|
||||
/* Written 2000 by Werner Almesberger */
|
||||
/* Rearranged for general inclusion by stdlib.h.
|
||||
2001, Corinna Vinschen <vinschen@redhat.com> */
|
||||
|
||||
#ifndef _NEWLIB_ALLOCA_H
|
||||
#define _NEWLIB_ALLOCA_H
|
||||
|
||||
#include "_ansi.h"
|
||||
#include <sys/reent.h>
|
||||
|
||||
#undef alloca
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define alloca(size) __builtin_alloca(size)
|
||||
#else
|
||||
void * alloca (size_t);
|
||||
#endif
|
||||
|
||||
#endif
|
329
include/ansidecl.h
Normal file
329
include/ansidecl.h
Normal file
@ -0,0 +1,329 @@
|
||||
/* ANSI and traditional C compatability macros
|
||||
Copyright (C) 1991-2015 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* ANSI and traditional C compatibility macros
|
||||
|
||||
ANSI C is assumed if __STDC__ is #defined.
|
||||
|
||||
Macro ANSI C definition Traditional C definition
|
||||
----- ---- - ---------- ----------- - ----------
|
||||
PTR `void *' `char *'
|
||||
const not defined `'
|
||||
volatile not defined `'
|
||||
signed not defined `'
|
||||
|
||||
For ease of writing code which uses GCC extensions but needs to be
|
||||
portable to other compilers, we provide the GCC_VERSION macro that
|
||||
simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various
|
||||
wrappers around __attribute__. Also, __extension__ will be #defined
|
||||
to nothing if it doesn't work. See below. */
|
||||
|
||||
#ifndef _ANSIDECL_H
|
||||
#define _ANSIDECL_H 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Every source file includes this file,
|
||||
so they will all get the switch for lint. */
|
||||
/* LINTLIBRARY */
|
||||
|
||||
/* Using MACRO(x,y) in cpp #if conditionals does not work with some
|
||||
older preprocessors. Thus we can't define something like this:
|
||||
|
||||
#define HAVE_GCC_VERSION(MAJOR, MINOR) \
|
||||
(__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR)))
|
||||
|
||||
and then test "#if HAVE_GCC_VERSION(2,7)".
|
||||
|
||||
So instead we use the macro below and test it against specific values. */
|
||||
|
||||
/* This macro simplifies testing whether we are using gcc, and if it
|
||||
is of a particular minimum version. (Both major & minor numbers are
|
||||
significant.) This macro will evaluate to 0 if we are not using
|
||||
gcc at all. */
|
||||
#ifndef GCC_VERSION
|
||||
#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
|
||||
#endif /* GCC_VERSION */
|
||||
|
||||
#if defined (__STDC__) || defined(__cplusplus) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32)
|
||||
/* All known AIX compilers implement these things (but don't always
|
||||
define __STDC__). The RISC/OS MIPS compiler defines these things
|
||||
in SVR4 mode, but does not define __STDC__. */
|
||||
/* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other
|
||||
C++ compilers, does not define __STDC__, though it acts as if this
|
||||
was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */
|
||||
|
||||
#define PTR void *
|
||||
|
||||
#undef const
|
||||
#undef volatile
|
||||
#undef signed
|
||||
|
||||
/* inline requires special treatment; it's in C99, and GCC >=2.7 supports
|
||||
it too, but it's not in C89. */
|
||||
#undef inline
|
||||
#if __STDC_VERSION__ >= 199901L || defined(__cplusplus) || (defined(__SUNPRO_C) && defined(__C99FEATURES__))
|
||||
/* it's a keyword */
|
||||
#else
|
||||
# if GCC_VERSION >= 2007
|
||||
# define inline __inline__ /* __inline__ prevents -pedantic warnings */
|
||||
# else
|
||||
# define inline /* nothing */
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#else /* Not ANSI C. */
|
||||
|
||||
#define PTR char *
|
||||
|
||||
/* some systems define these in header files for non-ansi mode */
|
||||
#undef const
|
||||
#undef volatile
|
||||
#undef signed
|
||||
#undef inline
|
||||
#define const
|
||||
#define volatile
|
||||
#define signed
|
||||
#define inline
|
||||
|
||||
#endif /* ANSI C. */
|
||||
|
||||
/* Define macros for some gcc attributes. This permits us to use the
|
||||
macros freely, and know that they will come into play for the
|
||||
version of gcc in which they are supported. */
|
||||
|
||||
#if (GCC_VERSION < 2007)
|
||||
# define __attribute__(x)
|
||||
#endif
|
||||
|
||||
/* Attribute __malloc__ on functions was valid as of gcc 2.96. */
|
||||
#ifndef ATTRIBUTE_MALLOC
|
||||
# if (GCC_VERSION >= 2096)
|
||||
# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
|
||||
# else
|
||||
# define ATTRIBUTE_MALLOC
|
||||
# endif /* GNUC >= 2.96 */
|
||||
#endif /* ATTRIBUTE_MALLOC */
|
||||
|
||||
/* Attributes on labels were valid as of gcc 2.93 and g++ 4.5. For
|
||||
g++ an attribute on a label must be followed by a semicolon. */
|
||||
#ifndef ATTRIBUTE_UNUSED_LABEL
|
||||
# ifndef __cplusplus
|
||||
# if GCC_VERSION >= 2093
|
||||
# define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED
|
||||
# else
|
||||
# define ATTRIBUTE_UNUSED_LABEL
|
||||
# endif
|
||||
# else
|
||||
# if GCC_VERSION >= 4005
|
||||
# define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED ;
|
||||
# else
|
||||
# define ATTRIBUTE_UNUSED_LABEL
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Similarly to ARG_UNUSED below. Prior to GCC 3.4, the C++ frontend
|
||||
couldn't parse attributes placed after the identifier name, and now
|
||||
the entire compiler is built with C++. */
|
||||
#ifndef ATTRIBUTE_UNUSED
|
||||
#if GCC_VERSION >= 3004
|
||||
# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
|
||||
#else
|
||||
#define ATTRIBUTE_UNUSED
|
||||
#endif
|
||||
#endif /* ATTRIBUTE_UNUSED */
|
||||
|
||||
/* Before GCC 3.4, the C++ frontend couldn't parse attributes placed after the
|
||||
identifier name. */
|
||||
#if ! defined(__cplusplus) || (GCC_VERSION >= 3004)
|
||||
# define ARG_UNUSED(NAME) NAME ATTRIBUTE_UNUSED
|
||||
#else /* !__cplusplus || GNUC >= 3.4 */
|
||||
# define ARG_UNUSED(NAME) NAME
|
||||
#endif /* !__cplusplus || GNUC >= 3.4 */
|
||||
|
||||
#ifndef ATTRIBUTE_NORETURN
|
||||
#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
|
||||
#endif /* ATTRIBUTE_NORETURN */
|
||||
|
||||
/* Attribute `nonnull' was valid as of gcc 3.3. */
|
||||
#ifndef ATTRIBUTE_NONNULL
|
||||
# if (GCC_VERSION >= 3003)
|
||||
# define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))
|
||||
# else
|
||||
# define ATTRIBUTE_NONNULL(m)
|
||||
# endif /* GNUC >= 3.3 */
|
||||
#endif /* ATTRIBUTE_NONNULL */
|
||||
|
||||
/* Attribute `returns_nonnull' was valid as of gcc 4.9. */
|
||||
#ifndef ATTRIBUTE_RETURNS_NONNULL
|
||||
# if (GCC_VERSION >= 4009)
|
||||
# define ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
|
||||
# else
|
||||
# define ATTRIBUTE_RETURNS_NONNULL
|
||||
# endif /* GNUC >= 4.9 */
|
||||
#endif /* ATTRIBUTE_RETURNS_NONNULL */
|
||||
|
||||
/* Attribute `pure' was valid as of gcc 3.0. */
|
||||
#ifndef ATTRIBUTE_PURE
|
||||
# if (GCC_VERSION >= 3000)
|
||||
# define ATTRIBUTE_PURE __attribute__ ((__pure__))
|
||||
# else
|
||||
# define ATTRIBUTE_PURE
|
||||
# endif /* GNUC >= 3.0 */
|
||||
#endif /* ATTRIBUTE_PURE */
|
||||
|
||||
/* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL.
|
||||
This was the case for the `printf' format attribute by itself
|
||||
before GCC 3.3, but as of 3.3 we need to add the `nonnull'
|
||||
attribute to retain this behavior. */
|
||||
#ifndef ATTRIBUTE_PRINTF
|
||||
#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m)
|
||||
#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
|
||||
#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
|
||||
#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
|
||||
#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)
|
||||
#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
|
||||
#endif /* ATTRIBUTE_PRINTF */
|
||||
|
||||
/* Use ATTRIBUTE_FPTR_PRINTF when the format attribute is to be set on
|
||||
a function pointer. Format attributes were allowed on function
|
||||
pointers as of gcc 3.1. */
|
||||
#ifndef ATTRIBUTE_FPTR_PRINTF
|
||||
# if (GCC_VERSION >= 3001)
|
||||
# define ATTRIBUTE_FPTR_PRINTF(m, n) ATTRIBUTE_PRINTF(m, n)
|
||||
# else
|
||||
# define ATTRIBUTE_FPTR_PRINTF(m, n)
|
||||
# endif /* GNUC >= 3.1 */
|
||||
# define ATTRIBUTE_FPTR_PRINTF_1 ATTRIBUTE_FPTR_PRINTF(1, 2)
|
||||
# define ATTRIBUTE_FPTR_PRINTF_2 ATTRIBUTE_FPTR_PRINTF(2, 3)
|
||||
# define ATTRIBUTE_FPTR_PRINTF_3 ATTRIBUTE_FPTR_PRINTF(3, 4)
|
||||
# define ATTRIBUTE_FPTR_PRINTF_4 ATTRIBUTE_FPTR_PRINTF(4, 5)
|
||||
# define ATTRIBUTE_FPTR_PRINTF_5 ATTRIBUTE_FPTR_PRINTF(5, 6)
|
||||
#endif /* ATTRIBUTE_FPTR_PRINTF */
|
||||
|
||||
/* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL. A
|
||||
NULL format specifier was allowed as of gcc 3.3. */
|
||||
#ifndef ATTRIBUTE_NULL_PRINTF
|
||||
# if (GCC_VERSION >= 3003)
|
||||
# define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
|
||||
# else
|
||||
# define ATTRIBUTE_NULL_PRINTF(m, n)
|
||||
# endif /* GNUC >= 3.3 */
|
||||
# define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2)
|
||||
# define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3)
|
||||
# define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4)
|
||||
# define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5)
|
||||
# define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6)
|
||||
#endif /* ATTRIBUTE_NULL_PRINTF */
|
||||
|
||||
/* Attribute `sentinel' was valid as of gcc 3.5. */
|
||||
#ifndef ATTRIBUTE_SENTINEL
|
||||
# if (GCC_VERSION >= 3005)
|
||||
# define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__))
|
||||
# else
|
||||
# define ATTRIBUTE_SENTINEL
|
||||
# endif /* GNUC >= 3.5 */
|
||||
#endif /* ATTRIBUTE_SENTINEL */
|
||||
|
||||
|
||||
#ifndef ATTRIBUTE_ALIGNED_ALIGNOF
|
||||
# if (GCC_VERSION >= 3000)
|
||||
# define ATTRIBUTE_ALIGNED_ALIGNOF(m) __attribute__ ((__aligned__ (__alignof__ (m))))
|
||||
# else
|
||||
# define ATTRIBUTE_ALIGNED_ALIGNOF(m)
|
||||
# endif /* GNUC >= 3.0 */
|
||||
#endif /* ATTRIBUTE_ALIGNED_ALIGNOF */
|
||||
|
||||
/* Useful for structures whose layout must much some binary specification
|
||||
regardless of the alignment and padding qualities of the compiler. */
|
||||
#ifndef ATTRIBUTE_PACKED
|
||||
# define ATTRIBUTE_PACKED __attribute__ ((packed))
|
||||
#endif
|
||||
|
||||
/* Attribute `hot' and `cold' was valid as of gcc 4.3. */
|
||||
#ifndef ATTRIBUTE_COLD
|
||||
# if (GCC_VERSION >= 4003)
|
||||
# define ATTRIBUTE_COLD __attribute__ ((__cold__))
|
||||
# else
|
||||
# define ATTRIBUTE_COLD
|
||||
# endif /* GNUC >= 4.3 */
|
||||
#endif /* ATTRIBUTE_COLD */
|
||||
#ifndef ATTRIBUTE_HOT
|
||||
# if (GCC_VERSION >= 4003)
|
||||
# define ATTRIBUTE_HOT __attribute__ ((__hot__))
|
||||
# else
|
||||
# define ATTRIBUTE_HOT
|
||||
# endif /* GNUC >= 4.3 */
|
||||
#endif /* ATTRIBUTE_HOT */
|
||||
|
||||
/* Attribute 'no_sanitize_undefined' was valid as of gcc 4.9. */
|
||||
#ifndef ATTRIBUTE_NO_SANITIZE_UNDEFINED
|
||||
# if (GCC_VERSION >= 4009)
|
||||
# define ATTRIBUTE_NO_SANITIZE_UNDEFINED __attribute__ ((no_sanitize_undefined))
|
||||
# else
|
||||
# define ATTRIBUTE_NO_SANITIZE_UNDEFINED
|
||||
# endif /* GNUC >= 4.9 */
|
||||
#endif /* ATTRIBUTE_NO_SANITIZE_UNDEFINED */
|
||||
|
||||
/* We use __extension__ in some places to suppress -pedantic warnings
|
||||
about GCC extensions. This feature didn't work properly before
|
||||
gcc 2.8. */
|
||||
#if GCC_VERSION < 2008
|
||||
#define __extension__
|
||||
#endif
|
||||
|
||||
/* This is used to declare a const variable which should be visible
|
||||
outside of the current compilation unit. Use it as
|
||||
EXPORTED_CONST int i = 1;
|
||||
This is because the semantics of const are different in C and C++.
|
||||
"extern const" is permitted in C but it looks strange, and gcc
|
||||
warns about it when -Wc++-compat is not used. */
|
||||
#ifdef __cplusplus
|
||||
#define EXPORTED_CONST extern const
|
||||
#else
|
||||
#define EXPORTED_CONST const
|
||||
#endif
|
||||
|
||||
/* Be conservative and only use enum bitfields with C++ or GCC.
|
||||
FIXME: provide a complete autoconf test for buggy enum bitfields. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define ENUM_BITFIELD(TYPE) enum TYPE
|
||||
#elif (GCC_VERSION > 2000)
|
||||
#define ENUM_BITFIELD(TYPE) __extension__ enum TYPE
|
||||
#else
|
||||
#define ENUM_BITFIELD(TYPE) unsigned int
|
||||
#endif
|
||||
|
||||
/* This is used to mark a class or virtual function as final. */
|
||||
#if __cplusplus >= 201103L
|
||||
#define GCC_FINAL final
|
||||
#elif GCC_VERSION >= 4007
|
||||
#define GCC_FINAL __final
|
||||
#else
|
||||
#define GCC_FINAL
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ansidecl.h */
|
262
include/aout/ChangeLog
Normal file
262
include/aout/ChangeLog
Normal file
@ -0,0 +1,262 @@
|
||||
2010-04-15 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* adobe.h: Update copyright notice to use GPLv3.
|
||||
* aout64.h: Likewise.
|
||||
* ar.h: Likewise.
|
||||
* dynix3.h: Likewise.
|
||||
* encap.h: Likewise.
|
||||
* host.h: Likewise.
|
||||
* hp.h: Likewise.
|
||||
* hp300hpux.h: Likewise.
|
||||
* ranlib.h: Likewise.
|
||||
* reloc.h: Likewise.
|
||||
* stab.def: Likewise.
|
||||
* stab_gnu.h: Likewise.
|
||||
* sun4.h: Likewise.
|
||||
|
||||
2009-10-02 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* aout64.h (N_SHARED_LIB): Define as zero if not already defined.
|
||||
* sun4.h (N_SHARED_LIB): Define.
|
||||
* hp300hpux.h (N_SHARED_LIB): Don't define.
|
||||
|
||||
2008-08-28 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* stab.def: Add BNSYM, ENSYM, OSO for darwin.
|
||||
|
||||
2008-03-27 Cary Coutant <ccoutant@google.com>
|
||||
|
||||
* ar.h (ARMAGT): New magic string for thin archives.
|
||||
|
||||
2005-08-18 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* encap.h: Remove a29k support.
|
||||
|
||||
2005-05-10 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* Update the address and phone number of the FSF organization in
|
||||
the GPL notices in the following files:
|
||||
adobe.h, aout64.h, ar.h, dynix3.h, encap.h, host.h, hp.h,
|
||||
ranlib.h, reloc.h, stab.def, stab_gnu.h, sun4.h
|
||||
|
||||
2004-01-06 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* stab.def: Add N_PATCH to DO definition.
|
||||
|
||||
2003-03-06 Elias Athanasopoulos <elathan@phys.uoa.gr>
|
||||
|
||||
* aout64.h (BYTES_IN_WORD): Define if necessary.
|
||||
|
||||
2001-09-18 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* aout64.h: Formatting fixes.
|
||||
(N_TXTADDR): Evaluate to a bfd_vma.
|
||||
(N_DATADDR): Avoid negative unsigned warning.
|
||||
* hp300hpux.h: Formatting fixes.
|
||||
(N_DATADDR): Avoid negative unsigned warning.
|
||||
|
||||
2000-04-03 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
* aout64.h (RELOC_EXT_BITS_EXTERN_BIG): Wrap definition in #ifndef.
|
||||
(RELOC_EXT_BITS_EXTERN_LITTLE): Ditto.
|
||||
(RELOC_EXT_BITS_TYPE_BIG): Ditto.
|
||||
(RELOC_EXT_BITS_TYPE_SH_BIG): Ditto.
|
||||
(RELOC_EXT_BITS_TYPE_LITTLE): Ditto.
|
||||
(RELOC_EXT_BITS_TYPE_SH_LITTLE): Ditto.
|
||||
|
||||
1999-07-12 Ian Lance Taylor <ian@zembu.com>
|
||||
|
||||
* aout64.h (N_SHARED_LIB): Define as 0 if TEXT_START_ADDR is
|
||||
defined as 0.
|
||||
|
||||
1998-06-28 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
|
||||
|
||||
* stab.def: Add N_ALIAS from SunPro F77.
|
||||
|
||||
1996-03-11 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* stab.def: Use __define_stab_duplicate rather than __define_stab
|
||||
for duplicate entries N_BROWS and N_MOD2.
|
||||
* stab_gnu.h (__define_stab_duplicate): Define before including
|
||||
stab.def.
|
||||
|
||||
1995-10-27 Niklas Hallqvist <niklas@appli.se>
|
||||
|
||||
* aout64.h, host.h, hp300hpux.h, sun4.h: Changed PAGE_SIZE to
|
||||
TARGET_PAGE_SIZE.
|
||||
|
||||
1995-09-12 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* sun4.h (struct internal_sun4_dynamic_link): Change all fields
|
||||
from long to unsigned long.
|
||||
|
||||
1995-07-12 Ken Raeburn <raeburn@kr-pc.cygnus.com>
|
||||
|
||||
* sun4.h (PAGE_SIZE): Undefine before defining.
|
||||
|
||||
1994-09-04 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
|
||||
|
||||
* aout64.h: Only define QMAGIC if it isn't already defined.
|
||||
|
||||
1994-06-16 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
* aout64.h (BMAGIC): Define.
|
||||
|
||||
1994-06-11 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
Add weak symbols as an extension to a.out.
|
||||
* aout64.h (N_WEAKU, N_WEAKA, N_WEAKT, N_WEAKD, N_WEAKB): Define.
|
||||
* stab.def: Update symbol value table.
|
||||
|
||||
1994-06-02 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
* sun4.h (EXTERNAL_SUN4_DYNAMIC_DEBUGGER_SIZE): Correct from 28 to
|
||||
24. Fix up ld_got comment.
|
||||
|
||||
1994-03-30 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
|
||||
|
||||
* dynix3.h: Cleanup, adapt to current bfd version.
|
||||
|
||||
1994-02-26 Ian Lance Taylor (ian@cygnus.com)
|
||||
|
||||
* aout64.h: Add casts to avoid warnings from SVR4 cc.
|
||||
|
||||
1994-02-11 Stan Shebs (shebs@andros.cygnus.com)
|
||||
|
||||
* ar.h (ARMAG, ARMAGB, ARFMAG): Change '\n' to '\012', for greater
|
||||
portability.
|
||||
|
||||
1994-01-21 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
* sun4.h: Added information about SunOS shared libraries.
|
||||
|
||||
1994-01-07 Jim Kingdon (kingdon@deneb.cygnus.com)
|
||||
|
||||
* aout64.h (N_TXTADDR): Add comment regarding OMAGIC and NMAGIC.
|
||||
|
||||
1993-12-25 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* aout64.h (N_DATOFF): Don't pad (revert change of 8 Jul 1993).
|
||||
|
||||
1993-11-16 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* aout64.h: New macros ZMAGIC_DISK_BLOCK_SIZE and N_DISK_BLOCK_SIZE
|
||||
for Linux ZMAGIC.
|
||||
(N_TXTOFF, N_DATOFF): Use them.
|
||||
|
||||
1993-11-04 Ken Raeburn (raeburn@kr-pc.cygnus.com)
|
||||
|
||||
* aout64.h (RELOC_STD_BITS_RELATIVE_LITTLE): Fixed value to match
|
||||
sun3 system; used to overlap other fields.
|
||||
(RELOC_STD_BITS_JMPTABLE_LITTLE): Likewise.
|
||||
|
||||
1993-11-03 David J. Mackenzie (djm@thepub.cygnus.com)
|
||||
|
||||
* aout64.h (RELOC_STD_BITS_BASEREL_LITTLE): Make it 0x10 (Ken's
|
||||
suggestion) to avoid conflict with RELOC_STD_BITS_EXTERN_LITTLE.
|
||||
|
||||
1993-10-29 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
* hp300hpux.h (N_SHARED_LIB): Define to be 0.
|
||||
|
||||
1993-09-13 John Gilmore (gnu@cygnus.com)
|
||||
|
||||
* ar.h (ARMAP_TIME_OFFSET): Add and describe.
|
||||
|
||||
Mon Aug 23 Sean Fagan (sef@cygnus.com)
|
||||
|
||||
* aout64.h [ARCH_SIZE != 64]: Allow N_BADMAG to be overridden.
|
||||
|
||||
1993-08-16 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* stab_gnu.h: Include aout/stab.def not just stab.def.
|
||||
|
||||
1993-07-18 Jim Kingdon (kingdon@rtl.cygnus.com)
|
||||
|
||||
* dynix3.h: New, for symmetry running dynix.
|
||||
|
||||
1993-07-08 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* aout64.h (N_BADMAG): Recognize QMAGIC.
|
||||
N_TXTOFF, N_TXTADDR, N_TXTSIZE: Special code for QMAGIC.
|
||||
N_DATOFF: Pad text size if we need to.
|
||||
|
||||
1993-06-18 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* stab.def (N_ECOML): Fix comment.
|
||||
|
||||
1993-05-31 Jim Kingdon (kingdon@cygnus.com)
|
||||
|
||||
* stab.def: Remove Solaris information on N_FUN stabstring grammar;
|
||||
I've transferred it to gdb/doc/stabs.texinfo, where it belongs.
|
||||
|
||||
1993-05-10 Ken Raeburn (raeburn@kr-pc.cygnus.com)
|
||||
|
||||
* hp300hpux.h: Patch from Glenn Engel for linker problem and
|
||||
compatibility fix:
|
||||
(OMAGIC, NMAGIC): New definitions.
|
||||
(SHAREMAGIC): Deleted.
|
||||
(HPUX_DOT_O_MAGIC): New macro.
|
||||
(_N_BADMAG): Adjusted.
|
||||
(N_HEADER_IN_TEXT, N_DATADDR): New macros.
|
||||
|
||||
1993-04-29 Ken Raeburn (raeburn@deneb.cygnus.com)
|
||||
|
||||
* hp300hpux.h: New file from Glenn Engel, glenne@lsid.hp.com.
|
||||
|
||||
1993-04-27 Ken Raeburn (raeburn@kr-pc.cygnus.com)
|
||||
|
||||
* aout64.h (struct external_exec, *MAGIC, N_BADMAG): Don't define
|
||||
if `external_exec' is already defined as a macro.
|
||||
(N_DATOFF, N_TRELOFF, N_DRELOFF, N_SYMOFF, N_STROFF): Don't define
|
||||
if already defined.
|
||||
(struct external_nlist, EXTERNAL_NLIST_SIZE): Don't define if
|
||||
`external_nlist' is already defined as a macro.
|
||||
|
||||
1992-08-15 John Gilmore (gnu@cygnus.com)
|
||||
|
||||
* adobe.h: Add description of a.out.adobe format.
|
||||
|
||||
1992-07-03 John Gilmore (gnu at cygnus.com)
|
||||
|
||||
* stab.def: Update more Solaris definitions.
|
||||
* stab_gnu.h: Add N_SO language types, and Solaris basic float types.
|
||||
|
||||
1992-06-14 John Gilmore (gnu at cygnus.com)
|
||||
|
||||
* stab.def: Update descriptions of Solaris-2 stabs; add N_UNDF.
|
||||
|
||||
1992-06-11 John Gilmore (gnu at cygnus.com)
|
||||
|
||||
* stab.def: Add N_OBJ and N_OPT from Solaris-2.
|
||||
|
||||
1992-01-30 John Gilmore (gnu at cygnus.com)
|
||||
|
||||
* aout64.h: N_TXTSIZE needs some more parentheses.
|
||||
I don't trust C precedence.
|
||||
|
||||
1991-12-18 Per Bothner (bothner at cygnus.com)
|
||||
|
||||
* aout64.h: Move common sunos-specific test
|
||||
to recognize shared libraries into new macro N_SHARED_LIB.
|
||||
Use it to simplify & reformat N_TXTADDR, N_TXTOFF, N_TXTSIZE.
|
||||
|
||||
1991-11-30 Steve Chamberlain (sac at rtl.cygnus.com)
|
||||
|
||||
* aout64.h, ar.h, encap.h, host.h, hp.h, ranlib.h, reloc.h,
|
||||
stab.def, stab_gnu.h, sun4.h: All moved from the devo/include
|
||||
directory.
|
||||
|
||||
|
||||
Copyright (C) 1991-2012 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
Local Variables:
|
||||
mode: change-log
|
||||
left-margin: 8
|
||||
fill-column: 74
|
||||
version-control: never
|
||||
End:
|
314
include/aout/adobe.h
Normal file
314
include/aout/adobe.h
Normal file
@ -0,0 +1,314 @@
|
||||
/* `a.out.adobe' differences from standard a.out files
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef __A_OUT_ADOBE_H__
|
||||
#define __A_OUT_ADOBE_H__
|
||||
|
||||
#define BYTES_IN_WORD 4
|
||||
|
||||
/* Struct external_exec is the same. */
|
||||
|
||||
/* This is the layout on disk of the 32-bit or 64-bit exec header. */
|
||||
|
||||
struct external_exec
|
||||
{
|
||||
bfd_byte e_info[4]; /* magic number and stuff */
|
||||
bfd_byte e_text[BYTES_IN_WORD]; /* length of text section in bytes */
|
||||
bfd_byte e_data[BYTES_IN_WORD]; /* length of data section in bytes */
|
||||
bfd_byte e_bss[BYTES_IN_WORD]; /* length of bss area in bytes */
|
||||
bfd_byte e_syms[BYTES_IN_WORD]; /* length of symbol table in bytes */
|
||||
bfd_byte e_entry[BYTES_IN_WORD]; /* start address */
|
||||
bfd_byte e_trsize[BYTES_IN_WORD]; /* length of text relocation info */
|
||||
bfd_byte e_drsize[BYTES_IN_WORD]; /* length of data relocation info */
|
||||
};
|
||||
|
||||
#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7)
|
||||
|
||||
/* Magic numbers for a.out files */
|
||||
|
||||
#undef ZMAGIC
|
||||
#define ZMAGIC 0xAD0BE /* Cute, eh? */
|
||||
#undef OMAGIC
|
||||
#undef NMAGIC
|
||||
|
||||
#define N_BADMAG(x) ((x).a_info != ZMAGIC)
|
||||
|
||||
/* By default, segment size is constant. But some machines override this
|
||||
to be a function of the a.out header (e.g. machine type). */
|
||||
#ifndef N_SEGSIZE
|
||||
#define N_SEGSIZE(x) SEGMENT_SIZE
|
||||
#endif
|
||||
#undef N_SEGSIZE /* FIXMEXXXX */
|
||||
|
||||
/* Segment information for the a.out.Adobe format is specified after the
|
||||
file header. It contains N segment descriptors, followed by one with
|
||||
a type of zero.
|
||||
|
||||
The actual text of the segments starts at N_TXTOFF in the file,
|
||||
regardless of how many or how few segment headers there are. */
|
||||
|
||||
struct external_segdesc {
|
||||
unsigned char e_type[1];
|
||||
unsigned char e_size[3];
|
||||
unsigned char e_virtbase[4];
|
||||
unsigned char e_filebase[4];
|
||||
};
|
||||
|
||||
struct internal_segdesc {
|
||||
unsigned int a_type:8; /* Segment type N_TEXT, N_DATA, 0 */
|
||||
unsigned int a_size:24; /* Segment size */
|
||||
bfd_vma a_virtbase; /* Virtual address */
|
||||
unsigned int a_filebase; /* Base address in object file */
|
||||
};
|
||||
|
||||
#define N_TXTADDR(x) \
|
||||
|
||||
/* This is documented to be at 1024, but appears to really be at 2048.
|
||||
FIXME?! */
|
||||
#define N_TXTOFF(x) 2048
|
||||
|
||||
#define N_TXTSIZE(x) ((x).a_text)
|
||||
|
||||
#define N_DATADDR(x)
|
||||
|
||||
#define N_BSSADDR(x)
|
||||
|
||||
/* Offsets of the various portions of the file after the text segment. */
|
||||
|
||||
#define N_DATOFF(x) ( N_TXTOFF(x) + N_TXTSIZE(x) )
|
||||
#define N_TRELOFF(x) ( N_DATOFF(x) + (x).a_data )
|
||||
#define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize )
|
||||
#define N_SYMOFF(x) ( N_DRELOFF(x) + (x).a_drsize )
|
||||
#define N_STROFF(x) ( N_SYMOFF(x) + (x).a_syms )
|
||||
|
||||
/* Symbols */
|
||||
struct external_nlist {
|
||||
bfd_byte e_strx[BYTES_IN_WORD]; /* index into string table of name */
|
||||
bfd_byte e_type[1]; /* type of symbol */
|
||||
bfd_byte e_other[1]; /* misc info (usually empty) */
|
||||
bfd_byte e_desc[2]; /* description field */
|
||||
bfd_byte e_value[BYTES_IN_WORD]; /* value of symbol */
|
||||
};
|
||||
|
||||
#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD)
|
||||
|
||||
struct internal_nlist {
|
||||
unsigned long n_strx; /* index into string table of name */
|
||||
unsigned char n_type; /* type of symbol */
|
||||
unsigned char n_other; /* misc info (usually empty) */
|
||||
unsigned short n_desc; /* description field */
|
||||
bfd_vma n_value; /* value of symbol */
|
||||
};
|
||||
|
||||
/* The n_type field is the symbol type, containing: */
|
||||
|
||||
#define N_UNDF 0 /* Undefined symbol */
|
||||
#define N_ABS 2 /* Absolute symbol -- defined at particular addr */
|
||||
#define N_TEXT 4 /* Text sym -- defined at offset in text seg */
|
||||
#define N_DATA 6 /* Data sym -- defined at offset in data seg */
|
||||
#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg */
|
||||
#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink) */
|
||||
#define N_FN 0x1f /* File name of .o file */
|
||||
#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh) */
|
||||
/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT,
|
||||
N_DATA, or N_BSS. When the low-order bit of other types is set,
|
||||
(e.g. N_WARNING versus N_FN), they are two different types. */
|
||||
#define N_EXT 1 /* External symbol (as opposed to local-to-this-file) */
|
||||
#define N_TYPE 0x1e
|
||||
#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol */
|
||||
|
||||
#define N_INDR 0x0a
|
||||
|
||||
/* The following symbols refer to set elements.
|
||||
All the N_SET[ATDB] symbols with the same name form one set.
|
||||
Space is allocated for the set in the text section, and each set
|
||||
elements value is stored into one word of the space.
|
||||
The first word of the space is the length of the set (number of elements).
|
||||
|
||||
The address of the set is made into an N_SETV symbol
|
||||
whose name is the same as the name of the set.
|
||||
This symbol acts like a N_DATA global symbol
|
||||
in that it can satisfy undefined external references. */
|
||||
|
||||
/* These appear as input to LD, in a .o file. */
|
||||
#define N_SETA 0x14 /* Absolute set element symbol */
|
||||
#define N_SETT 0x16 /* Text set element symbol */
|
||||
#define N_SETD 0x18 /* Data set element symbol */
|
||||
#define N_SETB 0x1A /* Bss set element symbol */
|
||||
|
||||
/* This is output from LD. */
|
||||
#define N_SETV 0x1C /* Pointer to set vector in data area. */
|
||||
|
||||
/* Warning symbol. The text gives a warning message, the next symbol
|
||||
in the table will be undefined. When the symbol is referenced, the
|
||||
message is printed. */
|
||||
|
||||
#define N_WARNING 0x1e
|
||||
|
||||
/* Relocations
|
||||
|
||||
There are two types of relocation flavours for a.out systems,
|
||||
standard and extended. The standard form is used on systems where the
|
||||
instruction has room for all the bits of an offset to the operand, whilst
|
||||
the extended form is used when an address operand has to be split over n
|
||||
instructions. Eg, on the 68k, each move instruction can reference
|
||||
the target with a displacement of 16 or 32 bits. On the sparc, move
|
||||
instructions use an offset of 14 bits, so the offset is stored in
|
||||
the reloc field, and the data in the section is ignored.
|
||||
*/
|
||||
|
||||
/* This structure describes a single relocation to be performed.
|
||||
The text-relocation section of the file is a vector of these structures,
|
||||
all of which apply to the text section.
|
||||
Likewise, the data-relocation section applies to the data section. */
|
||||
|
||||
struct reloc_std_external {
|
||||
bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */
|
||||
bfd_byte r_index[3]; /* symbol table index of symbol */
|
||||
bfd_byte r_type[1]; /* relocation type */
|
||||
};
|
||||
|
||||
#define RELOC_STD_BITS_PCREL_BIG 0x80
|
||||
#define RELOC_STD_BITS_PCREL_LITTLE 0x01
|
||||
|
||||
#define RELOC_STD_BITS_LENGTH_BIG 0x60
|
||||
#define RELOC_STD_BITS_LENGTH_SH_BIG 5 /* To shift to units place */
|
||||
#define RELOC_STD_BITS_LENGTH_LITTLE 0x06
|
||||
#define RELOC_STD_BITS_LENGTH_SH_LITTLE 1
|
||||
|
||||
#define RELOC_STD_BITS_EXTERN_BIG 0x10
|
||||
#define RELOC_STD_BITS_EXTERN_LITTLE 0x08
|
||||
|
||||
#define RELOC_STD_BITS_BASEREL_BIG 0x08
|
||||
#define RELOC_STD_BITS_BASEREL_LITTLE 0x08
|
||||
|
||||
#define RELOC_STD_BITS_JMPTABLE_BIG 0x04
|
||||
#define RELOC_STD_BITS_JMPTABLE_LITTLE 0x04
|
||||
|
||||
#define RELOC_STD_BITS_RELATIVE_BIG 0x02
|
||||
#define RELOC_STD_BITS_RELATIVE_LITTLE 0x02
|
||||
|
||||
#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry */
|
||||
|
||||
struct reloc_std_internal
|
||||
{
|
||||
bfd_vma r_address; /* Address (within segment) to be relocated. */
|
||||
/* The meaning of r_symbolnum depends on r_extern. */
|
||||
unsigned int r_symbolnum:24;
|
||||
/* Nonzero means value is a pc-relative offset
|
||||
and it should be relocated for changes in its own address
|
||||
as well as for changes in the symbol or section specified. */
|
||||
unsigned int r_pcrel:1;
|
||||
/* Length (as exponent of 2) of the field to be relocated.
|
||||
Thus, a value of 2 indicates 1<<2 bytes. */
|
||||
unsigned int r_length:2;
|
||||
/* 1 => relocate with value of symbol.
|
||||
r_symbolnum is the index of the symbol
|
||||
in files the symbol table.
|
||||
0 => relocate with the address of a segment.
|
||||
r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
|
||||
(the N_EXT bit may be set also, but signifies nothing). */
|
||||
unsigned int r_extern:1;
|
||||
/* The next three bits are for SunOS shared libraries, and seem to
|
||||
be undocumented. */
|
||||
unsigned int r_baserel:1; /* Linkage table relative */
|
||||
unsigned int r_jmptable:1; /* pc-relative to jump table */
|
||||
unsigned int r_relative:1; /* "relative relocation" */
|
||||
/* unused */
|
||||
unsigned int r_pad:1; /* Padding -- set to zero */
|
||||
};
|
||||
|
||||
|
||||
/* EXTENDED RELOCS */
|
||||
|
||||
struct reloc_ext_external {
|
||||
bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */
|
||||
bfd_byte r_index[3]; /* symbol table index of symbol */
|
||||
bfd_byte r_type[1]; /* relocation type */
|
||||
bfd_byte r_addend[BYTES_IN_WORD]; /* datum addend */
|
||||
};
|
||||
|
||||
#define RELOC_EXT_BITS_EXTERN_BIG 0x80
|
||||
#define RELOC_EXT_BITS_EXTERN_LITTLE 0x01
|
||||
|
||||
#define RELOC_EXT_BITS_TYPE_BIG 0x1F
|
||||
#define RELOC_EXT_BITS_TYPE_SH_BIG 0
|
||||
#define RELOC_EXT_BITS_TYPE_LITTLE 0xF8
|
||||
#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3
|
||||
|
||||
/* Bytes per relocation entry */
|
||||
#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD)
|
||||
|
||||
enum reloc_type
|
||||
{
|
||||
/* simple relocations */
|
||||
RELOC_8, /* data[0:7] = addend + sv */
|
||||
RELOC_16, /* data[0:15] = addend + sv */
|
||||
RELOC_32, /* data[0:31] = addend + sv */
|
||||
/* pc-rel displacement */
|
||||
RELOC_DISP8, /* data[0:7] = addend - pc + sv */
|
||||
RELOC_DISP16, /* data[0:15] = addend - pc + sv */
|
||||
RELOC_DISP32, /* data[0:31] = addend - pc + sv */
|
||||
/* Special */
|
||||
RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */
|
||||
RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */
|
||||
RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */
|
||||
RELOC_22, /* data[0:21] = (addend + sv) */
|
||||
RELOC_13, /* data[0:12] = (addend + sv) */
|
||||
RELOC_LO10, /* data[0:9] = (addend + sv) */
|
||||
RELOC_SFA_BASE,
|
||||
RELOC_SFA_OFF13,
|
||||
/* P.I.C. (base-relative) */
|
||||
RELOC_BASE10, /* Not sure - maybe we can do this the */
|
||||
RELOC_BASE13, /* right way now */
|
||||
RELOC_BASE22,
|
||||
/* for some sort of pc-rel P.I.C. (?) */
|
||||
RELOC_PC10,
|
||||
RELOC_PC22,
|
||||
/* P.I.C. jump table */
|
||||
RELOC_JMP_TBL,
|
||||
/* reputedly for shared libraries somehow */
|
||||
RELOC_SEGOFF16,
|
||||
RELOC_GLOB_DAT,
|
||||
RELOC_JMP_SLOT,
|
||||
RELOC_RELATIVE,
|
||||
|
||||
RELOC_11,
|
||||
RELOC_WDISP2_14,
|
||||
RELOC_WDISP19,
|
||||
RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */
|
||||
RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */
|
||||
|
||||
/* 29K relocation types */
|
||||
RELOC_JUMPTARG,
|
||||
RELOC_CONST,
|
||||
RELOC_CONSTH,
|
||||
|
||||
NO_RELOC
|
||||
};
|
||||
|
||||
|
||||
struct reloc_internal {
|
||||
bfd_vma r_address; /* offset of of data to relocate */
|
||||
long r_index; /* symbol table index of symbol */
|
||||
enum reloc_type r_type; /* relocation type */
|
||||
bfd_vma r_addend; /* datum addend */
|
||||
};
|
||||
|
||||
#endif /* __A_OUT_ADOBE_H__ */
|
516
include/aout/aout64.h
Normal file
516
include/aout/aout64.h
Normal file
@ -0,0 +1,516 @@
|
||||
/* `a.out' object-file definitions, including extensions to 64-bit fields
|
||||
|
||||
Copyright 1999, 2000, 2001, 2003, 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef __A_OUT_64_H__
|
||||
#define __A_OUT_64_H__
|
||||
|
||||
#ifndef BYTES_IN_WORD
|
||||
#define BYTES_IN_WORD 4
|
||||
#endif
|
||||
|
||||
/* This is the layout on disk of the 32-bit or 64-bit exec header. */
|
||||
|
||||
#ifndef external_exec
|
||||
struct external_exec
|
||||
{
|
||||
bfd_byte e_info[4]; /* Magic number and stuff. */
|
||||
bfd_byte e_text[BYTES_IN_WORD]; /* Length of text section in bytes. */
|
||||
bfd_byte e_data[BYTES_IN_WORD]; /* Length of data section in bytes. */
|
||||
bfd_byte e_bss[BYTES_IN_WORD]; /* Length of bss area in bytes. */
|
||||
bfd_byte e_syms[BYTES_IN_WORD]; /* Length of symbol table in bytes. */
|
||||
bfd_byte e_entry[BYTES_IN_WORD]; /* Start address. */
|
||||
bfd_byte e_trsize[BYTES_IN_WORD]; /* Length of text relocation info. */
|
||||
bfd_byte e_drsize[BYTES_IN_WORD]; /* Length of data relocation info. */
|
||||
};
|
||||
|
||||
#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7)
|
||||
|
||||
/* Magic numbers for a.out files. */
|
||||
|
||||
#if ARCH_SIZE==64
|
||||
#define OMAGIC 0x1001 /* Code indicating object file. */
|
||||
#define ZMAGIC 0x1002 /* Code indicating demand-paged executable. */
|
||||
#define NMAGIC 0x1003 /* Code indicating pure executable. */
|
||||
|
||||
/* There is no 64-bit QMAGIC as far as I know. */
|
||||
|
||||
#define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \
|
||||
&& N_MAGIC(x) != NMAGIC \
|
||||
&& N_MAGIC(x) != ZMAGIC)
|
||||
#else
|
||||
#define OMAGIC 0407 /* Object file or impure executable. */
|
||||
#define NMAGIC 0410 /* Code indicating pure executable. */
|
||||
#define ZMAGIC 0413 /* Code indicating demand-paged executable. */
|
||||
#define BMAGIC 0415 /* Used by a b.out object. */
|
||||
|
||||
/* This indicates a demand-paged executable with the header in the text.
|
||||
It is used by 386BSD (and variants) and Linux, at least. */
|
||||
#ifndef QMAGIC
|
||||
#define QMAGIC 0314
|
||||
#endif
|
||||
# ifndef N_BADMAG
|
||||
# define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \
|
||||
&& N_MAGIC(x) != NMAGIC \
|
||||
&& N_MAGIC(x) != ZMAGIC \
|
||||
&& N_MAGIC(x) != QMAGIC)
|
||||
# endif /* N_BADMAG */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef QMAGIC
|
||||
#define N_IS_QMAGIC(x) (N_MAGIC (x) == QMAGIC)
|
||||
#else
|
||||
#define N_IS_QMAGIC(x) (0)
|
||||
#endif
|
||||
|
||||
/* The difference between TARGET_PAGE_SIZE and N_SEGSIZE is that TARGET_PAGE_SIZE is
|
||||
the finest granularity at which you can page something, thus it
|
||||
controls the padding (if any) before the text segment of a ZMAGIC
|
||||
file. N_SEGSIZE is the resolution at which things can be marked as
|
||||
read-only versus read/write, so it controls the padding between the
|
||||
text segment and the data segment (in memory; on disk the padding
|
||||
between them is TARGET_PAGE_SIZE). TARGET_PAGE_SIZE and N_SEGSIZE are the same
|
||||
for most machines, but different for sun3. */
|
||||
|
||||
/* By default, segment size is constant. But some machines override this
|
||||
to be a function of the a.out header (e.g. machine type). */
|
||||
|
||||
#ifndef N_SEGSIZE
|
||||
#define N_SEGSIZE(x) SEGMENT_SIZE
|
||||
#endif
|
||||
|
||||
/* Virtual memory address of the text section.
|
||||
This is getting very complicated. A good reason to discard a.out format
|
||||
for something that specifies these fields explicitly. But til then...
|
||||
|
||||
* OMAGIC and NMAGIC files:
|
||||
(object files: text for "relocatable addr 0" right after the header)
|
||||
start at 0, offset is EXEC_BYTES_SIZE, size as stated.
|
||||
* The text address, offset, and size of ZMAGIC files depend
|
||||
on the entry point of the file:
|
||||
* entry point below TEXT_START_ADDR:
|
||||
(hack for SunOS shared libraries)
|
||||
start at 0, offset is 0, size as stated.
|
||||
* If N_HEADER_IN_TEXT(x) is true (which defaults to being the
|
||||
case when the entry point is EXEC_BYTES_SIZE or further into a page):
|
||||
no padding is needed; text can start after exec header. Sun
|
||||
considers the text segment of such files to include the exec header;
|
||||
for BFD's purposes, we don't, which makes more work for us.
|
||||
start at TEXT_START_ADDR + EXEC_BYTES_SIZE, offset is EXEC_BYTES_SIZE,
|
||||
size as stated minus EXEC_BYTES_SIZE.
|
||||
* If N_HEADER_IN_TEXT(x) is false (which defaults to being the case when
|
||||
the entry point is less than EXEC_BYTES_SIZE into a page (e.g. page
|
||||
aligned)): (padding is needed so that text can start at a page boundary)
|
||||
start at TEXT_START_ADDR, offset TARGET_PAGE_SIZE, size as stated.
|
||||
|
||||
Specific configurations may want to hardwire N_HEADER_IN_TEXT,
|
||||
for efficiency or to allow people to play games with the entry point.
|
||||
In that case, you would #define N_HEADER_IN_TEXT(x) as 1 for sunos,
|
||||
and as 0 for most other hosts (Sony News, Vax Ultrix, etc).
|
||||
(Do this in the appropriate bfd target file.)
|
||||
(The default is a heuristic that will break if people try changing
|
||||
the entry point, perhaps with the ld -e flag.)
|
||||
|
||||
* QMAGIC is always like a ZMAGIC for which N_HEADER_IN_TEXT is true,
|
||||
and for which the starting address is TARGET_PAGE_SIZE (or should this be
|
||||
SEGMENT_SIZE?) (TEXT_START_ADDR only applies to ZMAGIC, not to QMAGIC). */
|
||||
|
||||
/* This macro is only relevant for ZMAGIC files; QMAGIC always has the header
|
||||
in the text. */
|
||||
#ifndef N_HEADER_IN_TEXT
|
||||
#define N_HEADER_IN_TEXT(x) \
|
||||
(((x).a_entry & (TARGET_PAGE_SIZE-1)) >= EXEC_BYTES_SIZE)
|
||||
#endif
|
||||
|
||||
/* Sun shared libraries, not linux. This macro is only relevant for ZMAGIC
|
||||
files. */
|
||||
#ifndef N_SHARED_LIB
|
||||
#define N_SHARED_LIB(x) (0)
|
||||
#endif
|
||||
|
||||
/* Returning 0 not TEXT_START_ADDR for OMAGIC and NMAGIC is based on
|
||||
the assumption that we are dealing with a .o file, not an
|
||||
executable. This is necessary for OMAGIC (but means we don't work
|
||||
right on the output from ld -N); more questionable for NMAGIC. */
|
||||
|
||||
#ifndef N_TXTADDR
|
||||
#define N_TXTADDR(x) \
|
||||
(/* The address of a QMAGIC file is always one page in, \
|
||||
with the header in the text. */ \
|
||||
N_IS_QMAGIC (x) \
|
||||
? (bfd_vma) TARGET_PAGE_SIZE + EXEC_BYTES_SIZE \
|
||||
: (N_MAGIC (x) != ZMAGIC \
|
||||
? (bfd_vma) 0 /* Object file or NMAGIC. */ \
|
||||
: (N_SHARED_LIB (x) \
|
||||
? (bfd_vma) 0 \
|
||||
: (N_HEADER_IN_TEXT (x) \
|
||||
? (bfd_vma) TEXT_START_ADDR + EXEC_BYTES_SIZE \
|
||||
: (bfd_vma) TEXT_START_ADDR))))
|
||||
#endif
|
||||
|
||||
/* If N_HEADER_IN_TEXT is not true for ZMAGIC, there is some padding
|
||||
to make the text segment start at a certain boundary. For most
|
||||
systems, this boundary is TARGET_PAGE_SIZE. But for Linux, in the
|
||||
time-honored tradition of crazy ZMAGIC hacks, it is 1024 which is
|
||||
not what TARGET_PAGE_SIZE needs to be for QMAGIC. */
|
||||
|
||||
#ifndef ZMAGIC_DISK_BLOCK_SIZE
|
||||
#define ZMAGIC_DISK_BLOCK_SIZE TARGET_PAGE_SIZE
|
||||
#endif
|
||||
|
||||
#define N_DISK_BLOCK_SIZE(x) \
|
||||
(N_MAGIC(x) == ZMAGIC ? ZMAGIC_DISK_BLOCK_SIZE : TARGET_PAGE_SIZE)
|
||||
|
||||
/* Offset in an a.out of the start of the text section. */
|
||||
#ifndef N_TXTOFF
|
||||
#define N_TXTOFF(x) \
|
||||
(/* For {O,N,Q}MAGIC, no padding. */ \
|
||||
N_MAGIC (x) != ZMAGIC \
|
||||
? EXEC_BYTES_SIZE \
|
||||
: (N_SHARED_LIB (x) \
|
||||
? 0 \
|
||||
: (N_HEADER_IN_TEXT (x) \
|
||||
? EXEC_BYTES_SIZE /* No padding. */ \
|
||||
: ZMAGIC_DISK_BLOCK_SIZE /* A page of padding. */)))
|
||||
#endif
|
||||
/* Size of the text section. It's always as stated, except that we
|
||||
offset it to `undo' the adjustment to N_TXTADDR and N_TXTOFF
|
||||
for ZMAGIC files that nominally include the exec header
|
||||
as part of the first page of text. (BFD doesn't consider the
|
||||
exec header to be part of the text segment.) */
|
||||
#ifndef N_TXTSIZE
|
||||
#define N_TXTSIZE(x) \
|
||||
(/* For QMAGIC, we don't consider the header part of the text section. */\
|
||||
N_IS_QMAGIC (x) \
|
||||
? (x).a_text - EXEC_BYTES_SIZE \
|
||||
: ((N_MAGIC (x) != ZMAGIC || N_SHARED_LIB (x)) \
|
||||
? (x).a_text \
|
||||
: (N_HEADER_IN_TEXT (x) \
|
||||
? (x).a_text - EXEC_BYTES_SIZE /* No padding. */ \
|
||||
: (x).a_text /* A page of padding. */ )))
|
||||
#endif
|
||||
/* The address of the data segment in virtual memory.
|
||||
It is the text segment address, plus text segment size, rounded
|
||||
up to a N_SEGSIZE boundary for pure or pageable files. */
|
||||
#ifndef N_DATADDR
|
||||
#define N_DATADDR(x) \
|
||||
(N_MAGIC (x) == OMAGIC \
|
||||
? (N_TXTADDR (x) + N_TXTSIZE (x)) \
|
||||
: (N_SEGSIZE (x) + ((N_TXTADDR (x) + N_TXTSIZE (x) - 1) \
|
||||
& ~ (bfd_vma) (N_SEGSIZE (x) - 1))))
|
||||
#endif
|
||||
/* The address of the BSS segment -- immediately after the data segment. */
|
||||
|
||||
#define N_BSSADDR(x) (N_DATADDR (x) + (x).a_data)
|
||||
|
||||
/* Offsets of the various portions of the file after the text segment. */
|
||||
|
||||
/* For {Q,Z}MAGIC, there is padding to make the data segment start on
|
||||
a page boundary. Most of the time the a_text field (and thus
|
||||
N_TXTSIZE) already contains this padding. It is possible that for
|
||||
BSDI and/or 386BSD it sometimes doesn't contain the padding, and
|
||||
perhaps we should be adding it here. But this seems kind of
|
||||
questionable and probably should be BSDI/386BSD-specific if we do
|
||||
do it.
|
||||
|
||||
For NMAGIC (at least for hp300 BSD, probably others), there is
|
||||
padding in memory only, not on disk, so we must *not* ever pad here
|
||||
for NMAGIC. */
|
||||
|
||||
#ifndef N_DATOFF
|
||||
#define N_DATOFF(x) (N_TXTOFF (x) + N_TXTSIZE (x))
|
||||
#endif
|
||||
#ifndef N_TRELOFF
|
||||
#define N_TRELOFF(x) (N_DATOFF (x) + (x).a_data)
|
||||
#endif
|
||||
#ifndef N_DRELOFF
|
||||
#define N_DRELOFF(x) (N_TRELOFF (x) + (x).a_trsize)
|
||||
#endif
|
||||
#ifndef N_SYMOFF
|
||||
#define N_SYMOFF(x) (N_DRELOFF (x) + (x).a_drsize)
|
||||
#endif
|
||||
#ifndef N_STROFF
|
||||
#define N_STROFF(x) (N_SYMOFF (x) + (x).a_syms)
|
||||
#endif
|
||||
|
||||
/* Symbols */
|
||||
#ifndef external_nlist
|
||||
struct external_nlist
|
||||
{
|
||||
bfd_byte e_strx[BYTES_IN_WORD]; /* Index into string table of name. */
|
||||
bfd_byte e_type[1]; /* Type of symbol. */
|
||||
bfd_byte e_other[1]; /* Misc info (usually empty). */
|
||||
bfd_byte e_desc[2]; /* Description field. */
|
||||
bfd_byte e_value[BYTES_IN_WORD]; /* Value of symbol. */
|
||||
};
|
||||
#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD)
|
||||
#endif
|
||||
|
||||
struct internal_nlist
|
||||
{
|
||||
unsigned long n_strx; /* Index into string table of name. */
|
||||
unsigned char n_type; /* Type of symbol. */
|
||||
unsigned char n_other; /* Misc info (usually empty). */
|
||||
unsigned short n_desc; /* Description field. */
|
||||
bfd_vma n_value; /* Value of symbol. */
|
||||
};
|
||||
|
||||
/* The n_type field is the symbol type, containing: */
|
||||
|
||||
#define N_UNDF 0 /* Undefined symbol. */
|
||||
#define N_ABS 2 /* Absolute symbol -- defined at particular addr. */
|
||||
#define N_TEXT 4 /* Text sym -- defined at offset in text seg. */
|
||||
#define N_DATA 6 /* Data sym -- defined at offset in data seg. */
|
||||
#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg. */
|
||||
#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink). */
|
||||
#define N_FN 0x1f /* File name of .o file. */
|
||||
#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh). */
|
||||
/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT,
|
||||
N_DATA, or N_BSS. When the low-order bit of other types is set,
|
||||
(e.g. N_WARNING versus N_FN), they are two different types. */
|
||||
#define N_EXT 1 /* External symbol (as opposed to local-to-this-file). */
|
||||
#define N_TYPE 0x1e
|
||||
#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol. */
|
||||
|
||||
#define N_INDR 0x0a
|
||||
|
||||
/* The following symbols refer to set elements.
|
||||
All the N_SET[ATDB] symbols with the same name form one set.
|
||||
Space is allocated for the set in the text section, and each set
|
||||
elements value is stored into one word of the space.
|
||||
The first word of the space is the length of the set (number of elements).
|
||||
|
||||
The address of the set is made into an N_SETV symbol
|
||||
whose name is the same as the name of the set.
|
||||
This symbol acts like a N_DATA global symbol
|
||||
in that it can satisfy undefined external references. */
|
||||
|
||||
/* These appear as input to LD, in a .o file. */
|
||||
#define N_SETA 0x14 /* Absolute set element symbol. */
|
||||
#define N_SETT 0x16 /* Text set element symbol. */
|
||||
#define N_SETD 0x18 /* Data set element symbol. */
|
||||
#define N_SETB 0x1A /* Bss set element symbol. */
|
||||
|
||||
/* This is output from LD. */
|
||||
#define N_SETV 0x1C /* Pointer to set vector in data area. */
|
||||
|
||||
/* Warning symbol. The text gives a warning message, the next symbol
|
||||
in the table will be undefined. When the symbol is referenced, the
|
||||
message is printed. */
|
||||
|
||||
#define N_WARNING 0x1e
|
||||
|
||||
/* Weak symbols. These are a GNU extension to the a.out format. The
|
||||
semantics are those of ELF weak symbols. Weak symbols are always
|
||||
externally visible. The N_WEAK? values are squeezed into the
|
||||
available slots. The value of a N_WEAKU symbol is 0. The values
|
||||
of the other types are the definitions. */
|
||||
#define N_WEAKU 0x0d /* Weak undefined symbol. */
|
||||
#define N_WEAKA 0x0e /* Weak absolute symbol. */
|
||||
#define N_WEAKT 0x0f /* Weak text symbol. */
|
||||
#define N_WEAKD 0x10 /* Weak data symbol. */
|
||||
#define N_WEAKB 0x11 /* Weak bss symbol. */
|
||||
|
||||
/* Relocations
|
||||
|
||||
There are two types of relocation flavours for a.out systems,
|
||||
standard and extended. The standard form is used on systems where the
|
||||
instruction has room for all the bits of an offset to the operand, whilst
|
||||
the extended form is used when an address operand has to be split over n
|
||||
instructions. Eg, on the 68k, each move instruction can reference
|
||||
the target with a displacement of 16 or 32 bits. On the sparc, move
|
||||
instructions use an offset of 14 bits, so the offset is stored in
|
||||
the reloc field, and the data in the section is ignored. */
|
||||
|
||||
/* This structure describes a single relocation to be performed.
|
||||
The text-relocation section of the file is a vector of these structures,
|
||||
all of which apply to the text section.
|
||||
Likewise, the data-relocation section applies to the data section. */
|
||||
|
||||
struct reloc_std_external
|
||||
{
|
||||
bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */
|
||||
bfd_byte r_index[3]; /* Symbol table index of symbol. */
|
||||
bfd_byte r_type[1]; /* Relocation type. */
|
||||
};
|
||||
|
||||
#define RELOC_STD_BITS_PCREL_BIG ((unsigned int) 0x80)
|
||||
#define RELOC_STD_BITS_PCREL_LITTLE ((unsigned int) 0x01)
|
||||
|
||||
#define RELOC_STD_BITS_LENGTH_BIG ((unsigned int) 0x60)
|
||||
#define RELOC_STD_BITS_LENGTH_SH_BIG 5
|
||||
#define RELOC_STD_BITS_LENGTH_LITTLE ((unsigned int) 0x06)
|
||||
#define RELOC_STD_BITS_LENGTH_SH_LITTLE 1
|
||||
|
||||
#define RELOC_STD_BITS_EXTERN_BIG ((unsigned int) 0x10)
|
||||
#define RELOC_STD_BITS_EXTERN_LITTLE ((unsigned int) 0x08)
|
||||
|
||||
#define RELOC_STD_BITS_BASEREL_BIG ((unsigned int) 0x08)
|
||||
#define RELOC_STD_BITS_BASEREL_LITTLE ((unsigned int) 0x10)
|
||||
|
||||
#define RELOC_STD_BITS_JMPTABLE_BIG ((unsigned int) 0x04)
|
||||
#define RELOC_STD_BITS_JMPTABLE_LITTLE ((unsigned int) 0x20)
|
||||
|
||||
#define RELOC_STD_BITS_RELATIVE_BIG ((unsigned int) 0x02)
|
||||
#define RELOC_STD_BITS_RELATIVE_LITTLE ((unsigned int) 0x40)
|
||||
|
||||
#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry. */
|
||||
|
||||
struct reloc_std_internal
|
||||
{
|
||||
bfd_vma r_address; /* Address (within segment) to be relocated. */
|
||||
/* The meaning of r_symbolnum depends on r_extern. */
|
||||
unsigned int r_symbolnum:24;
|
||||
/* Nonzero means value is a pc-relative offset
|
||||
and it should be relocated for changes in its own address
|
||||
as well as for changes in the symbol or section specified. */
|
||||
unsigned int r_pcrel:1;
|
||||
/* Length (as exponent of 2) of the field to be relocated.
|
||||
Thus, a value of 2 indicates 1<<2 bytes. */
|
||||
unsigned int r_length:2;
|
||||
/* 1 => relocate with value of symbol.
|
||||
r_symbolnum is the index of the symbol
|
||||
in files the symbol table.
|
||||
0 => relocate with the address of a segment.
|
||||
r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
|
||||
(the N_EXT bit may be set also, but signifies nothing). */
|
||||
unsigned int r_extern:1;
|
||||
/* The next three bits are for SunOS shared libraries, and seem to
|
||||
be undocumented. */
|
||||
unsigned int r_baserel:1; /* Linkage table relative. */
|
||||
unsigned int r_jmptable:1; /* pc-relative to jump table. */
|
||||
unsigned int r_relative:1; /* "relative relocation". */
|
||||
/* unused */
|
||||
unsigned int r_pad:1; /* Padding -- set to zero. */
|
||||
};
|
||||
|
||||
|
||||
/* EXTENDED RELOCS. */
|
||||
|
||||
struct reloc_ext_external
|
||||
{
|
||||
bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */
|
||||
bfd_byte r_index[3]; /* Symbol table index of symbol. */
|
||||
bfd_byte r_type[1]; /* Relocation type. */
|
||||
bfd_byte r_addend[BYTES_IN_WORD]; /* Datum addend. */
|
||||
};
|
||||
|
||||
#ifndef RELOC_EXT_BITS_EXTERN_BIG
|
||||
#define RELOC_EXT_BITS_EXTERN_BIG ((unsigned int) 0x80)
|
||||
#endif
|
||||
|
||||
#ifndef RELOC_EXT_BITS_EXTERN_LITTLE
|
||||
#define RELOC_EXT_BITS_EXTERN_LITTLE ((unsigned int) 0x01)
|
||||
#endif
|
||||
|
||||
#ifndef RELOC_EXT_BITS_TYPE_BIG
|
||||
#define RELOC_EXT_BITS_TYPE_BIG ((unsigned int) 0x1F)
|
||||
#endif
|
||||
|
||||
#ifndef RELOC_EXT_BITS_TYPE_SH_BIG
|
||||
#define RELOC_EXT_BITS_TYPE_SH_BIG 0
|
||||
#endif
|
||||
|
||||
#ifndef RELOC_EXT_BITS_TYPE_LITTLE
|
||||
#define RELOC_EXT_BITS_TYPE_LITTLE ((unsigned int) 0xF8)
|
||||
#endif
|
||||
|
||||
#ifndef RELOC_EXT_BITS_TYPE_SH_LITTLE
|
||||
#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3
|
||||
#endif
|
||||
|
||||
/* Bytes per relocation entry. */
|
||||
#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD)
|
||||
|
||||
enum reloc_type
|
||||
{
|
||||
/* Simple relocations. */
|
||||
RELOC_8, /* data[0:7] = addend + sv */
|
||||
RELOC_16, /* data[0:15] = addend + sv */
|
||||
RELOC_32, /* data[0:31] = addend + sv */
|
||||
/* PC-rel displacement. */
|
||||
RELOC_DISP8, /* data[0:7] = addend - pc + sv */
|
||||
RELOC_DISP16, /* data[0:15] = addend - pc + sv */
|
||||
RELOC_DISP32, /* data[0:31] = addend - pc + sv */
|
||||
/* Special. */
|
||||
RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */
|
||||
RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */
|
||||
RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */
|
||||
RELOC_22, /* data[0:21] = (addend + sv) */
|
||||
RELOC_13, /* data[0:12] = (addend + sv) */
|
||||
RELOC_LO10, /* data[0:9] = (addend + sv) */
|
||||
RELOC_SFA_BASE,
|
||||
RELOC_SFA_OFF13,
|
||||
/* P.I.C. (base-relative). */
|
||||
RELOC_BASE10, /* Not sure - maybe we can do this the */
|
||||
RELOC_BASE13, /* right way now */
|
||||
RELOC_BASE22,
|
||||
/* For some sort of pc-rel P.I.C. (?) */
|
||||
RELOC_PC10,
|
||||
RELOC_PC22,
|
||||
/* P.I.C. jump table. */
|
||||
RELOC_JMP_TBL,
|
||||
/* Reputedly for shared libraries somehow. */
|
||||
RELOC_SEGOFF16,
|
||||
RELOC_GLOB_DAT,
|
||||
RELOC_JMP_SLOT,
|
||||
RELOC_RELATIVE,
|
||||
|
||||
RELOC_11,
|
||||
RELOC_WDISP2_14,
|
||||
RELOC_WDISP19,
|
||||
RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */
|
||||
RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */
|
||||
|
||||
/* 29K relocation types. */
|
||||
RELOC_JUMPTARG,
|
||||
RELOC_CONST,
|
||||
RELOC_CONSTH,
|
||||
|
||||
/* All the new ones I can think of, for sparc v9. */
|
||||
RELOC_64, /* data[0:63] = addend + sv */
|
||||
RELOC_DISP64, /* data[0:63] = addend - pc + sv */
|
||||
RELOC_WDISP21, /* data[0:20] = (addend + sv - pc)>>2 */
|
||||
RELOC_DISP21, /* data[0:20] = addend - pc + sv */
|
||||
RELOC_DISP14, /* data[0:13] = addend - pc + sv */
|
||||
/* Q .
|
||||
What are the other ones,
|
||||
Since this is a clean slate, can we throw away the ones we dont
|
||||
understand ? Should we sort the values ? What about using a
|
||||
microcode format like the 68k ? */
|
||||
NO_RELOC
|
||||
};
|
||||
|
||||
|
||||
struct reloc_internal
|
||||
{
|
||||
bfd_vma r_address; /* Offset of of data to relocate. */
|
||||
long r_index; /* Symbol table index of symbol. */
|
||||
enum reloc_type r_type; /* Relocation type. */
|
||||
bfd_vma r_addend; /* Datum addend. */
|
||||
};
|
||||
|
||||
/* Q.
|
||||
Should the length of the string table be 4 bytes or 8 bytes ?
|
||||
|
||||
Q.
|
||||
What about archive indexes ? */
|
||||
|
||||
#endif /* __A_OUT_64_H__ */
|
55
include/aout/ar.h
Normal file
55
include/aout/ar.h
Normal file
@ -0,0 +1,55 @@
|
||||
/* archive file definition for GNU software
|
||||
|
||||
Copyright 2001, 2008, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* So far this is correct for BSDish archives. Don't forget that
|
||||
files must begin on an even byte boundary. */
|
||||
|
||||
#ifndef __GNU_AR_H__
|
||||
#define __GNU_AR_H__
|
||||
|
||||
/* Note that the usual '\n' in magic strings may translate to different
|
||||
characters, as allowed by ANSI. '\012' has a fixed value, and remains
|
||||
compatible with existing BSDish archives. */
|
||||
|
||||
#define ARMAG "!<arch>\012" /* For COFF and a.out archives. */
|
||||
#define ARMAGB "!<bout>\012" /* For b.out archives. */
|
||||
#define ARMAGT "!<thin>\012" /* For thin archives. */
|
||||
#define SARMAG 8
|
||||
#define ARFMAG "`\012"
|
||||
|
||||
/* The ar_date field of the armap (__.SYMDEF) member of an archive
|
||||
must be greater than the modified date of the entire file, or
|
||||
BSD-derived linkers complain. We originally write the ar_date with
|
||||
this offset from the real file's mod-time. After finishing the
|
||||
file, we rewrite ar_date if it's not still greater than the mod date. */
|
||||
|
||||
#define ARMAP_TIME_OFFSET 60
|
||||
|
||||
struct ar_hdr
|
||||
{
|
||||
char ar_name[16]; /* Name of this member. */
|
||||
char ar_date[12]; /* File mtime. */
|
||||
char ar_uid[6]; /* Owner uid; printed as decimal. */
|
||||
char ar_gid[6]; /* Owner gid; printed as decimal. */
|
||||
char ar_mode[8]; /* File mode, printed as octal. */
|
||||
char ar_size[10]; /* File size, printed as decimal. */
|
||||
char ar_fmag[2]; /* Should contain ARFMAG. */
|
||||
};
|
||||
|
||||
#endif /* __GNU_AR_H__ */
|
87
include/aout/dynix3.h
Normal file
87
include/aout/dynix3.h
Normal file
@ -0,0 +1,87 @@
|
||||
/* a.out specifics for Sequent Symmetry running Dynix 3.x
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef A_OUT_DYNIX3_H
|
||||
#define A_OUT_DYNIX3_H
|
||||
|
||||
#define external_exec dynix_external_exec
|
||||
|
||||
/* struct exec for Dynix 3
|
||||
|
||||
a_gdtbl and a_bootstrap are only for standalone binaries.
|
||||
Shared data fields are not supported by the kernel as of Dynix 3.1,
|
||||
but are supported by Dynix compiler programs. */
|
||||
struct dynix_external_exec
|
||||
{
|
||||
unsigned char e_info[4];
|
||||
unsigned char e_text[4];
|
||||
unsigned char e_data[4];
|
||||
unsigned char e_bss[4];
|
||||
unsigned char e_syms[4];
|
||||
unsigned char e_entry[4];
|
||||
unsigned char e_trsize[4];
|
||||
unsigned char e_drsize[4];
|
||||
unsigned char e_g_code[8];
|
||||
unsigned char e_g_data[8];
|
||||
unsigned char e_g_desc[8];
|
||||
unsigned char e_shdata[4];
|
||||
unsigned char e_shbss[4];
|
||||
unsigned char e_shdrsize[4];
|
||||
unsigned char e_bootstrap[44];
|
||||
unsigned char e_reserved[12];
|
||||
unsigned char e_version[4];
|
||||
};
|
||||
|
||||
#define EXEC_BYTES_SIZE (128)
|
||||
|
||||
/* All executables under Dynix are demand paged with read-only text,
|
||||
Thus no NMAGIC.
|
||||
|
||||
ZMAGIC has a page of 0s at virtual 0,
|
||||
XMAGIC has an invalid page at virtual 0. */
|
||||
#define OMAGIC 0x12eb /* .o */
|
||||
#define ZMAGIC 0x22eb /* zero @ 0, demand load */
|
||||
#define XMAGIC 0x32eb /* invalid @ 0, demand load */
|
||||
#define SMAGIC 0x42eb /* standalone, not supported here */
|
||||
|
||||
#define N_BADMAG(x) ((OMAGIC != N_MAGIC(x)) && \
|
||||
(ZMAGIC != N_MAGIC(x)) && \
|
||||
(XMAGIC != N_MAGIC(x)) && \
|
||||
(SMAGIC != N_MAGIC(x)))
|
||||
|
||||
#define N_ADDRADJ(x) ((ZMAGIC == N_MAGIC(x) || XMAGIC == N_MAGIC(x)) ? 0x1000 : 0)
|
||||
|
||||
#define N_TXTOFF(x) (EXEC_BYTES_SIZE)
|
||||
#define N_DATOFF(x) (N_TXTOFF(x) + N_TXTSIZE(x))
|
||||
#define N_SHDATOFF(x) (N_DATOFF(x) + (x).a_data)
|
||||
#define N_TRELOFF(x) (N_SHDATOFF(x) + (x).a_shdata)
|
||||
#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
|
||||
#define N_SHDRELOFF(x) (N_DRELOFF(x) + (x).a_drsize)
|
||||
#define N_SYMOFF(x) (N_SHDRELOFF(x) + (x).a_shdrsize)
|
||||
#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
|
||||
|
||||
#define N_TXTADDR(x) \
|
||||
(((OMAGIC == N_MAGIC(x)) || (SMAGIC == N_MAGIC(x))) ? 0 \
|
||||
: TEXT_START_ADDR + EXEC_BYTES_SIZE)
|
||||
|
||||
#define N_TXTSIZE(x) \
|
||||
(((OMAGIC == N_MAGIC(x)) || (SMAGIC == N_MAGIC(x))) ? ((x).a_text) \
|
||||
: ((x).a_text - N_ADDRADJ(x) - EXEC_BYTES_SIZE))
|
||||
|
||||
#endif /* A_OUT_DYNIX3_H */
|
135
include/aout/encap.h
Normal file
135
include/aout/encap.h
Normal file
@ -0,0 +1,135 @@
|
||||
/* Yet Another Try at encapsulating bfd object files in coff.
|
||||
Copyright 1988, 1989, 1991, 2010 Free Software Foundation, Inc.
|
||||
Written by Pace Willisson 12/9/88
|
||||
|
||||
This file is obsolete. It needs to be converted to just define a bunch
|
||||
of stuff that BFD can use to do coff-encapsulated files. --gnu@cygnus.com
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/*
|
||||
* We only use the coff headers to tell the kernel
|
||||
* how to exec the file. Therefore, the only fields that need to
|
||||
* be filled in are the scnptr and vaddr for the text and data
|
||||
* sections, and the vaddr for the bss. As far as coff is concerned,
|
||||
* there is no symbol table, relocation, or line numbers.
|
||||
*
|
||||
* A normal bsd header (struct exec) is placed after the coff headers,
|
||||
* and before the real text. I defined a the new fields 'a_machtype'
|
||||
* and a_flags. If a_machtype is M_386, and a_flags & A_ENCAP is
|
||||
* true, then the bsd header is preceeded by a coff header. Macros
|
||||
* like N_TXTOFF and N_TXTADDR use this field to find the bsd header.
|
||||
*
|
||||
* The only problem is to track down the bsd exec header. The
|
||||
* macros HEADER_OFFSET, etc do this.
|
||||
*/
|
||||
|
||||
#define N_FLAGS_COFF_ENCAPSULATE 0x20 /* coff header precedes bsd header */
|
||||
|
||||
/* Describe the COFF header used for encapsulation. */
|
||||
|
||||
struct coffheader
|
||||
{
|
||||
/* filehdr */
|
||||
unsigned short f_magic;
|
||||
unsigned short f_nscns;
|
||||
long f_timdat;
|
||||
long f_symptr;
|
||||
long f_nsyms;
|
||||
unsigned short f_opthdr;
|
||||
unsigned short f_flags;
|
||||
/* aouthdr */
|
||||
short magic;
|
||||
short vstamp;
|
||||
long tsize;
|
||||
long dsize;
|
||||
long bsize;
|
||||
long entry;
|
||||
long text_start;
|
||||
long data_start;
|
||||
struct coffscn
|
||||
{
|
||||
char s_name[8];
|
||||
long s_paddr;
|
||||
long s_vaddr;
|
||||
long s_size;
|
||||
long s_scnptr;
|
||||
long s_relptr;
|
||||
long s_lnnoptr;
|
||||
unsigned short s_nreloc;
|
||||
unsigned short s_nlnno;
|
||||
long s_flags;
|
||||
} scns[3];
|
||||
};
|
||||
|
||||
/* Describe some of the parameters of the encapsulation,
|
||||
including how to find the encapsulated BSD header. */
|
||||
|
||||
/* FIXME, this is dumb. The same tools can't handle a.outs for different
|
||||
architectures, just because COFF_MAGIC is different; so you need a
|
||||
separate GNU nm for every architecture!!? Unfortunately, it needs to
|
||||
be this way, since the COFF_MAGIC value is determined by the kernel
|
||||
we're trying to fool here. */
|
||||
|
||||
#define COFF_MAGIC_I386 0514 /* I386MAGIC */
|
||||
#define COFF_MAGIC_M68K 0520 /* MC68MAGIC */
|
||||
|
||||
#ifdef COFF_MAGIC
|
||||
short __header_offset_temp;
|
||||
#define HEADER_OFFSET(f) \
|
||||
(__header_offset_temp = 0, \
|
||||
fread ((char *)&__header_offset_temp, sizeof (short), 1, (f)), \
|
||||
fseek ((f), -sizeof (short), 1), \
|
||||
__header_offset_temp==COFF_MAGIC ? sizeof(struct coffheader) : 0)
|
||||
#else
|
||||
#define HEADER_OFFSET(f) 0
|
||||
#endif
|
||||
|
||||
#define HEADER_SEEK(f) (fseek ((f), HEADER_OFFSET((f)), 1))
|
||||
|
||||
/* Describe the characteristics of the BSD header
|
||||
that appears inside the encapsulation. */
|
||||
|
||||
/* Encapsulated coff files that are linked ZMAGIC have a text segment
|
||||
offset just past the header (and a matching TXTADDR), excluding
|
||||
the headers from the text segment proper but keeping the physical
|
||||
layout and the virtual memory layout page-aligned.
|
||||
|
||||
Non-encapsulated a.out files that are linked ZMAGIC have a text
|
||||
segment that starts at 0 and an N_TXTADR similarly offset to 0.
|
||||
They too are page-aligned with each other, but they include the
|
||||
a.out header as part of the text.
|
||||
|
||||
The _N_HDROFF gets sizeof struct exec added to it, so we have
|
||||
to compensate here. See <a.out.gnu.h>. */
|
||||
|
||||
#undef _N_HDROFF
|
||||
#undef N_TXTADDR
|
||||
#undef N_DATADDR
|
||||
|
||||
#define _N_HDROFF(x) ((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \
|
||||
sizeof (struct coffheader) : 0)
|
||||
|
||||
/* Address of text segment in memory after it is loaded. */
|
||||
#define N_TXTADDR(x) \
|
||||
((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \
|
||||
sizeof (struct coffheader) + sizeof (struct exec) : 0)
|
||||
#define SEGMENT_SIZE 0x400000
|
||||
|
||||
#define N_DATADDR(x) \
|
||||
((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \
|
||||
(SEGMENT_SIZE + ((N_TXTADDR(x)+(x).a_text-1) & ~(SEGMENT_SIZE-1))) : \
|
||||
(N_TXTADDR(x)+(x).a_text))
|
43
include/aout/host.h
Normal file
43
include/aout/host.h
Normal file
@ -0,0 +1,43 @@
|
||||
/* host.h - Parameters about the a.out format, based on the host system
|
||||
on which the program is compiled.
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* Address of data segment in memory after it is loaded.
|
||||
It is up to you to define SEGMENT_SIZE on machines not listed here. */
|
||||
#ifndef SEGMENT_SIZE
|
||||
|
||||
#if defined(hp300) || defined(pyr)
|
||||
#define SEGMENT_SIZE page_size
|
||||
#endif
|
||||
|
||||
#ifdef sony
|
||||
#define SEGMENT_SIZE 0x1000
|
||||
#endif /* Sony. */
|
||||
|
||||
#ifdef is68k
|
||||
#define SEGMENT_SIZE 0x20000
|
||||
#endif
|
||||
|
||||
#if defined(m68k) && defined(PORTAR)
|
||||
#define TARGET_PAGE_SIZE 0x400
|
||||
#define SEGMENT_SIZE TARGET_PAGE_SIZE
|
||||
#endif
|
||||
|
||||
#endif /*!defined(SEGMENT_SIZE)*/
|
||||
|
83
include/aout/hp.h
Normal file
83
include/aout/hp.h
Normal file
@ -0,0 +1,83 @@
|
||||
/* Special version of <a.out.h> for use under HP-UX.
|
||||
Copyright 1988, 1991, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* THIS FILE IS OBSOLETE. It needs to be revised as a variant "external"
|
||||
a.out format for use with BFD. */
|
||||
|
||||
/* The `exec' structure and overall layout must be close to HP's when
|
||||
we are running on an HP system, otherwise we will not be able to
|
||||
execute the resulting file. */
|
||||
|
||||
/* Allow this file to be included twice. */
|
||||
#ifndef __GNU_EXEC_MACROS__
|
||||
|
||||
struct exec
|
||||
{
|
||||
unsigned short a_machtype; /* machine type */
|
||||
unsigned short a_magic; /* magic number */
|
||||
unsigned long a_spare1;
|
||||
unsigned long a_spare2;
|
||||
unsigned long a_text; /* length of text, in bytes */
|
||||
unsigned long a_data; /* length of data, in bytes */
|
||||
unsigned long a_bss; /* length of uninitialized data area for file, in bytes */
|
||||
unsigned long a_trsize; /* length of relocation info for text, in bytes */
|
||||
unsigned long a_drsize; /* length of relocation info for data, in bytes */
|
||||
unsigned long a_spare3; /* HP = pascal interface size */
|
||||
unsigned long a_spare4; /* HP = symbol table size */
|
||||
unsigned long a_spare5; /* HP = debug name table size */
|
||||
unsigned long a_entry; /* start address */
|
||||
unsigned long a_spare6; /* HP = source line table size */
|
||||
unsigned long a_spare7; /* HP = value table size */
|
||||
unsigned long a_syms; /* length of symbol table data in file, in bytes */
|
||||
unsigned long a_spare8;
|
||||
};
|
||||
|
||||
/* Tell a.out.gnu.h not to define `struct exec'. */
|
||||
#define __STRUCT_EXEC_OVERRIDE__
|
||||
|
||||
#include "../a.out.gnu.h"
|
||||
|
||||
#undef N_MAGIC
|
||||
#undef N_MACHTYPE
|
||||
#undef N_FLAGS
|
||||
#undef N_SET_INFO
|
||||
#undef N_SET_MAGIC
|
||||
#undef N_SET_MACHTYPE
|
||||
#undef N_SET_FLAGS
|
||||
|
||||
#define N_MAGIC(exec) ((exec) . a_magic)
|
||||
#define N_MACHTYPE(exec) ((exec) . a_machtype)
|
||||
#define N_SET_MAGIC(exec, magic) (((exec) . a_magic) = (magic))
|
||||
#define N_SET_MACHTYPE(exec, machtype) (((exec) . a_machtype) = (machtype))
|
||||
|
||||
#undef N_BADMAG
|
||||
#define N_BADMAG(x) ((_N_BADMAG (x)) || (_N_BADMACH (x)))
|
||||
|
||||
#define _N_BADMACH(x) \
|
||||
(((N_MACHTYPE (x)) != HP9000S200_ID) && \
|
||||
((N_MACHTYPE (x)) != HP98x6_ID))
|
||||
|
||||
#define HP98x6_ID 0x20A
|
||||
#define HP9000S200_ID 0x20C
|
||||
|
||||
#undef _N_HDROFF
|
||||
#define _N_HDROFF(x) (SEGMENT_SIZE - (sizeof (struct exec)))
|
||||
|
||||
#define SEGMENT_SIZE 0x1000
|
||||
|
||||
#endif /* __GNU_EXEC_MACROS__ */
|
132
include/aout/hp300hpux.h
Normal file
132
include/aout/hp300hpux.h
Normal file
@ -0,0 +1,132 @@
|
||||
/* Special version of <a.out.h> for use under HP-UX.
|
||||
Copyright 1988, 1993, 1995, 2001, 2009, 2010
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
struct hp300hpux_exec_bytes
|
||||
{
|
||||
unsigned char e_info[4]; /* a_machtype/a_magic */
|
||||
unsigned char e_spare1[4];
|
||||
unsigned char e_spare2[4];
|
||||
unsigned char e_text[4]; /* length of text, in bytes */
|
||||
unsigned char e_data[4]; /* length of data, in bytes */
|
||||
unsigned char e_bss[4]; /* length of uninitialized data area , in bytes */
|
||||
unsigned char e_trsize[4]; /* length of relocation info for text, in bytes*/
|
||||
unsigned char e_drsize[4]; /* length of relocation info for data, in bytes*/
|
||||
unsigned char e_passize[4];/* HP = pascal interface size */
|
||||
unsigned char e_syms[4]; /* HP = symbol table size */
|
||||
unsigned char e_spare5[4]; /* HP = debug name table size */
|
||||
unsigned char e_entry[4]; /* start address */
|
||||
unsigned char e_spare6[4]; /* HP = source line table size */
|
||||
unsigned char e_supsize[4];/* HP = value table size */
|
||||
unsigned char e_drelocs[4];
|
||||
unsigned char e_extension[4]; /* file offset of extension */
|
||||
};
|
||||
#define EXEC_BYTES_SIZE 64
|
||||
|
||||
struct hp300hpux_nlist_bytes
|
||||
{
|
||||
unsigned char e_value[4];
|
||||
unsigned char e_type[1];
|
||||
unsigned char e_length[1]; /* length of ascii symbol name */
|
||||
unsigned char e_almod[2]; /* alignment mod */
|
||||
unsigned char e_shlib[2]; /* info about dynamic linking */
|
||||
};
|
||||
#define EXTERNAL_NLIST_SIZE 10
|
||||
|
||||
struct hp300hpux_reloc
|
||||
{
|
||||
unsigned char r_address[4];/* offset of of data to relocate */
|
||||
unsigned char r_index[2]; /* symbol table index of symbol */
|
||||
unsigned char r_type[1]; /* relocation type */
|
||||
unsigned char r_length[1]; /* length of item to reloc */
|
||||
};
|
||||
|
||||
struct hp300hpux_header_extension
|
||||
{
|
||||
unsigned char e_syms[4];
|
||||
unsigned char unique_headers[12*4];
|
||||
unsigned char e_header[2]; /* type of header */
|
||||
unsigned char e_version[2]; /* version */
|
||||
unsigned char e_size[4]; /* bytes following*/
|
||||
unsigned char e_extension[4];/* file offset of next extension */
|
||||
};
|
||||
#define EXTERNAL_EXTENSION_HEADER_SIZE (16*4)
|
||||
|
||||
/* hpux separates object files (0x106) and impure executables (0x107) */
|
||||
/* but the bfd code does not distinguish between them. Since we want to*/
|
||||
/* read hpux .o files, we add an special define and use it below in */
|
||||
/* offset and address calculations. */
|
||||
|
||||
#define HPUX_DOT_O_MAGIC 0x106
|
||||
#define OMAGIC 0x107 /* object file or impure executable. */
|
||||
#define NMAGIC 0x108 /* Code indicating pure executable. */
|
||||
#define ZMAGIC 0x10B /* demand-paged executable. */
|
||||
|
||||
#define N_HEADER_IN_TEXT(x) 0
|
||||
|
||||
#if 0 /* libaout.h only uses the lower 8 bits */
|
||||
#define HP98x6_ID 0x20A
|
||||
#define HP9000S200_ID 0x20C
|
||||
#endif
|
||||
#define HP98x6_ID 0x0A
|
||||
#define HP9000S200_ID 0x0C
|
||||
|
||||
#define N_BADMAG(x) ((_N_BADMAG (x)) || (_N_BADMACH (x)))
|
||||
|
||||
#define N_DATADDR(x) \
|
||||
((N_MAGIC (x) == OMAGIC || N_MAGIC (x) == HPUX_DOT_O_MAGIC) \
|
||||
? (N_TXTADDR (x) + N_TXTSIZE (x)) \
|
||||
: (N_SEGSIZE (x) + ((N_TXTADDR (x) + N_TXTSIZE (x) - 1) \
|
||||
& ~ (bfd_vma) (N_SEGSIZE (x) - 1))))
|
||||
|
||||
#define _N_BADMACH(x) \
|
||||
(((N_MACHTYPE (x)) != HP9000S200_ID) && ((N_MACHTYPE (x)) != HP98x6_ID))
|
||||
|
||||
#define _N_BADMAG(x) (N_MAGIC(x) != HPUX_DOT_O_MAGIC \
|
||||
&& N_MAGIC(x) != OMAGIC \
|
||||
&& N_MAGIC(x) != NMAGIC \
|
||||
&& N_MAGIC(x) != ZMAGIC )
|
||||
|
||||
#undef _N_HDROFF
|
||||
#define _N_HDROFF(x) (SEGMENT_SIZE - (sizeof (struct exec)))
|
||||
|
||||
#undef N_DATOFF
|
||||
#undef N_PASOFF
|
||||
#undef N_SYMOFF
|
||||
#undef N_SUPOFF
|
||||
#undef N_TRELOFF
|
||||
#undef N_DRELOFF
|
||||
#undef N_STROFF
|
||||
|
||||
#define N_DATOFF(x) ( N_TXTOFF(x) + N_TXTSIZE(x) )
|
||||
#define N_PASOFF(x) ( N_DATOFF(x) + (x).a_data)
|
||||
#define N_SYMOFF(x) ( N_PASOFF(x) /* + (x).a_passize*/ )
|
||||
#define N_SUPOFF(x) ( N_SYMOFF(x) + (x).a_syms )
|
||||
#define N_TRELOFF(x) ( N_SUPOFF(x) /* + 0 (x).a_supsize*/ )
|
||||
#define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize )
|
||||
#define N_EXTHOFF(x) ( N_DRELOFF(x) /* + 0 (x).a_drsize */)
|
||||
#define N_STROFF(x) ( 0 /* no string table */ )
|
||||
|
||||
/* use these when the file has gnu symbol tables */
|
||||
#define N_GNU_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
|
||||
#define N_GNU_DRELOFF(x) (N_GNU_TRELOFF(x) + (x).a_trsize)
|
||||
#define N_GNU_SYMOFF(x) (N_GNU_DRELOFF(x) + (x).a_drsize)
|
||||
|
||||
#define TARGET_PAGE_SIZE 0x1000
|
||||
#define SEGMENT_SIZE 0x1000
|
||||
#define TEXT_START_ADDR 0
|
22
include/aout/hppa.h
Normal file
22
include/aout/hppa.h
Normal file
@ -0,0 +1,22 @@
|
||||
/* Copyright 2012 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#include "filehdr.h"
|
||||
#include "aouthdr.h"
|
||||
#include "scnhdr.h"
|
||||
#include "spacehdr.h"
|
||||
#include "syms.h"
|
63
include/aout/ranlib.h
Normal file
63
include/aout/ranlib.h
Normal file
@ -0,0 +1,63 @@
|
||||
/* ranlib.h -- archive library index member definition for GNU.
|
||||
Copyright 1990, 1991, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* The Symdef member of an archive contains two things:
|
||||
a table that maps symbol-string offsets to file offsets,
|
||||
and a symbol-string table. All the symbol names are
|
||||
run together (each with trailing null) in the symbol-string
|
||||
table. There is a single longword bytecount on the front
|
||||
of each of these tables. Thus if we have two symbols,
|
||||
"foo" and "_bar", that are in archive members at offsets
|
||||
200 and 900, it would look like this:
|
||||
16 ; byte count of index table
|
||||
0 ; offset of "foo" in string table
|
||||
200 ; offset of foo-module in file
|
||||
4 ; offset of "bar" in string table
|
||||
900 ; offset of bar-module in file
|
||||
9 ; byte count of string table
|
||||
"foo\0_bar\0" ; string table */
|
||||
|
||||
#define RANLIBMAG "__.SYMDEF" /* Archive file name containing index */
|
||||
#define RANLIBSKEW 3 /* Creation time offset */
|
||||
|
||||
/* Format of __.SYMDEF:
|
||||
First, a longword containing the size of the 'symdef' data that follows.
|
||||
Second, zero or more 'symdef' structures.
|
||||
Third, a longword containing the length of symbol name strings.
|
||||
Fourth, zero or more symbol name strings (each followed by a null). */
|
||||
|
||||
struct symdef
|
||||
{
|
||||
union
|
||||
{
|
||||
unsigned long string_offset; /* In the file */
|
||||
char *name; /* In memory, sometimes */
|
||||
} s;
|
||||
/* this points to the front of the file header (AKA member header --
|
||||
a struct ar_hdr), not to the front of the file or into the file).
|
||||
in other words it only tells you which file to read */
|
||||
unsigned long file_offset;
|
||||
};
|
||||
|
||||
/* Compatability with BSD code */
|
||||
|
||||
#define ranlib symdef
|
||||
#define ran_un s
|
||||
#define ran_strx string_offset
|
||||
#define ran_name name
|
||||
#define ran_off file_offset
|
67
include/aout/reloc.h
Normal file
67
include/aout/reloc.h
Normal file
@ -0,0 +1,67 @@
|
||||
/* reloc.h -- Header file for relocation information.
|
||||
Copyright 1989, 1990, 1991, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* Relocation types for a.out files using reloc_info_extended
|
||||
(SPARC and AMD 29000). */
|
||||
|
||||
#ifndef _RELOC_H_READ_
|
||||
#define _RELOC_H_READ_ 1
|
||||
|
||||
enum reloc_type
|
||||
{
|
||||
RELOC_8, RELOC_16, RELOC_32, /* simple relocations */
|
||||
RELOC_DISP8, RELOC_DISP16, RELOC_DISP32, /* pc-rel displacement */
|
||||
RELOC_WDISP30, RELOC_WDISP22,
|
||||
RELOC_HI22, RELOC_22,
|
||||
RELOC_13, RELOC_LO10,
|
||||
RELOC_SFA_BASE, RELOC_SFA_OFF13,
|
||||
RELOC_BASE10, RELOC_BASE13, RELOC_BASE22, /* P.I.C. (base-relative) */
|
||||
RELOC_PC10, RELOC_PC22, /* for some sort of pc-rel P.I.C. (?) */
|
||||
RELOC_JMP_TBL, /* P.I.C. jump table */
|
||||
RELOC_SEGOFF16, /* reputedly for shared libraries somehow */
|
||||
RELOC_GLOB_DAT, RELOC_JMP_SLOT, RELOC_RELATIVE,
|
||||
RELOC_11,
|
||||
RELOC_WDISP2_14,
|
||||
RELOC_WDISP19,
|
||||
RELOC_HHI22,
|
||||
RELOC_HLO10,
|
||||
|
||||
/* 29K relocation types */
|
||||
RELOC_JUMPTARG, RELOC_CONST, RELOC_CONSTH,
|
||||
|
||||
RELOC_WDISP14, RELOC_WDISP21,
|
||||
|
||||
NO_RELOC
|
||||
};
|
||||
|
||||
#define RELOC_TYPE_NAMES \
|
||||
"8", "16", "32", "DISP8", \
|
||||
"DISP16", "DISP32", "WDISP30", "WDISP22", \
|
||||
"HI22", "22", "13", "LO10", \
|
||||
"SFA_BASE", "SFAOFF13", "BASE10", "BASE13", \
|
||||
"BASE22", "PC10", "PC22", "JMP_TBL", \
|
||||
"SEGOFF16", "GLOB_DAT", "JMP_SLOT", "RELATIVE", \
|
||||
"11", "WDISP2_14", "WDISP19", "HHI22", \
|
||||
"HLO10", \
|
||||
"JUMPTARG", "CONST", "CONSTH", "WDISP14", \
|
||||
"WDISP21", \
|
||||
"NO_RELOC"
|
||||
|
||||
#endif /* _RELOC_H_READ_ */
|
||||
|
||||
/* end of reloc.h */
|
283
include/aout/stab.def
Normal file
283
include/aout/stab.def
Normal file
@ -0,0 +1,283 @@
|
||||
/* Table of DBX symbol codes for the GNU system.
|
||||
Copyright 1988, 1991, 1992, 1993, 1994, 1996, 1998, 2004, 2010
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* New stab from Solaris 2. This uses an n_type of 0, which in a.out files
|
||||
overlaps the N_UNDF used for ordinary symbols. In ELF files, the
|
||||
debug information is in a different file section, so there is no conflict.
|
||||
This symbol's n_value gives the size of the string section associated
|
||||
with this file. The symbol's n_strx (relative to the just-updated
|
||||
string section start address) gives the name of the source file,
|
||||
e.g. "foo.c", without any path information. The symbol's n_desc gives
|
||||
the count of upcoming symbols associated with this file (not including
|
||||
this one). */
|
||||
/* __define_stab (N_UNDF, 0x00, "UNDF") */
|
||||
|
||||
/* Global variable. Only the name is significant.
|
||||
To find the address, look in the corresponding external symbol. */
|
||||
__define_stab (N_GSYM, 0x20, "GSYM")
|
||||
|
||||
/* Function name for BSD Fortran. Only the name is significant.
|
||||
To find the address, look in the corresponding external symbol. */
|
||||
__define_stab (N_FNAME, 0x22, "FNAME")
|
||||
|
||||
/* Function name or text-segment variable for C. Value is its address.
|
||||
Desc is supposedly starting line number, but GCC doesn't set it
|
||||
and DBX seems not to miss it. */
|
||||
__define_stab (N_FUN, 0x24, "FUN")
|
||||
|
||||
/* Data-segment variable with internal linkage. Value is its address.
|
||||
"Static Sym". */
|
||||
__define_stab (N_STSYM, 0x26, "STSYM")
|
||||
|
||||
/* BSS-segment variable with internal linkage. Value is its address. */
|
||||
__define_stab (N_LCSYM, 0x28, "LCSYM")
|
||||
|
||||
/* Name of main routine. Only the name is significant. */
|
||||
__define_stab (N_MAIN, 0x2a, "MAIN")
|
||||
|
||||
/* Solaris2: Read-only data symbols. */
|
||||
__define_stab (N_ROSYM, 0x2c, "ROSYM")
|
||||
|
||||
/* MacOS X:
|
||||
The beginning of a relocatable function block - including stabs. */
|
||||
__define_stab (N_BNSYM, 0x2e, "BNSYM")
|
||||
|
||||
/* Global symbol in Pascal.
|
||||
Supposedly the value is its line number; I'm skeptical. */
|
||||
__define_stab (N_PC, 0x30, "PC")
|
||||
|
||||
/* Number of symbols: 0, files,,funcs,lines according to Ultrix V4.0. */
|
||||
__define_stab (N_NSYMS, 0x32, "NSYMS")
|
||||
|
||||
/* "No DST map for sym: name, ,0,type,ignored" according to Ultrix V4.0. */
|
||||
__define_stab (N_NOMAP, 0x34, "NOMAP")
|
||||
|
||||
/* New stab from Solaris 2. Like N_SO, but for the object file. Two in
|
||||
a row provide the build directory and the relative path of the .o from it.
|
||||
Solaris2 uses this to avoid putting the stabs info into the linked
|
||||
executable; this stab goes into the ".stab.index" section, and the debugger
|
||||
reads the real stabs directly from the .o files instead. */
|
||||
__define_stab (N_OBJ, 0x38, "OBJ")
|
||||
|
||||
/* New stab from Solaris 2. Options for the debugger, related to the
|
||||
source language for this module. E.g. whether to use ANSI
|
||||
integral promotions or traditional integral promotions. */
|
||||
__define_stab (N_OPT, 0x3c, "OPT")
|
||||
|
||||
/* Register variable. Value is number of register. */
|
||||
__define_stab (N_RSYM, 0x40, "RSYM")
|
||||
|
||||
/* Modula-2 compilation unit. Can someone say what info it contains? */
|
||||
__define_stab (N_M2C, 0x42, "M2C")
|
||||
|
||||
/* Line number in text segment. Desc is the line number;
|
||||
value is corresponding address. On Solaris2, the line number is
|
||||
relative to the start of the current function. */
|
||||
__define_stab (N_SLINE, 0x44, "SLINE")
|
||||
|
||||
/* Similar, for data segment. */
|
||||
__define_stab (N_DSLINE, 0x46, "DSLINE")
|
||||
|
||||
/* Similar, for bss segment. */
|
||||
__define_stab (N_BSLINE, 0x48, "BSLINE")
|
||||
|
||||
/* Sun's source-code browser stabs. ?? Don't know what the fields are.
|
||||
Supposedly the field is "path to associated .cb file". THIS VALUE
|
||||
OVERLAPS WITH N_BSLINE! */
|
||||
__define_stab_duplicate (N_BROWS, 0x48, "BROWS")
|
||||
|
||||
/* GNU Modula-2 definition module dependency. Value is the modification time
|
||||
of the definition file. Other is non-zero if it is imported with the
|
||||
GNU M2 keyword %INITIALIZE. Perhaps N_M2C can be used if there
|
||||
are enough empty fields? */
|
||||
__define_stab(N_DEFD, 0x4a, "DEFD")
|
||||
|
||||
/* New in Solaris2. Function start/body/end line numbers. */
|
||||
__define_stab(N_FLINE, 0x4C, "FLINE")
|
||||
|
||||
/* MacOS X: This tells the end of a relocatable function + debugging info. */
|
||||
__define_stab(N_ENSYM, 0x4E, "ENSYM")
|
||||
|
||||
/* THE FOLLOWING TWO STAB VALUES CONFLICT. Happily, one is for Modula-2
|
||||
and one is for C++. Still,... */
|
||||
/* GNU C++ exception variable. Name is variable name. */
|
||||
__define_stab (N_EHDECL, 0x50, "EHDECL")
|
||||
/* Modula2 info "for imc": name,,0,0,0 according to Ultrix V4.0. */
|
||||
__define_stab_duplicate (N_MOD2, 0x50, "MOD2")
|
||||
|
||||
/* GNU C++ `catch' clause. Value is its address. Desc is nonzero if
|
||||
this entry is immediately followed by a CAUGHT stab saying what exception
|
||||
was caught. Multiple CAUGHT stabs means that multiple exceptions
|
||||
can be caught here. If Desc is 0, it means all exceptions are caught
|
||||
here. */
|
||||
__define_stab (N_CATCH, 0x54, "CATCH")
|
||||
|
||||
/* Structure or union element. Value is offset in the structure. */
|
||||
__define_stab (N_SSYM, 0x60, "SSYM")
|
||||
|
||||
/* Solaris2: Last stab emitted for module. */
|
||||
__define_stab (N_ENDM, 0x62, "ENDM")
|
||||
|
||||
/* Name of main source file.
|
||||
Value is starting text address of the compilation.
|
||||
If multiple N_SO's appear, the first to contain a trailing / is the
|
||||
compilation directory. The first to not contain a trailing / is the
|
||||
source file name, relative to the compilation directory. Others (perhaps
|
||||
resulting from cfront) are ignored.
|
||||
On Solaris2, value is undefined, but desc is a source-language code. */
|
||||
|
||||
__define_stab (N_SO, 0x64, "SO")
|
||||
|
||||
/* Apple: This is the stab that associated the .o file with the
|
||||
N_SO stab, in the case where debug info is mostly stored in the .o file. */
|
||||
__define_stab (N_OSO, 0x66, "OSO")
|
||||
|
||||
/* SunPro F77: Name of alias. */
|
||||
__define_stab (N_ALIAS, 0x6c, "ALIAS")
|
||||
|
||||
/* Automatic variable in the stack. Value is offset from frame pointer.
|
||||
Also used for type descriptions. */
|
||||
__define_stab (N_LSYM, 0x80, "LSYM")
|
||||
|
||||
/* Beginning of an include file. Only Sun uses this.
|
||||
In an object file, only the name is significant.
|
||||
The Sun linker puts data into some of the other fields. */
|
||||
__define_stab (N_BINCL, 0x82, "BINCL")
|
||||
|
||||
/* Name of sub-source file (#include file).
|
||||
Value is starting text address of the compilation. */
|
||||
__define_stab (N_SOL, 0x84, "SOL")
|
||||
|
||||
/* Parameter variable. Value is offset from argument pointer.
|
||||
(On most machines the argument pointer is the same as the frame pointer. */
|
||||
__define_stab (N_PSYM, 0xa0, "PSYM")
|
||||
|
||||
/* End of an include file. No name.
|
||||
This and N_BINCL act as brackets around the file's output.
|
||||
In an object file, there is no significant data in this entry.
|
||||
The Sun linker puts data into some of the fields. */
|
||||
__define_stab (N_EINCL, 0xa2, "EINCL")
|
||||
|
||||
/* Alternate entry point. Value is its address. */
|
||||
__define_stab (N_ENTRY, 0xa4, "ENTRY")
|
||||
|
||||
/* Beginning of lexical block.
|
||||
The desc is the nesting level in lexical blocks.
|
||||
The value is the address of the start of the text for the block.
|
||||
The variables declared inside the block *precede* the N_LBRAC symbol.
|
||||
On Solaris2, the value is relative to the start of the current function. */
|
||||
__define_stab (N_LBRAC, 0xc0, "LBRAC")
|
||||
|
||||
/* Place holder for deleted include file. Replaces a N_BINCL and everything
|
||||
up to the corresponding N_EINCL. The Sun linker generates these when
|
||||
it finds multiple identical copies of the symbols from an include file.
|
||||
This appears only in output from the Sun linker. */
|
||||
__define_stab (N_EXCL, 0xc2, "EXCL")
|
||||
|
||||
/* Modula-2 scope information. Can someone say what info it contains? */
|
||||
__define_stab (N_SCOPE, 0xc4, "SCOPE")
|
||||
|
||||
/* Solaris2: Patch Run Time Checker. */
|
||||
__define_stab (N_PATCH, 0xd0, "PATCH")
|
||||
|
||||
/* End of a lexical block. Desc matches the N_LBRAC's desc.
|
||||
The value is the address of the end of the text for the block.
|
||||
On Solaris2, the value is relative to the start of the current function. */
|
||||
__define_stab (N_RBRAC, 0xe0, "RBRAC")
|
||||
|
||||
/* Begin named common block. Only the name is significant. */
|
||||
__define_stab (N_BCOMM, 0xe2, "BCOMM")
|
||||
|
||||
/* End named common block. Only the name is significant
|
||||
(and it should match the N_BCOMM). */
|
||||
__define_stab (N_ECOMM, 0xe4, "ECOMM")
|
||||
|
||||
/* Member of a common block; value is offset within the common block.
|
||||
This should occur within a BCOMM/ECOMM pair. */
|
||||
__define_stab (N_ECOML, 0xe8, "ECOML")
|
||||
|
||||
/* Solaris2: Pascal "with" statement: type,,0,0,offset */
|
||||
__define_stab (N_WITH, 0xea, "WITH")
|
||||
|
||||
/* These STAB's are used on Gould systems for Non-Base register symbols
|
||||
or something like that. FIXME. I have assigned the values at random
|
||||
since I don't have a Gould here. Fixups from Gould folk welcome... */
|
||||
__define_stab (N_NBTEXT, 0xF0, "NBTEXT")
|
||||
__define_stab (N_NBDATA, 0xF2, "NBDATA")
|
||||
__define_stab (N_NBBSS, 0xF4, "NBBSS")
|
||||
__define_stab (N_NBSTS, 0xF6, "NBSTS")
|
||||
__define_stab (N_NBLCS, 0xF8, "NBLCS")
|
||||
|
||||
/* Second symbol entry containing a length-value for the preceding entry.
|
||||
The value is the length. */
|
||||
__define_stab (N_LENG, 0xfe, "LENG")
|
||||
|
||||
/* The above information, in matrix format.
|
||||
|
||||
STAB MATRIX
|
||||
_________________________________________________
|
||||
| 00 - 1F are not dbx stab symbols |
|
||||
| In most cases, the low bit is the EXTernal bit|
|
||||
|
||||
| 00 UNDEF | 02 ABS | 04 TEXT | 06 DATA |
|
||||
| 01 |EXT | 03 |EXT | 05 |EXT | 07 |EXT |
|
||||
|
||||
| 08 BSS | 0A INDR | 0C FN_SEQ | 0E WEAKA |
|
||||
| 09 |EXT | 0B | 0D WEAKU | 0F WEAKT |
|
||||
|
||||
| 10 WEAKD | 12 COMM | 14 SETA | 16 SETT |
|
||||
| 11 WEAKB | 13 | 15 | 17 |
|
||||
|
||||
| 18 SETD | 1A SETB | 1C SETV | 1E WARNING|
|
||||
| 19 | 1B | 1D | 1F FN |
|
||||
|
||||
|_______________________________________________|
|
||||
| Debug entries with bit 01 set are unused. |
|
||||
| 20 GSYM | 22 FNAME | 24 FUN | 26 STSYM |
|
||||
| 28 LCSYM | 2A MAIN | 2C ROSYM | 2E |
|
||||
| 30 PC | 32 NSYMS | 34 NOMAP | 36 |
|
||||
| 38 OBJ | 3A | 3C OPT | 3E |
|
||||
| 40 RSYM | 42 M2C | 44 SLINE | 46 DSLINE |
|
||||
| 48 BSLINE*| 4A DEFD | 4C FLINE | 4E |
|
||||
| 50 EHDECL*| 52 | 54 CATCH | 56 |
|
||||
| 58 | 5A | 5C | 5E |
|
||||
| 60 SSYM | 62 ENDM | 64 SO | 66 |
|
||||
| 68 | 6A | 6C ALIAS | 6E |
|
||||
| 70 | 72 | 74 | 76 |
|
||||
| 78 | 7A | 7C | 7E |
|
||||
| 80 LSYM | 82 BINCL | 84 SOL | 86 |
|
||||
| 88 | 8A | 8C | 8E |
|
||||
| 90 | 92 | 94 | 96 |
|
||||
| 98 | 9A | 9C | 9E |
|
||||
| A0 PSYM | A2 EINCL | A4 ENTRY | A6 |
|
||||
| A8 | AA | AC | AE |
|
||||
| B0 | B2 | B4 | B6 |
|
||||
| B8 | BA | BC | BE |
|
||||
| C0 LBRAC | C2 EXCL | C4 SCOPE | C6 |
|
||||
| C8 | CA | CC | CE |
|
||||
| D0 PATCH | D2 | D4 | D6 |
|
||||
| D8 | DA | DC | DE |
|
||||
| E0 RBRAC | E2 BCOMM | E4 ECOMM | E6 |
|
||||
| E8 ECOML | EA WITH | EC | EE |
|
||||
| F0 | F2 | F4 | F6 |
|
||||
| F8 | FA | FC | FE LENG |
|
||||
+-----------------------------------------------+
|
||||
* 50 EHDECL is also MOD2.
|
||||
* 48 BSLINE is also BROWS.
|
||||
*/
|
55
include/aout/stab_gnu.h
Normal file
55
include/aout/stab_gnu.h
Normal file
@ -0,0 +1,55 @@
|
||||
/* gnu_stab.h Definitions for GNU extensions to STABS
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
#ifndef __GNU_STAB__
|
||||
|
||||
/* Indicate the GNU stab.h is in use. */
|
||||
|
||||
#define __GNU_STAB__
|
||||
|
||||
#define __define_stab(NAME, CODE, STRING) NAME=CODE,
|
||||
#define __define_stab_duplicate(NAME, CODE, STRING) NAME=CODE,
|
||||
|
||||
enum __stab_debug_code
|
||||
{
|
||||
#include "aout/stab.def"
|
||||
LAST_UNUSED_STAB_CODE
|
||||
};
|
||||
|
||||
#undef __define_stab
|
||||
|
||||
/* Definitions of "desc" field for N_SO stabs in Solaris2. */
|
||||
|
||||
#define N_SO_AS 1
|
||||
#define N_SO_C 2
|
||||
#define N_SO_ANSI_C 3
|
||||
#define N_SO_CC 4 /* C++ */
|
||||
#define N_SO_FORTRAN 5
|
||||
#define N_SO_PASCAL 6
|
||||
|
||||
/* Solaris2: Floating point type values in basic types. */
|
||||
|
||||
#define NF_NONE 0
|
||||
#define NF_SINGLE 1 /* IEEE 32-bit */
|
||||
#define NF_DOUBLE 2 /* IEEE 64-bit */
|
||||
#define NF_COMPLEX 3 /* Fortran complex */
|
||||
#define NF_COMPLEX16 4 /* Fortran double complex */
|
||||
#define NF_COMPLEX32 5 /* Fortran complex*16 */
|
||||
#define NF_LDOUBLE 6 /* Long double (whatever that is) */
|
||||
|
||||
#endif /* __GNU_STAB_ */
|
239
include/aout/sun4.h
Normal file
239
include/aout/sun4.h
Normal file
@ -0,0 +1,239 @@
|
||||
/* SPARC-specific values for a.out files
|
||||
|
||||
Copyright 2001, 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* Some systems, e.g., AIX, may have defined this in header files already
|
||||
included. */
|
||||
#undef TARGET_PAGE_SIZE
|
||||
#define TARGET_PAGE_SIZE 0x2000 /* 8K. aka NBPG in <sys/param.h> */
|
||||
/* Note that some SPARCs have 4K pages, some 8K, some others. */
|
||||
|
||||
#define SEG_SIZE_SPARC TARGET_PAGE_SIZE
|
||||
#define SEG_SIZE_SUN3 0x20000 /* Resolution of r/w protection hw */
|
||||
|
||||
#define TEXT_START_ADDR TARGET_PAGE_SIZE /* Location 0 is not accessible */
|
||||
#define N_HEADER_IN_TEXT(x) 1
|
||||
|
||||
/* Non-default definitions of the accessor macros... */
|
||||
|
||||
/* Segment size varies on Sun-3 versus Sun-4. */
|
||||
|
||||
#define N_SEGSIZE(x) (N_MACHTYPE(x) == M_SPARC? SEG_SIZE_SPARC: \
|
||||
N_MACHTYPE(x) == M_68020? SEG_SIZE_SUN3: \
|
||||
/* Guess? */ TARGET_PAGE_SIZE)
|
||||
|
||||
/* Virtual Address of text segment from the a.out file. For OMAGIC,
|
||||
(almost always "unlinked .o's" these days), should be zero.
|
||||
Sun added a kludge so that shared libraries linked ZMAGIC get
|
||||
an address of zero if a_entry (!!!) is lower than the otherwise
|
||||
expected text address. These kludges have gotta go!
|
||||
For linked files, should reflect reality if we know it. */
|
||||
|
||||
#define N_SHARED_LIB(x) ((x).a_entry < TEXT_START_ADDR \
|
||||
&& (x).a_text >= EXEC_BYTES_SIZE)
|
||||
|
||||
/* This differs from the version in aout64.h (which we override by defining
|
||||
it here) only for NMAGIC (we return TEXT_START_ADDR+EXEC_BYTES_SIZE;
|
||||
they return 0). */
|
||||
|
||||
#define N_TXTADDR(x) \
|
||||
(N_MAGIC(x)==OMAGIC? 0 \
|
||||
: (N_MAGIC(x) == ZMAGIC && (x).a_entry < TEXT_START_ADDR)? 0 \
|
||||
: TEXT_START_ADDR+EXEC_BYTES_SIZE)
|
||||
|
||||
/* When a file is linked against a shared library on SunOS 4, the
|
||||
dynamic bit in the exec header is set, and the first symbol in the
|
||||
symbol table is __DYNAMIC. Its value is the address of the
|
||||
following structure. */
|
||||
|
||||
struct external_sun4_dynamic
|
||||
{
|
||||
/* The version number of the structure. SunOS 4.1.x creates files
|
||||
with version number 3, which is what this structure is based on.
|
||||
According to gdb, version 2 is similar. I believe that version 2
|
||||
used a different type of procedure linkage table, and there may
|
||||
have been other differences. */
|
||||
bfd_byte ld_version[4];
|
||||
/* The virtual address of a 28 byte structure used in debugging.
|
||||
The contents are filled in at run time by ld.so. */
|
||||
bfd_byte ldd[4];
|
||||
/* The virtual address of another structure with information about
|
||||
how to relocate the executable at run time. */
|
||||
bfd_byte ld[4];
|
||||
};
|
||||
|
||||
/* The size of the debugging structure pointed to by the debugger
|
||||
field of __DYNAMIC. */
|
||||
#define EXTERNAL_SUN4_DYNAMIC_DEBUGGER_SIZE (24)
|
||||
|
||||
/* The structure pointed to by the linker field of __DYNAMIC. As far
|
||||
as I can tell, most of the addresses in this structure are offsets
|
||||
within the file, but some are actually virtual addresses. */
|
||||
|
||||
struct internal_sun4_dynamic_link
|
||||
{
|
||||
/* Linked list of loaded objects. This is filled in at runtime by
|
||||
ld.so and probably by dlopen. */
|
||||
unsigned long ld_loaded;
|
||||
|
||||
/* The address of the list of names of shared objects which must be
|
||||
included at runtime. Each entry in the list is 16 bytes: the 4
|
||||
byte address of the string naming the object (e.g., for -lc this
|
||||
is "c"); 4 bytes of flags--the high bit is whether to search for
|
||||
the object using the library path; the 2 byte major version
|
||||
number; the 2 byte minor version number; the 4 byte address of
|
||||
the next entry in the list (zero if this is the last entry). The
|
||||
version numbers seem to only be non-zero when doing library
|
||||
searching. */
|
||||
unsigned long ld_need;
|
||||
|
||||
/* The address of the path to search for the shared objects which
|
||||
must be included. This points to a string in PATH format which
|
||||
is generated from the -L arguments to the linker. According to
|
||||
the man page, ld.so implicitly adds ${LD_LIBRARY_PATH} to the
|
||||
beginning of this string and /lib:/usr/lib:/usr/local/lib to the
|
||||
end. The string is terminated by a null byte. This field is
|
||||
zero if there is no additional path. */
|
||||
unsigned long ld_rules;
|
||||
|
||||
/* The address of the global offset table. This appears to be a
|
||||
virtual address, not a file offset. The first entry in the
|
||||
global offset table seems to be the virtual address of the
|
||||
sun4_dynamic structure (the same value as the __DYNAMIC symbol).
|
||||
The global offset table is used for PIC code to hold the
|
||||
addresses of variables. A dynamically linked file which does not
|
||||
itself contain PIC code has a four byte global offset table. */
|
||||
unsigned long ld_got;
|
||||
|
||||
/* The address of the procedure linkage table. This appears to be a
|
||||
virtual address, not a file offset.
|
||||
|
||||
On a SPARC, the table is composed of 12 byte entries, each of
|
||||
which consists of three instructions. The first entry is
|
||||
sethi %hi(0),%g1
|
||||
jmp %g1
|
||||
nop
|
||||
These instructions are changed by ld.so into a jump directly into
|
||||
ld.so itself. Each subsequent entry is
|
||||
save %sp, -96, %sp
|
||||
call <address of first entry in procedure linkage table>
|
||||
<reloc_number | 0x01000000>
|
||||
The reloc_number is the number of the reloc to use to resolve
|
||||
this entry. The reloc will be a JMP_SLOT reloc against some
|
||||
symbol that is not defined in this object file but should be
|
||||
defined in a shared object (if it is not, ld.so will report a
|
||||
runtime error and exit). The constant 0x010000000 turns the
|
||||
reloc number into a sethi of %g0, which does nothing since %g0 is
|
||||
hardwired to zero.
|
||||
|
||||
When one of these entries is executed, it winds up calling into
|
||||
ld.so. ld.so looks at the reloc number, available via the return
|
||||
address, to determine which entry this is. It then looks at the
|
||||
reloc and patches up the entry in the table into a sethi and jmp
|
||||
to the real address followed by a nop. This means that the reloc
|
||||
lookup only has to happen once, and it also means that the
|
||||
relocation only needs to be done if the function is actually
|
||||
called. The relocation is expensive because ld.so must look up
|
||||
the symbol by name.
|
||||
|
||||
The size of the procedure linkage table is given by the ld_plt_sz
|
||||
field. */
|
||||
unsigned long ld_plt;
|
||||
|
||||
/* The address of the relocs. These are in the same format as
|
||||
ordinary relocs. Symbol index numbers refer to the symbols
|
||||
pointed to by ld_stab. I think the only way to determine the
|
||||
number of relocs is to assume that all the bytes from ld_rel to
|
||||
ld_hash contain reloc entries. */
|
||||
unsigned long ld_rel;
|
||||
|
||||
/* The address of a hash table of symbols. The hash table has
|
||||
roughly the same number of entries as there are dynamic symbols;
|
||||
I think the only way to get the exact size is to assume that
|
||||
every byte from ld_hash to ld_stab is devoted to the hash table.
|
||||
|
||||
Each entry in the hash table is eight bytes. The first four
|
||||
bytes are a symbol index into the dynamic symbols. The second
|
||||
four bytes are the index of the next hash table entry in the
|
||||
bucket. The ld_buckets field gives the number of buckets, say B.
|
||||
The first B entries in the hash table each start a bucket which
|
||||
is chained through the second four bytes of each entry. A value
|
||||
of zero ends the chain.
|
||||
|
||||
The hash function is simply
|
||||
h = 0;
|
||||
while (*string != '\0')
|
||||
h = (h << 1) + *string++;
|
||||
h &= 0x7fffffff;
|
||||
|
||||
To look up a symbol, compute the hash value of the name. Take
|
||||
the modulos of hash value and the number of buckets. Start at
|
||||
that entry in the hash table. See if the symbol (from the first
|
||||
four bytes of the hash table entry) has the name you are looking
|
||||
for. If not, use the chain field (the second four bytes of the
|
||||
hash table entry) to move on to the next entry in this bucket.
|
||||
If the chain field is zero you have reached the end of the
|
||||
bucket, and the symbol is not in the hash table. */
|
||||
unsigned long ld_hash;
|
||||
|
||||
/* The address of the symbol table. This is a list of
|
||||
external_nlist structures. The string indices are relative to
|
||||
the ld_symbols field. I think the only way to determine the
|
||||
number of symbols is to assume that all the bytes between ld_stab
|
||||
and ld_symbols are external_nlist structures. */
|
||||
unsigned long ld_stab;
|
||||
|
||||
/* I don't know what this is for. It seems to always be zero. */
|
||||
unsigned long ld_stab_hash;
|
||||
|
||||
/* The number of buckets in the hash table. */
|
||||
unsigned long ld_buckets;
|
||||
|
||||
/* The address of the symbol string table. The first string in this
|
||||
string table need not be the empty string. */
|
||||
unsigned long ld_symbols;
|
||||
|
||||
/* The size in bytes of the symbol string table. */
|
||||
unsigned long ld_symb_size;
|
||||
|
||||
/* The size in bytes of the text segment. */
|
||||
unsigned long ld_text;
|
||||
|
||||
/* The size in bytes of the procedure linkage table. */
|
||||
unsigned long ld_plt_sz;
|
||||
};
|
||||
|
||||
/* The external form of the structure. */
|
||||
|
||||
struct external_sun4_dynamic_link
|
||||
{
|
||||
bfd_byte ld_loaded[4];
|
||||
bfd_byte ld_need[4];
|
||||
bfd_byte ld_rules[4];
|
||||
bfd_byte ld_got[4];
|
||||
bfd_byte ld_plt[4];
|
||||
bfd_byte ld_rel[4];
|
||||
bfd_byte ld_hash[4];
|
||||
bfd_byte ld_stab[4];
|
||||
bfd_byte ld_stab_hash[4];
|
||||
bfd_byte ld_buckets[4];
|
||||
bfd_byte ld_symbols[4];
|
||||
bfd_byte ld_symb_size[4];
|
||||
bfd_byte ld_text[4];
|
||||
bfd_byte ld_plt_sz[4];
|
||||
};
|
65
include/ar.h
Normal file
65
include/ar.h
Normal file
@ -0,0 +1,65 @@
|
||||
/* $NetBSD: ar.h,v 1.4 1994/10/26 00:55:43 cgd Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Hugh Smith at The University of Guelph.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ar.h 8.2 (Berkeley) 1/21/94
|
||||
*/
|
||||
|
||||
#ifndef _AR_H_
|
||||
#define _AR_H_
|
||||
|
||||
/* Pre-4BSD archives had these magic numbers in them. */
|
||||
#define OARMAG1 0177555
|
||||
#define OARMAG2 0177545
|
||||
|
||||
#define ARMAG "!<arch>\n" /* ar "magic number" */
|
||||
#define SARMAG 8 /* strlen(ARMAG); */
|
||||
|
||||
#define AR_EFMT1 "#1/" /* extended format #1 */
|
||||
|
||||
struct ar_hdr {
|
||||
char ar_name[16]; /* name */
|
||||
char ar_date[12]; /* modification time */
|
||||
char ar_uid[6]; /* user id */
|
||||
char ar_gid[6]; /* group id */
|
||||
char ar_mode[8]; /* octal file permissions */
|
||||
char ar_size[10]; /* size in bytes */
|
||||
#define ARFMAG "`\n"
|
||||
char ar_fmag[2]; /* consistency check */
|
||||
};
|
||||
|
||||
#endif /* !_AR_H_ */
|
33
include/argz.h
Normal file
33
include/argz.h
Normal file
@ -0,0 +1,33 @@
|
||||
/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software
|
||||
* is freely granted, provided that this notice is preserved.
|
||||
*/
|
||||
|
||||
#ifndef _ARGZ_H_
|
||||
#define _ARGZ_H_
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "_ansi.h"
|
||||
|
||||
_BEGIN_STD_C
|
||||
|
||||
/* The newlib implementation of these functions assumes that sizeof(char) == 1. */
|
||||
error_t argz_create (char *const argv[], char **argz, size_t *argz_len);
|
||||
error_t argz_create_sep (const char *string, int sep, char **argz, size_t *argz_len);
|
||||
size_t argz_count (const char *argz, size_t argz_len);
|
||||
void argz_extract (char *argz, size_t argz_len, char **argv);
|
||||
void argz_stringify (char *argz, size_t argz_len, int sep);
|
||||
error_t argz_add (char **argz, size_t *argz_len, const char *str);
|
||||
error_t argz_add_sep (char **argz, size_t *argz_len, const char *str, int sep);
|
||||
error_t argz_append (char **argz, size_t *argz_len, const char *buf, size_t buf_len);
|
||||
error_t argz_delete (char **argz, size_t *argz_len, char *entry);
|
||||
error_t argz_insert (char **argz, size_t *argz_len, char *before, const char *entry);
|
||||
char * argz_next (char *argz, size_t argz_len, const char *entry);
|
||||
error_t argz_replace (char **argz, size_t *argz_len, const char *str, const char *with, unsigned *replace_count);
|
||||
|
||||
_END_STD_C
|
||||
|
||||
#endif /* _ARGZ_H_ */
|
182
include/arm-acle-compat.h
Normal file
182
include/arm-acle-compat.h
Normal file
@ -0,0 +1,182 @@
|
||||
/*
|
||||
* Copyright (c) 2014 ARM Ltd
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef __ARM_ARCH
|
||||
|
||||
/* ACLE standardises a set of pre-defines that describe the ARM architecture.
|
||||
These were mostly implemented in GCC around GCC-4.8; older versions
|
||||
have no, or only partial support. To provide a level of backwards
|
||||
compatibility we try to work out what the definitions should be, given
|
||||
the older pre-defines that GCC did produce. This isn't complete, but
|
||||
it should be enough for use by routines that depend on this header. */
|
||||
|
||||
/* No need to handle ARMv8, GCC had ACLE support before that. */
|
||||
|
||||
# ifdef __ARM_ARCH_7__
|
||||
/* The common subset of ARMv7 in all profiles. */
|
||||
# define __ARM_ARCH 7
|
||||
# define __ARM_ARCH_ISA_THUMB 2
|
||||
# define __ARM_FEATURE_CLZ
|
||||
# define __ARM_FEATURE_LDREX 7
|
||||
# define __ARM_FEATURE_UNALIGNED
|
||||
# endif
|
||||
|
||||
# if defined (__ARM_ARCH_7A__) || defined (__ARM_ARCH_7R__)
|
||||
# define __ARM_ARCH 7
|
||||
# define __ARM_ARCH_ISA_THUMB 2
|
||||
# define __ARM_ARCH_ISA_ARM
|
||||
# define __ARM_FEATURE_CLZ
|
||||
# define __ARM_FEATURE_SIMD32
|
||||
# define __ARM_FEATURE_DSP
|
||||
# define __ARM_FEATURE_QBIT
|
||||
# define __ARM_FEATURE_SAT
|
||||
# define __ARM_FEATURE_LDREX 15
|
||||
# define __ARM_FEATURE_UNALIGNED
|
||||
# ifdef __ARM_ARCH_7A__
|
||||
# define __ARM_ARCH_PROFILE 'A'
|
||||
# else
|
||||
# define __ARM_ARCH_PROFILE 'R'
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifdef __ARM_ARCH_7EM__
|
||||
# define __ARM_ARCH 7
|
||||
# define __ARM_ARCH_ISA_THUMB 2
|
||||
# define __ARM_FEATURE_CLZ
|
||||
# define __ARM_FEATURE_SIMD32
|
||||
# define __ARM_FEATURE_DSP
|
||||
# define __ARM_FEATURE_QBIT
|
||||
# define __ARM_FEATURE_SAT
|
||||
# define __ARM_FEATURE_LDREX 7
|
||||
# define __ARM_FEATURE_UNALIGNED
|
||||
# define __ARM_ARCH_PROFILE 'M'
|
||||
# endif
|
||||
|
||||
# ifdef __ARM_ARCH_7M__
|
||||
# define __ARM_ARCH 7
|
||||
# define __ARM_ARCH_ISA_THUMB 2
|
||||
# define __ARM_FEATURE_CLZ
|
||||
# define __ARM_FEATURE_QBIT
|
||||
# define __ARM_FEATURE_SAT
|
||||
# define __ARM_FEATURE_LDREX 7
|
||||
# define __ARM_FEATURE_UNALIGNED
|
||||
# define __ARM_ARCH_PROFILE 'M'
|
||||
# endif
|
||||
|
||||
# ifdef __ARM_ARCH_6T2__
|
||||
# define __ARM_ARCH 6
|
||||
# define __ARM_ARCH_ISA_THUMB 2
|
||||
# define __ARM_ARCH_ISA_ARM
|
||||
# define __ARM_FEATURE_CLZ
|
||||
# define __ARM_FEATURE_SIMD32
|
||||
# define __ARM_FEATURE_DSP
|
||||
# define __ARM_FEATURE_QBIT
|
||||
# define __ARM_FEATURE_SAT
|
||||
# define __ARM_FEATURE_LDREX 4
|
||||
# define __ARM_FEATURE_UNALIGNED
|
||||
# endif
|
||||
|
||||
# ifdef __ARM_ARCH_6M__
|
||||
# define __ARM_ARCH 6
|
||||
# define __ARM_ARCH_ISA_THUMB 1
|
||||
# define __ARM_ARCH_PROFILE 'M'
|
||||
# endif
|
||||
|
||||
# if defined (__ARM_ARCH_6__) || defined (__ARM_ARCH_6J__) \
|
||||
|| defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6Z__) \
|
||||
|| defined (__ARM_ARCH_6ZK__)
|
||||
# define __ARM_ARCH 6
|
||||
# define __ARM_ARCH_ISA_THUMB 1
|
||||
# define __ARM_ARCH_ISA_ARM
|
||||
# define __ARM_FEATURE_CLZ
|
||||
# define __ARM_FEATURE_SIMD32
|
||||
# define __ARM_FEATURE_DSP
|
||||
# define __ARM_FEATURE_QBIT
|
||||
# define __ARM_FEATURE_SAT
|
||||
# define __ARM_FEATURE_UNALIGNED
|
||||
# ifndef __thumb__
|
||||
# if defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6ZK__)
|
||||
# define __ARM_FEATURE_LDREX 15
|
||||
# else
|
||||
# define __ARM_FEATURE_LDREX 4
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if defined (__ARM_ARCH_5TE__) || defined (__ARM_ARCH_5E__)
|
||||
# define __ARM_ARCH 5
|
||||
# define __ARM_ARCH_ISA_ARM
|
||||
# ifdef __ARM_ARCH_5TE__
|
||||
# define __ARM_ARCH_ISA_THUMB 1
|
||||
# endif
|
||||
# define __ARM_FEATURE_CLZ
|
||||
# define __ARM_FEATURE_DSP
|
||||
# endif
|
||||
|
||||
# if defined (__ARM_ARCH_5T__) || defined (__ARM_ARCH_5__)
|
||||
# define __ARM_ARCH 5
|
||||
# define __ARM_ARCH_ISA_ARM
|
||||
# ifdef __ARM_ARCH_5TE__
|
||||
# define __ARM_ARCH_ISA_THUMB 1
|
||||
# endif
|
||||
# define __ARM_FEATURE_CLZ
|
||||
# endif
|
||||
|
||||
# ifdef __ARM_ARCH_4T__
|
||||
# define __ARM_ARCH 4
|
||||
# define __ARM_ARCH_ISA_ARM
|
||||
# define __ARM_ARCH_ISA_THUMB 1
|
||||
# endif
|
||||
|
||||
# ifdef __ARM_ARCH_4__
|
||||
# define __ARM_ARCH 4
|
||||
# define __ARM_ARCH_ISA_ARM
|
||||
# endif
|
||||
|
||||
# if defined (__ARM_ARCH_3__) || defined (__ARM_ARCH_3M__)
|
||||
# define __ARM_ARCH 3
|
||||
# define __ARM_ARCH_ISA_ARM
|
||||
# endif
|
||||
|
||||
# ifdef __ARM_ARCH_2__
|
||||
# define __ARM_ARCH 2
|
||||
# define __ARM_ARCH_ISA_ARM
|
||||
# endif
|
||||
|
||||
# ifdef __ARMEB__
|
||||
# define __ARM_BIG_ENDIAN
|
||||
# endif
|
||||
|
||||
/* If we still don't know what the target architecture is, then we're
|
||||
probably not using GCC. */
|
||||
# ifndef __ARM_ARCH
|
||||
# error Unable to determine architecture version.
|
||||
# endif
|
||||
|
||||
#endif /* __ARM_ARCH */
|
||||
|
50
include/assert.h
Normal file
50
include/assert.h
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
assert.h
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "_ansi.h"
|
||||
|
||||
#undef assert
|
||||
|
||||
#ifdef NDEBUG /* required by ANSI standard */
|
||||
# define assert(__e) ((void)0)
|
||||
#else
|
||||
# define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \
|
||||
__ASSERT_FUNC, #__e))
|
||||
|
||||
# ifndef __ASSERT_FUNC
|
||||
/* Use g++'s demangled names in C++. */
|
||||
# if defined __cplusplus && defined __GNUC__
|
||||
# define __ASSERT_FUNC __PRETTY_FUNCTION__
|
||||
|
||||
/* C99 requires the use of __func__. */
|
||||
# elif __STDC_VERSION__ >= 199901L
|
||||
# define __ASSERT_FUNC __func__
|
||||
|
||||
/* Older versions of gcc don't have __func__ but can use __FUNCTION__. */
|
||||
# elif __GNUC__ >= 2
|
||||
# define __ASSERT_FUNC __FUNCTION__
|
||||
|
||||
/* failed to detect __func__ support. */
|
||||
# else
|
||||
# define __ASSERT_FUNC ((char *) 0)
|
||||
# endif
|
||||
# endif /* !__ASSERT_FUNC */
|
||||
#endif /* !NDEBUG */
|
||||
|
||||
void __assert (const char *, int, const char *)
|
||||
_ATTRIBUTE ((__noreturn__));
|
||||
void __assert_func (const char *, int, const char *, const char *)
|
||||
_ATTRIBUTE ((__noreturn__));
|
||||
|
||||
#if __STDC_VERSION__ >= 201112L && !defined __cplusplus
|
||||
# define static_assert _Static_assert
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
842
include/bfdlink.h
Normal file
842
include/bfdlink.h
Normal file
@ -0,0 +1,842 @@
|
||||
/* bfdlink.h -- header file for BFD link routines
|
||||
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
||||
Free Software Foundation, Inc.
|
||||
Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef BFDLINK_H
|
||||
#define BFDLINK_H
|
||||
|
||||
/* Which symbols to strip during a link. */
|
||||
enum bfd_link_strip
|
||||
{
|
||||
strip_none, /* Don't strip any symbols. */
|
||||
strip_debugger, /* Strip debugging symbols. */
|
||||
strip_some, /* keep_hash is the list of symbols to keep. */
|
||||
strip_all /* Strip all symbols. */
|
||||
};
|
||||
|
||||
/* Which local symbols to discard during a link. This is irrelevant
|
||||
if strip_all is used. */
|
||||
enum bfd_link_discard
|
||||
{
|
||||
discard_sec_merge, /* Discard local temporary symbols in SEC_MERGE
|
||||
sections. */
|
||||
discard_none, /* Don't discard any locals. */
|
||||
discard_l, /* Discard local temporary symbols. */
|
||||
discard_all /* Discard all locals. */
|
||||
};
|
||||
|
||||
/* Describes the type of hash table entry structure being used.
|
||||
Different hash table structure have different fields and so
|
||||
support different linking features. */
|
||||
enum bfd_link_hash_table_type
|
||||
{
|
||||
bfd_link_generic_hash_table,
|
||||
bfd_link_elf_hash_table
|
||||
};
|
||||
|
||||
/* These are the possible types of an entry in the BFD link hash
|
||||
table. */
|
||||
|
||||
enum bfd_link_hash_type
|
||||
{
|
||||
bfd_link_hash_new, /* Symbol is new. */
|
||||
bfd_link_hash_undefined, /* Symbol seen before, but undefined. */
|
||||
bfd_link_hash_undefweak, /* Symbol is weak and undefined. */
|
||||
bfd_link_hash_defined, /* Symbol is defined. */
|
||||
bfd_link_hash_defweak, /* Symbol is weak and defined. */
|
||||
bfd_link_hash_common, /* Symbol is common. */
|
||||
bfd_link_hash_indirect, /* Symbol is an indirect link. */
|
||||
bfd_link_hash_warning /* Like indirect, but warn if referenced. */
|
||||
};
|
||||
|
||||
enum bfd_link_common_skip_ar_symbols
|
||||
{
|
||||
bfd_link_common_skip_none,
|
||||
bfd_link_common_skip_text,
|
||||
bfd_link_common_skip_data,
|
||||
bfd_link_common_skip_all
|
||||
};
|
||||
|
||||
struct bfd_link_hash_common_entry
|
||||
{
|
||||
unsigned int alignment_power; /* Alignment. */
|
||||
asection *section; /* Symbol section. */
|
||||
};
|
||||
|
||||
/* The linking routines use a hash table which uses this structure for
|
||||
its elements. */
|
||||
|
||||
struct bfd_link_hash_entry
|
||||
{
|
||||
/* Base hash table entry structure. */
|
||||
struct bfd_hash_entry root;
|
||||
|
||||
/* Type of this entry. */
|
||||
ENUM_BITFIELD (bfd_link_hash_type) type : 8;
|
||||
|
||||
unsigned int non_ir_ref : 1;
|
||||
|
||||
/* A union of information depending upon the type. */
|
||||
union
|
||||
{
|
||||
/* Nothing is kept for bfd_hash_new. */
|
||||
/* bfd_link_hash_undefined, bfd_link_hash_undefweak. */
|
||||
struct
|
||||
{
|
||||
/* Undefined and common symbols are kept in a linked list through
|
||||
this field. This field is present in all of the union element
|
||||
so that we don't need to remove entries from the list when we
|
||||
change their type. Removing entries would either require the
|
||||
list to be doubly linked, which would waste more memory, or
|
||||
require a traversal. When an undefined or common symbol is
|
||||
created, it should be added to this list, the head of which is in
|
||||
the link hash table itself. As symbols are defined, they need
|
||||
not be removed from the list; anything which reads the list must
|
||||
doublecheck the symbol type.
|
||||
|
||||
Weak symbols are not kept on this list.
|
||||
|
||||
Defined and defweak symbols use this field as a reference marker.
|
||||
If the field is not NULL, or this structure is the tail of the
|
||||
undefined symbol list, the symbol has been referenced. If the
|
||||
symbol is undefined and becomes defined, this field will
|
||||
automatically be non-NULL since the symbol will have been on the
|
||||
undefined symbol list. */
|
||||
struct bfd_link_hash_entry *next;
|
||||
bfd *abfd; /* BFD symbol was found in. */
|
||||
} undef;
|
||||
/* bfd_link_hash_defined, bfd_link_hash_defweak. */
|
||||
struct
|
||||
{
|
||||
struct bfd_link_hash_entry *next;
|
||||
asection *section; /* Symbol section. */
|
||||
bfd_vma value; /* Symbol value. */
|
||||
} def;
|
||||
/* bfd_link_hash_indirect, bfd_link_hash_warning. */
|
||||
struct
|
||||
{
|
||||
struct bfd_link_hash_entry *next;
|
||||
struct bfd_link_hash_entry *link; /* Real symbol. */
|
||||
const char *warning; /* Warning (bfd_link_hash_warning only). */
|
||||
} i;
|
||||
/* bfd_link_hash_common. */
|
||||
struct
|
||||
{
|
||||
struct bfd_link_hash_entry *next;
|
||||
/* The linker needs to know three things about common
|
||||
symbols: the size, the alignment, and the section in
|
||||
which the symbol should be placed. We store the size
|
||||
here, and we allocate a small structure to hold the
|
||||
section and the alignment. The alignment is stored as a
|
||||
power of two. We don't store all the information
|
||||
directly because we don't want to increase the size of
|
||||
the union; this structure is a major space user in the
|
||||
linker. */
|
||||
struct bfd_link_hash_common_entry *p;
|
||||
bfd_size_type size; /* Common symbol size. */
|
||||
} c;
|
||||
} u;
|
||||
};
|
||||
|
||||
/* This is the link hash table. It is a derived class of
|
||||
bfd_hash_table. */
|
||||
|
||||
struct bfd_link_hash_table
|
||||
{
|
||||
/* The hash table itself. */
|
||||
struct bfd_hash_table table;
|
||||
/* A linked list of undefined and common symbols, linked through the
|
||||
next field in the bfd_link_hash_entry structure. */
|
||||
struct bfd_link_hash_entry *undefs;
|
||||
/* Entries are added to the tail of the undefs list. */
|
||||
struct bfd_link_hash_entry *undefs_tail;
|
||||
/* The type of the link hash table. */
|
||||
enum bfd_link_hash_table_type type;
|
||||
};
|
||||
|
||||
/* Look up an entry in a link hash table. If FOLLOW is TRUE, this
|
||||
follows bfd_link_hash_indirect and bfd_link_hash_warning links to
|
||||
the real symbol. */
|
||||
extern struct bfd_link_hash_entry *bfd_link_hash_lookup
|
||||
(struct bfd_link_hash_table *, const char *, bfd_boolean create,
|
||||
bfd_boolean copy, bfd_boolean follow);
|
||||
|
||||
/* Look up an entry in the main linker hash table if the symbol might
|
||||
be wrapped. This should only be used for references to an
|
||||
undefined symbol, not for definitions of a symbol. */
|
||||
|
||||
extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup
|
||||
(bfd *, struct bfd_link_info *, const char *, bfd_boolean,
|
||||
bfd_boolean, bfd_boolean);
|
||||
|
||||
/* Traverse a link hash table. */
|
||||
extern void bfd_link_hash_traverse
|
||||
(struct bfd_link_hash_table *,
|
||||
bfd_boolean (*) (struct bfd_link_hash_entry *, void *),
|
||||
void *);
|
||||
|
||||
/* Add an entry to the undefs list. */
|
||||
extern void bfd_link_add_undef
|
||||
(struct bfd_link_hash_table *, struct bfd_link_hash_entry *);
|
||||
|
||||
/* Remove symbols from the undefs list that don't belong there. */
|
||||
extern void bfd_link_repair_undef_list
|
||||
(struct bfd_link_hash_table *table);
|
||||
|
||||
/* Read symbols and cache symbol pointer array in outsymbols. */
|
||||
extern bfd_boolean bfd_generic_link_read_symbols (bfd *);
|
||||
|
||||
struct bfd_sym_chain
|
||||
{
|
||||
struct bfd_sym_chain *next;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
/* How to handle unresolved symbols.
|
||||
There are four possibilities which are enumerated below: */
|
||||
enum report_method
|
||||
{
|
||||
/* This is the initial value when then link_info structure is created.
|
||||
It allows the various stages of the linker to determine whether they
|
||||
allowed to set the value. */
|
||||
RM_NOT_YET_SET = 0,
|
||||
RM_IGNORE,
|
||||
RM_GENERATE_WARNING,
|
||||
RM_GENERATE_ERROR
|
||||
};
|
||||
|
||||
typedef enum {with_flags, without_flags} flag_type;
|
||||
|
||||
/* A section flag list. */
|
||||
struct flag_info_list
|
||||
{
|
||||
flag_type with;
|
||||
const char *name;
|
||||
bfd_boolean valid;
|
||||
struct flag_info_list *next;
|
||||
};
|
||||
|
||||
/* Section flag info. */
|
||||
struct flag_info
|
||||
{
|
||||
flagword only_with_flags;
|
||||
flagword not_with_flags;
|
||||
struct flag_info_list *flag_list;
|
||||
bfd_boolean flags_initialized;
|
||||
};
|
||||
|
||||
struct bfd_elf_dynamic_list;
|
||||
struct bfd_elf_version_tree;
|
||||
|
||||
/* This structure holds all the information needed to communicate
|
||||
between BFD and the linker when doing a link. */
|
||||
|
||||
struct bfd_link_info
|
||||
{
|
||||
/* TRUE if BFD should generate a shared object (or a pie). */
|
||||
unsigned int shared: 1;
|
||||
|
||||
/* TRUE if generating an executable, position independent or not. */
|
||||
unsigned int executable : 1;
|
||||
|
||||
/* TRUE if generating a position independent executable. */
|
||||
unsigned int pie: 1;
|
||||
|
||||
/* TRUE if BFD should generate a relocatable object file. */
|
||||
unsigned int relocatable: 1;
|
||||
|
||||
/* TRUE if BFD should pre-bind symbols in a shared object. */
|
||||
unsigned int symbolic: 1;
|
||||
|
||||
/* TRUE if executable should not contain copy relocs.
|
||||
Setting this true may result in a non-sharable text segment. */
|
||||
unsigned int nocopyreloc: 1;
|
||||
|
||||
/* TRUE if BFD should export all symbols in the dynamic symbol table
|
||||
of an executable, rather than only those used. */
|
||||
unsigned int export_dynamic: 1;
|
||||
|
||||
/* TRUE if a default symbol version should be created and used for
|
||||
exported symbols. */
|
||||
unsigned int create_default_symver: 1;
|
||||
|
||||
/* TRUE if unreferenced sections should be removed. */
|
||||
unsigned int gc_sections: 1;
|
||||
|
||||
/* TRUE if every symbol should be reported back via the notice
|
||||
callback. */
|
||||
unsigned int notice_all: 1;
|
||||
|
||||
/* TRUE if we are loading LTO outputs. */
|
||||
unsigned int loading_lto_outputs: 1;
|
||||
|
||||
/* TRUE if global symbols in discarded sections should be stripped. */
|
||||
unsigned int strip_discarded: 1;
|
||||
|
||||
/* TRUE if all data symbols should be dynamic. */
|
||||
unsigned int dynamic_data: 1;
|
||||
|
||||
/* Which symbols to strip. */
|
||||
ENUM_BITFIELD (bfd_link_strip) strip : 2;
|
||||
|
||||
/* Which local symbols to discard. */
|
||||
ENUM_BITFIELD (bfd_link_discard) discard : 2;
|
||||
|
||||
/* Criteria for skipping symbols when determining
|
||||
whether to include an object from an archive. */
|
||||
ENUM_BITFIELD (bfd_link_common_skip_ar_symbols) common_skip_ar_symbols : 2;
|
||||
|
||||
/* What to do with unresolved symbols in an object file.
|
||||
When producing executables the default is GENERATE_ERROR.
|
||||
When producing shared libraries the default is IGNORE. The
|
||||
assumption with shared libraries is that the reference will be
|
||||
resolved at load/execution time. */
|
||||
ENUM_BITFIELD (report_method) unresolved_syms_in_objects : 2;
|
||||
|
||||
/* What to do with unresolved symbols in a shared library.
|
||||
The same defaults apply. */
|
||||
ENUM_BITFIELD (report_method) unresolved_syms_in_shared_libs : 2;
|
||||
|
||||
/* TRUE if shared objects should be linked directly, not shared. */
|
||||
unsigned int static_link: 1;
|
||||
|
||||
/* TRUE if symbols should be retained in memory, FALSE if they
|
||||
should be freed and reread. */
|
||||
unsigned int keep_memory: 1;
|
||||
|
||||
/* TRUE if BFD should generate relocation information in the final
|
||||
executable. */
|
||||
unsigned int emitrelocations: 1;
|
||||
|
||||
/* TRUE if PT_GNU_RELRO segment should be created. */
|
||||
unsigned int relro: 1;
|
||||
|
||||
/* TRUE if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
|
||||
should be created. */
|
||||
unsigned int eh_frame_hdr: 1;
|
||||
|
||||
/* TRUE if we should warn when adding a DT_TEXTREL to a shared object. */
|
||||
unsigned int warn_shared_textrel: 1;
|
||||
|
||||
/* TRUE if we should error when adding a DT_TEXTREL. */
|
||||
unsigned int error_textrel: 1;
|
||||
|
||||
/* TRUE if .hash section should be created. */
|
||||
unsigned int emit_hash: 1;
|
||||
|
||||
/* TRUE if .gnu.hash section should be created. */
|
||||
unsigned int emit_gnu_hash: 1;
|
||||
|
||||
/* If TRUE reduce memory overheads, at the expense of speed. This will
|
||||
cause map file generation to use an O(N^2) algorithm and disable
|
||||
caching ELF symbol buffer. */
|
||||
unsigned int reduce_memory_overheads: 1;
|
||||
|
||||
/* TRUE if the output file should be in a traditional format. This
|
||||
is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag
|
||||
on the output file, but may be checked when reading the input
|
||||
files. */
|
||||
unsigned int traditional_format: 1;
|
||||
|
||||
/* TRUE if non-PLT relocs should be merged into one reloc section
|
||||
and sorted so that relocs against the same symbol come together. */
|
||||
unsigned int combreloc: 1;
|
||||
|
||||
/* TRUE if a default symbol version should be created and used for
|
||||
imported symbols. */
|
||||
unsigned int default_imported_symver: 1;
|
||||
|
||||
/* TRUE if the new ELF dynamic tags are enabled. */
|
||||
unsigned int new_dtags: 1;
|
||||
|
||||
/* FALSE if .eh_frame unwind info should be generated for PLT and other
|
||||
linker created sections, TRUE if it should be omitted. */
|
||||
unsigned int no_ld_generated_unwind_info: 1;
|
||||
|
||||
/* TRUE if BFD should generate a "task linked" object file,
|
||||
similar to relocatable but also with globals converted to
|
||||
statics. */
|
||||
unsigned int task_link: 1;
|
||||
|
||||
/* TRUE if ok to have multiple definition. */
|
||||
unsigned int allow_multiple_definition: 1;
|
||||
|
||||
/* TRUE if ok to have version with no definition. */
|
||||
unsigned int allow_undefined_version: 1;
|
||||
|
||||
/* TRUE if some symbols have to be dynamic, controlled by
|
||||
--dynamic-list command line options. */
|
||||
unsigned int dynamic: 1;
|
||||
|
||||
/* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W|PF_X
|
||||
flags. */
|
||||
unsigned int execstack: 1;
|
||||
|
||||
/* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W
|
||||
flags. */
|
||||
unsigned int noexecstack: 1;
|
||||
|
||||
/* TRUE if we want to produced optimized output files. This might
|
||||
need much more time and therefore must be explicitly selected. */
|
||||
unsigned int optimize: 1;
|
||||
|
||||
/* TRUE if user should be informed of removed unreferenced sections. */
|
||||
unsigned int print_gc_sections: 1;
|
||||
|
||||
/* TRUE if we should warn alternate ELF machine code. */
|
||||
unsigned int warn_alternate_em: 1;
|
||||
|
||||
/* TRUE if the linker script contained an explicit PHDRS command. */
|
||||
unsigned int user_phdrs: 1;
|
||||
|
||||
/* Char that may appear as the first char of a symbol, but should be
|
||||
skipped (like symbol_leading_char) when looking up symbols in
|
||||
wrap_hash. Used by PowerPC Linux for 'dot' symbols. */
|
||||
char wrap_char;
|
||||
|
||||
/* Separator between archive and filename in linker script filespecs. */
|
||||
char path_separator;
|
||||
|
||||
/* Default stack size. Zero means default (often zero itself), -1
|
||||
means explicitly zero-sized. */
|
||||
bfd_signed_vma stacksize;
|
||||
|
||||
/* Enable or disable target specific optimizations.
|
||||
|
||||
Not all targets have optimizations to enable.
|
||||
|
||||
Normally these optimizations are disabled by default but some targets
|
||||
prefer to enable them by default. So this field is a tri-state variable.
|
||||
The values are:
|
||||
|
||||
zero: Enable the optimizations (either from --relax being specified on
|
||||
the command line or the backend's before_allocation emulation function.
|
||||
|
||||
positive: The user has requested that these optimizations be disabled.
|
||||
(Via the --no-relax command line option).
|
||||
|
||||
negative: The optimizations are disabled. (Set when initializing the
|
||||
args_type structure in ldmain.c:main. */
|
||||
signed int disable_target_specific_optimizations;
|
||||
|
||||
/* Function callbacks. */
|
||||
const struct bfd_link_callbacks *callbacks;
|
||||
|
||||
/* Hash table handled by BFD. */
|
||||
struct bfd_link_hash_table *hash;
|
||||
|
||||
/* Hash table of symbols to keep. This is NULL unless strip is
|
||||
strip_some. */
|
||||
struct bfd_hash_table *keep_hash;
|
||||
|
||||
/* Hash table of symbols to report back via the notice callback. If
|
||||
this is NULL, and notice_all is FALSE, then no symbols are
|
||||
reported back. */
|
||||
struct bfd_hash_table *notice_hash;
|
||||
|
||||
/* Hash table of symbols which are being wrapped (the --wrap linker
|
||||
option). If this is NULL, no symbols are being wrapped. */
|
||||
struct bfd_hash_table *wrap_hash;
|
||||
|
||||
/* Hash table of symbols which may be left unresolved during
|
||||
a link. If this is NULL, no symbols can be left unresolved. */
|
||||
struct bfd_hash_table *ignore_hash;
|
||||
|
||||
/* The output BFD. */
|
||||
bfd *output_bfd;
|
||||
|
||||
/* The list of input BFD's involved in the link. These are chained
|
||||
together via the link_next field. */
|
||||
bfd *input_bfds;
|
||||
bfd **input_bfds_tail;
|
||||
|
||||
/* If a symbol should be created for each input BFD, this is section
|
||||
where those symbols should be placed. It must be a section in
|
||||
the output BFD. It may be NULL, in which case no such symbols
|
||||
will be created. This is to support CREATE_OBJECT_SYMBOLS in the
|
||||
linker command language. */
|
||||
asection *create_object_symbols_section;
|
||||
|
||||
/* List of global symbol names that are starting points for marking
|
||||
sections against garbage collection. */
|
||||
struct bfd_sym_chain *gc_sym_list;
|
||||
|
||||
/* If a base output file is wanted, then this points to it */
|
||||
void *base_file;
|
||||
|
||||
/* The function to call when the executable or shared object is
|
||||
loaded. */
|
||||
const char *init_function;
|
||||
|
||||
/* The function to call when the executable or shared object is
|
||||
unloaded. */
|
||||
const char *fini_function;
|
||||
|
||||
/* Number of relaxation passes. Usually only one relaxation pass
|
||||
is needed. But a backend can have as many relaxation passes as
|
||||
necessary. During bfd_relax_section call, it is set to the
|
||||
current pass, starting from 0. */
|
||||
int relax_pass;
|
||||
|
||||
/* Number of relaxation trips. This number is incremented every
|
||||
time the relaxation pass is restarted due to a previous
|
||||
relaxation returning true in *AGAIN. */
|
||||
int relax_trip;
|
||||
|
||||
/* Non-zero if auto-import thunks for DATA items in pei386 DLLs
|
||||
should be generated/linked against. Set to 1 if this feature
|
||||
is explicitly requested by the user, -1 if enabled by default. */
|
||||
int pei386_auto_import;
|
||||
|
||||
/* Non-zero if runtime relocs for DATA items with non-zero addends
|
||||
in pei386 DLLs should be generated. Set to 1 if this feature
|
||||
is explicitly requested by the user, -1 if enabled by default. */
|
||||
int pei386_runtime_pseudo_reloc;
|
||||
|
||||
/* How many spare .dynamic DT_NULL entries should be added? */
|
||||
unsigned int spare_dynamic_tags;
|
||||
|
||||
/* May be used to set DT_FLAGS for ELF. */
|
||||
bfd_vma flags;
|
||||
|
||||
/* May be used to set DT_FLAGS_1 for ELF. */
|
||||
bfd_vma flags_1;
|
||||
|
||||
/* Start and end of RELRO region. */
|
||||
bfd_vma relro_start, relro_end;
|
||||
|
||||
/* List of symbols should be dynamic. */
|
||||
struct bfd_elf_dynamic_list *dynamic_list;
|
||||
|
||||
/* The version information. */
|
||||
struct bfd_elf_version_tree *version_info;
|
||||
};
|
||||
|
||||
/* This structures holds a set of callback functions. These are called
|
||||
by the BFD linker routines. Except for the info functions, the first
|
||||
argument to each callback function is the bfd_link_info structure
|
||||
being used and each function returns a boolean value. If the
|
||||
function returns FALSE, then the BFD function which called it should
|
||||
return with a failure indication. */
|
||||
|
||||
struct bfd_link_callbacks
|
||||
{
|
||||
/* A function which is called when an object is added from an
|
||||
archive. ABFD is the archive element being added. NAME is the
|
||||
name of the symbol which caused the archive element to be pulled
|
||||
in. This function may set *SUBSBFD to point to an alternative
|
||||
BFD from which symbols should in fact be added in place of the
|
||||
original BFD's symbols. */
|
||||
bfd_boolean (*add_archive_element)
|
||||
(struct bfd_link_info *, bfd *abfd, const char *name, bfd **subsbfd);
|
||||
/* A function which is called when a symbol is found with multiple
|
||||
definitions. H is the symbol which is defined multiple times.
|
||||
NBFD is the new BFD, NSEC is the new section, and NVAL is the new
|
||||
value. NSEC may be bfd_com_section or bfd_ind_section. */
|
||||
bfd_boolean (*multiple_definition)
|
||||
(struct bfd_link_info *, struct bfd_link_hash_entry *h,
|
||||
bfd *nbfd, asection *nsec, bfd_vma nval);
|
||||
/* A function which is called when a common symbol is defined
|
||||
multiple times. H is the symbol appearing multiple times.
|
||||
NBFD is the BFD of the new symbol. NTYPE is the type of the new
|
||||
symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or
|
||||
bfd_link_hash_indirect. If NTYPE is bfd_link_hash_common, NSIZE
|
||||
is the size of the new symbol. */
|
||||
bfd_boolean (*multiple_common)
|
||||
(struct bfd_link_info *, struct bfd_link_hash_entry *h,
|
||||
bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize);
|
||||
/* A function which is called to add a symbol to a set. ENTRY is
|
||||
the link hash table entry for the set itself (e.g.,
|
||||
__CTOR_LIST__). RELOC is the relocation to use for an entry in
|
||||
the set when generating a relocatable file, and is also used to
|
||||
get the size of the entry when generating an executable file.
|
||||
ABFD, SEC and VALUE identify the value to add to the set. */
|
||||
bfd_boolean (*add_to_set)
|
||||
(struct bfd_link_info *, struct bfd_link_hash_entry *entry,
|
||||
bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value);
|
||||
/* A function which is called when the name of a g++ constructor or
|
||||
destructor is found. This is only called by some object file
|
||||
formats. CONSTRUCTOR is TRUE for a constructor, FALSE for a
|
||||
destructor. This will use BFD_RELOC_CTOR when generating a
|
||||
relocatable file. NAME is the name of the symbol found. ABFD,
|
||||
SECTION and VALUE are the value of the symbol. */
|
||||
bfd_boolean (*constructor)
|
||||
(struct bfd_link_info *, bfd_boolean constructor, const char *name,
|
||||
bfd *abfd, asection *sec, bfd_vma value);
|
||||
/* A function which is called to issue a linker warning. For
|
||||
example, this is called when there is a reference to a warning
|
||||
symbol. WARNING is the warning to be issued. SYMBOL is the name
|
||||
of the symbol which triggered the warning; it may be NULL if
|
||||
there is none. ABFD, SECTION and ADDRESS identify the location
|
||||
which trigerred the warning; either ABFD or SECTION or both may
|
||||
be NULL if the location is not known. */
|
||||
bfd_boolean (*warning)
|
||||
(struct bfd_link_info *, const char *warning, const char *symbol,
|
||||
bfd *abfd, asection *section, bfd_vma address);
|
||||
/* A function which is called when a relocation is attempted against
|
||||
an undefined symbol. NAME is the symbol which is undefined.
|
||||
ABFD, SECTION and ADDRESS identify the location from which the
|
||||
reference is made. IS_FATAL indicates whether an undefined symbol is
|
||||
a fatal error or not. In some cases SECTION may be NULL. */
|
||||
bfd_boolean (*undefined_symbol)
|
||||
(struct bfd_link_info *, const char *name, bfd *abfd,
|
||||
asection *section, bfd_vma address, bfd_boolean is_fatal);
|
||||
/* A function which is called when a reloc overflow occurs. ENTRY is
|
||||
the link hash table entry for the symbol the reloc is against.
|
||||
NAME is the name of the local symbol or section the reloc is
|
||||
against, RELOC_NAME is the name of the relocation, and ADDEND is
|
||||
any addend that is used. ABFD, SECTION and ADDRESS identify the
|
||||
location at which the overflow occurs; if this is the result of a
|
||||
bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
|
||||
ABFD will be NULL. */
|
||||
bfd_boolean (*reloc_overflow)
|
||||
(struct bfd_link_info *, struct bfd_link_hash_entry *entry,
|
||||
const char *name, const char *reloc_name, bfd_vma addend,
|
||||
bfd *abfd, asection *section, bfd_vma address);
|
||||
/* A function which is called when a dangerous reloc is performed.
|
||||
MESSAGE is an appropriate message.
|
||||
ABFD, SECTION and ADDRESS identify the location at which the
|
||||
problem occurred; if this is the result of a
|
||||
bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
|
||||
ABFD will be NULL. */
|
||||
bfd_boolean (*reloc_dangerous)
|
||||
(struct bfd_link_info *, const char *message,
|
||||
bfd *abfd, asection *section, bfd_vma address);
|
||||
/* A function which is called when a reloc is found to be attached
|
||||
to a symbol which is not being written out. NAME is the name of
|
||||
the symbol. ABFD, SECTION and ADDRESS identify the location of
|
||||
the reloc; if this is the result of a
|
||||
bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then
|
||||
ABFD will be NULL. */
|
||||
bfd_boolean (*unattached_reloc)
|
||||
(struct bfd_link_info *, const char *name,
|
||||
bfd *abfd, asection *section, bfd_vma address);
|
||||
/* A function which is called when a symbol in notice_hash is
|
||||
defined or referenced. H is the symbol. ABFD, SECTION and
|
||||
ADDRESS are the (new) value of the symbol. If SECTION is
|
||||
bfd_und_section, this is a reference. FLAGS are the symbol
|
||||
BSF_* flags. STRING is the name of the symbol to indirect to if
|
||||
the sym is indirect, or the warning string if a warning sym. */
|
||||
bfd_boolean (*notice)
|
||||
(struct bfd_link_info *, struct bfd_link_hash_entry *h,
|
||||
bfd *abfd, asection *section, bfd_vma address, flagword flags,
|
||||
const char *string);
|
||||
/* Error or warning link info message. */
|
||||
void (*einfo)
|
||||
(const char *fmt, ...);
|
||||
/* General link info message. */
|
||||
void (*info)
|
||||
(const char *fmt, ...);
|
||||
/* Message to be printed in linker map file. */
|
||||
void (*minfo)
|
||||
(const char *fmt, ...);
|
||||
/* This callback provides a chance for users of the BFD library to
|
||||
override its decision about whether to place two adjacent sections
|
||||
into the same segment. */
|
||||
bfd_boolean (*override_segment_assignment)
|
||||
(struct bfd_link_info *, bfd * abfd,
|
||||
asection * current_section, asection * previous_section,
|
||||
bfd_boolean new_segment);
|
||||
};
|
||||
|
||||
/* The linker builds link_order structures which tell the code how to
|
||||
include input data in the output file. */
|
||||
|
||||
/* These are the types of link_order structures. */
|
||||
|
||||
enum bfd_link_order_type
|
||||
{
|
||||
bfd_undefined_link_order, /* Undefined. */
|
||||
bfd_indirect_link_order, /* Built from a section. */
|
||||
bfd_data_link_order, /* Set to explicit data. */
|
||||
bfd_section_reloc_link_order, /* Relocate against a section. */
|
||||
bfd_symbol_reloc_link_order /* Relocate against a symbol. */
|
||||
};
|
||||
|
||||
/* This is the link_order structure itself. These form a chain
|
||||
attached to the output section whose contents they are describing. */
|
||||
|
||||
struct bfd_link_order
|
||||
{
|
||||
/* Next link_order in chain. */
|
||||
struct bfd_link_order *next;
|
||||
/* Type of link_order. */
|
||||
enum bfd_link_order_type type;
|
||||
/* Offset within output section. */
|
||||
bfd_vma offset;
|
||||
/* Size within output section. */
|
||||
bfd_size_type size;
|
||||
/* Type specific information. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
/* Section to include. If this is used, then
|
||||
section->output_section must be the section the
|
||||
link_order is attached to, section->output_offset must
|
||||
equal the link_order offset field, and section->size
|
||||
must equal the link_order size field. Maybe these
|
||||
restrictions should be relaxed someday. */
|
||||
asection *section;
|
||||
} indirect;
|
||||
struct
|
||||
{
|
||||
/* Size of contents, or zero when contents should be filled by
|
||||
the architecture-dependent fill function.
|
||||
A non-zero value allows filling of the output section
|
||||
with an arbitrary repeated pattern. */
|
||||
unsigned int size;
|
||||
/* Data to put into file. */
|
||||
bfd_byte *contents;
|
||||
} data;
|
||||
struct
|
||||
{
|
||||
/* Description of reloc to generate. Used for
|
||||
bfd_section_reloc_link_order and
|
||||
bfd_symbol_reloc_link_order. */
|
||||
struct bfd_link_order_reloc *p;
|
||||
} reloc;
|
||||
} u;
|
||||
};
|
||||
|
||||
/* A linker order of type bfd_section_reloc_link_order or
|
||||
bfd_symbol_reloc_link_order means to create a reloc against a
|
||||
section or symbol, respectively. This is used to implement -Ur to
|
||||
generate relocs for the constructor tables. The
|
||||
bfd_link_order_reloc structure describes the reloc that BFD should
|
||||
create. It is similar to a arelent, but I didn't use arelent
|
||||
because the linker does not know anything about most symbols, and
|
||||
any asymbol structure it creates will be partially meaningless.
|
||||
This information could logically be in the bfd_link_order struct,
|
||||
but I didn't want to waste the space since these types of relocs
|
||||
are relatively rare. */
|
||||
|
||||
struct bfd_link_order_reloc
|
||||
{
|
||||
/* Reloc type. */
|
||||
bfd_reloc_code_real_type reloc;
|
||||
|
||||
union
|
||||
{
|
||||
/* For type bfd_section_reloc_link_order, this is the section
|
||||
the reloc should be against. This must be a section in the
|
||||
output BFD, not any of the input BFDs. */
|
||||
asection *section;
|
||||
/* For type bfd_symbol_reloc_link_order, this is the name of the
|
||||
symbol the reloc should be against. */
|
||||
const char *name;
|
||||
} u;
|
||||
|
||||
/* Addend to use. The object file should contain zero. The BFD
|
||||
backend is responsible for filling in the contents of the object
|
||||
file correctly. For some object file formats (e.g., COFF) the
|
||||
addend must be stored into in the object file, and for some
|
||||
(e.g., SPARC a.out) it is kept in the reloc. */
|
||||
bfd_vma addend;
|
||||
};
|
||||
|
||||
/* Allocate a new link_order for a section. */
|
||||
extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *);
|
||||
|
||||
/* These structures are used to describe version information for the
|
||||
ELF linker. These structures could be manipulated entirely inside
|
||||
BFD, but it would be a pain. Instead, the regular linker sets up
|
||||
these structures, and then passes them into BFD. */
|
||||
|
||||
/* Glob pattern for a version. */
|
||||
|
||||
struct bfd_elf_version_expr
|
||||
{
|
||||
/* Next glob pattern for this version. */
|
||||
struct bfd_elf_version_expr *next;
|
||||
/* Glob pattern. */
|
||||
const char *pattern;
|
||||
/* Set if pattern is not a glob. */
|
||||
unsigned int literal : 1;
|
||||
/* Defined by ".symver". */
|
||||
unsigned int symver : 1;
|
||||
/* Defined by version script. */
|
||||
unsigned int script : 1;
|
||||
/* Pattern type. */
|
||||
#define BFD_ELF_VERSION_C_TYPE 1
|
||||
#define BFD_ELF_VERSION_CXX_TYPE 2
|
||||
#define BFD_ELF_VERSION_JAVA_TYPE 4
|
||||
unsigned int mask : 3;
|
||||
};
|
||||
|
||||
struct bfd_elf_version_expr_head
|
||||
{
|
||||
/* List of all patterns, both wildcards and non-wildcards. */
|
||||
struct bfd_elf_version_expr *list;
|
||||
/* Hash table for non-wildcards. */
|
||||
void *htab;
|
||||
/* Remaining patterns. */
|
||||
struct bfd_elf_version_expr *remaining;
|
||||
/* What kind of pattern types are present in list (bitmask). */
|
||||
unsigned int mask;
|
||||
};
|
||||
|
||||
/* Version dependencies. */
|
||||
|
||||
struct bfd_elf_version_deps
|
||||
{
|
||||
/* Next dependency for this version. */
|
||||
struct bfd_elf_version_deps *next;
|
||||
/* The version which this version depends upon. */
|
||||
struct bfd_elf_version_tree *version_needed;
|
||||
};
|
||||
|
||||
/* A node in the version tree. */
|
||||
|
||||
struct bfd_elf_version_tree
|
||||
{
|
||||
/* Next version. */
|
||||
struct bfd_elf_version_tree *next;
|
||||
/* Name of this version. */
|
||||
const char *name;
|
||||
/* Version number. */
|
||||
unsigned int vernum;
|
||||
/* Regular expressions for global symbols in this version. */
|
||||
struct bfd_elf_version_expr_head globals;
|
||||
/* Regular expressions for local symbols in this version. */
|
||||
struct bfd_elf_version_expr_head locals;
|
||||
/* List of versions which this version depends upon. */
|
||||
struct bfd_elf_version_deps *deps;
|
||||
/* Index of the version name. This is used within BFD. */
|
||||
unsigned int name_indx;
|
||||
/* Whether this version tree was used. This is used within BFD. */
|
||||
int used;
|
||||
/* Matching hook. */
|
||||
struct bfd_elf_version_expr *(*match)
|
||||
(struct bfd_elf_version_expr_head *head,
|
||||
struct bfd_elf_version_expr *prev, const char *sym);
|
||||
};
|
||||
|
||||
struct bfd_elf_dynamic_list
|
||||
{
|
||||
struct bfd_elf_version_expr_head head;
|
||||
struct bfd_elf_version_expr *(*match)
|
||||
(struct bfd_elf_version_expr_head *head,
|
||||
struct bfd_elf_version_expr *prev, const char *sym);
|
||||
};
|
||||
|
||||
#endif
|
62
include/binary-io.h
Normal file
62
include/binary-io.h
Normal file
@ -0,0 +1,62 @@
|
||||
/* Binary mode I/O.
|
||||
Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
|
||||
|
||||
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/>. */
|
||||
|
||||
#ifndef _BINARY_H
|
||||
#define _BINARY_H
|
||||
|
||||
/* Include this header after <fcntl.h> and <stdio.h>, because
|
||||
systems that distinguish between text and binary I/O usually
|
||||
define O_BINARY in <fcntl.h>, and the MSVC7 <stdio.h> doesn't
|
||||
like to be included after '#define fileno ...'
|
||||
|
||||
We don't include <fcntl.h> here because not all systems have
|
||||
that header. */
|
||||
|
||||
#if !defined O_BINARY && defined _O_BINARY
|
||||
/* For MSC-compatible compilers. */
|
||||
# define O_BINARY _O_BINARY
|
||||
# define O_TEXT _O_TEXT
|
||||
#endif
|
||||
#ifdef __BEOS__
|
||||
/* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
|
||||
# undef O_BINARY
|
||||
# undef O_TEXT
|
||||
#endif
|
||||
#if O_BINARY
|
||||
# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__
|
||||
# include <io.h> /* declares setmode() */
|
||||
# else
|
||||
# define setmode _setmode
|
||||
# undef fileno
|
||||
# define fileno _fileno
|
||||
# endif
|
||||
# ifdef __DJGPP__
|
||||
# include <unistd.h> /* declares isatty() */
|
||||
# /* Avoid putting stdin/stdout in binary mode if it is connected to the
|
||||
# console, because that would make it impossible for the user to
|
||||
# interrupt the program through Ctrl-C or Ctrl-Break. */
|
||||
# define SET_BINARY(fd) (!isatty (fd) ? (setmode (fd, O_BINARY), 0) : 0)
|
||||
# else
|
||||
# define SET_BINARY(fd) setmode (fd, O_BINARY)
|
||||
# endif
|
||||
#else
|
||||
/* On reasonable systems, binary I/O is the default. */
|
||||
# undef O_BINARY
|
||||
# define O_BINARY 0
|
||||
# define SET_BINARY(fd) /* nothing */
|
||||
#endif
|
||||
|
||||
#endif /* _BINARY_H */
|
192
include/bout.h
Normal file
192
include/bout.h
Normal file
@ -0,0 +1,192 @@
|
||||
/* This file is a modified version of 'a.out.h'. It is to be used in all
|
||||
GNU tools modified to support the i80960 (or tools that operate on
|
||||
object files created by such tools).
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* All i80960 development is done in a CROSS-DEVELOPMENT environment. I.e.,
|
||||
object code is generated on, and executed under the direction of a symbolic
|
||||
debugger running on, a host system. We do not want to be subject to the
|
||||
vagaries of which host it is or whether it supports COFF or a.out format,
|
||||
or anything else. We DO want to:
|
||||
|
||||
o always generate the same format object files, regardless of host.
|
||||
|
||||
o have an 'a.out' header that we can modify for our own purposes
|
||||
(the 80960 is typically an embedded processor and may require
|
||||
enhanced linker support that the normal a.out.h header can't
|
||||
accommodate).
|
||||
|
||||
As for byte-ordering, the following rules apply:
|
||||
|
||||
o Text and data that is actually downloaded to the target is always
|
||||
in i80960 (little-endian) order.
|
||||
|
||||
o All other numbers (in the header, symbols, relocation directives)
|
||||
are in host byte-order: object files CANNOT be lifted from a
|
||||
little-end host and used on a big-endian (or vice versa) without
|
||||
modification.
|
||||
==> THIS IS NO LONGER TRUE USING BFD. WE CAN GENERATE ANY BYTE ORDER
|
||||
FOR THE HEADER, AND READ ANY BYTE ORDER. PREFERENCE WOULD BE TO
|
||||
USE LITTLE-ENDIAN BYTE ORDER THROUGHOUT, REGARDLESS OF HOST. <==
|
||||
|
||||
o The downloader ('comm960') takes care to generate a pseudo-header
|
||||
with correct (i80960) byte-ordering before shipping text and data
|
||||
off to the NINDY monitor in the target systems. Symbols and
|
||||
relocation info are never sent to the target. */
|
||||
|
||||
#define BMAGIC 0415
|
||||
/* We don't accept the following (see N_BADMAG macro).
|
||||
They're just here so GNU code will compile. */
|
||||
#define OMAGIC 0407 /* old impure format */
|
||||
#define NMAGIC 0410 /* read-only text */
|
||||
#define ZMAGIC 0413 /* demand load format */
|
||||
|
||||
/* FILE HEADER
|
||||
All 'lengths' are given as a number of bytes.
|
||||
All 'alignments' are for relinkable files only; an alignment of
|
||||
'n' indicates the corresponding segment must begin at an
|
||||
address that is a multiple of (2**n). */
|
||||
struct external_exec
|
||||
{
|
||||
/* Standard stuff */
|
||||
unsigned char e_info[4]; /* Identifies this as a b.out file */
|
||||
unsigned char e_text[4]; /* Length of text */
|
||||
unsigned char e_data[4]; /* Length of data */
|
||||
unsigned char e_bss[4]; /* Length of uninitialized data area */
|
||||
unsigned char e_syms[4]; /* Length of symbol table */
|
||||
unsigned char e_entry[4]; /* Runtime start address */
|
||||
unsigned char e_trsize[4]; /* Length of text relocation info */
|
||||
unsigned char e_drsize[4]; /* Length of data relocation info */
|
||||
|
||||
/* Added for i960 */
|
||||
unsigned char e_tload[4]; /* Text runtime load address */
|
||||
unsigned char e_dload[4]; /* Data runtime load address */
|
||||
unsigned char e_talign[1]; /* Alignment of text segment */
|
||||
unsigned char e_dalign[1]; /* Alignment of data segment */
|
||||
unsigned char e_balign[1]; /* Alignment of bss segment */
|
||||
unsigned char e_relaxable[1];/* Assembled with enough info to allow linker to relax */
|
||||
};
|
||||
|
||||
#define EXEC_BYTES_SIZE (sizeof (struct external_exec))
|
||||
|
||||
/* These macros use the a_xxx field names, since they operate on the exec
|
||||
structure after it's been byte-swapped and realigned on the host machine. */
|
||||
#define N_BADMAG(x) (((x).a_info)!=BMAGIC)
|
||||
#define N_TXTOFF(x) EXEC_BYTES_SIZE
|
||||
#define N_DATOFF(x) ( N_TXTOFF(x) + (x).a_text )
|
||||
#define N_TROFF(x) ( N_DATOFF(x) + (x).a_data )
|
||||
#define N_TRELOFF N_TROFF
|
||||
#define N_DROFF(x) ( N_TROFF(x) + (x).a_trsize )
|
||||
#define N_DRELOFF N_DROFF
|
||||
#define N_SYMOFF(x) ( N_DROFF(x) + (x).a_drsize )
|
||||
#define N_STROFF(x) ( N_SYMOFF(x) + (x).a_syms )
|
||||
#define N_DATADDR(x) ( (x).a_dload )
|
||||
|
||||
/* Address of text segment in memory after it is loaded. */
|
||||
#if !defined (N_TXTADDR)
|
||||
#define N_TXTADDR(x) 0
|
||||
#endif
|
||||
|
||||
/* A single entry in the symbol table. */
|
||||
struct nlist
|
||||
{
|
||||
union
|
||||
{
|
||||
char* n_name;
|
||||
struct nlist * n_next;
|
||||
long n_strx; /* Index into string table */
|
||||
} n_un;
|
||||
|
||||
unsigned char n_type; /* See below */
|
||||
char n_other; /* Used in i80960 support -- see below */
|
||||
short n_desc;
|
||||
unsigned long n_value;
|
||||
};
|
||||
|
||||
|
||||
/* Legal values of n_type. */
|
||||
#define N_UNDF 0 /* Undefined symbol */
|
||||
#define N_ABS 2 /* Absolute symbol */
|
||||
#define N_TEXT 4 /* Text symbol */
|
||||
#define N_DATA 6 /* Data symbol */
|
||||
#define N_BSS 8 /* BSS symbol */
|
||||
#define N_FN 31 /* Filename symbol */
|
||||
|
||||
#define N_EXT 1 /* External symbol (OR'd in with one of above) */
|
||||
#define N_TYPE 036 /* Mask for all the type bits */
|
||||
#define N_STAB 0340 /* Mask for all bits used for SDB entries */
|
||||
|
||||
/* MEANING OF 'n_other'
|
||||
|
||||
If non-zero, the 'n_other' fields indicates either a leaf procedure or
|
||||
a system procedure, as follows:
|
||||
|
||||
1 <= n_other <= 32 :
|
||||
The symbol is the entry point to a system procedure.
|
||||
'n_value' is the address of the entry, as for any other
|
||||
procedure. The system procedure number (which can be used in
|
||||
a 'calls' instruction) is (n_other-1). These entries come from
|
||||
'.sysproc' directives.
|
||||
|
||||
n_other == N_CALLNAME
|
||||
the symbol is the 'call' entry point to a leaf procedure.
|
||||
The *next* symbol in the symbol table must be the corresponding
|
||||
'bal' entry point to the procedure (see following). These
|
||||
entries come from '.leafproc' directives in which two different
|
||||
symbols are specified (the first one is represented here).
|
||||
|
||||
|
||||
n_other == N_BALNAME
|
||||
the symbol is the 'bal' entry point to a leaf procedure.
|
||||
These entries result from '.leafproc' directives in which only
|
||||
one symbol is specified, or in which the same symbol is
|
||||
specified twice.
|
||||
|
||||
Note that an N_CALLNAME entry *must* have a corresponding N_BALNAME entry,
|
||||
but not every N_BALNAME entry must have an N_CALLNAME entry. */
|
||||
#define N_CALLNAME ((char)-1)
|
||||
#define N_BALNAME ((char)-2)
|
||||
#define IS_CALLNAME(x) (N_CALLNAME == (x))
|
||||
#define IS_BALNAME(x) (N_BALNAME == (x))
|
||||
#define IS_OTHER(x) ((x)>0 && (x) <=32)
|
||||
|
||||
#define b_out_relocation_info relocation_info
|
||||
struct relocation_info
|
||||
{
|
||||
int r_address; /* File address of item to be relocated. */
|
||||
unsigned
|
||||
#define r_index r_symbolnum
|
||||
r_symbolnum:24, /* Index of symbol on which relocation is based,
|
||||
if r_extern is set. Otherwise set to
|
||||
either N_TEXT, N_DATA, or N_BSS to
|
||||
indicate section on which relocation is
|
||||
based. */
|
||||
r_pcrel:1, /* 1 => relocate PC-relative; else absolute
|
||||
On i960, pc-relative implies 24-bit
|
||||
address, absolute implies 32-bit. */
|
||||
r_length:2, /* Number of bytes to relocate:
|
||||
0 => 1 byte
|
||||
1 => 2 bytes -- used for 13 bit pcrel
|
||||
2 => 4 bytes. */
|
||||
r_extern:1,
|
||||
r_bsr:1, /* Something for the GNU NS32K assembler. */
|
||||
r_disp:1, /* Something for the GNU NS32K assembler. */
|
||||
r_callj:1, /* 1 if relocation target is an i960 'callj'. */
|
||||
r_relaxable:1; /* 1 if enough info is left to relax the data. */
|
||||
};
|
32
include/cgen/ChangeLog
Normal file
32
include/cgen/ChangeLog
Normal file
@ -0,0 +1,32 @@
|
||||
2013-07-18 Andrew Neitsch <andrew@neitsch.ca>
|
||||
|
||||
PR binutils/15728
|
||||
* basic-ops.h: (SUBWORDSIQI) Make declaration static.
|
||||
* (SUBWORDSIHI): Likewise.
|
||||
* (SUBWORDDIQI): Likewise.
|
||||
* (SUBWORDDIHI): Likewise.
|
||||
* (SUBWORDDISI): Likewise.
|
||||
|
||||
2010-01-05 Doug Evans <dje@sebabeach.org>
|
||||
|
||||
* basic-modes.h (MAKEDI): New macro.
|
||||
|
||||
2009-10-23 Doug Evans <dje@sebabeach.org>
|
||||
|
||||
* basic-modes.h: New file. Moved here from opcodes/cgen-types.h.
|
||||
* basic-ops.h: New file. Moved here from opcodes/cgen-ops.h.
|
||||
* bitset.h: New file. Moved here from ../opcode/cgen-bitset.h.
|
||||
Update license to GPL v3.
|
||||
|
||||
Copyright (C) 2009-2012 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
Local Variables:
|
||||
mode: change-log
|
||||
left-margin: 8
|
||||
fill-column: 74
|
||||
version-control: never
|
||||
End:
|
52
include/cgen/basic-modes.h
Normal file
52
include/cgen/basic-modes.h
Normal file
@ -0,0 +1,52 @@
|
||||
/* Basic CGEN modes.
|
||||
Copyright 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
Contributed by Red Hat.
|
||||
|
||||
This file is part of the GNU opcodes library.
|
||||
|
||||
This library 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, or (at your option)
|
||||
any later version.
|
||||
|
||||
It 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 library; see the file COPYING3. If not, write to the
|
||||
Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
02110-1301, USA. */
|
||||
|
||||
#ifndef CGEN_BASIC_MODES_H
|
||||
#define CGEN_BASIC_MODES_H
|
||||
|
||||
/* This file doesn't contain all modes,
|
||||
just the basic/portable ones.
|
||||
It also provides access to stdint.h (*1) so the includer doesn't have
|
||||
to deal with the portability issues.
|
||||
(*1): To the extent that bfd_stdint.h does for now. */
|
||||
|
||||
/* IWBN to avoid unnecessary dependencies on bfd-anything. */
|
||||
#include "bfd_stdint.h"
|
||||
|
||||
typedef int8_t QI;
|
||||
typedef uint8_t UQI;
|
||||
|
||||
typedef int16_t HI;
|
||||
typedef uint16_t UHI;
|
||||
|
||||
typedef int32_t SI;
|
||||
typedef uint32_t USI;
|
||||
|
||||
typedef int64_t DI;
|
||||
typedef uint64_t UDI;
|
||||
|
||||
typedef int INT;
|
||||
typedef unsigned int UINT;
|
||||
|
||||
/* Cover macro to create a 64-bit integer. */
|
||||
#define MAKEDI(hi, lo) ((((DI) (SI) (hi)) << 32) | ((UDI) (USI) (lo)))
|
||||
|
||||
#endif /* CGEN_BASIC_MODES_H */
|
347
include/cgen/basic-ops.h
Normal file
347
include/cgen/basic-ops.h
Normal file
@ -0,0 +1,347 @@
|
||||
/* Basic semantics ops support for CGEN.
|
||||
Copyright 2005-2013 Free Software Foundation, Inc.
|
||||
Contributed by Red Hat.
|
||||
|
||||
This file is part of the GNU opcodes library.
|
||||
|
||||
This library 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, or (at your option)
|
||||
any later version.
|
||||
|
||||
It 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 library; see the file COPYING3. If not, write to the
|
||||
Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
02110-1301, USA. */
|
||||
|
||||
#ifndef CGEN_BASIC_OPS_H
|
||||
#define CGEN_BASIC_OPS_H
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#if defined (__GNUC__) && ! defined (SEMOPS_DEFINE_INLINE)
|
||||
#define SEMOPS_DEFINE_INLINE
|
||||
#define SEMOPS_INLINE extern inline
|
||||
#else
|
||||
#define SEMOPS_INLINE
|
||||
#endif
|
||||
|
||||
/* These don't really have a mode. */
|
||||
#define ANDIF(x, y) ((x) && (y))
|
||||
#define ORIF(x, y) ((x) || (y))
|
||||
|
||||
#define SUBBI(x, y) ((x) - (y))
|
||||
#define ANDBI(x, y) ((x) & (y))
|
||||
#define ORBI(x, y) ((x) | (y))
|
||||
#define XORBI(x, y) ((x) ^ (y))
|
||||
#define NEGBI(x) (- (x))
|
||||
#define NOTBI(x) (! (BI) (x))
|
||||
#define INVBI(x) (~ (x))
|
||||
#define EQBI(x, y) ((BI) (x) == (BI) (y))
|
||||
#define NEBI(x, y) ((BI) (x) != (BI) (y))
|
||||
#define LTBI(x, y) ((BI) (x) < (BI) (y))
|
||||
#define LEBI(x, y) ((BI) (x) <= (BI) (y))
|
||||
#define GTBI(x, y) ((BI) (x) > (BI) (y))
|
||||
#define GEBI(x, y) ((BI) (x) >= (BI) (y))
|
||||
#define LTUBI(x, y) ((BI) (x) < (BI) (y))
|
||||
#define LEUBI(x, y) ((BI) (x) <= (BI) (y))
|
||||
#define GTUBI(x, y) ((BI) (x) > (BI) (y))
|
||||
#define GEUBI(x, y) ((BI) (x) >= (BI) (y))
|
||||
|
||||
#define ADDQI(x, y) ((x) + (y))
|
||||
#define SUBQI(x, y) ((x) - (y))
|
||||
#define MULQI(x, y) ((x) * (y))
|
||||
#define DIVQI(x, y) ((QI) (x) / (QI) (y))
|
||||
#define UDIVQI(x, y) ((UQI) (x) / (UQI) (y))
|
||||
#define MODQI(x, y) ((QI) (x) % (QI) (y))
|
||||
#define UMODQI(x, y) ((UQI) (x) % (UQI) (y))
|
||||
#define SRAQI(x, y) ((QI) (x) >> (y))
|
||||
#define SRLQI(x, y) ((UQI) (x) >> (y))
|
||||
#define SLLQI(x, y) ((UQI) (x) << (y))
|
||||
extern QI RORQI (QI, int);
|
||||
extern QI ROLQI (QI, int);
|
||||
#define ANDQI(x, y) ((x) & (y))
|
||||
#define ORQI(x, y) ((x) | (y))
|
||||
#define XORQI(x, y) ((x) ^ (y))
|
||||
#define NEGQI(x) (- (x))
|
||||
#define NOTQI(x) (! (QI) (x))
|
||||
#define INVQI(x) (~ (x))
|
||||
#define ABSQI(x) ((x) < 0 ? -(x) : (x))
|
||||
#define EQQI(x, y) ((QI) (x) == (QI) (y))
|
||||
#define NEQI(x, y) ((QI) (x) != (QI) (y))
|
||||
#define LTQI(x, y) ((QI) (x) < (QI) (y))
|
||||
#define LEQI(x, y) ((QI) (x) <= (QI) (y))
|
||||
#define GTQI(x, y) ((QI) (x) > (QI) (y))
|
||||
#define GEQI(x, y) ((QI) (x) >= (QI) (y))
|
||||
#define LTUQI(x, y) ((UQI) (x) < (UQI) (y))
|
||||
#define LEUQI(x, y) ((UQI) (x) <= (UQI) (y))
|
||||
#define GTUQI(x, y) ((UQI) (x) > (UQI) (y))
|
||||
#define GEUQI(x, y) ((UQI) (x) >= (UQI) (y))
|
||||
|
||||
#define ADDHI(x, y) ((x) + (y))
|
||||
#define SUBHI(x, y) ((x) - (y))
|
||||
#define MULHI(x, y) ((x) * (y))
|
||||
#define DIVHI(x, y) ((HI) (x) / (HI) (y))
|
||||
#define UDIVHI(x, y) ((UHI) (x) / (UHI) (y))
|
||||
#define MODHI(x, y) ((HI) (x) % (HI) (y))
|
||||
#define UMODHI(x, y) ((UHI) (x) % (UHI) (y))
|
||||
#define SRAHI(x, y) ((HI) (x) >> (y))
|
||||
#define SRLHI(x, y) ((UHI) (x) >> (y))
|
||||
#define SLLHI(x, y) ((UHI) (x) << (y))
|
||||
extern HI RORHI (HI, int);
|
||||
extern HI ROLHI (HI, int);
|
||||
#define ANDHI(x, y) ((x) & (y))
|
||||
#define ORHI(x, y) ((x) | (y))
|
||||
#define XORHI(x, y) ((x) ^ (y))
|
||||
#define NEGHI(x) (- (x))
|
||||
#define NOTHI(x) (! (HI) (x))
|
||||
#define INVHI(x) (~ (x))
|
||||
#define ABSHI(x) ((x) < 0 ? -(x) : (x))
|
||||
#define EQHI(x, y) ((HI) (x) == (HI) (y))
|
||||
#define NEHI(x, y) ((HI) (x) != (HI) (y))
|
||||
#define LTHI(x, y) ((HI) (x) < (HI) (y))
|
||||
#define LEHI(x, y) ((HI) (x) <= (HI) (y))
|
||||
#define GTHI(x, y) ((HI) (x) > (HI) (y))
|
||||
#define GEHI(x, y) ((HI) (x) >= (HI) (y))
|
||||
#define LTUHI(x, y) ((UHI) (x) < (UHI) (y))
|
||||
#define LEUHI(x, y) ((UHI) (x) <= (UHI) (y))
|
||||
#define GTUHI(x, y) ((UHI) (x) > (UHI) (y))
|
||||
#define GEUHI(x, y) ((UHI) (x) >= (UHI) (y))
|
||||
|
||||
#define ADDSI(x, y) ((x) + (y))
|
||||
#define SUBSI(x, y) ((x) - (y))
|
||||
#define MULSI(x, y) ((x) * (y))
|
||||
#define DIVSI(x, y) ((SI) (x) / (SI) (y))
|
||||
#define UDIVSI(x, y) ((USI) (x) / (USI) (y))
|
||||
#define MODSI(x, y) ((SI) (x) % (SI) (y))
|
||||
#define UMODSI(x, y) ((USI) (x) % (USI) (y))
|
||||
#define SRASI(x, y) ((SI) (x) >> (y))
|
||||
#define SRLSI(x, y) ((USI) (x) >> (y))
|
||||
#define SLLSI(x, y) ((USI) (x) << (y))
|
||||
extern SI RORSI (SI, int);
|
||||
extern SI ROLSI (SI, int);
|
||||
#define ANDSI(x, y) ((x) & (y))
|
||||
#define ORSI(x, y) ((x) | (y))
|
||||
#define XORSI(x, y) ((x) ^ (y))
|
||||
#define NEGSI(x) (- (x))
|
||||
#define NOTSI(x) (! (SI) (x))
|
||||
#define INVSI(x) (~ (x))
|
||||
#define ABSSI(x) ((x) < 0 ? -(x) : (x))
|
||||
#define EQSI(x, y) ((SI) (x) == (SI) (y))
|
||||
#define NESI(x, y) ((SI) (x) != (SI) (y))
|
||||
#define LTSI(x, y) ((SI) (x) < (SI) (y))
|
||||
#define LESI(x, y) ((SI) (x) <= (SI) (y))
|
||||
#define GTSI(x, y) ((SI) (x) > (SI) (y))
|
||||
#define GESI(x, y) ((SI) (x) >= (SI) (y))
|
||||
#define LTUSI(x, y) ((USI) (x) < (USI) (y))
|
||||
#define LEUSI(x, y) ((USI) (x) <= (USI) (y))
|
||||
#define GTUSI(x, y) ((USI) (x) > (USI) (y))
|
||||
#define GEUSI(x, y) ((USI) (x) >= (USI) (y))
|
||||
|
||||
#ifdef DI_FN_SUPPORT
|
||||
extern DI ADDDI (DI, DI);
|
||||
extern DI SUBDI (DI, DI);
|
||||
extern DI MULDI (DI, DI);
|
||||
extern DI DIVDI (DI, DI);
|
||||
extern DI UDIVDI (DI, DI);
|
||||
extern DI MODDI (DI, DI);
|
||||
extern DI UMODDI (DI, DI);
|
||||
extern DI SRADI (DI, int);
|
||||
extern UDI SRLDI (UDI, int);
|
||||
extern UDI SLLDI (UDI, int);
|
||||
extern DI RORDI (DI, int);
|
||||
extern DI ROLDI (DI, int);
|
||||
extern DI ANDDI (DI, DI);
|
||||
extern DI ORDI (DI, DI);
|
||||
extern DI XORDI (DI, DI);
|
||||
extern DI NEGDI (DI);
|
||||
extern int NOTDI (DI);
|
||||
extern DI INVDI (DI);
|
||||
extern int EQDI (DI, DI);
|
||||
extern int NEDI (DI, DI);
|
||||
extern int LTDI (DI, DI);
|
||||
extern int LEDI (DI, DI);
|
||||
extern int GTDI (DI, DI);
|
||||
extern int GEDI (DI, DI);
|
||||
extern int LTUDI (UDI, UDI);
|
||||
extern int LEUDI (UDI, UDI);
|
||||
extern int GTUDI (UDI, UDI);
|
||||
extern int GEUDI (UDI, UDI);
|
||||
#else /* ! DI_FN_SUPPORT */
|
||||
#define ADDDI(x, y) ((x) + (y))
|
||||
#define SUBDI(x, y) ((x) - (y))
|
||||
#define MULDI(x, y) ((x) * (y))
|
||||
#define DIVDI(x, y) ((DI) (x) / (DI) (y))
|
||||
#define UDIVDI(x, y) ((UDI) (x) / (UDI) (y))
|
||||
#define MODDI(x, y) ((DI) (x) % (DI) (y))
|
||||
#define UMODDI(x, y) ((UDI) (x) % (UDI) (y))
|
||||
#define SRADI(x, y) ((DI) (x) >> (y))
|
||||
#define SRLDI(x, y) ((UDI) (x) >> (y))
|
||||
#define SLLDI(x, y) ((UDI) (x) << (y))
|
||||
extern DI RORDI (DI, int);
|
||||
extern DI ROLDI (DI, int);
|
||||
#define ANDDI(x, y) ((x) & (y))
|
||||
#define ORDI(x, y) ((x) | (y))
|
||||
#define XORDI(x, y) ((x) ^ (y))
|
||||
#define NEGDI(x) (- (x))
|
||||
#define NOTDI(x) (! (DI) (x))
|
||||
#define INVDI(x) (~ (x))
|
||||
#define ABSDI(x) ((x) < 0 ? -(x) : (x))
|
||||
#define EQDI(x, y) ((DI) (x) == (DI) (y))
|
||||
#define NEDI(x, y) ((DI) (x) != (DI) (y))
|
||||
#define LTDI(x, y) ((DI) (x) < (DI) (y))
|
||||
#define LEDI(x, y) ((DI) (x) <= (DI) (y))
|
||||
#define GTDI(x, y) ((DI) (x) > (DI) (y))
|
||||
#define GEDI(x, y) ((DI) (x) >= (DI) (y))
|
||||
#define LTUDI(x, y) ((UDI) (x) < (UDI) (y))
|
||||
#define LEUDI(x, y) ((UDI) (x) <= (UDI) (y))
|
||||
#define GTUDI(x, y) ((UDI) (x) > (UDI) (y))
|
||||
#define GEUDI(x, y) ((UDI) (x) >= (UDI) (y))
|
||||
#endif /* DI_FN_SUPPORT */
|
||||
|
||||
#define EXTBIQI(x) ((QI) (BI) (x))
|
||||
#define EXTBIHI(x) ((HI) (BI) (x))
|
||||
#define EXTBISI(x) ((SI) (BI) (x))
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern DI EXTBIDI (BI);
|
||||
#else
|
||||
#define EXTBIDI(x) ((DI) (BI) (x))
|
||||
#endif
|
||||
#define EXTQIHI(x) ((HI) (QI) (x))
|
||||
#define EXTQISI(x) ((SI) (QI) (x))
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern DI EXTQIDI (QI);
|
||||
#else
|
||||
#define EXTQIDI(x) ((DI) (QI) (x))
|
||||
#endif
|
||||
#define EXTHIHI(x) ((HI) (HI) (x))
|
||||
#define EXTHISI(x) ((SI) (HI) (x))
|
||||
#define EXTSISI(x) ((SI) (SI) (x))
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern DI EXTHIDI (HI);
|
||||
#else
|
||||
#define EXTHIDI(x) ((DI) (HI) (x))
|
||||
#endif
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern DI EXTSIDI (SI);
|
||||
#else
|
||||
#define EXTSIDI(x) ((DI) (SI) (x))
|
||||
#endif
|
||||
|
||||
#define ZEXTBIQI(x) ((QI) (BI) (x))
|
||||
#define ZEXTBIHI(x) ((HI) (BI) (x))
|
||||
#define ZEXTBISI(x) ((SI) (BI) (x))
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern DI ZEXTBIDI (BI);
|
||||
#else
|
||||
#define ZEXTBIDI(x) ((DI) (BI) (x))
|
||||
#endif
|
||||
#define ZEXTQIHI(x) ((HI) (UQI) (x))
|
||||
#define ZEXTQISI(x) ((SI) (UQI) (x))
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern DI ZEXTQIDI (QI);
|
||||
#else
|
||||
#define ZEXTQIDI(x) ((DI) (UQI) (x))
|
||||
#endif
|
||||
#define ZEXTHISI(x) ((SI) (UHI) (x))
|
||||
#define ZEXTHIHI(x) ((HI) (UHI) (x))
|
||||
#define ZEXTSISI(x) ((SI) (USI) (x))
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern DI ZEXTHIDI (HI);
|
||||
#else
|
||||
#define ZEXTHIDI(x) ((DI) (UHI) (x))
|
||||
#endif
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern DI ZEXTSIDI (SI);
|
||||
#else
|
||||
#define ZEXTSIDI(x) ((DI) (USI) (x))
|
||||
#endif
|
||||
|
||||
#define TRUNCQIBI(x) ((BI) (QI) (x))
|
||||
#define TRUNCHIBI(x) ((BI) (HI) (x))
|
||||
#define TRUNCHIQI(x) ((QI) (HI) (x))
|
||||
#define TRUNCSIBI(x) ((BI) (SI) (x))
|
||||
#define TRUNCSIQI(x) ((QI) (SI) (x))
|
||||
#define TRUNCSIHI(x) ((HI) (SI) (x))
|
||||
#define TRUNCSISI(x) ((SI) (SI) (x))
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern BI TRUNCDIBI (DI);
|
||||
#else
|
||||
#define TRUNCDIBI(x) ((BI) (DI) (x))
|
||||
#endif
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern QI TRUNCDIQI (DI);
|
||||
#else
|
||||
#define TRUNCDIQI(x) ((QI) (DI) (x))
|
||||
#endif
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern HI TRUNCDIHI (DI);
|
||||
#else
|
||||
#define TRUNCDIHI(x) ((HI) (DI) (x))
|
||||
#endif
|
||||
#if defined (DI_FN_SUPPORT)
|
||||
extern SI TRUNCDISI (DI);
|
||||
#else
|
||||
#define TRUNCDISI(x) ((SI) (DI) (x))
|
||||
#endif
|
||||
|
||||
/* Composing/decomposing the various types.
|
||||
Word ordering is endian-independent. Words are specified most to least
|
||||
significant and word number 0 is the most significant word.
|
||||
??? May also wish an endian-dependent version. Later. */
|
||||
|
||||
static QI SUBWORDSIQI (SI, int);
|
||||
static HI SUBWORDSIHI (SI, int);
|
||||
static QI SUBWORDDIQI (DI, int);
|
||||
static HI SUBWORDDIHI (DI, int);
|
||||
static SI SUBWORDDISI (DI, int);
|
||||
|
||||
#ifdef SEMOPS_DEFINE_INLINE
|
||||
|
||||
SEMOPS_INLINE QI
|
||||
SUBWORDSIQI (SI in, int byte)
|
||||
{
|
||||
assert (byte >= 0 && byte <= 3);
|
||||
return (UQI) (in >> (8 * (3 - byte))) & 0xFF;
|
||||
}
|
||||
|
||||
SEMOPS_INLINE HI
|
||||
SUBWORDSIHI (SI in, int word)
|
||||
{
|
||||
if (word == 0)
|
||||
return (USI) in >> 16;
|
||||
else
|
||||
return in;
|
||||
}
|
||||
|
||||
SEMOPS_INLINE QI
|
||||
SUBWORDDIQI (DI in, int byte)
|
||||
{
|
||||
assert (byte >= 0 && byte <= 7);
|
||||
return (UQI) (in >> (8 * (7 - byte))) & 0xFF;
|
||||
}
|
||||
|
||||
SEMOPS_INLINE HI
|
||||
SUBWORDDIHI (DI in, int word)
|
||||
{
|
||||
assert (word >= 0 && word <= 3);
|
||||
return (UHI) (in >> (16 * (3 - word))) & 0xFFFF;
|
||||
}
|
||||
|
||||
SEMOPS_INLINE SI
|
||||
SUBWORDDISI (DI in, int word)
|
||||
{
|
||||
if (word == 0)
|
||||
return (UDI) in >> 32;
|
||||
else
|
||||
return in;
|
||||
}
|
||||
|
||||
#endif /* SUBWORD,JOIN */
|
||||
|
||||
#endif /* CGEN_BASIC_OPS_H */
|
56
include/cgen/bitset.h
Normal file
56
include/cgen/bitset.h
Normal file
@ -0,0 +1,56 @@
|
||||
/* Header file the type CGEN_BITSET.
|
||||
Copyright 2002, 2005, 2009 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU opcodes library.
|
||||
|
||||
This library 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, or (at your option)
|
||||
any later version.
|
||||
|
||||
It 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 library; see the file COPYING3. If not, write to the
|
||||
Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
02110-1301, USA. */
|
||||
|
||||
#ifndef CGEN_BITSET_H
|
||||
#define CGEN_BITSET_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* A bitmask represented as a string.
|
||||
Each member of the set is represented as a bit
|
||||
in the string. Bytes are indexed from left to right in the string and
|
||||
bits from most significant to least within each byte.
|
||||
|
||||
For example, the bit representing member number 6 is (set->bits[0] & 0x02).
|
||||
*/
|
||||
typedef struct cgen_bitset
|
||||
{
|
||||
unsigned length;
|
||||
char *bits;
|
||||
} CGEN_BITSET;
|
||||
|
||||
extern CGEN_BITSET *cgen_bitset_create PARAMS ((unsigned));
|
||||
extern void cgen_bitset_init PARAMS ((CGEN_BITSET *, unsigned));
|
||||
extern void cgen_bitset_clear PARAMS ((CGEN_BITSET *));
|
||||
extern void cgen_bitset_add PARAMS ((CGEN_BITSET *, unsigned));
|
||||
extern void cgen_bitset_set PARAMS ((CGEN_BITSET *, unsigned));
|
||||
extern int cgen_bitset_compare PARAMS ((CGEN_BITSET *, CGEN_BITSET *));
|
||||
extern void cgen_bitset_union PARAMS ((CGEN_BITSET *, CGEN_BITSET *, CGEN_BITSET *));
|
||||
extern int cgen_bitset_intersect_p PARAMS ((CGEN_BITSET *, CGEN_BITSET *));
|
||||
extern int cgen_bitset_contains PARAMS ((CGEN_BITSET *, unsigned));
|
||||
extern CGEN_BITSET *cgen_bitset_copy PARAMS ((CGEN_BITSET *));
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif
|
373
include/coff/ChangeLog
Normal file
373
include/coff/ChangeLog
Normal file
@ -0,0 +1,373 @@
|
||||
2013-07-10 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* rs6000.h (external_core_dumpx): New structure.
|
||||
(external_ld_info32): Ditto.
|
||||
|
||||
2013-07-02 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* internal.h (C_STTLS, C_GTLS): Define.
|
||||
* xcoff.h (XMC_TL, XMC_TU, XMC_TE): Define.
|
||||
|
||||
2013-02-04 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* ti.h (SWAP_OUT_RELOC_EXTRA): Define.
|
||||
|
||||
2013-01-02 Martin Storsjo <martin@martin.st>
|
||||
|
||||
* arm.h (ARMV7PEMAGIC): Define.
|
||||
(ARMBADMAG): Update.
|
||||
|
||||
2011-06-02 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* i860.h: Fix spelling mistake in comment.
|
||||
|
||||
2011-05-04 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* rs6000.h (union external_auxent): Add x_ftype field.
|
||||
* rs6k64.h: (struct external_auxent): Remap x_file field.
|
||||
|
||||
2011-05-04 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* rs6000.h (struct external_exceptab): New struct.
|
||||
(EXCEPTSZ): New macro.
|
||||
* rs6k64.h: (struct external_exceptab): New struct.
|
||||
(EXCEPTSZ): New macro.
|
||||
|
||||
2011-05-03 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* rs6000.h (struct external_ldsym): Use E_SYMNMLEN instead of
|
||||
SYMNMLEN.
|
||||
|
||||
2011-04-27 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* xcoff.h (F_FDPR_PROF, F_FDPR_OPTI, F_DSA, F_VARPG)
|
||||
(STYP_DWARF, SSUBTYP_DWINFO)
|
||||
(SSUBTYP_DWLINE, SSUBTYP_DWPBNMS, SSUBTYP_DWPBTYP)
|
||||
(SSUBTYP_DWARNGE, SSUBTYP_DWABREV, SSUBTYP_DWSTR)
|
||||
(SSUBTYP_DWRNGES, STYP_TDATA, STYP_TBSS, R_TLS, R_TLS_IE)
|
||||
(R_TLS_LD, R_TLS_LE, R_TLSM, R_TLSML, R_TOCU, R_TOCL, C_DWARF):
|
||||
New macros.
|
||||
|
||||
2011-03-31 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* internal.h (C_NULL_VALUE): Define.
|
||||
|
||||
2010-06-29 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* maxq.h: Delete file.
|
||||
|
||||
2010-04-15 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* alpha.h: Update copyright notice to use GPLv3.
|
||||
* apollo.h: Likewise.
|
||||
* arm.h: Likewise.
|
||||
* aux-coff.h: Likewise.
|
||||
* ecoff.h: Likewise.
|
||||
* external.h: Likewise.
|
||||
* go32exe.h: Likewise.
|
||||
* h8300.h: Likewise.
|
||||
* h8500.h: Likewise.
|
||||
* i386.h: Likewise.
|
||||
* i860.h: Likewise.
|
||||
* i960.h: Likewise.
|
||||
* ia64.h: Likewise.
|
||||
* internal.h: Likewise.
|
||||
* m68k.h: Likewise.
|
||||
* m88k.h: Likewise.
|
||||
* maxq.h: Likewise.
|
||||
* mcore.h: Likewise.
|
||||
* mips.h: Likewise.
|
||||
* mipspe.h: Likewise.
|
||||
* or32.h: Likewise.
|
||||
* pe.h: Likewise.
|
||||
* powerpc.h: Likewise.
|
||||
* rs6000.h: Likewise.
|
||||
* rs6k64.h: Likewise.
|
||||
* sh.h: Likewise.
|
||||
* sparc.h: Likewise.
|
||||
* ti.h: Likewise.
|
||||
* tic30.h: Likewise.
|
||||
* tic4x.h: Likewise.
|
||||
* tic54x.h: Likewise.
|
||||
* tic80.h: Likewise.
|
||||
* w65.h: Likewise.
|
||||
* we32k.h: Likewise.
|
||||
* x86_64.h: Likewise.
|
||||
* xcoff.h: Likewise.
|
||||
* z80.h: Likewise.
|
||||
* z8k.h: Likewise.
|
||||
|
||||
2009-12-02 Jerker Bäck <jerker.back@gmail.com>
|
||||
|
||||
PR binutils/11017
|
||||
* i386lh (COFF_PAGE_SIZE): Define.
|
||||
* x86_64.h (COFF_PAGE_SIZE): Define.
|
||||
|
||||
2009-10-17 Arnold Metselaar <arnold.metselaar@planet.nl>
|
||||
|
||||
* z80.h: Store alignment requirement in section header, to allow
|
||||
ld to preserve alignment. Some code was copied from ti.h.
|
||||
|
||||
2009-09-05 Martin Thuresson <martin@mtme.org>
|
||||
|
||||
* ti.h (GET_LNSZ_SIZE, PUT_LNSZ_SIZE): Updated name of class
|
||||
variable to in_class to match changes in function that use this
|
||||
macro.
|
||||
|
||||
2009-08-10 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Fix references past allocated memory for i386-*-go32.
|
||||
* ti.h (COFF_ADJUST_FILEHDR_IN_POST, COFF_ADJUST_FILEHDR_OUT_POST):
|
||||
Reference F_TARGET_ID only when !COFF0_P.
|
||||
|
||||
2009-08-10 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Stop using bfd_usrdata in libbfd.
|
||||
* go32exe.h (struct external_filehdr_go32_exe <stub>, FILHSZ): Replace
|
||||
STUBSIZE by GO32_STUBSIZE.
|
||||
(STUBSIZE): Move the definition ...
|
||||
* internal.h (GO32_STUBSIZE): ... here and rename it.
|
||||
(struct internal_filehdr <go32stub>, F_GO32STUB): New.
|
||||
|
||||
2009-06-03 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* symconst.h (btLong64, btULong64, btLongLong64, btULongLong64,
|
||||
btAdr64, btInt64, btUInt64): New defines.
|
||||
|
||||
2009-04-21 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* pe.h (pex64_runtime_function): New structure.
|
||||
(external_pex64_runtime_function): Likewise.
|
||||
(pex64_unwind_code): Likewise.
|
||||
(external_pex64_unwind_code): Likewise.
|
||||
(pex64_unwind_info): Likewise.
|
||||
(external_pex64_unwind_info): Likewise.
|
||||
(external_pex64_scope): Likewise.
|
||||
(pex64_scope): Likewise.
|
||||
(pex64_scope_entry): Likewise.
|
||||
(external_pex64_scope_entry): Likewise.
|
||||
(PEX64_IS_RUNTIME_FUNCTION_CHAINED): New macro.
|
||||
(PEX64_GET_UNWINDDATA_UNIFIED_RVA): Likewise.
|
||||
(PEX64_UNWCODE_CODE): Likewise.
|
||||
(PEX64_UNWCODE_INFO): Likewise.
|
||||
(UWOP_...): Add defines for unwind code.
|
||||
(UNW_FLAG_...): Add defined for unwind info flags.
|
||||
(PEX64_SCOPE_ENTRY_SIZE): New macro.
|
||||
(PEX64_UWI_VERSION): Likewise.
|
||||
(PEX64_UWI_FLAGS): Likewise.
|
||||
(PEX64_UWI_FRAMEREG): Likewise.
|
||||
(PEX64_UWI_FRAMEOFF): Likewise.
|
||||
(PEX64_UWI_SIZEOF_UWCODE_ARRAY): Likewise.
|
||||
(PEX64_OFFSET_TO_UNWIND_CODE): Likewise.
|
||||
(PEX64_OFFSET_TO_HANDLER_RVA): Likewise.
|
||||
(PEX64_OFFSET_TO_SCOPE_COUNT): Likewise.
|
||||
(PEX64_SCOPE_ENTRY): Likewise.
|
||||
|
||||
2009-04-17 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* pe.h (IMAGE_SUBSYSTEM_EFI_ROM): Renamed to ...
|
||||
(IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER): This.
|
||||
|
||||
2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com>
|
||||
|
||||
* xcoff.h (xcoff_link_hash_table): Move to bfd/xcofflink.c.
|
||||
|
||||
2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
|
||||
|
||||
* xcoff.h (XCOFF_EXPALL, XCOFF_EXPFULL): New flags.
|
||||
(xcoff_loader_info): Add auto_export_flags.
|
||||
|
||||
2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
|
||||
|
||||
* internal.h (C_AIX_WEAKEXT): New macro.
|
||||
(C_WEAKEXT): Use the GNU definition in the generic part of the file,
|
||||
and conditionally reset it to C_AIX_WEAKEXT in the XCOFF part of
|
||||
the file.
|
||||
(CSECT_SYM_P): New macro.
|
||||
* xcoff.h (L_WEAK): Define.
|
||||
(EXTERN_SYM_P): New macro.
|
||||
|
||||
2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
|
||||
|
||||
* xcoff.h (XCOFF_ALLOCATED): New flag.
|
||||
|
||||
2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
|
||||
|
||||
* xcoff.h (XCOFF_CALLED, XCOFF_IMPORT): Update comments.
|
||||
(XCOFF_WAS_UNDEFINED): New flag.
|
||||
(xcoff_link_hash_table): Add an "rtld" field.
|
||||
|
||||
2009-03-14 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||
|
||||
* internal.h (struct internal_extra_pe_aouthdr): Correct type
|
||||
of DllCharacteristics flags field to unsigned.
|
||||
* pe.h (IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE,
|
||||
IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE,
|
||||
IMAGE_DLL_CHARACTERISTICS_NX_COMPAT,
|
||||
IMAGE_DLLCHARACTERISTICS_NO_ISOLATION,
|
||||
IMAGE_DLLCHARACTERISTICS_NO_SEH,
|
||||
IMAGE_DLLCHARACTERISTICS_NO_BIND,
|
||||
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER,
|
||||
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE): New macros to
|
||||
define flag bit values for DllCharacteristics field of PEAOUTHDR,
|
||||
PEPAOUTHDR.
|
||||
|
||||
2008-12-23 Johan Olmutz Nielsen <jnielsen@ddci.com>
|
||||
|
||||
* ti.h (COFF_ADJUST_SCNHDR_OUT_PRE): Define.
|
||||
|
||||
2008-06-17 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* ti.h (GET_SCNHDR_NLNNO): Provide an alternative version of this
|
||||
macro which does not trigger an array bounds warning in gcc.
|
||||
(PUT_SCNHDR_NLNNO): Likewise.
|
||||
(GET_SCNHDR_FLAGS): Likewise.
|
||||
(PUT_SCNHDR_FLAGS): Likewise.
|
||||
(GET_SCNHDR_PAGE): Likewise.
|
||||
(PUT_SCNHDR_PAGE): Likewise.
|
||||
|
||||
2007-11-05 Danny Smith <dannysmith@users.sourceforge.net>
|
||||
|
||||
* pe.h (COFF_ENCODE_ALIGNMENT) Define.
|
||||
|
||||
2007-08-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* pe.h (IMAGE_SCN_ALIGN_POWER_BIT_POS): New.
|
||||
(IMAGE_SCN_ALIGN_POWER_BIT_MASK): Likewise.
|
||||
(IMAGE_SCN_ALIGN_POWER_NUM): Likewise.
|
||||
(IMAGE_SCN_ALIGN_POWER_CONST): Likewise.
|
||||
(IMAGE_SCN_ALIGN_128BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_256BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_512BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_1024BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_2048BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_4096BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_8192BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_1BYTES): Redefined with
|
||||
IMAGE_SCN_ALIGN_POWER_CONST.
|
||||
(IMAGE_SCN_ALIGN_2BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_4BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_8BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_16BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_32BYTES): Likewise.
|
||||
(IMAGE_SCN_ALIGN_64BYTES): Likewise.
|
||||
|
||||
2007-07-12 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* internal.h (struct internal_syment): Use bfd_hostptr_t for
|
||||
_n_zeroes and _n_offset fields.
|
||||
|
||||
2007-04-27 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* rs6000.h: Write Mimi's name in ASCII.
|
||||
|
||||
2007-03-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* internal.h (internal_extra_pe_aouthdr): Add Magic,
|
||||
MajorLinkerVersion, MinorLinkerVersion, SizeOfCode,
|
||||
SizeOfInitializedData, SizeOfUninitializedData,
|
||||
AddressOfEntryPoint, BaseOfCode and BaseOfData.
|
||||
|
||||
2006-12-05 Michael Tautschnig <tautschn@model.in.tum.de>
|
||||
Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* external.h (struct external_aouthdr): Add ATTRIBUTE_PACKED.
|
||||
(struct external_syment): Likewise.
|
||||
(union external_auxent): Likewise.
|
||||
|
||||
2006-11-14 Phil Lello <phil.lello@homecall.co.uk>
|
||||
|
||||
* pe.h: Added defines for IMAGE_SUBSYSTEM_EFI_ROM and
|
||||
IMAGE_SUBSYSTEM_XBOX.
|
||||
* internal.h: Added defines for PE directory entry types.
|
||||
NB: in internal.h because IMAGE_NUMBEROF_DIRECTORY_ENTRYIES is in
|
||||
pe.h
|
||||
|
||||
2006-09-20 Kai Tietz <Kai.Tietz@onevision.com>
|
||||
|
||||
* external.h: Add proper external_aouthdr64 structure (without
|
||||
data_start member).
|
||||
(AOUTHDRSZ64): Set according structure size.
|
||||
(AOUTHDR64): As typedef of external_aouthdr64 structure.
|
||||
* internal.h: Add relocation identifiers for coff.
|
||||
* pe.h: Add define IMAGE_FILE_MACHINE_AMD64 the coff signature.
|
||||
(PEPAOUTHDR): Adjust structure to have proper size (using AOUTHDR64).
|
||||
(PEPAOUTSZ): Calculated size of 240.
|
||||
* x86_64.h: Coff information for x86_64 (AMD64).
|
||||
|
||||
2006-02-05 Arnold Metselaar <arnold.metselaar@planet.nl>
|
||||
|
||||
* internal.h: Add relocation number R_IMM24 for Z80.
|
||||
|
||||
2005-10-25 Arnold Metselaar <arnold.metselaar@planet.nl>
|
||||
|
||||
* internal.h: Add relocation number for Z80
|
||||
* z80.h: New file.
|
||||
|
||||
2005-08-18 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* a29k.h: Delete.
|
||||
|
||||
2005-07-14 Daniel Marques <marques@cs.cornell.edu>
|
||||
|
||||
* alpha.h (ALPHA_ECOFF_COMPRESSEDMAG): Define.
|
||||
* ecoff.h (ALPHA_MAGIC_COMPRESSED): Define.
|
||||
|
||||
2005-05-10 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* Update the address and phone number of the FSF organization in
|
||||
the GPL notices in the following files:
|
||||
a29k.h, alpha.h, apollo.h, arm.h, aux-coff.h, ecoff.h, external.h,
|
||||
go32exe.h, h8300.h, h8500.h, i386.h, i860.h, i960.h, ia64.h,
|
||||
internal.h, m68k.h, m88k.h, maxq.h, mcore.h, mips.h, mipspe.h,
|
||||
or32.h, pe.h, powerpc.h, rs6k64.h, sh.h, sparc.h, ti.h, tic30.h,
|
||||
tic4x.h, tic54x.h, tic80.h, w65.h, we32k.h, xcoff.h, z8k.h
|
||||
|
||||
2005-02-21 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* xcoff.h (struct xcoff_loader_info): Warning fix.
|
||||
|
||||
2005-01-10 Inderpreet Singh <inderpreetb@noida.hcltech.com>
|
||||
|
||||
* maxq.h (F_MAXQ10, F_MAXQ20): Define.
|
||||
|
||||
2004-11-08 Inderpreet Singh <inderpreetb@nioda.hcltech.com>
|
||||
Vineet Sharma <vineets@noida.hcltech.com>
|
||||
|
||||
* maxq.h: New file: Defintions for the maxq port.
|
||||
|
||||
2004-11-08 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
|
||||
|
||||
* pe.h (IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY): Define.
|
||||
(IMAGE_WEAK_EXTERN_SEARCH_LIBRARY): Same.
|
||||
(IMAGE_WEAK_EXTERN_SEARCH_ALIAS): Same.
|
||||
|
||||
2004-08-13 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* symconst.h (langMax): Fix typo in comment.
|
||||
|
||||
2004-04-23 Chris Demetriou <cgd@broadcom.com>
|
||||
|
||||
* mips.h (MIPS_R_RELHI, MIPS_R_RELLO, MIPS_R_SWITCH): Remove
|
||||
(MIPS_R_PCREL16): Update comment.
|
||||
* ecoff.h (struct ecoff_value_adjust): Remove structure.
|
||||
(struct ecoff_debug_info): Remove 'adjust' member.
|
||||
|
||||
2004-04-20 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* internal.h (R_SECREL32): Add.
|
||||
|
||||
For older changes see ChangeLog-9103
|
||||
|
||||
Copyright (C) 2004-2012 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
Local Variables:
|
||||
mode: change-log
|
||||
left-margin: 8
|
||||
fill-column: 74
|
||||
version-control: never
|
||||
End:
|
1186
include/coff/ChangeLog-9103
Normal file
1186
include/coff/ChangeLog-9103
Normal file
File diff suppressed because it is too large
Load Diff
386
include/coff/alpha.h
Normal file
386
include/coff/alpha.h
Normal file
@ -0,0 +1,386 @@
|
||||
/* ECOFF support on Alpha machines.
|
||||
coff/ecoff.h must be included before this file.
|
||||
|
||||
Copyright 2001, 2005, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/********************** FILE HEADER **********************/
|
||||
|
||||
struct external_filehdr
|
||||
{
|
||||
unsigned char f_magic[2]; /* magic number */
|
||||
unsigned char f_nscns[2]; /* number of sections */
|
||||
unsigned char f_timdat[4]; /* time & date stamp */
|
||||
unsigned char f_symptr[8]; /* file pointer to symtab */
|
||||
unsigned char f_nsyms[4]; /* number of symtab entries */
|
||||
unsigned char f_opthdr[2]; /* sizeof(optional hdr) */
|
||||
unsigned char f_flags[2]; /* flags */
|
||||
};
|
||||
|
||||
/* Magic numbers are defined in coff/ecoff.h. */
|
||||
#define ALPHA_ECOFF_BADMAG(x) \
|
||||
((x).f_magic != ALPHA_MAGIC && (x).f_magic != ALPHA_MAGIC_BSD)
|
||||
|
||||
#define ALPHA_ECOFF_COMPRESSEDMAG(x) \
|
||||
((x).f_magic == ALPHA_MAGIC_COMPRESSED)
|
||||
|
||||
/* The object type is encoded in the f_flags. */
|
||||
#define F_ALPHA_OBJECT_TYPE_MASK 0x3000
|
||||
#define F_ALPHA_NO_SHARED 0x1000
|
||||
#define F_ALPHA_SHARABLE 0x2000
|
||||
#define F_ALPHA_CALL_SHARED 0x3000
|
||||
|
||||
#define FILHDR struct external_filehdr
|
||||
#define FILHSZ 24
|
||||
|
||||
/********************** AOUT "OPTIONAL HEADER" **********************/
|
||||
|
||||
typedef struct external_aouthdr
|
||||
{
|
||||
unsigned char magic[2]; /* type of file */
|
||||
unsigned char vstamp[2]; /* version stamp */
|
||||
unsigned char bldrev[2]; /* ?? */
|
||||
unsigned char padding[2]; /* pad to quadword boundary */
|
||||
unsigned char tsize[8]; /* text size in bytes */
|
||||
unsigned char dsize[8]; /* initialized data " " */
|
||||
unsigned char bsize[8]; /* uninitialized data " " */
|
||||
unsigned char entry[8]; /* entry pt. */
|
||||
unsigned char text_start[8]; /* base of text used for this file */
|
||||
unsigned char data_start[8]; /* base of data used for this file */
|
||||
unsigned char bss_start[8]; /* base of bss used for this file */
|
||||
unsigned char gprmask[4]; /* bitmask of general registers used */
|
||||
unsigned char fprmask[4]; /* bitmask of floating point registers used */
|
||||
unsigned char gp_value[8]; /* value for gp register */
|
||||
} AOUTHDR;
|
||||
|
||||
/* compute size of a header */
|
||||
|
||||
#define AOUTSZ 80
|
||||
#define AOUTHDRSZ 80
|
||||
|
||||
/********************** SECTION HEADER **********************/
|
||||
|
||||
struct external_scnhdr
|
||||
{
|
||||
unsigned char s_name[8]; /* section name */
|
||||
unsigned char s_paddr[8]; /* physical address, aliased s_nlib */
|
||||
unsigned char s_vaddr[8]; /* virtual address */
|
||||
unsigned char s_size[8]; /* section size */
|
||||
unsigned char s_scnptr[8]; /* file ptr to raw data for section */
|
||||
unsigned char s_relptr[8]; /* file ptr to relocation */
|
||||
unsigned char s_lnnoptr[8]; /* file ptr to line numbers */
|
||||
unsigned char s_nreloc[2]; /* number of relocation entries */
|
||||
unsigned char s_nlnno[2]; /* number of line number entries*/
|
||||
unsigned char s_flags[4]; /* flags */
|
||||
};
|
||||
|
||||
#define SCNHDR struct external_scnhdr
|
||||
#define SCNHSZ 64
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
unsigned char r_vaddr[8];
|
||||
unsigned char r_symndx[4];
|
||||
unsigned char r_bits[4];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 16
|
||||
|
||||
/* Constants to unpack the r_bits field. The Alpha seems to always be
|
||||
little endian, so I haven't bothered to define big endian variants
|
||||
of these. */
|
||||
|
||||
#define RELOC_BITS0_TYPE_LITTLE 0xff
|
||||
#define RELOC_BITS0_TYPE_SH_LITTLE 0
|
||||
|
||||
#define RELOC_BITS1_EXTERN_LITTLE 0x01
|
||||
|
||||
#define RELOC_BITS1_OFFSET_LITTLE 0x7e
|
||||
#define RELOC_BITS1_OFFSET_SH_LITTLE 1
|
||||
|
||||
#define RELOC_BITS1_RESERVED_LITTLE 0x80
|
||||
#define RELOC_BITS1_RESERVED_SH_LITTLE 7
|
||||
#define RELOC_BITS2_RESERVED_LITTLE 0xff
|
||||
#define RELOC_BITS2_RESERVED_SH_LEFT_LITTLE 1
|
||||
#define RELOC_BITS3_RESERVED_LITTLE 0x03
|
||||
#define RELOC_BITS3_RESERVED_SH_LEFT_LITTLE 9
|
||||
|
||||
#define RELOC_BITS3_SIZE_LITTLE 0xfc
|
||||
#define RELOC_BITS3_SIZE_SH_LITTLE 2
|
||||
|
||||
/* The r_type field in a reloc is one of the following values. */
|
||||
#define ALPHA_R_IGNORE 0
|
||||
#define ALPHA_R_REFLONG 1
|
||||
#define ALPHA_R_REFQUAD 2
|
||||
#define ALPHA_R_GPREL32 3
|
||||
#define ALPHA_R_LITERAL 4
|
||||
#define ALPHA_R_LITUSE 5
|
||||
#define ALPHA_R_GPDISP 6
|
||||
#define ALPHA_R_BRADDR 7
|
||||
#define ALPHA_R_HINT 8
|
||||
#define ALPHA_R_SREL16 9
|
||||
#define ALPHA_R_SREL32 10
|
||||
#define ALPHA_R_SREL64 11
|
||||
#define ALPHA_R_OP_PUSH 12
|
||||
#define ALPHA_R_OP_STORE 13
|
||||
#define ALPHA_R_OP_PSUB 14
|
||||
#define ALPHA_R_OP_PRSHIFT 15
|
||||
#define ALPHA_R_GPVALUE 16
|
||||
#define ALPHA_R_GPRELHIGH 17
|
||||
#define ALPHA_R_GPRELLOW 18
|
||||
#define ALPHA_R_IMMED 19
|
||||
|
||||
/* Overloaded reloc value used by Net- and OpenBSD. */
|
||||
#define ALPHA_R_LITERALSLEAZY 17
|
||||
|
||||
/* With ALPHA_R_LITUSE, the r_size field is one of the following values. */
|
||||
#define ALPHA_R_LU_BASE 1
|
||||
#define ALPHA_R_LU_BYTOFF 2
|
||||
#define ALPHA_R_LU_JSR 3
|
||||
|
||||
/* With ALPHA_R_IMMED, the r_size field is one of the following values. */
|
||||
#define ALPHA_R_IMMED_GP_16 1
|
||||
#define ALPHA_R_IMMED_GP_HI32 2
|
||||
#define ALPHA_R_IMMED_SCN_HI32 3
|
||||
#define ALPHA_R_IMMED_BR_HI32 4
|
||||
#define ALPHA_R_IMMED_LO32 5
|
||||
|
||||
/********************** SYMBOLIC INFORMATION **********************/
|
||||
|
||||
/* Written by John Gilmore. */
|
||||
|
||||
/* ECOFF uses COFF-like section structures, but its own symbol format.
|
||||
This file defines the symbol format in fields whose size and alignment
|
||||
will not vary on different host systems. */
|
||||
|
||||
/* File header as a set of bytes */
|
||||
|
||||
struct hdr_ext
|
||||
{
|
||||
unsigned char h_magic[2];
|
||||
unsigned char h_vstamp[2];
|
||||
unsigned char h_ilineMax[4];
|
||||
unsigned char h_idnMax[4];
|
||||
unsigned char h_ipdMax[4];
|
||||
unsigned char h_isymMax[4];
|
||||
unsigned char h_ioptMax[4];
|
||||
unsigned char h_iauxMax[4];
|
||||
unsigned char h_issMax[4];
|
||||
unsigned char h_issExtMax[4];
|
||||
unsigned char h_ifdMax[4];
|
||||
unsigned char h_crfd[4];
|
||||
unsigned char h_iextMax[4];
|
||||
unsigned char h_cbLine[8];
|
||||
unsigned char h_cbLineOffset[8];
|
||||
unsigned char h_cbDnOffset[8];
|
||||
unsigned char h_cbPdOffset[8];
|
||||
unsigned char h_cbSymOffset[8];
|
||||
unsigned char h_cbOptOffset[8];
|
||||
unsigned char h_cbAuxOffset[8];
|
||||
unsigned char h_cbSsOffset[8];
|
||||
unsigned char h_cbSsExtOffset[8];
|
||||
unsigned char h_cbFdOffset[8];
|
||||
unsigned char h_cbRfdOffset[8];
|
||||
unsigned char h_cbExtOffset[8];
|
||||
};
|
||||
|
||||
/* File descriptor external record */
|
||||
|
||||
struct fdr_ext
|
||||
{
|
||||
unsigned char f_adr[8];
|
||||
unsigned char f_cbLineOffset[8];
|
||||
unsigned char f_cbLine[8];
|
||||
unsigned char f_cbSs[8];
|
||||
unsigned char f_rss[4];
|
||||
unsigned char f_issBase[4];
|
||||
unsigned char f_isymBase[4];
|
||||
unsigned char f_csym[4];
|
||||
unsigned char f_ilineBase[4];
|
||||
unsigned char f_cline[4];
|
||||
unsigned char f_ioptBase[4];
|
||||
unsigned char f_copt[4];
|
||||
unsigned char f_ipdFirst[4];
|
||||
unsigned char f_cpd[4];
|
||||
unsigned char f_iauxBase[4];
|
||||
unsigned char f_caux[4];
|
||||
unsigned char f_rfdBase[4];
|
||||
unsigned char f_crfd[4];
|
||||
unsigned char f_bits1[1];
|
||||
unsigned char f_bits2[3];
|
||||
unsigned char f_padding[4];
|
||||
};
|
||||
|
||||
#define FDR_BITS1_LANG_BIG 0xF8
|
||||
#define FDR_BITS1_LANG_SH_BIG 3
|
||||
#define FDR_BITS1_LANG_LITTLE 0x1F
|
||||
#define FDR_BITS1_LANG_SH_LITTLE 0
|
||||
|
||||
#define FDR_BITS1_FMERGE_BIG 0x04
|
||||
#define FDR_BITS1_FMERGE_LITTLE 0x20
|
||||
|
||||
#define FDR_BITS1_FREADIN_BIG 0x02
|
||||
#define FDR_BITS1_FREADIN_LITTLE 0x40
|
||||
|
||||
#define FDR_BITS1_FBIGENDIAN_BIG 0x01
|
||||
#define FDR_BITS1_FBIGENDIAN_LITTLE 0x80
|
||||
|
||||
#define FDR_BITS2_GLEVEL_BIG 0xC0
|
||||
#define FDR_BITS2_GLEVEL_SH_BIG 6
|
||||
#define FDR_BITS2_GLEVEL_LITTLE 0x03
|
||||
#define FDR_BITS2_GLEVEL_SH_LITTLE 0
|
||||
|
||||
/* We ignore the `reserved' field in bits2. */
|
||||
|
||||
/* Procedure descriptor external record */
|
||||
|
||||
struct pdr_ext {
|
||||
unsigned char p_adr[8];
|
||||
unsigned char p_cbLineOffset[8];
|
||||
unsigned char p_isym[4];
|
||||
unsigned char p_iline[4];
|
||||
unsigned char p_regmask[4];
|
||||
unsigned char p_regoffset[4];
|
||||
unsigned char p_iopt[4];
|
||||
unsigned char p_fregmask[4];
|
||||
unsigned char p_fregoffset[4];
|
||||
unsigned char p_frameoffset[4];
|
||||
unsigned char p_lnLow[4];
|
||||
unsigned char p_lnHigh[4];
|
||||
unsigned char p_gp_prologue[1];
|
||||
unsigned char p_bits1[1];
|
||||
unsigned char p_bits2[1];
|
||||
unsigned char p_localoff[1];
|
||||
unsigned char p_framereg[2];
|
||||
unsigned char p_pcreg[2];
|
||||
};
|
||||
|
||||
#define PDR_BITS1_GP_USED_BIG 0x80
|
||||
#define PDR_BITS1_REG_FRAME_BIG 0x40
|
||||
#define PDR_BITS1_PROF_BIG 0x20
|
||||
#define PDR_BITS1_RESERVED_BIG 0x1f
|
||||
#define PDR_BITS1_RESERVED_SH_LEFT_BIG 8
|
||||
#define PDR_BITS2_RESERVED_BIG 0xff
|
||||
#define PDR_BITS2_RESERVED_SH_BIG 0
|
||||
|
||||
#define PDR_BITS1_GP_USED_LITTLE 0x01
|
||||
#define PDR_BITS1_REG_FRAME_LITTLE 0x02
|
||||
#define PDR_BITS1_PROF_LITTLE 0x04
|
||||
#define PDR_BITS1_RESERVED_LITTLE 0xf8
|
||||
#define PDR_BITS1_RESERVED_SH_LITTLE 3
|
||||
#define PDR_BITS2_RESERVED_LITTLE 0xff
|
||||
#define PDR_BITS2_RESERVED_SH_LEFT_LITTLE 5
|
||||
|
||||
/* Line numbers */
|
||||
|
||||
struct line_ext {
|
||||
unsigned char l_line[4];
|
||||
};
|
||||
|
||||
/* Symbol external record */
|
||||
|
||||
struct sym_ext {
|
||||
unsigned char s_value[8];
|
||||
unsigned char s_iss[4];
|
||||
unsigned char s_bits1[1];
|
||||
unsigned char s_bits2[1];
|
||||
unsigned char s_bits3[1];
|
||||
unsigned char s_bits4[1];
|
||||
};
|
||||
|
||||
#define SYM_BITS1_ST_BIG 0xFC
|
||||
#define SYM_BITS1_ST_SH_BIG 2
|
||||
#define SYM_BITS1_ST_LITTLE 0x3F
|
||||
#define SYM_BITS1_ST_SH_LITTLE 0
|
||||
|
||||
#define SYM_BITS1_SC_BIG 0x03
|
||||
#define SYM_BITS1_SC_SH_LEFT_BIG 3
|
||||
#define SYM_BITS1_SC_LITTLE 0xC0
|
||||
#define SYM_BITS1_SC_SH_LITTLE 6
|
||||
|
||||
#define SYM_BITS2_SC_BIG 0xE0
|
||||
#define SYM_BITS2_SC_SH_BIG 5
|
||||
#define SYM_BITS2_SC_LITTLE 0x07
|
||||
#define SYM_BITS2_SC_SH_LEFT_LITTLE 2
|
||||
|
||||
#define SYM_BITS2_RESERVED_BIG 0x10
|
||||
#define SYM_BITS2_RESERVED_LITTLE 0x08
|
||||
|
||||
#define SYM_BITS2_INDEX_BIG 0x0F
|
||||
#define SYM_BITS2_INDEX_SH_LEFT_BIG 16
|
||||
#define SYM_BITS2_INDEX_LITTLE 0xF0
|
||||
#define SYM_BITS2_INDEX_SH_LITTLE 4
|
||||
|
||||
#define SYM_BITS3_INDEX_SH_LEFT_BIG 8
|
||||
#define SYM_BITS3_INDEX_SH_LEFT_LITTLE 4
|
||||
|
||||
#define SYM_BITS4_INDEX_SH_LEFT_BIG 0
|
||||
#define SYM_BITS4_INDEX_SH_LEFT_LITTLE 12
|
||||
|
||||
/* External symbol external record */
|
||||
|
||||
struct ext_ext {
|
||||
struct sym_ext es_asym;
|
||||
unsigned char es_bits1[1];
|
||||
unsigned char es_bits2[3];
|
||||
unsigned char es_ifd[4];
|
||||
};
|
||||
|
||||
#define EXT_BITS1_JMPTBL_BIG 0x80
|
||||
#define EXT_BITS1_JMPTBL_LITTLE 0x01
|
||||
|
||||
#define EXT_BITS1_COBOL_MAIN_BIG 0x40
|
||||
#define EXT_BITS1_COBOL_MAIN_LITTLE 0x02
|
||||
|
||||
#define EXT_BITS1_WEAKEXT_BIG 0x20
|
||||
#define EXT_BITS1_WEAKEXT_LITTLE 0x04
|
||||
|
||||
/* Dense numbers external record */
|
||||
|
||||
struct dnr_ext {
|
||||
unsigned char d_rfd[4];
|
||||
unsigned char d_index[4];
|
||||
};
|
||||
|
||||
/* Relative file descriptor */
|
||||
|
||||
struct rfd_ext {
|
||||
unsigned char rfd[4];
|
||||
};
|
||||
|
||||
/* Optimizer symbol external record */
|
||||
|
||||
struct opt_ext {
|
||||
unsigned char o_bits1[1];
|
||||
unsigned char o_bits2[1];
|
||||
unsigned char o_bits3[1];
|
||||
unsigned char o_bits4[1];
|
||||
struct rndx_ext o_rndx;
|
||||
unsigned char o_offset[4];
|
||||
};
|
||||
|
||||
#define OPT_BITS2_VALUE_SH_LEFT_BIG 16
|
||||
#define OPT_BITS2_VALUE_SH_LEFT_LITTLE 0
|
||||
|
||||
#define OPT_BITS3_VALUE_SH_LEFT_BIG 8
|
||||
#define OPT_BITS3_VALUE_SH_LEFT_LITTLE 8
|
||||
|
||||
#define OPT_BITS4_VALUE_SH_LEFT_BIG 0
|
||||
#define OPT_BITS4_VALUE_SH_LEFT_LITTLE 16
|
125
include/coff/apollo.h
Normal file
125
include/coff/apollo.h
Normal file
@ -0,0 +1,125 @@
|
||||
/* coff information for Apollo M68K
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define DO_NOT_DEFINE_AOUTHDR
|
||||
#define L_LNNO_SIZE 2
|
||||
#include "coff/external.h"
|
||||
|
||||
/* Motorola 68000/68008/68010/68020 */
|
||||
#define MC68MAGIC 0520
|
||||
#define MC68KWRMAGIC 0520 /* writeable text segments */
|
||||
#define MC68TVMAGIC 0521
|
||||
#define MC68KROMAGIC 0521 /* readonly shareable text segments */
|
||||
#define MC68KPGMAGIC 0522 /* demand paged text segments */
|
||||
#define M68MAGIC 0210
|
||||
#define M68TVMAGIC 0211
|
||||
|
||||
/* Apollo 68000-based machines have a different magic number. This comes
|
||||
* from /usr/include/apollo/filehdr.h
|
||||
*/
|
||||
#define APOLLOM68KMAGIC 0627
|
||||
|
||||
#define OMAGIC M68MAGIC
|
||||
#define M68KBADMAG(x) (((x).f_magic!=MC68MAGIC) && ((x).f_magic!=MC68KWRMAGIC) && ((x).f_magic!=MC68TVMAGIC) && \
|
||||
((x).f_magic!=MC68KROMAGIC) && ((x).f_magic!=MC68KPGMAGIC) && ((x).f_magic!=M68MAGIC) && ((x).f_magic!=M68TVMAGIC) && \
|
||||
((x).f_magic!=APOLLOM68KMAGIC) )
|
||||
|
||||
/********************** AOUT "OPTIONAL HEADER" **********************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char magic[2]; /* type of file */
|
||||
char vstamp[2]; /* version stamp */
|
||||
char tsize[4]; /* text size in bytes, padded to FW bdry*/
|
||||
char dsize[4]; /* initialized data " " */
|
||||
char bsize[4]; /* uninitialized data " " */
|
||||
char entry[4]; /* entry pt. */
|
||||
char text_start[4]; /* base of text used for this file */
|
||||
char data_start[4]; /* base of data used for this file */
|
||||
char o_sri[4]; /* Apollo specific - .sri data pointer */
|
||||
char o_inlib[4]; /* Apollo specific - .inlib data pointer */
|
||||
char vid[8]; /* Apollo specific - 64 bit version ID */
|
||||
}
|
||||
AOUTHDR;
|
||||
|
||||
#define APOLLO_COFF_VERSION_NUMBER 1 /* the value of the aouthdr magic */
|
||||
#define AOUTHDRSZ 44
|
||||
#define AOUTSZ 44
|
||||
|
||||
/* Apollo allowa for larger section names by allowing
|
||||
them to be in the string table. */
|
||||
|
||||
/* If s_zeores is all zeroes, s_offset gives the real
|
||||
location of the name in the string table. */
|
||||
|
||||
#define s_zeroes section_name.s_name
|
||||
#define s_offset (section_name.s_name+4)
|
||||
|
||||
/* More names of "special" sections. */
|
||||
#define _TV ".tv"
|
||||
#define _INIT ".init"
|
||||
#define _FINI ".fini"
|
||||
#define _LINES ".lines"
|
||||
#define _BLOCKS ".blocks"
|
||||
#define _SRI ".sri" /* Static Resource Information (systype,
|
||||
et al.) */
|
||||
#define _MIR ".mir" /* Module Information Records */
|
||||
#define _APTV ".aptv" /* Apollo-style transfer vectors. */
|
||||
#define _INLIB ".inlib" /* Shared Library information */
|
||||
#define _RWDI ".rwdi" /* Read/write data initialization directives for
|
||||
compressed sections */
|
||||
#define _UNWIND ".unwind" /* Stack unwind information */
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
#ifdef M68K_COFF_OFFSET
|
||||
char r_offset[4];
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
|
||||
#ifdef M68K_COFF_OFFSET
|
||||
#define RELSZ 14
|
||||
#else
|
||||
#define RELSZ 10
|
||||
#endif
|
||||
|
||||
/* Apollo specific STYP flags */
|
||||
|
||||
#define STYP_RELOCATED_NOT_LOADED 0x00010000 /* Section is relocated normally during linking, but need
|
||||
not be loaded during program execution */
|
||||
#define STYP_DEBUG 0x00020000 /* debug section */
|
||||
#define STYP_OVERLAY 0x00040000 /* Section is overlayed */
|
||||
#define STYP_INSTRUCTION 0x00200000 /* Section contains executable code */
|
||||
|
||||
#define STYP_ZERO 0x00800000 /* Section is initialized to zero */
|
||||
#define STYP_INSTALLED 0x02000000 /* Section should be installable in KGT */
|
||||
#define STYP_LOOK_INSTALLED 0x04000000 /* Look for section in KGT */
|
||||
#define STYP_SECALIGN1 0x08000000 /* Specially aligned section */
|
||||
#define STYP_SECALIGN2 0x10000000 /* " " " */
|
||||
#define STYP_COMPRESSED 0x20000000 /* No section data per se (s_scnptr = 0), but there are
|
||||
initialization directives for it in .rwdi section
|
||||
(used in conjunction with STYP_BSS) */
|
130
include/coff/arm.h
Normal file
130
include/coff/arm.h
Normal file
@ -0,0 +1,130 @@
|
||||
/* ARM COFF support for BFD.
|
||||
Copyright 1998, 1999, 2000, 2002, 2003, 2010, 2013
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#define COFFARM 1
|
||||
|
||||
#define L_LNNO_SIZE 2
|
||||
#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
||||
#include "coff/external.h"
|
||||
|
||||
/* Bits for f_flags:
|
||||
F_RELFLG relocation info stripped from file
|
||||
F_EXEC file is executable (no unresolved external references)
|
||||
F_LNNO line numbers stripped from file
|
||||
F_LSYMS local symbols stripped from file
|
||||
F_INTERWORK file supports switching between ARM and Thumb instruction sets
|
||||
F_INTERWORK_SET the F_INTERWORK bit is valid
|
||||
F_APCS_FLOAT code passes float arguments in float registers
|
||||
F_PIC code is reentrant/position-independent
|
||||
F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax)
|
||||
F_APCS_26 file uses 26 bit ARM Procedure Calling Standard
|
||||
F_APCS_SET the F_APCS_26, F_APCS_FLOAT and F_PIC bits have been initialised
|
||||
F_SOFT_FLOAT code does not use floating point instructions. */
|
||||
|
||||
#define F_RELFLG (0x0001)
|
||||
#define F_EXEC (0x0002)
|
||||
#define F_LNNO (0x0004)
|
||||
#define F_LSYMS (0x0008)
|
||||
#define F_INTERWORK (0x0010)
|
||||
#define F_INTERWORK_SET (0x0020)
|
||||
#define F_APCS_FLOAT (0x0040)
|
||||
#undef F_AR16WR
|
||||
#define F_PIC (0x0080)
|
||||
#define F_AR32WR (0x0100)
|
||||
#define F_APCS_26 (0x0400)
|
||||
#define F_APCS_SET (0x0800)
|
||||
#define F_SOFT_FLOAT (0x2000)
|
||||
#define F_VFP_FLOAT (0x4000)
|
||||
|
||||
/* Bits stored in flags field of the internal_f structure */
|
||||
|
||||
#define F_INTERWORK (0x0010)
|
||||
#define F_APCS_FLOAT (0x0040)
|
||||
#define F_PIC (0x0080)
|
||||
#define F_APCS26 (0x1000)
|
||||
#define F_ARM_ARCHITECTURE_MASK (0x4000+0x0800+0x0400)
|
||||
#define F_ARM_2 (0x0400)
|
||||
#define F_ARM_2a (0x0800)
|
||||
#define F_ARM_3 (0x0c00)
|
||||
#define F_ARM_3M (0x4000)
|
||||
#define F_ARM_4 (0x4400)
|
||||
#define F_ARM_4T (0x4800)
|
||||
#define F_ARM_5 (0x4c00)
|
||||
|
||||
/*
|
||||
ARMMAGIC ought to encoded the procesor type,
|
||||
but it is too late to change it now, instead
|
||||
the flags field of the internal_f structure
|
||||
is used as shown above.
|
||||
|
||||
XXX - NC 5/6/97. */
|
||||
|
||||
#define ARMMAGIC 0xa00 /* I just made this up */
|
||||
|
||||
#define ARMBADMAG(x) (((x).f_magic != ARMMAGIC))
|
||||
|
||||
#define ARMPEMAGIC 0x1c0
|
||||
#define THUMBPEMAGIC 0x1c2
|
||||
#define ARMV7PEMAGIC 0x1c4
|
||||
|
||||
#undef ARMBADMAG
|
||||
#define ARMBADMAG(x) (((x).f_magic != ARMMAGIC) && ((x).f_magic != ARMPEMAGIC) && ((x).f_magic != THUMBPEMAGIC) && ((x).f_magic != ARMV7PEMAGIC))
|
||||
|
||||
#define OMAGIC 0404 /* object files, eg as output */
|
||||
#define ZMAGIC 0413 /* demand load format, eg normal ld output */
|
||||
#define STMAGIC 0401 /* target shlib */
|
||||
#define SHMAGIC 0443 /* host shlib */
|
||||
|
||||
/* define some NT default values */
|
||||
/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
|
||||
#define NT_SECTION_ALIGNMENT 0x1000
|
||||
#define NT_FILE_ALIGNMENT 0x200
|
||||
#define NT_DEF_RESERVE 0x100000
|
||||
#define NT_DEF_COMMIT 0x1000
|
||||
|
||||
/* We use the .rdata section to hold read only data. */
|
||||
#define _LIT ".rdata"
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
#ifdef ARM_WINCE
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10
|
||||
|
||||
#else
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
char r_offset[4];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 14
|
||||
#endif
|
||||
|
||||
#define ARM_NOTE_SECTION ".note"
|
49
include/coff/aux-coff.h
Normal file
49
include/coff/aux-coff.h
Normal file
@ -0,0 +1,49 @@
|
||||
/* Modifications of internal.h and m68k.h needed by A/UX
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA.
|
||||
|
||||
Suggested by Ian Lance Taylor <ian@cygnus.com> */
|
||||
|
||||
#ifndef GNU_COFF_AUX_H
|
||||
#define GNU_COFF_AUX_H 1
|
||||
|
||||
#include "coff/internal.h"
|
||||
#include "coff/m68k.h"
|
||||
|
||||
/* Section contains 64-byte padded pathnames of shared libraries */
|
||||
#undef STYP_LIB
|
||||
#define STYP_LIB 0x200
|
||||
|
||||
/* Section contains shared library initialization code */
|
||||
#undef STYP_INIT
|
||||
#define STYP_INIT 0x400
|
||||
|
||||
/* Section contains .ident information */
|
||||
#undef STYP_IDENT
|
||||
#define STYP_IDENT 0x800
|
||||
|
||||
/* Section types used by bfd and gas not defined (directly) by A/UX */
|
||||
#undef STYP_OVER
|
||||
#define STYP_OVER 0
|
||||
#undef STYP_INFO
|
||||
#define STYP_INFO STYP_IDENT
|
||||
|
||||
/* Traditional name of the section tagged with STYP_LIB */
|
||||
#define _LIB ".lib"
|
||||
|
||||
#endif /* GNU_COFF_AUX_H */
|
411
include/coff/ecoff.h
Normal file
411
include/coff/ecoff.h
Normal file
@ -0,0 +1,411 @@
|
||||
/* Generic ECOFF support.
|
||||
This does not include symbol information, found in sym.h and
|
||||
symconst.h.
|
||||
|
||||
Copyright 2001, 2002, 2003, 2004, 2005, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef ECOFF_H
|
||||
#define ECOFF_H
|
||||
|
||||
/* Mips magic numbers used in filehdr. MIPS_MAGIC_LITTLE is used on
|
||||
little endian machines. MIPS_MAGIC_BIG is used on big endian
|
||||
machines. Where is MIPS_MAGIC_1 from? */
|
||||
#define MIPS_MAGIC_1 0x0180
|
||||
#define MIPS_MAGIC_LITTLE 0x0162
|
||||
#define MIPS_MAGIC_BIG 0x0160
|
||||
|
||||
/* These are the magic numbers used for MIPS code compiled at ISA
|
||||
level 2. */
|
||||
#define MIPS_MAGIC_LITTLE2 0x0166
|
||||
#define MIPS_MAGIC_BIG2 0x0163
|
||||
|
||||
/* These are the magic numbers used for MIPS code compiled at ISA
|
||||
level 3. */
|
||||
#define MIPS_MAGIC_LITTLE3 0x142
|
||||
#define MIPS_MAGIC_BIG3 0x140
|
||||
|
||||
/* Alpha magic numbers used in filehdr. */
|
||||
#define ALPHA_MAGIC 0x183
|
||||
#define ALPHA_MAGIC_BSD 0x185
|
||||
/* A compressed version of an ALPHA_MAGIC file created by DEC's tools. */
|
||||
#define ALPHA_MAGIC_COMPRESSED 0x188
|
||||
|
||||
/* Magic numbers used in a.out header. */
|
||||
#define ECOFF_AOUT_OMAGIC 0407 /* not demand paged (ld -N). */
|
||||
#define ECOFF_AOUT_ZMAGIC 0413 /* demand load format, eg normal ld output */
|
||||
|
||||
/* Names of special sections. */
|
||||
#define _TEXT ".text"
|
||||
#define _DATA ".data"
|
||||
#define _BSS ".bss"
|
||||
#define _RDATA ".rdata"
|
||||
#define _SDATA ".sdata"
|
||||
#define _SBSS ".sbss"
|
||||
#define _LITA ".lita"
|
||||
#define _LIT4 ".lit4"
|
||||
#define _LIT8 ".lit8"
|
||||
#define _LIB ".lib"
|
||||
#define _INIT ".init"
|
||||
#define _FINI ".fini"
|
||||
#define _PDATA ".pdata"
|
||||
#define _XDATA ".xdata"
|
||||
#define _GOT ".got"
|
||||
#define _HASH ".hash"
|
||||
#define _DYNSYM ".dynsym"
|
||||
#define _DYNSTR ".dynstr"
|
||||
#define _RELDYN ".rel.dyn"
|
||||
#define _CONFLIC ".conflic"
|
||||
#define _COMMENT ".comment"
|
||||
#define _LIBLIST ".liblist"
|
||||
#define _DYNAMIC ".dynamic"
|
||||
#define _RCONST ".rconst"
|
||||
|
||||
/* ECOFF uses some additional section flags. */
|
||||
#define STYP_RDATA 0x100
|
||||
#define STYP_SDATA 0x200
|
||||
#define STYP_SBSS 0x400
|
||||
#define STYP_GOT 0x1000
|
||||
#define STYP_DYNAMIC 0x2000
|
||||
#define STYP_DYNSYM 0x4000
|
||||
#define STYP_RELDYN 0x8000
|
||||
#define STYP_DYNSTR 0x10000
|
||||
#define STYP_HASH 0x20000
|
||||
#define STYP_LIBLIST 0x40000
|
||||
#define STYP_CONFLIC 0x100000
|
||||
#define STYP_ECOFF_FINI 0x1000000
|
||||
#define STYP_EXTENDESC 0x2000000 /* 0x02FFF000 bits => scn type, rest clr */
|
||||
#define STYP_LITA 0x4000000
|
||||
#define STYP_LIT8 0x8000000
|
||||
#define STYP_LIT4 0x10000000
|
||||
#define STYP_ECOFF_LIB 0x40000000
|
||||
#define STYP_ECOFF_INIT 0x80000000
|
||||
#define STYP_OTHER_LOAD (STYP_ECOFF_INIT | STYP_ECOFF_FINI)
|
||||
|
||||
/* extended section types */
|
||||
#define STYP_COMMENT 0x2100000
|
||||
#define STYP_RCONST 0x2200000
|
||||
#define STYP_XDATA 0x2400000
|
||||
#define STYP_PDATA 0x2800000
|
||||
|
||||
/* The linker needs a section to hold small common variables while
|
||||
linking. There is no convenient way to create it when the linker
|
||||
needs it, so we always create one for each BFD. We then avoid
|
||||
writing it out. */
|
||||
#define SCOMMON ".scommon"
|
||||
|
||||
/* If the extern bit in a reloc is 1, then r_symndx is an index into
|
||||
the external symbol table. If the extern bit is 0, then r_symndx
|
||||
indicates a section, and is one of the following values. */
|
||||
#define RELOC_SECTION_NONE 0
|
||||
#define RELOC_SECTION_TEXT 1
|
||||
#define RELOC_SECTION_RDATA 2
|
||||
#define RELOC_SECTION_DATA 3
|
||||
#define RELOC_SECTION_SDATA 4
|
||||
#define RELOC_SECTION_SBSS 5
|
||||
#define RELOC_SECTION_BSS 6
|
||||
#define RELOC_SECTION_INIT 7
|
||||
#define RELOC_SECTION_LIT8 8
|
||||
#define RELOC_SECTION_LIT4 9
|
||||
#define RELOC_SECTION_XDATA 10
|
||||
#define RELOC_SECTION_PDATA 11
|
||||
#define RELOC_SECTION_FINI 12
|
||||
#define RELOC_SECTION_LITA 13
|
||||
#define RELOC_SECTION_ABS 14
|
||||
#define RELOC_SECTION_RCONST 15
|
||||
|
||||
#define NUM_RELOC_SECTIONS 16
|
||||
|
||||
/********************** STABS **********************/
|
||||
|
||||
/* gcc uses mips-tfile to output type information in special stabs
|
||||
entries. These must match the corresponding definition in
|
||||
gcc/config/mips.h. At some point, these should probably go into a
|
||||
shared include file, but currently gcc and gdb do not share any
|
||||
directories. */
|
||||
#define CODE_MASK 0x8F300
|
||||
#define ECOFF_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK)
|
||||
#define ECOFF_MARK_STAB(code) ((code)+CODE_MASK)
|
||||
#define ECOFF_UNMARK_STAB(code) ((code)-CODE_MASK)
|
||||
#define STABS_SYMBOL "@stabs"
|
||||
|
||||
/********************** COFF **********************/
|
||||
|
||||
/* gcc also uses mips-tfile to output COFF debugging information.
|
||||
These are the values it uses when outputting the .type directive.
|
||||
These should also be in a shared include file. */
|
||||
#define N_BTMASK (017)
|
||||
#define N_TMASK (060)
|
||||
#define N_BTSHFT (4)
|
||||
#define N_TSHIFT (2)
|
||||
|
||||
/********************** AUX **********************/
|
||||
|
||||
/* The auxiliary type information is the same on all known ECOFF
|
||||
targets. I can't see any reason that it would ever change, so I am
|
||||
going to gamble and define the external structures here, in the
|
||||
target independent ECOFF header file. The internal forms are
|
||||
defined in coff/sym.h, which was originally donated by MIPS
|
||||
Computer Systems. */
|
||||
|
||||
/* Type information external record */
|
||||
|
||||
struct tir_ext {
|
||||
unsigned char t_bits1[1];
|
||||
unsigned char t_tq45[1];
|
||||
unsigned char t_tq01[1];
|
||||
unsigned char t_tq23[1];
|
||||
};
|
||||
|
||||
#define TIR_BITS1_FBITFIELD_BIG ((unsigned int) 0x80)
|
||||
#define TIR_BITS1_FBITFIELD_LITTLE ((unsigned int) 0x01)
|
||||
|
||||
#define TIR_BITS1_CONTINUED_BIG ((unsigned int) 0x40)
|
||||
#define TIR_BITS1_CONTINUED_LITTLE ((unsigned int) 0x02)
|
||||
|
||||
#define TIR_BITS1_BT_BIG ((unsigned int) 0x3F)
|
||||
#define TIR_BITS1_BT_SH_BIG 0
|
||||
#define TIR_BITS1_BT_LITTLE ((unsigned int) 0xFC)
|
||||
#define TIR_BITS1_BT_SH_LITTLE 2
|
||||
|
||||
#define TIR_BITS_TQ4_BIG ((unsigned int) 0xF0)
|
||||
#define TIR_BITS_TQ4_SH_BIG 4
|
||||
#define TIR_BITS_TQ5_BIG ((unsigned int) 0x0F)
|
||||
#define TIR_BITS_TQ5_SH_BIG 0
|
||||
#define TIR_BITS_TQ4_LITTLE ((unsigned int) 0x0F)
|
||||
#define TIR_BITS_TQ4_SH_LITTLE 0
|
||||
#define TIR_BITS_TQ5_LITTLE ((unsigned int) 0xF0)
|
||||
#define TIR_BITS_TQ5_SH_LITTLE 4
|
||||
|
||||
#define TIR_BITS_TQ0_BIG ((unsigned int) 0xF0)
|
||||
#define TIR_BITS_TQ0_SH_BIG 4
|
||||
#define TIR_BITS_TQ1_BIG ((unsigned int) 0x0F)
|
||||
#define TIR_BITS_TQ1_SH_BIG 0
|
||||
#define TIR_BITS_TQ0_LITTLE ((unsigned int) 0x0F)
|
||||
#define TIR_BITS_TQ0_SH_LITTLE 0
|
||||
#define TIR_BITS_TQ1_LITTLE ((unsigned int) 0xF0)
|
||||
#define TIR_BITS_TQ1_SH_LITTLE 4
|
||||
|
||||
#define TIR_BITS_TQ2_BIG ((unsigned int) 0xF0)
|
||||
#define TIR_BITS_TQ2_SH_BIG 4
|
||||
#define TIR_BITS_TQ3_BIG ((unsigned int) 0x0F)
|
||||
#define TIR_BITS_TQ3_SH_BIG 0
|
||||
#define TIR_BITS_TQ2_LITTLE ((unsigned int) 0x0F)
|
||||
#define TIR_BITS_TQ2_SH_LITTLE 0
|
||||
#define TIR_BITS_TQ3_LITTLE ((unsigned int) 0xF0)
|
||||
#define TIR_BITS_TQ3_SH_LITTLE 4
|
||||
|
||||
/* Relative symbol external record */
|
||||
|
||||
struct rndx_ext {
|
||||
unsigned char r_bits[4];
|
||||
};
|
||||
|
||||
#define RNDX_BITS0_RFD_SH_LEFT_BIG 4
|
||||
#define RNDX_BITS1_RFD_BIG ((unsigned int) 0xF0)
|
||||
#define RNDX_BITS1_RFD_SH_BIG 4
|
||||
|
||||
#define RNDX_BITS0_RFD_SH_LEFT_LITTLE 0
|
||||
#define RNDX_BITS1_RFD_LITTLE ((unsigned int) 0x0F)
|
||||
#define RNDX_BITS1_RFD_SH_LEFT_LITTLE 8
|
||||
|
||||
#define RNDX_BITS1_INDEX_BIG ((unsigned int) 0x0F)
|
||||
#define RNDX_BITS1_INDEX_SH_LEFT_BIG 16
|
||||
#define RNDX_BITS2_INDEX_SH_LEFT_BIG 8
|
||||
#define RNDX_BITS3_INDEX_SH_LEFT_BIG 0
|
||||
|
||||
#define RNDX_BITS1_INDEX_LITTLE ((unsigned int) 0xF0)
|
||||
#define RNDX_BITS1_INDEX_SH_LITTLE 4
|
||||
#define RNDX_BITS2_INDEX_SH_LEFT_LITTLE 4
|
||||
#define RNDX_BITS3_INDEX_SH_LEFT_LITTLE 12
|
||||
|
||||
/* Auxiliary symbol information external record */
|
||||
|
||||
union aux_ext {
|
||||
struct tir_ext a_ti;
|
||||
struct rndx_ext a_rndx;
|
||||
unsigned char a_dnLow[4];
|
||||
unsigned char a_dnHigh[4];
|
||||
unsigned char a_isym[4];
|
||||
unsigned char a_iss[4];
|
||||
unsigned char a_width[4];
|
||||
unsigned char a_count[4];
|
||||
};
|
||||
|
||||
#define AUX_GET_ANY(bigend, ax, field) \
|
||||
((bigend) ? bfd_getb32 ((ax)->field) : bfd_getl32 ((ax)->field))
|
||||
|
||||
#define AUX_GET_DNLOW(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_dnLow)
|
||||
#define AUX_GET_DNHIGH(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_dnHigh)
|
||||
#define AUX_GET_ISYM(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_isym)
|
||||
#define AUX_GET_ISS(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_iss)
|
||||
#define AUX_GET_WIDTH(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_width)
|
||||
#define AUX_GET_COUNT(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_count)
|
||||
|
||||
#define AUX_PUT_ANY(bigend, val, ax, field) \
|
||||
((bigend) \
|
||||
? (bfd_putb32 ((bfd_vma) (val), (ax)->field), 0) \
|
||||
: (bfd_putl32 ((bfd_vma) (val), (ax)->field), 0))
|
||||
|
||||
#define AUX_PUT_DNLOW(bigend, val, ax) \
|
||||
AUX_PUT_ANY ((bigend), (val), (ax), a_dnLow)
|
||||
#define AUX_PUT_DNHIGH(bigend, val, ax) \
|
||||
AUX_PUT_ANY ((bigend), (val), (ax), a_dnHigh)
|
||||
#define AUX_PUT_ISYM(bigend, val, ax) \
|
||||
AUX_PUT_ANY ((bigend), (val), (ax), a_isym)
|
||||
#define AUX_PUT_ISS(bigend, val, ax) \
|
||||
AUX_PUT_ANY ((bigend), (val), (ax), a_iss)
|
||||
#define AUX_PUT_WIDTH(bigend, val, ax) \
|
||||
AUX_PUT_ANY ((bigend), (val), (ax), a_width)
|
||||
#define AUX_PUT_COUNT(bigend, val, ax) \
|
||||
AUX_PUT_ANY ((bigend), (val), (ax), a_count)
|
||||
|
||||
/********************** SYMBOLS **********************/
|
||||
|
||||
/* For efficiency, gdb deals directly with the unswapped symbolic
|
||||
information (that way it only takes the time to swap information
|
||||
that it really needs to read). gdb originally retrieved the
|
||||
information directly from the BFD backend information, but that
|
||||
strategy, besides being sort of ugly, does not work for MIPS ELF,
|
||||
which also uses ECOFF debugging information. This structure holds
|
||||
pointers to the (mostly) unswapped symbolic information. */
|
||||
|
||||
struct ecoff_debug_info
|
||||
{
|
||||
/* The swapped ECOFF symbolic header. */
|
||||
HDRR symbolic_header;
|
||||
|
||||
/* Pointers to the unswapped symbolic information. Note that the
|
||||
pointers to external structures point to different sorts of
|
||||
information on different ECOFF targets. The ecoff_debug_swap
|
||||
structure provides the sizes of the structures and the functions
|
||||
needed to swap the information in and out. These pointers are
|
||||
all pointers to arrays, not single structures. They will be NULL
|
||||
if there are no instances of the relevant structure. These
|
||||
fields are also used by the assembler to output ECOFF debugging
|
||||
information. */
|
||||
unsigned char *line;
|
||||
void *external_dnr; /* struct dnr_ext */
|
||||
void *external_pdr; /* struct pdr_ext */
|
||||
void *external_sym; /* struct sym_ext */
|
||||
void *external_opt; /* struct opt_ext */
|
||||
union aux_ext *external_aux;
|
||||
char *ss;
|
||||
char *ssext;
|
||||
void *external_fdr; /* struct fdr_ext */
|
||||
void *external_rfd; /* struct rfd_ext */
|
||||
void *external_ext; /* struct ext_ext */
|
||||
|
||||
/* These fields are used when linking. They may disappear at some
|
||||
point. */
|
||||
char *ssext_end;
|
||||
void *external_ext_end;
|
||||
|
||||
/* When linking, this field holds a mapping from the input FDR
|
||||
numbers to the output numbers, and is used when writing out the
|
||||
external symbols. It is NULL if no mapping is required. */
|
||||
RFDT *ifdmap;
|
||||
|
||||
/* The swapped FDR information. Currently this is never NULL, but
|
||||
code using this structure should probably double-check in case
|
||||
this changes in the future. This is a pointer to an array, not a
|
||||
single structure. */
|
||||
FDR *fdr;
|
||||
};
|
||||
|
||||
/* These structures are used by the ECOFF find_nearest_line function. */
|
||||
|
||||
struct ecoff_fdrtab_entry
|
||||
{
|
||||
/* Base address in .text of this FDR. */
|
||||
bfd_vma base_addr;
|
||||
FDR *fdr;
|
||||
};
|
||||
|
||||
struct ecoff_find_line
|
||||
{
|
||||
/* Allocated memory to hold function and file names. */
|
||||
char *find_buffer;
|
||||
|
||||
/* FDR table, sorted by address: */
|
||||
long fdrtab_len;
|
||||
struct ecoff_fdrtab_entry *fdrtab;
|
||||
|
||||
/* Cache entry for most recently found line information. The sect
|
||||
field is NULL if this cache does not contain valid information. */
|
||||
struct
|
||||
{
|
||||
asection *sect;
|
||||
bfd_vma start;
|
||||
bfd_vma stop;
|
||||
const char *filename;
|
||||
const char *functionname;
|
||||
unsigned int line_num;
|
||||
} cache;
|
||||
};
|
||||
|
||||
/********************** SWAPPING **********************/
|
||||
|
||||
/* The generic ECOFF code needs to be able to swap debugging
|
||||
information in and out in the specific format used by a particular
|
||||
ECOFF implementation. This structure provides the information
|
||||
needed to do this. */
|
||||
|
||||
struct ecoff_debug_swap
|
||||
{
|
||||
/* Symbol table magic number. */
|
||||
int sym_magic;
|
||||
/* Alignment of debugging information. E.g., 4. */
|
||||
bfd_size_type debug_align;
|
||||
/* Sizes of external symbolic information. */
|
||||
bfd_size_type external_hdr_size;
|
||||
bfd_size_type external_dnr_size;
|
||||
bfd_size_type external_pdr_size;
|
||||
bfd_size_type external_sym_size;
|
||||
bfd_size_type external_opt_size;
|
||||
bfd_size_type external_fdr_size;
|
||||
bfd_size_type external_rfd_size;
|
||||
bfd_size_type external_ext_size;
|
||||
/* Functions to swap in external symbolic data. */
|
||||
void (*swap_hdr_in) (bfd *, void *, HDRR *);
|
||||
void (*swap_dnr_in) (bfd *, void *, DNR *);
|
||||
void (*swap_pdr_in) (bfd *, void *, PDR *);
|
||||
void (*swap_sym_in) (bfd *, void *, SYMR *);
|
||||
void (*swap_opt_in) (bfd *, void *, OPTR *);
|
||||
void (*swap_fdr_in) (bfd *, void *, FDR *);
|
||||
void (*swap_rfd_in) (bfd *, void *, RFDT *);
|
||||
void (*swap_ext_in) (bfd *, void *, EXTR *);
|
||||
void (*swap_tir_in) (int, const struct tir_ext *, TIR *);
|
||||
void (*swap_rndx_in) (int, const struct rndx_ext *, RNDXR *);
|
||||
/* Functions to swap out external symbolic data. */
|
||||
void (*swap_hdr_out) (bfd *, const HDRR *, void *);
|
||||
void (*swap_dnr_out) (bfd *, const DNR *, void *);
|
||||
void (*swap_pdr_out) (bfd *, const PDR *, void *);
|
||||
void (*swap_sym_out) (bfd *, const SYMR *, void *);
|
||||
void (*swap_opt_out) (bfd *, const OPTR *, void *);
|
||||
void (*swap_fdr_out) (bfd *, const FDR *, void *);
|
||||
void (*swap_rfd_out) (bfd *, const RFDT *, void *);
|
||||
void (*swap_ext_out) (bfd *, const EXTR *, void *);
|
||||
void (*swap_tir_out) (int, const TIR *, struct tir_ext *);
|
||||
void (*swap_rndx_out) (int, const RNDXR *, struct rndx_ext *);
|
||||
/* Function to read symbol data and set up pointers in
|
||||
ecoff_debug_info structure. The section argument is used for
|
||||
ELF, not straight ECOFF. */
|
||||
bfd_boolean (*read_debug_info) (bfd *, asection *, struct ecoff_debug_info *);
|
||||
};
|
||||
|
||||
#endif /* ! defined (ECOFF_H) */
|
269
include/coff/external.h
Normal file
269
include/coff/external.h
Normal file
@ -0,0 +1,269 @@
|
||||
/* external.h -- External COFF structures
|
||||
|
||||
Copyright 2001, 2006, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef COFF_EXTERNAL_H
|
||||
#define COFF_EXTERNAL_H
|
||||
|
||||
#ifndef DO_NOT_DEFINE_FILHDR
|
||||
/********************** FILE HEADER **********************/
|
||||
|
||||
struct external_filehdr
|
||||
{
|
||||
char f_magic[2]; /* magic number */
|
||||
char f_nscns[2]; /* number of sections */
|
||||
char f_timdat[4]; /* time & date stamp */
|
||||
char f_symptr[4]; /* file pointer to symtab */
|
||||
char f_nsyms[4]; /* number of symtab entries */
|
||||
char f_opthdr[2]; /* sizeof(optional hdr) */
|
||||
char f_flags[2]; /* flags */
|
||||
};
|
||||
|
||||
#define FILHDR struct external_filehdr
|
||||
#define FILHSZ 20
|
||||
#endif
|
||||
|
||||
#ifndef DO_NOT_DEFINE_AOUTHDR
|
||||
/********************** AOUT "OPTIONAL HEADER" **********************/
|
||||
|
||||
typedef struct external_aouthdr
|
||||
{
|
||||
char magic[2]; /* type of file */
|
||||
char vstamp[2]; /* version stamp */
|
||||
char tsize[4]; /* text size in bytes, padded to FW bdry*/
|
||||
char dsize[4]; /* initialized data " " */
|
||||
char bsize[4]; /* uninitialized data " " */
|
||||
char entry[4]; /* entry pt. */
|
||||
char text_start[4]; /* base of text used for this file */
|
||||
char data_start[4]; /* base of data used for this file */
|
||||
} ATTRIBUTE_PACKED
|
||||
AOUTHDR;
|
||||
|
||||
#define AOUTHDRSZ 28
|
||||
#define AOUTSZ 28
|
||||
|
||||
typedef struct external_aouthdr64
|
||||
{
|
||||
char magic[2]; /* Type of file. */
|
||||
char vstamp[2]; /* Version stamp. */
|
||||
char tsize[4]; /* Text size in bytes, padded to FW bdry*/
|
||||
char dsize[4]; /* Initialized data " ". */
|
||||
char bsize[4]; /* Uninitialized data " ". */
|
||||
char entry[4]; /* Entry pt. */
|
||||
char text_start[4]; /* Base of text used for this file. */
|
||||
}
|
||||
AOUTHDR64;
|
||||
#define AOUTHDRSZ64 24
|
||||
|
||||
#endif /* not DO_NOT_DEFINE_AOUTHDR */
|
||||
|
||||
#ifndef DO_NOT_DEFINE_SCNHDR
|
||||
/********************** SECTION HEADER **********************/
|
||||
|
||||
struct external_scnhdr
|
||||
{
|
||||
char s_name[8]; /* section name */
|
||||
char s_paddr[4]; /* physical address, aliased s_nlib */
|
||||
char s_vaddr[4]; /* virtual address */
|
||||
char s_size[4]; /* section size */
|
||||
char s_scnptr[4]; /* file ptr to raw data for section */
|
||||
char s_relptr[4]; /* file ptr to relocation */
|
||||
char s_lnnoptr[4]; /* file ptr to line numbers */
|
||||
char s_nreloc[2]; /* number of relocation entries */
|
||||
char s_nlnno[2]; /* number of line number entries */
|
||||
char s_flags[4]; /* flags */
|
||||
};
|
||||
|
||||
#define SCNHDR struct external_scnhdr
|
||||
#define SCNHSZ 40
|
||||
|
||||
/* Names of "special" sections. */
|
||||
|
||||
#define _TEXT ".text"
|
||||
#define _DATA ".data"
|
||||
#define _BSS ".bss"
|
||||
#define _COMMENT ".comment"
|
||||
#define _LIB ".lib"
|
||||
#endif /* not DO_NOT_DEFINE_SCNHDR */
|
||||
|
||||
#ifndef DO_NOT_DEFINE_LINENO
|
||||
|
||||
/********************** LINE NUMBERS **********************/
|
||||
|
||||
#ifndef L_LNNO_SIZE
|
||||
#error L_LNNO_SIZE needs to be defined
|
||||
#endif
|
||||
|
||||
/* 1 line number entry for every "breakpointable" source line in a section.
|
||||
Line numbers are grouped on a per function basis; first entry in a function
|
||||
grouping will have l_lnno = 0 and in place of physical address will be the
|
||||
symbol table index of the function name. */
|
||||
struct external_lineno
|
||||
{
|
||||
union
|
||||
{
|
||||
char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
|
||||
char l_paddr[4]; /* (physical) address of line number */
|
||||
} l_addr;
|
||||
|
||||
char l_lnno[L_LNNO_SIZE]; /* line number */
|
||||
};
|
||||
|
||||
#define LINENO struct external_lineno
|
||||
#define LINESZ (4 + L_LNNO_SIZE)
|
||||
|
||||
#if L_LNNO_SIZE == 4
|
||||
#define GET_LINENO_LNNO(abfd, ext) H_GET_32 (abfd, (ext->l_lnno))
|
||||
#define PUT_LINENO_LNNO(abfd, val, ext) H_PUT_32 (abfd, val, (ext->l_lnno))
|
||||
#endif
|
||||
#if L_LNNO_SIZE == 2
|
||||
#define GET_LINENO_LNNO(abfd, ext) H_GET_16 (abfd, (ext->l_lnno))
|
||||
#define PUT_LINENO_LNNO(abfd, val, ext) H_PUT_16 (abfd, val, (ext->l_lnno))
|
||||
#endif
|
||||
|
||||
#endif /* not DO_NOT_DEFINE_LINENO */
|
||||
|
||||
#ifndef DO_NOT_DEFINE_SYMENT
|
||||
/********************** SYMBOLS **********************/
|
||||
|
||||
#define E_SYMNMLEN 8 /* # characters in a symbol name */
|
||||
#ifndef E_FILNMLEN
|
||||
#define E_FILNMLEN 14
|
||||
#endif
|
||||
#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
|
||||
|
||||
struct external_syment
|
||||
{
|
||||
union
|
||||
{
|
||||
char e_name[E_SYMNMLEN];
|
||||
|
||||
struct
|
||||
{
|
||||
char e_zeroes[4];
|
||||
char e_offset[4];
|
||||
} e;
|
||||
} e;
|
||||
|
||||
char e_value[4];
|
||||
char e_scnum[2];
|
||||
char e_type[2];
|
||||
char e_sclass[1];
|
||||
char e_numaux[1];
|
||||
} ATTRIBUTE_PACKED ;
|
||||
|
||||
#define SYMENT struct external_syment
|
||||
#define SYMESZ 18
|
||||
|
||||
#ifndef N_BTMASK
|
||||
#define N_BTMASK 0xf
|
||||
#endif
|
||||
|
||||
#ifndef N_TMASK
|
||||
#define N_TMASK 0x30
|
||||
#endif
|
||||
|
||||
#ifndef N_BTSHFT
|
||||
#define N_BTSHFT 4
|
||||
#endif
|
||||
|
||||
#ifndef N_TSHIFT
|
||||
#define N_TSHIFT 2
|
||||
#endif
|
||||
|
||||
#endif /* not DO_NOT_DEFINE_SYMENT */
|
||||
|
||||
#ifndef DO_NOT_DEFINE_AUXENT
|
||||
|
||||
union external_auxent
|
||||
{
|
||||
struct
|
||||
{
|
||||
char x_tagndx[4]; /* str, un, or enum tag indx */
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
char x_lnno[2]; /* declaration line number */
|
||||
char x_size[2]; /* str/union/array size */
|
||||
} x_lnsz;
|
||||
|
||||
char x_fsize[4]; /* size of function */
|
||||
|
||||
} x_misc;
|
||||
|
||||
union
|
||||
{
|
||||
struct /* if ISFCN, tag, or .bb */
|
||||
{
|
||||
char x_lnnoptr[4]; /* ptr to fcn line # */
|
||||
char x_endndx[4]; /* entry ndx past block end */
|
||||
} x_fcn;
|
||||
|
||||
struct /* if ISARY, up to 4 dimen. */
|
||||
{
|
||||
char x_dimen[E_DIMNUM][2];
|
||||
} x_ary;
|
||||
|
||||
} x_fcnary;
|
||||
|
||||
char x_tvndx[2]; /* tv index */
|
||||
|
||||
} x_sym;
|
||||
|
||||
union
|
||||
{
|
||||
char x_fname[E_FILNMLEN];
|
||||
|
||||
struct
|
||||
{
|
||||
char x_zeroes[4];
|
||||
char x_offset[4];
|
||||
} x_n;
|
||||
|
||||
} x_file;
|
||||
|
||||
struct
|
||||
{
|
||||
char x_scnlen[4]; /* section length */
|
||||
char x_nreloc[2]; /* # relocation entries */
|
||||
char x_nlinno[2]; /* # line numbers */
|
||||
#ifdef INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
||||
char x_checksum[4]; /* section COMDAT checksum */
|
||||
char x_associated[2]; /* COMDAT associated section index */
|
||||
char x_comdat[1]; /* COMDAT selection number */
|
||||
#endif
|
||||
} x_scn;
|
||||
|
||||
struct
|
||||
{
|
||||
char x_tvfill[4]; /* tv fill value */
|
||||
char x_tvlen[2]; /* length of .tv */
|
||||
char x_tvran[2][2]; /* tv range */
|
||||
} x_tv; /* info about .tv section (in auxent of symbol .tv)) */
|
||||
} ATTRIBUTE_PACKED ;
|
||||
|
||||
#define AUXENT union external_auxent
|
||||
#define AUXESZ 18
|
||||
|
||||
#define _ETEXT "etext"
|
||||
|
||||
#endif /* not DO_NOT_DEFINE_AUXENT */
|
||||
|
||||
#endif /* COFF_EXTERNAL_H */
|
36
include/coff/go32exe.h
Normal file
36
include/coff/go32exe.h
Normal file
@ -0,0 +1,36 @@
|
||||
/* COFF information for PC running go32.
|
||||
|
||||
Copyright 2001, 2005, 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
struct external_filehdr_go32_exe
|
||||
{
|
||||
char stub[GO32_STUBSIZE]; /* the stub to load the image */
|
||||
/* the standard COFF header */
|
||||
char f_magic[2]; /* magic number */
|
||||
char f_nscns[2]; /* number of sections */
|
||||
char f_timdat[4]; /* time & date stamp */
|
||||
char f_symptr[4]; /* file pointer to symtab */
|
||||
char f_nsyms[4]; /* number of symtab entries */
|
||||
char f_opthdr[2]; /* sizeof(optional hdr) */
|
||||
char f_flags[2]; /* flags */
|
||||
};
|
||||
|
||||
#undef FILHDR
|
||||
#define FILHDR struct external_filehdr_go32_exe
|
||||
#undef FILHSZ
|
||||
#define FILHSZ GO32_STUBSIZE+20
|
55
include/coff/h8300.h
Normal file
55
include/coff/h8300.h
Normal file
@ -0,0 +1,55 @@
|
||||
/* coff information for Renesas H8/300 and H8/300-H
|
||||
|
||||
Copyright 2001, 2003, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define L_LNNO_SIZE 4
|
||||
#include "coff/external.h"
|
||||
|
||||
#define H8300MAGIC 0x8300
|
||||
#define H8300HMAGIC 0x8301
|
||||
#define H8300SMAGIC 0x8302
|
||||
#define H8300HNMAGIC 0x8303
|
||||
#define H8300SNMAGIC 0x8304
|
||||
|
||||
#define H8300BADMAG(x) (((x).f_magic != H8300MAGIC))
|
||||
#define H8300HBADMAG(x) (((x).f_magic != H8300HMAGIC))
|
||||
#define H8300SBADMAG(x) (((x).f_magic != H8300SMAGIC))
|
||||
#define H8300HNBADMAG(x) (((x).f_magic != H8300HNMAGIC))
|
||||
#define H8300SNBADMAG(x) (((x).f_magic != H8300SNMAGIC))
|
||||
|
||||
/* Relocation directives. */
|
||||
|
||||
/* The external reloc has an offset field, because some of the reloc
|
||||
types on the h8 don't have room in the instruction for the entire
|
||||
offset - eg the strange jump and high page addressing modes. */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_offset[4];
|
||||
char r_type[2];
|
||||
char r_stuff[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 16
|
||||
|
||||
|
||||
|
||||
|
47
include/coff/h8500.h
Normal file
47
include/coff/h8500.h
Normal file
@ -0,0 +1,47 @@
|
||||
/* coff information for Renesas H8/500
|
||||
|
||||
Copyright 2001, 2003, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define L_LNNO_SIZE 4
|
||||
#include "coff/external.h"
|
||||
|
||||
#define H8500MAGIC 0x8500
|
||||
|
||||
#define H8500BADMAG(x) ((0xffff && ((x).f_magic) != H8500MAGIC))
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
/* The external reloc has an offset field, because some of the reloc
|
||||
types on the h8 don't have room in the instruction for the entire
|
||||
offset - eg the strange jump and high page addressing modes. */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_offset[4];
|
||||
char r_type[2];
|
||||
char r_stuff[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 16
|
||||
|
||||
|
||||
|
||||
|
74
include/coff/i386.h
Normal file
74
include/coff/i386.h
Normal file
@ -0,0 +1,74 @@
|
||||
/* coff information for Intel 386/486.
|
||||
|
||||
Copyright 2001, 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define L_LNNO_SIZE 2
|
||||
#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
||||
#include "coff/external.h"
|
||||
|
||||
#define COFF_PAGE_SIZE 0x1000
|
||||
|
||||
/* Bits for f_flags:
|
||||
F_RELFLG Relocation info stripped from file
|
||||
F_EXEC File is executable (no unresolved external references)
|
||||
F_LNNO Line numbers stripped from file
|
||||
F_LSYMS Local symbols stripped from file
|
||||
F_AR32WR File has byte ordering of an AR32WR machine (e.g. vax). */
|
||||
|
||||
#define F_RELFLG (0x0001)
|
||||
#define F_EXEC (0x0002)
|
||||
#define F_LNNO (0x0004)
|
||||
#define F_LSYMS (0x0008)
|
||||
|
||||
#define I386MAGIC 0x14c
|
||||
#define I386PTXMAGIC 0x154
|
||||
#define I386AIXMAGIC 0x175
|
||||
|
||||
/* This is Lynx's all-platform magic number for executables. */
|
||||
|
||||
#define LYNXCOFFMAGIC 0415
|
||||
|
||||
#define I386BADMAG(x) ( ((x).f_magic != I386MAGIC) \
|
||||
&& (x).f_magic != I386AIXMAGIC \
|
||||
&& (x).f_magic != I386PTXMAGIC \
|
||||
&& (x).f_magic != LYNXCOFFMAGIC)
|
||||
|
||||
#define OMAGIC 0404 /* Object files, eg as output. */
|
||||
#define ZMAGIC 0413 /* Demand load format, eg normal ld output. */
|
||||
#define STMAGIC 0401 /* Target shlib. */
|
||||
#define SHMAGIC 0443 /* Host shlib. */
|
||||
|
||||
/* Define some NT default values. */
|
||||
/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
|
||||
#define NT_SECTION_ALIGNMENT 0x1000
|
||||
#define NT_FILE_ALIGNMENT 0x200
|
||||
#define NT_DEF_RESERVE 0x100000
|
||||
#define NT_DEF_COMMIT 0x1000
|
||||
|
||||
/* Relocation directives. */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10
|
||||
|
87
include/coff/i860.h
Normal file
87
include/coff/i860.h
Normal file
@ -0,0 +1,87 @@
|
||||
/* COFF information for the Intel i860.
|
||||
|
||||
Copyright 2001, 2003, 2010, 2011 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* This file was hacked from i386.h [dolan@ssd.intel.com] */
|
||||
|
||||
#define L_LNNO_SIZE 2
|
||||
#include "coff/external.h"
|
||||
|
||||
/* Bits for f_flags:
|
||||
F_RELFLG relocation info stripped from file
|
||||
F_EXEC file is executable (no unresolved external references)
|
||||
F_LNNO line numbers stripped from file
|
||||
F_LSYMS local symbols stripped from file
|
||||
F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */
|
||||
|
||||
#define F_RELFLG (0x0001)
|
||||
#define F_EXEC (0x0002)
|
||||
#define F_LNNO (0x0004)
|
||||
#define F_LSYMS (0x0008)
|
||||
|
||||
#define I860MAGIC 0x14d
|
||||
|
||||
#define I860BADMAG(x) ((x).f_magic != I860MAGIC)
|
||||
|
||||
#undef AOUTSZ
|
||||
#define AOUTSZ 36
|
||||
|
||||
/* FIXME: What are the a.out magic numbers? */
|
||||
|
||||
#define _ETEXT "etext"
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10
|
||||
|
||||
/* The relocation directory entry types.
|
||||
PAIR : The low half that follows relates to the preceding HIGH[ADJ].
|
||||
HIGH : The high half of a 32-bit constant.
|
||||
LOWn : The low half, insn bits 15..(n-1), 2^n-byte aligned.
|
||||
SPLITn : The low half, insn bits 20..16 and 10..(n-1), 2^n-byte aligned.
|
||||
HIGHADJ: Similar to HIGH, but with adjustment.
|
||||
BRADDR : 26-bit branch displacement.
|
||||
|
||||
Note: The Intel assembler manual lists LOW4 as one of the
|
||||
relocation types, but it appears to be useless for the i860.
|
||||
We will recognize it anyway, just in case it actually appears in
|
||||
any object files. */
|
||||
|
||||
enum {
|
||||
COFF860_R_PAIR = 0x1c,
|
||||
COFF860_R_HIGH = 0x1e,
|
||||
COFF860_R_LOW0 = 0x1f,
|
||||
COFF860_R_LOW1 = 0x20,
|
||||
COFF860_R_LOW2 = 0x21,
|
||||
COFF860_R_LOW3 = 0x22,
|
||||
COFF860_R_LOW4 = 0x23,
|
||||
COFF860_R_SPLIT0 = 0x24,
|
||||
COFF860_R_SPLIT1 = 0x25,
|
||||
COFF860_R_SPLIT2 = 0x26,
|
||||
COFF860_R_HIGHADJ = 0x27,
|
||||
COFF860_R_BRADDR = 0x28
|
||||
};
|
||||
|
320
include/coff/i960.h
Normal file
320
include/coff/i960.h
Normal file
@ -0,0 +1,320 @@
|
||||
/* coff information for 80960. Origins: Intel corp, natch.
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* NOTE: Tagentries (cf TAGBITS) are no longer used by the 960 */
|
||||
|
||||
/********************** FILE HEADER **********************/
|
||||
|
||||
struct external_filehdr
|
||||
{
|
||||
char f_magic[2]; /* magic number */
|
||||
char f_nscns[2]; /* number of sections */
|
||||
char f_timdat[4]; /* time & date stamp */
|
||||
char f_symptr[4]; /* file pointer to symtab */
|
||||
char f_nsyms[4]; /* number of symtab entries */
|
||||
char f_opthdr[2]; /* sizeof(optional hdr) */
|
||||
char f_flags[2]; /* flags */
|
||||
};
|
||||
|
||||
#define OMAGIC (0407) /* old impure format. data immediately
|
||||
follows text. both sections are rw. */
|
||||
#define NMAGIC (0410) /* split i&d, read-only text */
|
||||
|
||||
/*
|
||||
* Intel 80960 (I960) processor flags.
|
||||
* F_I960TYPE == mask for processor type field.
|
||||
*/
|
||||
|
||||
#define F_I960TYPE (0xf000)
|
||||
#define F_I960CORE (0x1000)
|
||||
#define F_I960KB (0x2000)
|
||||
#define F_I960SB (0x2000)
|
||||
#define F_I960MC (0x3000)
|
||||
#define F_I960XA (0x4000)
|
||||
#define F_I960CA (0x5000)
|
||||
#define F_I960KA (0x6000)
|
||||
#define F_I960SA (0x6000)
|
||||
#define F_I960JX (0x7000)
|
||||
#define F_I960HX (0x8000)
|
||||
|
||||
|
||||
/** i80960 Magic Numbers
|
||||
*/
|
||||
|
||||
#define I960ROMAGIC (0x160) /* read-only text segments */
|
||||
#define I960RWMAGIC (0x161) /* read-write text segments */
|
||||
|
||||
#define I960BADMAG(x) (((x).f_magic!=I960ROMAGIC) && ((x).f_magic!=I960RWMAGIC))
|
||||
|
||||
#define FILHDR struct external_filehdr
|
||||
#define FILHSZ 20
|
||||
|
||||
/********************** AOUT "OPTIONAL HEADER" **********************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned long phys_addr;
|
||||
unsigned long bitarray;
|
||||
} TAGBITS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char magic[2]; /* type of file */
|
||||
char vstamp[2]; /* version stamp */
|
||||
char tsize[4]; /* text size in bytes, padded to FW bdry*/
|
||||
char dsize[4]; /* initialized data " " */
|
||||
char bsize[4]; /* uninitialized data " " */
|
||||
char entry[4]; /* entry pt. */
|
||||
char text_start[4]; /* base of text used for this file */
|
||||
char data_start[4]; /* base of data used for this file */
|
||||
char tagentries[4]; /* number of tag entries to follow */
|
||||
}
|
||||
AOUTHDR;
|
||||
|
||||
/* return a pointer to the tag bits array */
|
||||
|
||||
#define TAGPTR(aout) ((TAGBITS *) (&(aout.tagentries)+1))
|
||||
|
||||
/* compute size of a header */
|
||||
|
||||
/*#define AOUTSZ(aout) (sizeof(AOUTHDR)+(aout.tagentries*sizeof(TAGBITS)))*/
|
||||
#define AOUTSZ 32
|
||||
#define AOUTHDRSZ 32
|
||||
|
||||
|
||||
/********************** SECTION HEADER **********************/
|
||||
|
||||
struct external_scnhdr
|
||||
{
|
||||
char s_name[8]; /* section name */
|
||||
char s_paddr[4]; /* physical address, aliased s_nlib */
|
||||
char s_vaddr[4]; /* virtual address */
|
||||
char s_size[4]; /* section size */
|
||||
char s_scnptr[4]; /* file ptr to raw data for section */
|
||||
char s_relptr[4]; /* file ptr to relocation */
|
||||
char s_lnnoptr[4]; /* file ptr to line numbers */
|
||||
char s_nreloc[2]; /* number of relocation entries */
|
||||
char s_nlnno[2]; /* number of line number entries*/
|
||||
char s_flags[4]; /* flags */
|
||||
char s_align[4]; /* section alignment */
|
||||
};
|
||||
|
||||
|
||||
#define SCNHDR struct external_scnhdr
|
||||
#define SCNHSZ 44
|
||||
|
||||
/*
|
||||
* names of "special" sections
|
||||
*/
|
||||
#define _TEXT ".text"
|
||||
#define _DATA ".data"
|
||||
#define _BSS ".bss"
|
||||
|
||||
/********************** LINE NUMBERS **********************/
|
||||
|
||||
/* 1 line number entry for every "breakpointable" source line in a section.
|
||||
* Line numbers are grouped on a per function basis; first entry in a function
|
||||
* grouping will have l_lnno = 0 and in place of physical address will be the
|
||||
* symbol table index of the function name.
|
||||
*/
|
||||
struct external_lineno
|
||||
{
|
||||
union
|
||||
{
|
||||
char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
|
||||
char l_paddr[4]; /* (physical) address of line number */
|
||||
} l_addr;
|
||||
|
||||
char l_lnno[2]; /* line number */
|
||||
char padding[2]; /* force alignment */
|
||||
};
|
||||
|
||||
|
||||
#define LINENO struct external_lineno
|
||||
#define LINESZ 8
|
||||
|
||||
/********************** SYMBOLS **********************/
|
||||
|
||||
#define E_SYMNMLEN 8 /* # characters in a symbol name */
|
||||
#define E_FILNMLEN 14 /* # characters in a file name */
|
||||
#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
|
||||
|
||||
struct external_syment
|
||||
{
|
||||
union
|
||||
{
|
||||
char e_name[E_SYMNMLEN];
|
||||
|
||||
struct
|
||||
{
|
||||
char e_zeroes[4];
|
||||
char e_offset[4];
|
||||
} e;
|
||||
} e;
|
||||
|
||||
char e_value[4];
|
||||
char e_scnum[2];
|
||||
char e_flags[2];
|
||||
char e_type[4];
|
||||
char e_sclass[1];
|
||||
char e_numaux[1];
|
||||
char pad2[2];
|
||||
};
|
||||
|
||||
#define N_BTMASK (0x1f)
|
||||
#define N_TMASK (0x60)
|
||||
#define N_BTSHFT (5)
|
||||
#define N_TSHIFT (2)
|
||||
|
||||
union external_auxent
|
||||
{
|
||||
struct
|
||||
{
|
||||
char x_tagndx[4]; /* str, un, or enum tag indx */
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
char x_lnno[2]; /* declaration line number */
|
||||
char x_size[2]; /* str/union/array size */
|
||||
} x_lnsz;
|
||||
|
||||
char x_fsize[4]; /* size of function */
|
||||
|
||||
} x_misc;
|
||||
|
||||
union
|
||||
{
|
||||
struct /* if ISFCN, tag, or .bb */
|
||||
{
|
||||
char x_lnnoptr[4]; /* ptr to fcn line # */
|
||||
char x_endndx[4]; /* entry ndx past block end */
|
||||
} x_fcn;
|
||||
|
||||
struct /* if ISARY, up to 4 dimen. */
|
||||
{
|
||||
char x_dimen[E_DIMNUM][2];
|
||||
} x_ary;
|
||||
|
||||
} x_fcnary;
|
||||
|
||||
char x_tvndx[2]; /* tv index */
|
||||
|
||||
} x_sym;
|
||||
|
||||
union
|
||||
{
|
||||
char x_fname[E_FILNMLEN];
|
||||
|
||||
struct
|
||||
{
|
||||
char x_zeroes[4];
|
||||
char x_offset[4];
|
||||
} x_n;
|
||||
|
||||
} x_file;
|
||||
|
||||
struct
|
||||
{
|
||||
char x_scnlen[4]; /* section length */
|
||||
char x_nreloc[2]; /* # relocation entries */
|
||||
char x_nlinno[2]; /* # line numbers */
|
||||
|
||||
} x_scn;
|
||||
|
||||
struct
|
||||
{
|
||||
char x_tvfill[4]; /* tv fill value */
|
||||
char x_tvlen[2]; /* length of .tv */
|
||||
char x_tvran[2][2]; /* tv range */
|
||||
|
||||
} x_tv; /* info about .tv section (in auxent of symbol .tv)) */
|
||||
|
||||
/******************************************
|
||||
* I960-specific *2nd* aux. entry formats
|
||||
******************************************/
|
||||
struct
|
||||
{
|
||||
/* This is a very old typo that keeps getting propagated. */
|
||||
#define x_stdindx x_stindx
|
||||
char x_stindx[4]; /* sys. table entry */
|
||||
} x_sc; /* system call entry */
|
||||
|
||||
struct
|
||||
{
|
||||
char x_balntry[4]; /* BAL entry point */
|
||||
} x_bal; /* BAL-callable function */
|
||||
|
||||
struct
|
||||
{
|
||||
char x_timestamp[4]; /* time stamp */
|
||||
char x_idstring[20]; /* producer identity string */
|
||||
|
||||
} x_ident; /* Producer ident info */
|
||||
};
|
||||
|
||||
#define SYMENT struct external_syment
|
||||
#define SYMESZ 24
|
||||
#define AUXENT union external_auxent
|
||||
#define AUXESZ 24
|
||||
|
||||
# define _ETEXT "_etext"
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
char pad[2];
|
||||
};
|
||||
|
||||
/* r_type values for the i960. */
|
||||
|
||||
/* The i960 uses R_RELLONG, which is defined in internal.h as 0x11.
|
||||
It is an absolute 32 bit relocation. */
|
||||
|
||||
#define R_IPRMED (0x19) /* 24-bit ip-relative relocation */
|
||||
#define R_OPTCALL (0x1b) /* 32-bit optimizable call (leafproc/sysproc) */
|
||||
#define R_OPTCALLX (0x1c) /* 64-bit optimizable call (leafproc/sysproc) */
|
||||
|
||||
/* The following relocation types are defined use by relaxing linkers,
|
||||
which convert 32 bit calls (which require a 64 bit instruction)
|
||||
into 24 bit calls (which require a 32 bit instruction) when
|
||||
possible. It will be possible whenever the target of the call is
|
||||
within a 24 bit range of the call instruction.
|
||||
|
||||
It is always safe to ignore these relocations. They only serve to
|
||||
mark points which the relaxing linker will have to consider. The
|
||||
assembler must ensure that the correct code is generated even if
|
||||
the relocations are ignored. In particular, this means that the
|
||||
R_IPR13 relocation may not appear with an external symbol. */
|
||||
|
||||
#define R_IPR13 (0x1d) /* 13 bit ip-relative branch */
|
||||
#define R_ALIGN (0x1e) /* alignment marker. This has no
|
||||
associated symbol. Instead, the
|
||||
r_symndx field indicates the
|
||||
require alignment at this point in
|
||||
the file. It must be a power of 2. */
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 12
|
||||
|
89
include/coff/ia64.h
Normal file
89
include/coff/ia64.h
Normal file
@ -0,0 +1,89 @@
|
||||
/* coff information for HP/Intel IA-64.
|
||||
|
||||
Copyright 2000, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define DO_NOT_DEFINE_AOUTHDR
|
||||
#define L_LNNO_SIZE 2
|
||||
#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
||||
#include "coff/external.h"
|
||||
|
||||
#define IA64MAGIC 0x200
|
||||
|
||||
#define IA64BADMAG(x) (((x).f_magic != IA64MAGIC))
|
||||
|
||||
/* Bits for f_flags:
|
||||
* F_RELFLG relocation info stripped from file
|
||||
* F_EXEC file is executable (no unresolved external references)
|
||||
* F_LNNO line numbers stripped from file
|
||||
* F_LSYMS local symbols stripped from file
|
||||
* F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax)
|
||||
*/
|
||||
|
||||
#define F_RELFLG (0x0001)
|
||||
#define F_EXEC (0x0002)
|
||||
#define F_LNNO (0x0004)
|
||||
#define F_LSYMS (0x0008)
|
||||
|
||||
/********************** AOUT "OPTIONAL HEADER" **********************/
|
||||
typedef struct
|
||||
{
|
||||
char magic[2]; /* type of file */
|
||||
char vstamp[2]; /* version stamp */
|
||||
char tsize[4]; /* text size in bytes, padded to FW bdry*/
|
||||
char dsize[4]; /* initialized data " " */
|
||||
char bsize[4]; /* uninitialized data " " */
|
||||
char entry[4]; /* entry pt. */
|
||||
char text_start[4]; /* base of text used for this file */
|
||||
#ifndef BFD64
|
||||
char data_start[4]; /* base of data used for this file */
|
||||
#endif
|
||||
}
|
||||
AOUTHDR;
|
||||
|
||||
#define PE32MAGIC 0x10b /* 32-bit image */
|
||||
#define PE32PMAGIC 0x20b /* 32-bit image inside 64-bit address space */
|
||||
|
||||
#define PE32PBADMAG(x) (((x).f_magic != PE32PMAGIC))
|
||||
|
||||
#define AOUTSZ 108
|
||||
#define AOUTHDRSZ 108
|
||||
|
||||
#define OMAGIC 0404 /* object files, eg as output */
|
||||
#define ZMAGIC 0413 /* demand load format, eg normal ld output */
|
||||
#define STMAGIC 0401 /* target shlib */
|
||||
#define SHMAGIC 0443 /* host shlib */
|
||||
|
||||
/* define some NT default values */
|
||||
/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
|
||||
#define NT_SECTION_ALIGNMENT 0x1000
|
||||
#define NT_FILE_ALIGNMENT 0x200
|
||||
#define NT_DEF_RESERVE 0x100000
|
||||
#define NT_DEF_COMMIT 0x1000
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10
|
||||
|
830
include/coff/internal.h
Normal file
830
include/coff/internal.h
Normal file
@ -0,0 +1,830 @@
|
||||
/* Internal format of COFF object file data structures, for GNU BFD.
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
Copyright 1999, 2000, 2001, 2002, 2003, 2004. 2005, 2006, 2007, 2009,
|
||||
2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef GNU_COFF_INTERNAL_H
|
||||
#define GNU_COFF_INTERNAL_H 1
|
||||
|
||||
/* First, make "signed char" work, even on old compilers. */
|
||||
#ifndef signed
|
||||
#ifndef __STDC__
|
||||
#define signed /**/
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/********************** FILE HEADER **********************/
|
||||
|
||||
/* extra stuff in a PE header. */
|
||||
|
||||
struct internal_extra_pe_filehdr
|
||||
{
|
||||
/* DOS header data follows for PE stuff */
|
||||
unsigned short e_magic; /* Magic number, 0x5a4d */
|
||||
unsigned short e_cblp; /* Bytes on last page of file, 0x90 */
|
||||
unsigned short e_cp; /* Pages in file, 0x3 */
|
||||
unsigned short e_crlc; /* Relocations, 0x0 */
|
||||
unsigned short e_cparhdr; /* Size of header in paragraphs, 0x4 */
|
||||
unsigned short e_minalloc; /* Minimum extra paragraphs needed, 0x0 */
|
||||
unsigned short e_maxalloc; /* Maximum extra paragraphs needed, 0xFFFF */
|
||||
unsigned short e_ss; /* Initial (relative) SS value, 0x0 */
|
||||
unsigned short e_sp; /* Initial SP value, 0xb8 */
|
||||
unsigned short e_csum; /* Checksum, 0x0 */
|
||||
unsigned short e_ip; /* Initial IP value, 0x0 */
|
||||
unsigned short e_cs; /* Initial (relative) CS value, 0x0 */
|
||||
unsigned short e_lfarlc; /* File address of relocation table, 0x40 */
|
||||
unsigned short e_ovno; /* Overlay number, 0x0 */
|
||||
unsigned short e_res[4]; /* Reserved words, all 0x0 */
|
||||
unsigned short e_oemid; /* OEM identifier (for e_oeminfo), 0x0 */
|
||||
unsigned short e_oeminfo; /* OEM information; e_oemid specific, 0x0 */
|
||||
unsigned short e_res2[10]; /* Reserved words, all 0x0 */
|
||||
bfd_vma e_lfanew; /* File address of new exe header, 0x80 */
|
||||
unsigned long dos_message[16]; /* text which always follows dos header */
|
||||
bfd_vma nt_signature; /* required NT signature, 0x4550 */
|
||||
};
|
||||
|
||||
#define GO32_STUBSIZE 2048
|
||||
|
||||
struct internal_filehdr
|
||||
{
|
||||
struct internal_extra_pe_filehdr pe;
|
||||
|
||||
/* coff-stgo32 EXE stub header before BFD tdata has been allocated.
|
||||
Its data is kept in INTERNAL_FILEHDR.GO32STUB afterwards.
|
||||
|
||||
F_GO32STUB is set iff go32stub contains a valid data. Artifical headers
|
||||
created in BFD have no pre-set go32stub. */
|
||||
char go32stub[GO32_STUBSIZE];
|
||||
|
||||
/* Standard coff internal info. */
|
||||
unsigned short f_magic; /* magic number */
|
||||
unsigned short f_nscns; /* number of sections */
|
||||
long f_timdat; /* time & date stamp */
|
||||
bfd_vma f_symptr; /* file pointer to symtab */
|
||||
long f_nsyms; /* number of symtab entries */
|
||||
unsigned short f_opthdr; /* sizeof(optional hdr) */
|
||||
unsigned short f_flags; /* flags */
|
||||
unsigned short f_target_id; /* (TI COFF specific) */
|
||||
};
|
||||
|
||||
|
||||
/* Bits for f_flags:
|
||||
F_RELFLG relocation info stripped from file
|
||||
F_EXEC file is executable (no unresolved external references)
|
||||
F_LNNO line numbers stripped from file
|
||||
F_LSYMS local symbols stripped from file
|
||||
F_AR16WR file is 16-bit little-endian
|
||||
F_AR32WR file is 32-bit little-endian
|
||||
F_AR32W file is 32-bit big-endian
|
||||
F_DYNLOAD rs/6000 aix: dynamically loadable w/imports & exports
|
||||
F_SHROBJ rs/6000 aix: file is a shared object
|
||||
F_DLL PE format DLL
|
||||
F_GO32STUB Field go32stub contains valid data. */
|
||||
|
||||
#define F_RELFLG (0x0001)
|
||||
#define F_EXEC (0x0002)
|
||||
#define F_LNNO (0x0004)
|
||||
#define F_LSYMS (0x0008)
|
||||
#define F_AR16WR (0x0080)
|
||||
#define F_AR32WR (0x0100)
|
||||
#define F_AR32W (0x0200)
|
||||
#define F_DYNLOAD (0x1000)
|
||||
#define F_SHROBJ (0x2000)
|
||||
#define F_DLL (0x2000)
|
||||
#define F_GO32STUB (0x4000)
|
||||
|
||||
/* Extra structure which is used in the optional header. */
|
||||
typedef struct _IMAGE_DATA_DIRECTORY
|
||||
{
|
||||
bfd_vma VirtualAddress;
|
||||
long Size;
|
||||
} IMAGE_DATA_DIRECTORY;
|
||||
#define PE_EXPORT_TABLE 0
|
||||
#define PE_IMPORT_TABLE 1
|
||||
#define PE_RESOURCE_TABLE 2
|
||||
#define PE_EXCEPTION_TABLE 3
|
||||
#define PE_CERTIFICATE_TABLE 4
|
||||
#define PE_BASE_RELOCATION_TABLE 5
|
||||
#define PE_DEBUG_DATA 6
|
||||
#define PE_ARCHITECTURE 7
|
||||
#define PE_GLOBAL_PTR 8
|
||||
#define PE_TLS_TABLE 9
|
||||
#define PE_LOAD_CONFIG_TABLE 10
|
||||
#define PE_BOUND_IMPORT_TABLE 11
|
||||
#define PE_IMPORT_ADDRESS_TABLE 12
|
||||
#define PE_DELAY_IMPORT_DESCRIPTOR 13
|
||||
#define PE_CLR_RUNTIME_HEADER 14
|
||||
/* DataDirectory[15] is currently reserved, so no define. */
|
||||
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
|
||||
|
||||
/* Default image base for NT. */
|
||||
#define NT_EXE_IMAGE_BASE 0x400000
|
||||
#define NT_DLL_IMAGE_BASE 0x10000000
|
||||
|
||||
/* Default image base for BeOS. */
|
||||
#define BEOS_EXE_IMAGE_BASE 0x80000000
|
||||
#define BEOS_DLL_IMAGE_BASE 0x10000000
|
||||
|
||||
/* Extra stuff in a PE aouthdr */
|
||||
|
||||
#define PE_DEF_SECTION_ALIGNMENT 0x1000
|
||||
#ifndef PE_DEF_FILE_ALIGNMENT
|
||||
# define PE_DEF_FILE_ALIGNMENT 0x200
|
||||
#endif
|
||||
|
||||
struct internal_extra_pe_aouthdr
|
||||
{
|
||||
/* FIXME: The following entries are in AOUTHDR. But they aren't
|
||||
available internally in bfd. We add them here so that objdump
|
||||
can dump them. */
|
||||
/* The state of the image file */
|
||||
short Magic;
|
||||
/* Linker major version number */
|
||||
char MajorLinkerVersion;
|
||||
/* Linker minor version number */
|
||||
char MinorLinkerVersion;
|
||||
/* Total size of all code sections */
|
||||
long SizeOfCode;
|
||||
/* Total size of all initialized data sections */
|
||||
long SizeOfInitializedData;
|
||||
/* Total size of all uninitialized data sections */
|
||||
long SizeOfUninitializedData;
|
||||
/* Address of entry point relative to image base. */
|
||||
bfd_vma AddressOfEntryPoint;
|
||||
/* Address of the first code section relative to image base. */
|
||||
bfd_vma BaseOfCode;
|
||||
/* Address of the first data section relative to image base. */
|
||||
bfd_vma BaseOfData;
|
||||
|
||||
/* PE stuff */
|
||||
bfd_vma ImageBase; /* address of specific location in memory that
|
||||
file is located, NT default 0x10000 */
|
||||
|
||||
bfd_vma SectionAlignment; /* section alignment default 0x1000 */
|
||||
bfd_vma FileAlignment; /* file alignment default 0x200 */
|
||||
short MajorOperatingSystemVersion; /* minimum version of the operating */
|
||||
short MinorOperatingSystemVersion; /* system req'd for exe, default to 1*/
|
||||
short MajorImageVersion; /* user defineable field to store version of */
|
||||
short MinorImageVersion; /* exe or dll being created, default to 0 */
|
||||
short MajorSubsystemVersion; /* minimum subsystem version required to */
|
||||
short MinorSubsystemVersion; /* run exe; default to 3.1 */
|
||||
long Reserved1; /* seems to be 0 */
|
||||
long SizeOfImage; /* size of memory to allocate for prog */
|
||||
long SizeOfHeaders; /* size of PE header and section table */
|
||||
long CheckSum; /* set to 0 */
|
||||
short Subsystem;
|
||||
|
||||
/* type of subsystem exe uses for user interface,
|
||||
possible values:
|
||||
1 - NATIVE Doesn't require a subsystem
|
||||
2 - WINDOWS_GUI runs in Windows GUI subsystem
|
||||
3 - WINDOWS_CUI runs in Windows char sub. (console app)
|
||||
5 - OS2_CUI runs in OS/2 character subsystem
|
||||
7 - POSIX_CUI runs in Posix character subsystem */
|
||||
unsigned short DllCharacteristics; /* flags for DLL init */
|
||||
bfd_vma SizeOfStackReserve; /* amount of memory to reserve */
|
||||
bfd_vma SizeOfStackCommit; /* amount of memory initially committed for
|
||||
initial thread's stack, default is 0x1000 */
|
||||
bfd_vma SizeOfHeapReserve; /* amount of virtual memory to reserve and */
|
||||
bfd_vma SizeOfHeapCommit; /* commit, don't know what to defaut it to */
|
||||
long LoaderFlags; /* can probably set to 0 */
|
||||
long NumberOfRvaAndSizes; /* number of entries in next entry, 16 */
|
||||
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
|
||||
};
|
||||
|
||||
/********************** AOUT "OPTIONAL HEADER" **********************/
|
||||
struct internal_aouthdr
|
||||
{
|
||||
short magic; /* type of file */
|
||||
short vstamp; /* version stamp */
|
||||
bfd_vma tsize; /* text size in bytes, padded to FW bdry*/
|
||||
bfd_vma dsize; /* initialized data " " */
|
||||
bfd_vma bsize; /* uninitialized data " " */
|
||||
bfd_vma entry; /* entry pt. */
|
||||
bfd_vma text_start; /* base of text used for this file */
|
||||
bfd_vma data_start; /* base of data used for this file */
|
||||
|
||||
/* i960 stuff */
|
||||
unsigned long tagentries; /* number of tag entries to follow */
|
||||
|
||||
/* RS/6000 stuff */
|
||||
bfd_vma o_toc; /* address of TOC */
|
||||
short o_snentry; /* section number for entry point */
|
||||
short o_sntext; /* section number for text */
|
||||
short o_sndata; /* section number for data */
|
||||
short o_sntoc; /* section number for toc */
|
||||
short o_snloader; /* section number for loader section */
|
||||
short o_snbss; /* section number for bss */
|
||||
short o_algntext; /* max alignment for text */
|
||||
short o_algndata; /* max alignment for data */
|
||||
short o_modtype; /* Module type field, 1R,RE,RO */
|
||||
short o_cputype; /* Encoded CPU type */
|
||||
bfd_vma o_maxstack; /* max stack size allowed. */
|
||||
bfd_vma o_maxdata; /* max data size allowed. */
|
||||
|
||||
/* ECOFF stuff */
|
||||
bfd_vma bss_start; /* Base of bss section. */
|
||||
bfd_vma gp_value; /* GP register value. */
|
||||
unsigned long gprmask; /* General registers used. */
|
||||
unsigned long cprmask[4]; /* Coprocessor registers used. */
|
||||
unsigned long fprmask; /* Floating pointer registers used. */
|
||||
|
||||
/* Apollo stuff */
|
||||
long o_inlib; /* inlib data */
|
||||
long o_sri; /* Static Resource Information */
|
||||
long vid[2]; /* Version id */
|
||||
|
||||
struct internal_extra_pe_aouthdr pe;
|
||||
};
|
||||
|
||||
/********************** STORAGE CLASSES **********************/
|
||||
|
||||
/* This used to be defined as -1, but now n_sclass is unsigned. */
|
||||
#define C_EFCN 0xff /* physical end of function */
|
||||
#define C_NULL 0
|
||||
#define C_AUTO 1 /* automatic variable */
|
||||
#define C_EXT 2 /* external symbol */
|
||||
#define C_STAT 3 /* static */
|
||||
#define C_REG 4 /* register variable */
|
||||
#define C_EXTDEF 5 /* external definition */
|
||||
#define C_LABEL 6 /* label */
|
||||
#define C_ULABEL 7 /* undefined label */
|
||||
#define C_MOS 8 /* member of structure */
|
||||
#define C_ARG 9 /* function argument */
|
||||
#define C_STRTAG 10 /* structure tag */
|
||||
#define C_MOU 11 /* member of union */
|
||||
#define C_UNTAG 12 /* union tag */
|
||||
#define C_TPDEF 13 /* type definition */
|
||||
#define C_USTATIC 14 /* undefined static */
|
||||
#define C_ENTAG 15 /* enumeration tag */
|
||||
#define C_MOE 16 /* member of enumeration */
|
||||
#define C_REGPARM 17 /* register parameter */
|
||||
#define C_FIELD 18 /* bit field */
|
||||
#define C_AUTOARG 19 /* auto argument */
|
||||
#define C_LASTENT 20 /* dummy entry (end of block) */
|
||||
#define C_BLOCK 100 /* ".bb" or ".eb" */
|
||||
#define C_FCN 101 /* ".bf" or ".ef" */
|
||||
#define C_EOS 102 /* end of structure */
|
||||
#define C_FILE 103 /* file name */
|
||||
#define C_LINE 104 /* line # reformatted as symbol table entry */
|
||||
#define C_ALIAS 105 /* duplicate tag */
|
||||
#define C_HIDDEN 106 /* ext symbol in dmert public lib */
|
||||
#define C_WEAKEXT 127 /* weak symbol -- GNU extension. */
|
||||
|
||||
/* New storage classes for TI COFF */
|
||||
#define C_UEXT 19 /* Tentative external definition */
|
||||
#define C_STATLAB 20 /* Static load time label */
|
||||
#define C_EXTLAB 21 /* External load time label */
|
||||
#define C_SYSTEM 23 /* System Wide variable */
|
||||
|
||||
/* New storage classes for WINDOWS_NT */
|
||||
#define C_SECTION 104 /* section name */
|
||||
#define C_NT_WEAK 105 /* weak external */
|
||||
|
||||
/* New storage classes for 80960 */
|
||||
|
||||
/* C_LEAFPROC is obsolete. Use C_LEAFEXT or C_LEAFSTAT */
|
||||
#define C_LEAFPROC 108 /* Leaf procedure, "call" via BAL */
|
||||
|
||||
#define C_SCALL 107 /* Procedure reachable via system call */
|
||||
#define C_LEAFEXT 108 /* External leaf */
|
||||
#define C_LEAFSTAT 113 /* Static leaf */
|
||||
#define C_OPTVAR 109 /* Optimized variable */
|
||||
#define C_DEFINE 110 /* Preprocessor #define */
|
||||
#define C_PRAGMA 111 /* Advice to compiler or linker */
|
||||
#define C_SEGMENT 112 /* 80960 segment name */
|
||||
|
||||
/* Storage classes for m88k */
|
||||
#define C_SHADOW 107 /* shadow symbol */
|
||||
#define C_VERSION 108 /* coff version symbol */
|
||||
|
||||
/* New storage classes for RS/6000 */
|
||||
#define C_HIDEXT 107 /* Un-named external symbol */
|
||||
#define C_BINCL 108 /* Marks beginning of include file */
|
||||
#define C_EINCL 109 /* Marks ending of include file */
|
||||
#define C_AIX_WEAKEXT 111 /* AIX definition of C_WEAKEXT. */
|
||||
|
||||
#define C_NULL_VALUE 0x00de1e00 /* Value for a C_NULL deleted entry. */
|
||||
|
||||
#if defined _AIX52 || defined AIX_WEAK_SUPPORT
|
||||
#undef C_WEAKEXT
|
||||
#define C_WEAKEXT C_AIX_WEAKEXT
|
||||
#endif
|
||||
|
||||
/* storage classes for stab symbols for RS/6000 */
|
||||
#define C_GSYM (0x80)
|
||||
#define C_LSYM (0x81)
|
||||
#define C_PSYM (0x82)
|
||||
#define C_RSYM (0x83)
|
||||
#define C_RPSYM (0x84)
|
||||
#define C_STSYM (0x85)
|
||||
#define C_TCSYM (0x86)
|
||||
#define C_BCOMM (0x87)
|
||||
#define C_ECOML (0x88)
|
||||
#define C_ECOMM (0x89)
|
||||
#define C_DECL (0x8c)
|
||||
#define C_ENTRY (0x8d)
|
||||
#define C_FUN (0x8e)
|
||||
#define C_BSTAT (0x8f)
|
||||
#define C_ESTAT (0x90)
|
||||
#define C_GTLS (0x97)
|
||||
#define C_STTLS (0x98)
|
||||
|
||||
/* Storage classes for Thumb symbols */
|
||||
#define C_THUMBEXT (128 + C_EXT) /* 130 */
|
||||
#define C_THUMBSTAT (128 + C_STAT) /* 131 */
|
||||
#define C_THUMBLABEL (128 + C_LABEL) /* 134 */
|
||||
#define C_THUMBEXTFUNC (C_THUMBEXT + 20) /* 150 */
|
||||
#define C_THUMBSTATFUNC (C_THUMBSTAT + 20) /* 151 */
|
||||
|
||||
/* True if XCOFF symbols of class CLASS have auxillary csect information. */
|
||||
#define CSECT_SYM_P(CLASS) \
|
||||
((CLASS) == C_EXT || (CLASS) == C_AIX_WEAKEXT || (CLASS) == C_HIDEXT)
|
||||
|
||||
/********************** SECTION HEADER **********************/
|
||||
|
||||
#define SCNNMLEN (8)
|
||||
|
||||
struct internal_scnhdr
|
||||
{
|
||||
char s_name[SCNNMLEN]; /* section name */
|
||||
|
||||
/* Physical address, aliased s_nlib.
|
||||
In the pei format, this field is the virtual section size
|
||||
(the size of the section after being loaded int memory),
|
||||
NOT the physical address. */
|
||||
bfd_vma s_paddr;
|
||||
|
||||
bfd_vma s_vaddr; /* virtual address */
|
||||
bfd_vma s_size; /* section size */
|
||||
bfd_vma s_scnptr; /* file ptr to raw data for section */
|
||||
bfd_vma s_relptr; /* file ptr to relocation */
|
||||
bfd_vma s_lnnoptr; /* file ptr to line numbers */
|
||||
unsigned long s_nreloc; /* number of relocation entries */
|
||||
unsigned long s_nlnno; /* number of line number entries*/
|
||||
long s_flags; /* flags */
|
||||
long s_align; /* used on I960 */
|
||||
unsigned char s_page; /* TI COFF load page */
|
||||
};
|
||||
|
||||
/* s_flags "type". */
|
||||
#define STYP_REG (0x0000) /* "regular": allocated, relocated, loaded */
|
||||
#define STYP_DSECT (0x0001) /* "dummy": relocated only*/
|
||||
#define STYP_NOLOAD (0x0002) /* "noload": allocated, relocated, not loaded */
|
||||
#define STYP_GROUP (0x0004) /* "grouped": formed of input sections */
|
||||
#define STYP_PAD (0x0008) /* "padding": not allocated, not relocated, loaded */
|
||||
#define STYP_COPY (0x0010) /* "copy": for decision function used by field update; not allocated, not relocated,
|
||||
loaded; reloc & lineno entries processed normally */
|
||||
#define STYP_TEXT (0x0020) /* section contains text only */
|
||||
#define S_SHRSEG (0x0020) /* In 3b Update files (output of ogen), sections which appear in SHARED segments of the Pfile
|
||||
will have the S_SHRSEG flag set by ogen, to inform dufr that updating 1 copy of the proc. will
|
||||
update all process invocations. */
|
||||
#define STYP_DATA (0x0040) /* section contains data only */
|
||||
#define STYP_BSS (0x0080) /* section contains bss only */
|
||||
#define S_NEWFCN (0x0100) /* In a minimal file or an update file, a new function (as compared with a replaced function) */
|
||||
#define STYP_INFO (0x0200) /* comment: not allocated not relocated, not loaded */
|
||||
#define STYP_OVER (0x0400) /* overlay: relocated not allocated or loaded */
|
||||
#define STYP_LIB (0x0800) /* for .lib: same as INFO */
|
||||
#define STYP_MERGE (0x2000) /* merge section -- combines with text, data or bss sections only */
|
||||
#define STYP_REVERSE_PAD (0x4000) /* section will be padded with no-op instructions
|
||||
wherever padding is necessary and there is a
|
||||
word of contiguous bytes beginning on a word
|
||||
boundary. */
|
||||
|
||||
#define STYP_LIT 0x8020 /* Literal data (like STYP_TEXT) */
|
||||
|
||||
|
||||
/********************** LINE NUMBERS **********************/
|
||||
|
||||
/* 1 line number entry for every "breakpointable" source line in a section.
|
||||
Line numbers are grouped on a per function basis; first entry in a function
|
||||
grouping will have l_lnno = 0 and in place of physical address will be the
|
||||
symbol table index of the function name. */
|
||||
|
||||
struct internal_lineno
|
||||
{
|
||||
union
|
||||
{
|
||||
bfd_signed_vma l_symndx; /* function name symbol index, iff l_lnno == 0*/
|
||||
bfd_signed_vma l_paddr; /* (physical) address of line number */
|
||||
} l_addr;
|
||||
unsigned long l_lnno; /* line number */
|
||||
};
|
||||
|
||||
/********************** SYMBOLS **********************/
|
||||
|
||||
#define SYMNMLEN 8 /* # characters in a symbol name */
|
||||
#define FILNMLEN 14 /* # characters in a file name */
|
||||
#define DIMNUM 4 /* # array dimensions in auxiliary entry */
|
||||
|
||||
struct internal_syment
|
||||
{
|
||||
union
|
||||
{
|
||||
char _n_name[SYMNMLEN]; /* old COFF version */
|
||||
struct
|
||||
{
|
||||
bfd_hostptr_t _n_zeroes; /* new == 0 */
|
||||
bfd_hostptr_t _n_offset; /* offset into string table */
|
||||
} _n_n;
|
||||
char *_n_nptr[2]; /* allows for overlaying */
|
||||
} _n;
|
||||
bfd_vma n_value; /* value of symbol */
|
||||
short n_scnum; /* section number */
|
||||
unsigned short n_flags; /* copy of flags from filhdr */
|
||||
unsigned short n_type; /* type and derived type */
|
||||
unsigned char n_sclass; /* storage class */
|
||||
unsigned char n_numaux; /* number of aux. entries */
|
||||
};
|
||||
|
||||
#define n_name _n._n_name
|
||||
#define n_zeroes _n._n_n._n_zeroes
|
||||
#define n_offset _n._n_n._n_offset
|
||||
|
||||
/* Relocatable symbols have number of the section in which they are defined,
|
||||
or one of the following: */
|
||||
|
||||
#define N_UNDEF ((short)0) /* undefined symbol */
|
||||
#define N_ABS ((short)-1) /* value of symbol is absolute */
|
||||
#define N_DEBUG ((short)-2) /* debugging symbol -- value is meaningless */
|
||||
#define N_TV ((short)-3) /* indicates symbol needs preload transfer vector */
|
||||
#define P_TV ((short)-4) /* indicates symbol needs postload transfer vector*/
|
||||
|
||||
/* Type of a symbol, in low N bits of the word. */
|
||||
|
||||
#define T_NULL 0
|
||||
#define T_VOID 1 /* function argument (only used by compiler) */
|
||||
#define T_CHAR 2 /* character */
|
||||
#define T_SHORT 3 /* short integer */
|
||||
#define T_INT 4 /* integer */
|
||||
#define T_LONG 5 /* long integer */
|
||||
#define T_FLOAT 6 /* floating point */
|
||||
#define T_DOUBLE 7 /* double word */
|
||||
#define T_STRUCT 8 /* structure */
|
||||
#define T_UNION 9 /* union */
|
||||
#define T_ENUM 10 /* enumeration */
|
||||
#define T_MOE 11 /* member of enumeration*/
|
||||
#define T_UCHAR 12 /* unsigned character */
|
||||
#define T_USHORT 13 /* unsigned short */
|
||||
#define T_UINT 14 /* unsigned integer */
|
||||
#define T_ULONG 15 /* unsigned long */
|
||||
#define T_LNGDBL 16 /* long double */
|
||||
|
||||
/* Derived types, in n_type. */
|
||||
|
||||
#define DT_NON (0) /* no derived type */
|
||||
#define DT_PTR (1) /* pointer */
|
||||
#define DT_FCN (2) /* function */
|
||||
#define DT_ARY (3) /* array */
|
||||
|
||||
#define BTYPE(x) ((x) & N_BTMASK)
|
||||
#define DTYPE(x) (((x) & N_TMASK) >> N_BTSHFT)
|
||||
|
||||
#define ISPTR(x) \
|
||||
(((unsigned long) (x) & N_TMASK) == ((unsigned long) DT_PTR << N_BTSHFT))
|
||||
#define ISFCN(x) \
|
||||
(((unsigned long) (x) & N_TMASK) == ((unsigned long) DT_FCN << N_BTSHFT))
|
||||
#define ISARY(x) \
|
||||
(((unsigned long) (x) & N_TMASK) == ((unsigned long) DT_ARY << N_BTSHFT))
|
||||
#define ISTAG(x) \
|
||||
((x) == C_STRTAG || (x) == C_UNTAG || (x) == C_ENTAG)
|
||||
#define DECREF(x) \
|
||||
((((x) >> N_TSHIFT) & ~ N_BTMASK) | ((x) & N_BTMASK))
|
||||
|
||||
union internal_auxent
|
||||
{
|
||||
struct
|
||||
{
|
||||
|
||||
union
|
||||
{
|
||||
long l; /* str, un, or enum tag indx */
|
||||
struct coff_ptr_struct *p;
|
||||
} x_tagndx;
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned short x_lnno; /* declaration line number */
|
||||
unsigned short x_size; /* str/union/array size */
|
||||
} x_lnsz;
|
||||
long x_fsize; /* size of function */
|
||||
} x_misc;
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{ /* if ISFCN, tag, or .bb */
|
||||
bfd_signed_vma x_lnnoptr; /* ptr to fcn line # */
|
||||
union
|
||||
{ /* entry ndx past block end */
|
||||
long l;
|
||||
struct coff_ptr_struct *p;
|
||||
} x_endndx;
|
||||
} x_fcn;
|
||||
|
||||
struct
|
||||
{ /* if ISARY, up to 4 dimen. */
|
||||
unsigned short x_dimen[DIMNUM];
|
||||
} x_ary;
|
||||
} x_fcnary;
|
||||
|
||||
unsigned short x_tvndx; /* tv index */
|
||||
} x_sym;
|
||||
|
||||
union
|
||||
{
|
||||
char x_fname[FILNMLEN];
|
||||
struct
|
||||
{
|
||||
long x_zeroes;
|
||||
long x_offset;
|
||||
} x_n;
|
||||
} x_file;
|
||||
|
||||
struct
|
||||
{
|
||||
long x_scnlen; /* section length */
|
||||
unsigned short x_nreloc; /* # relocation entries */
|
||||
unsigned short x_nlinno; /* # line numbers */
|
||||
unsigned long x_checksum; /* section COMDAT checksum for PE */
|
||||
unsigned short x_associated; /* COMDAT associated section index for PE */
|
||||
unsigned char x_comdat; /* COMDAT selection number for PE */
|
||||
} x_scn;
|
||||
|
||||
struct
|
||||
{
|
||||
long x_tvfill; /* tv fill value */
|
||||
unsigned short x_tvlen; /* length of .tv */
|
||||
unsigned short x_tvran[2]; /* tv range */
|
||||
} x_tv; /* info about .tv section (in auxent of symbol .tv)) */
|
||||
|
||||
/******************************************
|
||||
* RS/6000-specific auxent - last auxent for every external symbol
|
||||
******************************************/
|
||||
struct
|
||||
{
|
||||
union
|
||||
{ /* csect length or enclosing csect */
|
||||
bfd_signed_vma l;
|
||||
struct coff_ptr_struct *p;
|
||||
} x_scnlen;
|
||||
long x_parmhash; /* parm type hash index */
|
||||
unsigned short x_snhash; /* sect num with parm hash */
|
||||
unsigned char x_smtyp; /* symbol align and type */
|
||||
/* 0-4 - Log 2 of alignment */
|
||||
/* 5-7 - symbol type */
|
||||
unsigned char x_smclas; /* storage mapping class */
|
||||
long x_stab; /* dbx stab info index */
|
||||
unsigned short x_snstab; /* sect num with dbx stab */
|
||||
} x_csect; /* csect definition information */
|
||||
|
||||
/* x_smtyp values: */
|
||||
|
||||
#define SMTYP_ALIGN(x) ((x) >> 3) /* log2 of alignment */
|
||||
#define SMTYP_SMTYP(x) ((x) & 0x7) /* symbol type */
|
||||
/* Symbol type values: */
|
||||
#define XTY_ER 0 /* External reference */
|
||||
#define XTY_SD 1 /* Csect definition */
|
||||
#define XTY_LD 2 /* Label definition */
|
||||
#define XTY_CM 3 /* .BSS */
|
||||
#define XTY_EM 4 /* Error message */
|
||||
#define XTY_US 5 /* "Reserved for internal use" */
|
||||
|
||||
/* x_smclas values: */
|
||||
|
||||
#define XMC_PR 0 /* Read-only program code */
|
||||
#define XMC_RO 1 /* Read-only constant */
|
||||
#define XMC_DB 2 /* Read-only debug dictionary table */
|
||||
#define XMC_TC 3 /* Read-write general TOC entry */
|
||||
#define XMC_UA 4 /* Read-write unclassified */
|
||||
#define XMC_RW 5 /* Read-write data */
|
||||
#define XMC_GL 6 /* Read-only global linkage */
|
||||
#define XMC_XO 7 /* Read-only extended operation */
|
||||
#define XMC_SV 8 /* Read-only supervisor call */
|
||||
#define XMC_BS 9 /* Read-write BSS */
|
||||
#define XMC_DS 10 /* Read-write descriptor csect */
|
||||
#define XMC_UC 11 /* Read-write unnamed Fortran common */
|
||||
#define XMC_TI 12 /* Read-only traceback index csect */
|
||||
#define XMC_TB 13 /* Read-only traceback table csect */
|
||||
/* 14 ??? */
|
||||
#define XMC_TC0 15 /* Read-write TOC anchor */
|
||||
#define XMC_TD 16 /* Read-write data in TOC */
|
||||
|
||||
/******************************************
|
||||
* I960-specific *2nd* aux. entry formats
|
||||
******************************************/
|
||||
struct
|
||||
{
|
||||
/* This is a very old typo that keeps getting propagated. */
|
||||
#define x_stdindx x_stindx
|
||||
long x_stindx; /* sys. table entry */
|
||||
} x_sc; /* system call entry */
|
||||
|
||||
struct
|
||||
{
|
||||
unsigned long x_balntry; /* BAL entry point */
|
||||
} x_bal; /* BAL-callable function */
|
||||
|
||||
struct
|
||||
{
|
||||
unsigned long x_timestamp; /* time stamp */
|
||||
char x_idstring[20]; /* producer identity string */
|
||||
} x_ident; /* Producer ident info */
|
||||
|
||||
};
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct internal_reloc
|
||||
{
|
||||
bfd_vma r_vaddr; /* Virtual address of reference */
|
||||
long r_symndx; /* Index into symbol table */
|
||||
unsigned short r_type; /* Relocation type */
|
||||
unsigned char r_size; /* Used by RS/6000 and ECOFF */
|
||||
unsigned char r_extern; /* Used by ECOFF */
|
||||
unsigned long r_offset; /* Used by Alpha ECOFF, SPARC, others */
|
||||
};
|
||||
|
||||
/* X86-64 relocations. */
|
||||
#define R_AMD64_ABS 0 /* Reference is absolute, no relocation is necessary. */
|
||||
#define R_AMD64_DIR64 1 /* 64-bit address (VA). */
|
||||
#define R_AMD64_DIR32 2 /* 32-bit address (VA) R_DIR32. */
|
||||
#define R_AMD64_IMAGEBASE 3 /* 32-bit absolute ref w/o base R_IMAGEBASE. */
|
||||
#define R_AMD64_PCRLONG 4 /* 32-bit relative address from byte following reloc R_PCRLONG. */
|
||||
#define R_AMD64_PCRLONG_1 5 /* 32-bit relative address from byte distance 1 from reloc. */
|
||||
#define R_AMD64_PCRLONG_2 6 /* 32-bit relative address from byte distance 2 from reloc. */
|
||||
#define R_AMD64_PCRLONG_3 7 /* 32-bit relative address from byte distance 3 from reloc. */
|
||||
#define R_AMD64_PCRLONG_4 8 /* 32-bit relative address from byte distance 4 from reloc. */
|
||||
#define R_AMD64_PCRLONG_5 9 /* 32-bit relative address from byte distance 5 from reloc. */
|
||||
#define R_AMD64_SECTION 10 /* Section index. */
|
||||
#define R_AMD64_SECREL 11 /* 32 bit offset from base of section containing target R_SECREL. */
|
||||
#define R_AMD64_SECREL7 12 /* 7 bit unsigned offset from base of section containing target. */
|
||||
#define R_AMD64_TOKEN 13 /* 32 bit metadata token. */
|
||||
#define R_AMD64_PCRQUAD 14 /* Pseude PC64 relocation - Note: not specified by MS/AMD but need for gas pc-relative 64bit wide relocation generated by ELF. */
|
||||
|
||||
/* i386 Relocations. */
|
||||
|
||||
#define R_DIR16 1
|
||||
#define R_REL24 5
|
||||
#define R_DIR32 6
|
||||
#define R_IMAGEBASE 7
|
||||
#define R_SECREL32 11
|
||||
#define R_RELBYTE 15
|
||||
#define R_RELWORD 16
|
||||
#define R_RELLONG 17
|
||||
#define R_PCRBYTE 18
|
||||
#define R_PCRWORD 19
|
||||
#define R_PCRLONG 20
|
||||
#define R_PCR24 21
|
||||
#define R_IPRSHORT 24
|
||||
#define R_IPRLONG 26
|
||||
#define R_GETSEG 29
|
||||
#define R_GETPA 30
|
||||
#define R_TAGWORD 31
|
||||
#define R_JUMPTARG 32 /* strange 29k 00xx00xx reloc */
|
||||
#define R_PARTLS16 32
|
||||
#define R_PARTMS8 33
|
||||
|
||||
#define R_PCR16L 128
|
||||
#define R_PCR26L 129
|
||||
#define R_VRT16 130
|
||||
#define R_HVRT16 131
|
||||
#define R_LVRT16 132
|
||||
#define R_VRT32 133
|
||||
|
||||
|
||||
/* This reloc identifies mov.b instructions with a 16bit absolute
|
||||
address. The linker tries to turn insns with this reloc into
|
||||
an absolute 8-bit address. */
|
||||
#define R_MOV16B1 0x41
|
||||
|
||||
/* This reloc identifies mov.b instructions which had a 16bit
|
||||
absolute address which have been shortened into a 8-bit
|
||||
absolute address. */
|
||||
#define R_MOV16B2 0x42
|
||||
|
||||
/* This reloc identifies jmp insns with a 16bit target address;
|
||||
the linker tries to turn these insns into bra insns with
|
||||
an 8bit pc-relative target. */
|
||||
#define R_JMP1 0x43
|
||||
|
||||
/* This reloc identifies a bra with an 8-bit pc-relative
|
||||
target that was formerly a jmp insn with a 16bit target. */
|
||||
#define R_JMP2 0x44
|
||||
|
||||
/* ??? */
|
||||
#define R_RELLONG_NEG 0x45
|
||||
|
||||
/* This reloc identifies jmp insns with a 24bit target address;
|
||||
the linker tries to turn these insns into bra insns with
|
||||
an 8bit pc-relative target. */
|
||||
#define R_JMPL1 0x46
|
||||
|
||||
/* This reloc identifies a bra with an 8-bit pc-relative
|
||||
target that was formerly a jmp insn with a 24bit target. */
|
||||
#define R_JMPL2 0x47
|
||||
|
||||
/* This reloc identifies mov.b instructions with a 24bit absolute
|
||||
address. The linker tries to turn insns with this reloc into
|
||||
an absolute 8-bit address. */
|
||||
|
||||
#define R_MOV24B1 0x48
|
||||
|
||||
/* This reloc identifies mov.b instructions which had a 24bit
|
||||
absolute address which have been shortened into a 8-bit
|
||||
absolute address. */
|
||||
#define R_MOV24B2 0x49
|
||||
|
||||
/* An h8300 memory indirect jump/call. Forces the address of the jump/call
|
||||
target into the function vector (in page zero), and the address of the
|
||||
vector entry to be placed in the jump/call instruction. */
|
||||
#define R_MEM_INDIRECT 0x4a
|
||||
|
||||
/* This reloc identifies a 16bit pc-relative branch target which was
|
||||
shortened into an 8bit pc-relative branch target. */
|
||||
#define R_PCRWORD_B 0x4b
|
||||
|
||||
/* This reloc identifies mov.[wl] instructions with a 32/24 bit
|
||||
absolute address; the linker may turn this into a mov.[wl]
|
||||
insn with a 16bit absolute address. */
|
||||
#define R_MOVL1 0x4c
|
||||
|
||||
/* This reloc identifies mov.[wl] insns which formerly had
|
||||
a 32/24bit absolute address and now have a 16bit absolute address. */
|
||||
#define R_MOVL2 0x4d
|
||||
|
||||
/* This reloc identifies a bCC:8 which will have it's condition
|
||||
inverted and its target redirected to the target of the branch
|
||||
in the following insn. */
|
||||
#define R_BCC_INV 0x4e
|
||||
|
||||
/* This reloc identifies a jmp instruction that has been deleted. */
|
||||
#define R_JMP_DEL 0x4f
|
||||
|
||||
/* Z8k modes */
|
||||
#define R_IMM16 0x01 /* 16 bit abs */
|
||||
#define R_JR 0x02 /* jr 8 bit disp */
|
||||
#define R_IMM4L 0x23 /* low nibble */
|
||||
#define R_IMM8 0x22 /* 8 bit abs */
|
||||
#define R_IMM32 R_RELLONG /* 32 bit abs */
|
||||
#define R_CALL R_DA /* Absolute address which could be a callr */
|
||||
#define R_JP R_DA /* Absolute address which could be a jp */
|
||||
#define R_REL16 0x04 /* 16 bit PC rel */
|
||||
#define R_CALLR 0x05 /* callr 12 bit disp */
|
||||
#define R_SEG 0x10 /* set if in segmented mode */
|
||||
#define R_IMM4H 0x24 /* high nibble */
|
||||
#define R_DISP7 0x25 /* djnz displacement */
|
||||
|
||||
/* Z80 modes */
|
||||
#define R_OFF8 0x32 /* 8 bit signed abs, for (i[xy]+d) */
|
||||
#define R_IMM24 0x33 /* 24 bit abs */
|
||||
/* R_JR, R_IMM8, R_IMM16, R_IMM32 - as for Z8k */
|
||||
|
||||
/* H8500 modes */
|
||||
|
||||
#define R_H8500_IMM8 1 /* 8 bit immediate */
|
||||
#define R_H8500_IMM16 2 /* 16 bit immediate */
|
||||
#define R_H8500_PCREL8 3 /* 8 bit pcrel */
|
||||
#define R_H8500_PCREL16 4 /* 16 bit pcrel */
|
||||
#define R_H8500_HIGH8 5 /* high 8 bits of 24 bit address */
|
||||
#define R_H8500_LOW16 7 /* low 16 bits of 24 bit immediate */
|
||||
#define R_H8500_IMM24 6 /* 24 bit immediate */
|
||||
#define R_H8500_IMM32 8 /* 32 bit immediate */
|
||||
#define R_H8500_HIGH16 9 /* high 16 bits of 32 bit immediate */
|
||||
|
||||
/* W65 modes */
|
||||
|
||||
#define R_W65_ABS8 1 /* addr & 0xff */
|
||||
#define R_W65_ABS16 2 /* addr & 0xffff */
|
||||
#define R_W65_ABS24 3 /* addr & 0xffffff */
|
||||
|
||||
#define R_W65_ABS8S8 4 /* (addr >> 8) & 0xff */
|
||||
#define R_W65_ABS8S16 5 /* (addr >> 16) & 0xff */
|
||||
|
||||
#define R_W65_ABS16S8 6 /* (addr >> 8) & 0ffff */
|
||||
#define R_W65_ABS16S16 7 /* (addr >> 16) & 0ffff */
|
||||
|
||||
#define R_W65_PCR8 8
|
||||
#define R_W65_PCR16 9
|
||||
|
||||
#define R_W65_DP 10 /* direct page 8 bits only */
|
||||
|
||||
#endif /* GNU_COFF_INTERNAL_H */
|
82
include/coff/m68k.h
Normal file
82
include/coff/m68k.h
Normal file
@ -0,0 +1,82 @@
|
||||
/* coff information for M68K
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef GNU_COFF_M68K_H
|
||||
#define GNU_COFF_M68K_H 1
|
||||
|
||||
#define L_LNNO_SIZE 2
|
||||
#include "coff/external.h"
|
||||
|
||||
/* Motorola 68000/68008/68010/68020 */
|
||||
#define MC68MAGIC 0520
|
||||
#define MC68KWRMAGIC 0520 /* writeable text segments */
|
||||
#define MC68TVMAGIC 0521
|
||||
#define MC68KROMAGIC 0521 /* readonly shareable text segments */
|
||||
#define MC68KPGMAGIC 0522 /* demand paged text segments */
|
||||
#define M68MAGIC 0210
|
||||
#define M68TVMAGIC 0211
|
||||
|
||||
/* This is the magic of the Bull dpx/2 */
|
||||
#define MC68KBCSMAGIC 0526
|
||||
|
||||
/* This is Lynx's all-platform magic number for executables. */
|
||||
|
||||
#define LYNXCOFFMAGIC 0415
|
||||
|
||||
#define OMAGIC M68MAGIC
|
||||
|
||||
/* This intentionally does not include MC68KBCSMAGIC; it only includes
|
||||
magic numbers which imply that names do not have underscores. */
|
||||
#define M68KBADMAG(x) (((x).f_magic != MC68MAGIC) \
|
||||
&& ((x).f_magic != MC68KWRMAGIC) \
|
||||
&& ((x).f_magic != MC68TVMAGIC) \
|
||||
&& ((x).f_magic != MC68KROMAGIC) \
|
||||
&& ((x).f_magic != MC68KPGMAGIC) \
|
||||
&& ((x).f_magic != M68MAGIC) \
|
||||
&& ((x).f_magic != M68TVMAGIC) \
|
||||
&& ((x).f_magic != LYNXCOFFMAGIC))
|
||||
|
||||
/* Magic numbers for the a.out header. */
|
||||
|
||||
#define PAGEMAGICEXECSWAPPED 0407 /* executable (swapped) */
|
||||
#define PAGEMAGICPEXECSWAPPED 0410 /* pure executable (swapped) */
|
||||
#define PAGEMAGICPEXECTSHLIB 0443 /* pure executable (target shared library) */
|
||||
#define PAGEMAGICPEXECPAGED 0413 /* pure executable (paged) */
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
#ifdef M68K_COFF_OFFSET
|
||||
char r_offset[4];
|
||||
#endif
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
|
||||
#ifdef M68K_COFF_OFFSET
|
||||
#define RELSZ 14
|
||||
#else
|
||||
#define RELSZ 10
|
||||
#endif
|
||||
|
||||
#endif /* GNU_COFF_M68K_H */
|
197
include/coff/m88k.h
Normal file
197
include/coff/m88k.h
Normal file
@ -0,0 +1,197 @@
|
||||
/* coff information for 88k bcs
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define DO_NOT_DEFINE_SCNHDR
|
||||
#define L_LNNO_SIZE 4
|
||||
#define DO_NOT_DEFINE_SYMENT
|
||||
#define DO_NOT_DEFINE_AUXENT
|
||||
#include "coff/external.h"
|
||||
|
||||
#define MC88MAGIC 0540 /* 88k BCS executable */
|
||||
#define MC88DMAGIC 0541 /* DG/UX executable */
|
||||
#define MC88OMAGIC 0555 /* Object file */
|
||||
|
||||
#define MC88BADMAG(x) (((x).f_magic != MC88MAGIC) \
|
||||
&& ((x).f_magic != MC88DMAGIC) \
|
||||
&& ((x).f_magic != MC88OMAGIC))
|
||||
|
||||
#define PAGEMAGIC3 0414 /* Split i&d, zero mapped */
|
||||
#define PAGEMAGICBCS 0413
|
||||
|
||||
/********************** SECTION HEADER **********************/
|
||||
|
||||
struct external_scnhdr
|
||||
{
|
||||
char s_name[8]; /* section name */
|
||||
char s_paddr[4]; /* physical address, aliased s_nlib */
|
||||
char s_vaddr[4]; /* virtual address */
|
||||
char s_size[4]; /* section size */
|
||||
char s_scnptr[4]; /* file ptr to raw data for section */
|
||||
char s_relptr[4]; /* file ptr to relocation */
|
||||
char s_lnnoptr[4]; /* file ptr to line numbers */
|
||||
char s_nreloc[4]; /* number of relocation entries */
|
||||
char s_nlnno[4]; /* number of line number entries*/
|
||||
char s_flags[4]; /* flags */
|
||||
};
|
||||
|
||||
#define SCNHDR struct external_scnhdr
|
||||
#define SCNHSZ 44
|
||||
|
||||
/* Names of "special" sections. */
|
||||
#define _TEXT ".text"
|
||||
#define _DATA ".data"
|
||||
#define _BSS ".bss"
|
||||
#define _COMMENT ".comment"
|
||||
|
||||
|
||||
/********************** SYMBOLS **********************/
|
||||
|
||||
#define E_SYMNMLEN 8 /* # characters in a symbol name */
|
||||
#define E_FILNMLEN 14 /* # characters in a file name */
|
||||
#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
|
||||
|
||||
struct external_syment
|
||||
{
|
||||
union
|
||||
{
|
||||
char e_name[E_SYMNMLEN];
|
||||
|
||||
struct
|
||||
{
|
||||
char e_zeroes[4];
|
||||
char e_offset[4];
|
||||
} e;
|
||||
|
||||
} e;
|
||||
|
||||
char e_value[4];
|
||||
char e_scnum[2];
|
||||
char e_type[2];
|
||||
char e_sclass[1];
|
||||
char e_numaux[1];
|
||||
char pad2[2];
|
||||
};
|
||||
|
||||
#define N_BTMASK 017
|
||||
#define N_TMASK 060
|
||||
#define N_BTSHFT 4
|
||||
#define N_TSHIFT 2
|
||||
|
||||
/* Note that this isn't the same shape as other coffs */
|
||||
union external_auxent
|
||||
{
|
||||
struct
|
||||
{
|
||||
char x_tagndx[4]; /* str, un, or enum tag indx */
|
||||
/* 4 */
|
||||
|
||||
union
|
||||
{
|
||||
char x_fsize[4]; /* size of function */
|
||||
|
||||
struct
|
||||
{
|
||||
char x_lnno[4]; /* declaration line number */
|
||||
char x_size[4]; /* str/union/array size */
|
||||
} x_lnsz;
|
||||
|
||||
} x_misc;
|
||||
|
||||
/* 12 */
|
||||
union
|
||||
{
|
||||
struct /* if ISFCN, tag, or .bb */
|
||||
{
|
||||
char x_lnnoptr[4]; /* ptr to fcn line # */
|
||||
char x_endndx[4]; /* entry ndx past block end */
|
||||
} x_fcn;
|
||||
|
||||
struct /* if ISARY, up to 4 dimen. */
|
||||
{
|
||||
char x_dimen[E_DIMNUM][2];
|
||||
} x_ary;
|
||||
|
||||
} x_fcnary;
|
||||
/* 20 */
|
||||
|
||||
} x_sym;
|
||||
|
||||
union
|
||||
{
|
||||
char x_fname[E_FILNMLEN];
|
||||
|
||||
struct
|
||||
{
|
||||
char x_zeroes[4];
|
||||
char x_offset[4];
|
||||
} x_n;
|
||||
|
||||
} x_file;
|
||||
|
||||
struct
|
||||
{
|
||||
char x_scnlen[4]; /* section length */
|
||||
char x_nreloc[4]; /* # relocation entries */
|
||||
char x_nlinno[4]; /* # line numbers */
|
||||
} x_scn;
|
||||
|
||||
struct
|
||||
{
|
||||
char x_tvfill[4]; /* tv fill value */
|
||||
char x_tvlen[2]; /* length of .tv */
|
||||
char x_tvran[2][2]; /* tv range */
|
||||
} x_tv; /* info about .tv section (in auxent of symbol .tv)) */
|
||||
};
|
||||
|
||||
#define GET_LNSZ_SIZE(abfd, ext) \
|
||||
H_GET_32 (abfd, ext->x_sym.x_misc.x_lnsz.x_size)
|
||||
#define GET_LNSZ_LNNO(abfd, ext) \
|
||||
H_GET_32 (abfd, ext->x_sym.x_misc.x_lnsz.x_lnno)
|
||||
#define PUT_LNSZ_LNNO(abfd, in, ext) \
|
||||
H_PUT_32 (abfd, in, ext->x_sym.x_misc.x_lnsz.x_lnno)
|
||||
#define PUT_LNSZ_SIZE(abfd, in, ext) \
|
||||
H_PUT_32 (abfd, in, ext->x_sym.x_misc.x_lnsz.x_size)
|
||||
#define GET_SCN_NRELOC(abfd, ext) \
|
||||
H_GET_32 (abfd, ext->x_scn.x_nreloc)
|
||||
#define GET_SCN_NLINNO(abfd, ext) \
|
||||
H_GET_32 (abfd, ext->x_scn.x_nlinno)
|
||||
#define PUT_SCN_NRELOC(abfd, in, ext) \
|
||||
H_PUT_32 (abfd, in, ext->x_scn.x_nreloc)
|
||||
#define PUT_SCN_NLINNO(abfd, in, ext) \
|
||||
H_PUT_32 (abfd,in, ext->x_scn.x_nlinno)
|
||||
|
||||
#define SYMENT struct external_syment
|
||||
#define SYMESZ 20
|
||||
#define AUXENT union external_auxent
|
||||
#define AUXESZ 20
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
char r_offset[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 12
|
||||
|
||||
#define NO_TVNDX
|
72
include/coff/mcore.h
Normal file
72
include/coff/mcore.h
Normal file
@ -0,0 +1,72 @@
|
||||
/* Motorola MCore support for BFD.
|
||||
Copyright 1999, 2000, 2010 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* This file holds definitions specific to the MCore COFF/PE ABI. */
|
||||
|
||||
#ifndef _COFF_MORE_H
|
||||
#define _COFF_MORE_H
|
||||
|
||||
#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
||||
#define L_LNNO_SIZE 2
|
||||
#include "coff/external.h"
|
||||
|
||||
#define MCOREMAGIC 0xb00 /* I just made this up */
|
||||
|
||||
#define MCOREBADMAG(x) (((x).f_magic != MCOREMAGIC))
|
||||
|
||||
#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
|
||||
|
||||
#define IMAGE_REL_MCORE_ABSOLUTE 0x0000
|
||||
#define IMAGE_REL_MCORE_ADDR32 0x0001
|
||||
#define IMAGE_REL_MCORE_PCREL_IMM8BY4 0x0002
|
||||
#define IMAGE_REL_MCORE_PCREL_IMM11BY2 0x0003
|
||||
#define IMAGE_REL_MCORE_PCREL_IMM4BY2 0x0004
|
||||
#define IMAGE_REL_MCORE_PCREL_32 0x0005
|
||||
#define IMAGE_REL_MCORE_PCREL_JSR_IMM11BY2 0x0006
|
||||
#define IMAGE_REL_MCORE_RVA 0x0007
|
||||
|
||||
#define PEMCORE
|
||||
|
||||
#define OMAGIC 0404 /* object files, eg as output */
|
||||
#define ZMAGIC 0413 /* demand load format, eg normal ld output */
|
||||
#define STMAGIC 0401 /* target shlib */
|
||||
#define SHMAGIC 0443 /* host shlib */
|
||||
|
||||
/* From winnt.h */
|
||||
#define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b
|
||||
|
||||
/* Define some NT default values. */
|
||||
#define NT_SECTION_ALIGNMENT 0x1000
|
||||
#define NT_FILE_ALIGNMENT 0x200
|
||||
#define NT_DEF_RESERVE 0x100000
|
||||
#define NT_DEF_COMMIT 0x1000
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr [4];
|
||||
char r_symndx [4];
|
||||
char r_type [2];
|
||||
char r_offset [4];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 14
|
||||
|
||||
#endif /* __COFF_MCORE_H */
|
344
include/coff/mips.h
Normal file
344
include/coff/mips.h
Normal file
@ -0,0 +1,344 @@
|
||||
/* ECOFF support on MIPS machines.
|
||||
coff/ecoff.h must be included before this file.
|
||||
|
||||
Copyright 1999, 2004, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define DO_NOT_DEFINE_AOUTHDR
|
||||
#define L_LNNO_SIZE 4
|
||||
#include "coff/external.h"
|
||||
|
||||
/* Magic numbers are defined in coff/ecoff.h. */
|
||||
#define MIPS_ECOFF_BADMAG(x) (((x).f_magic!=MIPS_MAGIC_1) && \
|
||||
((x).f_magic!=MIPS_MAGIC_LITTLE) &&\
|
||||
((x).f_magic!=MIPS_MAGIC_BIG) && \
|
||||
((x).f_magic!=MIPS_MAGIC_LITTLE2) && \
|
||||
((x).f_magic!=MIPS_MAGIC_BIG2) && \
|
||||
((x).f_magic!=MIPS_MAGIC_LITTLE3) && \
|
||||
((x).f_magic!=MIPS_MAGIC_BIG3))
|
||||
|
||||
|
||||
/********************** AOUT "OPTIONAL HEADER" **********************/
|
||||
|
||||
typedef struct external_aouthdr
|
||||
{
|
||||
unsigned char magic[2]; /* type of file */
|
||||
unsigned char vstamp[2]; /* version stamp */
|
||||
unsigned char tsize[4]; /* text size in bytes, padded to FW bdry*/
|
||||
unsigned char dsize[4]; /* initialized data " " */
|
||||
unsigned char bsize[4]; /* uninitialized data " " */
|
||||
unsigned char entry[4]; /* entry pt. */
|
||||
unsigned char text_start[4]; /* base of text used for this file */
|
||||
unsigned char data_start[4]; /* base of data used for this file */
|
||||
unsigned char bss_start[4]; /* base of bss used for this file */
|
||||
unsigned char gprmask[4]; /* ?? */
|
||||
unsigned char cprmask[4][4]; /* ?? */
|
||||
unsigned char gp_value[4]; /* value for gp register */
|
||||
} AOUTHDR;
|
||||
|
||||
/* compute size of a header */
|
||||
|
||||
#define AOUTSZ 56
|
||||
#define AOUTHDRSZ 56
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
unsigned char r_vaddr[4];
|
||||
unsigned char r_bits[4];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 8
|
||||
|
||||
/* MIPS ECOFF uses a packed 8 byte format for relocs. These constants
|
||||
are used to unpack the r_bits field. */
|
||||
|
||||
#define RELOC_BITS0_SYMNDX_SH_LEFT_BIG 16
|
||||
#define RELOC_BITS0_SYMNDX_SH_LEFT_LITTLE 0
|
||||
|
||||
#define RELOC_BITS1_SYMNDX_SH_LEFT_BIG 8
|
||||
#define RELOC_BITS1_SYMNDX_SH_LEFT_LITTLE 8
|
||||
|
||||
#define RELOC_BITS2_SYMNDX_SH_LEFT_BIG 0
|
||||
#define RELOC_BITS2_SYMNDX_SH_LEFT_LITTLE 16
|
||||
|
||||
/* Originally, ECOFF used four bits for the reloc type and had three
|
||||
reserved bits. Irix 4 added another bit for the reloc type, which
|
||||
was easy because it was big endian and one of the spare bits became
|
||||
the new most significant bit. To make this also work for little
|
||||
endian ECOFF, we need to wrap one of the reserved bits around to
|
||||
become the most significant bit of the reloc type. */
|
||||
#define RELOC_BITS3_TYPE_BIG 0x3E
|
||||
#define RELOC_BITS3_TYPE_SH_BIG 1
|
||||
#define RELOC_BITS3_TYPE_LITTLE 0x78
|
||||
#define RELOC_BITS3_TYPE_SH_LITTLE 3
|
||||
#define RELOC_BITS3_TYPEHI_LITTLE 0x04
|
||||
#define RELOC_BITS3_TYPEHI_SH_LITTLE 2
|
||||
|
||||
#define RELOC_BITS3_EXTERN_BIG 0x01
|
||||
#define RELOC_BITS3_EXTERN_LITTLE 0x80
|
||||
|
||||
/* The r_type field in a reloc is one of the following values. I
|
||||
don't know if any other values can appear. These seem to be all
|
||||
that occur in the Ultrix 4.2 libraries. */
|
||||
#define MIPS_R_IGNORE 0
|
||||
#define MIPS_R_REFHALF 1
|
||||
#define MIPS_R_REFWORD 2
|
||||
#define MIPS_R_JMPADDR 3
|
||||
#define MIPS_R_REFHI 4
|
||||
#define MIPS_R_REFLO 5
|
||||
#define MIPS_R_GPREL 6
|
||||
#define MIPS_R_LITERAL 7
|
||||
|
||||
/* FIXME: This relocation is used (internally only) to represent branches
|
||||
when assembling. It should never appear in output files, and
|
||||
be removed. (It used to be used for embedded-PIC support.) */
|
||||
#define MIPS_R_PCREL16 12
|
||||
|
||||
/********************** STABS **********************/
|
||||
|
||||
#define MIPS_IS_STAB ECOFF_IS_STAB
|
||||
#define MIPS_MARK_STAB ECOFF_MARK_STAB
|
||||
#define MIPS_UNMARK_STAB ECOFF_UNMARK_STAB
|
||||
|
||||
/********************** SYMBOLIC INFORMATION **********************/
|
||||
|
||||
/* Written by John Gilmore. */
|
||||
|
||||
/* ECOFF uses COFF-like section structures, but its own symbol format.
|
||||
This file defines the symbol format in fields whose size and alignment
|
||||
will not vary on different host systems. */
|
||||
|
||||
/* File header as a set of bytes */
|
||||
|
||||
struct hdr_ext
|
||||
{
|
||||
unsigned char h_magic[2];
|
||||
unsigned char h_vstamp[2];
|
||||
unsigned char h_ilineMax[4];
|
||||
unsigned char h_cbLine[4];
|
||||
unsigned char h_cbLineOffset[4];
|
||||
unsigned char h_idnMax[4];
|
||||
unsigned char h_cbDnOffset[4];
|
||||
unsigned char h_ipdMax[4];
|
||||
unsigned char h_cbPdOffset[4];
|
||||
unsigned char h_isymMax[4];
|
||||
unsigned char h_cbSymOffset[4];
|
||||
unsigned char h_ioptMax[4];
|
||||
unsigned char h_cbOptOffset[4];
|
||||
unsigned char h_iauxMax[4];
|
||||
unsigned char h_cbAuxOffset[4];
|
||||
unsigned char h_issMax[4];
|
||||
unsigned char h_cbSsOffset[4];
|
||||
unsigned char h_issExtMax[4];
|
||||
unsigned char h_cbSsExtOffset[4];
|
||||
unsigned char h_ifdMax[4];
|
||||
unsigned char h_cbFdOffset[4];
|
||||
unsigned char h_crfd[4];
|
||||
unsigned char h_cbRfdOffset[4];
|
||||
unsigned char h_iextMax[4];
|
||||
unsigned char h_cbExtOffset[4];
|
||||
};
|
||||
|
||||
/* File descriptor external record */
|
||||
|
||||
struct fdr_ext
|
||||
{
|
||||
unsigned char f_adr[4];
|
||||
unsigned char f_rss[4];
|
||||
unsigned char f_issBase[4];
|
||||
unsigned char f_cbSs[4];
|
||||
unsigned char f_isymBase[4];
|
||||
unsigned char f_csym[4];
|
||||
unsigned char f_ilineBase[4];
|
||||
unsigned char f_cline[4];
|
||||
unsigned char f_ioptBase[4];
|
||||
unsigned char f_copt[4];
|
||||
unsigned char f_ipdFirst[2];
|
||||
unsigned char f_cpd[2];
|
||||
unsigned char f_iauxBase[4];
|
||||
unsigned char f_caux[4];
|
||||
unsigned char f_rfdBase[4];
|
||||
unsigned char f_crfd[4];
|
||||
unsigned char f_bits1[1];
|
||||
unsigned char f_bits2[3];
|
||||
unsigned char f_cbLineOffset[4];
|
||||
unsigned char f_cbLine[4];
|
||||
};
|
||||
|
||||
#define FDR_BITS1_LANG_BIG 0xF8
|
||||
#define FDR_BITS1_LANG_SH_BIG 3
|
||||
#define FDR_BITS1_LANG_LITTLE 0x1F
|
||||
#define FDR_BITS1_LANG_SH_LITTLE 0
|
||||
|
||||
#define FDR_BITS1_FMERGE_BIG 0x04
|
||||
#define FDR_BITS1_FMERGE_LITTLE 0x20
|
||||
|
||||
#define FDR_BITS1_FREADIN_BIG 0x02
|
||||
#define FDR_BITS1_FREADIN_LITTLE 0x40
|
||||
|
||||
#define FDR_BITS1_FBIGENDIAN_BIG 0x01
|
||||
#define FDR_BITS1_FBIGENDIAN_LITTLE 0x80
|
||||
|
||||
#define FDR_BITS2_GLEVEL_BIG 0xC0
|
||||
#define FDR_BITS2_GLEVEL_SH_BIG 6
|
||||
#define FDR_BITS2_GLEVEL_LITTLE 0x03
|
||||
#define FDR_BITS2_GLEVEL_SH_LITTLE 0
|
||||
|
||||
/* We ignore the `reserved' field in bits2. */
|
||||
|
||||
/* Procedure descriptor external record */
|
||||
|
||||
struct pdr_ext
|
||||
{
|
||||
unsigned char p_adr[4];
|
||||
unsigned char p_isym[4];
|
||||
unsigned char p_iline[4];
|
||||
unsigned char p_regmask[4];
|
||||
unsigned char p_regoffset[4];
|
||||
unsigned char p_iopt[4];
|
||||
unsigned char p_fregmask[4];
|
||||
unsigned char p_fregoffset[4];
|
||||
unsigned char p_frameoffset[4];
|
||||
unsigned char p_framereg[2];
|
||||
unsigned char p_pcreg[2];
|
||||
unsigned char p_lnLow[4];
|
||||
unsigned char p_lnHigh[4];
|
||||
unsigned char p_cbLineOffset[4];
|
||||
};
|
||||
|
||||
/* Runtime procedure table */
|
||||
|
||||
struct rpdr_ext
|
||||
{
|
||||
unsigned char p_adr[4];
|
||||
unsigned char p_regmask[4];
|
||||
unsigned char p_regoffset[4];
|
||||
unsigned char p_fregmask[4];
|
||||
unsigned char p_fregoffset[4];
|
||||
unsigned char p_frameoffset[4];
|
||||
unsigned char p_framereg[2];
|
||||
unsigned char p_pcreg[2];
|
||||
unsigned char p_irpss[4];
|
||||
unsigned char p_reserved[4];
|
||||
unsigned char p_exception_info[4];
|
||||
};
|
||||
|
||||
/* Line numbers */
|
||||
|
||||
struct line_ext
|
||||
{
|
||||
unsigned char l_line[4];
|
||||
};
|
||||
|
||||
/* Symbol external record */
|
||||
|
||||
struct sym_ext
|
||||
{
|
||||
unsigned char s_iss[4];
|
||||
unsigned char s_value[4];
|
||||
unsigned char s_bits1[1];
|
||||
unsigned char s_bits2[1];
|
||||
unsigned char s_bits3[1];
|
||||
unsigned char s_bits4[1];
|
||||
};
|
||||
|
||||
#define SYM_BITS1_ST_BIG 0xFC
|
||||
#define SYM_BITS1_ST_SH_BIG 2
|
||||
#define SYM_BITS1_ST_LITTLE 0x3F
|
||||
#define SYM_BITS1_ST_SH_LITTLE 0
|
||||
|
||||
#define SYM_BITS1_SC_BIG 0x03
|
||||
#define SYM_BITS1_SC_SH_LEFT_BIG 3
|
||||
#define SYM_BITS1_SC_LITTLE 0xC0
|
||||
#define SYM_BITS1_SC_SH_LITTLE 6
|
||||
|
||||
#define SYM_BITS2_SC_BIG 0xE0
|
||||
#define SYM_BITS2_SC_SH_BIG 5
|
||||
#define SYM_BITS2_SC_LITTLE 0x07
|
||||
#define SYM_BITS2_SC_SH_LEFT_LITTLE 2
|
||||
|
||||
#define SYM_BITS2_RESERVED_BIG 0x10
|
||||
#define SYM_BITS2_RESERVED_LITTLE 0x08
|
||||
|
||||
#define SYM_BITS2_INDEX_BIG 0x0F
|
||||
#define SYM_BITS2_INDEX_SH_LEFT_BIG 16
|
||||
#define SYM_BITS2_INDEX_LITTLE 0xF0
|
||||
#define SYM_BITS2_INDEX_SH_LITTLE 4
|
||||
|
||||
#define SYM_BITS3_INDEX_SH_LEFT_BIG 8
|
||||
#define SYM_BITS3_INDEX_SH_LEFT_LITTLE 4
|
||||
|
||||
#define SYM_BITS4_INDEX_SH_LEFT_BIG 0
|
||||
#define SYM_BITS4_INDEX_SH_LEFT_LITTLE 12
|
||||
|
||||
/* External symbol external record */
|
||||
|
||||
struct ext_ext
|
||||
{
|
||||
unsigned char es_bits1[1];
|
||||
unsigned char es_bits2[1];
|
||||
unsigned char es_ifd[2];
|
||||
struct sym_ext es_asym;
|
||||
};
|
||||
|
||||
#define EXT_BITS1_JMPTBL_BIG 0x80
|
||||
#define EXT_BITS1_JMPTBL_LITTLE 0x01
|
||||
|
||||
#define EXT_BITS1_COBOL_MAIN_BIG 0x40
|
||||
#define EXT_BITS1_COBOL_MAIN_LITTLE 0x02
|
||||
|
||||
#define EXT_BITS1_WEAKEXT_BIG 0x20
|
||||
#define EXT_BITS1_WEAKEXT_LITTLE 0x04
|
||||
|
||||
/* Dense numbers external record */
|
||||
|
||||
struct dnr_ext
|
||||
{
|
||||
unsigned char d_rfd[4];
|
||||
unsigned char d_index[4];
|
||||
};
|
||||
|
||||
/* Relative file descriptor */
|
||||
|
||||
struct rfd_ext
|
||||
{
|
||||
unsigned char rfd[4];
|
||||
};
|
||||
|
||||
/* Optimizer symbol external record */
|
||||
|
||||
struct opt_ext
|
||||
{
|
||||
unsigned char o_bits1[1];
|
||||
unsigned char o_bits2[1];
|
||||
unsigned char o_bits3[1];
|
||||
unsigned char o_bits4[1];
|
||||
struct rndx_ext o_rndx;
|
||||
unsigned char o_offset[4];
|
||||
};
|
||||
|
||||
#define OPT_BITS2_VALUE_SH_LEFT_BIG 16
|
||||
#define OPT_BITS2_VALUE_SH_LEFT_LITTLE 0
|
||||
|
||||
#define OPT_BITS3_VALUE_SH_LEFT_BIG 8
|
||||
#define OPT_BITS3_VALUE_SH_LEFT_LITTLE 8
|
||||
|
||||
#define OPT_BITS4_VALUE_SH_LEFT_BIG 0
|
||||
#define OPT_BITS4_VALUE_SH_LEFT_LITTLE 16
|
67
include/coff/mipspe.h
Normal file
67
include/coff/mipspe.h
Normal file
@ -0,0 +1,67 @@
|
||||
/* coff information for Windows CE with MIPS VR4111
|
||||
|
||||
Copyright 2000, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define L_LNNO_SIZE 2
|
||||
#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
||||
#include "coff/external.h"
|
||||
|
||||
#define MIPS_ARCH_MAGIC_WINCE 0x0166 /* Windows CE - little endian */
|
||||
#define MIPS_PE_MAGIC 0x010b
|
||||
|
||||
#define MIPSBADMAG(x) ((x).f_magic != MIPS_ARCH_MAGIC_WINCE)
|
||||
|
||||
/* define some NT default values */
|
||||
/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
|
||||
#define NT_SECTION_ALIGNMENT 0x1000
|
||||
#define NT_FILE_ALIGNMENT 0x200
|
||||
#define NT_DEF_RESERVE 0x100000
|
||||
#define NT_DEF_COMMIT 0x1000
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
/* The external reloc has an offset field, because some of the reloc
|
||||
types on the h8 don't have room in the instruction for the entire
|
||||
offset - eg the strange jump and high page addressing modes. */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10
|
||||
|
||||
/* MIPS PE relocation types. */
|
||||
|
||||
#define MIPS_R_ABSOLUTE 0 /* ignored */
|
||||
#define MIPS_R_REFHALF 1
|
||||
#define MIPS_R_REFWORD 2
|
||||
#define MIPS_R_JMPADDR 3
|
||||
#define MIPS_R_REFHI 4 /* PAIR follows */
|
||||
#define MIPS_R_REFLO 5
|
||||
#define MIPS_R_GPREL 6
|
||||
#define MIPS_R_LITERAL 7 /* same as GPREL */
|
||||
#define MIPS_R_SECTION 10
|
||||
#define MIPS_R_SECREL 11
|
||||
#define MIPS_R_SECRELLO 12
|
||||
#define MIPS_R_SECRELHI 13 /* PAIR follows */
|
||||
#define MIPS_R_RVA 34 /* 0x22 */
|
||||
#define MIPS_R_PAIR 37 /* 0x25 - symndx is really a signed 16-bit addend */
|
288
include/coff/or32.h
Normal file
288
include/coff/or32.h
Normal file
@ -0,0 +1,288 @@
|
||||
/* COFF specification for OpenRISC 1000.
|
||||
Copyright (C) 1993-2000, 2002, 2010 Free Software Foundation, Inc.
|
||||
Contributed by David Wood @ New York University.
|
||||
Modified by Johan Rydberg, <johan.rydberg@netinsight.se>
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef OR32
|
||||
# define OR32
|
||||
#endif
|
||||
|
||||
/* File Header and related definitions. */
|
||||
struct external_filehdr
|
||||
{
|
||||
char f_magic[2]; /* magic number */
|
||||
char f_nscns[2]; /* number of sections */
|
||||
char f_timdat[4]; /* time & date stamp */
|
||||
char f_symptr[4]; /* file pointer to symtab */
|
||||
char f_nsyms[4]; /* number of symtab entries */
|
||||
char f_opthdr[2]; /* sizeof(optional hdr) */
|
||||
char f_flags[2]; /* flags */
|
||||
};
|
||||
|
||||
#define FILHDR struct external_filehdr
|
||||
#define FILHSZ 20
|
||||
|
||||
/* Magic numbers for OpenRISC 1000. As it is know we use the
|
||||
numbers for Am29000.
|
||||
|
||||
(AT&T will assign the "real" magic number). */
|
||||
#define SIPFBOMAGIC 0572 /* Am29000 (Byte 0 is MSB). */
|
||||
#define SIPRBOMAGIC 0573 /* Am29000 (Byte 0 is LSB). */
|
||||
|
||||
#define OR32_MAGIC_BIG SIPFBOMAGIC
|
||||
#define OR32_MAGIC_LITTLE SIPRBOMAGIC
|
||||
#define OR32BADMAG(x) (((x).f_magic!=OR32_MAGIC_BIG) && \
|
||||
((x).f_magic!=OR32_MAGIC_LITTLE))
|
||||
|
||||
#define OMAGIC OR32_MAGIC_BIG
|
||||
|
||||
/* Optional (a.out) header. */
|
||||
typedef struct external_aouthdr
|
||||
{
|
||||
char magic[2]; /* type of file */
|
||||
char vstamp[2]; /* version stamp */
|
||||
char tsize[4]; /* text size in bytes, padded to FW bdry */
|
||||
char dsize[4]; /* initialized data " " */
|
||||
char bsize[4]; /* uninitialized data " " */
|
||||
char entry[4]; /* entry pt. */
|
||||
char text_start[4]; /* base of text used for this file */
|
||||
char data_start[4]; /* base of data used for this file */
|
||||
} AOUTHDR;
|
||||
|
||||
#define AOUTSZ 28
|
||||
#define AOUTHDRSZ 28
|
||||
|
||||
/* aouthdr magic numbers. */
|
||||
#define NMAGIC 0410 /* separate i/d executable. */
|
||||
#define SHMAGIC 0406 /* NYU/Ultra3 shared data executable
|
||||
(writable text). */
|
||||
|
||||
#define _ETEXT "_etext"
|
||||
|
||||
/* Section header and related definitions. */
|
||||
struct external_scnhdr
|
||||
{
|
||||
char s_name[8]; /* section name */
|
||||
char s_paddr[4]; /* physical address, aliased s_nlib */
|
||||
char s_vaddr[4]; /* virtual address */
|
||||
char s_size[4]; /* section size */
|
||||
char s_scnptr[4]; /* file ptr to raw data for section */
|
||||
char s_relptr[4]; /* file ptr to relocation */
|
||||
char s_lnnoptr[4]; /* file ptr to line numbers */
|
||||
char s_nreloc[2]; /* number of relocation entries */
|
||||
char s_nlnno[2]; /* number of line number entries */
|
||||
char s_flags[4]; /* flags */
|
||||
};
|
||||
|
||||
#define SCNHDR struct external_scnhdr
|
||||
#define SCNHSZ 40
|
||||
|
||||
/* Names of "special" sections: */
|
||||
#define _TEXT ".text"
|
||||
#define _DATA ".data"
|
||||
#define _BSS ".bss"
|
||||
#define _LIT ".lit"
|
||||
|
||||
/* Section types - with additional section type for global
|
||||
registers which will be relocatable for the OpenRISC 1000.
|
||||
|
||||
In instances where it is necessary for a linker to produce an
|
||||
output file which contains text or data not based at virtual
|
||||
address 0, e.g. for a ROM, then the linker should accept
|
||||
address base information as command input and use PAD sections
|
||||
to skip over unused addresses. */
|
||||
#define STYP_BSSREG 0x1200 /* Global register area (like STYP_INFO) */
|
||||
#define STYP_ENVIR 0x2200 /* Environment (like STYP_INFO) */
|
||||
#define STYP_ABS 0x4000 /* Absolute (allocated, not reloc, loaded) */
|
||||
|
||||
/* Relocation information declaration and related definitions: */
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4]; /* (virtual) address of reference */
|
||||
char r_symndx[4]; /* index into symbol table */
|
||||
char r_type[2]; /* relocation type */
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10 /* sizeof (RELOC) */
|
||||
|
||||
/* Relocation types for the OpenRISC 1000: */
|
||||
|
||||
#define R_ABS 0 /* reference is absolute */
|
||||
#define R_IREL 030 /* instruction relative (jmp/call) */
|
||||
#define R_IABS 031 /* instruction absolute (jmp/call) */
|
||||
#define R_ILOHALF 032 /* instruction low half (const) */
|
||||
#define R_IHIHALF 033 /* instruction high half (consth) part 1 */
|
||||
#define R_IHCONST 034 /* instruction high half (consth) part 2 */
|
||||
/* constant offset of R_IHIHALF relocation */
|
||||
#define R_BYTE 035 /* relocatable byte value */
|
||||
#define R_HWORD 036 /* relocatable halfword value */
|
||||
#define R_WORD 037 /* relocatable word value */
|
||||
|
||||
#define R_IGLBLRC 040 /* instruction global register RC */
|
||||
#define R_IGLBLRA 041 /* instruction global register RA */
|
||||
#define R_IGLBLRB 042 /* instruction global register RB */
|
||||
|
||||
/*
|
||||
NOTE:
|
||||
All the "I" forms refer to 29000 instruction formats. The linker is
|
||||
expected to know how the numeric information is split and/or aligned
|
||||
within the instruction word(s). R_BYTE works for instructions, too.
|
||||
|
||||
If the parameter to a CONSTH instruction is a relocatable type, two
|
||||
relocation records are written. The first has an r_type of R_IHIHALF
|
||||
(33 octal) and a normal r_vaddr and r_symndx. The second relocation
|
||||
record has an r_type of R_IHCONST (34 octal), a normal r_vaddr (which
|
||||
is redundant), and an r_symndx containing the 32-bit constant offset
|
||||
to the relocation instead of the actual symbol table index. This
|
||||
second record is always written, even if the constant offset is zero.
|
||||
The constant fields of the instruction are set to zero. */
|
||||
|
||||
/* Line number entry declaration and related definitions: */
|
||||
struct external_lineno
|
||||
{
|
||||
union
|
||||
{
|
||||
char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
|
||||
char l_paddr[4]; /* (physical) address of line number */
|
||||
}
|
||||
l_addr;
|
||||
|
||||
char l_lnno[2]; /* line number */
|
||||
};
|
||||
|
||||
#define LINENO struct external_lineno
|
||||
#define LINESZ 6 /* sizeof (LINENO) */
|
||||
|
||||
/* Symbol entry declaration and related definitions: */
|
||||
#define E_SYMNMLEN 8 /* Number of characters in a symbol name */
|
||||
|
||||
struct external_syment
|
||||
{
|
||||
union
|
||||
{
|
||||
char e_name[E_SYMNMLEN];
|
||||
struct
|
||||
{
|
||||
char e_zeroes[4];
|
||||
char e_offset[4];
|
||||
}
|
||||
e;
|
||||
}
|
||||
e;
|
||||
|
||||
char e_value[4];
|
||||
char e_scnum[2];
|
||||
char e_type[2];
|
||||
char e_sclass[1];
|
||||
char e_numaux[1];
|
||||
};
|
||||
|
||||
#define SYMENT struct external_syment
|
||||
#define SYMESZ 18
|
||||
|
||||
/* Storage class definitions - new classes for global registers: */
|
||||
#define C_GLBLREG 19 /* global register */
|
||||
#define C_EXTREG 20 /* external global register */
|
||||
#define C_DEFREG 21 /* ext. def. of global register */
|
||||
|
||||
/* Derived symbol mask/shifts: */
|
||||
#define N_BTMASK (0xf)
|
||||
#define N_BTSHFT (4)
|
||||
#define N_TMASK (0x30)
|
||||
#define N_TSHIFT (2)
|
||||
|
||||
/* Auxiliary symbol table entry declaration and related
|
||||
definitions. */
|
||||
#define E_FILNMLEN 14 /* # characters in a file name */
|
||||
#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
|
||||
|
||||
union external_auxent
|
||||
{
|
||||
struct
|
||||
{
|
||||
char x_tagndx[4]; /* str, un, or enum tag indx */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
char x_lnno[2]; /* declaration line number */
|
||||
char x_size[2]; /* str/union/array size */
|
||||
}
|
||||
x_lnsz;
|
||||
|
||||
char x_fsize[4]; /* size of function */
|
||||
}
|
||||
x_misc;
|
||||
|
||||
union
|
||||
{
|
||||
struct /* if ISFCN, tag, or .bb */
|
||||
{
|
||||
char x_lnnoptr[4]; /* ptr to fcn line # */
|
||||
char x_endndx[4]; /* entry ndx past block end */
|
||||
}
|
||||
x_fcn;
|
||||
|
||||
struct /* if ISARY, up to 4 dimen. */
|
||||
{
|
||||
char x_dimen[E_DIMNUM][2];
|
||||
}
|
||||
x_ary;
|
||||
}
|
||||
x_fcnary;
|
||||
|
||||
char x_tvndx[2]; /* tv index */
|
||||
}
|
||||
x_sym;
|
||||
|
||||
union
|
||||
{
|
||||
char x_fname[E_FILNMLEN];
|
||||
|
||||
struct
|
||||
{
|
||||
char x_zeroes[4];
|
||||
char x_offset[4];
|
||||
}
|
||||
x_n;
|
||||
}
|
||||
x_file;
|
||||
|
||||
struct
|
||||
{
|
||||
char x_scnlen[4]; /* section length */
|
||||
char x_nreloc[2]; /* # relocation entries */
|
||||
char x_nlinno[2]; /* # line numbers */
|
||||
}
|
||||
x_scn;
|
||||
|
||||
struct
|
||||
{
|
||||
char x_tvfill[4]; /* tv fill value */
|
||||
char x_tvlen[2]; /* length of .tv */
|
||||
char x_tvran[2][2]; /* tv range */
|
||||
}
|
||||
x_tv; /* info about .tv section
|
||||
(in auxent of symbol .tv)) */
|
||||
};
|
||||
|
||||
#define AUXENT union external_auxent
|
||||
#define AUXESZ 18
|
512
include/coff/pe.h
Normal file
512
include/coff/pe.h
Normal file
@ -0,0 +1,512 @@
|
||||
/* pe.h - PE COFF header information
|
||||
|
||||
Copyright 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2009, 2010
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
#ifndef _PE_H
|
||||
#define _PE_H
|
||||
|
||||
/* NT specific file attributes. */
|
||||
#define IMAGE_FILE_RELOCS_STRIPPED 0x0001
|
||||
#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
|
||||
#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
|
||||
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
|
||||
#define IMAGE_FILE_AGGRESSIVE_WS_TRIM 0x0010
|
||||
#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
|
||||
#define IMAGE_FILE_16BIT_MACHINE 0x0040
|
||||
#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
|
||||
#define IMAGE_FILE_32BIT_MACHINE 0x0100
|
||||
#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
|
||||
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
|
||||
#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
|
||||
#define IMAGE_FILE_SYSTEM 0x1000
|
||||
#define IMAGE_FILE_DLL 0x2000
|
||||
#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
|
||||
#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
|
||||
|
||||
/* DllCharacteristics flag bits. The inconsistent naming may seem
|
||||
odd, but that is how they are defined in the PE specification. */
|
||||
#define IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE 0x0040
|
||||
#define IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY 0x0080
|
||||
#define IMAGE_DLL_CHARACTERISTICS_NX_COMPAT 0x0100
|
||||
#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
|
||||
#define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
|
||||
#define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
|
||||
#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
|
||||
#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
|
||||
|
||||
/* Additional flags to be set for section headers to allow the NT loader to
|
||||
read and write to the section data (to replace the addresses of data in
|
||||
dlls for one thing); also to execute the section in .text's case. */
|
||||
#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
|
||||
#define IMAGE_SCN_MEM_EXECUTE 0x20000000
|
||||
#define IMAGE_SCN_MEM_READ 0x40000000
|
||||
#define IMAGE_SCN_MEM_WRITE 0x80000000
|
||||
|
||||
/* Section characteristics added for ppc-nt. */
|
||||
|
||||
#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved. */
|
||||
|
||||
#define IMAGE_SCN_CNT_CODE 0x00000020 /* Section contains code. */
|
||||
#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 /* Section contains initialized data. */
|
||||
#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 /* Section contains uninitialized data. */
|
||||
|
||||
#define IMAGE_SCN_LNK_OTHER 0x00000100 /* Reserved. */
|
||||
#define IMAGE_SCN_LNK_INFO 0x00000200 /* Section contains comments or some other type of information. */
|
||||
#define IMAGE_SCN_LNK_REMOVE 0x00000800 /* Section contents will not become part of image. */
|
||||
#define IMAGE_SCN_LNK_COMDAT 0x00001000 /* Section contents comdat. */
|
||||
|
||||
#define IMAGE_SCN_MEM_FARDATA 0x00008000
|
||||
|
||||
#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
|
||||
#define IMAGE_SCN_MEM_16BIT 0x00020000
|
||||
#define IMAGE_SCN_MEM_LOCKED 0x00040000
|
||||
#define IMAGE_SCN_MEM_PRELOAD 0x00080000
|
||||
|
||||
/* Bit position in the s_flags field where the alignment values start. */
|
||||
#define IMAGE_SCN_ALIGN_POWER_BIT_POS 20
|
||||
#define IMAGE_SCN_ALIGN_POWER_BIT_MASK 0x00f00000
|
||||
#define IMAGE_SCN_ALIGN_POWER_NUM(val) \
|
||||
(((val) >> IMAGE_SCN_ALIGN_POWER_BIT_POS) - 1)
|
||||
#define IMAGE_SCN_ALIGN_POWER_CONST(val) \
|
||||
(((val) + 1) << IMAGE_SCN_ALIGN_POWER_BIT_POS)
|
||||
|
||||
#define IMAGE_SCN_ALIGN_1BYTES IMAGE_SCN_ALIGN_POWER_CONST (0)
|
||||
#define IMAGE_SCN_ALIGN_2BYTES IMAGE_SCN_ALIGN_POWER_CONST (1)
|
||||
#define IMAGE_SCN_ALIGN_4BYTES IMAGE_SCN_ALIGN_POWER_CONST (2)
|
||||
#define IMAGE_SCN_ALIGN_8BYTES IMAGE_SCN_ALIGN_POWER_CONST (3)
|
||||
/* Default alignment if no others are specified. */
|
||||
#define IMAGE_SCN_ALIGN_16BYTES IMAGE_SCN_ALIGN_POWER_CONST (4)
|
||||
#define IMAGE_SCN_ALIGN_32BYTES IMAGE_SCN_ALIGN_POWER_CONST (5)
|
||||
#define IMAGE_SCN_ALIGN_64BYTES IMAGE_SCN_ALIGN_POWER_CONST (6)
|
||||
#define IMAGE_SCN_ALIGN_128BYTES IMAGE_SCN_ALIGN_POWER_CONST (7)
|
||||
#define IMAGE_SCN_ALIGN_256BYTES IMAGE_SCN_ALIGN_POWER_CONST (8)
|
||||
#define IMAGE_SCN_ALIGN_512BYTES IMAGE_SCN_ALIGN_POWER_CONST (9)
|
||||
#define IMAGE_SCN_ALIGN_1024BYTES IMAGE_SCN_ALIGN_POWER_CONST (10)
|
||||
#define IMAGE_SCN_ALIGN_2048BYTES IMAGE_SCN_ALIGN_POWER_CONST (11)
|
||||
#define IMAGE_SCN_ALIGN_4096BYTES IMAGE_SCN_ALIGN_POWER_CONST (12)
|
||||
#define IMAGE_SCN_ALIGN_8192BYTES IMAGE_SCN_ALIGN_POWER_CONST (13)
|
||||
|
||||
/* Encode alignment power into IMAGE_SCN_ALIGN bits of s_flags */
|
||||
#define COFF_ENCODE_ALIGNMENT(SECTION, ALIGNMENT_POWER) \
|
||||
((SECTION).s_flags |= IMAGE_SCN_ALIGN_POWER_CONST ((ALIGNMENT_POWER)))
|
||||
|
||||
#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 /* Section contains extended relocations. */
|
||||
#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 /* Section is not cachable. */
|
||||
#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 /* Section is not pageable. */
|
||||
#define IMAGE_SCN_MEM_SHARED 0x10000000 /* Section is shareable. */
|
||||
|
||||
/* COMDAT selection codes. */
|
||||
|
||||
#define IMAGE_COMDAT_SELECT_NODUPLICATES (1) /* Warn if duplicates. */
|
||||
#define IMAGE_COMDAT_SELECT_ANY (2) /* No warning. */
|
||||
#define IMAGE_COMDAT_SELECT_SAME_SIZE (3) /* Warn if different size. */
|
||||
#define IMAGE_COMDAT_SELECT_EXACT_MATCH (4) /* Warn if different. */
|
||||
#define IMAGE_COMDAT_SELECT_ASSOCIATIVE (5) /* Base on other section. */
|
||||
|
||||
/* Machine numbers. */
|
||||
|
||||
#define IMAGE_FILE_MACHINE_UNKNOWN 0x0000
|
||||
#define IMAGE_FILE_MACHINE_ALPHA 0x0184
|
||||
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284
|
||||
#define IMAGE_FILE_MACHINE_AM33 0x01d3
|
||||
#define IMAGE_FILE_MACHINE_AMD64 0x8664
|
||||
#define IMAGE_FILE_MACHINE_ARM 0x01c0
|
||||
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
|
||||
#define IMAGE_FILE_MACHINE_CEE 0xc0ee
|
||||
#define IMAGE_FILE_MACHINE_CEF 0x0cef
|
||||
#define IMAGE_FILE_MACHINE_EBC 0x0ebc
|
||||
#define IMAGE_FILE_MACHINE_I386 0x014c
|
||||
#define IMAGE_FILE_MACHINE_IA64 0x0200
|
||||
#define IMAGE_FILE_MACHINE_M32R 0x9041
|
||||
#define IMAGE_FILE_MACHINE_M68K 0x0268
|
||||
#define IMAGE_FILE_MACHINE_MIPS16 0x0266
|
||||
#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
|
||||
#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
|
||||
#define IMAGE_FILE_MACHINE_POWERPC 0x01f0
|
||||
#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
|
||||
#define IMAGE_FILE_MACHINE_R10000 0x0168
|
||||
#define IMAGE_FILE_MACHINE_R3000 0x0162
|
||||
#define IMAGE_FILE_MACHINE_R4000 0x0166
|
||||
#define IMAGE_FILE_MACHINE_SH3 0x01a2
|
||||
#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
|
||||
#define IMAGE_FILE_MACHINE_SH3E 0x01a4
|
||||
#define IMAGE_FILE_MACHINE_SH4 0x01a6
|
||||
#define IMAGE_FILE_MACHINE_SH5 0x01a8
|
||||
#define IMAGE_FILE_MACHINE_THUMB 0x01c2
|
||||
#define IMAGE_FILE_MACHINE_TRICORE 0x0520
|
||||
#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
|
||||
#define IMAGE_FILE_MACHINE_AMD64 0x8664
|
||||
|
||||
#define IMAGE_SUBSYSTEM_UNKNOWN 0
|
||||
#define IMAGE_SUBSYSTEM_NATIVE 1
|
||||
#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
|
||||
#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
|
||||
#define IMAGE_SUBSYSTEM_POSIX_CUI 7
|
||||
#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
|
||||
#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
|
||||
#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
|
||||
#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
|
||||
#define IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER 13
|
||||
#define IMAGE_SUBSYSTEM_XBOX 14
|
||||
|
||||
/* Magic values that are true for all dos/nt implementations. */
|
||||
#define DOSMAGIC 0x5a4d
|
||||
#define NT_SIGNATURE 0x00004550
|
||||
|
||||
/* NT allows long filenames, we want to accommodate this.
|
||||
This may break some of the bfd functions. */
|
||||
#undef FILNMLEN
|
||||
#define FILNMLEN 18 /* # characters in a file name. */
|
||||
|
||||
struct external_PEI_DOS_hdr
|
||||
{
|
||||
/* DOS header fields - always at offset zero in the EXE file. */
|
||||
char e_magic[2]; /* Magic number, 0x5a4d. */
|
||||
char e_cblp[2]; /* Bytes on last page of file, 0x90. */
|
||||
char e_cp[2]; /* Pages in file, 0x3. */
|
||||
char e_crlc[2]; /* Relocations, 0x0. */
|
||||
char e_cparhdr[2]; /* Size of header in paragraphs, 0x4. */
|
||||
char e_minalloc[2]; /* Minimum extra paragraphs needed, 0x0. */
|
||||
char e_maxalloc[2]; /* Maximum extra paragraphs needed, 0xFFFF. */
|
||||
char e_ss[2]; /* Initial (relative) SS value, 0x0. */
|
||||
char e_sp[2]; /* Initial SP value, 0xb8. */
|
||||
char e_csum[2]; /* Checksum, 0x0. */
|
||||
char e_ip[2]; /* Initial IP value, 0x0. */
|
||||
char e_cs[2]; /* Initial (relative) CS value, 0x0. */
|
||||
char e_lfarlc[2]; /* File address of relocation table, 0x40. */
|
||||
char e_ovno[2]; /* Overlay number, 0x0. */
|
||||
char e_res[4][2]; /* Reserved words, all 0x0. */
|
||||
char e_oemid[2]; /* OEM identifier (for e_oeminfo), 0x0. */
|
||||
char e_oeminfo[2]; /* OEM information; e_oemid specific, 0x0. */
|
||||
char e_res2[10][2]; /* Reserved words, all 0x0. */
|
||||
char e_lfanew[4]; /* File address of new exe header, usually 0x80. */
|
||||
char dos_message[16][4]; /* Other stuff, always follow DOS header. */
|
||||
};
|
||||
|
||||
struct external_PEI_IMAGE_hdr
|
||||
{
|
||||
char nt_signature[4]; /* required NT signature, 0x4550. */
|
||||
|
||||
/* From standard header. */
|
||||
char f_magic[2]; /* Magic number. */
|
||||
char f_nscns[2]; /* Number of sections. */
|
||||
char f_timdat[4]; /* Time & date stamp. */
|
||||
char f_symptr[4]; /* File pointer to symtab. */
|
||||
char f_nsyms[4]; /* Number of symtab entries. */
|
||||
char f_opthdr[2]; /* Sizeof(optional hdr). */
|
||||
char f_flags[2]; /* Flags. */
|
||||
};
|
||||
|
||||
struct external_PEI_filehdr
|
||||
{
|
||||
/* DOS header fields - always at offset zero in the EXE file. */
|
||||
char e_magic[2]; /* Magic number, 0x5a4d. */
|
||||
char e_cblp[2]; /* Bytes on last page of file, 0x90. */
|
||||
char e_cp[2]; /* Pages in file, 0x3. */
|
||||
char e_crlc[2]; /* Relocations, 0x0. */
|
||||
char e_cparhdr[2]; /* Size of header in paragraphs, 0x4. */
|
||||
char e_minalloc[2]; /* Minimum extra paragraphs needed, 0x0. */
|
||||
char e_maxalloc[2]; /* Maximum extra paragraphs needed, 0xFFFF. */
|
||||
char e_ss[2]; /* Initial (relative) SS value, 0x0. */
|
||||
char e_sp[2]; /* Initial SP value, 0xb8. */
|
||||
char e_csum[2]; /* Checksum, 0x0. */
|
||||
char e_ip[2]; /* Initial IP value, 0x0. */
|
||||
char e_cs[2]; /* Initial (relative) CS value, 0x0. */
|
||||
char e_lfarlc[2]; /* File address of relocation table, 0x40. */
|
||||
char e_ovno[2]; /* Overlay number, 0x0. */
|
||||
char e_res[4][2]; /* Reserved words, all 0x0. */
|
||||
char e_oemid[2]; /* OEM identifier (for e_oeminfo), 0x0. */
|
||||
char e_oeminfo[2]; /* OEM information; e_oemid specific, 0x0. */
|
||||
char e_res2[10][2]; /* Reserved words, all 0x0. */
|
||||
char e_lfanew[4]; /* File address of new exe header, usually 0x80. */
|
||||
char dos_message[16][4]; /* Other stuff, always follow DOS header. */
|
||||
|
||||
/* Note: additional bytes may be inserted before the signature. Use
|
||||
the e_lfanew field to find the actual location of the NT signature. */
|
||||
|
||||
char nt_signature[4]; /* required NT signature, 0x4550. */
|
||||
|
||||
/* From standard header. */
|
||||
char f_magic[2]; /* Magic number. */
|
||||
char f_nscns[2]; /* Number of sections. */
|
||||
char f_timdat[4]; /* Time & date stamp. */
|
||||
char f_symptr[4]; /* File pointer to symtab. */
|
||||
char f_nsyms[4]; /* Number of symtab entries. */
|
||||
char f_opthdr[2]; /* Sizeof(optional hdr). */
|
||||
char f_flags[2]; /* Flags. */
|
||||
};
|
||||
|
||||
#ifdef COFF_IMAGE_WITH_PE
|
||||
|
||||
/* The filehdr is only weird in images. */
|
||||
|
||||
#undef FILHDR
|
||||
#define FILHDR struct external_PEI_filehdr
|
||||
#undef FILHSZ
|
||||
#define FILHSZ 152
|
||||
|
||||
#endif /* COFF_IMAGE_WITH_PE */
|
||||
|
||||
/* 32-bit PE a.out header: */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
AOUTHDR standard;
|
||||
|
||||
/* NT extra fields; see internal.h for descriptions. */
|
||||
char ImageBase[4];
|
||||
char SectionAlignment[4];
|
||||
char FileAlignment[4];
|
||||
char MajorOperatingSystemVersion[2];
|
||||
char MinorOperatingSystemVersion[2];
|
||||
char MajorImageVersion[2];
|
||||
char MinorImageVersion[2];
|
||||
char MajorSubsystemVersion[2];
|
||||
char MinorSubsystemVersion[2];
|
||||
char Reserved1[4];
|
||||
char SizeOfImage[4];
|
||||
char SizeOfHeaders[4];
|
||||
char CheckSum[4];
|
||||
char Subsystem[2];
|
||||
char DllCharacteristics[2];
|
||||
char SizeOfStackReserve[4];
|
||||
char SizeOfStackCommit[4];
|
||||
char SizeOfHeapReserve[4];
|
||||
char SizeOfHeapCommit[4];
|
||||
char LoaderFlags[4];
|
||||
char NumberOfRvaAndSizes[4];
|
||||
/* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */
|
||||
char DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars. */
|
||||
} PEAOUTHDR;
|
||||
|
||||
#undef AOUTSZ
|
||||
#define AOUTSZ (AOUTHDRSZ + 196)
|
||||
|
||||
/* Like PEAOUTHDR, except that the "standard" member has no BaseOfData
|
||||
(aka data_start) member and that some of the members are 8 instead
|
||||
of just 4 bytes long. */
|
||||
typedef struct
|
||||
{
|
||||
#ifdef AOUTHDRSZ64
|
||||
AOUTHDR64 standard;
|
||||
#else
|
||||
AOUTHDR standard;
|
||||
#endif
|
||||
/* NT extra fields; see internal.h for descriptions. */
|
||||
char ImageBase[8];
|
||||
char SectionAlignment[4];
|
||||
char FileAlignment[4];
|
||||
char MajorOperatingSystemVersion[2];
|
||||
char MinorOperatingSystemVersion[2];
|
||||
char MajorImageVersion[2];
|
||||
char MinorImageVersion[2];
|
||||
char MajorSubsystemVersion[2];
|
||||
char MinorSubsystemVersion[2];
|
||||
char Reserved1[4];
|
||||
char SizeOfImage[4];
|
||||
char SizeOfHeaders[4];
|
||||
char CheckSum[4];
|
||||
char Subsystem[2];
|
||||
char DllCharacteristics[2];
|
||||
char SizeOfStackReserve[8];
|
||||
char SizeOfStackCommit[8];
|
||||
char SizeOfHeapReserve[8];
|
||||
char SizeOfHeapCommit[8];
|
||||
char LoaderFlags[4];
|
||||
char NumberOfRvaAndSizes[4];
|
||||
/* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */
|
||||
char DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars. */
|
||||
} PEPAOUTHDR;
|
||||
|
||||
#ifdef AOUTHDRSZ64
|
||||
#define PEPAOUTSZ (AOUTHDRSZ64 + 196 + 5 * 4) /* = 240 */
|
||||
#else
|
||||
#define PEPAOUTSZ 240
|
||||
#endif
|
||||
|
||||
#undef E_FILNMLEN
|
||||
#define E_FILNMLEN 18 /* # characters in a file name. */
|
||||
|
||||
/* Import Tyoes fot ILF format object files.. */
|
||||
#define IMPORT_CODE 0
|
||||
#define IMPORT_DATA 1
|
||||
#define IMPORT_CONST 2
|
||||
|
||||
/* Import Name Tyoes for ILF format object files. */
|
||||
#define IMPORT_ORDINAL 0
|
||||
#define IMPORT_NAME 1
|
||||
#define IMPORT_NAME_NOPREFIX 2
|
||||
#define IMPORT_NAME_UNDECORATE 3
|
||||
|
||||
/* Weak external characteristics. */
|
||||
#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
|
||||
#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
|
||||
#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
|
||||
|
||||
/* .pdata/.xdata defines and structures for x64 PE+ for exception handling. */
|
||||
|
||||
/* .pdata in exception directory. */
|
||||
|
||||
struct pex64_runtime_function
|
||||
{
|
||||
bfd_vma rva_BeginAddress;
|
||||
bfd_vma rva_EndAddress;
|
||||
bfd_vma rva_UnwindData;
|
||||
unsigned int isChained : 1;
|
||||
};
|
||||
|
||||
struct external_pex64_runtime_function
|
||||
{
|
||||
bfd_byte rva_BeginAddress[4];
|
||||
bfd_byte rva_EndAddress[4];
|
||||
bfd_byte rva_UnwindData[4];
|
||||
};
|
||||
|
||||
/* If the lowest significant bit is set for rva_UnwindData RVA, it
|
||||
means that the unified RVA points to another pex64_runtime_function
|
||||
that this entry shares the unwind_info block with. */
|
||||
#define PEX64_IS_RUNTIME_FUNCTION_CHAINED(PTR_RTF) \
|
||||
(((PTR_RTF)->rva_UnwindData & 1) != 0)
|
||||
#define PEX64_GET_UNWINDDATA_UNIFIED_RVA(PTR_RTF) \
|
||||
((PTR_RTF)->rva_UnwindData & ~1)
|
||||
|
||||
/* The unwind codes. */
|
||||
#define UWOP_PUSH_NONVOL 0
|
||||
#define UWOP_ALLOC_LARGE 1
|
||||
#define UWOP_ALLOC_SMALL 2
|
||||
#define UWOP_SET_FPREG 3
|
||||
#define UWOP_SAVE_NONVOL 4
|
||||
#define UWOP_SAVE_NONVOL_FAR 5
|
||||
#define UWOP_SAVE_XMM 6
|
||||
#define UWOP_SAVE_XMM_FAR 7
|
||||
#define UWOP_SAVE_XMM128 8
|
||||
#define UWOP_SAVE_XMM128_FAR 9
|
||||
#define UWOP_PUSH_MACHFRAME 10
|
||||
|
||||
struct pex64_unwind_code
|
||||
{
|
||||
bfd_vma prologue_offset;
|
||||
/* Contains Frame offset, or frame allocation size. */
|
||||
bfd_vma frame_addr;
|
||||
unsigned int uwop_code : 4;
|
||||
/* xmm, mm, or standard register from 0 - 15. */
|
||||
unsigned int reg : 4;
|
||||
/* Used for UWOP_PUSH_MACHFRAME to indicate optional errorcode stack
|
||||
argument. */
|
||||
unsigned int has_errorcode : 1;
|
||||
};
|
||||
|
||||
struct external_pex64_unwind_code
|
||||
{
|
||||
bfd_byte dta[2];
|
||||
};
|
||||
|
||||
#define PEX64_UNWCODE_CODE(VAL) ((VAL) & 0xf)
|
||||
#define PEX64_UNWCODE_INFO(VAL) (((VAL) >> 4) & 0xf)
|
||||
|
||||
/* The unwind info. */
|
||||
#define UNW_FLAG_NHANDLER 0
|
||||
#define UNW_FLAG_EHANDLER 1
|
||||
#define UNW_FLAG_UHANDLER 2
|
||||
#define UNW_FLAG_FHANDLER 3
|
||||
#define UNW_FLAG_CHAININFO 4
|
||||
|
||||
#define UNW_FLAG_MASK 0x1f
|
||||
|
||||
struct pex64_unwind_info
|
||||
{
|
||||
bfd_vma SizeOfBlock;
|
||||
bfd_byte Version; /* Values from 0 up to 7 are possible. */
|
||||
bfd_byte Flags; /* Values from 0 up to 31 are possible. */
|
||||
bfd_vma SizeOfPrologue;
|
||||
bfd_vma CountOfCodes; /* Amount of pex64_unwind_code elements. */
|
||||
/* 0 = CFA, 1..15 are index of integer registers. */
|
||||
unsigned int FrameRegister : 4;
|
||||
bfd_vma FrameOffset;
|
||||
bfd_vma sizeofUnwindCodes;
|
||||
bfd_byte *rawUnwindCodes;
|
||||
/* Valid for UNW_FLAG_EHANDLER and UNW_FLAG_UHANDLER. */
|
||||
bfd_vma CountOfScopes;
|
||||
bfd_byte *rawScopeEntries;
|
||||
bfd_vma rva_ExceptionHandler; /* UNW_EHANDLER. */
|
||||
bfd_vma rva_TerminationHandler; /* UNW_FLAG_UHANDLER. */
|
||||
bfd_vma rva_FrameHandler; /* UNW_FLAG_FHANDLER. */
|
||||
bfd_vma FrameHandlerArgument; /* UNW_FLAG_FHANDLER. */
|
||||
bfd_vma rva_FunctionEntry; /* UNW_FLAG_CHAININFO. */
|
||||
};
|
||||
|
||||
struct external_pex64_unwind_info
|
||||
{
|
||||
bfd_byte Version_Flags;
|
||||
bfd_byte SizeOfPrologue;
|
||||
bfd_byte CountOfCodes;
|
||||
bfd_byte FrameRegisterOffset;
|
||||
/* external_pex64_unwind_code array. */
|
||||
/* bfd_byte handler[4]; */
|
||||
/* Optional language specific data. */
|
||||
};
|
||||
|
||||
struct external_pex64_scope
|
||||
{
|
||||
bfd_vma Count;
|
||||
};
|
||||
|
||||
struct pex64_scope
|
||||
{
|
||||
bfd_byte Count[4];
|
||||
};
|
||||
|
||||
struct pex64_scope_entry
|
||||
{
|
||||
bfd_vma rva_BeginAddress;
|
||||
bfd_vma rva_EndAddress;
|
||||
bfd_vma rva_HandlerAddress;
|
||||
bfd_vma rva_JumpAddress;
|
||||
};
|
||||
#define PEX64_SCOPE_ENTRY_SIZE 16
|
||||
|
||||
struct external_pex64_scope_entry
|
||||
{
|
||||
bfd_byte rva_BeginAddress[4];
|
||||
bfd_byte rva_EndAddress[4];
|
||||
bfd_byte rva_HandlerAddress[4];
|
||||
bfd_byte rva_JumpAddress[4];
|
||||
};
|
||||
|
||||
#define PEX64_UWI_VERSION(VAL) ((VAL) & 7)
|
||||
#define PEX64_UWI_FLAGS(VAL) (((VAL) >> 3) & 0x1f)
|
||||
#define PEX64_UWI_FRAMEREG(VAL) ((VAL) & 0xf)
|
||||
#define PEX64_UWI_FRAMEOFF(VAL) (((VAL) >> 4) & 0xf)
|
||||
#define PEX64_UWI_SIZEOF_UWCODE_ARRAY(VAL) \
|
||||
((((VAL) + 1) & ~1) * 2)
|
||||
|
||||
#define PEX64_OFFSET_TO_UNWIND_CODE 0x4
|
||||
|
||||
#define PEX64_OFFSET_TO_HANDLER_RVA (COUNTOFUNWINDCODES) \
|
||||
(PEX64_OFFSET_TO_UNWIND_CODE + \
|
||||
PEX64_UWI_SIZEOF_UWCODE_ARRAY(COUNTOFUNWINDCODES))
|
||||
|
||||
#define PEX64_OFFSET_TO_SCOPE_COUNT(COUNTOFUNWINDCODES) \
|
||||
(PEX64_OFFSET_TO_HANDLER_RVA(COUNTOFUNWINDCODES) + 4)
|
||||
|
||||
#define PEX64_SCOPE_ENTRY(COUNTOFUNWINDCODES, IDX) \
|
||||
(PEX64_OFFSET_TO_SCOPE_COUNT(COUNTOFUNWINDCODES) + \
|
||||
PEX64_SCOPE_ENTRY_SIZE * (IDX))
|
||||
|
||||
#endif /* _PE_H */
|
59
include/coff/powerpc.h
Normal file
59
include/coff/powerpc.h
Normal file
@ -0,0 +1,59 @@
|
||||
/* Basic coff information for the PowerPC
|
||||
Based on coff/rs6000.h, coff/i386.h and others.
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA.
|
||||
|
||||
Initial release: Kim Knuttila (krk@cygnus.com) */
|
||||
#define L_LNNO_SIZE 2
|
||||
#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
||||
#include "coff/external.h"
|
||||
|
||||
/* Bits for f_flags:
|
||||
F_RELFLG relocation info stripped from file
|
||||
F_EXEC file is executable (no unresolved external references)
|
||||
F_LNNO line numbers stripped from file
|
||||
F_LSYMS local symbols stripped from file
|
||||
F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */
|
||||
|
||||
#define F_RELFLG (0x0001)
|
||||
#define F_EXEC (0x0002)
|
||||
#define F_LNNO (0x0004)
|
||||
#define F_LSYMS (0x0008)
|
||||
|
||||
/* extra NT defines */
|
||||
#define PPCMAGIC 0760 /* peeked on aa PowerPC Windows NT box */
|
||||
#define DOSMAGIC 0x5a4d /* from arm.h, i386.h */
|
||||
#define NT_SIGNATURE 0x00004550 /* from arm.h, i386.h */
|
||||
|
||||
/* from winnt.h */
|
||||
#define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b
|
||||
|
||||
#define PPCBADMAG(x) ((x).f_magic != PPCMAGIC)
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10
|
||||
|
353
include/coff/rs6000.h
Normal file
353
include/coff/rs6000.h
Normal file
@ -0,0 +1,353 @@
|
||||
/* IBM RS/6000 "XCOFF" file definitions for BFD.
|
||||
Copyright (C) 1990, 1991, 2001, 2010 Free Software Foundation, Inc.
|
||||
Written by Mimi Phuong-Thao Vo of IBM
|
||||
and John Gilmore of Cygnus Support.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/********************** FILE HEADER **********************/
|
||||
|
||||
struct external_filehdr {
|
||||
char f_magic[2]; /* magic number */
|
||||
char f_nscns[2]; /* number of sections */
|
||||
char f_timdat[4]; /* time & date stamp */
|
||||
char f_symptr[4]; /* file pointer to symtab */
|
||||
char f_nsyms[4]; /* number of symtab entries */
|
||||
char f_opthdr[2]; /* sizeof(optional hdr) */
|
||||
char f_flags[2]; /* flags */
|
||||
};
|
||||
|
||||
/* IBM RS/6000 */
|
||||
#define U802WRMAGIC 0730 /* writeable text segments **chh** */
|
||||
#define U802ROMAGIC 0735 /* readonly sharable text segments */
|
||||
#define U802TOCMAGIC 0737 /* readonly text segments and TOC */
|
||||
|
||||
#define BADMAG(x) \
|
||||
((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
|
||||
(x).f_magic != U802TOCMAGIC)
|
||||
|
||||
#define FILHDR struct external_filehdr
|
||||
#define FILHSZ 20
|
||||
|
||||
|
||||
/********************** AOUT "OPTIONAL HEADER" **********************/
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char magic[2]; /* type of file */
|
||||
unsigned char vstamp[2]; /* version stamp */
|
||||
unsigned char tsize[4]; /* text size in bytes, padded to FW bdry */
|
||||
unsigned char dsize[4]; /* initialized data " " */
|
||||
unsigned char bsize[4]; /* uninitialized data " " */
|
||||
unsigned char entry[4]; /* entry pt. */
|
||||
unsigned char text_start[4]; /* base of text used for this file */
|
||||
unsigned char data_start[4]; /* base of data used for this file */
|
||||
unsigned char o_toc[4]; /* address of TOC */
|
||||
unsigned char o_snentry[2]; /* section number of entry point */
|
||||
unsigned char o_sntext[2]; /* section number of .text section */
|
||||
unsigned char o_sndata[2]; /* section number of .data section */
|
||||
unsigned char o_sntoc[2]; /* section number of TOC */
|
||||
unsigned char o_snloader[2]; /* section number of .loader section */
|
||||
unsigned char o_snbss[2]; /* section number of .bss section */
|
||||
unsigned char o_algntext[2]; /* .text alignment */
|
||||
unsigned char o_algndata[2]; /* .data alignment */
|
||||
unsigned char o_modtype[2]; /* module type (??) */
|
||||
unsigned char o_cputype[2]; /* cpu type */
|
||||
unsigned char o_maxstack[4]; /* max stack size (??) */
|
||||
unsigned char o_maxdata[4]; /* max data size (??) */
|
||||
unsigned char o_resv2[12]; /* reserved */
|
||||
}
|
||||
AOUTHDR;
|
||||
|
||||
#define AOUTSZ 72
|
||||
#define SMALL_AOUTSZ (28)
|
||||
#define AOUTHDRSZ 72
|
||||
|
||||
/********************** SECTION HEADER **********************/
|
||||
|
||||
|
||||
struct external_scnhdr {
|
||||
char s_name[8]; /* section name */
|
||||
char s_paddr[4]; /* physical address, aliased s_nlib */
|
||||
char s_vaddr[4]; /* virtual address */
|
||||
char s_size[4]; /* section size */
|
||||
char s_scnptr[4]; /* file ptr to raw data for section */
|
||||
char s_relptr[4]; /* file ptr to relocation */
|
||||
char s_lnnoptr[4]; /* file ptr to line numbers */
|
||||
char s_nreloc[2]; /* number of relocation entries */
|
||||
char s_nlnno[2]; /* number of line number entries*/
|
||||
char s_flags[4]; /* flags */
|
||||
};
|
||||
|
||||
#define SCNHDR struct external_scnhdr
|
||||
#define SCNHSZ 40
|
||||
|
||||
/********************** LINE NUMBERS **********************/
|
||||
|
||||
/* 1 line number entry for every "breakpointable" source line in a section.
|
||||
* Line numbers are grouped on a per function basis; first entry in a function
|
||||
* grouping will have l_lnno = 0 and in place of physical address will be the
|
||||
* symbol table index of the function name.
|
||||
*/
|
||||
struct external_lineno {
|
||||
union {
|
||||
char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
|
||||
char l_paddr[4]; /* (physical) address of line number */
|
||||
} l_addr;
|
||||
char l_lnno[2]; /* line number */
|
||||
};
|
||||
|
||||
|
||||
#define LINENO struct external_lineno
|
||||
#define LINESZ 6
|
||||
|
||||
|
||||
/********************** SYMBOLS **********************/
|
||||
|
||||
#define E_SYMNMLEN 8 /* # characters in a symbol name */
|
||||
#define E_FILNMLEN 14 /* # characters in a file name */
|
||||
#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
|
||||
|
||||
struct external_syment
|
||||
{
|
||||
union {
|
||||
char e_name[E_SYMNMLEN];
|
||||
struct {
|
||||
char e_zeroes[4];
|
||||
char e_offset[4];
|
||||
} e;
|
||||
} e;
|
||||
char e_value[4];
|
||||
char e_scnum[2];
|
||||
char e_type[2];
|
||||
char e_sclass[1];
|
||||
char e_numaux[1];
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define N_BTMASK (017)
|
||||
#define N_TMASK (060)
|
||||
#define N_BTSHFT (4)
|
||||
#define N_TSHIFT (2)
|
||||
|
||||
|
||||
union external_auxent {
|
||||
struct {
|
||||
char x_tagndx[4]; /* str, un, or enum tag indx */
|
||||
union {
|
||||
struct {
|
||||
char x_lnno[2]; /* declaration line number */
|
||||
char x_size[2]; /* str/union/array size */
|
||||
} x_lnsz;
|
||||
char x_fsize[4]; /* size of function */
|
||||
} x_misc;
|
||||
union {
|
||||
struct { /* if ISFCN, tag, or .bb */
|
||||
char x_lnnoptr[4]; /* ptr to fcn line # */
|
||||
char x_endndx[4]; /* entry ndx past block end */
|
||||
} x_fcn;
|
||||
struct { /* if ISARY, up to 4 dimen. */
|
||||
char x_dimen[E_DIMNUM][2];
|
||||
} x_ary;
|
||||
} x_fcnary;
|
||||
char x_tvndx[2]; /* tv index */
|
||||
} x_sym;
|
||||
|
||||
struct {
|
||||
union {
|
||||
char x_fname[E_FILNMLEN];
|
||||
struct {
|
||||
char x_zeroes[4];
|
||||
char x_offset[4];
|
||||
} x_n;
|
||||
} x_n;
|
||||
char x_ftype[1];
|
||||
} x_file;
|
||||
|
||||
struct {
|
||||
char x_scnlen[4]; /* section length */
|
||||
char x_nreloc[2]; /* # relocation entries */
|
||||
char x_nlinno[2]; /* # line numbers */
|
||||
} x_scn;
|
||||
|
||||
struct {
|
||||
char x_tvfill[4]; /* tv fill value */
|
||||
char x_tvlen[2]; /* length of .tv */
|
||||
char x_tvran[2][2]; /* tv range */
|
||||
} x_tv; /* info about .tv section (in auxent of symbol .tv)) */
|
||||
|
||||
struct {
|
||||
unsigned char x_scnlen[4];
|
||||
unsigned char x_parmhash[4];
|
||||
unsigned char x_snhash[2];
|
||||
unsigned char x_smtyp[1];
|
||||
unsigned char x_smclas[1];
|
||||
unsigned char x_stab[4];
|
||||
unsigned char x_snstab[2];
|
||||
} x_csect;
|
||||
|
||||
};
|
||||
|
||||
#define SYMENT struct external_syment
|
||||
#define SYMESZ 18
|
||||
#define AUXENT union external_auxent
|
||||
#define AUXESZ 18
|
||||
#define DBXMASK 0x80 /* for dbx storage mask */
|
||||
#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
|
||||
|
||||
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
|
||||
struct external_reloc {
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_size[1];
|
||||
char r_type[1];
|
||||
};
|
||||
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10
|
||||
|
||||
#define DEFAULT_DATA_SECTION_ALIGNMENT 4
|
||||
#define DEFAULT_BSS_SECTION_ALIGNMENT 4
|
||||
#define DEFAULT_TEXT_SECTION_ALIGNMENT 4
|
||||
/* For new sections we havn't heard of before */
|
||||
#define DEFAULT_SECTION_ALIGNMENT 4
|
||||
|
||||
/* The ldhdr structure. This appears at the start of the .loader
|
||||
section. */
|
||||
|
||||
struct external_ldhdr
|
||||
{
|
||||
bfd_byte l_version[4];
|
||||
bfd_byte l_nsyms[4];
|
||||
bfd_byte l_nreloc[4];
|
||||
bfd_byte l_istlen[4];
|
||||
bfd_byte l_nimpid[4];
|
||||
bfd_byte l_impoff[4];
|
||||
bfd_byte l_stlen[4];
|
||||
bfd_byte l_stoff[4];
|
||||
};
|
||||
|
||||
#define LDHDRSZ (8 * 4)
|
||||
|
||||
struct external_ldsym
|
||||
{
|
||||
union
|
||||
{
|
||||
bfd_byte _l_name[E_SYMNMLEN];
|
||||
struct
|
||||
{
|
||||
bfd_byte _l_zeroes[4];
|
||||
bfd_byte _l_offset[4];
|
||||
} _l_l;
|
||||
} _l;
|
||||
bfd_byte l_value[4];
|
||||
bfd_byte l_scnum[2];
|
||||
bfd_byte l_smtype[1];
|
||||
bfd_byte l_smclas[1];
|
||||
bfd_byte l_ifile[4];
|
||||
bfd_byte l_parm[4];
|
||||
};
|
||||
|
||||
#define LDSYMSZ (8 + 3 * 4 + 2 + 2)
|
||||
|
||||
struct external_ldrel
|
||||
{
|
||||
bfd_byte l_vaddr[4];
|
||||
bfd_byte l_symndx[4];
|
||||
bfd_byte l_rtype[2];
|
||||
bfd_byte l_rsecnm[2];
|
||||
};
|
||||
|
||||
#define LDRELSZ (2 * 4 + 2 * 2)
|
||||
|
||||
struct external_exceptab
|
||||
{
|
||||
union {
|
||||
bfd_byte e_symndx[4];
|
||||
bfd_byte e_paddr[4];
|
||||
} e_addr;
|
||||
bfd_byte e_lang[1];
|
||||
bfd_byte e_reason[1];
|
||||
};
|
||||
|
||||
#define EXCEPTSZ (4 + 2)
|
||||
|
||||
/******************** Core files *************************/
|
||||
|
||||
struct external_core_dumpx
|
||||
{
|
||||
unsigned char c_signo[1];
|
||||
unsigned char c_flag[1];
|
||||
unsigned char c_entries[2];
|
||||
|
||||
unsigned char c_version[4];
|
||||
|
||||
unsigned char c_fdsinfox[8];
|
||||
unsigned char c_loader[8];
|
||||
unsigned char c_lsize[8];
|
||||
|
||||
unsigned char c_n_thr[4];
|
||||
unsigned char c_reserved0[4];
|
||||
unsigned char c_thr[8];
|
||||
|
||||
unsigned char c_segs[8];
|
||||
unsigned char c_segregion[8];
|
||||
|
||||
unsigned char c_stack[8];
|
||||
unsigned char c_stackorg[8];
|
||||
unsigned char c_size[8];
|
||||
|
||||
unsigned char c_data[8];
|
||||
unsigned char c_dataorg[8];
|
||||
unsigned char c_datasize[8];
|
||||
unsigned char c_sdorg[8];
|
||||
unsigned char c_sdsize[8];
|
||||
|
||||
unsigned char c_vmmregions[8];
|
||||
unsigned char c_vmm[8];
|
||||
|
||||
unsigned char c_impl[4];
|
||||
unsigned char c_pad[4];
|
||||
unsigned char c_cprs[8];
|
||||
unsigned char c_reserved[7 * 8];
|
||||
|
||||
/* Followed by:
|
||||
- context of the faulting thread.
|
||||
- user structure. */
|
||||
};
|
||||
|
||||
|
||||
/* Core file verion. */
|
||||
#define CORE_DUMPX_VERSION 0x0feeddb1
|
||||
#define CORE_DUMPXX_VERSION 0x0feeddb2
|
||||
|
||||
struct external_ld_info32
|
||||
{
|
||||
unsigned char ldinfo_next[4];
|
||||
unsigned char core_offset[4];
|
||||
unsigned char ldinfo_textorg[4];
|
||||
unsigned char ldinfo_textsize[4];
|
||||
unsigned char ldinfo_dataorg[4];
|
||||
unsigned char ldinfo_datasize[4];
|
||||
unsigned char ldinfo_filename[2];
|
||||
};
|
275
include/coff/rs6k64.h
Normal file
275
include/coff/rs6k64.h
Normal file
@ -0,0 +1,275 @@
|
||||
/* IBM RS/6000 "XCOFF64" file definitions for BFD.
|
||||
Copyright (C) 2000, 2001, 2002, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/********************** FILE HEADER **********************/
|
||||
|
||||
struct external_filehdr
|
||||
{
|
||||
char f_magic[2]; /* magic number */
|
||||
char f_nscns[2]; /* number of sections */
|
||||
char f_timdat[4]; /* time & date stamp */
|
||||
char f_symptr[8]; /* file pointer to symtab */
|
||||
char f_opthdr[2]; /* sizeof(optional hdr) */
|
||||
char f_flags[2]; /* flags */
|
||||
char f_nsyms[4]; /* number of symtab entries */
|
||||
};
|
||||
|
||||
/* IBM RS/6000. */
|
||||
#define U803XTOCMAGIC 0757 /* Aix 4.3 64-bit XCOFF */
|
||||
#define U64_TOCMAGIC 0767 /* AIX 5+ 64-bit XCOFF */
|
||||
#define BADMAG(x) ((x).f_magic != U803XTOCMAGIC && (x).f_magic != U64_TOCMAGIC)
|
||||
|
||||
#define FILHDR struct external_filehdr
|
||||
#define FILHSZ 24
|
||||
|
||||
/********************** AOUT "OPTIONAL HEADER" **********************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char magic[2]; /* type of file */
|
||||
unsigned char vstamp[2]; /* version stamp */
|
||||
unsigned char o_debugger[4]; /* reserved */
|
||||
unsigned char text_start[8]; /* base of text used for this file */
|
||||
unsigned char data_start[8]; /* base of data used for this file */
|
||||
unsigned char o_toc[8]; /* address of TOC */
|
||||
unsigned char o_snentry[2]; /* section number of entry point */
|
||||
unsigned char o_sntext[2]; /* section number of .text section */
|
||||
unsigned char o_sndata[2]; /* section number of .data section */
|
||||
unsigned char o_sntoc[2]; /* section number of TOC */
|
||||
unsigned char o_snloader[2]; /* section number of .loader section */
|
||||
unsigned char o_snbss[2]; /* section number of .bss section */
|
||||
unsigned char o_algntext[2]; /* .text alignment */
|
||||
unsigned char o_algndata[2]; /* .data alignment */
|
||||
unsigned char o_modtype[2]; /* module type (??) */
|
||||
unsigned char o_cputype[2]; /* cpu type */
|
||||
unsigned char o_resv2[4]; /* reserved */
|
||||
unsigned char tsize[8]; /* text size bytes, padded to FW bdry */
|
||||
unsigned char dsize[8]; /* initialized data " " */
|
||||
unsigned char bsize[8]; /* uninitialized data " " */
|
||||
unsigned char entry[8]; /* entry pt. */
|
||||
unsigned char o_maxstack[8]; /* max stack size (??) */
|
||||
unsigned char o_maxdata[8]; /* max data size (??) */
|
||||
unsigned char o_resv3[16]; /* reserved */
|
||||
}
|
||||
AOUTHDR;
|
||||
|
||||
#define AOUTSZ 120
|
||||
#define SMALL_AOUTSZ (0)
|
||||
#define AOUTHDRSZ 72
|
||||
|
||||
/********************** SECTION HEADER **********************/
|
||||
|
||||
struct external_scnhdr
|
||||
{
|
||||
char s_name[8]; /* section name */
|
||||
char s_paddr[8]; /* physical address, aliased s_nlib */
|
||||
char s_vaddr[8]; /* virtual address */
|
||||
char s_size[8]; /* section size */
|
||||
char s_scnptr[8]; /* file ptr to raw data for section */
|
||||
char s_relptr[8]; /* file ptr to relocation */
|
||||
char s_lnnoptr[8]; /* file ptr to line numbers */
|
||||
char s_nreloc[4]; /* number of relocation entries */
|
||||
char s_nlnno[4]; /* number of line number entries*/
|
||||
char s_flags[4]; /* flags */
|
||||
char s_pad[4]; /* padding */
|
||||
};
|
||||
|
||||
#define SCNHDR struct external_scnhdr
|
||||
|
||||
#define SCNHSZ 72
|
||||
|
||||
/********************** LINE NUMBERS **********************/
|
||||
|
||||
/* 1 line number entry for every "breakpointable" source line in a section.
|
||||
Line numbers are grouped on a per function basis; first entry in a function
|
||||
grouping will have l_lnno = 0 and in place of physical address will be the
|
||||
symbol table index of the function name. */
|
||||
|
||||
struct external_lineno
|
||||
{
|
||||
union
|
||||
{
|
||||
char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
|
||||
char l_paddr[8]; /* (physical) address of line number */
|
||||
} l_addr;
|
||||
|
||||
char l_lnno[4]; /* line number */
|
||||
};
|
||||
|
||||
#define LINENO struct external_lineno
|
||||
|
||||
#define LINESZ 12
|
||||
|
||||
/********************** SYMBOLS **********************/
|
||||
|
||||
#define E_SYMNMLEN 8 /* # characters in a symbol name */
|
||||
#define E_FILNMLEN 14 /* # characters in a file name */
|
||||
#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
|
||||
|
||||
struct external_syment
|
||||
{
|
||||
char e_value[8];
|
||||
char e_offset[4];
|
||||
char e_scnum[2];
|
||||
char e_type[2];
|
||||
char e_sclass[1];
|
||||
char e_numaux[1];
|
||||
};
|
||||
|
||||
#define N_BTMASK (017)
|
||||
#define N_TMASK (060)
|
||||
#define N_BTSHFT (4)
|
||||
#define N_TSHIFT (2)
|
||||
|
||||
union external_auxent
|
||||
{
|
||||
struct {
|
||||
union {
|
||||
struct {
|
||||
char x_lnno[4]; /* declaration line number */
|
||||
char x_size[2]; /* str/union/array size */
|
||||
} x_lnsz;
|
||||
struct {
|
||||
char x_lnnoptr[8];/* ptr to fcn line */
|
||||
char x_fsize[4]; /* size of function */
|
||||
char x_endndx[4]; /* entry ndx past block end */
|
||||
} x_fcn;
|
||||
} x_fcnary;
|
||||
} x_sym;
|
||||
|
||||
struct {
|
||||
union {
|
||||
char x_fname[E_FILNMLEN];
|
||||
struct {
|
||||
char x_zeroes[4];
|
||||
char x_offset[4];
|
||||
char x_pad[6];
|
||||
} x_n;
|
||||
} x_n;
|
||||
unsigned char x_ftype[1];
|
||||
unsigned char x_resv[2];
|
||||
} x_file;
|
||||
|
||||
struct {
|
||||
char x_exptr[8];
|
||||
char x_fsize[4];
|
||||
char x_endndx[4];
|
||||
char x_pad[1];
|
||||
} x_except;
|
||||
|
||||
struct {
|
||||
unsigned char x_scnlen_lo[4];
|
||||
unsigned char x_parmhash[4];
|
||||
unsigned char x_snhash[2];
|
||||
unsigned char x_smtyp[1];
|
||||
unsigned char x_smclas[1];
|
||||
unsigned char x_scnlen_hi[4];
|
||||
unsigned char x_pad[1];
|
||||
} x_csect;
|
||||
|
||||
struct {
|
||||
char x_pad[17];
|
||||
char x_auxtype[1];
|
||||
} x_auxtype;
|
||||
};
|
||||
|
||||
#define SYMENT struct external_syment
|
||||
#define SYMESZ 18
|
||||
#define AUXENT union external_auxent
|
||||
#define AUXESZ 18
|
||||
#define DBXMASK 0x80 /* for dbx storage mask */
|
||||
#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
|
||||
|
||||
/* Values for auxtype field in XCOFF64, taken from AIX 4.3 sym.h. */
|
||||
#define _AUX_EXCEPT 255
|
||||
#define _AUX_FCN 254
|
||||
#define _AUX_SYM 253
|
||||
#define _AUX_FILE 252
|
||||
#define _AUX_CSECT 251
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[8];
|
||||
char r_symndx[4];
|
||||
char r_size[1];
|
||||
char r_type[1];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 14
|
||||
|
||||
#define DEFAULT_DATA_SECTION_ALIGNMENT 4
|
||||
#define DEFAULT_BSS_SECTION_ALIGNMENT 4
|
||||
#define DEFAULT_TEXT_SECTION_ALIGNMENT 4
|
||||
/* For new sections we havn't heard of before */
|
||||
#define DEFAULT_SECTION_ALIGNMENT 4
|
||||
|
||||
/* The ldhdr structure. This appears at the start of the .loader
|
||||
section. */
|
||||
|
||||
struct external_ldhdr
|
||||
{
|
||||
bfd_byte l_version[4];
|
||||
bfd_byte l_nsyms[4];
|
||||
bfd_byte l_nreloc[4];
|
||||
bfd_byte l_istlen[4];
|
||||
bfd_byte l_nimpid[4];
|
||||
bfd_byte l_stlen[4];
|
||||
bfd_byte l_impoff[8];
|
||||
bfd_byte l_stoff[8];
|
||||
bfd_byte l_symoff[8];
|
||||
bfd_byte l_rldoff[8];
|
||||
};
|
||||
#define LDHDRSZ (56)
|
||||
|
||||
struct external_ldsym
|
||||
{
|
||||
bfd_byte l_value[8];
|
||||
bfd_byte l_offset[4];
|
||||
bfd_byte l_scnum[2];
|
||||
bfd_byte l_smtype[1];
|
||||
bfd_byte l_smclas[1];
|
||||
bfd_byte l_ifile[4];
|
||||
bfd_byte l_parm[4];
|
||||
};
|
||||
|
||||
#define LDSYMSZ (24)
|
||||
|
||||
struct external_ldrel
|
||||
{
|
||||
bfd_byte l_vaddr[8];
|
||||
bfd_byte l_rtype[2];
|
||||
bfd_byte l_rsecnm[2];
|
||||
bfd_byte l_symndx[4];
|
||||
};
|
||||
|
||||
#define LDRELSZ (16)
|
||||
|
||||
struct external_exceptab
|
||||
{
|
||||
union {
|
||||
bfd_byte e_symndx[4];
|
||||
bfd_byte e_paddr[8];
|
||||
} e_addr;
|
||||
bfd_byte e_lang[1];
|
||||
bfd_byte e_reason[1];
|
||||
};
|
||||
|
||||
#define EXCEPTSZ (10)
|
148
include/coff/sh.h
Normal file
148
include/coff/sh.h
Normal file
@ -0,0 +1,148 @@
|
||||
/* coff information for Renesas SH
|
||||
|
||||
Copyright 2000, 2003, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifdef COFF_WITH_PE
|
||||
#define L_LNNO_SIZE 2
|
||||
#else
|
||||
#define L_LNNO_SIZE 4
|
||||
#endif
|
||||
#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
||||
#include "coff/external.h"
|
||||
|
||||
#define SH_ARCH_MAGIC_BIG 0x0500
|
||||
#define SH_ARCH_MAGIC_LITTLE 0x0550 /* Little endian SH */
|
||||
#define SH_ARCH_MAGIC_WINCE 0x01a2 /* Windows CE - little endian */
|
||||
#define SH_PE_MAGIC 0x010b
|
||||
|
||||
#define SHBADMAG(x) \
|
||||
(((x).f_magic != SH_ARCH_MAGIC_BIG) && \
|
||||
((x).f_magic != SH_ARCH_MAGIC_WINCE) && \
|
||||
((x).f_magic != SH_ARCH_MAGIC_LITTLE))
|
||||
|
||||
/* Define some NT default values. */
|
||||
/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
|
||||
#define NT_SECTION_ALIGNMENT 0x1000
|
||||
#define NT_FILE_ALIGNMENT 0x200
|
||||
#define NT_DEF_RESERVE 0x100000
|
||||
#define NT_DEF_COMMIT 0x1000
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
/* The external reloc has an offset field, because some of the reloc
|
||||
types on the h8 don't have room in the instruction for the entire
|
||||
offset - eg the strange jump and high page addressing modes. */
|
||||
|
||||
#ifndef COFF_WITH_PE
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_offset[4];
|
||||
char r_type[2];
|
||||
char r_stuff[2];
|
||||
};
|
||||
#else
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
};
|
||||
#endif
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#ifdef COFF_WITH_PE
|
||||
#define RELSZ 10
|
||||
#else
|
||||
#define RELSZ 16
|
||||
#endif
|
||||
|
||||
/* SH relocation types. Not all of these are actually used. */
|
||||
|
||||
#define R_SH_UNUSED 0 /* only used internally */
|
||||
#define R_SH_IMM32CE 2 /* 32 bit immediate for WinCE */
|
||||
#define R_SH_PCREL8 3 /* 8 bit pcrel */
|
||||
#define R_SH_PCREL16 4 /* 16 bit pcrel */
|
||||
#define R_SH_HIGH8 5 /* high 8 bits of 24 bit address */
|
||||
#define R_SH_LOW16 7 /* low 16 bits of 24 bit immediate */
|
||||
#define R_SH_IMM24 6 /* 24 bit immediate */
|
||||
#define R_SH_PCDISP8BY4 9 /* PC rel 8 bits *4 +ve */
|
||||
#define R_SH_PCDISP8BY2 10 /* PC rel 8 bits *2 +ve */
|
||||
#define R_SH_PCDISP8 11 /* 8 bit branch */
|
||||
#define R_SH_PCDISP 12 /* 12 bit branch */
|
||||
#define R_SH_IMM32 14 /* 32 bit immediate */
|
||||
#define R_SH_IMM8 16 /* 8 bit immediate */
|
||||
#define R_SH_IMAGEBASE 16 /* Windows CE */
|
||||
#define R_SH_IMM8BY2 17 /* 8 bit immediate *2 */
|
||||
#define R_SH_IMM8BY4 18 /* 8 bit immediate *4 */
|
||||
#define R_SH_IMM4 19 /* 4 bit immediate */
|
||||
#define R_SH_IMM4BY2 20 /* 4 bit immediate *2 */
|
||||
#define R_SH_IMM4BY4 21 /* 4 bit immediate *4 */
|
||||
#define R_SH_PCRELIMM8BY2 22 /* PC rel 8 bits *2 unsigned */
|
||||
#define R_SH_PCRELIMM8BY4 23 /* PC rel 8 bits *4 unsigned */
|
||||
#define R_SH_IMM16 24 /* 16 bit immediate */
|
||||
|
||||
/* The switch table reloc types are used for relaxing. They are
|
||||
generated for expressions such as
|
||||
.word L1 - L2
|
||||
The r_offset field holds the difference between the reloc address
|
||||
and L2. */
|
||||
#define R_SH_SWITCH8 33 /* 8 bit switch table entry */
|
||||
#define R_SH_SWITCH16 25 /* 16 bit switch table entry */
|
||||
#define R_SH_SWITCH32 26 /* 32 bit switch table entry */
|
||||
|
||||
/* The USES reloc type is used for relaxing. The compiler will
|
||||
generate .uses pseudo-ops when it finds a function call which it
|
||||
can relax. The r_offset field of the USES reloc holds the PC
|
||||
relative offset to the instruction which loads the register used in
|
||||
the function call. */
|
||||
#define R_SH_USES 27 /* .uses pseudo-op */
|
||||
|
||||
/* The COUNT reloc type is used for relaxing. The assembler will
|
||||
generate COUNT relocs for addresses referred to by the register
|
||||
loads associated with USES relocs. The r_offset field of the COUNT
|
||||
reloc holds the number of times the address is referenced in the
|
||||
object file. */
|
||||
#define R_SH_COUNT 28 /* Count of constant pool uses */
|
||||
|
||||
/* The ALIGN reloc type is used for relaxing. The r_offset field is
|
||||
the power of two to which subsequent portions of the object file
|
||||
must be aligned. */
|
||||
#define R_SH_ALIGN 29 /* .align pseudo-op */
|
||||
|
||||
/* The CODE and DATA reloc types are used for aligning load and store
|
||||
instructions. The assembler will generate a CODE reloc before a
|
||||
block of instructions. It will generate a DATA reloc before data.
|
||||
A section should be processed assuming it contains data, unless a
|
||||
CODE reloc is seen. The only relevant pieces of information in the
|
||||
CODE and DATA relocs are the section and the address. The symbol
|
||||
and offset are meaningless. */
|
||||
#define R_SH_CODE 30 /* start of code */
|
||||
#define R_SH_DATA 31 /* start of data */
|
||||
|
||||
/* The LABEL reloc type is used for aligning load and store
|
||||
instructions. The assembler will generate a LABEL reloc for each
|
||||
label within a block of instructions. This permits the linker to
|
||||
avoid swapping instructions which are the targets of branches. */
|
||||
#define R_SH_LABEL 32 /* label */
|
||||
|
||||
/* NB: R_SH_SWITCH8 is 33 */
|
||||
|
||||
#define R_SH_LOOP_START 34
|
||||
#define R_SH_LOOP_END 35
|
156
include/coff/sparc.h
Normal file
156
include/coff/sparc.h
Normal file
@ -0,0 +1,156 @@
|
||||
/* coff information for Sparc.
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* This file is an amalgamation of several standard include files that
|
||||
define coff format, such as filehdr.h, aouthdr.h, and so forth. In
|
||||
addition, all datatypes have been translated into character arrays of
|
||||
(presumed) equivalent size. This is necessary so that this file can
|
||||
be used with different systems while still yielding the same results. */
|
||||
|
||||
#define L_LNNO_SIZE 2
|
||||
#define DO_NOT_DEFINE_SYMENT
|
||||
#define DO_NOT_DEFINE_AUXENT
|
||||
#include "coff/external.h"
|
||||
|
||||
#define F_RELFLG (0x0001) /* relocation info stripped */
|
||||
#define F_EXEC (0x0002) /* file is executable */
|
||||
#define F_LNNO (0x0004) /* line numbers stripped */
|
||||
#define F_LSYMS (0x0008) /* local symbols stripped */
|
||||
|
||||
#define SPARCMAGIC (0540)
|
||||
|
||||
/* This is Lynx's all-platform magic number for executables. */
|
||||
|
||||
#define LYNXCOFFMAGIC (0415)
|
||||
|
||||
#define OMAGIC 0404 /* object files, eg as output */
|
||||
#define ZMAGIC 0413 /* demand load format, eg normal ld output */
|
||||
#define STMAGIC 0401 /* target shlib */
|
||||
#define SHMAGIC 0443 /* host shlib */
|
||||
|
||||
/* More names of "special" sections. */
|
||||
|
||||
#define _TV ".tv"
|
||||
#define _INIT ".init"
|
||||
#define _FINI ".fini"
|
||||
|
||||
/********************** SYMBOLS **********************/
|
||||
|
||||
#define E_SYMNMLEN (8) /* # characters in a symbol name */
|
||||
#define E_FILNMLEN (14) /* # characters in a file name */
|
||||
#define E_DIMNUM (4) /* # array dimensions in auxiliary entry */
|
||||
|
||||
struct external_syment
|
||||
{
|
||||
union {
|
||||
char e_name[E_SYMNMLEN];
|
||||
struct {
|
||||
char e_zeroes[4];
|
||||
char e_offset[4];
|
||||
} e;
|
||||
#if 0 /* of doubtful value */
|
||||
char e_nptr[2][4];
|
||||
struct {
|
||||
char e_leading_zero[1];
|
||||
char e_dbx_type[1];
|
||||
char e_dbx_desc[2];
|
||||
} e_dbx;
|
||||
#endif
|
||||
} e;
|
||||
|
||||
char e_value[4];
|
||||
char e_scnum[2];
|
||||
char e_type[2];
|
||||
char e_sclass[1];
|
||||
char e_numaux[1];
|
||||
char padding[2];
|
||||
};
|
||||
|
||||
#define N_BTMASK (0xf)
|
||||
#define N_TMASK (0x30)
|
||||
#define N_BTSHFT (4)
|
||||
#define N_TSHIFT (2)
|
||||
|
||||
union external_auxent
|
||||
{
|
||||
struct {
|
||||
char x_tagndx[4]; /* str, un, or enum tag indx */
|
||||
union {
|
||||
struct {
|
||||
char x_lnno[2]; /* declaration line number */
|
||||
char x_size[2]; /* str/union/array size */
|
||||
} x_lnsz;
|
||||
char x_fsize[4]; /* size of function */
|
||||
} x_misc;
|
||||
union {
|
||||
struct { /* if ISFCN, tag, or .bb */
|
||||
char x_lnnoptr[4]; /* ptr to fcn line # */
|
||||
char x_endndx[4]; /* entry ndx past block end */
|
||||
} x_fcn;
|
||||
struct { /* if ISARY, up to 4 dimen. */
|
||||
char x_dimen[E_DIMNUM][2];
|
||||
} x_ary;
|
||||
} x_fcnary;
|
||||
char x_tvndx[2]; /* tv index */
|
||||
} x_sym;
|
||||
|
||||
union {
|
||||
char x_fname[E_FILNMLEN];
|
||||
struct {
|
||||
char x_zeroes[4];
|
||||
char x_offset[4];
|
||||
} x_n;
|
||||
} x_file;
|
||||
|
||||
struct {
|
||||
char x_scnlen[4]; /* section length */
|
||||
char x_nreloc[2]; /* # relocation entries */
|
||||
char x_nlinno[2]; /* # line numbers */
|
||||
} x_scn;
|
||||
|
||||
struct {
|
||||
char x_tvfill[4]; /* tv fill value */
|
||||
char x_tvlen[2]; /* length of .tv */
|
||||
char x_tvran[2][2]; /* tv range */
|
||||
} x_tv; /* .tv section info (in auxent of sym .tv)) */
|
||||
|
||||
char x_fill[20]; /* forces to 20-byte size */
|
||||
};
|
||||
|
||||
#define SYMENT struct external_syment
|
||||
#define SYMESZ 20
|
||||
#define AUXENT union external_auxent
|
||||
#define AUXESZ 20
|
||||
|
||||
#define _ETEXT "etext"
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
char r_spare[2];
|
||||
char r_offset[4];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 16
|
||||
|
484
include/coff/sym.h
Normal file
484
include/coff/sym.h
Normal file
@ -0,0 +1,484 @@
|
||||
/* Declarations of internal format of MIPS ECOFF symbols.
|
||||
Originally contributed by MIPS Computer Systems and Third Eye Software.
|
||||
Changes contributed by Cygnus Support are in the public domain.
|
||||
|
||||
This file is just aggregated with the files that make up the GNU
|
||||
release; it is not considered part of GAS, GDB, or other GNU
|
||||
programs. */
|
||||
|
||||
/*
|
||||
* |-----------------------------------------------------------|
|
||||
* | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.|
|
||||
* | MIPS Computer Systems, Inc. grants reproduction and use |
|
||||
* | rights to all parties, PROVIDED that this comment is |
|
||||
* | maintained in the copy. |
|
||||
* |-----------------------------------------------------------|
|
||||
*/
|
||||
#ifndef _SYM_H
|
||||
#define _SYM_H
|
||||
|
||||
/* (C) Copyright 1984 by Third Eye Software, Inc.
|
||||
*
|
||||
* Third Eye Software, Inc. grants reproduction and use rights to
|
||||
* all parties, PROVIDED that this comment is maintained in the copy.
|
||||
*
|
||||
* Third Eye makes no claims about the applicability of this
|
||||
* symbol table to a particular use.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file contains the definition of the Third Eye Symbol Table.
|
||||
*
|
||||
* Symbols are assumed to be in 'encounter order' - i.e. the order that
|
||||
* the things they represent were encountered by the compiler/assembler/loader.
|
||||
* EXCEPT for globals! These are assumed to be bunched together,
|
||||
* probably right after the last 'normal' symbol. Globals ARE sorted
|
||||
* in ascending order.
|
||||
*
|
||||
* -----------------------------------------------------------------------
|
||||
* A brief word about Third Eye naming/use conventions:
|
||||
*
|
||||
* All arrays and index's are 0 based.
|
||||
* All "ifooMax" values are the highest legal value PLUS ONE. This makes
|
||||
* them good for allocating arrays, etc. All checks are "ifoo < ifooMax".
|
||||
*
|
||||
* "isym" Index into the SYMbol table.
|
||||
* "ipd" Index into the Procedure Descriptor array.
|
||||
* "ifd" Index into the File Descriptor array.
|
||||
* "iss" Index into String Space.
|
||||
* "cb" Count of Bytes.
|
||||
* "rgPd" array whose domain is "0..ipdMax-1" and RanGe is PDR.
|
||||
* "rgFd" array whose domain is "0..ifdMax-1" and RanGe is FDR.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Symbolic Header (HDR) structure.
|
||||
* As long as all the pointers are set correctly,
|
||||
* we don't care WHAT order the various sections come out in!
|
||||
*
|
||||
* A file produced solely for the use of CDB will probably NOT have
|
||||
* any instructions or data areas in it, as these are available
|
||||
* in the original.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
short magic; /* to verify validity of the table */
|
||||
short vstamp; /* version stamp */
|
||||
long ilineMax; /* number of line number entries */
|
||||
bfd_vma cbLine; /* number of bytes for line number entries */
|
||||
bfd_vma cbLineOffset; /* offset to start of line number entries*/
|
||||
long idnMax; /* max index into dense number table */
|
||||
bfd_vma cbDnOffset; /* offset to start dense number table */
|
||||
long ipdMax; /* number of procedures */
|
||||
bfd_vma cbPdOffset; /* offset to procedure descriptor table */
|
||||
long isymMax; /* number of local symbols */
|
||||
bfd_vma cbSymOffset; /* offset to start of local symbols*/
|
||||
long ioptMax; /* max index into optimization symbol entries */
|
||||
bfd_vma cbOptOffset; /* offset to optimization symbol entries */
|
||||
long iauxMax; /* number of auxillary symbol entries */
|
||||
bfd_vma cbAuxOffset; /* offset to start of auxillary symbol entries*/
|
||||
long issMax; /* max index into local strings */
|
||||
bfd_vma cbSsOffset; /* offset to start of local strings */
|
||||
long issExtMax; /* max index into external strings */
|
||||
bfd_vma cbSsExtOffset; /* offset to start of external strings */
|
||||
long ifdMax; /* number of file descriptor entries */
|
||||
bfd_vma cbFdOffset; /* offset to file descriptor table */
|
||||
long crfd; /* number of relative file descriptor entries */
|
||||
bfd_vma cbRfdOffset; /* offset to relative file descriptor table */
|
||||
long iextMax; /* max index into external symbols */
|
||||
bfd_vma cbExtOffset; /* offset to start of external symbol entries*/
|
||||
/* If you add machine dependent fields, add them here */
|
||||
} HDRR, *pHDRR;
|
||||
#define cbHDRR sizeof(HDRR)
|
||||
#define hdrNil ((pHDRR)0)
|
||||
|
||||
/*
|
||||
* The FDR and PDR structures speed mapping of address <-> name.
|
||||
* They are sorted in ascending memory order and are kept in
|
||||
* memory by CDB at runtime.
|
||||
*/
|
||||
|
||||
/*
|
||||
* File Descriptor
|
||||
*
|
||||
* There is one of these for EVERY FILE, whether compiled with
|
||||
* full debugging symbols or not. The name of a file should be
|
||||
* the path name given to the compiler. This allows the user
|
||||
* to simply specify the names of the directories where the COMPILES
|
||||
* were done, and we will be able to find their files.
|
||||
* A field whose comment starts with "R - " indicates that it will be
|
||||
* setup at runtime.
|
||||
*/
|
||||
typedef struct fdr {
|
||||
bfd_vma adr; /* memory address of beginning of file */
|
||||
long rss; /* file name (of source, if known) */
|
||||
long issBase; /* file's string space */
|
||||
bfd_vma cbSs; /* number of bytes in the ss */
|
||||
long isymBase; /* beginning of symbols */
|
||||
long csym; /* count file's of symbols */
|
||||
long ilineBase; /* file's line symbols */
|
||||
long cline; /* count of file's line symbols */
|
||||
long ioptBase; /* file's optimization entries */
|
||||
long copt; /* count of file's optimization entries */
|
||||
unsigned short ipdFirst;/* start of procedures for this file */
|
||||
short cpd; /* count of procedures for this file */
|
||||
long iauxBase; /* file's auxiliary entries */
|
||||
long caux; /* count of file's auxiliary entries */
|
||||
long rfdBase; /* index into the file indirect table */
|
||||
long crfd; /* count file indirect entries */
|
||||
unsigned lang: 5; /* language for this file */
|
||||
unsigned fMerge : 1; /* whether this file can be merged */
|
||||
unsigned fReadin : 1; /* true if it was read in (not just created) */
|
||||
unsigned fBigendian : 1;/* if set, was compiled on big endian machine */
|
||||
/* aux's will be in compile host's sex */
|
||||
unsigned glevel : 2; /* level this file was compiled with */
|
||||
unsigned reserved : 22; /* reserved for future use */
|
||||
bfd_vma cbLineOffset; /* byte offset from header for this file ln's */
|
||||
bfd_vma cbLine; /* size of lines for this file */
|
||||
} FDR, *pFDR;
|
||||
#define cbFDR sizeof(FDR)
|
||||
#define fdNil ((pFDR)0)
|
||||
#define ifdNil -1
|
||||
#define ifdTemp 0
|
||||
#define ilnNil -1
|
||||
|
||||
|
||||
/*
|
||||
* Procedure Descriptor
|
||||
*
|
||||
* There is one of these for EVERY TEXT LABEL.
|
||||
* If a procedure is in a file with full symbols, then isym
|
||||
* will point to the PROC symbols, else it will point to the
|
||||
* global symbol for the label.
|
||||
*/
|
||||
|
||||
typedef struct pdr {
|
||||
bfd_vma adr; /* memory address of start of procedure */
|
||||
long isym; /* start of local symbol entries */
|
||||
long iline; /* start of line number entries*/
|
||||
long regmask; /* save register mask */
|
||||
long regoffset; /* save register offset */
|
||||
long iopt; /* start of optimization symbol entries*/
|
||||
long fregmask; /* save floating point register mask */
|
||||
long fregoffset; /* save floating point register offset */
|
||||
long frameoffset; /* frame size */
|
||||
short framereg; /* frame pointer register */
|
||||
short pcreg; /* offset or reg of return pc */
|
||||
long lnLow; /* lowest line in the procedure */
|
||||
long lnHigh; /* highest line in the procedure */
|
||||
bfd_vma cbLineOffset; /* byte offset for this procedure from the fd base */
|
||||
/* These fields are new for 64 bit ECOFF. */
|
||||
unsigned gp_prologue : 8; /* byte size of GP prologue */
|
||||
unsigned gp_used : 1; /* true if the procedure uses GP */
|
||||
unsigned reg_frame : 1; /* true if register frame procedure */
|
||||
unsigned prof : 1; /* true if compiled with -pg */
|
||||
unsigned reserved : 13; /* reserved: must be zero */
|
||||
unsigned localoff : 8; /* offset of local variables from vfp */
|
||||
} PDR, *pPDR;
|
||||
#define cbPDR sizeof(PDR)
|
||||
#define pdNil ((pPDR) 0)
|
||||
#define ipdNil -1
|
||||
|
||||
/*
|
||||
* The structure of the runtime procedure descriptor created by the loader
|
||||
* for use by the static exception system.
|
||||
*/
|
||||
/*
|
||||
* If 0'd out because exception_info chokes Visual C++ and because there
|
||||
* don't seem to be any references to this structure elsewhere in gdb.
|
||||
*/
|
||||
#if 0
|
||||
typedef struct runtime_pdr {
|
||||
bfd_vma adr; /* memory address of start of procedure */
|
||||
long regmask; /* save register mask */
|
||||
long regoffset; /* save register offset */
|
||||
long fregmask; /* save floating point register mask */
|
||||
long fregoffset; /* save floating point register offset */
|
||||
long frameoffset; /* frame size */
|
||||
short framereg; /* frame pointer register */
|
||||
short pcreg; /* offset or reg of return pc */
|
||||
long irpss; /* index into the runtime string table */
|
||||
long reserved;
|
||||
struct exception_info *exception_info;/* pointer to exception array */
|
||||
} RPDR, *pRPDR;
|
||||
#define cbRPDR sizeof(RPDR)
|
||||
#define rpdNil ((pRPDR) 0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Line Numbers
|
||||
*
|
||||
* Line Numbers are segregated from the normal symbols because they
|
||||
* are [1] smaller , [2] are of no interest to your
|
||||
* average loader, and [3] are never needed in the middle of normal
|
||||
* scanning and therefore slow things down.
|
||||
*
|
||||
* By definition, the first LINER for any given procedure will have
|
||||
* the first line of a procedure and represent the first address.
|
||||
*/
|
||||
|
||||
typedef long LINER, *pLINER;
|
||||
#define lineNil ((pLINER)0)
|
||||
#define cbLINER sizeof(LINER)
|
||||
#define ilineNil -1
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* The Symbol Structure (GFW, to those who Know!)
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
long iss; /* index into String Space of name */
|
||||
bfd_vma value; /* value of symbol */
|
||||
unsigned st : 6; /* symbol type */
|
||||
unsigned sc : 5; /* storage class - text, data, etc */
|
||||
unsigned reserved : 1; /* reserved */
|
||||
unsigned index : 20; /* index into sym/aux table */
|
||||
} SYMR, *pSYMR;
|
||||
#define symNil ((pSYMR)0)
|
||||
#define cbSYMR sizeof(SYMR)
|
||||
#define isymNil -1
|
||||
#define indexNil 0xfffff
|
||||
#define issNil -1
|
||||
#define issNull 0
|
||||
|
||||
|
||||
/* The following converts a memory resident string to an iss.
|
||||
* This hack is recognized in SbFIss, in sym.c of the debugger.
|
||||
*/
|
||||
#define IssFSb(sb) (0x80000000 | ((unsigned long)(sb)))
|
||||
|
||||
/* E X T E R N A L S Y M B O L R E C O R D
|
||||
*
|
||||
* Same as the SYMR except it contains file context to determine where
|
||||
* the index is.
|
||||
*/
|
||||
typedef struct ecoff_extr {
|
||||
unsigned jmptbl:1; /* symbol is a jump table entry for shlibs */
|
||||
unsigned cobol_main:1; /* symbol is a cobol main procedure */
|
||||
unsigned weakext:1; /* symbol is weak external */
|
||||
unsigned reserved:13; /* reserved for future use */
|
||||
int ifd; /* where the iss and index fields point into */
|
||||
SYMR asym; /* symbol for the external */
|
||||
} EXTR, *pEXTR;
|
||||
#define extNil ((pEXTR)0)
|
||||
#define cbEXTR sizeof(EXTR)
|
||||
|
||||
|
||||
/* A U X I L L A R Y T Y P E I N F O R M A T I O N */
|
||||
|
||||
/*
|
||||
* Type Information Record
|
||||
*/
|
||||
typedef struct {
|
||||
unsigned fBitfield : 1; /* set if bit width is specified */
|
||||
unsigned continued : 1; /* indicates additional TQ info in next AUX */
|
||||
unsigned bt : 6; /* basic type */
|
||||
unsigned tq4 : 4;
|
||||
unsigned tq5 : 4;
|
||||
/* ---- 16 bit boundary ---- */
|
||||
unsigned tq0 : 4;
|
||||
unsigned tq1 : 4; /* 6 type qualifiers - tqPtr, etc. */
|
||||
unsigned tq2 : 4;
|
||||
unsigned tq3 : 4;
|
||||
} TIR, *pTIR;
|
||||
#define cbTIR sizeof(TIR)
|
||||
#define tiNil ((pTIR)0)
|
||||
#define itqMax 6
|
||||
|
||||
/*
|
||||
* Relative symbol record
|
||||
*
|
||||
* If the rfd field is 4095, the index field indexes into the global symbol
|
||||
* table.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
unsigned rfd : 12; /* index into the file indirect table */
|
||||
unsigned index : 20; /* index int sym/aux/iss tables */
|
||||
} RNDXR, *pRNDXR;
|
||||
#define cbRNDXR sizeof(RNDXR)
|
||||
#define rndxNil ((pRNDXR)0)
|
||||
|
||||
/* dense numbers or sometimes called block numbers are stored in this type,
|
||||
* a rfd of 0xffffffff is an index into the global table.
|
||||
*/
|
||||
typedef struct {
|
||||
unsigned long rfd; /* index into the file table */
|
||||
unsigned long index; /* index int sym/aux/iss tables */
|
||||
} DNR, *pDNR;
|
||||
#define cbDNR sizeof(DNR)
|
||||
#define dnNil ((pDNR)0)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Auxillary information occurs only if needed.
|
||||
* It ALWAYS occurs in this order when present.
|
||||
|
||||
isymMac used by stProc only
|
||||
TIR type info
|
||||
TIR additional TQ info (if first TIR was not enough)
|
||||
rndx if (bt == btStruct,btUnion,btEnum,btSet,btRange,
|
||||
btTypedef):
|
||||
rsym.index == iaux for btSet or btRange
|
||||
else rsym.index == isym
|
||||
dimLow btRange, btSet
|
||||
dimMac btRange, btSet
|
||||
rndx0 As many as there are tq arrays
|
||||
dimLow0
|
||||
dimHigh0
|
||||
...
|
||||
rndxMax-1
|
||||
dimLowMax-1
|
||||
dimHighMax-1
|
||||
width in bits if (bit field), width in bits.
|
||||
*/
|
||||
#define cAuxMax (6 + (idimMax*3))
|
||||
|
||||
/* a union of all possible info in the AUX universe */
|
||||
typedef union {
|
||||
TIR ti; /* type information record */
|
||||
RNDXR rndx; /* relative index into symbol table */
|
||||
long dnLow; /* low dimension */
|
||||
long dnHigh; /* high dimension */
|
||||
long isym; /* symbol table index (end of proc) */
|
||||
long iss; /* index into string space (not used) */
|
||||
long width; /* width for non-default sized struc fields */
|
||||
long count; /* count of ranges for variant arm */
|
||||
} AUXU, *pAUXU;
|
||||
#define cbAUXU sizeof(AUXU)
|
||||
#define auxNil ((pAUXU)0)
|
||||
#define iauxNil -1
|
||||
|
||||
|
||||
/*
|
||||
* Optimization symbols
|
||||
*
|
||||
* Optimization symbols contain some overlap information with the normal
|
||||
* symbol table. In particular, the proc information
|
||||
* is somewhat redundant but necessary to easily find the other information
|
||||
* present.
|
||||
*
|
||||
* All of the offsets are relative to the beginning of the last otProc
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
unsigned ot: 8; /* optimization type */
|
||||
unsigned value: 24; /* address where we are moving it to */
|
||||
RNDXR rndx; /* points to a symbol or opt entry */
|
||||
unsigned long offset; /* relative offset this occured */
|
||||
} OPTR, *pOPTR;
|
||||
#define optNil ((pOPTR) 0)
|
||||
#define cbOPTR sizeof(OPTR)
|
||||
#define ioptNil -1
|
||||
|
||||
/*
|
||||
* File Indirect
|
||||
*
|
||||
* When a symbol is referenced across files the following procedure is used:
|
||||
* 1) use the file index to get the File indirect entry.
|
||||
* 2) use the file indirect entry to get the File descriptor.
|
||||
* 3) add the sym index to the base of that file's sym table
|
||||
*
|
||||
*/
|
||||
|
||||
typedef long RFDT, *pRFDT;
|
||||
#define cbRFDT sizeof(RFDT)
|
||||
#define rfdNil -1
|
||||
|
||||
/*
|
||||
* The file indirect table in the mips loader is known as an array of FITs.
|
||||
* This is done to keep the code in the loader readable in the area where
|
||||
* these tables are merged. Note this is only a name change.
|
||||
*/
|
||||
typedef long FIT, *pFIT;
|
||||
#define cbFIT sizeof(FIT)
|
||||
#define ifiNil -1
|
||||
#define fiNil ((pFIT) 0)
|
||||
|
||||
#ifdef _LANGUAGE_PASCAL
|
||||
#define ifdNil -1
|
||||
#define ilnNil -1
|
||||
#define ipdNil -1
|
||||
#define ilineNil -1
|
||||
#define isymNil -1
|
||||
#define indexNil 16#fffff
|
||||
#define issNil -1
|
||||
#define issNull 0
|
||||
#define itqMax 6
|
||||
#define iauxNil -1
|
||||
#define ioptNil -1
|
||||
#define rfdNil -1
|
||||
#define ifiNil -1
|
||||
#endif /* _LANGUAGE_PASCAL */
|
||||
|
||||
|
||||
/* Dense numbers
|
||||
*
|
||||
* Rather than use file index, symbol index pairs to represent symbols
|
||||
* and globals, we use dense number so that they can be easily embeded
|
||||
* in intermediate code and the programs that process them can
|
||||
* use direct access tabls instead of hash table (which would be
|
||||
* necesary otherwise because of the sparse name space caused by
|
||||
* file index, symbol index pairs. Dense number are represented
|
||||
* by RNDXRs.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The following table defines the meaning of each SYM field as
|
||||
* a function of the "st". (scD/B == scData OR scBss)
|
||||
*
|
||||
* Note: the value "isymMac" is used by symbols that have the concept
|
||||
* of enclosing a block of related information. This value is the
|
||||
* isym of the first symbol AFTER the end associated with the primary
|
||||
* symbol. For example if a procedure was at isym==90 and had an
|
||||
* isymMac==155, the associated end would be at isym==154, and the
|
||||
* symbol at 155 would probably (although not necessarily) be the
|
||||
* symbol for the next procedure. This allows rapid skipping over
|
||||
* internal information of various sorts. "stEnd"s ALWAYS have the
|
||||
* isym of the primary symbol that started the block.
|
||||
*
|
||||
|
||||
ST SC VALUE INDEX
|
||||
-------- ------ -------- ------
|
||||
stFile scText address isymMac
|
||||
stLabel scText address ---
|
||||
stGlobal scD/B address iaux
|
||||
stStatic scD/B address iaux
|
||||
stParam scAbs offset iaux
|
||||
stLocal scAbs offset iaux
|
||||
stProc scText address iaux (isymMac is first AUX)
|
||||
stStaticProc scText address iaux (isymMac is first AUX)
|
||||
|
||||
stMember scNil ordinal --- (if member of enum)
|
||||
(mipsread thinks the case below has a bit, not byte, offset.)
|
||||
stMember scNil byte offset iaux (if member of struct/union)
|
||||
stMember scBits bit offset iaux (bit field spec)
|
||||
|
||||
stBlock scText address isymMac (text block)
|
||||
(the code seems to think that rather than scNil, we see scInfo for
|
||||
the two cases below.)
|
||||
stBlock scNil cb isymMac (struct/union member define)
|
||||
stBlock scNil cMembers isymMac (enum member define)
|
||||
|
||||
(New types added by SGI to simplify things:)
|
||||
stStruct scInfo cb isymMac (struct type define)
|
||||
stUnion scInfo cb isymMac (union type define)
|
||||
stEnum scInfo cMembers isymMac (enum type define)
|
||||
|
||||
stEnd scText address isymStart
|
||||
stEnd scNil ------- isymStart (struct/union/enum)
|
||||
|
||||
stTypedef scNil ------- iaux
|
||||
stRegReloc sc??? value old register number
|
||||
stForward sc??? new address isym to original symbol
|
||||
|
||||
stConstant scInfo value --- (scalar)
|
||||
stConstant scInfo iss --- (complex, e.g. string)
|
||||
|
||||
*
|
||||
*/
|
||||
#endif
|
184
include/coff/symconst.h
Normal file
184
include/coff/symconst.h
Normal file
@ -0,0 +1,184 @@
|
||||
/* Declarations of constants for internal format of MIPS ECOFF symbols.
|
||||
Originally contributed by MIPS Computer Systems and Third Eye Software.
|
||||
Changes contributed by Cygnus Support are in the public domain.
|
||||
|
||||
This file is just aggregated with the files that make up the GNU
|
||||
release; it is not considered part of GAS, GDB, or other GNU
|
||||
programs. */
|
||||
|
||||
/*
|
||||
* |-----------------------------------------------------------|
|
||||
* | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.|
|
||||
* | MIPS Computer Systems, Inc. grants reproduction and use |
|
||||
* | rights to all parties, PROVIDED that this comment is |
|
||||
* | maintained in the copy. |
|
||||
* |-----------------------------------------------------------|
|
||||
*/
|
||||
|
||||
/* (C) Copyright 1984 by Third Eye Software, Inc.
|
||||
*
|
||||
* Third Eye Software, Inc. grants reproduction and use rights to
|
||||
* all parties, PROVIDED that this comment is maintained in the copy.
|
||||
*
|
||||
* Third Eye makes no claims about the applicability of this
|
||||
* symbol table to a particular use.
|
||||
*/
|
||||
|
||||
/* glevels for field in FDR */
|
||||
#define GLEVEL_0 2
|
||||
#define GLEVEL_1 1
|
||||
#define GLEVEL_2 0 /* for upward compat reasons. */
|
||||
#define GLEVEL_3 3
|
||||
|
||||
/* magic number fo symheader */
|
||||
#define magicSym 0x7009
|
||||
/* The Alpha uses this value instead, for some reason. */
|
||||
#define magicSym2 0x1992
|
||||
|
||||
/* Language codes */
|
||||
#define langC 0
|
||||
#define langPascal 1
|
||||
#define langFortran 2
|
||||
#define langAssembler 3 /* one Assembley inst might map to many mach */
|
||||
#define langMachine 4
|
||||
#define langNil 5
|
||||
#define langAda 6
|
||||
#define langPl1 7
|
||||
#define langCobol 8
|
||||
#define langStdc 9 /* FIXME: Collides with SGI langCplusplus */
|
||||
#define langCplusplus 9 /* FIXME: Collides with langStdc */
|
||||
#define langCplusplusV2 10 /* SGI addition */
|
||||
#define langMax 11 /* maximum allowed 32 -- 5 bits */
|
||||
|
||||
/* The following are value definitions for the fields in the SYMR */
|
||||
|
||||
/*
|
||||
* Storage Classes
|
||||
*/
|
||||
|
||||
#define scNil 0
|
||||
#define scText 1 /* text symbol */
|
||||
#define scData 2 /* initialized data symbol */
|
||||
#define scBss 3 /* un-initialized data symbol */
|
||||
#define scRegister 4 /* value of symbol is register number */
|
||||
#define scAbs 5 /* value of symbol is absolute */
|
||||
#define scUndefined 6 /* who knows? */
|
||||
#define scCdbLocal 7 /* variable's value is IN se->va.?? */
|
||||
#define scBits 8 /* this is a bit field */
|
||||
#define scCdbSystem 9 /* variable's value is IN CDB's address space */
|
||||
#define scDbx 9 /* overlap dbx internal use */
|
||||
#define scRegImage 10 /* register value saved on stack */
|
||||
#define scInfo 11 /* symbol contains debugger information */
|
||||
#define scUserStruct 12 /* address in struct user for current process */
|
||||
#define scSData 13 /* load time only small data */
|
||||
#define scSBss 14 /* load time only small common */
|
||||
#define scRData 15 /* load time only read only data */
|
||||
#define scVar 16 /* Var parameter (fortran,pascal) */
|
||||
#define scCommon 17 /* common variable */
|
||||
#define scSCommon 18 /* small common */
|
||||
#define scVarRegister 19 /* Var parameter in a register */
|
||||
#define scVariant 20 /* Variant record */
|
||||
#define scSUndefined 21 /* small undefined(external) data */
|
||||
#define scInit 22 /* .init section symbol */
|
||||
#define scBasedVar 23 /* Fortran or PL/1 ptr based var */
|
||||
#define scXData 24 /* exception handling data */
|
||||
#define scPData 25 /* Procedure section */
|
||||
#define scFini 26 /* .fini section */
|
||||
#define scRConst 27 /* .rconst section */
|
||||
#define scMax 32
|
||||
|
||||
|
||||
/*
|
||||
* Symbol Types
|
||||
*/
|
||||
|
||||
#define stNil 0 /* Nuthin' special */
|
||||
#define stGlobal 1 /* external symbol */
|
||||
#define stStatic 2 /* static */
|
||||
#define stParam 3 /* procedure argument */
|
||||
#define stLocal 4 /* local variable */
|
||||
#define stLabel 5 /* label */
|
||||
#define stProc 6 /* " " Procedure */
|
||||
#define stBlock 7 /* beginnning of block */
|
||||
#define stEnd 8 /* end (of anything) */
|
||||
#define stMember 9 /* member (of anything - struct/union/enum */
|
||||
#define stTypedef 10 /* type definition */
|
||||
#define stFile 11 /* file name */
|
||||
#define stRegReloc 12 /* register relocation */
|
||||
#define stForward 13 /* forwarding address */
|
||||
#define stStaticProc 14 /* load time only static procs */
|
||||
#define stConstant 15 /* const */
|
||||
#define stStaParam 16 /* Fortran static parameters */
|
||||
/* These new symbol types have been recently added to SGI machines. */
|
||||
#define stStruct 26 /* Beginning of block defining a struct type */
|
||||
#define stUnion 27 /* Beginning of block defining a union type */
|
||||
#define stEnum 28 /* Beginning of block defining an enum type */
|
||||
#define stIndirect 34 /* Indirect type specification */
|
||||
/* Pseudo-symbols - internal to debugger */
|
||||
#define stStr 60 /* string */
|
||||
#define stNumber 61 /* pure number (ie. 4 NOR 2+2) */
|
||||
#define stExpr 62 /* 2+2 vs. 4 */
|
||||
#define stType 63 /* post-coersion SER */
|
||||
#define stMax 64
|
||||
|
||||
/* definitions for fields in TIR */
|
||||
|
||||
/* type qualifiers for ti.tq0 -> ti.(itqMax-1) */
|
||||
#define tqNil 0 /* bt is what you see */
|
||||
#define tqPtr 1 /* pointer */
|
||||
#define tqProc 2 /* procedure */
|
||||
#define tqArray 3 /* duh */
|
||||
#define tqFar 4 /* longer addressing - 8086/8 land */
|
||||
#define tqVol 5 /* volatile */
|
||||
#define tqConst 6 /* const */
|
||||
#define tqMax 8
|
||||
|
||||
/* basic types as seen in ti.bt */
|
||||
#define btNil 0 /* undefined (also, enum members) */
|
||||
#define btAdr 1 /* address - integer same size as pointer */
|
||||
#define btChar 2 /* character */
|
||||
#define btUChar 3 /* unsigned character */
|
||||
#define btShort 4 /* short */
|
||||
#define btUShort 5 /* unsigned short */
|
||||
#define btInt 6 /* int */
|
||||
#define btUInt 7 /* unsigned int */
|
||||
#define btLong 8 /* long */
|
||||
#define btULong 9 /* unsigned long */
|
||||
#define btFloat 10 /* float (real) */
|
||||
#define btDouble 11 /* Double (real) */
|
||||
#define btStruct 12 /* Structure (Record) */
|
||||
#define btUnion 13 /* Union (variant) */
|
||||
#define btEnum 14 /* Enumerated */
|
||||
#define btTypedef 15 /* defined via a typedef, isymRef points */
|
||||
#define btRange 16 /* subrange of int */
|
||||
#define btSet 17 /* pascal sets */
|
||||
#define btComplex 18 /* fortran complex */
|
||||
#define btDComplex 19 /* fortran double complex */
|
||||
#define btIndirect 20 /* forward or unnamed typedef */
|
||||
#define btFixedDec 21 /* Fixed Decimal */
|
||||
#define btFloatDec 22 /* Float Decimal */
|
||||
#define btString 23 /* Varying Length Character String */
|
||||
#define btBit 24 /* Aligned Bit String */
|
||||
#define btPicture 25 /* Picture */
|
||||
#define btVoid 26 /* void */
|
||||
#define btLongLong 27 /* long long */
|
||||
#define btULongLong 28 /* unsigned long long */
|
||||
#define btLong64 30 /* long (64-bit) */
|
||||
#define btULong64 31 /* unsigned long (64-bit) */
|
||||
#define btLongLong64 32 /* long long (64-bit) */
|
||||
#define btULongLong64 33 /* unsigned long long (64-bit) */
|
||||
#define btAdr64 34 /* address (64-bit) */
|
||||
#define btInt64 35 /* int (64-bit) */
|
||||
#define btUInt64 36 /* unsigned int (64-bit) */
|
||||
#define btMax 64
|
||||
|
||||
#if (_MFG == _MIPS)
|
||||
/* optimization type codes */
|
||||
#define otNil 0
|
||||
#define otReg 1 /* move var to reg */
|
||||
#define otBlock 2 /* begin basic block */
|
||||
#define otProc 3 /* procedure */
|
||||
#define otInline 4 /* inline procedure */
|
||||
#define otEnd 5 /* whatever you started */
|
||||
#define otMax 6 /* KEEP UP TO DATE */
|
||||
#endif /* (_MFG == _MIPS) */
|
561
include/coff/ti.h
Normal file
561
include/coff/ti.h
Normal file
@ -0,0 +1,561 @@
|
||||
/* COFF information for TI COFF support. Definitions in this file should be
|
||||
customized in a target-specific file, and then this file included (see
|
||||
tic54x.h for an example).
|
||||
|
||||
Copyright 2000, 2001, 2002, 2003, 2005, 2008, 2009, 2010
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef COFF_TI_H
|
||||
#define COFF_TI_H
|
||||
|
||||
/* Note "coff/external.h is not used because TI adds extra fields to the structures. */
|
||||
|
||||
/********************** FILE HEADER **********************/
|
||||
|
||||
struct external_filehdr
|
||||
{
|
||||
char f_magic[2]; /* magic number */
|
||||
char f_nscns[2]; /* number of sections */
|
||||
char f_timdat[4]; /* time & date stamp */
|
||||
char f_symptr[4]; /* file pointer to symtab */
|
||||
char f_nsyms[4]; /* number of symtab entries */
|
||||
char f_opthdr[2]; /* sizeof(optional hdr) */
|
||||
char f_flags[2]; /* flags */
|
||||
char f_target_id[2]; /* magic no. (TI COFF-specific) */
|
||||
};
|
||||
|
||||
/* COFF0 has magic number in f_magic, and omits f_target_id from the file
|
||||
header; for later versions, f_magic is 0xC1 for COFF1 and 0xC2 for COFF2
|
||||
and the target-specific magic number is found in f_target_id */
|
||||
|
||||
#define TICOFF0MAGIC TI_TARGET_ID
|
||||
#define TICOFF1MAGIC 0x00C1
|
||||
#define TICOFF2MAGIC 0x00C2
|
||||
#define TICOFF_AOUT_MAGIC 0x0108 /* magic number in optional header */
|
||||
#define TICOFF 1 /* customize coffcode.h */
|
||||
|
||||
/* The target_id field changes depending on the particular CPU target */
|
||||
/* for COFF0, the target id appeared in f_magic, where COFFX magic is now */
|
||||
#ifndef TI_TARGET_ID
|
||||
#error "TI_TARGET_ID needs to be defined for your CPU"
|
||||
#endif
|
||||
|
||||
/* Which bfd_arch to use... */
|
||||
#ifndef TICOFF_TARGET_ARCH
|
||||
#error "TICOFF_TARGET_ARCH needs to be defined for your CPU"
|
||||
#endif
|
||||
|
||||
#ifndef TICOFF_TARGET_MACHINE_GET
|
||||
#define TICOFF_TARGET_MACHINE_GET(FLAGS) 0
|
||||
#endif
|
||||
|
||||
#ifndef TICOFF_TARGET_MACHINE_SET
|
||||
#define TICOFF_TARGET_MACHINE_SET(FLAGSP, MACHINE)
|
||||
#endif
|
||||
|
||||
/* Default to COFF2 for file output */
|
||||
#ifndef TICOFF_DEFAULT_MAGIC
|
||||
#define TICOFF_DEFAULT_MAGIC TICOFF2MAGIC
|
||||
#endif
|
||||
|
||||
/* This value is made available in the rare case where a bfd is unavailable */
|
||||
#ifndef OCTETS_PER_BYTE_POWER
|
||||
#error "OCTETS_PER_BYTE_POWER not defined for this CPU"
|
||||
#else
|
||||
#define OCTETS_PER_BYTE (1<<OCTETS_PER_BYTE_POWER)
|
||||
#endif
|
||||
|
||||
/* default alignment is on a byte (not octet!) boundary */
|
||||
#ifndef COFF_DEFAULT_SECTION_ALIGNMENT_POWER
|
||||
#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 0
|
||||
#endif
|
||||
|
||||
/* TI COFF encodes the section alignment in the section header flags */
|
||||
#define COFF_ALIGN_IN_SECTION_HEADER 1
|
||||
#define COFF_ALIGN_IN_S_FLAGS 1
|
||||
/* requires a power-of-two argument */
|
||||
#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X)&0xF)<<8))
|
||||
/* result is a power of two */
|
||||
#define COFF_DECODE_ALIGNMENT(X) (((X)>>8)&0xF)
|
||||
|
||||
#define COFF0_P(ABFD) (bfd_coff_filhsz(ABFD) == FILHSZ_V0)
|
||||
#define COFF2_P(ABFD) (bfd_coff_scnhsz(ABFD) != SCNHSZ_V01)
|
||||
|
||||
#define COFF0_BADMAG(x) ((x).f_magic != TICOFF0MAGIC)
|
||||
#define COFF1_BADMAG(x) ((x).f_magic != TICOFF1MAGIC || (x).f_target_id != TI_TARGET_ID)
|
||||
#define COFF2_BADMAG(x) ((x).f_magic != TICOFF2MAGIC || (x).f_target_id != TI_TARGET_ID)
|
||||
|
||||
/* we need to read/write an extra field in the coff file header */
|
||||
#ifndef COFF_ADJUST_FILEHDR_IN_POST
|
||||
#define COFF_ADJUST_FILEHDR_IN_POST(abfd, src, dst) \
|
||||
do \
|
||||
{ \
|
||||
if (!COFF0_P (abfd)) \
|
||||
((struct internal_filehdr *)(dst))->f_target_id = \
|
||||
H_GET_16 (abfd, ((FILHDR *)(src))->f_target_id); \
|
||||
} \
|
||||
while (0)
|
||||
#endif
|
||||
|
||||
#ifndef COFF_ADJUST_FILEHDR_OUT_POST
|
||||
#define COFF_ADJUST_FILEHDR_OUT_POST(abfd, src, dst) \
|
||||
do \
|
||||
{ \
|
||||
if (!COFF0_P (abfd)) \
|
||||
H_PUT_16 (abfd, ((struct internal_filehdr *)(src))->f_target_id, \
|
||||
((FILHDR *)(dst))->f_target_id); \
|
||||
} \
|
||||
while (0)
|
||||
#endif
|
||||
|
||||
#define FILHDR struct external_filehdr
|
||||
#define FILHSZ 22
|
||||
#define FILHSZ_V0 20 /* COFF0 omits target_id field */
|
||||
|
||||
/* File header flags */
|
||||
#define F_RELFLG (0x0001)
|
||||
#define F_EXEC (0x0002)
|
||||
#define F_LNNO (0x0004)
|
||||
#define F_VERS (0x0010) /* TMS320C4x code */
|
||||
/* F_LSYMS needs to be redefined in your source file */
|
||||
#define F_LSYMS_TICOFF (0x0010) /* normal COFF is 0x8 */
|
||||
|
||||
#define F_10 0x00 /* file built for TMS320C1x devices */
|
||||
#define F_20 0x10 /* file built for TMS320C2x devices */
|
||||
#define F_25 0x20 /* file built for TMS320C2x/C5x devices */
|
||||
#define F_LENDIAN 0x0100 /* 16 bits/word, LSB first */
|
||||
#define F_SYMMERGE 0x1000 /* duplicate symbols were removed */
|
||||
|
||||
/********************** OPTIONAL HEADER **********************/
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char magic[2]; /* type of file (0x108) */
|
||||
char vstamp[2]; /* version stamp */
|
||||
char tsize[4]; /* text size in bytes, padded to FW bdry*/
|
||||
char dsize[4]; /* initialized data " " */
|
||||
char bsize[4]; /* uninitialized data " " */
|
||||
char entry[4]; /* entry pt. */
|
||||
char text_start[4]; /* base of text used for this file */
|
||||
char data_start[4]; /* base of data used for this file */
|
||||
}
|
||||
AOUTHDR;
|
||||
|
||||
|
||||
#define AOUTHDRSZ 28
|
||||
#define AOUTSZ 28
|
||||
|
||||
|
||||
/********************** SECTION HEADER **********************/
|
||||
/* COFF0, COFF1 */
|
||||
struct external_scnhdr_v01 {
|
||||
char s_name[8]; /* section name */
|
||||
char s_paddr[4]; /* physical address, aliased s_nlib */
|
||||
char s_vaddr[4]; /* virtual address */
|
||||
char s_size[4]; /* section size (in WORDS) */
|
||||
char s_scnptr[4]; /* file ptr to raw data for section */
|
||||
char s_relptr[4]; /* file ptr to relocation */
|
||||
char s_lnnoptr[4]; /* file ptr to line numbers */
|
||||
char s_nreloc[2]; /* number of relocation entries */
|
||||
char s_nlnno[2]; /* number of line number entries*/
|
||||
char s_flags[2]; /* flags */
|
||||
char s_reserved[1]; /* reserved */
|
||||
char s_page[1]; /* section page number (LOAD) */
|
||||
};
|
||||
|
||||
/* COFF2 */
|
||||
struct external_scnhdr {
|
||||
char s_name[8]; /* section name */
|
||||
char s_paddr[4]; /* physical address, aliased s_nlib */
|
||||
char s_vaddr[4]; /* virtual address */
|
||||
char s_size[4]; /* section size (in WORDS) */
|
||||
char s_scnptr[4]; /* file ptr to raw data for section */
|
||||
char s_relptr[4]; /* file ptr to relocation */
|
||||
char s_lnnoptr[4]; /* file ptr to line numbers */
|
||||
char s_nreloc[4]; /* number of relocation entries */
|
||||
char s_nlnno[4]; /* number of line number entries*/
|
||||
char s_flags[4]; /* flags */
|
||||
char s_reserved[2]; /* reserved */
|
||||
char s_page[2]; /* section page number (LOAD) */
|
||||
};
|
||||
|
||||
/*
|
||||
* Special section flags
|
||||
*/
|
||||
|
||||
/* TI COFF defines these flags;
|
||||
STYP_CLINK: the section should be excluded from the final
|
||||
linker output if there are no references found to any symbol in the section
|
||||
STYP_BLOCK: the section should be blocked, i.e. if the section would cross
|
||||
a page boundary, it is started at a page boundary instead.
|
||||
TI COFF puts the section alignment power of two in the section flags
|
||||
e.g. 2**N is alignment, flags |= (N & 0xF) << 8
|
||||
*/
|
||||
#define STYP_CLINK (0x4000)
|
||||
#define STYP_BLOCK (0x1000)
|
||||
#define STYP_ALIGN (0x0F00) /* TI COFF stores section alignment here */
|
||||
|
||||
#define SCNHDR_V01 struct external_scnhdr_v01
|
||||
#define SCNHDR struct external_scnhdr
|
||||
#define SCNHSZ_V01 40 /* for v0 and v1 */
|
||||
#define SCNHSZ 48
|
||||
|
||||
/* COFF2 changes the offsets and sizes of these fields
|
||||
Assume we're dealing with the COFF2 scnhdr structure, and adjust
|
||||
accordingly. Note: The GNU C versions of some of these macros
|
||||
are necessary in order to avoid compile time warnings triggered
|
||||
gcc's array bounds checking. The PUT_SCNHDR_PAGE macro also has
|
||||
the advantage on not evaluating LOC twice. */
|
||||
|
||||
#define GET_SCNHDR_NRELOC(ABFD, LOC) \
|
||||
(COFF2_P (ABFD) ? H_GET_32 (ABFD, LOC) : H_GET_16 (ABFD, LOC))
|
||||
#define PUT_SCNHDR_NRELOC(ABFD, VAL, LOC) \
|
||||
(COFF2_P (ABFD) ? H_PUT_32 (ABFD, VAL, LOC) : H_PUT_16 (ABFD, VAL, LOC))
|
||||
#ifdef __GNUC__
|
||||
#define GET_SCNHDR_NLNNO(ABFD, LOC) \
|
||||
({ \
|
||||
int nlnno; \
|
||||
char * ptr = (LOC); \
|
||||
if (COFF2_P (ABFD)) \
|
||||
nlnno = H_GET_32 (ABFD, ptr); \
|
||||
else \
|
||||
nlnno = H_GET_16 (ABFD, ptr - 2); \
|
||||
nlnno; \
|
||||
})
|
||||
#define PUT_SCNHDR_NLNNO(ABFD, VAL, LOC) \
|
||||
do \
|
||||
{ \
|
||||
char * ptr = (LOC); \
|
||||
if (COFF2_P (ABFD)) \
|
||||
H_PUT_32 (ABFD, VAL, ptr); \
|
||||
else \
|
||||
H_PUT_16 (ABFD, VAL, ptr - 2); \
|
||||
} \
|
||||
while (0)
|
||||
#define GET_SCNHDR_FLAGS(ABFD, LOC) \
|
||||
({ \
|
||||
int flags; \
|
||||
char * ptr = (LOC); \
|
||||
if (COFF2_P (ABFD)) \
|
||||
flags = H_GET_32 (ABFD, ptr); \
|
||||
else \
|
||||
flags = H_GET_16 (ABFD, ptr - 4); \
|
||||
flags; \
|
||||
})
|
||||
#define PUT_SCNHDR_FLAGS(ABFD, VAL, LOC) \
|
||||
do \
|
||||
{ \
|
||||
char * ptr = (LOC); \
|
||||
if (COFF2_P (ABFD)) \
|
||||
H_PUT_32 (ABFD, VAL, ptr); \
|
||||
else \
|
||||
H_PUT_16 (ABFD, VAL, ptr - 4); \
|
||||
} \
|
||||
while (0)
|
||||
#define GET_SCNHDR_PAGE(ABFD, LOC) \
|
||||
({ \
|
||||
unsigned page; \
|
||||
char * ptr = (LOC); \
|
||||
if (COFF2_P (ABFD)) \
|
||||
page = H_GET_16 (ABFD, ptr); \
|
||||
else \
|
||||
page = (unsigned) H_GET_8 (ABFD, ptr - 7); \
|
||||
page; \
|
||||
})
|
||||
/* On output, make sure that the "reserved" field is zero. */
|
||||
#define PUT_SCNHDR_PAGE(ABFD, VAL, LOC) \
|
||||
do \
|
||||
{ \
|
||||
char * ptr = (LOC); \
|
||||
if (COFF2_P (ABFD)) \
|
||||
H_PUT_16 (ABFD, VAL, ptr); \
|
||||
else \
|
||||
{ \
|
||||
H_PUT_8 (ABFD, VAL, ptr - 7); \
|
||||
H_PUT_8 (ABFD, 0, ptr - 8); \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
#else
|
||||
#define GET_SCNHDR_NLNNO(ABFD, LOC) \
|
||||
(COFF2_P (ABFD) ? H_GET_32 (ABFD, LOC) : H_GET_16 (ABFD, (LOC) - 2))
|
||||
#define PUT_SCNHDR_NLNNO(ABFD, VAL, LOC) \
|
||||
(COFF2_P (ABFD) ? H_PUT_32 (ABFD, VAL, LOC) : H_PUT_16 (ABFD, VAL, (LOC) - 2))
|
||||
#define GET_SCNHDR_FLAGS(ABFD, LOC) \
|
||||
(COFF2_P (ABFD) ? H_GET_32 (ABFD, LOC) : H_GET_16 (ABFD, (LOC) - 4))
|
||||
#define PUT_SCNHDR_FLAGS(ABFD, VAL, LOC) \
|
||||
(COFF2_P (ABFD) ? H_PUT_32 (ABFD, VAL, LOC) : H_PUT_16 (ABFD, VAL, (LOC) - 4))
|
||||
#define GET_SCNHDR_PAGE(ABFD, LOC) \
|
||||
(COFF2_P (ABFD) ? H_GET_16 (ABFD, LOC) : (unsigned) H_GET_8 (ABFD, (LOC) - 7))
|
||||
/* On output, make sure that the "reserved" field is zero. */
|
||||
#define PUT_SCNHDR_PAGE(ABFD, VAL, LOC) \
|
||||
(COFF2_P (ABFD) \
|
||||
? H_PUT_16 (ABFD, VAL, LOC) \
|
||||
: H_PUT_8 (ABFD, VAL, (LOC) - 7), H_PUT_8 (ABFD, 0, (LOC) - 8))
|
||||
#endif
|
||||
|
||||
|
||||
/* TI COFF stores section size as number of bytes (address units, not octets),
|
||||
so adjust to be number of octets, which is what BFD expects */
|
||||
#define GET_SCNHDR_SIZE(ABFD, SZP) \
|
||||
(H_GET_32 (ABFD, SZP) * bfd_octets_per_byte (ABFD))
|
||||
#define PUT_SCNHDR_SIZE(ABFD, SZ, SZP) \
|
||||
H_PUT_32 (ABFD, (SZ) / bfd_octets_per_byte (ABFD), SZP)
|
||||
|
||||
#define COFF_ADJUST_SCNHDR_IN_POST(ABFD, EXT, INT) \
|
||||
do \
|
||||
{ \
|
||||
((struct internal_scnhdr *)(INT))->s_page = \
|
||||
GET_SCNHDR_PAGE (ABFD, ((SCNHDR *)(EXT))->s_page); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The entire scnhdr may not be assigned.
|
||||
Ensure that everything is initialized. */
|
||||
#define COFF_ADJUST_SCNHDR_OUT_PRE(ABFD, INT, EXT) \
|
||||
do \
|
||||
{ \
|
||||
memset((EXT), 0, sizeof (SCNHDR)); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* The line number and reloc overflow checking in coff_swap_scnhdr_out in
|
||||
coffswap.h doesn't use PUT_X for s_nlnno and s_nreloc.
|
||||
Due to different sized v0/v1/v2 section headers, we have to re-write these
|
||||
fields.
|
||||
*/
|
||||
#define COFF_ADJUST_SCNHDR_OUT_POST(ABFD, INT, EXT) \
|
||||
do \
|
||||
{ \
|
||||
PUT_SCNHDR_NLNNO (ABFD, ((struct internal_scnhdr *)(INT))->s_nlnno, \
|
||||
((SCNHDR *)(EXT))->s_nlnno); \
|
||||
PUT_SCNHDR_NRELOC (ABFD, ((struct internal_scnhdr *)(INT))->s_nreloc,\
|
||||
((SCNHDR *)(EXT))->s_nreloc); \
|
||||
PUT_SCNHDR_FLAGS (ABFD, ((struct internal_scnhdr *)(INT))->s_flags, \
|
||||
((SCNHDR *)(EXT))->s_flags); \
|
||||
PUT_SCNHDR_PAGE (ABFD, ((struct internal_scnhdr *)(INT))->s_page, \
|
||||
((SCNHDR *)(EXT))->s_page); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/*
|
||||
* names of "special" sections
|
||||
*/
|
||||
#define _TEXT ".text"
|
||||
#define _DATA ".data"
|
||||
#define _BSS ".bss"
|
||||
#define _CINIT ".cinit" /* initialized C data */
|
||||
#define _SCONST ".const" /* constants */
|
||||
#define _SWITCH ".switch" /* switch tables */
|
||||
#define _STACK ".stack" /* C stack */
|
||||
#define _SYSMEM ".sysmem" /* used for malloc et al. syscalls */
|
||||
|
||||
/********************** LINE NUMBERS **********************/
|
||||
|
||||
/* 1 line number entry for every "breakpointable" source line in a section.
|
||||
* Line numbers are grouped on a per function basis; first entry in a function
|
||||
* grouping will have l_lnno = 0 and in place of physical address will be the
|
||||
* symbol table index of the function name.
|
||||
*/
|
||||
struct external_lineno {
|
||||
union {
|
||||
char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
|
||||
char l_paddr[4]; /* (physical) address of line number */
|
||||
} l_addr;
|
||||
char l_lnno[2]; /* line number */
|
||||
};
|
||||
|
||||
#define LINENO struct external_lineno
|
||||
#define LINESZ 6
|
||||
|
||||
|
||||
/********************** SYMBOLS **********************/
|
||||
|
||||
/* NOTE: this is what a local label looks like in assembly source; what it
|
||||
looks like in COFF output is undefined */
|
||||
#define TICOFF_LOCAL_LABEL_P(NAME) \
|
||||
((NAME[0] == '$' && NAME[1] >= '0' && NAME[1] <= '9' && NAME[2] == '\0') \
|
||||
|| NAME[strlen(NAME)-1] == '?')
|
||||
|
||||
#define E_SYMNMLEN 8 /* # characters in a symbol name */
|
||||
#define E_FILNMLEN 14 /* # characters in a file name */
|
||||
#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
|
||||
|
||||
struct external_syment
|
||||
{
|
||||
union {
|
||||
char e_name[E_SYMNMLEN];
|
||||
struct {
|
||||
char e_zeroes[4];
|
||||
char e_offset[4];
|
||||
} e;
|
||||
} e;
|
||||
char e_value[4];
|
||||
char e_scnum[2];
|
||||
char e_type[2];
|
||||
char e_sclass[1];
|
||||
char e_numaux[1];
|
||||
};
|
||||
|
||||
|
||||
#define N_BTMASK (017)
|
||||
#define N_TMASK (060)
|
||||
#define N_BTSHFT (4)
|
||||
#define N_TSHIFT (2)
|
||||
|
||||
|
||||
union external_auxent {
|
||||
struct {
|
||||
char x_tagndx[4]; /* str, un, or enum tag indx */
|
||||
union {
|
||||
struct {
|
||||
char x_lnno[2]; /* declaration line number */
|
||||
char x_size[2]; /* str/union/array size */
|
||||
} x_lnsz;
|
||||
char x_fsize[4]; /* size of function */
|
||||
} x_misc;
|
||||
union {
|
||||
struct { /* if ISFCN, tag, or .bb */
|
||||
char x_lnnoptr[4]; /* ptr to fcn line # */
|
||||
char x_endndx[4]; /* entry ndx past block end */
|
||||
} x_fcn;
|
||||
struct { /* if ISARY, up to 4 dimen. */
|
||||
char x_dimen[E_DIMNUM][2];
|
||||
} x_ary;
|
||||
} x_fcnary;
|
||||
char x_tvndx[2]; /* tv index */
|
||||
} x_sym;
|
||||
|
||||
union {
|
||||
char x_fname[E_FILNMLEN];
|
||||
struct {
|
||||
char x_zeroes[4];
|
||||
char x_offset[4];
|
||||
} x_n;
|
||||
} x_file;
|
||||
|
||||
struct {
|
||||
char x_scnlen[4]; /* section length */
|
||||
char x_nreloc[2]; /* # relocation entries */
|
||||
char x_nlinno[2]; /* # line numbers */
|
||||
} x_scn;
|
||||
|
||||
struct {
|
||||
char x_tvfill[4]; /* tv fill value */
|
||||
char x_tvlen[2]; /* length of .tv */
|
||||
char x_tvran[2][2]; /* tv range */
|
||||
} x_tv; /* info about .tv section (in auxent of symbol .tv)) */
|
||||
|
||||
|
||||
};
|
||||
|
||||
#define SYMENT struct external_syment
|
||||
#define SYMESZ 18
|
||||
#define AUXENT union external_auxent
|
||||
#define AUXESZ 18
|
||||
|
||||
/* section lengths are in target bytes (not host bytes) */
|
||||
#define GET_SCN_SCNLEN(ABFD, EXT) \
|
||||
(H_GET_32 (ABFD, (EXT)->x_scn.x_scnlen) * bfd_octets_per_byte (ABFD))
|
||||
#define PUT_SCN_SCNLEN(ABFD, INT, EXT) \
|
||||
H_PUT_32 (ABFD, (INT) / bfd_octets_per_byte (ABFD), (EXT)->x_scn.x_scnlen)
|
||||
|
||||
/* lnsz size is in bits in COFF file, in bytes in BFD */
|
||||
#define GET_LNSZ_SIZE(abfd, ext) \
|
||||
(H_GET_16 (abfd, ext->x_sym.x_misc.x_lnsz.x_size) / (in_class != C_FIELD ? 8 : 1))
|
||||
|
||||
#define PUT_LNSZ_SIZE(abfd, in, ext) \
|
||||
H_PUT_16 (abfd, ((in_class != C_FIELD) ? (in) * 8 : (in)), \
|
||||
ext->x_sym.x_misc.x_lnsz.x_size)
|
||||
|
||||
/* TI COFF stores offsets for MOS and MOU in bits; BFD expects bytes
|
||||
Also put the load page flag of the section into the symbol value if it's an
|
||||
address. */
|
||||
#ifndef NEEDS_PAGE
|
||||
#define NEEDS_PAGE(X) 0
|
||||
#define PAGE_MASK 0
|
||||
#endif
|
||||
#define COFF_ADJUST_SYM_IN_POST(ABFD, EXT, INT) \
|
||||
do \
|
||||
{ \
|
||||
struct internal_syment *dst = (struct internal_syment *)(INT); \
|
||||
if (dst->n_sclass == C_MOS || dst->n_sclass == C_MOU) \
|
||||
dst->n_value /= 8; \
|
||||
else if (NEEDS_PAGE (dst->n_sclass)) { \
|
||||
asection *scn = coff_section_from_bfd_index (abfd, dst->n_scnum); \
|
||||
dst->n_value |= (scn->lma & PAGE_MASK); \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define COFF_ADJUST_SYM_OUT_POST(ABFD, INT, EXT) \
|
||||
do \
|
||||
{ \
|
||||
struct internal_syment *src = (struct internal_syment *)(INT); \
|
||||
SYMENT *dst = (SYMENT *)(EXT); \
|
||||
if (src->n_sclass == C_MOU || src->n_sclass == C_MOS) \
|
||||
H_PUT_32 (abfd, src->n_value * 8, dst->e_value); \
|
||||
else if (NEEDS_PAGE (src->n_sclass)) { \
|
||||
H_PUT_32 (abfd, src->n_value &= ~PAGE_MASK, dst->e_value); \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* Detect section-relative absolute symbols so they get flagged with a sym
|
||||
index of -1.
|
||||
*/
|
||||
#define SECTION_RELATIVE_ABSOLUTE_SYMBOL_P(RELOC, SECT) \
|
||||
((*(RELOC)->sym_ptr_ptr)->section->output_section == (SECT) \
|
||||
&& (RELOC)->howto->name[0] == 'A')
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc_v0
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[2];
|
||||
char r_reserved[2];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_reserved[2]; /* extended pmad byte for COFF2 */
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ_V0 10 /* FIXME -- coffcode.h needs fixing */
|
||||
#define RELSZ 12 /* for COFF1/2 */
|
||||
|
||||
#define SWAP_OUT_RELOC_EXTRA(abfd, src, dst) \
|
||||
do memset (dst->r_reserved, 0, sizeof (dst->r_reserved)); while (0)
|
||||
|
||||
/* various relocation types. */
|
||||
#define R_ABS 0x0000 /* no relocation */
|
||||
#define R_REL13 0x002A /* 13-bit direct reference (???) */
|
||||
#define R_PARTLS7 0x0028 /* 7 LSBs of an address */
|
||||
#define R_PARTMS9 0x0029 /* 9MSBs of an address */
|
||||
#define R_EXTWORD 0x002B /* 23-bit direct reference */
|
||||
#define R_EXTWORD16 0x002C /* 16-bit direct reference to 23-bit addr*/
|
||||
#define R_EXTWORDMS7 0x002D /* upper 7 bits of 23-bit address */
|
||||
|
||||
#endif /* COFF_TI_H */
|
51
include/coff/tic30.h
Normal file
51
include/coff/tic30.h
Normal file
@ -0,0 +1,51 @@
|
||||
/* coff information for Texas Instruments TMS320C3X
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define L_LNNO_SIZE 4
|
||||
#include "coff/external.h"
|
||||
|
||||
#define TIC30MAGIC 0xC000
|
||||
|
||||
#define TIC30BADMAG(x) (((x).f_magic != TIC30MAGIC))
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
/* The external reloc has an offset field, because some of the reloc
|
||||
types on the z8k don't have room in the instruction for the entire
|
||||
offset - eg with segments */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_offset[4];
|
||||
char r_type[2];
|
||||
char r_stuff[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 16
|
||||
|
||||
/* TMS320C30 relocation types. */
|
||||
|
||||
#define R_TIC30_ABS16 0x100 /* 16 bit absolute. */
|
||||
#define R_TIC30_ABS24 0x101 /* 24 bit absolute. */
|
||||
#define R_TIC30_ABS32 0x102 /* 32 bit absolute. */
|
||||
#define R_TIC30_LDP 0x103 /* LDP bits 23-16 to 7-0. */
|
||||
#define R_TIC30_PC16 0x104 /* 16 bit pc relative. */
|
47
include/coff/tic4x.h
Normal file
47
include/coff/tic4x.h
Normal file
@ -0,0 +1,47 @@
|
||||
/* TI COFF information for Texas Instruments TMS320C4X/C3X.
|
||||
This file customizes the settings in coff/ti.h.
|
||||
|
||||
Copyright 2002, 2003, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef COFF_TIC4X_H
|
||||
#define COFF_TIC4X_H
|
||||
|
||||
#define TIC4X_TARGET_ID 0x0093
|
||||
/* Octets per byte, as a power of two. */
|
||||
#define TI_TARGET_ID TIC4X_TARGET_ID
|
||||
#define OCTETS_PER_BYTE_POWER 2
|
||||
/* Add to howto to get absolute/sect-relative version. */
|
||||
#define HOWTO_BANK 6
|
||||
#define TICOFF_TARGET_ARCH bfd_arch_tic4x
|
||||
/* We use COFF2. */
|
||||
#define TICOFF_DEFAULT_MAGIC TICOFF2MAGIC
|
||||
|
||||
#define TICOFF_TARGET_MACHINE_GET(FLAGS) \
|
||||
(((FLAGS) & F_VERS) ? bfd_mach_tic4x : bfd_mach_tic3x)
|
||||
|
||||
#define TICOFF_TARGET_MACHINE_SET(FLAGSP, MACHINE) \
|
||||
do \
|
||||
{ \
|
||||
if ((MACHINE) == bfd_mach_tic4x) \
|
||||
*(FLAGSP) |= F_VERS; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#include "coff/ti.h"
|
||||
|
||||
#endif /* COFF_TIC4X_H */
|
60
include/coff/tic54x.h
Normal file
60
include/coff/tic54x.h
Normal file
@ -0,0 +1,60 @@
|
||||
/* TI COFF information for Texas Instruments TMS320C54X.
|
||||
This file customizes the settings in coff/ti.h.
|
||||
|
||||
Copyright 2000, 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef COFF_TIC54X_H
|
||||
#define COFF_TIC54X_H
|
||||
|
||||
#define TIC54X_TARGET_ID 0x98
|
||||
#define TIC54XALGMAGIC 0x009B /* c54x algebraic assembler output */
|
||||
#define TIC5X_TARGET_ID 0x92
|
||||
#define TI_TARGET_ID TIC54X_TARGET_ID
|
||||
#define OCTETS_PER_BYTE_POWER 1 /* octets per byte, as a power of two */
|
||||
#define HOWTO_BANK 6 /* add to howto to get absolute/sect-relative version */
|
||||
#define TICOFF_TARGET_ARCH bfd_arch_tic54x
|
||||
#define TICOFF_DEFAULT_MAGIC TICOFF1MAGIC /* we use COFF1 for compatibility */
|
||||
|
||||
/* Page macros
|
||||
|
||||
The first GDB port requires flags in its remote memory access commands to
|
||||
distinguish between data/prog space. Hopefully we can make this go away
|
||||
eventually. Stuff the page in the upper bits of a 32-bit address, since
|
||||
the c5x family only uses 16 or 23 bits.
|
||||
|
||||
c2x, c5x and most c54x devices have 16-bit addresses, but the c548 has
|
||||
23-bit program addresses. Make sure the page flags don't interfere.
|
||||
These flags are used by GDB to identify the destination page for
|
||||
addresses.
|
||||
*/
|
||||
|
||||
/* Recognized load pages (by common convention). */
|
||||
#define PG_PROG 0x0 /* PROG page */
|
||||
#define PG_DATA 0x1 /* DATA page */
|
||||
#define PG_IO 0x2 /* I/O page */
|
||||
|
||||
/** Indicate whether the given storage class requires a page flag. */
|
||||
#define NEEDS_PAGE(X) ((X)==C_EXT)
|
||||
#define PAGE_MASK 0xFF000000
|
||||
#define ADDR_MASK 0x00FFFFFF
|
||||
#define PG_TO_FLAG(p) (((unsigned long)(p) & 0xFF) << 24)
|
||||
#define FLAG_TO_PG(f) (((f) >> 24) & 0xFF)
|
||||
|
||||
#include "coff/ti.h"
|
||||
|
||||
#endif /* COFF_TIC54X_H */
|
123
include/coff/tic80.h
Normal file
123
include/coff/tic80.h
Normal file
@ -0,0 +1,123 @@
|
||||
/* coff information for TI TMS320C80 (MVP)
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define DO_NOT_DEFINE_FILHDR
|
||||
#define DO_NOT_DEFINE_SCNHDR
|
||||
#define L_LNNO_SIZE 2
|
||||
#include "coff/external.h"
|
||||
|
||||
/********************** FILE HEADER **********************/
|
||||
|
||||
struct external_filehdr
|
||||
{
|
||||
char f_magic[2]; /* magic number */
|
||||
char f_nscns[2]; /* number of sections */
|
||||
char f_timdat[4]; /* time & date stamp */
|
||||
char f_symptr[4]; /* file pointer to symtab */
|
||||
char f_nsyms[4]; /* number of symtab entries */
|
||||
char f_opthdr[2]; /* sizeof(optional hdr) */
|
||||
char f_flags[2]; /* flags */
|
||||
char f_target_id[2];/* target id (TIc80 specific) */
|
||||
};
|
||||
|
||||
#define TIC80_ARCH_MAGIC 0x0C1 /* Goes in the file header magic number field */
|
||||
#define TIC80_TARGET_ID 0x95 /* Goes in the target id field */
|
||||
|
||||
#define TIC80BADMAG(x) ((x).f_magic != TIC80_ARCH_MAGIC)
|
||||
|
||||
#define FILHDR struct external_filehdr
|
||||
#define FILHSZ 22
|
||||
|
||||
#define TIC80_AOUTHDR_MAGIC 0x108 /* Goes in the optional file header magic number field */
|
||||
|
||||
/********************** SECTION HEADER **********************/
|
||||
|
||||
struct external_scnhdr
|
||||
{
|
||||
char s_name[8]; /* section name */
|
||||
char s_paddr[4]; /* physical address, aliased s_nlib */
|
||||
char s_vaddr[4]; /* virtual address */
|
||||
char s_size[4]; /* section size */
|
||||
char s_scnptr[4]; /* file ptr to raw data for section */
|
||||
char s_relptr[4]; /* file ptr to relocation */
|
||||
char s_lnnoptr[4]; /* file ptr to line numbers */
|
||||
char s_nreloc[2]; /* number of relocation entries */
|
||||
char s_nlnno[2]; /* number of line number entries*/
|
||||
char s_flags[2]; /* flags */
|
||||
char s_reserved[1]; /* reserved (TIc80 specific) */
|
||||
char s_mempage[1]; /* memory page number (TIc80) */
|
||||
};
|
||||
|
||||
/* Names of "special" sections. */
|
||||
#define _TEXT ".text"
|
||||
#define _DATA ".data"
|
||||
#define _BSS ".bss"
|
||||
#define _CINIT ".cinit"
|
||||
#define _CONST ".const"
|
||||
#define _SWITCH ".switch"
|
||||
#define _STACK ".stack"
|
||||
#define _SYSMEM ".sysmem"
|
||||
|
||||
#define SCNHDR struct external_scnhdr
|
||||
#define SCNHSZ 40
|
||||
|
||||
/* FIXME - need to correlate external_auxent with
|
||||
TIc80 Code Generation Tools User's Guide, CG:A-25 */
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
/* The external reloc has an offset field, because some of the reloc
|
||||
types on the h8 don't have room in the instruction for the entire
|
||||
offset - eg the strange jump and high page addressing modes. */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_reserved[2];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 12
|
||||
|
||||
/* TIc80 relocation types. */
|
||||
|
||||
#define R_ABS 0x00 /* Absolute address - no relocation */
|
||||
#define R_RELLONGX 0x11 /* PP: 32 bits, direct */
|
||||
#define R_PPBASE 0x34 /* PP: Global base address type */
|
||||
#define R_PPLBASE 0x35 /* PP: Local base address type */
|
||||
#define R_PP15 0x38 /* PP: Global 15 bit offset */
|
||||
#define R_PP15W 0x39 /* PP: Global 15 bit offset divided by 4 */
|
||||
#define R_PP15H 0x3A /* PP: Global 15 bit offset divided by 2 */
|
||||
#define R_PP16B 0x3B /* PP: Global 16 bit offset for bytes */
|
||||
#define R_PPL15 0x3C /* PP: Local 15 bit offset */
|
||||
#define R_PPL15W 0x3D /* PP: Local 15 bit offset divided by 4 */
|
||||
#define R_PPL15H 0x3E /* PP: Local 15 bit offset divided by 2 */
|
||||
#define R_PPL16B 0x3F /* PP: Local 16 bit offset for bytes */
|
||||
#define R_PPN15 0x40 /* PP: Global 15 bit negative offset */
|
||||
#define R_PPN15W 0x41 /* PP: Global 15 bit negative offset divided by 4 */
|
||||
#define R_PPN15H 0x42 /* PP: Global 15 bit negative offset divided by 2 */
|
||||
#define R_PPN16B 0x43 /* PP: Global 16 bit negative byte offset */
|
||||
#define R_PPLN15 0x44 /* PP: Local 15 bit negative offset */
|
||||
#define R_PPLN15W 0x45 /* PP: Local 15 bit negative offset divided by 4 */
|
||||
#define R_PPLN15H 0x46 /* PP: Local 15 bit negative offset divided by 2 */
|
||||
#define R_PPLN16B 0x47 /* PP: Local 16 bit negative byte offset */
|
||||
#define R_MPPCR15W 0x4E /* MP: 15 bit PC-relative divided by 4 */
|
||||
#define R_MPPCR 0x4F /* MP: 32 bit PC-relative divided by 4 */
|
47
include/coff/w65.h
Normal file
47
include/coff/w65.h
Normal file
@ -0,0 +1,47 @@
|
||||
/* coff information for WDC 65816
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define L_LNNO_SIZE 4
|
||||
#include "coff/external.h"
|
||||
|
||||
#define W65MAGIC 0x6500
|
||||
|
||||
#define W65BADMAG(x) (((x).f_magic != W65MAGIC))
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
/* The external reloc has an offset field, because some of the reloc
|
||||
types on the w65 don't have room in the instruction for the entire
|
||||
offset - eg the strange jump and high page addressing modes */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_offset[4];
|
||||
char r_type[2];
|
||||
char r_stuff[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 16
|
||||
|
||||
|
||||
|
||||
|
62
include/coff/we32k.h
Normal file
62
include/coff/we32k.h
Normal file
@ -0,0 +1,62 @@
|
||||
/* coff information for we32k
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define L_LNNO_SIZE 2
|
||||
#include "coff/external.h"
|
||||
|
||||
/* Bits for f_flags:
|
||||
F_RELFLG relocation info stripped from file
|
||||
F_EXEC file is executable (no unresolved external references)
|
||||
F_LNNO line numbers stripped from file
|
||||
F_LSYMS local symbols stripped from file
|
||||
F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */
|
||||
|
||||
#define F_RELFLG (0x0001)
|
||||
#define F_EXEC (0x0002)
|
||||
#define F_LNNO (0x0004)
|
||||
#define F_LSYMS (0x0008)
|
||||
#define F_BM32B (0020000)
|
||||
#define F_BM32MAU (0040000)
|
||||
|
||||
#define WE32KMAGIC 0x170 /* we32k sans transfer vector */
|
||||
#define FBOMAGIC 0x170 /* we32k sans transfer vector */
|
||||
#define MTVMAGIC 0x171 /* we32k with transfer vector */
|
||||
#define RBOMAGIC 0x172 /* reserved */
|
||||
#define WE32KBADMAG(x) ( ((x).f_magic != WE32KMAGIC) \
|
||||
&& ((x).f_magic != FBOMAGIC) \
|
||||
&& ((x).f_magic != RBOMAGIC) \
|
||||
&& ((x).f_magic != MTVMAGIC))
|
||||
|
||||
/* More names of "special" sections. */
|
||||
#define _TV ".tv"
|
||||
#define _INIT ".init"
|
||||
#define _FINI ".fini"
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10
|
||||
|
57
include/coff/x86_64.h
Normal file
57
include/coff/x86_64.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* COFF information for AMD 64.
|
||||
Copyright 2006, 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA.
|
||||
|
||||
Written by Kai Tietz, OneVision Software GmbH&CoKg. */
|
||||
|
||||
#define L_LNNO_SIZE 2
|
||||
#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
||||
|
||||
#include "coff/external.h"
|
||||
|
||||
#define COFF_PAGE_SIZE 0x1000
|
||||
|
||||
#define AMD64MAGIC 0x8664
|
||||
|
||||
#define AMD64BADMAG(x) ((x).f_magic != AMD64MAGIC)
|
||||
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
|
||||
|
||||
#define OMAGIC 0404 /* Object files, eg as output. */
|
||||
#define ZMAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC /* Demand load format, eg normal ld output 0x10b. */
|
||||
#define STMAGIC 0401 /* Target shlib. */
|
||||
#define SHMAGIC 0443 /* Host shlib. */
|
||||
|
||||
/* Define some NT default values. */
|
||||
/* #define NT_IMAGE_BASE 0x400000 moved to internal.h. */
|
||||
#define NT_SECTION_ALIGNMENT 0x1000
|
||||
#define NT_FILE_ALIGNMENT 0x200
|
||||
#define NT_DEF_RESERVE 0x100000
|
||||
#define NT_DEF_COMMIT 0x1000
|
||||
|
||||
/* Relocation directives. */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_type[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 10
|
647
include/coff/xcoff.h
Normal file
647
include/coff/xcoff.h
Normal file
@ -0,0 +1,647 @@
|
||||
/* Internal format of XCOFF object file data structures for BFD.
|
||||
|
||||
Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005,
|
||||
2009, 2010 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor <ian@cygnus.com>, Cygnus Support.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _INTERNAL_XCOFF_H
|
||||
#define _INTERNAL_XCOFF_H
|
||||
|
||||
/* XCOFF specific f_flags. */
|
||||
|
||||
/* File was profiled with fdpr. */
|
||||
#define F_FDPR_PROF 0x0010
|
||||
|
||||
/* File was reordered with fdpr. */
|
||||
#define F_FDPR_OPTI 0x0020
|
||||
|
||||
/* File use very large program support. */
|
||||
#define F_DSA 0x0040
|
||||
|
||||
/* One aux header specifying medium page sizes is non-zero. */
|
||||
#define F_VARPG 0x0100
|
||||
|
||||
/* Read/write sections are non-executable. */
|
||||
#define F_NONEXEC 0x8000
|
||||
|
||||
/* Linker */
|
||||
|
||||
/* Names of "special" sections. */
|
||||
#define _TEXT ".text"
|
||||
#define _DATA ".data"
|
||||
#define _BSS ".bss"
|
||||
#define _PAD ".pad"
|
||||
#define _LOADER ".loader"
|
||||
#define _EXCEPT ".except"
|
||||
#define _TYPCHK ".typchk"
|
||||
|
||||
/* XCOFF uses special .dwXXX sections with the type STYP_DWARF. */
|
||||
#define STYP_DWARF 0x0010
|
||||
|
||||
/* High-order 16-bits dwarf subtypes. */
|
||||
#define SSUBTYP_DWINFO 0x10000
|
||||
#define SSUBTYP_DWLINE 0x20000
|
||||
#define SSUBTYP_DWPBNMS 0x30000
|
||||
#define SSUBTYP_DWPBTYP 0x40000
|
||||
#define SSUBTYP_DWARNGE 0x50000
|
||||
#define SSUBTYP_DWABREV 0x60000
|
||||
#define SSUBTYP_DWSTR 0x70000
|
||||
#define SSUBTYP_DWRNGES 0x80000
|
||||
|
||||
/* XCOFF uses a special .loader section with type STYP_LOADER. */
|
||||
#define STYP_LOADER 0x1000
|
||||
|
||||
/* Specifies an exception section. A section of this type provides
|
||||
information to identify the reason that a trap or ececptin occured within
|
||||
and executable object program */
|
||||
#define STYP_EXCEPT 0x0100
|
||||
|
||||
/* Specifies an initialized thread-local data section. */
|
||||
#define STYP_TDATA 0x0400
|
||||
|
||||
/* Specifies an uninitialized thread-local data section. */
|
||||
#define STYP_TBSS 0x0800
|
||||
|
||||
/* XCOFF uses a special .debug section with type STYP_DEBUG. */
|
||||
#define STYP_DEBUG 0x2000
|
||||
|
||||
/* Specifies a type check section. A section of this type contains parameter
|
||||
argument type check strings used by the AIX binder. */
|
||||
#define STYP_TYPCHK 0x4000
|
||||
|
||||
/* XCOFF handles line number or relocation overflow by creating
|
||||
another section header with STYP_OVRFLO set. */
|
||||
#define STYP_OVRFLO 0x8000
|
||||
|
||||
#define RS6K_AOUTHDR_OMAGIC 0x0107 /* old: text & data writeable */
|
||||
#define RS6K_AOUTHDR_NMAGIC 0x0108 /* new: text r/o, data r/w */
|
||||
#define RS6K_AOUTHDR_ZMAGIC 0x010B /* paged: text r/o, both page-aligned */
|
||||
|
||||
/* XCOFF relocation types.
|
||||
The relocations are described in the function
|
||||
xcoff[64]_ppc_relocate_section in coff64-rs6000.c and coff-rs6000.c */
|
||||
|
||||
#define R_POS (0x00)
|
||||
#define R_NEG (0x01)
|
||||
#define R_REL (0x02)
|
||||
#define R_TOC (0x03)
|
||||
#define R_RTB (0x04)
|
||||
#define R_GL (0x05)
|
||||
#define R_TCL (0x06)
|
||||
#define R_BA (0x08)
|
||||
#define R_BR (0x0a)
|
||||
#define R_RL (0x0c)
|
||||
#define R_RLA (0x0d)
|
||||
#define R_REF (0x0f)
|
||||
#define R_TRL (0x12)
|
||||
#define R_TRLA (0x13)
|
||||
#define R_RRTBI (0x14)
|
||||
#define R_RRTBA (0x15)
|
||||
#define R_CAI (0x16)
|
||||
#define R_CREL (0x17)
|
||||
#define R_RBA (0x18)
|
||||
#define R_RBAC (0x19)
|
||||
#define R_RBR (0x1a)
|
||||
#define R_RBRC (0x1b)
|
||||
#define R_TLS (0x20)
|
||||
#define R_TLS_IE (0x21)
|
||||
#define R_TLS_LD (0x22)
|
||||
#define R_TLS_LE (0x23)
|
||||
#define R_TLSM (0x24)
|
||||
#define R_TLSML (0x25)
|
||||
#define R_TOCU (0x30)
|
||||
#define R_TOCL (0x31)
|
||||
|
||||
/* Storage class #defines, from /usr/include/storclass.h that are not already
|
||||
defined in internal.h */
|
||||
|
||||
/* Comment string in .info section */
|
||||
#define C_INFO 110
|
||||
|
||||
/* Dwarf symbol. */
|
||||
#define C_DWARF 112
|
||||
|
||||
/* Auxillary Symbol Entries */
|
||||
|
||||
/* x_smtyp values: */
|
||||
#define SMTYP_ALIGN(x) ((x) >> 3) /* log2 of alignment */
|
||||
#define SMTYP_SMTYP(x) ((x) & 0x7) /* symbol type */
|
||||
/* Symbol type values: */
|
||||
#define XTY_ER 0 /* External reference */
|
||||
#define XTY_SD 1 /* Csect definition */
|
||||
#define XTY_LD 2 /* Label definition */
|
||||
#define XTY_CM 3 /* .BSS */
|
||||
#define XTY_EM 4 /* Error message */
|
||||
#define XTY_US 5 /* "Reserved for internal use" */
|
||||
|
||||
/* x_smclas values: */
|
||||
#define XMC_PR 0 /* Read-only program code */
|
||||
#define XMC_RO 1 /* Read-only constant */
|
||||
#define XMC_DB 2 /* Read-only debug dictionary table */
|
||||
#define XMC_TC 3 /* Read-write general TOC entry */
|
||||
#define XMC_UA 4 /* Read-write unclassified */
|
||||
#define XMC_RW 5 /* Read-write data */
|
||||
#define XMC_GL 6 /* Read-only global linkage */
|
||||
#define XMC_XO 7 /* Read-only extended operation */
|
||||
#define XMC_SV 8 /* Read-only supervisor call */
|
||||
#define XMC_BS 9 /* Read-write BSS */
|
||||
#define XMC_DS 10 /* Read-write descriptor csect */
|
||||
#define XMC_UC 11 /* Read-write unnamed Fortran common */
|
||||
#define XMC_TI 12 /* Read-only traceback index csect */
|
||||
#define XMC_TB 13 /* Read-only traceback table csect */
|
||||
/* 14 ??? */
|
||||
#define XMC_TC0 15 /* Read-write TOC anchor */
|
||||
#define XMC_TD 16 /* Read-write data in TOC */
|
||||
#define XMC_SV64 17 /* Read-only 64 bit supervisor call */
|
||||
#define XMC_SV3264 18 /* Read-only 32 or 64 bit supervisor call */
|
||||
/* 19 ??? */
|
||||
#define XMC_TL 20 /* Read-write initialized TLS data */
|
||||
#define XMC_TU 21 /* Read-write uninitialized TLS data */
|
||||
#define XMC_TE 22 /* Same as XMC_TC but mapped after it */
|
||||
|
||||
/* The ldhdr structure. This appears at the start of the .loader
|
||||
section. */
|
||||
|
||||
struct internal_ldhdr
|
||||
{
|
||||
/* The version number:
|
||||
1 : 32 bit
|
||||
2 : 64 bit */
|
||||
unsigned long l_version;
|
||||
|
||||
/* The number of symbol table entries. */
|
||||
bfd_size_type l_nsyms;
|
||||
|
||||
/* The number of relocation table entries. */
|
||||
bfd_size_type l_nreloc;
|
||||
|
||||
/* The length of the import file string table. */
|
||||
bfd_size_type l_istlen;
|
||||
|
||||
/* The number of import files. */
|
||||
bfd_size_type l_nimpid;
|
||||
|
||||
/* The offset from the start of the .loader section to the first
|
||||
entry in the import file table. */
|
||||
bfd_size_type l_impoff;
|
||||
|
||||
/* The length of the string table. */
|
||||
bfd_size_type l_stlen;
|
||||
|
||||
/* The offset from the start of the .loader section to the first
|
||||
entry in the string table. */
|
||||
bfd_size_type l_stoff;
|
||||
|
||||
/* The offset to start of the symbol table, only in XCOFF64 */
|
||||
bfd_vma l_symoff;
|
||||
|
||||
/* The offset to the start of the relocation table, only in XCOFF64 */
|
||||
bfd_vma l_rldoff;
|
||||
};
|
||||
|
||||
/* The ldsym structure. This is used to represent a symbol in the
|
||||
.loader section. */
|
||||
|
||||
struct internal_ldsym
|
||||
{
|
||||
union
|
||||
{
|
||||
/* The symbol name if <= SYMNMLEN characters. */
|
||||
char _l_name[SYMNMLEN];
|
||||
struct
|
||||
{
|
||||
/* Zero if the symbol name is more than SYMNMLEN characters. */
|
||||
long _l_zeroes;
|
||||
|
||||
/* The offset in the string table if the symbol name is more
|
||||
than SYMNMLEN characters. */
|
||||
long _l_offset;
|
||||
}
|
||||
_l_l;
|
||||
}
|
||||
_l;
|
||||
|
||||
/* The symbol value. */
|
||||
bfd_vma l_value;
|
||||
|
||||
/* The symbol section number. */
|
||||
short l_scnum;
|
||||
|
||||
/* The symbol type and flags. */
|
||||
char l_smtype;
|
||||
|
||||
/* The symbol storage class. */
|
||||
char l_smclas;
|
||||
|
||||
/* The import file ID. */
|
||||
bfd_size_type l_ifile;
|
||||
|
||||
/* Offset to the parameter type check string. */
|
||||
bfd_size_type l_parm;
|
||||
};
|
||||
|
||||
/* These flags are for the l_smtype field (the lower three bits are an
|
||||
XTY_* value). */
|
||||
|
||||
/* Imported symbol. */
|
||||
#define L_IMPORT (0x40)
|
||||
/* Entry point. */
|
||||
#define L_ENTRY (0x20)
|
||||
/* Exported symbol. */
|
||||
#define L_EXPORT (0x10)
|
||||
/* Weak symbol. */
|
||||
#define L_WEAK (0x08)
|
||||
|
||||
/* The ldrel structure. This is used to represent a reloc in the
|
||||
.loader section. */
|
||||
|
||||
struct internal_ldrel
|
||||
{
|
||||
/* The reloc address. */
|
||||
bfd_vma l_vaddr;
|
||||
|
||||
/* The symbol table index in the .loader section symbol table. */
|
||||
bfd_size_type l_symndx;
|
||||
|
||||
/* The relocation type and size. */
|
||||
short l_rtype;
|
||||
|
||||
/* The section number this relocation applies to. */
|
||||
short l_rsecnm;
|
||||
};
|
||||
|
||||
/* An entry in the XCOFF linker hash table. */
|
||||
struct xcoff_link_hash_entry
|
||||
{
|
||||
struct bfd_link_hash_entry root;
|
||||
|
||||
/* Symbol index in output file. Set to -1 initially. Set to -2 if
|
||||
there is a reloc against this symbol. */
|
||||
long indx;
|
||||
|
||||
/* If we have created a TOC entry for this symbol, this is the .tc
|
||||
section which holds it. */
|
||||
asection *toc_section;
|
||||
|
||||
union
|
||||
{
|
||||
/* If we have created a TOC entry (the XCOFF_SET_TOC flag is
|
||||
set), this is the offset in toc_section. */
|
||||
bfd_vma toc_offset;
|
||||
|
||||
/* If the TOC entry comes from an input file, this is set to the
|
||||
symbol index of the C_HIDEXT XMC_TC or XMC_TD symbol. */
|
||||
long toc_indx;
|
||||
}
|
||||
u;
|
||||
|
||||
/* If this symbol is a function entry point which is called, this
|
||||
field holds a pointer to the function descriptor. If this symbol
|
||||
is a function descriptor, this field holds a pointer to the
|
||||
function entry point. */
|
||||
struct xcoff_link_hash_entry *descriptor;
|
||||
|
||||
/* The .loader symbol table entry, if there is one. */
|
||||
struct internal_ldsym *ldsym;
|
||||
|
||||
/* If XCOFF_BUILT_LDSYM is set, this is the .loader symbol table
|
||||
index. If XCOFF_BUILD_LDSYM is clear, and XCOFF_IMPORT is set,
|
||||
this is the l_ifile value. */
|
||||
long ldindx;
|
||||
|
||||
/* Some linker flags. */
|
||||
unsigned long flags;
|
||||
|
||||
/* The storage mapping class. */
|
||||
unsigned char smclas;
|
||||
};
|
||||
|
||||
/* Flags for xcoff_link_hash_entry. */
|
||||
|
||||
/* Symbol is referenced by a regular object. */
|
||||
#define XCOFF_REF_REGULAR 0x00000001
|
||||
/* Symbol is defined by a regular object. */
|
||||
#define XCOFF_DEF_REGULAR 0x00000002
|
||||
/* Symbol is defined by a dynamic object. */
|
||||
#define XCOFF_DEF_DYNAMIC 0x00000004
|
||||
/* Symbol is used in a reloc being copied into the .loader section. */
|
||||
#define XCOFF_LDREL 0x00000008
|
||||
/* Symbol is the entry point. */
|
||||
#define XCOFF_ENTRY 0x00000010
|
||||
/* Symbol is for a function and is the target of a relocation.
|
||||
The relocation may or may not be a branch-type relocation. */
|
||||
#define XCOFF_CALLED 0x00000020
|
||||
/* Symbol needs the TOC entry filled in. */
|
||||
#define XCOFF_SET_TOC 0x00000040
|
||||
/* Symbol is implicitly or explicitly imported. */
|
||||
#define XCOFF_IMPORT 0x00000080
|
||||
/* Symbol is explicitly exported. */
|
||||
#define XCOFF_EXPORT 0x00000100
|
||||
/* Symbol has been processed by xcoff_build_ldsyms. */
|
||||
#define XCOFF_BUILT_LDSYM 0x00000200
|
||||
/* Symbol is mentioned by a section which was not garbage collected. */
|
||||
#define XCOFF_MARK 0x00000400
|
||||
/* Symbol size is recorded in size_list list from hash table. */
|
||||
#define XCOFF_HAS_SIZE 0x00000800
|
||||
/* Symbol is a function descriptor. */
|
||||
#define XCOFF_DESCRIPTOR 0x00001000
|
||||
/* Multiple definitions have been for the symbol. */
|
||||
#define XCOFF_MULTIPLY_DEFINED 0x00002000
|
||||
/* Symbol is the __rtinit symbol. */
|
||||
#define XCOFF_RTINIT 0x00004000
|
||||
/* Symbol is an imported 32 bit syscall. */
|
||||
#define XCOFF_SYSCALL32 0x00008000
|
||||
/* Symbol is an imported 64 bit syscall. */
|
||||
#define XCOFF_SYSCALL64 0x00010000
|
||||
/* Symbol was not explicitly defined by the time it was marked. */
|
||||
#define XCOFF_WAS_UNDEFINED 0x00020000
|
||||
/* We have assigned an output XCOFF entry to this symbol. */
|
||||
#define XCOFF_ALLOCATED 0x00040000
|
||||
|
||||
/* The XCOFF linker hash table. */
|
||||
|
||||
#define XCOFF_NUMBER_OF_SPECIAL_SECTIONS 6
|
||||
#define XCOFF_SPECIAL_SECTION_TEXT 0
|
||||
#define XCOFF_SPECIAL_SECTION_ETEXT 1
|
||||
#define XCOFF_SPECIAL_SECTION_DATA 2
|
||||
#define XCOFF_SPECIAL_SECTION_EDATA 3
|
||||
#define XCOFF_SPECIAL_SECTION_END 4
|
||||
#define XCOFF_SPECIAL_SECTION_END2 5
|
||||
|
||||
/* These flags indicate which of -bexpall and -bexpfull are in effect. */
|
||||
#define XCOFF_EXPALL 1
|
||||
#define XCOFF_EXPFULL 2
|
||||
|
||||
/* This structure is used to pass information through
|
||||
xcoff_link_hash_traverse. */
|
||||
|
||||
struct xcoff_loader_info
|
||||
{
|
||||
/* Set if a problem occurred. */
|
||||
bfd_boolean failed;
|
||||
|
||||
/* Output BFD. */
|
||||
bfd *output_bfd;
|
||||
|
||||
/* Link information structure. */
|
||||
struct bfd_link_info *info;
|
||||
|
||||
/* A mask of XCOFF_EXPALL and XCOFF_EXPFULL flags. */
|
||||
unsigned int auto_export_flags;
|
||||
|
||||
/* Number of ldsym structures. */
|
||||
size_t ldsym_count;
|
||||
|
||||
/* Size of string table. */
|
||||
size_t string_size;
|
||||
|
||||
/* String table. */
|
||||
char *strings;
|
||||
|
||||
/* Allocated size of string table. */
|
||||
size_t string_alc;
|
||||
};
|
||||
|
||||
/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
|
||||
from smaller values. Start with zero, widen, *then* decrement. */
|
||||
#define MINUS_ONE (((bfd_vma) 0) - 1)
|
||||
|
||||
/* __rtinit, from /usr/include/rtinit.h. */
|
||||
struct __rtinit
|
||||
{
|
||||
/* Pointer to runtime linker.
|
||||
XXX: Is the parameter really void? */
|
||||
int (*rtl) (void);
|
||||
|
||||
/* Offset to array of init functions, 0 if none. */
|
||||
int init_offset;
|
||||
|
||||
/* Offset to array of fini functions, 0 if none. */
|
||||
int fini_offset;
|
||||
|
||||
/* Size of __RTINIT_DESCRIPTOR. This value should be used instead of
|
||||
sizeof(__RTINIT_DESCRIPTOR). */
|
||||
int __rtinit_descriptor_size;
|
||||
};
|
||||
|
||||
#define RTINIT_DESCRIPTOR_SIZE (12)
|
||||
|
||||
struct __rtinit_descriptor
|
||||
{
|
||||
/* Init/fini function. */
|
||||
int f;
|
||||
|
||||
/* Offset, relative to the start of the __rtinit symbol, to name of the
|
||||
function. */
|
||||
|
||||
int name_offset;
|
||||
|
||||
/* Flags */
|
||||
unsigned char flags;
|
||||
};
|
||||
|
||||
/* Archive */
|
||||
|
||||
#define XCOFFARMAG "<aiaff>\012"
|
||||
#define XCOFFARMAGBIG "<bigaf>\012"
|
||||
#define SXCOFFARMAG 8
|
||||
|
||||
/* The size of the ascii archive elements */
|
||||
#define XCOFFARMAG_ELEMENT_SIZE 12
|
||||
#define XCOFFARMAGBIG_ELEMENT_SIZE 20
|
||||
|
||||
/* This terminates an XCOFF archive member name. */
|
||||
|
||||
#define XCOFFARFMAG "`\012"
|
||||
#define SXCOFFARFMAG 2
|
||||
|
||||
/* XCOFF archives start with this (printable) structure. */
|
||||
|
||||
struct xcoff_ar_file_hdr
|
||||
{
|
||||
/* Magic string. */
|
||||
char magic[SXCOFFARMAG];
|
||||
|
||||
/* Offset of the member table (decimal ASCII string). */
|
||||
char memoff[XCOFFARMAG_ELEMENT_SIZE];
|
||||
|
||||
/* Offset of the global symbol table (decimal ASCII string). */
|
||||
char symoff[XCOFFARMAG_ELEMENT_SIZE];
|
||||
|
||||
/* Offset of the first member in the archive (decimal ASCII string). */
|
||||
char firstmemoff[XCOFFARMAG_ELEMENT_SIZE];
|
||||
|
||||
/* Offset of the last member in the archive (decimal ASCII string). */
|
||||
char lastmemoff[XCOFFARMAG_ELEMENT_SIZE];
|
||||
|
||||
/* Offset of the first member on the free list (decimal ASCII
|
||||
string). */
|
||||
char freeoff[XCOFFARMAG_ELEMENT_SIZE];
|
||||
};
|
||||
|
||||
#define SIZEOF_AR_FILE_HDR (SXCOFFARMAG + 5 * XCOFFARMAG_ELEMENT_SIZE)
|
||||
|
||||
/* This is the equivalent data structure for the big archive format. */
|
||||
|
||||
struct xcoff_ar_file_hdr_big
|
||||
{
|
||||
/* Magic string. */
|
||||
char magic[SXCOFFARMAG];
|
||||
|
||||
/* Offset of the member table (decimal ASCII string). */
|
||||
char memoff[XCOFFARMAGBIG_ELEMENT_SIZE];
|
||||
|
||||
/* Offset of the global symbol table for 32-bit objects (decimal ASCII
|
||||
string). */
|
||||
char symoff[XCOFFARMAGBIG_ELEMENT_SIZE];
|
||||
|
||||
/* Offset of the global symbol table for 64-bit objects (decimal ASCII
|
||||
string). */
|
||||
char symoff64[XCOFFARMAGBIG_ELEMENT_SIZE];
|
||||
|
||||
/* Offset of the first member in the archive (decimal ASCII string). */
|
||||
char firstmemoff[XCOFFARMAGBIG_ELEMENT_SIZE];
|
||||
|
||||
/* Offset of the last member in the archive (decimal ASCII string). */
|
||||
char lastmemoff[XCOFFARMAGBIG_ELEMENT_SIZE];
|
||||
|
||||
/* Offset of the first member on the free list (decimal ASCII
|
||||
string). */
|
||||
char freeoff[XCOFFARMAGBIG_ELEMENT_SIZE];
|
||||
};
|
||||
|
||||
#define SIZEOF_AR_FILE_HDR_BIG (SXCOFFARMAG + 6 * XCOFFARMAGBIG_ELEMENT_SIZE)
|
||||
|
||||
/* Each XCOFF archive member starts with this (printable) structure. */
|
||||
|
||||
struct xcoff_ar_hdr
|
||||
{
|
||||
/* File size not including the header (decimal ASCII string). */
|
||||
char size[XCOFFARMAG_ELEMENT_SIZE];
|
||||
|
||||
/* File offset of next archive member (decimal ASCII string). */
|
||||
char nextoff[XCOFFARMAG_ELEMENT_SIZE];
|
||||
|
||||
/* File offset of previous archive member (decimal ASCII string). */
|
||||
char prevoff[XCOFFARMAG_ELEMENT_SIZE];
|
||||
|
||||
/* File mtime (decimal ASCII string). */
|
||||
char date[12];
|
||||
|
||||
/* File UID (decimal ASCII string). */
|
||||
char uid[12];
|
||||
|
||||
/* File GID (decimal ASCII string). */
|
||||
char gid[12];
|
||||
|
||||
/* File mode (octal ASCII string). */
|
||||
char mode[12];
|
||||
|
||||
/* Length of file name (decimal ASCII string). */
|
||||
char namlen[4];
|
||||
|
||||
/* This structure is followed by the file name. The length of the
|
||||
name is given in the namlen field. If the length of the name is
|
||||
odd, the name is followed by a null byte. The name and optional
|
||||
null byte are followed by XCOFFARFMAG, which is not included in
|
||||
namlen. The contents of the archive member follow; the number of
|
||||
bytes is given in the size field. */
|
||||
};
|
||||
|
||||
#define SIZEOF_AR_HDR (3 * XCOFFARMAG_ELEMENT_SIZE + 4 * 12 + 4)
|
||||
|
||||
/* The equivalent for the big archive format. */
|
||||
|
||||
struct xcoff_ar_hdr_big
|
||||
{
|
||||
/* File size not including the header (decimal ASCII string). */
|
||||
char size[XCOFFARMAGBIG_ELEMENT_SIZE];
|
||||
|
||||
/* File offset of next archive member (decimal ASCII string). */
|
||||
char nextoff[XCOFFARMAGBIG_ELEMENT_SIZE];
|
||||
|
||||
/* File offset of previous archive member (decimal ASCII string). */
|
||||
char prevoff[XCOFFARMAGBIG_ELEMENT_SIZE];
|
||||
|
||||
/* File mtime (decimal ASCII string). */
|
||||
char date[12];
|
||||
|
||||
/* File UID (decimal ASCII string). */
|
||||
char uid[12];
|
||||
|
||||
/* File GID (decimal ASCII string). */
|
||||
char gid[12];
|
||||
|
||||
/* File mode (octal ASCII string). */
|
||||
char mode[12];
|
||||
|
||||
/* Length of file name (decimal ASCII string). */
|
||||
char namlen[4];
|
||||
|
||||
/* This structure is followed by the file name. The length of the
|
||||
name is given in the namlen field. If the length of the name is
|
||||
odd, the name is followed by a null byte. The name and optional
|
||||
null byte are followed by XCOFFARFMAG, which is not included in
|
||||
namlen. The contents of the archive member follow; the number of
|
||||
bytes is given in the size field. */
|
||||
};
|
||||
|
||||
#define SIZEOF_AR_HDR_BIG (3 * XCOFFARMAGBIG_ELEMENT_SIZE + 4 * 12 + 4)
|
||||
|
||||
/* We often have to distinguish between the old and big file format.
|
||||
Make it a bit cleaner. We can use `xcoff_ardata' here because the
|
||||
`hdr' member has the same size and position in both formats.
|
||||
<bigaf> is the default format, return TRUE even when xcoff_ardata is
|
||||
NULL. */
|
||||
#ifndef SMALL_ARCHIVE
|
||||
/* Creates big archives by default */
|
||||
#define xcoff_big_format_p(abfd) \
|
||||
((NULL != bfd_ardata (abfd) && NULL == xcoff_ardata (abfd)) || \
|
||||
((NULL != bfd_ardata (abfd)) && \
|
||||
(NULL != xcoff_ardata (abfd)) && \
|
||||
(xcoff_ardata (abfd)->magic[1] == 'b')))
|
||||
#else
|
||||
/* Creates small archives by default. */
|
||||
#define xcoff_big_format_p(abfd) \
|
||||
(((NULL != bfd_ardata (abfd)) && \
|
||||
(NULL != xcoff_ardata (abfd)) && \
|
||||
(xcoff_ardata (abfd)->magic[1] == 'b')))
|
||||
#endif
|
||||
|
||||
/* We store a copy of the xcoff_ar_file_hdr in the tdata field of the
|
||||
artdata structure. Similar for the big archive. */
|
||||
#define xcoff_ardata(abfd) \
|
||||
((struct xcoff_ar_file_hdr *) bfd_ardata (abfd)->tdata)
|
||||
#define xcoff_ardata_big(abfd) \
|
||||
((struct xcoff_ar_file_hdr_big *) bfd_ardata (abfd)->tdata)
|
||||
|
||||
/* We store a copy of the xcoff_ar_hdr in the arelt_data field of an
|
||||
archive element. Similar for the big archive. */
|
||||
#define arch_eltdata(bfd) ((struct areltdata *) ((bfd)->arelt_data))
|
||||
#define arch_xhdr(bfd) \
|
||||
((struct xcoff_ar_hdr *) arch_eltdata (bfd)->arch_header)
|
||||
#define arch_xhdr_big(bfd) \
|
||||
((struct xcoff_ar_hdr_big *) arch_eltdata (bfd)->arch_header)
|
||||
|
||||
/* True if symbols of class CLASS are external. */
|
||||
#define EXTERN_SYM_P(CLASS) \
|
||||
((CLASS) == C_EXT || (CLASS) == C_AIX_WEAKEXT)
|
||||
|
||||
#endif /* _INTERNAL_XCOFF_H */
|
60
include/coff/z80.h
Normal file
60
include/coff/z80.h
Normal file
@ -0,0 +1,60 @@
|
||||
/* coff information for Zilog Z80
|
||||
Copyright 2005, 2010 Free Software Foundation, Inc.
|
||||
Contributed by Arnold Metselaar <arnold_m@operamail.com>
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#define L_LNNO_SIZE 4
|
||||
#include "coff/external.h"
|
||||
|
||||
/* z80 backend does not use dots in section names. */
|
||||
#undef _TEXT
|
||||
#define _TEXT "text"
|
||||
#undef _DATA
|
||||
#define _DATA "data"
|
||||
#undef _BSS
|
||||
#define _BSS "bss"
|
||||
|
||||
/* Type of cpu is stored in flags. */
|
||||
#define F_MACHMASK 0xF000
|
||||
|
||||
/* Z80 COFF encodes the section alignment in the section header flags */
|
||||
#define COFF_ALIGN_IN_SECTION_HEADER 1
|
||||
#define COFF_ALIGN_IN_S_FLAGS 1
|
||||
#define F_ALGNMASK 0x0F00
|
||||
/* requires a power-of-two argument */
|
||||
#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X)&0xF)<<8))
|
||||
/* result is a power of two */
|
||||
#define COFF_DECODE_ALIGNMENT(X) (((X)>>8)&0xF)
|
||||
|
||||
#define Z80MAGIC 0x805A
|
||||
|
||||
#define Z80BADMAG(x) (((x).f_magic != Z80MAGIC))
|
||||
|
||||
/* Relocation directives. */
|
||||
|
||||
/* This format actually has more bits than we need. */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_offset[4];
|
||||
char r_type[2];
|
||||
char r_stuff[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 16
|
49
include/coff/z8k.h
Normal file
49
include/coff/z8k.h
Normal file
@ -0,0 +1,49 @@
|
||||
/* coff information for Zilog Z800N
|
||||
|
||||
Copyright 2001, 2010 Free Software Foundation, Inc.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#define L_LNNO_SIZE 4
|
||||
#include "coff/external.h"
|
||||
|
||||
/* Type of cpu is stored in flags */
|
||||
#define F_Z8001 0x1000
|
||||
#define F_Z8002 0x2000
|
||||
#define F_MACHMASK 0xf000
|
||||
|
||||
#define Z8KMAGIC 0x8000
|
||||
|
||||
#define Z8KBADMAG(x) (((x).f_magic != Z8KMAGIC))
|
||||
|
||||
/********************** RELOCATION DIRECTIVES **********************/
|
||||
|
||||
/* The external reloc has an offset field, because some of the reloc
|
||||
types on the z8k don't have room in the instruction for the entire
|
||||
offset - eg with segments. */
|
||||
|
||||
struct external_reloc
|
||||
{
|
||||
char r_vaddr[4];
|
||||
char r_symndx[4];
|
||||
char r_offset[4];
|
||||
char r_type[2];
|
||||
char r_stuff[2];
|
||||
};
|
||||
|
||||
#define RELOC struct external_reloc
|
||||
#define RELSZ 16
|
||||
|
150
include/complex.h
Normal file
150
include/complex.h
Normal file
@ -0,0 +1,150 @@
|
||||
/* $NetBSD: complex.h,v 1.3 2010/09/15 16:11:30 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Written by Matthias Drochner.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#ifndef _COMPLEX_H
|
||||
#define _COMPLEX_H
|
||||
|
||||
#define complex _Complex
|
||||
#define _Complex_I 1.0fi
|
||||
#define I _Complex_I
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* 7.3.5 Trigonometric functions */
|
||||
/* 7.3.5.1 The cacos functions */
|
||||
double complex cacos(double complex);
|
||||
float complex cacosf(float complex);
|
||||
long double complex cacosl(long double complex);
|
||||
|
||||
/* 7.3.5.2 The casin functions */
|
||||
double complex casin(double complex);
|
||||
float complex casinf(float complex);
|
||||
long double complex casinl(long double complex);
|
||||
|
||||
/* 7.3.5.1 The catan functions */
|
||||
double complex catan(double complex);
|
||||
float complex catanf(float complex);
|
||||
long double complex catanl(long double complex);
|
||||
|
||||
/* 7.3.5.1 The ccos functions */
|
||||
double complex ccos(double complex);
|
||||
float complex ccosf(float complex);
|
||||
long double complex ccosl(long double complex);
|
||||
|
||||
/* 7.3.5.1 The csin functions */
|
||||
double complex csin(double complex);
|
||||
float complex csinf(float complex);
|
||||
long double complex csinl(long double complex);
|
||||
|
||||
/* 7.3.5.1 The ctan functions */
|
||||
double complex ctan(double complex);
|
||||
float complex ctanf(float complex);
|
||||
long double complex ctanl(long double complex);
|
||||
|
||||
/* 7.3.6 Hyperbolic functions */
|
||||
/* 7.3.6.1 The cacosh functions */
|
||||
double complex cacosh(double complex);
|
||||
float complex cacoshf(float complex);
|
||||
long double complex cacoshl(long double complex);
|
||||
|
||||
/* 7.3.6.2 The casinh functions */
|
||||
double complex casinh(double complex);
|
||||
float complex casinhf(float complex);
|
||||
long double complex casinhl(long double complex);
|
||||
|
||||
/* 7.3.6.3 The catanh functions */
|
||||
double complex catanh(double complex);
|
||||
float complex catanhf(float complex);
|
||||
long double complex catanhl(long double complex);
|
||||
|
||||
/* 7.3.6.4 The ccosh functions */
|
||||
double complex ccosh(double complex);
|
||||
float complex ccoshf(float complex);
|
||||
long double complex ccoshl(long double complex);
|
||||
|
||||
/* 7.3.6.5 The csinh functions */
|
||||
double complex csinh(double complex);
|
||||
float complex csinhf(float complex);
|
||||
long double complex csinhl(long double complex);
|
||||
|
||||
/* 7.3.6.6 The ctanh functions */
|
||||
double complex ctanh(double complex);
|
||||
float complex ctanhf(float complex);
|
||||
long double complex ctanhl(long double complex);
|
||||
|
||||
/* 7.3.7 Exponential and logarithmic functions */
|
||||
/* 7.3.7.1 The cexp functions */
|
||||
double complex cexp(double complex);
|
||||
float complex cexpf(float complex);
|
||||
long double complex cexpl(long double complex);
|
||||
|
||||
/* 7.3.7.2 The clog functions */
|
||||
double complex clog(double complex);
|
||||
float complex clogf(float complex);
|
||||
long double complex clogl(long double complex);
|
||||
|
||||
/* 7.3.8 Power and absolute-value functions */
|
||||
/* 7.3.8.1 The cabs functions */
|
||||
/*#ifndef __LIBM0_SOURCE__ */
|
||||
/* avoid conflict with historical cabs(struct complex) */
|
||||
/* double cabs(double complex) __RENAME(__c99_cabs);
|
||||
float cabsf(float complex) __RENAME(__c99_cabsf);
|
||||
#endif
|
||||
*/
|
||||
long double cabsl(long double complex) ;
|
||||
double cabs(double complex) ;
|
||||
float cabsf(float complex) ;
|
||||
|
||||
/* 7.3.8.2 The cpow functions */
|
||||
double complex cpow(double complex, double complex);
|
||||
float complex cpowf(float complex, float complex);
|
||||
long double complex cpowl(long double complex, long double complex);
|
||||
|
||||
/* 7.3.8.3 The csqrt functions */
|
||||
double complex csqrt(double complex);
|
||||
float complex csqrtf(float complex);
|
||||
long double complex csqrtl(long double complex);
|
||||
|
||||
/* 7.3.9 Manipulation functions */
|
||||
/* 7.3.9.1 The carg functions */
|
||||
double carg(double complex);
|
||||
float cargf(float complex);
|
||||
long double cargl(long double complex);
|
||||
|
||||
/* 7.3.9.2 The cimag functions */
|
||||
double cimag(double complex);
|
||||
float cimagf(float complex);
|
||||
long double cimagl(long double complex);
|
||||
|
||||
/* 7.3.9.3 The conj functions */
|
||||
double complex conj(double complex);
|
||||
float complex conjf(float complex);
|
||||
long double complex conjl(long double complex);
|
||||
|
||||
/* 7.3.9.4 The cproj functions */
|
||||
double complex cproj(double complex);
|
||||
float complex cprojf(float complex);
|
||||
long double complex cprojl(long double complex);
|
||||
|
||||
/* 7.3.9.5 The creal functions */
|
||||
double creal(double complex);
|
||||
float crealf(float complex);
|
||||
long double creall(long double complex);
|
||||
|
||||
#if __GNU_VISIBLE
|
||||
double complex clog10(double complex);
|
||||
float complex clog10f(float complex);
|
||||
# if defined(__CYGWIN__)
|
||||
long double complex clog10l(long double complex);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* ! _COMPLEX_H */
|
30
include/cpio.h
Normal file
30
include/cpio.h
Normal file
@ -0,0 +1,30 @@
|
||||
/* POSIX.1 symbolic constants for c_mode field of cpio archive format */
|
||||
|
||||
#ifndef _CPIO_H
|
||||
#define _CPIO_H
|
||||
|
||||
#define C_IRUSR 0000400 /* Read by owner */
|
||||
#define C_IWUSR 0000200 /* Write by owner */
|
||||
#define C_IXUSR 0000100 /* Execute by owner */
|
||||
#define C_IRGRP 0000040 /* Read by group */
|
||||
#define C_IWGRP 0000020 /* Write by group */
|
||||
#define C_IXGRP 0000010 /* Execute by group */
|
||||
#define C_IROTH 0000004 /* Read by others */
|
||||
#define C_IWOTH 0000002 /* Write by others */
|
||||
#define C_IXOTH 0000001 /* Execute by others */
|
||||
#define C_ISUID 0004000 /* Set user ID */
|
||||
#define C_ISGID 0002000 /* Set group ID */
|
||||
#define C_ISVTX 0001000 /* On directories, restricted deletion flag */
|
||||
|
||||
#define C_ISDIR 0040000 /* Directory */
|
||||
#define C_ISFIFO 0010000 /* FIFO */
|
||||
#define C_ISREG 0100000 /* Regular file */
|
||||
#define C_ISBLK 0060000 /* Block special */
|
||||
#define C_ISCHR 0020000 /* Character special */
|
||||
#define C_ISCTG 0110000 /* Reserved */
|
||||
#define C_ISLNK 0120000 /* Symbolic link */
|
||||
#define C_ISSOCK 0140000 /* Socket */
|
||||
|
||||
#define MAGIC "070707"
|
||||
|
||||
#endif /* _CPIO_H */
|
183
include/ctype.h
Normal file
183
include/ctype.h
Normal file
@ -0,0 +1,183 @@
|
||||
#ifndef _CTYPE_H_
|
||||
#define _CTYPE_H_
|
||||
|
||||
#include "_ansi.h"
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#if __POSIX_VISIBLE >= 200809 || __MISC_VISIBLE || defined (_LIBC)
|
||||
#include <sys/_locale.h>
|
||||
#endif
|
||||
|
||||
_BEGIN_STD_C
|
||||
|
||||
int isalnum (int __c);
|
||||
int isalpha (int __c);
|
||||
int iscntrl (int __c);
|
||||
int isdigit (int __c);
|
||||
int isgraph (int __c);
|
||||
int islower (int __c);
|
||||
int isprint (int __c);
|
||||
int ispunct (int __c);
|
||||
int isspace (int __c);
|
||||
int isupper (int __c);
|
||||
int isxdigit (int __c);
|
||||
int tolower (int __c);
|
||||
int toupper (int __c);
|
||||
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
int isblank (int __c);
|
||||
#endif
|
||||
|
||||
#if __MISC_VISIBLE || __XSI_VISIBLE
|
||||
int isascii (int __c);
|
||||
int toascii (int __c);
|
||||
#define _tolower(__c) ((unsigned char)(__c) - 'A' + 'a')
|
||||
#define _toupper(__c) ((unsigned char)(__c) - 'a' + 'A')
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 200809
|
||||
extern int isalnum_l (int __c, locale_t __l);
|
||||
extern int isalpha_l (int __c, locale_t __l);
|
||||
extern int isblank_l (int __c, locale_t __l);
|
||||
extern int iscntrl_l (int __c, locale_t __l);
|
||||
extern int isdigit_l (int __c, locale_t __l);
|
||||
extern int isgraph_l (int __c, locale_t __l);
|
||||
extern int islower_l (int __c, locale_t __l);
|
||||
extern int isprint_l (int __c, locale_t __l);
|
||||
extern int ispunct_l (int __c, locale_t __l);
|
||||
extern int isspace_l (int __c, locale_t __l);
|
||||
extern int isupper_l (int __c, locale_t __l);
|
||||
extern int isxdigit_l(int __c, locale_t __l);
|
||||
extern int tolower_l (int __c, locale_t __l);
|
||||
extern int toupper_l (int __c, locale_t __l);
|
||||
#endif
|
||||
|
||||
#if __MISC_VISIBLE
|
||||
extern int isascii_l (int __c, locale_t __l);
|
||||
extern int toascii_l (int __c, locale_t __l);
|
||||
#endif
|
||||
|
||||
#define _U 01
|
||||
#define _L 02
|
||||
#define _N 04
|
||||
#define _S 010
|
||||
#define _P 020
|
||||
#define _C 040
|
||||
#define _X 0100
|
||||
#define _B 0200
|
||||
|
||||
/* For C++ backward-compatibility only. */
|
||||
extern __IMPORT const char _ctype_[];
|
||||
|
||||
#ifdef __HAVE_LOCALE_INFO__
|
||||
const char *__locale_ctype_ptr (void);
|
||||
#else
|
||||
#define __locale_ctype_ptr() _ctype_
|
||||
#endif
|
||||
|
||||
# define __CTYPE_PTR (__locale_ctype_ptr ())
|
||||
|
||||
#ifndef __cplusplus
|
||||
/* These macros are intentionally written in a manner that will trigger
|
||||
a gcc -Wall warning if the user mistakenly passes a 'char' instead
|
||||
of an int containing an 'unsigned char'. Note that the sizeof will
|
||||
always be 1, which is what we want for mapping EOF to __CTYPE_PTR[0];
|
||||
the use of a raw index inside the sizeof triggers the gcc warning if
|
||||
__c was of type char, and sizeof masks side effects of the extra __c.
|
||||
Meanwhile, the real index to __CTYPE_PTR+1 must be cast to int,
|
||||
since isalpha(0x100000001LL) must equal isalpha(1), rather than being
|
||||
an out-of-bounds reference on a 64-bit machine. */
|
||||
#define __ctype_lookup(__c) ((__CTYPE_PTR+sizeof(""[__c]))[(int)(__c)])
|
||||
|
||||
#define isalpha(__c) (__ctype_lookup(__c)&(_U|_L))
|
||||
#define isupper(__c) ((__ctype_lookup(__c)&(_U|_L))==_U)
|
||||
#define islower(__c) ((__ctype_lookup(__c)&(_U|_L))==_L)
|
||||
#define isdigit(__c) (__ctype_lookup(__c)&_N)
|
||||
#define isxdigit(__c) (__ctype_lookup(__c)&(_X|_N))
|
||||
#define isspace(__c) (__ctype_lookup(__c)&_S)
|
||||
#define ispunct(__c) (__ctype_lookup(__c)&_P)
|
||||
#define isalnum(__c) (__ctype_lookup(__c)&(_U|_L|_N))
|
||||
#define isprint(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N|_B))
|
||||
#define isgraph(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N))
|
||||
#define iscntrl(__c) (__ctype_lookup(__c)&_C)
|
||||
|
||||
#if defined(__GNUC__) && __ISO_C_VISIBLE >= 1999
|
||||
#define isblank(__c) \
|
||||
__extension__ ({ __typeof__ (__c) __x = (__c); \
|
||||
(__ctype_lookup(__x)&_B) || (int) (__x) == '\t';})
|
||||
#endif
|
||||
|
||||
#if __POSIX_VISIBLE >= 200809
|
||||
#ifdef __HAVE_LOCALE_INFO__
|
||||
const char *__locale_ctype_ptr_l (locale_t);
|
||||
#else
|
||||
static __inline const char *
|
||||
__locale_ctype_ptr_l(locale_t _l)
|
||||
{
|
||||
(void)_l;
|
||||
return __locale_ctype_ptr();
|
||||
}
|
||||
#endif
|
||||
#define __ctype_lookup_l(__c,__l) ((__locale_ctype_ptr_l(__l)+sizeof(""[__c]))[(int)(__c)])
|
||||
|
||||
#define isalpha_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L))
|
||||
#define isupper_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_U)
|
||||
#define islower_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_L)
|
||||
#define isdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&_N)
|
||||
#define isxdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_X|_N))
|
||||
#define isspace_l(__c,__l) (__ctype_lookup_l(__c,__l)&_S)
|
||||
#define ispunct_l(__c,__l) (__ctype_lookup_l(__c,__l)&_P)
|
||||
#define isalnum_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L|_N))
|
||||
#define isprint_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N|_B))
|
||||
#define isgraph_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N))
|
||||
#define iscntrl_l(__c,__l) (__ctype_lookup_l(__c,__l)&_C)
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#define isblank_l(__c, __l) \
|
||||
__extension__ ({ __typeof__ (__c) __x = (__c); \
|
||||
(__ctype_lookup_l(__x,__l)&_B) || (int) (__x) == '\t';})
|
||||
#endif
|
||||
|
||||
#endif /* __POSIX_VISIBLE >= 200809 */
|
||||
|
||||
#if __MISC_VISIBLE || __XSI_VISIBLE
|
||||
#define isascii(__c) ((unsigned)(__c)<=0177)
|
||||
#define toascii(__c) ((__c)&0177)
|
||||
#endif
|
||||
|
||||
#if __MISC_VISIBLE
|
||||
#define isascii_l(__c,__l) ((__l),(unsigned)(__c)<=0177)
|
||||
#define toascii_l(__c,__l) ((__l),(__c)&0177)
|
||||
#endif
|
||||
|
||||
/* Non-gcc versions will get the library versions, and will be
|
||||
slightly slower. These macros are not NLS-aware so they are
|
||||
disabled if the system supports the extended character sets. */
|
||||
# if defined(__GNUC__)
|
||||
# if !defined (_MB_EXTENDED_CHARSETS_ISO) && !defined (_MB_EXTENDED_CHARSETS_WINDOWS)
|
||||
# define toupper(__c) \
|
||||
__extension__ ({ __typeof__ (__c) __x = (__c); \
|
||||
islower (__x) ? (int) __x - 'a' + 'A' : (int) __x;})
|
||||
# define tolower(__c) \
|
||||
__extension__ ({ __typeof__ (__c) __x = (__c); \
|
||||
isupper (__x) ? (int) __x - 'A' + 'a' : (int) __x;})
|
||||
# else /* _MB_EXTENDED_CHARSETS* */
|
||||
/* Allow a gcc warning if the user passed 'char', but defer to the
|
||||
function. */
|
||||
# define toupper(__c) \
|
||||
__extension__ ({ __typeof__ (__c) __x = (__c); \
|
||||
(void) __CTYPE_PTR[__x]; (toupper) (__x);})
|
||||
# define tolower(__c) \
|
||||
__extension__ ({ __typeof__ (__c) __x = (__c); \
|
||||
(void) __CTYPE_PTR[__x]; (tolower) (__x);})
|
||||
# endif /* _MB_EXTENDED_CHARSETS* */
|
||||
# endif /* __GNUC__ */
|
||||
|
||||
#if __POSIX_VISIBLE >= 200809
|
||||
#endif /* __POSIX_VISIBLE >= 200809 */
|
||||
|
||||
#endif /* !__cplusplus */
|
||||
|
||||
_END_STD_C
|
||||
|
||||
#endif /* _CTYPE_H_ */
|
691
include/demangle.h
Normal file
691
include/demangle.h
Normal file
@ -0,0 +1,691 @@
|
||||
/* Defs for interface to demanglers.
|
||||
Copyright (C) 1992-2015 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License
|
||||
as published by the Free Software Foundation; either version 2, or
|
||||
(at your option) any later version.
|
||||
|
||||
In addition to the permissions in the GNU Library General Public
|
||||
License, the Free Software Foundation gives you unlimited
|
||||
permission to link the compiled version of this file into
|
||||
combinations with other programs, and to distribute those
|
||||
combinations without any restriction coming from the use of this
|
||||
file. (The Library Public License restrictions do apply in other
|
||||
respects; for example, they cover modification of the file, and
|
||||
distribution when not linked into a combined executable.)
|
||||
|
||||
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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
02110-1301, USA. */
|
||||
|
||||
|
||||
#if !defined (DEMANGLE_H)
|
||||
#define DEMANGLE_H
|
||||
|
||||
#include "libiberty.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Options passed to cplus_demangle (in 2nd parameter). */
|
||||
|
||||
#define DMGL_NO_OPTS 0 /* For readability... */
|
||||
#define DMGL_PARAMS (1 << 0) /* Include function args */
|
||||
#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
|
||||
#define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */
|
||||
#define DMGL_VERBOSE (1 << 3) /* Include implementation details. */
|
||||
#define DMGL_TYPES (1 << 4) /* Also try to demangle type encodings. */
|
||||
#define DMGL_RET_POSTFIX (1 << 5) /* Print function return types (when
|
||||
present) after function signature.
|
||||
It applies only to the toplevel
|
||||
function type. */
|
||||
#define DMGL_RET_DROP (1 << 6) /* Suppress printing function return
|
||||
types, even if present. It applies
|
||||
only to the toplevel function type.
|
||||
*/
|
||||
|
||||
#define DMGL_AUTO (1 << 8)
|
||||
#define DMGL_GNU (1 << 9)
|
||||
#define DMGL_LUCID (1 << 10)
|
||||
#define DMGL_ARM (1 << 11)
|
||||
#define DMGL_HP (1 << 12) /* For the HP aCC compiler;
|
||||
same as ARM except for
|
||||
template arguments, etc. */
|
||||
#define DMGL_EDG (1 << 13)
|
||||
#define DMGL_GNU_V3 (1 << 14)
|
||||
#define DMGL_GNAT (1 << 15)
|
||||
#define DMGL_DLANG (1 << 16)
|
||||
|
||||
/* If none of these are set, use 'current_demangling_style' as the default. */
|
||||
#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT|DMGL_DLANG)
|
||||
|
||||
/* Enumeration of possible demangling styles.
|
||||
|
||||
Lucid and ARM styles are still kept logically distinct, even though
|
||||
they now both behave identically. The resulting style is actual the
|
||||
union of both. I.E. either style recognizes both "__pt__" and "__rf__"
|
||||
for operator "->", even though the first is lucid style and the second
|
||||
is ARM style. (FIXME?) */
|
||||
|
||||
extern enum demangling_styles
|
||||
{
|
||||
no_demangling = -1,
|
||||
unknown_demangling = 0,
|
||||
auto_demangling = DMGL_AUTO,
|
||||
gnu_demangling = DMGL_GNU,
|
||||
lucid_demangling = DMGL_LUCID,
|
||||
arm_demangling = DMGL_ARM,
|
||||
hp_demangling = DMGL_HP,
|
||||
edg_demangling = DMGL_EDG,
|
||||
gnu_v3_demangling = DMGL_GNU_V3,
|
||||
java_demangling = DMGL_JAVA,
|
||||
gnat_demangling = DMGL_GNAT,
|
||||
dlang_demangling = DMGL_DLANG
|
||||
} current_demangling_style;
|
||||
|
||||
/* Define string names for the various demangling styles. */
|
||||
|
||||
#define NO_DEMANGLING_STYLE_STRING "none"
|
||||
#define AUTO_DEMANGLING_STYLE_STRING "auto"
|
||||
#define GNU_DEMANGLING_STYLE_STRING "gnu"
|
||||
#define LUCID_DEMANGLING_STYLE_STRING "lucid"
|
||||
#define ARM_DEMANGLING_STYLE_STRING "arm"
|
||||
#define HP_DEMANGLING_STYLE_STRING "hp"
|
||||
#define EDG_DEMANGLING_STYLE_STRING "edg"
|
||||
#define GNU_V3_DEMANGLING_STYLE_STRING "gnu-v3"
|
||||
#define JAVA_DEMANGLING_STYLE_STRING "java"
|
||||
#define GNAT_DEMANGLING_STYLE_STRING "gnat"
|
||||
#define DLANG_DEMANGLING_STYLE_STRING "dlang"
|
||||
|
||||
/* Some macros to test what demangling style is active. */
|
||||
|
||||
#define CURRENT_DEMANGLING_STYLE current_demangling_style
|
||||
#define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO)
|
||||
#define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU)
|
||||
#define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID)
|
||||
#define ARM_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_ARM)
|
||||
#define HP_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_HP)
|
||||
#define EDG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_EDG)
|
||||
#define GNU_V3_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU_V3)
|
||||
#define JAVA_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_JAVA)
|
||||
#define GNAT_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNAT)
|
||||
#define DLANG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_DLANG)
|
||||
|
||||
/* Provide information about the available demangle styles. This code is
|
||||
pulled from gdb into libiberty because it is useful to binutils also. */
|
||||
|
||||
extern const struct demangler_engine
|
||||
{
|
||||
const char *const demangling_style_name;
|
||||
const enum demangling_styles demangling_style;
|
||||
const char *const demangling_style_doc;
|
||||
} libiberty_demanglers[];
|
||||
|
||||
extern char *
|
||||
cplus_demangle (const char *mangled, int options);
|
||||
|
||||
extern int
|
||||
cplus_demangle_opname (const char *opname, char *result, int options);
|
||||
|
||||
extern const char *
|
||||
cplus_mangle_opname (const char *opname, int options);
|
||||
|
||||
/* Note: This sets global state. FIXME if you care about multi-threading. */
|
||||
|
||||
extern void
|
||||
set_cplus_marker_for_demangling (int ch);
|
||||
|
||||
extern enum demangling_styles
|
||||
cplus_demangle_set_style (enum demangling_styles style);
|
||||
|
||||
extern enum demangling_styles
|
||||
cplus_demangle_name_to_style (const char *name);
|
||||
|
||||
/* Callback typedef for allocation-less demangler interfaces. */
|
||||
typedef void (*demangle_callbackref) (const char *, size_t, void *);
|
||||
|
||||
/* V3 ABI demangling entry points, defined in cp-demangle.c. Callback
|
||||
variants return non-zero on success, zero on error. char* variants
|
||||
return a string allocated by malloc on success, NULL on error. */
|
||||
extern int
|
||||
cplus_demangle_v3_callback (const char *mangled, int options,
|
||||
demangle_callbackref callback, void *opaque);
|
||||
|
||||
extern char*
|
||||
cplus_demangle_v3 (const char *mangled, int options);
|
||||
|
||||
extern int
|
||||
java_demangle_v3_callback (const char *mangled,
|
||||
demangle_callbackref callback, void *opaque);
|
||||
|
||||
extern char*
|
||||
java_demangle_v3 (const char *mangled);
|
||||
|
||||
char *
|
||||
ada_demangle (const char *mangled, int options);
|
||||
|
||||
extern char *
|
||||
dlang_demangle (const char *mangled, int options);
|
||||
|
||||
enum gnu_v3_ctor_kinds {
|
||||
gnu_v3_complete_object_ctor = 1,
|
||||
gnu_v3_base_object_ctor,
|
||||
gnu_v3_complete_object_allocating_ctor,
|
||||
/* These are not part of the V3 ABI. Unified constructors are generated
|
||||
as a speed-for-space optimization when the -fdeclone-ctor-dtor option
|
||||
is used, and are always internal symbols. */
|
||||
gnu_v3_unified_ctor,
|
||||
gnu_v3_object_ctor_group
|
||||
};
|
||||
|
||||
/* Return non-zero iff NAME is the mangled form of a constructor name
|
||||
in the G++ V3 ABI demangling style. Specifically, return an `enum
|
||||
gnu_v3_ctor_kinds' value indicating what kind of constructor
|
||||
it is. */
|
||||
extern enum gnu_v3_ctor_kinds
|
||||
is_gnu_v3_mangled_ctor (const char *name);
|
||||
|
||||
|
||||
enum gnu_v3_dtor_kinds {
|
||||
gnu_v3_deleting_dtor = 1,
|
||||
gnu_v3_complete_object_dtor,
|
||||
gnu_v3_base_object_dtor,
|
||||
/* These are not part of the V3 ABI. Unified destructors are generated
|
||||
as a speed-for-space optimization when the -fdeclone-ctor-dtor option
|
||||
is used, and are always internal symbols. */
|
||||
gnu_v3_unified_dtor,
|
||||
gnu_v3_object_dtor_group
|
||||
};
|
||||
|
||||
/* Return non-zero iff NAME is the mangled form of a destructor name
|
||||
in the G++ V3 ABI demangling style. Specifically, return an `enum
|
||||
gnu_v3_dtor_kinds' value, indicating what kind of destructor
|
||||
it is. */
|
||||
extern enum gnu_v3_dtor_kinds
|
||||
is_gnu_v3_mangled_dtor (const char *name);
|
||||
|
||||
/* The V3 demangler works in two passes. The first pass builds a tree
|
||||
representation of the mangled name, and the second pass turns the
|
||||
tree representation into a demangled string. Here we define an
|
||||
interface to permit a caller to build their own tree
|
||||
representation, which they can pass to the demangler to get a
|
||||
demangled string. This can be used to canonicalize user input into
|
||||
something which the demangler might output. It could also be used
|
||||
by other demanglers in the future. */
|
||||
|
||||
/* These are the component types which may be found in the tree. Many
|
||||
component types have one or two subtrees, referred to as left and
|
||||
right (a component type with only one subtree puts it in the left
|
||||
subtree). */
|
||||
|
||||
enum demangle_component_type
|
||||
{
|
||||
/* A name, with a length and a pointer to a string. */
|
||||
DEMANGLE_COMPONENT_NAME,
|
||||
/* A qualified name. The left subtree is a class or namespace or
|
||||
some such thing, and the right subtree is a name qualified by
|
||||
that class. */
|
||||
DEMANGLE_COMPONENT_QUAL_NAME,
|
||||
/* A local name. The left subtree describes a function, and the
|
||||
right subtree is a name which is local to that function. */
|
||||
DEMANGLE_COMPONENT_LOCAL_NAME,
|
||||
/* A typed name. The left subtree is a name, and the right subtree
|
||||
describes that name as a function. */
|
||||
DEMANGLE_COMPONENT_TYPED_NAME,
|
||||
/* A template. The left subtree is a template name, and the right
|
||||
subtree is a template argument list. */
|
||||
DEMANGLE_COMPONENT_TEMPLATE,
|
||||
/* A template parameter. This holds a number, which is the template
|
||||
parameter index. */
|
||||
DEMANGLE_COMPONENT_TEMPLATE_PARAM,
|
||||
/* A function parameter. This holds a number, which is the index. */
|
||||
DEMANGLE_COMPONENT_FUNCTION_PARAM,
|
||||
/* A constructor. This holds a name and the kind of
|
||||
constructor. */
|
||||
DEMANGLE_COMPONENT_CTOR,
|
||||
/* A destructor. This holds a name and the kind of destructor. */
|
||||
DEMANGLE_COMPONENT_DTOR,
|
||||
/* A vtable. This has one subtree, the type for which this is a
|
||||
vtable. */
|
||||
DEMANGLE_COMPONENT_VTABLE,
|
||||
/* A VTT structure. This has one subtree, the type for which this
|
||||
is a VTT. */
|
||||
DEMANGLE_COMPONENT_VTT,
|
||||
/* A construction vtable. The left subtree is the type for which
|
||||
this is a vtable, and the right subtree is the derived type for
|
||||
which this vtable is built. */
|
||||
DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
|
||||
/* A typeinfo structure. This has one subtree, the type for which
|
||||
this is the tpeinfo structure. */
|
||||
DEMANGLE_COMPONENT_TYPEINFO,
|
||||
/* A typeinfo name. This has one subtree, the type for which this
|
||||
is the typeinfo name. */
|
||||
DEMANGLE_COMPONENT_TYPEINFO_NAME,
|
||||
/* A typeinfo function. This has one subtree, the type for which
|
||||
this is the tpyeinfo function. */
|
||||
DEMANGLE_COMPONENT_TYPEINFO_FN,
|
||||
/* A thunk. This has one subtree, the name for which this is a
|
||||
thunk. */
|
||||
DEMANGLE_COMPONENT_THUNK,
|
||||
/* A virtual thunk. This has one subtree, the name for which this
|
||||
is a virtual thunk. */
|
||||
DEMANGLE_COMPONENT_VIRTUAL_THUNK,
|
||||
/* A covariant thunk. This has one subtree, the name for which this
|
||||
is a covariant thunk. */
|
||||
DEMANGLE_COMPONENT_COVARIANT_THUNK,
|
||||
/* A Java class. This has one subtree, the type. */
|
||||
DEMANGLE_COMPONENT_JAVA_CLASS,
|
||||
/* A guard variable. This has one subtree, the name for which this
|
||||
is a guard variable. */
|
||||
DEMANGLE_COMPONENT_GUARD,
|
||||
/* The init and wrapper functions for C++11 thread_local variables. */
|
||||
DEMANGLE_COMPONENT_TLS_INIT,
|
||||
DEMANGLE_COMPONENT_TLS_WRAPPER,
|
||||
/* A reference temporary. This has one subtree, the name for which
|
||||
this is a temporary. */
|
||||
DEMANGLE_COMPONENT_REFTEMP,
|
||||
/* A hidden alias. This has one subtree, the encoding for which it
|
||||
is providing alternative linkage. */
|
||||
DEMANGLE_COMPONENT_HIDDEN_ALIAS,
|
||||
/* A standard substitution. This holds the name of the
|
||||
substitution. */
|
||||
DEMANGLE_COMPONENT_SUB_STD,
|
||||
/* The restrict qualifier. The one subtree is the type which is
|
||||
being qualified. */
|
||||
DEMANGLE_COMPONENT_RESTRICT,
|
||||
/* The volatile qualifier. The one subtree is the type which is
|
||||
being qualified. */
|
||||
DEMANGLE_COMPONENT_VOLATILE,
|
||||
/* The const qualifier. The one subtree is the type which is being
|
||||
qualified. */
|
||||
DEMANGLE_COMPONENT_CONST,
|
||||
/* The restrict qualifier modifying a member function. The one
|
||||
subtree is the type which is being qualified. */
|
||||
DEMANGLE_COMPONENT_RESTRICT_THIS,
|
||||
/* The volatile qualifier modifying a member function. The one
|
||||
subtree is the type which is being qualified. */
|
||||
DEMANGLE_COMPONENT_VOLATILE_THIS,
|
||||
/* The const qualifier modifying a member function. The one subtree
|
||||
is the type which is being qualified. */
|
||||
DEMANGLE_COMPONENT_CONST_THIS,
|
||||
/* C++11 A reference modifying a member function. The one subtree is the
|
||||
type which is being referenced. */
|
||||
DEMANGLE_COMPONENT_REFERENCE_THIS,
|
||||
/* C++11: An rvalue reference modifying a member function. The one
|
||||
subtree is the type which is being referenced. */
|
||||
DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS,
|
||||
/* A vendor qualifier. The left subtree is the type which is being
|
||||
qualified, and the right subtree is the name of the
|
||||
qualifier. */
|
||||
DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
|
||||
/* A pointer. The one subtree is the type which is being pointed
|
||||
to. */
|
||||
DEMANGLE_COMPONENT_POINTER,
|
||||
/* A reference. The one subtree is the type which is being
|
||||
referenced. */
|
||||
DEMANGLE_COMPONENT_REFERENCE,
|
||||
/* C++0x: An rvalue reference. The one subtree is the type which is
|
||||
being referenced. */
|
||||
DEMANGLE_COMPONENT_RVALUE_REFERENCE,
|
||||
/* A complex type. The one subtree is the base type. */
|
||||
DEMANGLE_COMPONENT_COMPLEX,
|
||||
/* An imaginary type. The one subtree is the base type. */
|
||||
DEMANGLE_COMPONENT_IMAGINARY,
|
||||
/* A builtin type. This holds the builtin type information. */
|
||||
DEMANGLE_COMPONENT_BUILTIN_TYPE,
|
||||
/* A vendor's builtin type. This holds the name of the type. */
|
||||
DEMANGLE_COMPONENT_VENDOR_TYPE,
|
||||
/* A function type. The left subtree is the return type. The right
|
||||
subtree is a list of ARGLIST nodes. Either or both may be
|
||||
NULL. */
|
||||
DEMANGLE_COMPONENT_FUNCTION_TYPE,
|
||||
/* An array type. The left subtree is the dimension, which may be
|
||||
NULL, or a string (represented as DEMANGLE_COMPONENT_NAME), or an
|
||||
expression. The right subtree is the element type. */
|
||||
DEMANGLE_COMPONENT_ARRAY_TYPE,
|
||||
/* A pointer to member type. The left subtree is the class type,
|
||||
and the right subtree is the member type. CV-qualifiers appear
|
||||
on the latter. */
|
||||
DEMANGLE_COMPONENT_PTRMEM_TYPE,
|
||||
/* A fixed-point type. */
|
||||
DEMANGLE_COMPONENT_FIXED_TYPE,
|
||||
/* A vector type. The left subtree is the number of elements,
|
||||
the right subtree is the element type. */
|
||||
DEMANGLE_COMPONENT_VECTOR_TYPE,
|
||||
/* An argument list. The left subtree is the current argument, and
|
||||
the right subtree is either NULL or another ARGLIST node. */
|
||||
DEMANGLE_COMPONENT_ARGLIST,
|
||||
/* A template argument list. The left subtree is the current
|
||||
template argument, and the right subtree is either NULL or
|
||||
another TEMPLATE_ARGLIST node. */
|
||||
DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,
|
||||
/* An initializer list. The left subtree is either an explicit type or
|
||||
NULL, and the right subtree is a DEMANGLE_COMPONENT_ARGLIST. */
|
||||
DEMANGLE_COMPONENT_INITIALIZER_LIST,
|
||||
/* An operator. This holds information about a standard
|
||||
operator. */
|
||||
DEMANGLE_COMPONENT_OPERATOR,
|
||||
/* An extended operator. This holds the number of arguments, and
|
||||
the name of the extended operator. */
|
||||
DEMANGLE_COMPONENT_EXTENDED_OPERATOR,
|
||||
/* A typecast, represented as a unary operator. The one subtree is
|
||||
the type to which the argument should be cast. */
|
||||
DEMANGLE_COMPONENT_CAST,
|
||||
/* A conversion operator, represented as a unary operator. The one
|
||||
subtree is the type to which the argument should be converted
|
||||
to. */
|
||||
DEMANGLE_COMPONENT_CONVERSION,
|
||||
/* A nullary expression. The left subtree is the operator. */
|
||||
DEMANGLE_COMPONENT_NULLARY,
|
||||
/* A unary expression. The left subtree is the operator, and the
|
||||
right subtree is the single argument. */
|
||||
DEMANGLE_COMPONENT_UNARY,
|
||||
/* A binary expression. The left subtree is the operator, and the
|
||||
right subtree is a BINARY_ARGS. */
|
||||
DEMANGLE_COMPONENT_BINARY,
|
||||
/* Arguments to a binary expression. The left subtree is the first
|
||||
argument, and the right subtree is the second argument. */
|
||||
DEMANGLE_COMPONENT_BINARY_ARGS,
|
||||
/* A trinary expression. The left subtree is the operator, and the
|
||||
right subtree is a TRINARY_ARG1. */
|
||||
DEMANGLE_COMPONENT_TRINARY,
|
||||
/* Arguments to a trinary expression. The left subtree is the first
|
||||
argument, and the right subtree is a TRINARY_ARG2. */
|
||||
DEMANGLE_COMPONENT_TRINARY_ARG1,
|
||||
/* More arguments to a trinary expression. The left subtree is the
|
||||
second argument, and the right subtree is the third argument. */
|
||||
DEMANGLE_COMPONENT_TRINARY_ARG2,
|
||||
/* A literal. The left subtree is the type, and the right subtree
|
||||
is the value, represented as a DEMANGLE_COMPONENT_NAME. */
|
||||
DEMANGLE_COMPONENT_LITERAL,
|
||||
/* A negative literal. Like LITERAL, but the value is negated.
|
||||
This is a minor hack: the NAME used for LITERAL points directly
|
||||
to the mangled string, but since negative numbers are mangled
|
||||
using 'n' instead of '-', we want a way to indicate a negative
|
||||
number which involves neither modifying the mangled string nor
|
||||
allocating a new copy of the literal in memory. */
|
||||
DEMANGLE_COMPONENT_LITERAL_NEG,
|
||||
/* A libgcj compiled resource. The left subtree is the name of the
|
||||
resource. */
|
||||
DEMANGLE_COMPONENT_JAVA_RESOURCE,
|
||||
/* A name formed by the concatenation of two parts. The left
|
||||
subtree is the first part and the right subtree the second. */
|
||||
DEMANGLE_COMPONENT_COMPOUND_NAME,
|
||||
/* A name formed by a single character. */
|
||||
DEMANGLE_COMPONENT_CHARACTER,
|
||||
/* A number. */
|
||||
DEMANGLE_COMPONENT_NUMBER,
|
||||
/* A decltype type. */
|
||||
DEMANGLE_COMPONENT_DECLTYPE,
|
||||
/* Global constructors keyed to name. */
|
||||
DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,
|
||||
/* Global destructors keyed to name. */
|
||||
DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS,
|
||||
/* A lambda closure type. */
|
||||
DEMANGLE_COMPONENT_LAMBDA,
|
||||
/* A default argument scope. */
|
||||
DEMANGLE_COMPONENT_DEFAULT_ARG,
|
||||
/* An unnamed type. */
|
||||
DEMANGLE_COMPONENT_UNNAMED_TYPE,
|
||||
/* A transactional clone. This has one subtree, the encoding for
|
||||
which it is providing alternative linkage. */
|
||||
DEMANGLE_COMPONENT_TRANSACTION_CLONE,
|
||||
/* A non-transactional clone entry point. In the i386/x86_64 abi,
|
||||
the unmangled symbol of a tm_callable becomes a thunk and the
|
||||
non-transactional function version is mangled thus. */
|
||||
DEMANGLE_COMPONENT_NONTRANSACTION_CLONE,
|
||||
/* A pack expansion. */
|
||||
DEMANGLE_COMPONENT_PACK_EXPANSION,
|
||||
/* A name with an ABI tag. */
|
||||
DEMANGLE_COMPONENT_TAGGED_NAME,
|
||||
/* A transaction-safe function type. */
|
||||
DEMANGLE_COMPONENT_TRANSACTION_SAFE,
|
||||
/* A cloned function. */
|
||||
DEMANGLE_COMPONENT_CLONE
|
||||
};
|
||||
|
||||
/* Types which are only used internally. */
|
||||
|
||||
struct demangle_operator_info;
|
||||
struct demangle_builtin_type_info;
|
||||
|
||||
/* A node in the tree representation is an instance of a struct
|
||||
demangle_component. Note that the field names of the struct are
|
||||
not well protected against macros defined by the file including
|
||||
this one. We can fix this if it ever becomes a problem. */
|
||||
|
||||
struct demangle_component
|
||||
{
|
||||
/* The type of this component. */
|
||||
enum demangle_component_type type;
|
||||
|
||||
union
|
||||
{
|
||||
/* For DEMANGLE_COMPONENT_NAME. */
|
||||
struct
|
||||
{
|
||||
/* A pointer to the name (which need not NULL terminated) and
|
||||
its length. */
|
||||
const char *s;
|
||||
int len;
|
||||
} s_name;
|
||||
|
||||
/* For DEMANGLE_COMPONENT_OPERATOR. */
|
||||
struct
|
||||
{
|
||||
/* Operator. */
|
||||
const struct demangle_operator_info *op;
|
||||
} s_operator;
|
||||
|
||||
/* For DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */
|
||||
struct
|
||||
{
|
||||
/* Number of arguments. */
|
||||
int args;
|
||||
/* Name. */
|
||||
struct demangle_component *name;
|
||||
} s_extended_operator;
|
||||
|
||||
/* For DEMANGLE_COMPONENT_FIXED_TYPE. */
|
||||
struct
|
||||
{
|
||||
/* The length, indicated by a C integer type name. */
|
||||
struct demangle_component *length;
|
||||
/* _Accum or _Fract? */
|
||||
short accum;
|
||||
/* Saturating or not? */
|
||||
short sat;
|
||||
} s_fixed;
|
||||
|
||||
/* For DEMANGLE_COMPONENT_CTOR. */
|
||||
struct
|
||||
{
|
||||
/* Kind of constructor. */
|
||||
enum gnu_v3_ctor_kinds kind;
|
||||
/* Name. */
|
||||
struct demangle_component *name;
|
||||
} s_ctor;
|
||||
|
||||
/* For DEMANGLE_COMPONENT_DTOR. */
|
||||
struct
|
||||
{
|
||||
/* Kind of destructor. */
|
||||
enum gnu_v3_dtor_kinds kind;
|
||||
/* Name. */
|
||||
struct demangle_component *name;
|
||||
} s_dtor;
|
||||
|
||||
/* For DEMANGLE_COMPONENT_BUILTIN_TYPE. */
|
||||
struct
|
||||
{
|
||||
/* Builtin type. */
|
||||
const struct demangle_builtin_type_info *type;
|
||||
} s_builtin;
|
||||
|
||||
/* For DEMANGLE_COMPONENT_SUB_STD. */
|
||||
struct
|
||||
{
|
||||
/* Standard substitution string. */
|
||||
const char* string;
|
||||
/* Length of string. */
|
||||
int len;
|
||||
} s_string;
|
||||
|
||||
/* For DEMANGLE_COMPONENT_*_PARAM. */
|
||||
struct
|
||||
{
|
||||
/* Parameter index. */
|
||||
long number;
|
||||
} s_number;
|
||||
|
||||
/* For DEMANGLE_COMPONENT_CHARACTER. */
|
||||
struct
|
||||
{
|
||||
int character;
|
||||
} s_character;
|
||||
|
||||
/* For other types. */
|
||||
struct
|
||||
{
|
||||
/* Left (or only) subtree. */
|
||||
struct demangle_component *left;
|
||||
/* Right subtree. */
|
||||
struct demangle_component *right;
|
||||
} s_binary;
|
||||
|
||||
struct
|
||||
{
|
||||
/* subtree, same place as d_left. */
|
||||
struct demangle_component *sub;
|
||||
/* integer. */
|
||||
int num;
|
||||
} s_unary_num;
|
||||
|
||||
} u;
|
||||
};
|
||||
|
||||
/* People building mangled trees are expected to allocate instances of
|
||||
struct demangle_component themselves. They can then call one of
|
||||
the following functions to fill them in. */
|
||||
|
||||
/* Fill in most component types with a left subtree and a right
|
||||
subtree. Returns non-zero on success, zero on failure, such as an
|
||||
unrecognized or inappropriate component type. */
|
||||
|
||||
extern int
|
||||
cplus_demangle_fill_component (struct demangle_component *fill,
|
||||
enum demangle_component_type,
|
||||
struct demangle_component *left,
|
||||
struct demangle_component *right);
|
||||
|
||||
/* Fill in a DEMANGLE_COMPONENT_NAME. Returns non-zero on success,
|
||||
zero for bad arguments. */
|
||||
|
||||
extern int
|
||||
cplus_demangle_fill_name (struct demangle_component *fill,
|
||||
const char *, int);
|
||||
|
||||
/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE, using the name of the
|
||||
builtin type (e.g., "int", etc.). Returns non-zero on success,
|
||||
zero if the type is not recognized. */
|
||||
|
||||
extern int
|
||||
cplus_demangle_fill_builtin_type (struct demangle_component *fill,
|
||||
const char *type_name);
|
||||
|
||||
/* Fill in a DEMANGLE_COMPONENT_OPERATOR, using the name of the
|
||||
operator and the number of arguments which it takes (the latter is
|
||||
used to disambiguate operators which can be both binary and unary,
|
||||
such as '-'). Returns non-zero on success, zero if the operator is
|
||||
not recognized. */
|
||||
|
||||
extern int
|
||||
cplus_demangle_fill_operator (struct demangle_component *fill,
|
||||
const char *opname, int args);
|
||||
|
||||
/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR, providing the
|
||||
number of arguments and the name. Returns non-zero on success,
|
||||
zero for bad arguments. */
|
||||
|
||||
extern int
|
||||
cplus_demangle_fill_extended_operator (struct demangle_component *fill,
|
||||
int numargs,
|
||||
struct demangle_component *nm);
|
||||
|
||||
/* Fill in a DEMANGLE_COMPONENT_CTOR. Returns non-zero on success,
|
||||
zero for bad arguments. */
|
||||
|
||||
extern int
|
||||
cplus_demangle_fill_ctor (struct demangle_component *fill,
|
||||
enum gnu_v3_ctor_kinds kind,
|
||||
struct demangle_component *name);
|
||||
|
||||
/* Fill in a DEMANGLE_COMPONENT_DTOR. Returns non-zero on success,
|
||||
zero for bad arguments. */
|
||||
|
||||
extern int
|
||||
cplus_demangle_fill_dtor (struct demangle_component *fill,
|
||||
enum gnu_v3_dtor_kinds kind,
|
||||
struct demangle_component *name);
|
||||
|
||||
/* This function translates a mangled name into a struct
|
||||
demangle_component tree. The first argument is the mangled name.
|
||||
The second argument is DMGL_* options. This returns a pointer to a
|
||||
tree on success, or NULL on failure. On success, the third
|
||||
argument is set to a block of memory allocated by malloc. This
|
||||
block should be passed to free when the tree is no longer
|
||||
needed. */
|
||||
|
||||
extern struct demangle_component *
|
||||
cplus_demangle_v3_components (const char *mangled, int options, void **mem);
|
||||
|
||||
/* This function takes a struct demangle_component tree and returns
|
||||
the corresponding demangled string. The first argument is DMGL_*
|
||||
options. The second is the tree to demangle. The third is a guess
|
||||
at the length of the demangled string, used to initially allocate
|
||||
the return buffer. The fourth is a pointer to a size_t. On
|
||||
success, this function returns a buffer allocated by malloc(), and
|
||||
sets the size_t pointed to by the fourth argument to the size of
|
||||
the allocated buffer (not the length of the returned string). On
|
||||
failure, this function returns NULL, and sets the size_t pointed to
|
||||
by the fourth argument to 0 for an invalid tree, or to 1 for a
|
||||
memory allocation error. */
|
||||
|
||||
extern char *
|
||||
cplus_demangle_print (int options,
|
||||
const struct demangle_component *tree,
|
||||
int estimated_length,
|
||||
size_t *p_allocated_size);
|
||||
|
||||
/* This function takes a struct demangle_component tree and passes back
|
||||
a demangled string in one or more calls to a callback function.
|
||||
The first argument is DMGL_* options. The second is the tree to
|
||||
demangle. The third is a pointer to a callback function; on each call
|
||||
this receives an element of the demangled string, its length, and an
|
||||
opaque value. The fourth is the opaque value passed to the callback.
|
||||
The callback is called once or more to return the full demangled
|
||||
string. The demangled element string is always nul-terminated, though
|
||||
its length is also provided for convenience. In contrast to
|
||||
cplus_demangle_print(), this function does not allocate heap memory
|
||||
to grow output strings (except perhaps where alloca() is implemented
|
||||
by malloc()), and so is normally safe for use where the heap has been
|
||||
corrupted. On success, this function returns 1; on failure, 0. */
|
||||
|
||||
extern int
|
||||
cplus_demangle_print_callback (int options,
|
||||
const struct demangle_component *tree,
|
||||
demangle_callbackref callback, void *opaque);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* DEMANGLE_H */
|
78
include/devctl.h
Normal file
78
include/devctl.h
Normal file
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2016,2019 Joel Sherrill <joel@rtems.org>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _POSIX_DEVCTL_h_
|
||||
#define _POSIX_DEVCTL_h_
|
||||
|
||||
/*
|
||||
* Nothing in this file should be visible unless _POSIX_26_C_SOURCE is
|
||||
* defined.
|
||||
*/
|
||||
#ifdef _POSIX_26_C_SOURCE
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(__rtems__)
|
||||
/*
|
||||
* The FACE Technical Standard, Edition 3.0 and later require the
|
||||
* definition of the subcommand SOCKCLOSE in <devctl.h>.
|
||||
*
|
||||
* Reference: https://www.opengroup.org/face
|
||||
*
|
||||
* Using 'D' should avoid the letters used by other users of <sys/ioccom.h>
|
||||
*/
|
||||
#include <sys/ioccom.h>
|
||||
|
||||
#define SOCKCLOSE _IO('D', 1) /* socket close */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The posix_devctl() method is defined by POSIX 1003.26-2003. Aside
|
||||
* from the single method, it adds the following requirements:
|
||||
*
|
||||
* + define _POSIX_26_VERSION to 200312L
|
||||
* + add _SC_POSIX_26_VERSION in <unistd.h>. Return _POSIX_26_VERSION
|
||||
* + application must define _POSIX_26_C_SOURCE to use posix_devctl().
|
||||
* + posix_devctl() is prototyped in <devctl.h>
|
||||
*/
|
||||
int posix_devctl(
|
||||
int fd,
|
||||
int dcmd,
|
||||
void *__restrict dev_data_ptr,
|
||||
size_t nbyte,
|
||||
int *__restrict dev_info_ptr
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _POSIX_26_C_SOURCE */
|
||||
#endif /*_POSIX_DEVCTL_h_ */
|
85
include/dirent.h
Normal file
85
include/dirent.h
Normal file
@ -0,0 +1,85 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)dirent.h 8.3 (Berkeley) 8/10/94
|
||||
* $FreeBSD: head/include/dirent.h 326024 2017-11-20 19:45:28Z pfg $
|
||||
*/
|
||||
|
||||
#ifndef _DIRENT_H_
|
||||
#define _DIRENT_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/dirent.h>
|
||||
|
||||
#if !defined(MAXNAMLEN) && __BSD_VISIBLE
|
||||
#define MAXNAMLEN 1024
|
||||
#endif
|
||||
|
||||
__BEGIN_DECLS
|
||||
#if __MISC_VISIBLE || __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 700
|
||||
int alphasort(const struct dirent **, const struct dirent **);
|
||||
int dirfd(DIR *);
|
||||
#endif
|
||||
#if __BSD_VISIBLE
|
||||
int fdclosedir(DIR *);
|
||||
#endif
|
||||
DIR *opendir(const char *);
|
||||
DIR *fdopendir(int);
|
||||
struct dirent *
|
||||
readdir(DIR *);
|
||||
#if __POSIX_VISIBLE >= 199506 || __XSI_VISIBLE >= 500
|
||||
int readdir_r(DIR *__restrict, struct dirent *__restrict,
|
||||
struct dirent **__restrict);
|
||||
#endif
|
||||
void rewinddir(DIR *);
|
||||
#if __MISC_VISIBLE || __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 700
|
||||
int scandir(const char *, struct dirent ***,
|
||||
int (*)(const struct dirent *), int (*)(const struct dirent **,
|
||||
const struct dirent **));
|
||||
#endif
|
||||
#ifdef _LIBC
|
||||
void _seekdir(DIR *, long);
|
||||
#endif
|
||||
#if __MISC_VISIBLE || __XSI_VISIBLE
|
||||
#ifndef __INSIDE_CYGWIN__
|
||||
void seekdir(DIR *, long);
|
||||
long telldir(DIR *);
|
||||
#endif
|
||||
#endif
|
||||
int closedir(DIR *);
|
||||
#if __GNU_VISIBLE
|
||||
int scandirat(int, const char *, struct dirent ***,
|
||||
int (*) (const struct dirent *), int (*) (const struct dirent **,
|
||||
const struct dirent **));
|
||||
int versionsort(const struct dirent **, const struct dirent **);
|
||||
#endif
|
||||
__END_DECLS
|
||||
|
||||
#endif /*_DIRENT_H_*/
|
382
include/dis-asm.h
Normal file
382
include/dis-asm.h
Normal file
@ -0,0 +1,382 @@
|
||||
/* Interface between the opcode library and its callers.
|
||||
|
||||
Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010,
|
||||
2011, 2012 Free Software Foundation, Inc.
|
||||
|
||||
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, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor,
|
||||
Boston, MA 02110-1301, USA.
|
||||
|
||||
Written by Cygnus Support, 1993.
|
||||
|
||||
The opcode library (libopcodes.a) provides instruction decoders for
|
||||
a large variety of instruction sets, callable with an identical
|
||||
interface, for making instruction-processing programs more independent
|
||||
of the instruction set being processed. */
|
||||
|
||||
#ifndef DIS_ASM_H
|
||||
#define DIS_ASM_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include "bfd.h"
|
||||
|
||||
typedef int (*fprintf_ftype) (void *, const char*, ...) ATTRIBUTE_FPTR_PRINTF_2;
|
||||
|
||||
enum dis_insn_type
|
||||
{
|
||||
dis_noninsn, /* Not a valid instruction. */
|
||||
dis_nonbranch, /* Not a branch instruction. */
|
||||
dis_branch, /* Unconditional branch. */
|
||||
dis_condbranch, /* Conditional branch. */
|
||||
dis_jsr, /* Jump to subroutine. */
|
||||
dis_condjsr, /* Conditional jump to subroutine. */
|
||||
dis_dref, /* Data reference instruction. */
|
||||
dis_dref2 /* Two data references in instruction. */
|
||||
};
|
||||
|
||||
/* This struct is passed into the instruction decoding routine,
|
||||
and is passed back out into each callback. The various fields are used
|
||||
for conveying information from your main routine into your callbacks,
|
||||
for passing information into the instruction decoders (such as the
|
||||
addresses of the callback functions), or for passing information
|
||||
back from the instruction decoders to their callers.
|
||||
|
||||
It must be initialized before it is first passed; this can be done
|
||||
by hand, or using one of the initialization macros below. */
|
||||
|
||||
typedef struct disassemble_info
|
||||
{
|
||||
fprintf_ftype fprintf_func;
|
||||
void *stream;
|
||||
void *application_data;
|
||||
|
||||
/* Target description. We could replace this with a pointer to the bfd,
|
||||
but that would require one. There currently isn't any such requirement
|
||||
so to avoid introducing one we record these explicitly. */
|
||||
/* The bfd_flavour. This can be bfd_target_unknown_flavour. */
|
||||
enum bfd_flavour flavour;
|
||||
/* The bfd_arch value. */
|
||||
enum bfd_architecture arch;
|
||||
/* The bfd_mach value. */
|
||||
unsigned long mach;
|
||||
/* Endianness (for bi-endian cpus). Mono-endian cpus can ignore this. */
|
||||
enum bfd_endian endian;
|
||||
/* Endianness of code, for mixed-endian situations such as ARM BE8. */
|
||||
enum bfd_endian endian_code;
|
||||
/* An arch/mach-specific bitmask of selected instruction subsets, mainly
|
||||
for processors with run-time-switchable instruction sets. The default,
|
||||
zero, means that there is no constraint. CGEN-based opcodes ports
|
||||
may use ISA_foo masks. */
|
||||
void *insn_sets;
|
||||
|
||||
/* Some targets need information about the current section to accurately
|
||||
display insns. If this is NULL, the target disassembler function
|
||||
will have to make its best guess. */
|
||||
asection *section;
|
||||
|
||||
/* An array of pointers to symbols either at the location being disassembled
|
||||
or at the start of the function being disassembled. The array is sorted
|
||||
so that the first symbol is intended to be the one used. The others are
|
||||
present for any misc. purposes. This is not set reliably, but if it is
|
||||
not NULL, it is correct. */
|
||||
asymbol **symbols;
|
||||
/* Number of symbols in array. */
|
||||
int num_symbols;
|
||||
|
||||
/* Symbol table provided for targets that want to look at it. This is
|
||||
used on Arm to find mapping symbols and determine Arm/Thumb code. */
|
||||
asymbol **symtab;
|
||||
int symtab_pos;
|
||||
int symtab_size;
|
||||
|
||||
/* For use by the disassembler.
|
||||
The top 16 bits are reserved for public use (and are documented here).
|
||||
The bottom 16 bits are for the internal use of the disassembler. */
|
||||
unsigned long flags;
|
||||
/* Set if the disassembler has determined that there are one or more
|
||||
relocations associated with the instruction being disassembled. */
|
||||
#define INSN_HAS_RELOC (1 << 31)
|
||||
/* Set if the user has requested the disassembly of data as well as code. */
|
||||
#define DISASSEMBLE_DATA (1 << 30)
|
||||
/* Set if the user has specifically set the machine type encoded in the
|
||||
mach field of this structure. */
|
||||
#define USER_SPECIFIED_MACHINE_TYPE (1 << 29)
|
||||
|
||||
/* Use internally by the target specific disassembly code. */
|
||||
void *private_data;
|
||||
|
||||
/* Function used to get bytes to disassemble. MEMADDR is the
|
||||
address of the stuff to be disassembled, MYADDR is the address to
|
||||
put the bytes in, and LENGTH is the number of bytes to read.
|
||||
INFO is a pointer to this struct.
|
||||
Returns an errno value or 0 for success. */
|
||||
int (*read_memory_func)
|
||||
(bfd_vma memaddr, bfd_byte *myaddr, unsigned int length,
|
||||
struct disassemble_info *dinfo);
|
||||
|
||||
/* Function which should be called if we get an error that we can't
|
||||
recover from. STATUS is the errno value from read_memory_func and
|
||||
MEMADDR is the address that we were trying to read. INFO is a
|
||||
pointer to this struct. */
|
||||
void (*memory_error_func)
|
||||
(int status, bfd_vma memaddr, struct disassemble_info *dinfo);
|
||||
|
||||
/* Function called to print ADDR. */
|
||||
void (*print_address_func)
|
||||
(bfd_vma addr, struct disassemble_info *dinfo);
|
||||
|
||||
/* Function called to determine if there is a symbol at the given ADDR.
|
||||
If there is, the function returns 1, otherwise it returns 0.
|
||||
This is used by ports which support an overlay manager where
|
||||
the overlay number is held in the top part of an address. In
|
||||
some circumstances we want to include the overlay number in the
|
||||
address, (normally because there is a symbol associated with
|
||||
that address), but sometimes we want to mask out the overlay bits. */
|
||||
int (* symbol_at_address_func)
|
||||
(bfd_vma addr, struct disassemble_info *dinfo);
|
||||
|
||||
/* Function called to check if a SYMBOL is can be displayed to the user.
|
||||
This is used by some ports that want to hide special symbols when
|
||||
displaying debugging outout. */
|
||||
bfd_boolean (* symbol_is_valid)
|
||||
(asymbol *, struct disassemble_info *dinfo);
|
||||
|
||||
/* These are for buffer_read_memory. */
|
||||
bfd_byte *buffer;
|
||||
bfd_vma buffer_vma;
|
||||
unsigned int buffer_length;
|
||||
|
||||
/* This variable may be set by the instruction decoder. It suggests
|
||||
the number of bytes objdump should display on a single line. If
|
||||
the instruction decoder sets this, it should always set it to
|
||||
the same value in order to get reasonable looking output. */
|
||||
int bytes_per_line;
|
||||
|
||||
/* The next two variables control the way objdump displays the raw data. */
|
||||
/* For example, if bytes_per_line is 8 and bytes_per_chunk is 4, the */
|
||||
/* output will look like this:
|
||||
00: 00000000 00000000
|
||||
with the chunks displayed according to "display_endian". */
|
||||
int bytes_per_chunk;
|
||||
enum bfd_endian display_endian;
|
||||
|
||||
/* Number of octets per incremented target address
|
||||
Normally one, but some DSPs have byte sizes of 16 or 32 bits. */
|
||||
unsigned int octets_per_byte;
|
||||
|
||||
/* The number of zeroes we want to see at the end of a section before we
|
||||
start skipping them. */
|
||||
unsigned int skip_zeroes;
|
||||
|
||||
/* The number of zeroes to skip at the end of a section. If the number
|
||||
of zeroes at the end is between SKIP_ZEROES_AT_END and SKIP_ZEROES,
|
||||
they will be disassembled. If there are fewer than
|
||||
SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic
|
||||
attempt to avoid disassembling zeroes inserted by section
|
||||
alignment. */
|
||||
unsigned int skip_zeroes_at_end;
|
||||
|
||||
/* Whether the disassembler always needs the relocations. */
|
||||
bfd_boolean disassembler_needs_relocs;
|
||||
|
||||
/* Results from instruction decoders. Not all decoders yet support
|
||||
this information. This info is set each time an instruction is
|
||||
decoded, and is only valid for the last such instruction.
|
||||
|
||||
To determine whether this decoder supports this information, set
|
||||
insn_info_valid to 0, decode an instruction, then check it. */
|
||||
|
||||
char insn_info_valid; /* Branch info has been set. */
|
||||
char branch_delay_insns; /* How many sequential insn's will run before
|
||||
a branch takes effect. (0 = normal) */
|
||||
char data_size; /* Size of data reference in insn, in bytes */
|
||||
enum dis_insn_type insn_type; /* Type of instruction */
|
||||
bfd_vma target; /* Target address of branch or dref, if known;
|
||||
zero if unknown. */
|
||||
bfd_vma target2; /* Second target address for dref2 */
|
||||
|
||||
/* Command line options specific to the target disassembler. */
|
||||
char * disassembler_options;
|
||||
|
||||
} disassemble_info;
|
||||
|
||||
|
||||
/* Standard disassemblers. Disassemble one instruction at the given
|
||||
target address. Return number of octets processed. */
|
||||
typedef int (*disassembler_ftype) (bfd_vma, disassemble_info *);
|
||||
|
||||
extern int print_insn_aarch64 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_alpha (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_avr (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_bfin (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_big_arm (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_big_mips (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_big_nios2 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_big_or32 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_big_powerpc (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_big_score (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_cr16 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_crx (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_d10v (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_d30v (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_dlx (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_epiphany (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_fr30 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_frv (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_h8300 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_h8300h (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_h8300s (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_h8500 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_hppa (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_i370 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_i386 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_i386_att (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_i386_intel (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_i860 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_i960 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_ia64 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_ip2k (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_iq2000 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_little_arm (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_little_mips (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_little_nios2 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_little_or32 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_little_powerpc (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_little_score (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_lm32 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_m32c (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_m32r (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_m68hc11 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_m68hc12 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_m9s12x (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_m9s12xg (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_m68k (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_m88k (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_mcore (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_mep (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_metag (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_microblaze (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_mmix (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_mn10200 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_mn10300 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_moxie (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_msp430 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_mt (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_ns32k (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_openrisc (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_pdp11 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_pj (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_rs6000 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_s390 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_sh (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_sh64 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_sh64x_media (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_sparc (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_spu (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_tic30 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_tic4x (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_tic54x (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_tic6x (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_tic80 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_tilegx (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_tilepro (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_v850 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_vax (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_w65 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_xc16x (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_xgate (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_xstormy16 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_xtensa (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_z80 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_z8001 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_z8002 (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_rx (bfd_vma, disassemble_info *);
|
||||
extern int print_insn_rl78 (bfd_vma, disassemble_info *);
|
||||
|
||||
extern disassembler_ftype arc_get_disassembler (void *);
|
||||
extern disassembler_ftype cris_get_disassembler (bfd *);
|
||||
|
||||
extern void print_aarch64_disassembler_options (FILE *);
|
||||
extern void print_i386_disassembler_options (FILE *);
|
||||
extern void print_mips_disassembler_options (FILE *);
|
||||
extern void print_ppc_disassembler_options (FILE *);
|
||||
extern void print_arm_disassembler_options (FILE *);
|
||||
extern void parse_arm_disassembler_option (char *);
|
||||
extern void print_s390_disassembler_options (FILE *);
|
||||
extern int get_arm_regname_num_options (void);
|
||||
extern int set_arm_regname_option (int);
|
||||
extern int get_arm_regnames (int, const char **, const char **, const char *const **);
|
||||
extern bfd_boolean aarch64_symbol_is_valid (asymbol *, struct disassemble_info *);
|
||||
extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *);
|
||||
extern void disassemble_init_powerpc (struct disassemble_info *);
|
||||
|
||||
/* Fetch the disassembler for a given BFD, if that support is available. */
|
||||
extern disassembler_ftype disassembler (bfd *);
|
||||
|
||||
/* Amend the disassemble_info structure as necessary for the target architecture.
|
||||
Should only be called after initialising the info->arch field. */
|
||||
extern void disassemble_init_for_target (struct disassemble_info * dinfo);
|
||||
|
||||
/* Document any target specific options available from the disassembler. */
|
||||
extern void disassembler_usage (FILE *);
|
||||
|
||||
|
||||
/* This block of definitions is for particular callers who read instructions
|
||||
into a buffer before calling the instruction decoder. */
|
||||
|
||||
/* Here is a function which callers may wish to use for read_memory_func.
|
||||
It gets bytes from a buffer. */
|
||||
extern int buffer_read_memory
|
||||
(bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *);
|
||||
|
||||
/* This function goes with buffer_read_memory.
|
||||
It prints a message using info->fprintf_func and info->stream. */
|
||||
extern void perror_memory (int, bfd_vma, struct disassemble_info *);
|
||||
|
||||
|
||||
/* Just print the address in hex. This is included for completeness even
|
||||
though both GDB and objdump provide their own (to print symbolic
|
||||
addresses). */
|
||||
extern void generic_print_address
|
||||
(bfd_vma, struct disassemble_info *);
|
||||
|
||||
/* Always true. */
|
||||
extern int generic_symbol_at_address
|
||||
(bfd_vma, struct disassemble_info *);
|
||||
|
||||
/* Also always true. */
|
||||
extern bfd_boolean generic_symbol_is_valid
|
||||
(asymbol *, struct disassemble_info *);
|
||||
|
||||
/* Method to initialize a disassemble_info struct. This should be
|
||||
called by all applications creating such a struct. */
|
||||
extern void init_disassemble_info (struct disassemble_info *dinfo, void *stream,
|
||||
fprintf_ftype fprintf_func);
|
||||
|
||||
/* For compatibility with existing code. */
|
||||
#define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \
|
||||
init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC))
|
||||
#define INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC) \
|
||||
init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC))
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ! defined (DIS_ASM_H) */
|
713
include/dwarf2.def
Normal file
713
include/dwarf2.def
Normal file
@ -0,0 +1,713 @@
|
||||
/* -*- c -*-
|
||||
Declarations and definitions of codes relating to the DWARF2 and
|
||||
DWARF3 symbolic debugging information formats.
|
||||
Copyright (C) 1992-2015 Free Software Foundation, Inc.
|
||||
|
||||
Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
|
||||
Office (AJPO), Florida State University and Silicon Graphics Inc.
|
||||
provided support for this effort -- June 21, 1995.
|
||||
|
||||
Derived from the DWARF 1 implementation written by Ron Guilmette
|
||||
(rfg@netcom.com), November 1990.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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, or (at your option) any later
|
||||
version.
|
||||
|
||||
GCC 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.
|
||||
|
||||
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/>. */
|
||||
|
||||
/* This file is derived from the DWARF specification (a public document)
|
||||
Revision 2.0.0 (July 27, 1993) developed by the UNIX International
|
||||
Programming Languages Special Interest Group (UI/PLSIG) and distributed
|
||||
by UNIX International. Copies of this specification are available from
|
||||
UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
|
||||
|
||||
This file also now contains definitions from the DWARF 3 specification
|
||||
published Dec 20, 2005, available from: http://dwarf.freestandards.org.
|
||||
|
||||
This file also now contains definitions from the DWARF 4
|
||||
specification, available from: http://dwarfstd.org/ */
|
||||
|
||||
/* This file declares various DWARF-related constants using a set of
|
||||
macros which can be redefined by the including file.
|
||||
|
||||
The macros are in sections. Each section corresponds to a single
|
||||
set of DWARF constants and has a corresponding key. The key is
|
||||
used in all the macro names.
|
||||
|
||||
The sections are TAG (for DW_TAG_ constants), FORM (DW_FORM_), AT
|
||||
(DW_AT_), OP (DW_OP_), ATE (DW_ATE_), and CFA (DW_CFA_).
|
||||
|
||||
Using TAG as an example, the following macros may be used for each
|
||||
key:
|
||||
|
||||
DW_FIRST_TAG(name, value) - Introduce the first DW_TAG constant.
|
||||
|
||||
DW_TAG(name, value) - Define a subsequent constant.
|
||||
|
||||
DW_TAG_DUP(name, value) - Define a subsequent constant whose value
|
||||
is a duplicate of some other constant. Not all keys use the _DUP
|
||||
macro form. If more than one name shares a value, then the base
|
||||
(DW_TAG) form will be the preferred name and DW_TAG_DUP will hold
|
||||
any alternate names.
|
||||
|
||||
DW_END_TAG - Invoked at the end of the DW_TAG constants. */
|
||||
|
||||
DW_FIRST_TAG (DW_TAG_padding, 0x00)
|
||||
DW_TAG (DW_TAG_array_type, 0x01)
|
||||
DW_TAG (DW_TAG_class_type, 0x02)
|
||||
DW_TAG (DW_TAG_entry_point, 0x03)
|
||||
DW_TAG (DW_TAG_enumeration_type, 0x04)
|
||||
DW_TAG (DW_TAG_formal_parameter, 0x05)
|
||||
DW_TAG (DW_TAG_imported_declaration, 0x08)
|
||||
DW_TAG (DW_TAG_label, 0x0a)
|
||||
DW_TAG (DW_TAG_lexical_block, 0x0b)
|
||||
DW_TAG (DW_TAG_member, 0x0d)
|
||||
DW_TAG (DW_TAG_pointer_type, 0x0f)
|
||||
DW_TAG (DW_TAG_reference_type, 0x10)
|
||||
DW_TAG (DW_TAG_compile_unit, 0x11)
|
||||
DW_TAG (DW_TAG_string_type, 0x12)
|
||||
DW_TAG (DW_TAG_structure_type, 0x13)
|
||||
DW_TAG (DW_TAG_subroutine_type, 0x15)
|
||||
DW_TAG (DW_TAG_typedef, 0x16)
|
||||
DW_TAG (DW_TAG_union_type, 0x17)
|
||||
DW_TAG (DW_TAG_unspecified_parameters, 0x18)
|
||||
DW_TAG (DW_TAG_variant, 0x19)
|
||||
DW_TAG (DW_TAG_common_block, 0x1a)
|
||||
DW_TAG (DW_TAG_common_inclusion, 0x1b)
|
||||
DW_TAG (DW_TAG_inheritance, 0x1c)
|
||||
DW_TAG (DW_TAG_inlined_subroutine, 0x1d)
|
||||
DW_TAG (DW_TAG_module, 0x1e)
|
||||
DW_TAG (DW_TAG_ptr_to_member_type, 0x1f)
|
||||
DW_TAG (DW_TAG_set_type, 0x20)
|
||||
DW_TAG (DW_TAG_subrange_type, 0x21)
|
||||
DW_TAG (DW_TAG_with_stmt, 0x22)
|
||||
DW_TAG (DW_TAG_access_declaration, 0x23)
|
||||
DW_TAG (DW_TAG_base_type, 0x24)
|
||||
DW_TAG (DW_TAG_catch_block, 0x25)
|
||||
DW_TAG (DW_TAG_const_type, 0x26)
|
||||
DW_TAG (DW_TAG_constant, 0x27)
|
||||
DW_TAG (DW_TAG_enumerator, 0x28)
|
||||
DW_TAG (DW_TAG_file_type, 0x29)
|
||||
DW_TAG (DW_TAG_friend, 0x2a)
|
||||
DW_TAG (DW_TAG_namelist, 0x2b)
|
||||
DW_TAG (DW_TAG_namelist_item, 0x2c)
|
||||
DW_TAG (DW_TAG_packed_type, 0x2d)
|
||||
DW_TAG (DW_TAG_subprogram, 0x2e)
|
||||
DW_TAG (DW_TAG_template_type_param, 0x2f)
|
||||
DW_TAG (DW_TAG_template_value_param, 0x30)
|
||||
DW_TAG (DW_TAG_thrown_type, 0x31)
|
||||
DW_TAG (DW_TAG_try_block, 0x32)
|
||||
DW_TAG (DW_TAG_variant_part, 0x33)
|
||||
DW_TAG (DW_TAG_variable, 0x34)
|
||||
DW_TAG (DW_TAG_volatile_type, 0x35)
|
||||
/* DWARF 3. */
|
||||
DW_TAG (DW_TAG_dwarf_procedure, 0x36)
|
||||
DW_TAG (DW_TAG_restrict_type, 0x37)
|
||||
DW_TAG (DW_TAG_interface_type, 0x38)
|
||||
DW_TAG (DW_TAG_namespace, 0x39)
|
||||
DW_TAG (DW_TAG_imported_module, 0x3a)
|
||||
DW_TAG (DW_TAG_unspecified_type, 0x3b)
|
||||
DW_TAG (DW_TAG_partial_unit, 0x3c)
|
||||
DW_TAG (DW_TAG_imported_unit, 0x3d)
|
||||
DW_TAG (DW_TAG_condition, 0x3f)
|
||||
DW_TAG (DW_TAG_shared_type, 0x40)
|
||||
/* DWARF 4. */
|
||||
DW_TAG (DW_TAG_type_unit, 0x41)
|
||||
DW_TAG (DW_TAG_rvalue_reference_type, 0x42)
|
||||
DW_TAG (DW_TAG_template_alias, 0x43)
|
||||
/* DWARF 5. */
|
||||
DW_TAG (DW_TAG_atomic_type, 0x47)
|
||||
|
||||
DW_TAG_DUP (DW_TAG_lo_user, 0x4080)
|
||||
DW_TAG_DUP (DW_TAG_hi_user, 0xffff)
|
||||
|
||||
/* SGI/MIPS Extensions. */
|
||||
DW_TAG (DW_TAG_MIPS_loop, 0x4081)
|
||||
|
||||
/* HP extensions. See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz . */
|
||||
DW_TAG (DW_TAG_HP_array_descriptor, 0x4090)
|
||||
DW_TAG (DW_TAG_HP_Bliss_field, 0x4091)
|
||||
DW_TAG (DW_TAG_HP_Bliss_field_set, 0x4092)
|
||||
|
||||
/* GNU extensions. */
|
||||
DW_TAG (DW_TAG_format_label, 0x4101) /* For FORTRAN 77 and Fortran 90. */
|
||||
DW_TAG (DW_TAG_function_template, 0x4102) /* For C++. */
|
||||
DW_TAG (DW_TAG_class_template, 0x4103) /* For C++. */
|
||||
DW_TAG (DW_TAG_GNU_BINCL, 0x4104)
|
||||
DW_TAG (DW_TAG_GNU_EINCL, 0x4105)
|
||||
/* Template template parameter.
|
||||
See http://gcc.gnu.org/wiki/TemplateParmsDwarf . */
|
||||
DW_TAG (DW_TAG_GNU_template_template_param, 0x4106)
|
||||
|
||||
/* Template parameter pack extension, specified at
|
||||
http://wiki.dwarfstd.org/index.php?title=C%2B%2B0x:_Variadic_templates
|
||||
The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
|
||||
are properly part of DWARF 5. */
|
||||
DW_TAG (DW_TAG_GNU_template_parameter_pack, 0x4107)
|
||||
DW_TAG (DW_TAG_GNU_formal_parameter_pack, 0x4108)
|
||||
/* The GNU call site extension, specified at
|
||||
http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open .
|
||||
The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
|
||||
are properly part of DWARF 5. */
|
||||
DW_TAG (DW_TAG_GNU_call_site, 0x4109)
|
||||
DW_TAG (DW_TAG_GNU_call_site_parameter, 0x410a)
|
||||
/* Extensions for UPC. See: http://dwarfstd.org/doc/DWARF4.pdf. */
|
||||
DW_TAG (DW_TAG_upc_shared_type, 0x8765)
|
||||
DW_TAG (DW_TAG_upc_strict_type, 0x8766)
|
||||
DW_TAG (DW_TAG_upc_relaxed_type, 0x8767)
|
||||
/* PGI (STMicroelectronics) extensions. No documentation available. */
|
||||
DW_TAG (DW_TAG_PGI_kanji_type, 0xA000)
|
||||
DW_TAG (DW_TAG_PGI_interface_block, 0xA020)
|
||||
DW_END_TAG
|
||||
|
||||
DW_FIRST_FORM (DW_FORM_addr, 0x01)
|
||||
DW_FORM (DW_FORM_block2, 0x03)
|
||||
DW_FORM (DW_FORM_block4, 0x04)
|
||||
DW_FORM (DW_FORM_data2, 0x05)
|
||||
DW_FORM (DW_FORM_data4, 0x06)
|
||||
DW_FORM (DW_FORM_data8, 0x07)
|
||||
DW_FORM (DW_FORM_string, 0x08)
|
||||
DW_FORM (DW_FORM_block, 0x09)
|
||||
DW_FORM (DW_FORM_block1, 0x0a)
|
||||
DW_FORM (DW_FORM_data1, 0x0b)
|
||||
DW_FORM (DW_FORM_flag, 0x0c)
|
||||
DW_FORM (DW_FORM_sdata, 0x0d)
|
||||
DW_FORM (DW_FORM_strp, 0x0e)
|
||||
DW_FORM (DW_FORM_udata, 0x0f)
|
||||
DW_FORM (DW_FORM_ref_addr, 0x10)
|
||||
DW_FORM (DW_FORM_ref1, 0x11)
|
||||
DW_FORM (DW_FORM_ref2, 0x12)
|
||||
DW_FORM (DW_FORM_ref4, 0x13)
|
||||
DW_FORM (DW_FORM_ref8, 0x14)
|
||||
DW_FORM (DW_FORM_ref_udata, 0x15)
|
||||
DW_FORM (DW_FORM_indirect, 0x16)
|
||||
/* DWARF 4. */
|
||||
DW_FORM (DW_FORM_sec_offset, 0x17)
|
||||
DW_FORM (DW_FORM_exprloc, 0x18)
|
||||
DW_FORM (DW_FORM_flag_present, 0x19)
|
||||
DW_FORM (DW_FORM_ref_sig8, 0x20)
|
||||
/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
|
||||
DW_FORM (DW_FORM_GNU_addr_index, 0x1f01)
|
||||
DW_FORM (DW_FORM_GNU_str_index, 0x1f02)
|
||||
/* Extensions for DWZ multifile.
|
||||
See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open . */
|
||||
DW_FORM (DW_FORM_GNU_ref_alt, 0x1f20)
|
||||
DW_FORM (DW_FORM_GNU_strp_alt, 0x1f21)
|
||||
DW_END_FORM
|
||||
|
||||
DW_FIRST_AT (DW_AT_sibling, 0x01)
|
||||
DW_AT (DW_AT_location, 0x02)
|
||||
DW_AT (DW_AT_name, 0x03)
|
||||
DW_AT (DW_AT_ordering, 0x09)
|
||||
DW_AT (DW_AT_subscr_data, 0x0a)
|
||||
DW_AT (DW_AT_byte_size, 0x0b)
|
||||
DW_AT (DW_AT_bit_offset, 0x0c)
|
||||
DW_AT (DW_AT_bit_size, 0x0d)
|
||||
DW_AT (DW_AT_element_list, 0x0f)
|
||||
DW_AT (DW_AT_stmt_list, 0x10)
|
||||
DW_AT (DW_AT_low_pc, 0x11)
|
||||
DW_AT (DW_AT_high_pc, 0x12)
|
||||
DW_AT (DW_AT_language, 0x13)
|
||||
DW_AT (DW_AT_member, 0x14)
|
||||
DW_AT (DW_AT_discr, 0x15)
|
||||
DW_AT (DW_AT_discr_value, 0x16)
|
||||
DW_AT (DW_AT_visibility, 0x17)
|
||||
DW_AT (DW_AT_import, 0x18)
|
||||
DW_AT (DW_AT_string_length, 0x19)
|
||||
DW_AT (DW_AT_common_reference, 0x1a)
|
||||
DW_AT (DW_AT_comp_dir, 0x1b)
|
||||
DW_AT (DW_AT_const_value, 0x1c)
|
||||
DW_AT (DW_AT_containing_type, 0x1d)
|
||||
DW_AT (DW_AT_default_value, 0x1e)
|
||||
DW_AT (DW_AT_inline, 0x20)
|
||||
DW_AT (DW_AT_is_optional, 0x21)
|
||||
DW_AT (DW_AT_lower_bound, 0x22)
|
||||
DW_AT (DW_AT_producer, 0x25)
|
||||
DW_AT (DW_AT_prototyped, 0x27)
|
||||
DW_AT (DW_AT_return_addr, 0x2a)
|
||||
DW_AT (DW_AT_start_scope, 0x2c)
|
||||
DW_AT (DW_AT_bit_stride, 0x2e)
|
||||
DW_AT (DW_AT_upper_bound, 0x2f)
|
||||
DW_AT (DW_AT_abstract_origin, 0x31)
|
||||
DW_AT (DW_AT_accessibility, 0x32)
|
||||
DW_AT (DW_AT_address_class, 0x33)
|
||||
DW_AT (DW_AT_artificial, 0x34)
|
||||
DW_AT (DW_AT_base_types, 0x35)
|
||||
DW_AT (DW_AT_calling_convention, 0x36)
|
||||
DW_AT (DW_AT_count, 0x37)
|
||||
DW_AT (DW_AT_data_member_location, 0x38)
|
||||
DW_AT (DW_AT_decl_column, 0x39)
|
||||
DW_AT (DW_AT_decl_file, 0x3a)
|
||||
DW_AT (DW_AT_decl_line, 0x3b)
|
||||
DW_AT (DW_AT_declaration, 0x3c)
|
||||
DW_AT (DW_AT_discr_list, 0x3d)
|
||||
DW_AT (DW_AT_encoding, 0x3e)
|
||||
DW_AT (DW_AT_external, 0x3f)
|
||||
DW_AT (DW_AT_frame_base, 0x40)
|
||||
DW_AT (DW_AT_friend, 0x41)
|
||||
DW_AT (DW_AT_identifier_case, 0x42)
|
||||
DW_AT (DW_AT_macro_info, 0x43)
|
||||
DW_AT (DW_AT_namelist_items, 0x44)
|
||||
DW_AT (DW_AT_priority, 0x45)
|
||||
DW_AT (DW_AT_segment, 0x46)
|
||||
DW_AT (DW_AT_specification, 0x47)
|
||||
DW_AT (DW_AT_static_link, 0x48)
|
||||
DW_AT (DW_AT_type, 0x49)
|
||||
DW_AT (DW_AT_use_location, 0x4a)
|
||||
DW_AT (DW_AT_variable_parameter, 0x4b)
|
||||
DW_AT (DW_AT_virtuality, 0x4c)
|
||||
DW_AT (DW_AT_vtable_elem_location, 0x4d)
|
||||
/* DWARF 3 values. */
|
||||
DW_AT (DW_AT_allocated, 0x4e)
|
||||
DW_AT (DW_AT_associated, 0x4f)
|
||||
DW_AT (DW_AT_data_location, 0x50)
|
||||
DW_AT (DW_AT_byte_stride, 0x51)
|
||||
DW_AT (DW_AT_entry_pc, 0x52)
|
||||
DW_AT (DW_AT_use_UTF8, 0x53)
|
||||
DW_AT (DW_AT_extension, 0x54)
|
||||
DW_AT (DW_AT_ranges, 0x55)
|
||||
DW_AT (DW_AT_trampoline, 0x56)
|
||||
DW_AT (DW_AT_call_column, 0x57)
|
||||
DW_AT (DW_AT_call_file, 0x58)
|
||||
DW_AT (DW_AT_call_line, 0x59)
|
||||
DW_AT (DW_AT_description, 0x5a)
|
||||
DW_AT (DW_AT_binary_scale, 0x5b)
|
||||
DW_AT (DW_AT_decimal_scale, 0x5c)
|
||||
DW_AT (DW_AT_small, 0x5d)
|
||||
DW_AT (DW_AT_decimal_sign, 0x5e)
|
||||
DW_AT (DW_AT_digit_count, 0x5f)
|
||||
DW_AT (DW_AT_picture_string, 0x60)
|
||||
DW_AT (DW_AT_mutable, 0x61)
|
||||
DW_AT (DW_AT_threads_scaled, 0x62)
|
||||
DW_AT (DW_AT_explicit, 0x63)
|
||||
DW_AT (DW_AT_object_pointer, 0x64)
|
||||
DW_AT (DW_AT_endianity, 0x65)
|
||||
DW_AT (DW_AT_elemental, 0x66)
|
||||
DW_AT (DW_AT_pure, 0x67)
|
||||
DW_AT (DW_AT_recursive, 0x68)
|
||||
/* DWARF 4. */
|
||||
DW_AT (DW_AT_signature, 0x69)
|
||||
DW_AT (DW_AT_main_subprogram, 0x6a)
|
||||
DW_AT (DW_AT_data_bit_offset, 0x6b)
|
||||
DW_AT (DW_AT_const_expr, 0x6c)
|
||||
DW_AT (DW_AT_enum_class, 0x6d)
|
||||
DW_AT (DW_AT_linkage_name, 0x6e)
|
||||
/* DWARF 5. */
|
||||
DW_AT (DW_AT_noreturn, 0x87)
|
||||
|
||||
DW_AT_DUP (DW_AT_lo_user, 0x2000) /* Implementation-defined range start. */
|
||||
DW_AT_DUP (DW_AT_hi_user, 0x3fff) /* Implementation-defined range end. */
|
||||
|
||||
/* SGI/MIPS extensions. */
|
||||
DW_AT (DW_AT_MIPS_fde, 0x2001)
|
||||
DW_AT (DW_AT_MIPS_loop_begin, 0x2002)
|
||||
DW_AT (DW_AT_MIPS_tail_loop_begin, 0x2003)
|
||||
DW_AT (DW_AT_MIPS_epilog_begin, 0x2004)
|
||||
DW_AT (DW_AT_MIPS_loop_unroll_factor, 0x2005)
|
||||
DW_AT (DW_AT_MIPS_software_pipeline_depth, 0x2006)
|
||||
DW_AT (DW_AT_MIPS_linkage_name, 0x2007)
|
||||
DW_AT (DW_AT_MIPS_stride, 0x2008)
|
||||
DW_AT (DW_AT_MIPS_abstract_name, 0x2009)
|
||||
DW_AT (DW_AT_MIPS_clone_origin, 0x200a)
|
||||
DW_AT (DW_AT_MIPS_has_inlines, 0x200b)
|
||||
/* HP extensions. */
|
||||
DW_AT (DW_AT_HP_block_index, 0x2000)
|
||||
DW_AT_DUP (DW_AT_HP_unmodifiable, 0x2001) /* Same as DW_AT_MIPS_fde. */
|
||||
DW_AT_DUP (DW_AT_HP_prologue, 0x2005) /* Same as DW_AT_MIPS_loop_unroll. */
|
||||
DW_AT_DUP (DW_AT_HP_epilogue, 0x2008) /* Same as DW_AT_MIPS_stride. */
|
||||
DW_AT (DW_AT_HP_actuals_stmt_list, 0x2010)
|
||||
DW_AT (DW_AT_HP_proc_per_section, 0x2011)
|
||||
DW_AT (DW_AT_HP_raw_data_ptr, 0x2012)
|
||||
DW_AT (DW_AT_HP_pass_by_reference, 0x2013)
|
||||
DW_AT (DW_AT_HP_opt_level, 0x2014)
|
||||
DW_AT (DW_AT_HP_prof_version_id, 0x2015)
|
||||
DW_AT (DW_AT_HP_opt_flags, 0x2016)
|
||||
DW_AT (DW_AT_HP_cold_region_low_pc, 0x2017)
|
||||
DW_AT (DW_AT_HP_cold_region_high_pc, 0x2018)
|
||||
DW_AT (DW_AT_HP_all_variables_modifiable, 0x2019)
|
||||
DW_AT (DW_AT_HP_linkage_name, 0x201a)
|
||||
DW_AT (DW_AT_HP_prof_flags, 0x201b) /* In comp unit of procs_info for -g. */
|
||||
DW_AT (DW_AT_HP_unit_name, 0x201f)
|
||||
DW_AT (DW_AT_HP_unit_size, 0x2020)
|
||||
DW_AT (DW_AT_HP_widened_byte_size, 0x2021)
|
||||
DW_AT (DW_AT_HP_definition_points, 0x2022)
|
||||
DW_AT (DW_AT_HP_default_location, 0x2023)
|
||||
DW_AT (DW_AT_HP_is_result_param, 0x2029)
|
||||
|
||||
/* GNU extensions. */
|
||||
DW_AT (DW_AT_sf_names, 0x2101)
|
||||
DW_AT (DW_AT_src_info, 0x2102)
|
||||
DW_AT (DW_AT_mac_info, 0x2103)
|
||||
DW_AT (DW_AT_src_coords, 0x2104)
|
||||
DW_AT (DW_AT_body_begin, 0x2105)
|
||||
DW_AT (DW_AT_body_end, 0x2106)
|
||||
DW_AT (DW_AT_GNU_vector, 0x2107)
|
||||
/* Thread-safety annotations.
|
||||
See http://gcc.gnu.org/wiki/ThreadSafetyAnnotation . */
|
||||
DW_AT (DW_AT_GNU_guarded_by, 0x2108)
|
||||
DW_AT (DW_AT_GNU_pt_guarded_by, 0x2109)
|
||||
DW_AT (DW_AT_GNU_guarded, 0x210a)
|
||||
DW_AT (DW_AT_GNU_pt_guarded, 0x210b)
|
||||
DW_AT (DW_AT_GNU_locks_excluded, 0x210c)
|
||||
DW_AT (DW_AT_GNU_exclusive_locks_required, 0x210d)
|
||||
DW_AT (DW_AT_GNU_shared_locks_required, 0x210e)
|
||||
/* One-definition rule violation detection.
|
||||
See http://gcc.gnu.org/wiki/DwarfSeparateTypeInfo . */
|
||||
DW_AT (DW_AT_GNU_odr_signature, 0x210f)
|
||||
/* Template template argument name.
|
||||
See http://gcc.gnu.org/wiki/TemplateParmsDwarf . */
|
||||
DW_AT (DW_AT_GNU_template_name, 0x2110)
|
||||
/* The GNU call site extension.
|
||||
See http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open . */
|
||||
DW_AT (DW_AT_GNU_call_site_value, 0x2111)
|
||||
DW_AT (DW_AT_GNU_call_site_data_value, 0x2112)
|
||||
DW_AT (DW_AT_GNU_call_site_target, 0x2113)
|
||||
DW_AT (DW_AT_GNU_call_site_target_clobbered, 0x2114)
|
||||
DW_AT (DW_AT_GNU_tail_call, 0x2115)
|
||||
DW_AT (DW_AT_GNU_all_tail_call_sites, 0x2116)
|
||||
DW_AT (DW_AT_GNU_all_call_sites, 0x2117)
|
||||
DW_AT (DW_AT_GNU_all_source_call_sites, 0x2118)
|
||||
/* Section offset into .debug_macro section. */
|
||||
DW_AT (DW_AT_GNU_macros, 0x2119)
|
||||
/* Attribute for C++ deleted special member functions (= delete;). */
|
||||
DW_AT (DW_AT_GNU_deleted, 0x211a)
|
||||
/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
|
||||
DW_AT (DW_AT_GNU_dwo_name, 0x2130)
|
||||
DW_AT (DW_AT_GNU_dwo_id, 0x2131)
|
||||
DW_AT (DW_AT_GNU_ranges_base, 0x2132)
|
||||
DW_AT (DW_AT_GNU_addr_base, 0x2133)
|
||||
DW_AT (DW_AT_GNU_pubnames, 0x2134)
|
||||
DW_AT (DW_AT_GNU_pubtypes, 0x2135)
|
||||
/* Attribute for discriminator.
|
||||
See http://gcc.gnu.org/wiki/Discriminator */
|
||||
DW_AT (DW_AT_GNU_discriminator, 0x2136)
|
||||
/* VMS extensions. */
|
||||
DW_AT (DW_AT_VMS_rtnbeg_pd_address, 0x2201)
|
||||
/* GNAT extensions. */
|
||||
/* GNAT descriptive type.
|
||||
See http://gcc.gnu.org/wiki/DW_AT_GNAT_descriptive_type . */
|
||||
DW_AT (DW_AT_use_GNAT_descriptive_type, 0x2301)
|
||||
DW_AT (DW_AT_GNAT_descriptive_type, 0x2302)
|
||||
/* Rational constant extension.
|
||||
See https://gcc.gnu.org/wiki/DW_AT_GNU_numerator_denominator . */
|
||||
DW_TAG (DW_AT_GNU_numerator, 0x2303)
|
||||
DW_TAG (DW_AT_GNU_denominator, 0x2304)
|
||||
/* Biased integer extension.
|
||||
See https://gcc.gnu.org/wiki/DW_AT_GNU_bias . */
|
||||
DW_TAG (DW_AT_GNU_bias, 0x2305)
|
||||
/* UPC extension. */
|
||||
DW_AT (DW_AT_upc_threads_scaled, 0x3210)
|
||||
/* PGI (STMicroelectronics) extensions. */
|
||||
DW_AT (DW_AT_PGI_lbase, 0x3a00)
|
||||
DW_AT (DW_AT_PGI_soffset, 0x3a01)
|
||||
DW_AT (DW_AT_PGI_lstride, 0x3a02)
|
||||
/* Apple extensions. */
|
||||
DW_AT (DW_AT_APPLE_optimized, 0x3fe1)
|
||||
DW_AT (DW_AT_APPLE_flags, 0x3fe2)
|
||||
DW_AT (DW_AT_APPLE_isa, 0x3fe3)
|
||||
DW_AT (DW_AT_APPLE_block, 0x3fe4)
|
||||
DW_AT (DW_AT_APPLE_major_runtime_vers, 0x3fe5)
|
||||
DW_AT (DW_AT_APPLE_runtime_class, 0x3fe6)
|
||||
DW_AT (DW_AT_APPLE_omit_frame_ptr, 0x3fe7)
|
||||
DW_AT (DW_AT_APPLE_property_name, 0x3fe8)
|
||||
DW_AT (DW_AT_APPLE_property_getter, 0x3fe9)
|
||||
DW_AT (DW_AT_APPLE_property_setter, 0x3fea)
|
||||
DW_AT (DW_AT_APPLE_property_attribute, 0x3feb)
|
||||
DW_AT (DW_AT_APPLE_objc_complete_type, 0x3fec)
|
||||
DW_AT (DW_AT_APPLE_property, 0x3fed)
|
||||
DW_END_AT
|
||||
|
||||
DW_FIRST_OP (DW_OP_addr, 0x03)
|
||||
DW_OP (DW_OP_deref, 0x06)
|
||||
DW_OP (DW_OP_const1u, 0x08)
|
||||
DW_OP (DW_OP_const1s, 0x09)
|
||||
DW_OP (DW_OP_const2u, 0x0a)
|
||||
DW_OP (DW_OP_const2s, 0x0b)
|
||||
DW_OP (DW_OP_const4u, 0x0c)
|
||||
DW_OP (DW_OP_const4s, 0x0d)
|
||||
DW_OP (DW_OP_const8u, 0x0e)
|
||||
DW_OP (DW_OP_const8s, 0x0f)
|
||||
DW_OP (DW_OP_constu, 0x10)
|
||||
DW_OP (DW_OP_consts, 0x11)
|
||||
DW_OP (DW_OP_dup, 0x12)
|
||||
DW_OP (DW_OP_drop, 0x13)
|
||||
DW_OP (DW_OP_over, 0x14)
|
||||
DW_OP (DW_OP_pick, 0x15)
|
||||
DW_OP (DW_OP_swap, 0x16)
|
||||
DW_OP (DW_OP_rot, 0x17)
|
||||
DW_OP (DW_OP_xderef, 0x18)
|
||||
DW_OP (DW_OP_abs, 0x19)
|
||||
DW_OP (DW_OP_and, 0x1a)
|
||||
DW_OP (DW_OP_div, 0x1b)
|
||||
DW_OP (DW_OP_minus, 0x1c)
|
||||
DW_OP (DW_OP_mod, 0x1d)
|
||||
DW_OP (DW_OP_mul, 0x1e)
|
||||
DW_OP (DW_OP_neg, 0x1f)
|
||||
DW_OP (DW_OP_not, 0x20)
|
||||
DW_OP (DW_OP_or, 0x21)
|
||||
DW_OP (DW_OP_plus, 0x22)
|
||||
DW_OP (DW_OP_plus_uconst, 0x23)
|
||||
DW_OP (DW_OP_shl, 0x24)
|
||||
DW_OP (DW_OP_shr, 0x25)
|
||||
DW_OP (DW_OP_shra, 0x26)
|
||||
DW_OP (DW_OP_xor, 0x27)
|
||||
DW_OP (DW_OP_bra, 0x28)
|
||||
DW_OP (DW_OP_eq, 0x29)
|
||||
DW_OP (DW_OP_ge, 0x2a)
|
||||
DW_OP (DW_OP_gt, 0x2b)
|
||||
DW_OP (DW_OP_le, 0x2c)
|
||||
DW_OP (DW_OP_lt, 0x2d)
|
||||
DW_OP (DW_OP_ne, 0x2e)
|
||||
DW_OP (DW_OP_skip, 0x2f)
|
||||
DW_OP (DW_OP_lit0, 0x30)
|
||||
DW_OP (DW_OP_lit1, 0x31)
|
||||
DW_OP (DW_OP_lit2, 0x32)
|
||||
DW_OP (DW_OP_lit3, 0x33)
|
||||
DW_OP (DW_OP_lit4, 0x34)
|
||||
DW_OP (DW_OP_lit5, 0x35)
|
||||
DW_OP (DW_OP_lit6, 0x36)
|
||||
DW_OP (DW_OP_lit7, 0x37)
|
||||
DW_OP (DW_OP_lit8, 0x38)
|
||||
DW_OP (DW_OP_lit9, 0x39)
|
||||
DW_OP (DW_OP_lit10, 0x3a)
|
||||
DW_OP (DW_OP_lit11, 0x3b)
|
||||
DW_OP (DW_OP_lit12, 0x3c)
|
||||
DW_OP (DW_OP_lit13, 0x3d)
|
||||
DW_OP (DW_OP_lit14, 0x3e)
|
||||
DW_OP (DW_OP_lit15, 0x3f)
|
||||
DW_OP (DW_OP_lit16, 0x40)
|
||||
DW_OP (DW_OP_lit17, 0x41)
|
||||
DW_OP (DW_OP_lit18, 0x42)
|
||||
DW_OP (DW_OP_lit19, 0x43)
|
||||
DW_OP (DW_OP_lit20, 0x44)
|
||||
DW_OP (DW_OP_lit21, 0x45)
|
||||
DW_OP (DW_OP_lit22, 0x46)
|
||||
DW_OP (DW_OP_lit23, 0x47)
|
||||
DW_OP (DW_OP_lit24, 0x48)
|
||||
DW_OP (DW_OP_lit25, 0x49)
|
||||
DW_OP (DW_OP_lit26, 0x4a)
|
||||
DW_OP (DW_OP_lit27, 0x4b)
|
||||
DW_OP (DW_OP_lit28, 0x4c)
|
||||
DW_OP (DW_OP_lit29, 0x4d)
|
||||
DW_OP (DW_OP_lit30, 0x4e)
|
||||
DW_OP (DW_OP_lit31, 0x4f)
|
||||
DW_OP (DW_OP_reg0, 0x50)
|
||||
DW_OP (DW_OP_reg1, 0x51)
|
||||
DW_OP (DW_OP_reg2, 0x52)
|
||||
DW_OP (DW_OP_reg3, 0x53)
|
||||
DW_OP (DW_OP_reg4, 0x54)
|
||||
DW_OP (DW_OP_reg5, 0x55)
|
||||
DW_OP (DW_OP_reg6, 0x56)
|
||||
DW_OP (DW_OP_reg7, 0x57)
|
||||
DW_OP (DW_OP_reg8, 0x58)
|
||||
DW_OP (DW_OP_reg9, 0x59)
|
||||
DW_OP (DW_OP_reg10, 0x5a)
|
||||
DW_OP (DW_OP_reg11, 0x5b)
|
||||
DW_OP (DW_OP_reg12, 0x5c)
|
||||
DW_OP (DW_OP_reg13, 0x5d)
|
||||
DW_OP (DW_OP_reg14, 0x5e)
|
||||
DW_OP (DW_OP_reg15, 0x5f)
|
||||
DW_OP (DW_OP_reg16, 0x60)
|
||||
DW_OP (DW_OP_reg17, 0x61)
|
||||
DW_OP (DW_OP_reg18, 0x62)
|
||||
DW_OP (DW_OP_reg19, 0x63)
|
||||
DW_OP (DW_OP_reg20, 0x64)
|
||||
DW_OP (DW_OP_reg21, 0x65)
|
||||
DW_OP (DW_OP_reg22, 0x66)
|
||||
DW_OP (DW_OP_reg23, 0x67)
|
||||
DW_OP (DW_OP_reg24, 0x68)
|
||||
DW_OP (DW_OP_reg25, 0x69)
|
||||
DW_OP (DW_OP_reg26, 0x6a)
|
||||
DW_OP (DW_OP_reg27, 0x6b)
|
||||
DW_OP (DW_OP_reg28, 0x6c)
|
||||
DW_OP (DW_OP_reg29, 0x6d)
|
||||
DW_OP (DW_OP_reg30, 0x6e)
|
||||
DW_OP (DW_OP_reg31, 0x6f)
|
||||
DW_OP (DW_OP_breg0, 0x70)
|
||||
DW_OP (DW_OP_breg1, 0x71)
|
||||
DW_OP (DW_OP_breg2, 0x72)
|
||||
DW_OP (DW_OP_breg3, 0x73)
|
||||
DW_OP (DW_OP_breg4, 0x74)
|
||||
DW_OP (DW_OP_breg5, 0x75)
|
||||
DW_OP (DW_OP_breg6, 0x76)
|
||||
DW_OP (DW_OP_breg7, 0x77)
|
||||
DW_OP (DW_OP_breg8, 0x78)
|
||||
DW_OP (DW_OP_breg9, 0x79)
|
||||
DW_OP (DW_OP_breg10, 0x7a)
|
||||
DW_OP (DW_OP_breg11, 0x7b)
|
||||
DW_OP (DW_OP_breg12, 0x7c)
|
||||
DW_OP (DW_OP_breg13, 0x7d)
|
||||
DW_OP (DW_OP_breg14, 0x7e)
|
||||
DW_OP (DW_OP_breg15, 0x7f)
|
||||
DW_OP (DW_OP_breg16, 0x80)
|
||||
DW_OP (DW_OP_breg17, 0x81)
|
||||
DW_OP (DW_OP_breg18, 0x82)
|
||||
DW_OP (DW_OP_breg19, 0x83)
|
||||
DW_OP (DW_OP_breg20, 0x84)
|
||||
DW_OP (DW_OP_breg21, 0x85)
|
||||
DW_OP (DW_OP_breg22, 0x86)
|
||||
DW_OP (DW_OP_breg23, 0x87)
|
||||
DW_OP (DW_OP_breg24, 0x88)
|
||||
DW_OP (DW_OP_breg25, 0x89)
|
||||
DW_OP (DW_OP_breg26, 0x8a)
|
||||
DW_OP (DW_OP_breg27, 0x8b)
|
||||
DW_OP (DW_OP_breg28, 0x8c)
|
||||
DW_OP (DW_OP_breg29, 0x8d)
|
||||
DW_OP (DW_OP_breg30, 0x8e)
|
||||
DW_OP (DW_OP_breg31, 0x8f)
|
||||
DW_OP (DW_OP_regx, 0x90)
|
||||
DW_OP (DW_OP_fbreg, 0x91)
|
||||
DW_OP (DW_OP_bregx, 0x92)
|
||||
DW_OP (DW_OP_piece, 0x93)
|
||||
DW_OP (DW_OP_deref_size, 0x94)
|
||||
DW_OP (DW_OP_xderef_size, 0x95)
|
||||
DW_OP (DW_OP_nop, 0x96)
|
||||
/* DWARF 3 extensions. */
|
||||
DW_OP (DW_OP_push_object_address, 0x97)
|
||||
DW_OP (DW_OP_call2, 0x98)
|
||||
DW_OP (DW_OP_call4, 0x99)
|
||||
DW_OP (DW_OP_call_ref, 0x9a)
|
||||
DW_OP (DW_OP_form_tls_address, 0x9b)
|
||||
DW_OP (DW_OP_call_frame_cfa, 0x9c)
|
||||
DW_OP (DW_OP_bit_piece, 0x9d)
|
||||
|
||||
/* DWARF 4 extensions. */
|
||||
DW_OP (DW_OP_implicit_value, 0x9e)
|
||||
DW_OP (DW_OP_stack_value, 0x9f)
|
||||
|
||||
DW_OP_DUP (DW_OP_lo_user, 0xe0) /* Implementation-defined range start. */
|
||||
DW_OP_DUP (DW_OP_hi_user, 0xff) /* Implementation-defined range end. */
|
||||
|
||||
/* GNU extensions. */
|
||||
DW_OP (DW_OP_GNU_push_tls_address, 0xe0)
|
||||
/* The following is for marking variables that are uninitialized. */
|
||||
DW_OP (DW_OP_GNU_uninit, 0xf0)
|
||||
DW_OP (DW_OP_GNU_encoded_addr, 0xf1)
|
||||
/* The GNU implicit pointer extension.
|
||||
See http://www.dwarfstd.org/ShowIssue.php?issue=100831.1&type=open . */
|
||||
DW_OP (DW_OP_GNU_implicit_pointer, 0xf2)
|
||||
/* The GNU entry value extension.
|
||||
See http://www.dwarfstd.org/ShowIssue.php?issue=100909.1&type=open . */
|
||||
DW_OP (DW_OP_GNU_entry_value, 0xf3)
|
||||
/* The GNU typed stack extension.
|
||||
See http://www.dwarfstd.org/doc/040408.1.html . */
|
||||
DW_OP (DW_OP_GNU_const_type, 0xf4)
|
||||
DW_OP (DW_OP_GNU_regval_type, 0xf5)
|
||||
DW_OP (DW_OP_GNU_deref_type, 0xf6)
|
||||
DW_OP (DW_OP_GNU_convert, 0xf7)
|
||||
DW_OP (DW_OP_GNU_reinterpret, 0xf9)
|
||||
/* The GNU parameter ref extension. */
|
||||
DW_OP (DW_OP_GNU_parameter_ref, 0xfa)
|
||||
/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
|
||||
DW_OP (DW_OP_GNU_addr_index, 0xfb)
|
||||
DW_OP (DW_OP_GNU_const_index, 0xfc)
|
||||
/* HP extensions. */
|
||||
DW_OP_DUP (DW_OP_HP_unknown, 0xe0) /* Ouch, the same as GNU_push_tls_address. */
|
||||
DW_OP (DW_OP_HP_is_value, 0xe1)
|
||||
DW_OP (DW_OP_HP_fltconst4, 0xe2)
|
||||
DW_OP (DW_OP_HP_fltconst8, 0xe3)
|
||||
DW_OP (DW_OP_HP_mod_range, 0xe4)
|
||||
DW_OP (DW_OP_HP_unmod_range, 0xe5)
|
||||
DW_OP (DW_OP_HP_tls, 0xe6)
|
||||
/* PGI (STMicroelectronics) extensions. */
|
||||
DW_OP (DW_OP_PGI_omp_thread_num, 0xf8)
|
||||
DW_END_OP
|
||||
|
||||
DW_FIRST_ATE (DW_ATE_void, 0x0)
|
||||
DW_ATE (DW_ATE_address, 0x1)
|
||||
DW_ATE (DW_ATE_boolean, 0x2)
|
||||
DW_ATE (DW_ATE_complex_float, 0x3)
|
||||
DW_ATE (DW_ATE_float, 0x4)
|
||||
DW_ATE (DW_ATE_signed, 0x5)
|
||||
DW_ATE (DW_ATE_signed_char, 0x6)
|
||||
DW_ATE (DW_ATE_unsigned, 0x7)
|
||||
DW_ATE (DW_ATE_unsigned_char, 0x8)
|
||||
/* DWARF 3. */
|
||||
DW_ATE (DW_ATE_imaginary_float, 0x9)
|
||||
DW_ATE (DW_ATE_packed_decimal, 0xa)
|
||||
DW_ATE (DW_ATE_numeric_string, 0xb)
|
||||
DW_ATE (DW_ATE_edited, 0xc)
|
||||
DW_ATE (DW_ATE_signed_fixed, 0xd)
|
||||
DW_ATE (DW_ATE_unsigned_fixed, 0xe)
|
||||
DW_ATE (DW_ATE_decimal_float, 0xf)
|
||||
/* DWARF 4. */
|
||||
DW_ATE (DW_ATE_UTF, 0x10)
|
||||
|
||||
DW_ATE_DUP (DW_ATE_lo_user, 0x80)
|
||||
DW_ATE_DUP (DW_ATE_hi_user, 0xff)
|
||||
|
||||
/* HP extensions. */
|
||||
DW_ATE (DW_ATE_HP_float80, 0x80) /* Floating-point (80 bit). */
|
||||
DW_ATE (DW_ATE_HP_complex_float80, 0x81) /* Complex floating-point (80 bit). */
|
||||
DW_ATE (DW_ATE_HP_float128, 0x82) /* Floating-point (128 bit). */
|
||||
DW_ATE (DW_ATE_HP_complex_float128, 0x83) /* Complex fp (128 bit). */
|
||||
DW_ATE (DW_ATE_HP_floathpintel, 0x84) /* Floating-point (82 bit IA64). */
|
||||
DW_ATE (DW_ATE_HP_imaginary_float80, 0x85)
|
||||
DW_ATE (DW_ATE_HP_imaginary_float128, 0x86)
|
||||
DW_ATE (DW_ATE_HP_VAX_float, 0x88) /* F or G floating. */
|
||||
DW_ATE (DW_ATE_HP_VAX_float_d, 0x89) /* D floating. */
|
||||
DW_ATE (DW_ATE_HP_packed_decimal, 0x8a) /* Cobol. */
|
||||
DW_ATE (DW_ATE_HP_zoned_decimal, 0x8b) /* Cobol. */
|
||||
DW_ATE (DW_ATE_HP_edited, 0x8c) /* Cobol. */
|
||||
DW_ATE (DW_ATE_HP_signed_fixed, 0x8d) /* Cobol. */
|
||||
DW_ATE (DW_ATE_HP_unsigned_fixed, 0x8e) /* Cobol. */
|
||||
DW_ATE (DW_ATE_HP_VAX_complex_float, 0x8f) /* F or G floating complex. */
|
||||
DW_ATE (DW_ATE_HP_VAX_complex_float_d, 0x90) /* D floating complex. */
|
||||
|
||||
DW_END_ATE
|
||||
|
||||
DW_FIRST_CFA (DW_CFA_advance_loc, 0x40)
|
||||
DW_CFA (DW_CFA_offset, 0x80)
|
||||
DW_CFA (DW_CFA_restore, 0xc0)
|
||||
DW_CFA (DW_CFA_nop, 0x00)
|
||||
DW_CFA (DW_CFA_set_loc, 0x01)
|
||||
DW_CFA (DW_CFA_advance_loc1, 0x02)
|
||||
DW_CFA (DW_CFA_advance_loc2, 0x03)
|
||||
DW_CFA (DW_CFA_advance_loc4, 0x04)
|
||||
DW_CFA (DW_CFA_offset_extended, 0x05)
|
||||
DW_CFA (DW_CFA_restore_extended, 0x06)
|
||||
DW_CFA (DW_CFA_undefined, 0x07)
|
||||
DW_CFA (DW_CFA_same_value, 0x08)
|
||||
DW_CFA (DW_CFA_register, 0x09)
|
||||
DW_CFA (DW_CFA_remember_state, 0x0a)
|
||||
DW_CFA (DW_CFA_restore_state, 0x0b)
|
||||
DW_CFA (DW_CFA_def_cfa, 0x0c)
|
||||
DW_CFA (DW_CFA_def_cfa_register, 0x0d)
|
||||
DW_CFA (DW_CFA_def_cfa_offset, 0x0e)
|
||||
/* DWARF 3. */
|
||||
DW_CFA (DW_CFA_def_cfa_expression, 0x0f)
|
||||
DW_CFA (DW_CFA_expression, 0x10)
|
||||
DW_CFA (DW_CFA_offset_extended_sf, 0x11)
|
||||
DW_CFA (DW_CFA_def_cfa_sf, 0x12)
|
||||
DW_CFA (DW_CFA_def_cfa_offset_sf, 0x13)
|
||||
DW_CFA (DW_CFA_val_offset, 0x14)
|
||||
DW_CFA (DW_CFA_val_offset_sf, 0x15)
|
||||
DW_CFA (DW_CFA_val_expression, 0x16)
|
||||
|
||||
DW_CFA (DW_CFA_lo_user, 0x1c)
|
||||
DW_CFA (DW_CFA_hi_user, 0x3f)
|
||||
|
||||
/* SGI/MIPS specific. */
|
||||
DW_CFA (DW_CFA_MIPS_advance_loc8, 0x1d)
|
||||
/* GNU extensions. */
|
||||
DW_CFA (DW_CFA_GNU_window_save, 0x2d)
|
||||
DW_CFA (DW_CFA_GNU_args_size, 0x2e)
|
||||
DW_CFA (DW_CFA_GNU_negative_offset_extended, 0x2f)
|
||||
|
||||
DW_END_CFA
|
434
include/dwarf2.h
Normal file
434
include/dwarf2.h
Normal file
@ -0,0 +1,434 @@
|
||||
/* Declarations and definitions of codes relating to the DWARF2 and
|
||||
DWARF3 symbolic debugging information formats.
|
||||
Copyright (C) 1992-2016 Free Software Foundation, Inc.
|
||||
|
||||
Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
|
||||
Office (AJPO), Florida State University and Silicon Graphics Inc.
|
||||
provided support for this effort -- June 21, 1995.
|
||||
|
||||
Derived from the DWARF 1 implementation written by Ron Guilmette
|
||||
(rfg@netcom.com), November 1990.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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, or (at your option) any later
|
||||
version.
|
||||
|
||||
GCC 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.
|
||||
|
||||
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/>. */
|
||||
|
||||
/* This file is derived from the DWARF specification (a public document)
|
||||
Revision 2.0.0 (July 27, 1993) developed by the UNIX International
|
||||
Programming Languages Special Interest Group (UI/PLSIG) and distributed
|
||||
by UNIX International. Copies of this specification are available from
|
||||
UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
|
||||
|
||||
This file also now contains definitions from the DWARF 3 specification
|
||||
published Dec 20, 2005, available from: http://dwarf.freestandards.org. */
|
||||
|
||||
#ifndef _DWARF2_H
|
||||
#define _DWARF2_H
|
||||
|
||||
#define DW_TAG(name, value) , name = value
|
||||
#define DW_TAG_DUP(name, value) , name = value
|
||||
#define DW_FORM(name, value) , name = value
|
||||
#define DW_AT(name, value) , name = value
|
||||
#define DW_AT_DUP(name, value) , name = value
|
||||
#define DW_OP(name, value) , name = value
|
||||
#define DW_OP_DUP(name, value) , name = value
|
||||
#define DW_ATE(name, value) , name = value
|
||||
#define DW_ATE_DUP(name, value) , name = value
|
||||
#define DW_CFA(name, value) , name = value
|
||||
|
||||
#define DW_FIRST_TAG(name, value) enum dwarf_tag { \
|
||||
name = value
|
||||
#define DW_END_TAG };
|
||||
#define DW_FIRST_FORM(name, value) enum dwarf_form { \
|
||||
name = value
|
||||
#define DW_END_FORM };
|
||||
#define DW_FIRST_AT(name, value) enum dwarf_attribute { \
|
||||
name = value
|
||||
#define DW_END_AT };
|
||||
#define DW_FIRST_OP(name, value) enum dwarf_location_atom { \
|
||||
name = value
|
||||
#define DW_END_OP };
|
||||
#define DW_FIRST_ATE(name, value) enum dwarf_type { \
|
||||
name = value
|
||||
#define DW_END_ATE };
|
||||
#define DW_FIRST_CFA(name, value) enum dwarf_call_frame_info { \
|
||||
name = value
|
||||
#define DW_END_CFA };
|
||||
|
||||
#include "dwarf2.def"
|
||||
|
||||
#undef DW_FIRST_TAG
|
||||
#undef DW_END_TAG
|
||||
#undef DW_FIRST_FORM
|
||||
#undef DW_END_FORM
|
||||
#undef DW_FIRST_AT
|
||||
#undef DW_END_AT
|
||||
#undef DW_FIRST_OP
|
||||
#undef DW_END_OP
|
||||
#undef DW_FIRST_ATE
|
||||
#undef DW_END_ATE
|
||||
#undef DW_FIRST_CFA
|
||||
#undef DW_END_CFA
|
||||
|
||||
#undef DW_TAG
|
||||
#undef DW_TAG_DUP
|
||||
#undef DW_FORM
|
||||
#undef DW_AT
|
||||
#undef DW_AT_DUP
|
||||
#undef DW_OP
|
||||
#undef DW_OP_DUP
|
||||
#undef DW_ATE
|
||||
#undef DW_ATE_DUP
|
||||
#undef DW_CFA
|
||||
|
||||
/* Flag that tells whether entry has a child or not. */
|
||||
#define DW_children_no 0
|
||||
#define DW_children_yes 1
|
||||
|
||||
#define DW_AT_stride_size DW_AT_bit_stride /* Note: The use of DW_AT_stride_size is deprecated. */
|
||||
#define DW_AT_stride DW_AT_byte_stride /* Note: The use of DW_AT_stride is deprecated. */
|
||||
|
||||
/* Decimal sign encodings. */
|
||||
enum dwarf_decimal_sign_encoding
|
||||
{
|
||||
/* DWARF 3. */
|
||||
DW_DS_unsigned = 0x01,
|
||||
DW_DS_leading_overpunch = 0x02,
|
||||
DW_DS_trailing_overpunch = 0x03,
|
||||
DW_DS_leading_separate = 0x04,
|
||||
DW_DS_trailing_separate = 0x05
|
||||
};
|
||||
|
||||
/* Endianity encodings. */
|
||||
enum dwarf_endianity_encoding
|
||||
{
|
||||
/* DWARF 3. */
|
||||
DW_END_default = 0x00,
|
||||
DW_END_big = 0x01,
|
||||
DW_END_little = 0x02,
|
||||
|
||||
DW_END_lo_user = 0x40,
|
||||
DW_END_hi_user = 0xff
|
||||
};
|
||||
|
||||
/* Array ordering names and codes. */
|
||||
enum dwarf_array_dim_ordering
|
||||
{
|
||||
DW_ORD_row_major = 0,
|
||||
DW_ORD_col_major = 1
|
||||
};
|
||||
|
||||
/* Access attribute. */
|
||||
enum dwarf_access_attribute
|
||||
{
|
||||
DW_ACCESS_public = 1,
|
||||
DW_ACCESS_protected = 2,
|
||||
DW_ACCESS_private = 3
|
||||
};
|
||||
|
||||
/* Visibility. */
|
||||
enum dwarf_visibility_attribute
|
||||
{
|
||||
DW_VIS_local = 1,
|
||||
DW_VIS_exported = 2,
|
||||
DW_VIS_qualified = 3
|
||||
};
|
||||
|
||||
/* Virtuality. */
|
||||
enum dwarf_virtuality_attribute
|
||||
{
|
||||
DW_VIRTUALITY_none = 0,
|
||||
DW_VIRTUALITY_virtual = 1,
|
||||
DW_VIRTUALITY_pure_virtual = 2
|
||||
};
|
||||
|
||||
/* Case sensitivity. */
|
||||
enum dwarf_id_case
|
||||
{
|
||||
DW_ID_case_sensitive = 0,
|
||||
DW_ID_up_case = 1,
|
||||
DW_ID_down_case = 2,
|
||||
DW_ID_case_insensitive = 3
|
||||
};
|
||||
|
||||
/* Calling convention. */
|
||||
enum dwarf_calling_convention
|
||||
{
|
||||
DW_CC_normal = 0x1,
|
||||
DW_CC_program = 0x2,
|
||||
DW_CC_nocall = 0x3,
|
||||
|
||||
DW_CC_lo_user = 0x40,
|
||||
DW_CC_hi_user = 0xff,
|
||||
|
||||
DW_CC_GNU_renesas_sh = 0x40,
|
||||
DW_CC_GNU_borland_fastcall_i386 = 0x41,
|
||||
|
||||
/* This DW_CC_ value is not currently generated by any toolchain. It is
|
||||
used internally to GDB to indicate OpenCL C functions that have been
|
||||
compiled with the IBM XL C for OpenCL compiler and use a non-platform
|
||||
calling convention for passing OpenCL C vector types. This value may
|
||||
be changed freely as long as it does not conflict with any other DW_CC_
|
||||
value defined here. */
|
||||
DW_CC_GDB_IBM_OpenCL = 0xff
|
||||
};
|
||||
|
||||
/* Inline attribute. */
|
||||
enum dwarf_inline_attribute
|
||||
{
|
||||
DW_INL_not_inlined = 0,
|
||||
DW_INL_inlined = 1,
|
||||
DW_INL_declared_not_inlined = 2,
|
||||
DW_INL_declared_inlined = 3
|
||||
};
|
||||
|
||||
/* Discriminant lists. */
|
||||
enum dwarf_discrim_list
|
||||
{
|
||||
DW_DSC_label = 0,
|
||||
DW_DSC_range = 1
|
||||
};
|
||||
|
||||
/* Line number opcodes. */
|
||||
enum dwarf_line_number_ops
|
||||
{
|
||||
DW_LNS_extended_op = 0,
|
||||
DW_LNS_copy = 1,
|
||||
DW_LNS_advance_pc = 2,
|
||||
DW_LNS_advance_line = 3,
|
||||
DW_LNS_set_file = 4,
|
||||
DW_LNS_set_column = 5,
|
||||
DW_LNS_negate_stmt = 6,
|
||||
DW_LNS_set_basic_block = 7,
|
||||
DW_LNS_const_add_pc = 8,
|
||||
DW_LNS_fixed_advance_pc = 9,
|
||||
/* DWARF 3. */
|
||||
DW_LNS_set_prologue_end = 10,
|
||||
DW_LNS_set_epilogue_begin = 11,
|
||||
DW_LNS_set_isa = 12
|
||||
};
|
||||
|
||||
/* Line number extended opcodes. */
|
||||
enum dwarf_line_number_x_ops
|
||||
{
|
||||
DW_LNE_end_sequence = 1,
|
||||
DW_LNE_set_address = 2,
|
||||
DW_LNE_define_file = 3,
|
||||
DW_LNE_set_discriminator = 4,
|
||||
/* HP extensions. */
|
||||
DW_LNE_HP_negate_is_UV_update = 0x11,
|
||||
DW_LNE_HP_push_context = 0x12,
|
||||
DW_LNE_HP_pop_context = 0x13,
|
||||
DW_LNE_HP_set_file_line_column = 0x14,
|
||||
DW_LNE_HP_set_routine_name = 0x15,
|
||||
DW_LNE_HP_set_sequence = 0x16,
|
||||
DW_LNE_HP_negate_post_semantics = 0x17,
|
||||
DW_LNE_HP_negate_function_exit = 0x18,
|
||||
DW_LNE_HP_negate_front_end_logical = 0x19,
|
||||
DW_LNE_HP_define_proc = 0x20,
|
||||
DW_LNE_HP_source_file_correlation = 0x80,
|
||||
|
||||
DW_LNE_lo_user = 0x80,
|
||||
DW_LNE_hi_user = 0xff
|
||||
};
|
||||
|
||||
/* Sub-opcodes for DW_LNE_HP_source_file_correlation. */
|
||||
enum dwarf_line_number_hp_sfc_ops
|
||||
{
|
||||
DW_LNE_HP_SFC_formfeed = 1,
|
||||
DW_LNE_HP_SFC_set_listing_line = 2,
|
||||
DW_LNE_HP_SFC_associate = 3
|
||||
};
|
||||
|
||||
/* Type codes for location list entries.
|
||||
Extension for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
|
||||
|
||||
enum dwarf_location_list_entry_type
|
||||
{
|
||||
DW_LLE_GNU_end_of_list_entry = 0,
|
||||
DW_LLE_GNU_base_address_selection_entry = 1,
|
||||
DW_LLE_GNU_start_end_entry = 2,
|
||||
DW_LLE_GNU_start_length_entry = 3
|
||||
};
|
||||
|
||||
#define DW_CIE_ID 0xffffffff
|
||||
#define DW64_CIE_ID 0xffffffffffffffffULL
|
||||
#define DW_CIE_VERSION 1
|
||||
|
||||
#define DW_CFA_extended 0
|
||||
|
||||
#define DW_CHILDREN_no 0x00
|
||||
#define DW_CHILDREN_yes 0x01
|
||||
|
||||
#define DW_ADDR_none 0
|
||||
|
||||
/* Source language names and codes. */
|
||||
enum dwarf_source_language
|
||||
{
|
||||
DW_LANG_C89 = 0x0001,
|
||||
DW_LANG_C = 0x0002,
|
||||
DW_LANG_Ada83 = 0x0003,
|
||||
DW_LANG_C_plus_plus = 0x0004,
|
||||
DW_LANG_Cobol74 = 0x0005,
|
||||
DW_LANG_Cobol85 = 0x0006,
|
||||
DW_LANG_Fortran77 = 0x0007,
|
||||
DW_LANG_Fortran90 = 0x0008,
|
||||
DW_LANG_Pascal83 = 0x0009,
|
||||
DW_LANG_Modula2 = 0x000a,
|
||||
/* DWARF 3. */
|
||||
DW_LANG_Java = 0x000b,
|
||||
DW_LANG_C99 = 0x000c,
|
||||
DW_LANG_Ada95 = 0x000d,
|
||||
DW_LANG_Fortran95 = 0x000e,
|
||||
DW_LANG_PLI = 0x000f,
|
||||
DW_LANG_ObjC = 0x0010,
|
||||
DW_LANG_ObjC_plus_plus = 0x0011,
|
||||
DW_LANG_UPC = 0x0012,
|
||||
DW_LANG_D = 0x0013,
|
||||
/* DWARF 4. */
|
||||
DW_LANG_Python = 0x0014,
|
||||
/* DWARF 5. */
|
||||
DW_LANG_Go = 0x0016,
|
||||
|
||||
DW_LANG_C_plus_plus_11 = 0x001a, /* dwarf5.20141029.pdf DRAFT */
|
||||
DW_LANG_Rust = 0x001c,
|
||||
DW_LANG_C11 = 0x001d,
|
||||
DW_LANG_C_plus_plus_14 = 0x0021,
|
||||
DW_LANG_Fortran03 = 0x0022,
|
||||
DW_LANG_Fortran08 = 0x0023,
|
||||
|
||||
DW_LANG_lo_user = 0x8000, /* Implementation-defined range start. */
|
||||
DW_LANG_hi_user = 0xffff, /* Implementation-defined range start. */
|
||||
|
||||
/* MIPS. */
|
||||
DW_LANG_Mips_Assembler = 0x8001,
|
||||
/* UPC. */
|
||||
DW_LANG_Upc = 0x8765,
|
||||
/* HP extensions. */
|
||||
DW_LANG_HP_Bliss = 0x8003,
|
||||
DW_LANG_HP_Basic91 = 0x8004,
|
||||
DW_LANG_HP_Pascal91 = 0x8005,
|
||||
DW_LANG_HP_IMacro = 0x8006,
|
||||
DW_LANG_HP_Assembler = 0x8007,
|
||||
|
||||
/* Rust extension, but replaced in DWARF 5. */
|
||||
DW_LANG_Rust_old = 0x9000
|
||||
};
|
||||
|
||||
/* Names and codes for macro information. */
|
||||
enum dwarf_macinfo_record_type
|
||||
{
|
||||
DW_MACINFO_define = 1,
|
||||
DW_MACINFO_undef = 2,
|
||||
DW_MACINFO_start_file = 3,
|
||||
DW_MACINFO_end_file = 4,
|
||||
DW_MACINFO_vendor_ext = 255
|
||||
};
|
||||
|
||||
/* Names and codes for new style macro information. */
|
||||
enum dwarf_macro_record_type
|
||||
{
|
||||
DW_MACRO_GNU_define = 1,
|
||||
DW_MACRO_GNU_undef = 2,
|
||||
DW_MACRO_GNU_start_file = 3,
|
||||
DW_MACRO_GNU_end_file = 4,
|
||||
DW_MACRO_GNU_define_indirect = 5,
|
||||
DW_MACRO_GNU_undef_indirect = 6,
|
||||
DW_MACRO_GNU_transparent_include = 7,
|
||||
/* Extensions for DWZ multifile.
|
||||
See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open . */
|
||||
DW_MACRO_GNU_define_indirect_alt = 8,
|
||||
DW_MACRO_GNU_undef_indirect_alt = 9,
|
||||
DW_MACRO_GNU_transparent_include_alt = 10,
|
||||
DW_MACRO_GNU_lo_user = 0xe0,
|
||||
DW_MACRO_GNU_hi_user = 0xff
|
||||
};
|
||||
|
||||
/* @@@ For use with GNU frame unwind information. */
|
||||
|
||||
#define DW_EH_PE_absptr 0x00
|
||||
#define DW_EH_PE_omit 0xff
|
||||
|
||||
#define DW_EH_PE_uleb128 0x01
|
||||
#define DW_EH_PE_udata2 0x02
|
||||
#define DW_EH_PE_udata4 0x03
|
||||
#define DW_EH_PE_udata8 0x04
|
||||
#define DW_EH_PE_sleb128 0x09
|
||||
#define DW_EH_PE_sdata2 0x0A
|
||||
#define DW_EH_PE_sdata4 0x0B
|
||||
#define DW_EH_PE_sdata8 0x0C
|
||||
#define DW_EH_PE_signed 0x08
|
||||
|
||||
#define DW_EH_PE_pcrel 0x10
|
||||
#define DW_EH_PE_textrel 0x20
|
||||
#define DW_EH_PE_datarel 0x30
|
||||
#define DW_EH_PE_funcrel 0x40
|
||||
#define DW_EH_PE_aligned 0x50
|
||||
|
||||
#define DW_EH_PE_indirect 0x80
|
||||
|
||||
/* Codes for the debug sections in a dwarf package (.dwp) file.
|
||||
Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFissionDWP. */
|
||||
enum dwarf_sect
|
||||
{
|
||||
DW_SECT_INFO = 1,
|
||||
DW_SECT_TYPES = 2,
|
||||
DW_SECT_ABBREV = 3,
|
||||
DW_SECT_LINE = 4,
|
||||
DW_SECT_LOC = 5,
|
||||
DW_SECT_STR_OFFSETS = 6,
|
||||
DW_SECT_MACINFO = 7,
|
||||
DW_SECT_MACRO = 8,
|
||||
DW_SECT_MAX = 8
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Return the name of a DW_TAG_ constant, or NULL if the value is not
|
||||
recognized. */
|
||||
extern const char *get_DW_TAG_name (unsigned int tag);
|
||||
|
||||
/* Return the name of a DW_AT_ constant, or NULL if the value is not
|
||||
recognized. */
|
||||
extern const char *get_DW_AT_name (unsigned int attr);
|
||||
|
||||
/* Return the name of a DW_FORM_ constant, or NULL if the value is not
|
||||
recognized. */
|
||||
extern const char *get_DW_FORM_name (unsigned int form);
|
||||
|
||||
/* Return the name of a DW_OP_ constant, or NULL if the value is not
|
||||
recognized. */
|
||||
extern const char *get_DW_OP_name (unsigned int op);
|
||||
|
||||
/* Return the name of a DW_ATE_ constant, or NULL if the value is not
|
||||
recognized. */
|
||||
extern const char *get_DW_ATE_name (unsigned int enc);
|
||||
|
||||
/* Return the name of a DW_CFA_ constant, or NULL if the value is not
|
||||
recognized. */
|
||||
extern const char *get_DW_CFA_name (unsigned int opc);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _DWARF2_H */
|
72
include/dyn-string.h
Normal file
72
include/dyn-string.h
Normal file
@ -0,0 +1,72 @@
|
||||
/* An abstract string datatype.
|
||||
Copyright (C) 1998-2015 Free Software Foundation, Inc.
|
||||
Contributed by Mark Mitchell (mark@markmitchell.com).
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GCC 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 GCC; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
|
||||
Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef DYN_STRING_H
|
||||
#define DYN_STRING_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct dyn_string
|
||||
{
|
||||
int allocated; /* The amount of space allocated for the string. */
|
||||
int length; /* The actual length of the string. */
|
||||
char *s; /* The string itself, NUL-terminated. */
|
||||
}* dyn_string_t;
|
||||
|
||||
/* The length STR, in bytes, not including the terminating NUL. */
|
||||
#define dyn_string_length(STR) \
|
||||
((STR)->length)
|
||||
|
||||
/* The NTBS in which the contents of STR are stored. */
|
||||
#define dyn_string_buf(STR) \
|
||||
((STR)->s)
|
||||
|
||||
/* Compare DS1 to DS2 with strcmp. */
|
||||
#define dyn_string_compare(DS1, DS2) \
|
||||
(strcmp ((DS1)->s, (DS2)->s))
|
||||
|
||||
|
||||
extern int dyn_string_init (struct dyn_string *, int);
|
||||
extern dyn_string_t dyn_string_new (int);
|
||||
extern void dyn_string_delete (dyn_string_t);
|
||||
extern char *dyn_string_release (dyn_string_t);
|
||||
extern dyn_string_t dyn_string_resize (dyn_string_t, int);
|
||||
extern void dyn_string_clear (dyn_string_t);
|
||||
extern int dyn_string_copy (dyn_string_t, dyn_string_t);
|
||||
extern int dyn_string_copy_cstr (dyn_string_t, const char *);
|
||||
extern int dyn_string_prepend (dyn_string_t, dyn_string_t);
|
||||
extern int dyn_string_prepend_cstr (dyn_string_t, const char *);
|
||||
extern int dyn_string_insert (dyn_string_t, int, dyn_string_t);
|
||||
extern int dyn_string_insert_cstr (dyn_string_t, int, const char *);
|
||||
extern int dyn_string_insert_char (dyn_string_t, int, int);
|
||||
extern int dyn_string_append (dyn_string_t, dyn_string_t);
|
||||
extern int dyn_string_append_cstr (dyn_string_t, const char *);
|
||||
extern int dyn_string_append_char (dyn_string_t, int);
|
||||
extern int dyn_string_substring (dyn_string_t, dyn_string_t, int, int);
|
||||
extern int dyn_string_eq (dyn_string_t, dyn_string_t);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined (DYN_STRING_H) */
|
3147
include/elf.h
Normal file
3147
include/elf.h
Normal file
File diff suppressed because it is too large
Load Diff
1892
include/elf/ChangeLog
Normal file
1892
include/elf/ChangeLog
Normal file
File diff suppressed because it is too large
Load Diff
1957
include/elf/ChangeLog-9103
Normal file
1957
include/elf/ChangeLog-9103
Normal file
File diff suppressed because it is too large
Load Diff
327
include/elf/aarch64.h
Normal file
327
include/elf/aarch64.h
Normal file
@ -0,0 +1,327 @@
|
||||
/* AArch64 ELF support for BFD.
|
||||
|
||||
Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
|
||||
Contributed by ARM Ltd.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
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; see the file COPYING3. If not,
|
||||
see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _ELF_AARCH64_H
|
||||
#define _ELF_AARCH64_H
|
||||
|
||||
#include "elf/reloc-macros.h"
|
||||
|
||||
/* Processor specific program header types. */
|
||||
#define PT_AARCH64_ARCHEXT (PT_LOPROC + 0)
|
||||
|
||||
/* Additional section types. */
|
||||
#define SHT_AARCH64_ATTRIBUTES 0x70000003 /* Section holds attributes. */
|
||||
|
||||
/* AArch64-specific values for sh_flags. */
|
||||
#define SHF_ENTRYSECT 0x10000000 /* Section contains an
|
||||
entry point. */
|
||||
#define SHF_COMDEF 0x80000000 /* Section may be multiply defined
|
||||
in the input to a link step. */
|
||||
|
||||
/* Relocation types. */
|
||||
|
||||
START_RELOC_NUMBERS (elf_aarch64_reloc_type)
|
||||
|
||||
/* Null relocations. */
|
||||
RELOC_NUMBER (R_AARCH64_NONE, 0) /* No reloc */
|
||||
|
||||
/* Basic data relocations. */
|
||||
|
||||
/* .word: (S+A) */
|
||||
RELOC_NUMBER (R_AARCH64_P32_ABS32, 1)
|
||||
|
||||
/* .half: (S+A) */
|
||||
RELOC_NUMBER (R_AARCH64_P32_ABS16, 2)
|
||||
|
||||
/* .word: (S+A-P) */
|
||||
RELOC_NUMBER (R_AARCH64_P32_PREL32, 3)
|
||||
|
||||
/* .half: (S+A-P) */
|
||||
RELOC_NUMBER (R_AARCH64_P32_PREL16, 4)
|
||||
|
||||
/* Group relocations to create a 16, 32, 48 or 64 bit
|
||||
unsigned data or abs address inline. */
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 0) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_P32_MOVW_UABS_G0, 5)
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 0) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_P32_MOVW_UABS_G0_NC, 6)
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 16) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_P32_MOVW_UABS_G1, 7)
|
||||
|
||||
/* Group relocations to create high part of a 16, 32, 48 or 64 bit
|
||||
signed data or abs address inline. Will change instruction
|
||||
to MOVN or MOVZ depending on sign of calculated value. */
|
||||
|
||||
/* MOV[ZN]: ((S+A) >> 0) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_P32_MOVW_SABS_G0, 8)
|
||||
|
||||
/* Relocations to generate 19, 21 and 33 bit PC-relative load/store
|
||||
addresses: PG(x) is (x & ~0xfff). */
|
||||
|
||||
/* LD-lit: ((S+A-P) >> 2) & 0x7ffff */
|
||||
RELOC_NUMBER (R_AARCH64_P32_LD_PREL_LO19, 9)
|
||||
|
||||
/* ADR: (S+A-P) & 0x1fffff */
|
||||
RELOC_NUMBER (R_AARCH64_P32_ADR_PREL_LO21, 10)
|
||||
|
||||
/* ADRH: ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */
|
||||
RELOC_NUMBER (R_AARCH64_P32_ADR_PREL_PG_HI21, 11)
|
||||
|
||||
/* ADD: (S+A) & 0xfff */
|
||||
RELOC_NUMBER (R_AARCH64_P32_ADD_ABS_LO12_NC, 12)
|
||||
|
||||
/* LD/ST8: (S+A) & 0xfff */
|
||||
RELOC_NUMBER (R_AARCH64_P32_LDST8_ABS_LO12_NC, 13)
|
||||
|
||||
/* LD/ST16: (S+A) & 0xffe */
|
||||
RELOC_NUMBER (R_AARCH64_P32_LDST16_ABS_LO12_NC, 14)
|
||||
|
||||
/* LD/ST32: (S+A) & 0xffc */
|
||||
RELOC_NUMBER (R_AARCH64_P32_LDST32_ABS_LO12_NC, 15)
|
||||
|
||||
/* LD/ST64: (S+A) & 0xff8 */
|
||||
RELOC_NUMBER (R_AARCH64_P32_LDST64_ABS_LO12_NC, 16)
|
||||
|
||||
/* LD/ST128: (S+A) & 0xff0 */
|
||||
RELOC_NUMBER (R_AARCH64_P32_LDST128_ABS_LO12_NC, 17)
|
||||
|
||||
/* Relocations for control-flow instructions. */
|
||||
|
||||
/* TBZ/NZ: ((S+A-P) >> 2) & 0x3fff. */
|
||||
RELOC_NUMBER (R_AARCH64_P32_TSTBR14, 18)
|
||||
|
||||
/* B.cond: ((S+A-P) >> 2) & 0x7ffff. */
|
||||
RELOC_NUMBER (R_AARCH64_P32_CONDBR19, 19)
|
||||
|
||||
/* B: ((S+A-P) >> 2) & 0x3ffffff. */
|
||||
RELOC_NUMBER (R_AARCH64_P32_JUMP26, 20)
|
||||
|
||||
/* BL: ((S+A-P) >> 2) & 0x3ffffff. */
|
||||
RELOC_NUMBER (R_AARCH64_P32_CALL26, 21)
|
||||
|
||||
|
||||
RELOC_NUMBER (R_AARCH64_P32_GOT_LD_PREL19, 25)
|
||||
RELOC_NUMBER (R_AARCH64_P32_ADR_GOT_PAGE, 26)
|
||||
RELOC_NUMBER (R_AARCH64_P32_LD32_GOT_LO12_NC, 27)
|
||||
|
||||
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSGD_ADR_PAGE21, 81)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSGD_ADD_LO12_NC, 82)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21, 103)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC, 104)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19, 105)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSLE_MOVW_TPREL_G1, 106)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSLE_MOVW_TPREL_G0, 107)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC, 108)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSLE_ADD_TPREL_HI12, 109)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSLE_ADD_TPREL_LO12, 110)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC, 111)
|
||||
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSDESC_LD_PREL19, 122)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSDESC_ADR_PREL21, 123)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSDESC_ADR_PAGE21, 124)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSDESC_LD32_LO12_NC, 125)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSDESC_ADD_LO12_NC, 126)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSDESC_CALL, 127)
|
||||
|
||||
/* Dynamic relocations */
|
||||
|
||||
/* Copy symbol at runtime. */
|
||||
RELOC_NUMBER (R_AARCH64_P32_COPY, 180)
|
||||
|
||||
/* Create GOT entry. */
|
||||
RELOC_NUMBER (R_AARCH64_P32_GLOB_DAT, 181)
|
||||
|
||||
/* Create PLT entry. */
|
||||
RELOC_NUMBER (R_AARCH64_P32_JUMP_SLOT, 182)
|
||||
|
||||
/* Adjust by program base. */
|
||||
RELOC_NUMBER (R_AARCH64_P32_RELATIVE, 183)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLS_DTPMOD, 184)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLS_DTPREL, 185)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLS_TPREL, 186)
|
||||
RELOC_NUMBER (R_AARCH64_P32_TLSDESC, 187)
|
||||
RELOC_NUMBER (R_AARCH64_P32_IRELATIVE, 188)
|
||||
|
||||
RELOC_NUMBER (R_AARCH64_NULL, 256) /* No reloc */
|
||||
|
||||
/* Basic data relocations. */
|
||||
|
||||
/* .xword: (S+A) */
|
||||
RELOC_NUMBER (R_AARCH64_ABS64, 257)
|
||||
|
||||
/* .word: (S+A) */
|
||||
RELOC_NUMBER (R_AARCH64_ABS32, 258)
|
||||
|
||||
/* .half: (S+A) */
|
||||
RELOC_NUMBER (R_AARCH64_ABS16, 259)
|
||||
|
||||
/* .xword: (S+A-P) */
|
||||
RELOC_NUMBER (R_AARCH64_PREL64, 260)
|
||||
|
||||
/* .word: (S+A-P) */
|
||||
RELOC_NUMBER (R_AARCH64_PREL32, 261)
|
||||
|
||||
/* .half: (S+A-P) */
|
||||
RELOC_NUMBER (R_AARCH64_PREL16, 262)
|
||||
|
||||
/* Group relocations to create a 16, 32, 48 or 64 bit
|
||||
unsigned data or abs address inline. */
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 0) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_UABS_G0, 263)
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 0) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_UABS_G0_NC, 264)
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 16) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_UABS_G1, 265)
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 16) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_UABS_G1_NC, 266)
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 32) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_UABS_G2, 267)
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 32) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_UABS_G2_NC, 268)
|
||||
|
||||
/* MOV[ZK]: ((S+A) >> 48) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_UABS_G3, 269)
|
||||
|
||||
/* Group relocations to create high part of a 16, 32, 48 or 64 bit
|
||||
signed data or abs address inline. Will change instruction
|
||||
to MOVN or MOVZ depending on sign of calculated value. */
|
||||
|
||||
/* MOV[ZN]: ((S+A) >> 0) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_SABS_G0, 270)
|
||||
|
||||
/* MOV[ZN]: ((S+A) >> 16) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_SABS_G1, 271)
|
||||
|
||||
/* MOV[ZN]: ((S+A) >> 32) & 0xffff */
|
||||
RELOC_NUMBER (R_AARCH64_MOVW_SABS_G2, 272)
|
||||
|
||||
/* Relocations to generate 19, 21 and 33 bit PC-relative load/store
|
||||
addresses: PG(x) is (x & ~0xfff). */
|
||||
|
||||
/* LD-lit: ((S+A-P) >> 2) & 0x7ffff */
|
||||
RELOC_NUMBER (R_AARCH64_LD_PREL_LO19, 273)
|
||||
|
||||
/* ADR: (S+A-P) & 0x1fffff */
|
||||
RELOC_NUMBER (R_AARCH64_ADR_PREL_LO21, 274)
|
||||
|
||||
/* ADRH: ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */
|
||||
RELOC_NUMBER (R_AARCH64_ADR_PREL_PG_HI21, 275)
|
||||
|
||||
/* ADRH: ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */
|
||||
RELOC_NUMBER (R_AARCH64_ADR_PREL_PG_HI21_NC, 276)
|
||||
|
||||
/* ADD: (S+A) & 0xfff */
|
||||
RELOC_NUMBER (R_AARCH64_ADD_ABS_LO12_NC, 277)
|
||||
|
||||
/* LD/ST8: (S+A) & 0xfff */
|
||||
RELOC_NUMBER (R_AARCH64_LDST8_ABS_LO12_NC, 278)
|
||||
|
||||
/* Relocations for control-flow instructions. */
|
||||
|
||||
/* TBZ/NZ: ((S+A-P) >> 2) & 0x3fff. */
|
||||
RELOC_NUMBER (R_AARCH64_TSTBR14, 279)
|
||||
|
||||
/* B.cond: ((S+A-P) >> 2) & 0x7ffff. */
|
||||
RELOC_NUMBER (R_AARCH64_CONDBR19, 280)
|
||||
|
||||
/* 281 unused */
|
||||
|
||||
/* B: ((S+A-P) >> 2) & 0x3ffffff. */
|
||||
RELOC_NUMBER (R_AARCH64_JUMP26, 282)
|
||||
|
||||
/* BL: ((S+A-P) >> 2) & 0x3ffffff. */
|
||||
RELOC_NUMBER (R_AARCH64_CALL26, 283)
|
||||
|
||||
/* LD/ST16: (S+A) & 0xffe */
|
||||
RELOC_NUMBER (R_AARCH64_LDST16_ABS_LO12_NC, 284)
|
||||
|
||||
/* LD/ST32: (S+A) & 0xffc */
|
||||
RELOC_NUMBER (R_AARCH64_LDST32_ABS_LO12_NC, 285)
|
||||
|
||||
/* LD/ST64: (S+A) & 0xff8 */
|
||||
RELOC_NUMBER (R_AARCH64_LDST64_ABS_LO12_NC, 286)
|
||||
|
||||
/* LD/ST128: (S+A) & 0xff0 */
|
||||
RELOC_NUMBER (R_AARCH64_LDST128_ABS_LO12_NC, 299)
|
||||
|
||||
RELOC_NUMBER (R_AARCH64_GOT_LD_PREL19, 309)
|
||||
RELOC_NUMBER (R_AARCH64_ADR_GOT_PAGE, 311)
|
||||
RELOC_NUMBER (R_AARCH64_LD64_GOT_LO12_NC, 312)
|
||||
|
||||
RELOC_NUMBER (R_AARCH64_TLSGD_ADR_PAGE21, 513)
|
||||
RELOC_NUMBER (R_AARCH64_TLSGD_ADD_LO12_NC, 514)
|
||||
RELOC_NUMBER (R_AARCH64_TLSIE_MOVW_GOTTPREL_G1, 539)
|
||||
RELOC_NUMBER (R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC, 540)
|
||||
RELOC_NUMBER (R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21, 541)
|
||||
RELOC_NUMBER (R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC, 542)
|
||||
RELOC_NUMBER (R_AARCH64_TLSIE_LD_GOTTPREL_PREL19, 543)
|
||||
RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G2, 544)
|
||||
RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G1, 545)
|
||||
RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G1_NC, 546)
|
||||
RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G0, 547)
|
||||
RELOC_NUMBER (R_AARCH64_TLSLE_MOVW_TPREL_G0_NC, 548)
|
||||
RELOC_NUMBER (R_AARCH64_TLSLE_ADD_TPREL_HI12, 549)
|
||||
RELOC_NUMBER (R_AARCH64_TLSLE_ADD_TPREL_LO12, 550)
|
||||
RELOC_NUMBER (R_AARCH64_TLSLE_ADD_TPREL_LO12_NC, 551)
|
||||
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_LD_PREL19, 560)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_ADR_PREL21, 561)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_ADR_PAGE21, 562)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_LD64_LO12_NC, 563)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_ADD_LO12_NC, 564)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_OFF_G1, 565)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_OFF_G0_NC, 566)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_LDR, 567)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_ADD, 568)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC_CALL, 569)
|
||||
|
||||
/* Dynamic relocations */
|
||||
|
||||
/* Copy symbol at runtime. */
|
||||
RELOC_NUMBER (R_AARCH64_COPY, 1024)
|
||||
|
||||
/* Create GOT entry. */
|
||||
RELOC_NUMBER (R_AARCH64_GLOB_DAT, 1025)
|
||||
|
||||
/* Create PLT entry. */
|
||||
RELOC_NUMBER (R_AARCH64_JUMP_SLOT, 1026)
|
||||
|
||||
/* Adjust by program base. */
|
||||
RELOC_NUMBER (R_AARCH64_RELATIVE, 1027)
|
||||
RELOC_NUMBER (R_AARCH64_TLS_DTPMOD, 1028)
|
||||
RELOC_NUMBER (R_AARCH64_TLS_DTPREL, 1029)
|
||||
RELOC_NUMBER (R_AARCH64_TLS_TPREL, 1030)
|
||||
RELOC_NUMBER (R_AARCH64_TLSDESC, 1031)
|
||||
RELOC_NUMBER (R_AARCH64_IRELATIVE, 1032)
|
||||
|
||||
END_RELOC_NUMBERS (R_AARCH64_end)
|
||||
|
||||
#endif /* _ELF_AARCH64_H */
|
131
include/elf/alpha.h
Normal file
131
include/elf/alpha.h
Normal file
@ -0,0 +1,131 @@
|
||||
/* ALPHA ELF support for BFD.
|
||||
Copyright 1996, 1998, 2000, 2001, 2002, 2010 Free Software Foundation, Inc.
|
||||
|
||||
By Eric Youngdale, <eric@aib.com>. No processor supplement available
|
||||
for this platform.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* This file holds definitions specific to the ALPHA ELF ABI. Note
|
||||
that most of this is not actually implemented by BFD. */
|
||||
|
||||
#ifndef _ELF_ALPHA_H
|
||||
#define _ELF_ALPHA_H
|
||||
|
||||
/* Processor specific flags for the ELF header e_flags field. */
|
||||
|
||||
/* All addresses must be below 2GB. */
|
||||
#define EF_ALPHA_32BIT 0x00000001
|
||||
|
||||
/* All relocations needed for relaxation with code movement are present. */
|
||||
#define EF_ALPHA_CANRELAX 0x00000002
|
||||
|
||||
/* Processor specific section flags. */
|
||||
|
||||
/* This section must be in the global data area. */
|
||||
#define SHF_ALPHA_GPREL 0x10000000
|
||||
|
||||
/* Section contains some sort of debugging information. The exact
|
||||
format is unspecified. It's probably ECOFF symbols. */
|
||||
#define SHT_ALPHA_DEBUG 0x70000001
|
||||
|
||||
/* Section contains register usage information. */
|
||||
#define SHT_ALPHA_REGINFO 0x70000002
|
||||
|
||||
/* A section of type SHT_MIPS_REGINFO contains the following
|
||||
structure. */
|
||||
typedef struct
|
||||
{
|
||||
/* Mask of general purpose registers used. */
|
||||
unsigned long ri_gprmask;
|
||||
/* Mask of co-processor registers used. */
|
||||
unsigned long ri_cprmask[4];
|
||||
/* GP register value for this object file. */
|
||||
long ri_gp_value;
|
||||
} Elf64_RegInfo;
|
||||
|
||||
/* Special values for the st_other field in the symbol table. */
|
||||
|
||||
#define STO_ALPHA_NOPV 0x80
|
||||
#define STO_ALPHA_STD_GPLOAD 0x88
|
||||
|
||||
/* Special values for Elf64_Dyn tag. */
|
||||
#define DT_ALPHA_PLTRO DT_LOPROC
|
||||
|
||||
#include "elf/reloc-macros.h"
|
||||
|
||||
/* Alpha relocs. */
|
||||
START_RELOC_NUMBERS (elf_alpha_reloc_type)
|
||||
RELOC_NUMBER (R_ALPHA_NONE, 0) /* No reloc */
|
||||
RELOC_NUMBER (R_ALPHA_REFLONG, 1) /* Direct 32 bit */
|
||||
RELOC_NUMBER (R_ALPHA_REFQUAD, 2) /* Direct 64 bit */
|
||||
RELOC_NUMBER (R_ALPHA_GPREL32, 3) /* GP relative 32 bit */
|
||||
RELOC_NUMBER (R_ALPHA_LITERAL, 4) /* GP relative 16 bit w/optimization */
|
||||
RELOC_NUMBER (R_ALPHA_LITUSE, 5) /* Optimization hint for LITERAL */
|
||||
RELOC_NUMBER (R_ALPHA_GPDISP, 6) /* Add displacement to GP */
|
||||
RELOC_NUMBER (R_ALPHA_BRADDR, 7) /* PC+4 relative 23 bit shifted */
|
||||
RELOC_NUMBER (R_ALPHA_HINT, 8) /* PC+4 relative 16 bit shifted */
|
||||
RELOC_NUMBER (R_ALPHA_SREL16, 9) /* PC relative 16 bit */
|
||||
RELOC_NUMBER (R_ALPHA_SREL32, 10) /* PC relative 32 bit */
|
||||
RELOC_NUMBER (R_ALPHA_SREL64, 11) /* PC relative 64 bit */
|
||||
|
||||
/* Skip 12 - 16; deprecated ECOFF relocs. */
|
||||
|
||||
RELOC_NUMBER (R_ALPHA_GPRELHIGH, 17) /* GP relative 32 bit, high 16 bits */
|
||||
RELOC_NUMBER (R_ALPHA_GPRELLOW, 18) /* GP relative 32 bit, low 16 bits */
|
||||
RELOC_NUMBER (R_ALPHA_GPREL16, 19) /* GP relative 16 bit */
|
||||
|
||||
/* Skip 20 - 23; deprecated ECOFF relocs. */
|
||||
|
||||
/* These relocations are specific to shared libraries. */
|
||||
RELOC_NUMBER (R_ALPHA_COPY, 24) /* Copy symbol at runtime */
|
||||
RELOC_NUMBER (R_ALPHA_GLOB_DAT, 25) /* Create GOT entry */
|
||||
RELOC_NUMBER (R_ALPHA_JMP_SLOT, 26) /* Create PLT entry */
|
||||
RELOC_NUMBER (R_ALPHA_RELATIVE, 27) /* Adjust by program base */
|
||||
|
||||
/* Like BRADDR, but assert that the source and target object file
|
||||
share the same GP value, and adjust the target address for
|
||||
STO_ALPHA_STD_GPLOAD. */
|
||||
RELOC_NUMBER (R_ALPHA_BRSGP, 28)
|
||||
|
||||
/* Thread-Local Storage. */
|
||||
RELOC_NUMBER (R_ALPHA_TLSGD, 29)
|
||||
RELOC_NUMBER (R_ALPHA_TLSLDM, 30)
|
||||
RELOC_NUMBER (R_ALPHA_DTPMOD64, 31)
|
||||
RELOC_NUMBER (R_ALPHA_GOTDTPREL, 32)
|
||||
RELOC_NUMBER (R_ALPHA_DTPREL64, 33)
|
||||
RELOC_NUMBER (R_ALPHA_DTPRELHI, 34)
|
||||
RELOC_NUMBER (R_ALPHA_DTPRELLO, 35)
|
||||
RELOC_NUMBER (R_ALPHA_DTPREL16, 36)
|
||||
RELOC_NUMBER (R_ALPHA_GOTTPREL, 37)
|
||||
RELOC_NUMBER (R_ALPHA_TPREL64, 38)
|
||||
RELOC_NUMBER (R_ALPHA_TPRELHI, 39)
|
||||
RELOC_NUMBER (R_ALPHA_TPRELLO, 40)
|
||||
RELOC_NUMBER (R_ALPHA_TPREL16, 41)
|
||||
|
||||
END_RELOC_NUMBERS (R_ALPHA_max)
|
||||
|
||||
#define LITUSE_ALPHA_ADDR 0
|
||||
#define LITUSE_ALPHA_BASE 1
|
||||
#define LITUSE_ALPHA_BYTOFF 2
|
||||
#define LITUSE_ALPHA_JSR 3
|
||||
#define LITUSE_ALPHA_TLSGD 4
|
||||
#define LITUSE_ALPHA_TLSLDM 5
|
||||
#define LITUSE_ALPHA_JSRDIRECT 6
|
||||
|
||||
#endif /* _ELF_ALPHA_H */
|
57
include/elf/arc.h
Normal file
57
include/elf/arc.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* ARC ELF support for BFD.
|
||||
Copyright 1995, 1997, 1998, 2000, 2001, 2010 Free Software Foundation, Inc.
|
||||
Contributed by Doug Evans, (dje@cygnus.com)
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
/* This file holds definitions specific to the ARC ELF ABI. */
|
||||
|
||||
#ifndef _ELF_ARC_H
|
||||
#define _ELF_ARC_H
|
||||
|
||||
#include "elf/reloc-macros.h"
|
||||
|
||||
/* Relocations. */
|
||||
|
||||
START_RELOC_NUMBERS (elf_arc_reloc_type)
|
||||
RELOC_NUMBER (R_ARC_NONE, 0)
|
||||
RELOC_NUMBER (R_ARC_32, 1)
|
||||
RELOC_NUMBER (R_ARC_B26, 2)
|
||||
RELOC_NUMBER (R_ARC_B22_PCREL, 3)
|
||||
END_RELOC_NUMBERS (R_ARC_max)
|
||||
|
||||
/* Processor specific flags for the ELF header e_flags field. */
|
||||
|
||||
/* Four bit ARC machine type field. */
|
||||
|
||||
#define EF_ARC_MACH 0x0000000f
|
||||
|
||||
/* Various CPU types. */
|
||||
|
||||
#define E_ARC_MACH_ARC5 0
|
||||
#define E_ARC_MACH_ARC6 1
|
||||
#define E_ARC_MACH_ARC7 2
|
||||
#define E_ARC_MACH_ARC8 3
|
||||
|
||||
/* Leave bits 0xf0 alone in case we ever have more than 16 cpu types. */
|
||||
|
||||
/* File contains position independent code. */
|
||||
|
||||
#define EF_ARC_PIC 0x00000100
|
||||
|
||||
#endif /* _ELF_ARC_H */
|
344
include/elf/arm.h
Normal file
344
include/elf/arm.h
Normal file
@ -0,0 +1,344 @@
|
||||
/* ARM ELF support for BFD.
|
||||
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _ELF_ARM_H
|
||||
#define _ELF_ARM_H
|
||||
|
||||
#include "elf/reloc-macros.h"
|
||||
|
||||
/* Processor specific flags for the ELF header e_flags field. */
|
||||
#define EF_ARM_RELEXEC 0x01
|
||||
#define EF_ARM_HASENTRY 0x02
|
||||
#define EF_ARM_INTERWORK 0x04
|
||||
#define EF_ARM_APCS_26 0x08
|
||||
#define EF_ARM_APCS_FLOAT 0x10
|
||||
#define EF_ARM_PIC 0x20
|
||||
#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use. */
|
||||
#define EF_ARM_NEW_ABI 0x80
|
||||
#define EF_ARM_OLD_ABI 0x100
|
||||
#define EF_ARM_SOFT_FLOAT 0x200
|
||||
#define EF_ARM_VFP_FLOAT 0x400
|
||||
#define EF_ARM_MAVERICK_FLOAT 0x800
|
||||
|
||||
/* Frame unwind information */
|
||||
#define PT_ARM_EXIDX (PT_LOPROC + 1)
|
||||
|
||||
/* Other constants defined in the ARM ELF spec. version B-01. */
|
||||
#define EF_ARM_SYMSARESORTED 0x04 /* NB conflicts with EF_INTERWORK. */
|
||||
#define EF_ARM_DYNSYMSUSESEGIDX 0x08 /* NB conflicts with EF_APCS26. */
|
||||
#define EF_ARM_MAPSYMSFIRST 0x10 /* NB conflicts with EF_APCS_FLOAT. */
|
||||
#define EF_ARM_EABIMASK 0xFF000000
|
||||
|
||||
/* New constants defined in the ARM ELF spec. version XXX.
|
||||
Only valid in conjunction with EF_ARM_EABI_VER5. */
|
||||
#define EF_ARM_ABI_FLOAT_SOFT 0x200 /* NB conflicts with EF_ARM_SOFT_FLOAT. */
|
||||
#define EF_ARM_ABI_FLOAT_HARD 0x400 /* NB conflicts with EF_ARM_VFP_FLOAT. */
|
||||
|
||||
/* Constants defined in AAELF. */
|
||||
#define EF_ARM_BE8 0x00800000
|
||||
#define EF_ARM_LE8 0x00400000
|
||||
|
||||
#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
|
||||
#define EF_ARM_EABI_UNKNOWN 0x00000000
|
||||
#define EF_ARM_EABI_VER1 0x01000000
|
||||
#define EF_ARM_EABI_VER2 0x02000000
|
||||
#define EF_ARM_EABI_VER3 0x03000000
|
||||
#define EF_ARM_EABI_VER4 0x04000000
|
||||
#define EF_ARM_EABI_VER5 0x05000000
|
||||
|
||||
/* Local aliases for some flags to match names used by COFF port. */
|
||||
#define F_INTERWORK EF_ARM_INTERWORK
|
||||
#define F_APCS26 EF_ARM_APCS_26
|
||||
#define F_APCS_FLOAT EF_ARM_APCS_FLOAT
|
||||
#define F_PIC EF_ARM_PIC
|
||||
#define F_SOFT_FLOAT EF_ARM_SOFT_FLOAT
|
||||
#define F_VFP_FLOAT EF_ARM_VFP_FLOAT
|
||||
|
||||
/* Additional symbol types for Thumb. */
|
||||
#define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */
|
||||
#define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */
|
||||
|
||||
/* Additional section types. */
|
||||
#define SHT_ARM_EXIDX 0x70000001 /* Section holds ARM unwind info. */
|
||||
#define SHT_ARM_PREEMPTMAP 0x70000002 /* Section pre-emption details. */
|
||||
#define SHT_ARM_ATTRIBUTES 0x70000003 /* Section holds attributes. */
|
||||
#define SHT_ARM_DEBUGOVERLAY 0x70000004 /* Section holds overlay debug info. */
|
||||
#define SHT_ARM_OVERLAYSECTION 0x70000005 /* Section holds GDB and overlay integration info. */
|
||||
|
||||
/* ARM-specific values for sh_flags. */
|
||||
#define SHF_ENTRYSECT 0x10000000 /* Section contains an entry point. */
|
||||
#define SHF_COMDEF 0x80000000 /* Section may be multiply defined in the input to a link step. */
|
||||
|
||||
/* ARM-specific program header flags. */
|
||||
#define PF_ARM_SB 0x10000000 /* Segment contains the location addressed by the static base. */
|
||||
#define PF_ARM_PI 0x20000000 /* Segment is position-independent. */
|
||||
#define PF_ARM_ABS 0x40000000 /* Segment must be loaded at its base address. */
|
||||
|
||||
/* Values for the Tag_CPU_arch EABI attribute. */
|
||||
#define TAG_CPU_ARCH_PRE_V4 0
|
||||
#define TAG_CPU_ARCH_V4 1
|
||||
#define TAG_CPU_ARCH_V4T 2
|
||||
#define TAG_CPU_ARCH_V5T 3
|
||||
#define TAG_CPU_ARCH_V5TE 4
|
||||
#define TAG_CPU_ARCH_V5TEJ 5
|
||||
#define TAG_CPU_ARCH_V6 6
|
||||
#define TAG_CPU_ARCH_V6KZ 7
|
||||
#define TAG_CPU_ARCH_V6T2 8
|
||||
#define TAG_CPU_ARCH_V6K 9
|
||||
#define TAG_CPU_ARCH_V7 10
|
||||
#define TAG_CPU_ARCH_V6_M 11
|
||||
#define TAG_CPU_ARCH_V6S_M 12
|
||||
#define TAG_CPU_ARCH_V7E_M 13
|
||||
#define TAG_CPU_ARCH_V8 14
|
||||
#define MAX_TAG_CPU_ARCH 14
|
||||
/* Pseudo-architecture to allow objects to be compatible with the subset of
|
||||
armv4t and armv6-m. This value should never be stored in object files. */
|
||||
#define TAG_CPU_ARCH_V4T_PLUS_V6_M (MAX_TAG_CPU_ARCH + 1)
|
||||
|
||||
/* Relocation types. */
|
||||
|
||||
START_RELOC_NUMBERS (elf_arm_reloc_type)
|
||||
/* AAELF official names and numbers. */
|
||||
RELOC_NUMBER (R_ARM_NONE, 0)
|
||||
RELOC_NUMBER (R_ARM_PC24, 1) /* deprecated */
|
||||
RELOC_NUMBER (R_ARM_ABS32, 2)
|
||||
RELOC_NUMBER (R_ARM_REL32, 3)
|
||||
RELOC_NUMBER (R_ARM_LDR_PC_G0, 4)
|
||||
RELOC_NUMBER (R_ARM_ABS16, 5)
|
||||
RELOC_NUMBER (R_ARM_ABS12, 6)
|
||||
RELOC_NUMBER (R_ARM_THM_ABS5, 7)
|
||||
RELOC_NUMBER (R_ARM_ABS8, 8)
|
||||
RELOC_NUMBER (R_ARM_SBREL32, 9)
|
||||
RELOC_NUMBER (R_ARM_THM_CALL, 10)
|
||||
RELOC_NUMBER (R_ARM_THM_PC8, 11)
|
||||
RELOC_NUMBER (R_ARM_BREL_ADJ, 12)
|
||||
RELOC_NUMBER (R_ARM_TLS_DESC, 13)
|
||||
RELOC_NUMBER (R_ARM_THM_SWI8, 14) /* obsolete */
|
||||
RELOC_NUMBER (R_ARM_XPC25, 15) /* obsolete */
|
||||
RELOC_NUMBER (R_ARM_THM_XPC22, 16) /* obsolete */
|
||||
RELOC_NUMBER (R_ARM_TLS_DTPMOD32, 17)
|
||||
RELOC_NUMBER (R_ARM_TLS_DTPOFF32, 18)
|
||||
RELOC_NUMBER (R_ARM_TLS_TPOFF32, 19)
|
||||
RELOC_NUMBER (R_ARM_COPY, 20) /* Copy symbol at runtime. */
|
||||
RELOC_NUMBER (R_ARM_GLOB_DAT, 21) /* Create GOT entry. */
|
||||
RELOC_NUMBER (R_ARM_JUMP_SLOT, 22) /* Create PLT entry. */
|
||||
RELOC_NUMBER (R_ARM_RELATIVE, 23) /* Adjust by program base. */
|
||||
RELOC_NUMBER (R_ARM_GOTOFF32, 24) /* 32 bit offset to GOT. */
|
||||
RELOC_NUMBER (R_ARM_BASE_PREL, 25) /* 32 bit PC relative offset to GOT. */
|
||||
RELOC_NUMBER (R_ARM_GOT_BREL, 26) /* 32 bit GOT entry. */
|
||||
RELOC_NUMBER (R_ARM_PLT32, 27) /* deprecated - 32 bit PLT address. */
|
||||
RELOC_NUMBER (R_ARM_CALL, 28)
|
||||
RELOC_NUMBER (R_ARM_JUMP24, 29)
|
||||
RELOC_NUMBER (R_ARM_THM_JUMP24, 30)
|
||||
RELOC_NUMBER (R_ARM_BASE_ABS, 31)
|
||||
RELOC_NUMBER (R_ARM_ALU_PCREL7_0, 32) /* obsolete */
|
||||
RELOC_NUMBER (R_ARM_ALU_PCREL15_8, 33) /* obsolete */
|
||||
RELOC_NUMBER (R_ARM_ALU_PCREL23_15, 34) /* obsolete */
|
||||
RELOC_NUMBER (R_ARM_LDR_SBREL_11_0, 35) /* deprecated, should have _NC suffix */
|
||||
RELOC_NUMBER (R_ARM_ALU_SBREL_19_12, 36) /* deprecated, should have _NC suffix */
|
||||
RELOC_NUMBER (R_ARM_ALU_SBREL_27_20, 37) /* deprecated, should have _CK suffix */
|
||||
RELOC_NUMBER (R_ARM_TARGET1, 38)
|
||||
RELOC_NUMBER (R_ARM_SBREL31, 39) /* deprecated */
|
||||
RELOC_NUMBER (R_ARM_V4BX, 40)
|
||||
RELOC_NUMBER (R_ARM_TARGET2, 41)
|
||||
RELOC_NUMBER (R_ARM_PREL31, 42)
|
||||
RELOC_NUMBER (R_ARM_MOVW_ABS_NC, 43)
|
||||
RELOC_NUMBER (R_ARM_MOVT_ABS, 44)
|
||||
RELOC_NUMBER (R_ARM_MOVW_PREL_NC, 45)
|
||||
RELOC_NUMBER (R_ARM_MOVT_PREL, 46)
|
||||
RELOC_NUMBER (R_ARM_THM_MOVW_ABS_NC, 47)
|
||||
RELOC_NUMBER (R_ARM_THM_MOVT_ABS, 48)
|
||||
RELOC_NUMBER (R_ARM_THM_MOVW_PREL_NC, 49)
|
||||
RELOC_NUMBER (R_ARM_THM_MOVT_PREL, 50)
|
||||
RELOC_NUMBER (R_ARM_THM_JUMP19, 51)
|
||||
RELOC_NUMBER (R_ARM_THM_JUMP6, 52)
|
||||
RELOC_NUMBER (R_ARM_THM_ALU_PREL_11_0, 53)
|
||||
RELOC_NUMBER (R_ARM_THM_PC12, 54)
|
||||
RELOC_NUMBER (R_ARM_ABS32_NOI, 55)
|
||||
RELOC_NUMBER (R_ARM_REL32_NOI, 56)
|
||||
RELOC_NUMBER (R_ARM_ALU_PC_G0_NC, 57)
|
||||
RELOC_NUMBER (R_ARM_ALU_PC_G0, 58)
|
||||
RELOC_NUMBER (R_ARM_ALU_PC_G1_NC, 59)
|
||||
RELOC_NUMBER (R_ARM_ALU_PC_G1, 60)
|
||||
RELOC_NUMBER (R_ARM_ALU_PC_G2, 61)
|
||||
RELOC_NUMBER (R_ARM_LDR_PC_G1, 62)
|
||||
RELOC_NUMBER (R_ARM_LDR_PC_G2, 63)
|
||||
RELOC_NUMBER (R_ARM_LDRS_PC_G0, 64)
|
||||
RELOC_NUMBER (R_ARM_LDRS_PC_G1, 65)
|
||||
RELOC_NUMBER (R_ARM_LDRS_PC_G2, 66)
|
||||
RELOC_NUMBER (R_ARM_LDC_PC_G0, 67)
|
||||
RELOC_NUMBER (R_ARM_LDC_PC_G1, 68)
|
||||
RELOC_NUMBER (R_ARM_LDC_PC_G2, 69)
|
||||
RELOC_NUMBER (R_ARM_ALU_SB_G0_NC, 70)
|
||||
RELOC_NUMBER (R_ARM_ALU_SB_G0, 71)
|
||||
RELOC_NUMBER (R_ARM_ALU_SB_G1_NC, 72)
|
||||
RELOC_NUMBER (R_ARM_ALU_SB_G1, 73)
|
||||
RELOC_NUMBER (R_ARM_ALU_SB_G2, 74)
|
||||
RELOC_NUMBER (R_ARM_LDR_SB_G0, 75)
|
||||
RELOC_NUMBER (R_ARM_LDR_SB_G1, 76)
|
||||
RELOC_NUMBER (R_ARM_LDR_SB_G2, 77)
|
||||
RELOC_NUMBER (R_ARM_LDRS_SB_G0, 78)
|
||||
RELOC_NUMBER (R_ARM_LDRS_SB_G1, 79)
|
||||
RELOC_NUMBER (R_ARM_LDRS_SB_G2, 80)
|
||||
RELOC_NUMBER (R_ARM_LDC_SB_G0, 81)
|
||||
RELOC_NUMBER (R_ARM_LDC_SB_G1, 82)
|
||||
RELOC_NUMBER (R_ARM_LDC_SB_G2, 83)
|
||||
RELOC_NUMBER (R_ARM_MOVW_BREL_NC, 84)
|
||||
RELOC_NUMBER (R_ARM_MOVT_BREL, 85)
|
||||
RELOC_NUMBER (R_ARM_MOVW_BREL, 86)
|
||||
RELOC_NUMBER (R_ARM_THM_MOVW_BREL_NC, 87)
|
||||
RELOC_NUMBER (R_ARM_THM_MOVT_BREL, 88)
|
||||
RELOC_NUMBER (R_ARM_THM_MOVW_BREL, 89)
|
||||
RELOC_NUMBER (R_ARM_TLS_GOTDESC, 90)
|
||||
RELOC_NUMBER (R_ARM_TLS_CALL, 91)
|
||||
RELOC_NUMBER (R_ARM_TLS_DESCSEQ, 92)
|
||||
RELOC_NUMBER (R_ARM_THM_TLS_CALL, 93)
|
||||
RELOC_NUMBER (R_ARM_PLT32_ABS, 94)
|
||||
RELOC_NUMBER (R_ARM_GOT_ABS, 95)
|
||||
RELOC_NUMBER (R_ARM_GOT_PREL, 96)
|
||||
RELOC_NUMBER (R_ARM_GOT_BREL12, 97)
|
||||
RELOC_NUMBER (R_ARM_GOTOFF12, 98)
|
||||
RELOC_NUMBER (R_ARM_GOTRELAX, 99)
|
||||
RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100) /* deprecated - old C++ abi */
|
||||
RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101) /* deprecated - old C++ abi */
|
||||
RELOC_NUMBER (R_ARM_THM_JUMP11, 102)
|
||||
RELOC_NUMBER (R_ARM_THM_JUMP8, 103)
|
||||
RELOC_NUMBER (R_ARM_TLS_GD32, 104)
|
||||
RELOC_NUMBER (R_ARM_TLS_LDM32, 105)
|
||||
RELOC_NUMBER (R_ARM_TLS_LDO32, 106)
|
||||
RELOC_NUMBER (R_ARM_TLS_IE32, 107)
|
||||
RELOC_NUMBER (R_ARM_TLS_LE32, 108)
|
||||
RELOC_NUMBER (R_ARM_TLS_LDO12, 109)
|
||||
RELOC_NUMBER (R_ARM_TLS_LE12, 110)
|
||||
RELOC_NUMBER (R_ARM_TLS_IE12GP, 111)
|
||||
/* 112 - 127 private range */
|
||||
RELOC_NUMBER (R_ARM_ME_TOO, 128) /* obsolete */
|
||||
RELOC_NUMBER (R_ARM_THM_TLS_DESCSEQ ,129)
|
||||
|
||||
RELOC_NUMBER (R_ARM_IRELATIVE, 160)
|
||||
|
||||
/* Extensions? R=read-only? */
|
||||
RELOC_NUMBER (R_ARM_RXPC25, 249)
|
||||
RELOC_NUMBER (R_ARM_RSBREL32, 250)
|
||||
RELOC_NUMBER (R_ARM_THM_RPC22, 251)
|
||||
RELOC_NUMBER (R_ARM_RREL32, 252)
|
||||
RELOC_NUMBER (R_ARM_RABS32, 253)
|
||||
RELOC_NUMBER (R_ARM_RPC24, 254)
|
||||
RELOC_NUMBER (R_ARM_RBASE, 255)
|
||||
|
||||
/* Unofficial names for some of the relocs. */
|
||||
FAKE_RELOC (R_ARM_GOTOFF, R_ARM_GOTOFF32) /* 32 bit offset to GOT. */
|
||||
FAKE_RELOC (R_ARM_THM_PC22, R_ARM_THM_CALL)
|
||||
FAKE_RELOC (R_ARM_THM_PC11, R_ARM_THM_JUMP11)
|
||||
FAKE_RELOC (R_ARM_THM_PC9, R_ARM_THM_JUMP8)
|
||||
|
||||
/* Relocs with both a different name, and (apparently) different meaning in
|
||||
GNU usage. */
|
||||
FAKE_RELOC (R_ARM_GOTPC, R_ARM_BASE_PREL) /* 32 bit PC relative offset to GOT. */
|
||||
FAKE_RELOC (R_ARM_GOT32, R_ARM_GOT_BREL) /* 32 bit GOT entry. */
|
||||
FAKE_RELOC (R_ARM_ROSEGREL32, R_ARM_SBREL31) /* ??? */
|
||||
FAKE_RELOC (R_ARM_AMP_VCALL9, R_ARM_BREL_ADJ) /* Thumb-something. Not used. */
|
||||
|
||||
END_RELOC_NUMBERS (R_ARM_max = 256)
|
||||
|
||||
#ifdef BFD_ARCH_SIZE
|
||||
/* EABI object attributes. */
|
||||
|
||||
enum
|
||||
{
|
||||
/* 0-3 are generic. */
|
||||
Tag_CPU_raw_name = 4,
|
||||
Tag_CPU_name,
|
||||
Tag_CPU_arch,
|
||||
Tag_CPU_arch_profile,
|
||||
Tag_ARM_ISA_use,
|
||||
Tag_THUMB_ISA_use,
|
||||
Tag_FP_arch,
|
||||
Tag_WMMX_arch,
|
||||
Tag_Advanced_SIMD_arch,
|
||||
Tag_PCS_config,
|
||||
Tag_ABI_PCS_R9_use,
|
||||
Tag_ABI_PCS_RW_data,
|
||||
Tag_ABI_PCS_RO_data,
|
||||
Tag_ABI_PCS_GOT_use,
|
||||
Tag_ABI_PCS_wchar_t,
|
||||
Tag_ABI_FP_rounding,
|
||||
Tag_ABI_FP_denormal,
|
||||
Tag_ABI_FP_exceptions,
|
||||
Tag_ABI_FP_user_exceptions,
|
||||
Tag_ABI_FP_number_model,
|
||||
Tag_ABI_align_needed,
|
||||
Tag_ABI_align_preserved,
|
||||
Tag_ABI_enum_size,
|
||||
Tag_ABI_HardFP_use,
|
||||
Tag_ABI_VFP_args,
|
||||
Tag_ABI_WMMX_args,
|
||||
Tag_ABI_optimization_goals,
|
||||
Tag_ABI_FP_optimization_goals,
|
||||
/* 32 is generic (Tag_compatibility). */
|
||||
Tag_undefined33 = 33,
|
||||
Tag_CPU_unaligned_access,
|
||||
Tag_undefined35,
|
||||
Tag_FP_HP_extension,
|
||||
Tag_undefined37,
|
||||
Tag_ABI_FP_16bit_format,
|
||||
Tag_undefined39,
|
||||
Tag_undefined40,
|
||||
Tag_undefined41,
|
||||
Tag_MPextension_use,
|
||||
Tag_undefined_43,
|
||||
Tag_DIV_use,
|
||||
Tag_nodefaults = 64,
|
||||
Tag_also_compatible_with,
|
||||
Tag_T2EE_use,
|
||||
Tag_conformance,
|
||||
Tag_Virtualization_use,
|
||||
Tag_undefined69,
|
||||
Tag_MPextension_use_legacy,
|
||||
|
||||
/* The following tags are legacy names for other tags. */
|
||||
Tag_VFP_arch = Tag_FP_arch,
|
||||
Tag_ABI_align8_needed = Tag_ABI_align_needed,
|
||||
Tag_ABI_align8_preserved = Tag_ABI_align_preserved,
|
||||
Tag_VFP_HP_extension = Tag_FP_HP_extension
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/* The name of the note section used to identify arm variants. */
|
||||
#define ARM_NOTE_SECTION ".note.gnu.arm.ident"
|
||||
|
||||
/* Special section names. */
|
||||
#define ELF_STRING_ARM_unwind ".ARM.exidx"
|
||||
#define ELF_STRING_ARM_unwind_info ".ARM.extab"
|
||||
#define ELF_STRING_ARM_unwind_once ".gnu.linkonce.armexidx."
|
||||
#define ELF_STRING_ARM_unwind_info_once ".gnu.linkonce.armextab."
|
||||
|
||||
enum arm_st_branch_type {
|
||||
ST_BRANCH_TO_ARM,
|
||||
ST_BRANCH_TO_THUMB,
|
||||
ST_BRANCH_LONG,
|
||||
ST_BRANCH_UNKNOWN
|
||||
};
|
||||
|
||||
#define ARM_SYM_BRANCH_TYPE(SYM) \
|
||||
((enum arm_st_branch_type) (SYM)->st_target_internal)
|
||||
|
||||
#endif /* _ELF_ARM_H */
|
86
include/elf/avr.h
Normal file
86
include/elf/avr.h
Normal file
@ -0,0 +1,86 @@
|
||||
/* AVR ELF support for BFD.
|
||||
Copyright 1999, 2000, 2004, 2006, 2010, 2012
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Denis Chertykov <denisc@overta.ru>
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _ELF_AVR_H
|
||||
#define _ELF_AVR_H
|
||||
|
||||
#include "elf/reloc-macros.h"
|
||||
|
||||
/* Processor specific flags for the ELF header e_flags field. */
|
||||
#define EF_AVR_MACH 0x7F
|
||||
|
||||
/* If bit #7 is set, it is assumed that the elf file uses local symbols
|
||||
as reference for the relocations so that linker relaxation is possible. */
|
||||
#define EF_AVR_LINKRELAX_PREPARED 0x80
|
||||
|
||||
#define E_AVR_MACH_AVR1 1
|
||||
#define E_AVR_MACH_AVR2 2
|
||||
#define E_AVR_MACH_AVR25 25
|
||||
#define E_AVR_MACH_AVR3 3
|
||||
#define E_AVR_MACH_AVR31 31
|
||||
#define E_AVR_MACH_AVR35 35
|
||||
#define E_AVR_MACH_AVR4 4
|
||||
#define E_AVR_MACH_AVR5 5
|
||||
#define E_AVR_MACH_AVR51 51
|
||||
#define E_AVR_MACH_AVR6 6
|
||||
#define E_AVR_MACH_XMEGA1 101
|
||||
#define E_AVR_MACH_XMEGA2 102
|
||||
#define E_AVR_MACH_XMEGA3 103
|
||||
#define E_AVR_MACH_XMEGA4 104
|
||||
#define E_AVR_MACH_XMEGA5 105
|
||||
#define E_AVR_MACH_XMEGA6 106
|
||||
#define E_AVR_MACH_XMEGA7 107
|
||||
|
||||
/* Relocations. */
|
||||
START_RELOC_NUMBERS (elf_avr_reloc_type)
|
||||
RELOC_NUMBER (R_AVR_NONE, 0)
|
||||
RELOC_NUMBER (R_AVR_32, 1)
|
||||
RELOC_NUMBER (R_AVR_7_PCREL, 2)
|
||||
RELOC_NUMBER (R_AVR_13_PCREL, 3)
|
||||
RELOC_NUMBER (R_AVR_16, 4)
|
||||
RELOC_NUMBER (R_AVR_16_PM, 5)
|
||||
RELOC_NUMBER (R_AVR_LO8_LDI, 6)
|
||||
RELOC_NUMBER (R_AVR_HI8_LDI, 7)
|
||||
RELOC_NUMBER (R_AVR_HH8_LDI, 8)
|
||||
RELOC_NUMBER (R_AVR_LO8_LDI_NEG, 9)
|
||||
RELOC_NUMBER (R_AVR_HI8_LDI_NEG, 10)
|
||||
RELOC_NUMBER (R_AVR_HH8_LDI_NEG, 11)
|
||||
RELOC_NUMBER (R_AVR_LO8_LDI_PM, 12)
|
||||
RELOC_NUMBER (R_AVR_HI8_LDI_PM, 13)
|
||||
RELOC_NUMBER (R_AVR_HH8_LDI_PM, 14)
|
||||
RELOC_NUMBER (R_AVR_LO8_LDI_PM_NEG, 15)
|
||||
RELOC_NUMBER (R_AVR_HI8_LDI_PM_NEG, 16)
|
||||
RELOC_NUMBER (R_AVR_HH8_LDI_PM_NEG, 17)
|
||||
RELOC_NUMBER (R_AVR_CALL, 18)
|
||||
RELOC_NUMBER (R_AVR_LDI, 19)
|
||||
RELOC_NUMBER (R_AVR_6, 20)
|
||||
RELOC_NUMBER (R_AVR_6_ADIW, 21)
|
||||
RELOC_NUMBER (R_AVR_MS8_LDI, 22)
|
||||
RELOC_NUMBER (R_AVR_MS8_LDI_NEG, 23)
|
||||
RELOC_NUMBER (R_AVR_LO8_LDI_GS, 24)
|
||||
RELOC_NUMBER (R_AVR_HI8_LDI_GS, 25)
|
||||
RELOC_NUMBER (R_AVR_8, 26)
|
||||
RELOC_NUMBER (R_AVR_8_LO8, 27)
|
||||
RELOC_NUMBER (R_AVR_8_HI8, 28)
|
||||
RELOC_NUMBER (R_AVR_8_HLO8, 29)
|
||||
END_RELOC_NUMBERS (R_AVR_max)
|
||||
|
||||
#endif /* _ELF_AVR_H */
|
95
include/elf/bfin.h
Normal file
95
include/elf/bfin.h
Normal file
@ -0,0 +1,95 @@
|
||||
/* Blackfin ELF support for BFD.
|
||||
Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _ELF_BFIN_H
|
||||
#define _ELF_BFIN_H
|
||||
|
||||
#include "elf/reloc-macros.h"
|
||||
|
||||
START_RELOC_NUMBERS (elf_bfin_reloc_type)
|
||||
RELOC_NUMBER (R_BFIN_UNUSED0, 0x00) /* relocation type 0 is not defined */
|
||||
RELOC_NUMBER (R_BFIN_PCREL5M2, 0x01) /* LSETUP part a */
|
||||
RELOC_NUMBER (R_BFIN_UNUSED1, 0x02) /* relocation type 2 is not defined */
|
||||
RELOC_NUMBER (R_BFIN_PCREL10, 0x03) /* type 3, 0x00) if cc jump <target> */
|
||||
RELOC_NUMBER (R_BFIN_PCREL12_JUMP, 0x04) /* type 4, 0x00) jump <target> */
|
||||
RELOC_NUMBER (R_BFIN_RIMM16, 0x05) /* type 0x5, 0x00) rN = <target> */
|
||||
RELOC_NUMBER (R_BFIN_LUIMM16, 0x06) /* # 0x6, 0x00) preg.l=<target> Load imm 16 to lower half */
|
||||
RELOC_NUMBER (R_BFIN_HUIMM16, 0x07) /* # 0x7, 0x00) preg.h=<target> Load imm 16 to upper half */
|
||||
RELOC_NUMBER (R_BFIN_PCREL12_JUMP_S, 0x08) /* # 0x8 jump.s <target> */
|
||||
RELOC_NUMBER (R_BFIN_PCREL24_JUMP_X, 0x09) /* # 0x9 jump.x <target> */
|
||||
RELOC_NUMBER (R_BFIN_PCREL24, 0x0a) /* # 0xa call <target> , 0x00) not expandable */
|
||||
RELOC_NUMBER (R_BFIN_UNUSEDB, 0x0b) /* # 0xb not generated */
|
||||
RELOC_NUMBER (R_BFIN_UNUSEDC, 0x0c) /* # 0xc not used */
|
||||
RELOC_NUMBER (R_BFIN_PCREL24_JUMP_L, 0x0d) /* 0xd jump.l <target> */
|
||||
RELOC_NUMBER (R_BFIN_PCREL24_CALL_X, 0x0e) /* 0xE, 0x00) call.x <target> if <target> is above 24 bit limit call through P1 */
|
||||
RELOC_NUMBER (R_BFIN_VAR_EQ_SYMB, 0x0f) /* 0xf, 0x00) linker should treat it same as 0x12 */
|
||||
RELOC_NUMBER (R_BFIN_BYTE_DATA, 0x10) /* 0x10, 0x00) .byte var = symbol */
|
||||
RELOC_NUMBER (R_BFIN_BYTE2_DATA, 0x11) /* 0x11, 0x00) .byte2 var = symbol */
|
||||
RELOC_NUMBER (R_BFIN_BYTE4_DATA, 0x12) /* 0x12, 0x00) .byte4 var = symbol and .var var=symbol */
|
||||
RELOC_NUMBER (R_BFIN_PCREL11, 0x13) /* 0x13, 0x00) lsetup part b */
|
||||
RELOC_NUMBER (R_BFIN_GOT17M4, 0x14)
|
||||
RELOC_NUMBER (R_BFIN_GOTHI, 0x15)
|
||||
RELOC_NUMBER (R_BFIN_GOTLO, 0x16)
|
||||
RELOC_NUMBER (R_BFIN_FUNCDESC, 0x17)
|
||||
RELOC_NUMBER (R_BFIN_FUNCDESC_GOT17M4, 0x18)
|
||||
RELOC_NUMBER (R_BFIN_FUNCDESC_GOTHI, 0x19)
|
||||
RELOC_NUMBER (R_BFIN_FUNCDESC_GOTLO, 0x1a)
|
||||
RELOC_NUMBER (R_BFIN_FUNCDESC_VALUE, 0x1b)
|
||||
RELOC_NUMBER (R_BFIN_FUNCDESC_GOTOFF17M4, 0x1c)
|
||||
RELOC_NUMBER (R_BFIN_FUNCDESC_GOTOFFHI, 0x1d)
|
||||
RELOC_NUMBER (R_BFIN_FUNCDESC_GOTOFFLO, 0x1e)
|
||||
RELOC_NUMBER (R_BFIN_GOTOFF17M4, 0x1f)
|
||||
RELOC_NUMBER (R_BFIN_GOTOFFHI, 0x20)
|
||||
RELOC_NUMBER (R_BFIN_GOTOFFLO, 0x21)
|
||||
|
||||
RELOC_NUMBER (R_BFIN_PUSH, 0xE0)
|
||||
RELOC_NUMBER (R_BFIN_CONST, 0xE1)
|
||||
RELOC_NUMBER (R_BFIN_ADD, 0xE2)
|
||||
RELOC_NUMBER (R_BFIN_SUB, 0xE3)
|
||||
RELOC_NUMBER (R_BFIN_MULT, 0xE4)
|
||||
RELOC_NUMBER (R_BFIN_DIV, 0xE5)
|
||||
RELOC_NUMBER (R_BFIN_MOD, 0xE6)
|
||||
RELOC_NUMBER (R_BFIN_LSHIFT, 0xE7)
|
||||
RELOC_NUMBER (R_BFIN_RSHIFT, 0xE8)
|
||||
RELOC_NUMBER (R_BFIN_AND, 0xE9)
|
||||
RELOC_NUMBER (R_BFIN_OR, 0xEA)
|
||||
RELOC_NUMBER (R_BFIN_XOR, 0xEB)
|
||||
RELOC_NUMBER (R_BFIN_LAND, 0xEC)
|
||||
RELOC_NUMBER (R_BFIN_LOR, 0xED)
|
||||
RELOC_NUMBER (R_BFIN_LEN, 0xEE)
|
||||
RELOC_NUMBER (R_BFIN_NEG, 0xEF)
|
||||
RELOC_NUMBER (R_BFIN_COMP, 0xF0)
|
||||
RELOC_NUMBER (R_BFIN_PAGE, 0xF1)
|
||||
RELOC_NUMBER (R_BFIN_HWPAGE, 0xF2)
|
||||
RELOC_NUMBER (R_BFIN_ADDR, 0xF3)
|
||||
RELOC_NUMBER (R_BFIN_PLTPC, 0x40) /* PLT gnu only relocation */
|
||||
RELOC_NUMBER (R_BFIN_GOT, 0x41) /* GOT gnu only relocation */
|
||||
RELOC_NUMBER (R_BFIN_GNU_VTINHERIT, 0x42) /* C++, gnu only */
|
||||
RELOC_NUMBER (R_BFIN_GNU_VTENTRY, 0x43) /* C++, gnu only */
|
||||
END_RELOC_NUMBERS (R_BFIN_max)
|
||||
|
||||
/* Processor specific flags for the ELF header e_flags field. */
|
||||
#define EF_BFIN_PIC 0x00000001 /* -fpic */
|
||||
#define EF_BFIN_FDPIC 0x00000002 /* -mfdpic */
|
||||
|
||||
#define EF_BFIN_CODE_IN_L1 0x00000010 /* --code-in-l1 */
|
||||
#define EF_BFIN_DATA_IN_L1 0x00000020 /* --data-in-l1 */
|
||||
|
||||
#define EF_BFIN_PIC_FLAGS (EF_BFIN_PIC | EF_BFIN_FDPIC)
|
||||
#endif /* _ELF_BFIN_H */
|
1001
include/elf/common.h
Normal file
1001
include/elf/common.h
Normal file
File diff suppressed because it is too large
Load Diff
62
include/elf/cr16.h
Normal file
62
include/elf/cr16.h
Normal file
@ -0,0 +1,62 @@
|
||||
/* CR16 ELF support for BFD.
|
||||
Copyright 2007, 2010 Free Software Foundation, Inc.
|
||||
Contributed by M R Swami Reddy.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _ELF_CR16_H
|
||||
#define _ELF_CR16_H
|
||||
|
||||
#include "elf/reloc-macros.h"
|
||||
|
||||
/* Creating indices for reloc_map_index array. */
|
||||
START_RELOC_NUMBERS(elf_cr16_reloc_type)
|
||||
RELOC_NUMBER (R_CR16_NONE, 0)
|
||||
RELOC_NUMBER (R_CR16_NUM8, 1)
|
||||
RELOC_NUMBER (R_CR16_NUM16, 2)
|
||||
RELOC_NUMBER (R_CR16_NUM32, 3)
|
||||
RELOC_NUMBER (R_CR16_NUM32a, 4)
|
||||
RELOC_NUMBER (R_CR16_REGREL4, 5)
|
||||
RELOC_NUMBER (R_CR16_REGREL4a, 6)
|
||||
RELOC_NUMBER (R_CR16_REGREL14, 7)
|
||||
RELOC_NUMBER (R_CR16_REGREL14a, 8)
|
||||
RELOC_NUMBER (R_CR16_REGREL16, 9)
|
||||
RELOC_NUMBER (R_CR16_REGREL20, 10)
|
||||
RELOC_NUMBER (R_CR16_REGREL20a, 11)
|
||||
RELOC_NUMBER (R_CR16_ABS20, 12)
|
||||
RELOC_NUMBER (R_CR16_ABS24, 13)
|
||||
RELOC_NUMBER (R_CR16_IMM4, 14)
|
||||
RELOC_NUMBER (R_CR16_IMM8, 15)
|
||||
RELOC_NUMBER (R_CR16_IMM16, 16)
|
||||
RELOC_NUMBER (R_CR16_IMM20, 17)
|
||||
RELOC_NUMBER (R_CR16_IMM24, 18)
|
||||
RELOC_NUMBER (R_CR16_IMM32, 19)
|
||||
RELOC_NUMBER (R_CR16_IMM32a, 20)
|
||||
RELOC_NUMBER (R_CR16_DISP4, 21)
|
||||
RELOC_NUMBER (R_CR16_DISP8, 22)
|
||||
RELOC_NUMBER (R_CR16_DISP16, 23)
|
||||
RELOC_NUMBER (R_CR16_DISP24, 24)
|
||||
RELOC_NUMBER (R_CR16_DISP24a, 25)
|
||||
RELOC_NUMBER (R_CR16_SWITCH8, 26)
|
||||
RELOC_NUMBER (R_CR16_SWITCH16, 27)
|
||||
RELOC_NUMBER (R_CR16_SWITCH32, 28)
|
||||
RELOC_NUMBER (R_CR16_GOT_REGREL20, 29)
|
||||
RELOC_NUMBER (R_CR16_GOTC_REGREL20, 30)
|
||||
RELOC_NUMBER (R_CR16_GLOB_DAT, 31)
|
||||
END_RELOC_NUMBERS(R_CR16_MAX)
|
||||
|
||||
#endif /* _ELF_CR16_H */
|
258
include/elf/cr16c.h
Normal file
258
include/elf/cr16c.h
Normal file
@ -0,0 +1,258 @@
|
||||
/* CR16C ELF support for BFD.
|
||||
Copyright 2004, 2008, 2010 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _ELF_CR16C_H
|
||||
#define _ELF_CR16C_H
|
||||
|
||||
#include "bfd.h"
|
||||
#include "elf/reloc-macros.h"
|
||||
|
||||
/* Creating indices for reloc_map_index array. */
|
||||
START_RELOC_NUMBERS (elf_cr16c_reloc_type)
|
||||
RELOC_NUMBER (RINDEX_16C_NUM08, 0)
|
||||
RELOC_NUMBER (RINDEX_16C_NUM08_C, 1)
|
||||
RELOC_NUMBER (RINDEX_16C_NUM16, 2)
|
||||
RELOC_NUMBER (RINDEX_16C_NUM16_C, 3)
|
||||
RELOC_NUMBER (RINDEX_16C_NUM32, 4)
|
||||
RELOC_NUMBER (RINDEX_16C_NUM32_C, 5)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP04, 6)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP04_C, 7)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP08, 8)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP08_C, 9)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP16, 10)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP16_C, 11)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP24, 12)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP24_C, 13)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP24a, 14)
|
||||
RELOC_NUMBER (RINDEX_16C_DISP24a_C, 15)
|
||||
RELOC_NUMBER (RINDEX_16C_REG04, 16)
|
||||
RELOC_NUMBER (RINDEX_16C_REG04_C, 17)
|
||||
RELOC_NUMBER (RINDEX_16C_REG04a, 18)
|
||||
RELOC_NUMBER (RINDEX_16C_REG04a_C, 19)
|
||||
RELOC_NUMBER (RINDEX_16C_REG14, 20)
|
||||
RELOC_NUMBER (RINDEX_16C_REG14_C, 21)
|
||||
RELOC_NUMBER (RINDEX_16C_REG16, 22)
|
||||
RELOC_NUMBER (RINDEX_16C_REG16_C, 23)
|
||||
RELOC_NUMBER (RINDEX_16C_REG20, 24)
|
||||
RELOC_NUMBER (RINDEX_16C_REG20_C, 25)
|
||||
RELOC_NUMBER (RINDEX_16C_ABS20, 26)
|
||||
RELOC_NUMBER (RINDEX_16C_ABS20_C, 27)
|
||||
RELOC_NUMBER (RINDEX_16C_ABS24, 28)
|
||||
RELOC_NUMBER (RINDEX_16C_ABS24_C, 29)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM04, 30)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM04_C, 31)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM16, 32)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM16_C, 33)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM20, 34)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM20_C, 35)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM24, 36)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM24_C, 37)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM32, 38)
|
||||
RELOC_NUMBER (RINDEX_16C_IMM32_C, 39)
|
||||
END_RELOC_NUMBERS (RINDEX_16C_MAX)
|
||||
|
||||
/* CR16C Relocation Types ('cr_reloc_type' entry in the reloc_map structure).
|
||||
The relocation constant name is determined as follows :
|
||||
|
||||
R_16C_<format><size>[_C]
|
||||
|
||||
Where :
|
||||
|
||||
<format> is one of the following:
|
||||
NUM - R_NUMBER mnemonic,
|
||||
DISP - R_16C_DISPL mnemonic,
|
||||
REG - R_16C_REGREL mnemonic,
|
||||
ABS - R_16C_ABS mnemonic,
|
||||
IMM - R_16C_IMMED mnemonic,
|
||||
<size> stands for R_S_16C_<size>
|
||||
_C means 'code label' and is only added when R_ADDRTYPE subfield
|
||||
is of type R_CODE_ADDR. */
|
||||
|
||||
/* The table below shows what the hex digits in the definition of the
|
||||
relocation type constants correspond to.
|
||||
------------------------------------------------------------------
|
||||
R_SIZESP R_FORMAT R_RELTO R_ADDRTYPE
|
||||
------------------------------------------------------------------ */
|
||||
/* R_S_16C_08 R_NUMBER R_ABS R_ADDRESS */
|
||||
#define R_16C_NUM08 0X0001
|
||||
|
||||
/* R_S_16C_08 R_NUMBER R_ABS R_CODE_ADDR */
|
||||
#define R_16C_NUM08_C 0X0006
|
||||
|
||||
/* R_S_16C_16 R_NUMBER R_ABS R_ADDRESS */
|
||||
#define R_16C_NUM16 0X1001
|
||||
|
||||
/* R_S_16C_16 R_NUMBER R_ABS R_CODE_ADDR */
|
||||
#define R_16C_NUM16_C 0X1006
|
||||
|
||||
/* R_S_16C_32 R_NUMBER R_ABS R_ADDRESS */
|
||||
#define R_16C_NUM32 0X2001
|
||||
|
||||
/* R_S_16C_32 R_NUMBER R_ABS R_CODE_ADDR */
|
||||
#define R_16C_NUM32_C 0X2006
|
||||
|
||||
/* R_S_16C_04 R_16C_DISPL R_PCREL R_ADDRESS */
|
||||
#define R_16C_DISP04 0X5411
|
||||
|
||||
/* R_S_16C_04 R_16C_DISPL R_PCREL R_CODE_ADDR */
|
||||
#define R_16C_DISP04_C 0X5416
|
||||
|
||||
/* R_S_16C_08 R_16C_DISPL R_PCREL R_ADDRESS */
|
||||
#define R_16C_DISP08 0X0411
|
||||
|
||||
/* R_S_16C_08 R_16C_DISPL R_PCREL R_CODE_ADDR */
|
||||
#define R_16C_DISP08_C 0X0416
|
||||
|
||||
/* R_S_16C_16 R_16C_DISPL R_PCREL R_ADDRESS */
|
||||
#define R_16C_DISP16 0X1411
|
||||
|
||||
/* R_S_16C_16 R_16C_DISPL R_PCREL R_CODE_ADDR */
|
||||
#define R_16C_DISP16_C 0X1416
|
||||
|
||||
/* R_S_16C_24 R_16C_DISPL R_PCREL R_ADDRESS */
|
||||
#define R_16C_DISP24 0X7411
|
||||
|
||||
/* R_S_16C_24 R_16C_DISPL R_PCREL R_CODE_ADDR */
|
||||
#define R_16C_DISP24_C 0X7416
|
||||
|
||||
/* R_S_16C_24a R_16C_DISPL R_PCREL R_ADDRESS */
|
||||
#define R_16C_DISP24a 0X6411
|
||||
|
||||
/* R_S_16C_24a R_16C_DISPL R_PCREL R_CODE_ADDR */
|
||||
#define R_16C_DISP24a_C 0X6416
|
||||
|
||||
/* R_S_16C_04 R_16C_REGREL R_ABS R_ADDRESS */
|
||||
#define R_16C_REG04 0X5201
|
||||
|
||||
/* R_S_16C_04 R_16C_REGREL R_ABS R_CODE_ADDR */
|
||||
#define R_16C_REG04_C 0X5206
|
||||
|
||||
/* R_S_16C_04_a R_16C_REGREL R_ABS R_ADDRESS */
|
||||
#define R_16C_REG04a 0X4201
|
||||
|
||||
/* R_S_16C_04_a R_16C_REGREL R_ABS R_CODE_ADDR */
|
||||
#define R_16C_REG04a_C 0X4206
|
||||
|
||||
/* R_S_16C_14 R_16C_REGREL R_ABS R_ADDRESS */
|
||||
#define R_16C_REG14 0X3201
|
||||
|
||||
/* R_S_16C_14 R_16C_REGREL R_ABS R_CODE_ADDR */
|
||||
#define R_16C_REG14_C 0X3206
|
||||
|
||||
/* R_S_16C_16 R_16C_REGREL R_ABS R_ADDRESS */
|
||||
#define R_16C_REG16 0X1201
|
||||
|
||||
/* R_S_16C_16 R_16C_REGREL R_ABS R_CODE_ADDR */
|
||||
#define R_16C_REG16_C 0X1206
|
||||
|
||||
/* R_S_16C_20 R_16C_REGREL R_ABS R_ADDRESS */
|
||||
#define R_16C_REG20 0X8201
|
||||
|
||||
/* R_S_16C_20 R_16C_REGREL R_ABS R_CODE_ADDR */
|
||||
#define R_16C_REG20_C 0X8206
|
||||
|
||||
/* R_S_16C_20 R_16C_ABS R_ABS R_ADDRESS */
|
||||
#define R_16C_ABS20 0X8101
|
||||
|
||||
/* R_S_16C_20 R_16C_ABS R_ABS R_CODE_ADDR */
|
||||
#define R_16C_ABS20_C 0X8106
|
||||
|
||||
/* R_S_16C_24 R_16C_ABS R_ABS R_ADDRESS */
|
||||
#define R_16C_ABS24 0X7101
|
||||
|
||||
/* R_S_16C_24 R_16C_ABS R_ABS R_CODE_ADDR */
|
||||
#define R_16C_ABS24_C 0X7106
|
||||
|
||||
/* R_S_16C_04 R_16C_IMMED R_ABS R_ADDRESS */
|
||||
#define R_16C_IMM04 0X5301
|
||||
|
||||
/* R_S_16C_04 R_16C_IMMED R_ABS R_CODE_ADDR */
|
||||
#define R_16C_IMM04_C 0X5306
|
||||
|
||||
/* R_S_16C_16 R_16C_IMMED R_ABS R_ADDRESS */
|
||||
#define R_16C_IMM16 0X1301
|
||||
|
||||
/* R_S_16C_16 R_16C_IMMED R_ABS R_CODE_ADDR */
|
||||
#define R_16C_IMM16_C 0X1306
|
||||
|
||||
/* R_S_16C_20 R_16C_IMMED R_ABS R_ADDRESS */
|
||||
#define R_16C_IMM20 0X8301
|
||||
|
||||
/* R_S_16C_20 R_16C_IMMED R_ABS R_CODE_ADDR */
|
||||
#define R_16C_IMM20_C 0X8306
|
||||
|
||||
/* R_S_16C_24 R_16C_IMMED R_ABS R_ADDRESS */
|
||||
#define R_16C_IMM24 0X7301
|
||||
|
||||
/* R_S_16C_24 R_16C_IMMED R_ABS R_CODE_ADDR */
|
||||
#define R_16C_IMM24_C 0X7306
|
||||
|
||||
/* R_S_16C_32 R_16C_IMMED R_ABS R_ADDRESS */
|
||||
#define R_16C_IMM32 0X2301
|
||||
|
||||
/* R_S_16C_32 R_16C_IMMED R_ABS R_CODE_ADDR */
|
||||
#define R_16C_IMM32_C 0X2306
|
||||
|
||||
|
||||
/* Relocation item type. */
|
||||
#define R_ADDRTYPE 0x000f
|
||||
#define R_ADDRESS 0x0001 /* Take address of symbol. */
|
||||
#define R_CODE_ADDR 0x0006 /* Take address of symbol divided by 2. */
|
||||
|
||||
/* Relocation action. */
|
||||
#define R_RELTO 0x00f0
|
||||
#define R_ABS 0x0000 /* Keep symbol's address as such. */
|
||||
#define R_PCREL 0x0010 /* Subtract the pc address of hole. */
|
||||
|
||||
/* Relocation item data format. */
|
||||
#define R_FORMAT 0x0f00
|
||||
#define R_NUMBER 0x0000 /* Retain as two's complement value. */
|
||||
#define R_16C_DISPL 0x0400 /* CR16C displacement type. */
|
||||
#define R_16C_ABS 0x0100 /* CR16C absolute type. */
|
||||
#define R_16C_REGREL 0x0200 /* CR16C register-relative type. */
|
||||
#define R_16C_IMMED 0x0300 /* CR16C immediate type. */
|
||||
|
||||
/* Relocation item size. */
|
||||
#define R_SIZESP 0xf000
|
||||
#define R_S_16C_04 0x5000
|
||||
#define R_S_16C_04_a 0x4000
|
||||
#define R_S_16C_08 0x0000
|
||||
#define R_S_16C_14 0x3000
|
||||
#define R_S_16C_16 0x1000
|
||||
#define R_S_16C_20 0x8000
|
||||
#define R_S_16C_24_a 0x6000
|
||||
#define R_S_16C_24 0x7000
|
||||
#define R_S_16C_32 0x2000
|
||||
|
||||
|
||||
/* Processor specific section indices. These sections do not actually
|
||||
exist. Symbols with a st_shndx field corresponding to one of these
|
||||
values have a special meaning. */
|
||||
|
||||
/* Far common symbol. */
|
||||
#define SHN_CR16C_FCOMMON SHN_LORESERVE
|
||||
#define SHN_CR16C_NCOMMON (SHN_LORESERVE + 1)
|
||||
|
||||
typedef struct reloc_map
|
||||
{
|
||||
unsigned short cr_reloc_type; /* CR relocation type. */
|
||||
bfd_reloc_code_real_type bfd_reloc_enum; /* BFD relocation enum. */
|
||||
} RELOC_MAP;
|
||||
|
||||
#endif /* _ELF_CR16C_H */
|
193
include/elf/cris.h
Normal file
193
include/elf/cris.h
Normal file
@ -0,0 +1,193 @@
|
||||
/* CRIS ELF support for BFD.
|
||||
Copyright 2000, 2001, 2004, 2010 Free Software Foundation, Inc.
|
||||
Contributed by Axis Communications AB, Lund, Sweden.
|
||||
Written by Hans-Peter Nilsson.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _ELF_CRIS_H
|
||||
#define _ELF_CRIS_H
|
||||
|
||||
#include "elf/reloc-macros.h"
|
||||
|
||||
/* Relocations. */
|
||||
START_RELOC_NUMBERS (elf_cris_reloc_type)
|
||||
RELOC_NUMBER (R_CRIS_NONE, 0)
|
||||
RELOC_NUMBER (R_CRIS_8, 1)
|
||||
RELOC_NUMBER (R_CRIS_16, 2)
|
||||
RELOC_NUMBER (R_CRIS_32, 3)
|
||||
|
||||
/* The "PC" position is the location right after the relocation. */
|
||||
RELOC_NUMBER (R_CRIS_8_PCREL, 4)
|
||||
RELOC_NUMBER (R_CRIS_16_PCREL, 5)
|
||||
RELOC_NUMBER (R_CRIS_32_PCREL, 6)
|
||||
|
||||
RELOC_NUMBER (R_CRIS_GNU_VTINHERIT, 7)
|
||||
RELOC_NUMBER (R_CRIS_GNU_VTENTRY, 8)
|
||||
|
||||
/* Copy contents at dynlinking. Generated by the linker.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_COPY. */
|
||||
RELOC_NUMBER (R_CRIS_COPY, 9)
|
||||
|
||||
/* Create GOT entry. Generated by the linker.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_GLOB_DAT. */
|
||||
RELOC_NUMBER (R_CRIS_GLOB_DAT, 10)
|
||||
|
||||
/* Create PLT entry. Generated by the linker.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_JUMP_SLOT. */
|
||||
RELOC_NUMBER (R_CRIS_JUMP_SLOT, 11)
|
||||
|
||||
/* Adjust by program base. Generated by the linker.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_RELATIVE. */
|
||||
RELOC_NUMBER (R_CRIS_RELATIVE, 12)
|
||||
|
||||
/* A 16-bit offset to entry in GOT and request to create GOT entry for
|
||||
that symbol.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_16_GOT. */
|
||||
RELOC_NUMBER (R_CRIS_16_GOT, 13)
|
||||
|
||||
/* A 32-bit offset to entry in GOT and request to create GOT entry for
|
||||
that symbol.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_32_GOT. */
|
||||
RELOC_NUMBER (R_CRIS_32_GOT, 14)
|
||||
|
||||
/* A 16-bit offset to entry in PLT part of GOT and request to create PLT
|
||||
entry for that symbol.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_16_GOTPLT. */
|
||||
RELOC_NUMBER (R_CRIS_16_GOTPLT, 15)
|
||||
|
||||
/* A 32-bit offset to entry in PLT part of GOT and request to create PLT
|
||||
entry for that symbol.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_32_GOTPLT. */
|
||||
RELOC_NUMBER (R_CRIS_32_GOTPLT, 16)
|
||||
|
||||
/* A 32-bit offset from GOT to (local) symbol: no GOT entry should be
|
||||
necessary.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_32_GOTREL. */
|
||||
RELOC_NUMBER (R_CRIS_32_GOTREL, 17)
|
||||
|
||||
/* A 32-bit offset from GOT to entry for this symbol in PLT and request
|
||||
to create PLT entry for symbol.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_32_GOTREL. */
|
||||
RELOC_NUMBER (R_CRIS_32_PLT_GOTREL, 18)
|
||||
|
||||
/* A 32-bit offset from location after this relocation (addend specifies
|
||||
offset) to entry for this symbol in PLT and request to create PLT
|
||||
entry for symbol.
|
||||
The BFD equivalent is BFD_RELOC_CRIS_32_PLT_PCREL. */
|
||||
RELOC_NUMBER (R_CRIS_32_PLT_PCREL, 19)
|
||||
|
||||
/* An assembler-generated-only relocation, instructing the linker to
|
||||
reserve two GOT slots, carrying the R_CRIS_DTP relocation for the
|
||||
symbol (pointing to the first slot, the relocation fills in
|
||||
both). The value is a 32-bit-value, relative to the start of the
|
||||
GOT. Assembly syntax: "sym:GDGOTREL". */
|
||||
RELOC_NUMBER (R_CRIS_32_GOT_GD, 20)
|
||||
|
||||
/* Similar to R_CRIS_32_GOT_GD, but the value is a 16-bit unsigned
|
||||
number, limiting access to 65536/4 global symbols per module (or
|
||||
65536/8 thread variables; loosely speaking G*4+T*8 < 65536, where
|
||||
T is the number of thread variables and G is the number of other
|
||||
external global variables and functions). Assembly syntax:
|
||||
"sym:GDGOTREL16". */
|
||||
RELOC_NUMBER (R_CRIS_16_GOT_GD, 21)
|
||||
|
||||
/* Similar to R_CRIS_32_GOT_GD, but the value is the absolute
|
||||
address of the GOT entry. Disallowed in DSOs created with
|
||||
-shared. Assembly syntax: "sym:GD". */
|
||||
RELOC_NUMBER (R_CRIS_32_GD, 22)
|
||||
|
||||
/* A linker-generated-only relocation, instructing the dynamic
|
||||
linker to fill in the module ID and module-relative-TLS-block
|
||||
offset of the symbol in question, used for GOT entries. Note
|
||||
that this relocation instructs to fill in two 32-bit values. */
|
||||
RELOC_NUMBER (R_CRIS_DTP, 23)
|
||||
|
||||
/* An assembler-generated-only relocation, instructing the linker to
|
||||
reserve the first two GOT slots, and attach the R_CRIS_DTPMOD
|
||||
relocation(*) for the module to the first slot, the second
|
||||
containing zero. The value is 32 bits, the offset from the start
|
||||
of the TLS block of the module to the thread-local symbol
|
||||
mentioned in the relocation. This relocation must only be applied
|
||||
to module-local symbols. Assembly syntax: "expr:DTPREL". */
|
||||
RELOC_NUMBER (R_CRIS_32_DTPREL, 24)
|
||||
|
||||
/* Similar to R_CRIS_32_DTPREL, but the value is a 16-bit signed
|
||||
number, limiting the size of thread-variables of the DSO to 32768
|
||||
bytes. (Note: matches both model 1 and 2 and allows use of addo.w
|
||||
as the instruction where this relocation is used.) Assembly
|
||||
syntax: "expr:DTPREL16". */
|
||||
RELOC_NUMBER (R_CRIS_16_DTPREL, 25)
|
||||
|
||||
/* An assembler-generated-only relocation, instructing the linker to
|
||||
reserve a GOT slot and attach the R_CRIS_32_TPREL relocation for
|
||||
the symbol in question. The value is 32 bits, which is the
|
||||
GOT-relative offset of the slot. Assembly syntax:
|
||||
"sym:TPOFFGOT". */
|
||||
RELOC_NUMBER (R_CRIS_32_GOT_TPREL, 26)
|
||||
|
||||
/* Similar to R_CRIS_32_TPREL, but the value is a 16-bit positive
|
||||
number, limiting the number of thread- and global variables of
|
||||
the DSO to 32768/4. Assembly syntax: "sym:TPOFFGOT16". */
|
||||
RELOC_NUMBER (R_CRIS_16_GOT_TPREL, 27)
|
||||
|
||||
/* An assembler- and linker-generated relocation, instructing to
|
||||
resolve the symbol in question yielding the TLS offset of the
|
||||
thread variable, relative to the global TLS block. Not allowed
|
||||
as input when generating a DSO. Assembly syntax:
|
||||
"expr:TPOFF". */
|
||||
RELOC_NUMBER (R_CRIS_32_TPREL, 28)
|
||||
|
||||
/* Similar to R_CRIS_32_TPREL, but only applicable to executables
|
||||
compiled with -msmall-tls. Not allowed in a DSO. The value is a
|
||||
16-bit signed number, limiting the size of thread-variables of
|
||||
the executable to 32768 bytes. (Note: being signed makes it match
|
||||
both model 1 and 2 and allows use of addo.w as the instruction
|
||||
where this relocation is applied.) Assembly syntax:
|
||||
"expr:TPOFF16". */
|
||||
RELOC_NUMBER (R_CRIS_16_TPREL, 29)
|
||||
|
||||
/* A linker-generated-only relocation, instructing the dynamic
|
||||
linker to fill in the current module ID, used for GOT entries
|
||||
(usually the fourth one). */
|
||||
RELOC_NUMBER (R_CRIS_DTPMOD, 30)
|
||||
|
||||
/* Similar to R_CRIS_32_GOT_TPREL, but the value is the absolute
|
||||
address of the GOT entry. Disallowed in DSOs created with
|
||||
-shared. Assembly syntax: "sym:IE". */
|
||||
RELOC_NUMBER (R_CRIS_32_IE, 31)
|
||||
|
||||
/* No other relocs must be visible outside the assembler. */
|
||||
|
||||
END_RELOC_NUMBERS (R_CRIS_max)
|
||||
|
||||
/* User symbols in this file have a leading underscore. */
|
||||
#define EF_CRIS_UNDERSCORE 0x00000001
|
||||
|
||||
/* This is a mask for different incompatible machine variants. */
|
||||
#define EF_CRIS_VARIANT_MASK 0x0000000e
|
||||
|
||||
/* Variant 0; may contain v0..10 object. */
|
||||
#define EF_CRIS_VARIANT_ANY_V0_V10 0x00000000
|
||||
|
||||
/* Variant 1; contains v32 object. */
|
||||
#define EF_CRIS_VARIANT_V32 0x00000002
|
||||
|
||||
/* Variant 2; contains object compatible with v32 and v10. */
|
||||
#define EF_CRIS_VARIANT_COMMON_V10_V32 0x00000004
|
||||
|
||||
#endif /* _ELF_CRIS_H */
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user