Commit 2fa2181a authored by Andreas Jaeger's avatar Andreas Jaeger

This commit was manufactured by cvs2svn to create tag


git-svn-id: 6601e6e8-4d26-0410-a679-8f2142522ccc
parent 69cb7dcd
2001-03-19 Geert Bosch <>
* libraries.tex: (Unwind Library Interface): New section.
2001-03-19 Andreas Jaeger <>
* conventions.tex,low-level-sys-info.tex,object-files.tex: Fix
2001-03-07 Andreas Jaeger <>, Jan Hubicka <>
* low-level-sys-info.tex: Add section on auxiliary vectors,
rewrite register passing conventions.
2001-02-27 Andreas Jaeger <>
* low-level-sys-info.tex: Add *word to the index.
2001-02-27 Bo Thorsen <>
* low-level-sys-info.tex: Don't use '*' for both pointer types and
footnote reference.
2001-02-21 Andreas Jaeger <>
* low-level-sys-info.tex: Fix layout problems.
2001-02-20 Andreas Jaeger <>
* low-level-sys-info.tex: Fix long double passing conventions.
General cleanup.
* macros.tex: Increment version.
2001-02-14 Andreas Jaeger <>
* low-level-sys-info.tex: Some cleanups:
The __int128, __float128, __m64 and __m128 types are optional.
The CPU will be in x87 mode.
Values of type __m64 will be passed in XMM registers.
Values of type __m64 will be returned in XMM registers.
Values of type long double will be passed on the stack
A value of type long double will be returned in %st.
* dl.tex: Fix LaTeX bug in last patch.
Wed Feb 14 12:16:04 CET 2001 Jan Hubicka <>
* dl.tex: Fix the PLT figure.
2001-02-12 Andreas Jaeger <>
* low-level-sys-info.tex: Clarify right-to-left order.
2001-01-26 Geert Bosch <>
* low-level-sys-info.tex: (Exception Interface): New subsection.
(DWARF Definition): New section.
* macros.tex: Update version to 0.11
(\RIP): New command.
* object-files.tex (Special Sections): New subsection.
2001-02-02 Bo Thorsen <>
* low-level-sys-info.tex: __int128 16 bytes aligned.
2001-01-15 Andreas Jaeger <>
* low-level-sys-info.tex: Spelling fixes as suggested by Philipp
2001-01-14 Andreas Jaeger <>
* low-level-sys-info.tex: Clean up va_* changes.
Sun Jan 14 13:58:08 MET 2001 Jan Hubicka <>
* low-level-sys-info.tex: Document va_* machinery.
2001-01-12 Andreas Jaeger <>
* low-level-sys-info.tex: Fix typo, reported by Philipp Thomas
2001-01-11 Jan Hubicka <>, Philipp Thomas <>
* low-level-sys-info.tex: Document Code models.
2001-01-10 Andreas Jaeger <>
* object-files.tex: Replace R_X86_64_JMP_SLOT with R_X86_64_JUMP_SLOT.
Use PLT32 instead 64.
* dl.tex: Likewise.
2001-01-09 Andreas Jaeger <>
* dl.tex: Fix PLT.
2001-01-08 Andreas Jaeger <>
* object-files.tex: Document 16 and 8 bit relocations.
* dl.tex: Fix relocation name; use pushq for pushing GOT[1] since
we need a 64 bit value.
* object-files.tex: Use EM_X86_64 as this is now the official
2000-12-20 Andreas Jaeger <>
* low-level-sys-info.tex: Fix return register documentation.
Enhance register table.
2000-12-19 Andreas Jaeger <>
* low-level-sys-info.tex: Add table describing usage of generic
Mon Dec 11 15:11:21 MET 2000 Jan Hubicka <>
* low-level-sys-info.tex: Make r11 global; dedicate r10 as static
chain pointer.
Thu Dec 7 19:45:29 MET 2000 Jan Hubicka <>
* low-level-sys-info.tex: Update for the new register passing
sequence and global/local registers split.
2000-12-06 Andreas Jaeger <>
* libraries.tex (subsection{Global Data Symbols}): New section.
2000-11-13 Andreas Jaeger <>
* low-level-sys-info.tex: Fix typos, clarify return registers.
2000-10-18 Andreas Jaeger <>
* object-files.tex: Use R_X86_64 instead of R_X8664.
2000-10-17 Mark Mitchell <>
* low-level-sys-info.tex: Do not align arrays inside structures on
16-byte boundaries just because they have more than 16 bytes.
2000-10-01 Mark Mitchell <>
* low-level-sys-info.tex: Fix some typos in the calling
conventions. Document use of R9 in varargs functions.
* dl.tex: Make /lib/ the dynamic linker.
2000-09-25 Mark Mitchell <>
* low-level-sys-info.tex: Make RAX the return register again.
2000-09-25 Mark Mitchell <>
* low-level-sys-info.tex: Tweak register allocation for
2000-09-24 Andreas Jaeger <>
* low-level-sys-info.tex: Fix typos in red zone description.
2000-09-23 Jan Hubicka <>
Mark Mitchell <>
* low-level-sys-info.tex: Allow R8 and R9 to be scratch registers.
Add red zone. Allow structures containing multiple floating
point values in a single doubleword to be passed in an SSE
2000-09-22 Mark Mitchell <>
* low-level-sys-info.tex: Make all XMM registers caller-saved.
Fix typo. Add footnote about PODs.
2000-09-21 Mark Mitchell <>
* low-level-sys-info.tex: Fix typo.
Cleanups throughout.
* conventions.tex: Clarify.
* dl.tex: Likewise.
* introducion.tex: Clarify scope of ABI.
* low-level-sys-info.tex: Reword calling convention description
* macros.tex: Change layout of registers.
(\intelabi): New command.
* sw-installation.tex: Tidy.
2000-09-01 Mark Mitchell <>
* object-files.tex: Add R_X8664_32S relocation.
2000-08-29 Andreas Jaeger <>
* low-level-sys-info.tex: Remove extra periods.
2000-08-28 Mark Mitchell <>
* object-files.tex: Add R_X8664_32 relocation.
2000-08-24 Mark Mitchell <>
* object-files.tex: Make GOTPCREL relocate only 32 bits.
2000-08-18 Andreas Jaeger <>
* macros.tex: Add \xspace for \reg.
* low-level-sys-info.tex (subsubsection {SSE registers}): Clarify
XMM0 usage.
* conventions.tex: Cleanup and add some index entries.
* macros.tex: Add new macros for easier indexing.
* low-level-sys-info.tex: Some cleanups.
2000-08-17 Andreas Jaeger <>
* conventions.tex (Execution of 32bit programs): Libraries go to
* low-level-sys-info.tex (The Stack Frame): Clarify RBP/RSP usage
as suggested by Robert Dewar.
2000-08-16 Andreas Jaeger <>
* object-files.tex (Relocation Types): Use RELA instead of REL.
* introduction.tex (Differences from the Intel386 psABI): Mention
* low-level-sys-info.tex (Virtual Address Space}:
0x0000ffffffffffff is not a canonical address.
2000-08-15 Andreas Jaeger <>
* conventions.tex: Fix typos.
* introduction.tex: Mention C++ section.
* low-level-sys-info.tex: Lots of minor fixes to language.
* conventions.tex: Add label.
* low-level-sys-info.tex: Shrink too large Scalar Types table.
* object-files.tex: Add extra word to avoid overfull paragraph.
* low-level-sys-info.tex: Describe long double.
Clarify some stuff as suggested by Rich Brunner.
2000-08-14 Mark Mitchell <>
* low-level-sys-info.tex: Fix alignment of long double.
* low-level-sys-info.tex: Tidy up.
* dl.tex: Change name of program interpreter.
2000-08-14 Andreas Jaeger <>
* low-level-sys-info.tex (Processor Architecture): Use \url for
2000-08-13 Mark Mitchell <>
* introduction.tex: Clean up.
* low-level-sys-info.tex: Define long double as having x86
floating-point format. Define __float128. Tidy up.
* object-files.tex: Fix typos.
2000-08-11 Andreas Jaeger <>
* Whole document: Make it ready for public draft: Lots of small
corrections, clarifications and formatting fixes.
2000-08-10 Andreas Jaeger <>
* introduction.tex (Major differences to i386 ABI): New
section added.
* macros.tex: Added Hrule command.
* dl.tex: Remove proposals.
* low-level-sys-info.tex (Coding Examples): Added.
2000-08-09 Andreas Jaeger <>
* macros.tex: Increment version to 0.10.
2000-08-02 Andreas Jaeger <>
* dl.tex (subsection{Initialization and Termination Functions}):
* conventions.tex (section{C++}): Add section.
2000-08-01 Andreas Jaeger <>
* low-level-sys-info.tex: Fix references.
* object-files.tex (Machine Information): Use "H" as table specifier.
* introduction.tex (Introduction}: Add some clarification.
* Makefile: Add mising files.
2000-08-01 Mark Mitchell <>
* object-files.tex (Machine Information): Set machine id.
(Relocations): Change R_X8664_GOTPC to X8664_GOTPCREL.
2000-07-31 Andreas Jaeger <>
* dl.tex (Proposal 1: RW-PLT): Rewrite.
2000-07-29 Andreas Jaeger <>
* low-level-sys-info.tex: Fix typo in LaTeX command.
2000-07-28 Mark Mitchell <>
* low-level-sys-info.tex: Tidy up.
2000-07-28 Andreas Jaeger <>
* low-level-sys-info.tex (Fundamental Types): Add __float80,
describe __float80 and long double.
* abi-index.tex: Don't make it a chapter.
* Makefile (INCLUDES): Add new files.
* low-level-sys-info.tex (Fundamental Types): Make table a bit
Some minor cleanup.
2000-07-27 Mark Mitchell <>
* low-level-sys-info.tex (Fundamental Types): Tidy up.
* object-files.tex (Relocation Types): Update GOT relocations.
2000-07-27 Andreas Jaeger <>
* dl.tex (paragraph{Proposal 2: RO-PLT}): Finish section.
* macros.tex: New macro threednow.
2000-07-26 Andreas Jaeger <>
* conventions.tex (section{Execution of 32bit programs}):
Rewritten, follows ia64 now.
2000-07-25 Andreas Jaeger <>
* introduction.tex: Spell check.
* low-level-sys-info.tex: Likewise.
* object-files.tex: Likewise.
* dl.tex: Spell check.
* conventions.tex: Likewise.
* development.tex: Add default sentence.
* dl.tex: Further explain proposals.
* macros.tex: Added some more commands, use xspace.
* conventions.tex: New chapter.
* abi.tex: Include conventions.
Mon Jul 24 21:33:42 CEST 2000 Jan Hubicka <>
* low-level-sys-info.tex: Increase alignment of arrays
to 16 bytes; fix some formating problems;
new integer-only passing scheme proposal.
2000-07-20 Andreas Jaeger <>
* dl.tex: Added lots of tables for dynamic linking.
* low-level-sys-info.tex: Fix typos.
2000-07-19 Andreas Jaeger <>
* macros.tex: Use here style.
Tue Jul 18 20:33:36 CEST 2000 Jan Hubicka <>
* macros.tex (\reg, \RAX, \RBX, \RCX, \RDX, \RSI, \RDI, \RBP, \RSP,
\op): New.
* low-level-sys-info.tex: (Registers): MMX registers are no longer
used to pass arguments.
(The Stack Frame): Rewrite.
(Parameter Passing Conventions): Rewrite.
(Variable Argument List): New.
2000-07-15 Andreas Jaeger <>
* low-level-sys-info.tex: Fixed some typos.
* abi.tex: Generate list of figures.
* dl.tex: Added section headers and a first figure.
Sat Jul 15 12:58:29 MET DST 2000 Jan Hubicka <>
* low-level-sys-info.tex (Basic data types): Document NULL to have
value of zero.
(Function Calling Sequence): Rewrite.
2000-07-15 Andreas Jaeger <>
* abi-index.tex: New file.
* macros.tex: Include commands for index generation.
* Makefile (abi.dvi): Run makeindex.
* abi.tex: Include abi-index.
2000-07-12 Andreas Jaeger <>
* abi.tex: Add object-files.
* object-files.tex: New file.
* low-level-sys-info.tex (subsubsection{Fundamental Types}):
Described long double format.
* macros.tex: Add Emacs macros and some comments.
Add macros to print version and date on every page.
* sw-installation.tex: Add Emacs macros.
2000-07-07 Andreas Jaeger <>
* Initial checkin of files.
INCLUDES := execution.tex low-level-sys-info.tex development.tex \
introduction.tex sw-installation.tex dl.tex libraries.tex \
macros.tex conventions.tex abi-index.tex object-files.tex
ALL_FILES := abi.tex $(INCLUDES)
.PHONY: all abi clean ps pdf update
# default
all: abi.pdf
abi.dvi: $(ALL_FILES)
latex abi
makeindex abi
latex abi
pdf abi.pdf: $(ALL_FILES)
pdflatex abi
ps abi.dvi
dvips abi.dvi -o
This file documents a number of open topics in the ABI:
- Geert Bosch has a number of smaller nitpits. Let's get hold of them
and integrate them.
- Check layout. All figures should look the same
- Run a spell checker on the document.
- Proof-read and check english, most of us aren't native speakers.
- Should we enforce alignment for SSE?
- Should we declare some global XMM registers?
- Define values of FPU control words
- The figure "Stack Frame" should be clarified: %rbp is optional
- Is vararg passing really the same as non-vararg passing? Is this
handled correctly?
- Check that all examples are correct according to the ABI.
- Define Exception handling (see Geert's proposal)
- Add more examples
- sizeof (long double) is 16 - is this still needed?
- use better terms than doubleword etc.
- Ideas for passing of arguments:
1) we may want to merge "SSE" and "integer" to "SSE" instead of integer,
since we can do quite a lot of integer operations in SSE, but not vice
2) we may want to increase size of aggregates passed in registers - unlike
runtime approach this is just change of single constant
3) what about packed types?
4) overall idea of classifying doublewords is based on the fact, that
we are using a direct mapping between argument area and regnos.
This is no-longer true, so for instance we may want to pass
structures as if each field was a distinct argument. The advantage
is more direct access to types smaller than 64 bits. The
disadvantage is that we will need more moves if the structure is in
memory and waste more registers.
5) we may want to be more aggresive on using SSEUP - for instance
array for 4 floats can be easily passed in SSE. A problem is with
alignment. Just few structures will get so large alignment, so
maybe this is doomed.
6) (HPA) Should we pass long doubles on the stack?
- Write "Process Initialization" section
- Return values: Should we set \RDI for returning?
In this case, the called function also sets \RDI to the value of
the original address in the callee's area before it returns. Thus
when the caller receives control again, the address of the returned
object resides in register \RDI and can be used to access the
Status: March, 7th 2001
Andreas Jaeger
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "abi"
%%% End:
\author{Edited by\\
Jan Hubicka\thanks{}, Andreas Jaeger\thanks{},
Mark Mitchell\thanks{}}
\title{System V Application Binary Interface\\
{\Large x86-64$^{\rm TM}$ Architecture Processor Supplement\\
Draft Version \version}}
\editornote{This chapter is used to document some features special to
the \xARCH ABI. The different sections might be moved to another
place or removed completely.}
\section{GOT pointer and IP relative addressing}
\index{global offset table}
A basic difference between the i386 ABI and the \xARCH ABI is the
way the GOT table is found. The i386 ABI, like (most) other processor
specific ABIs, uses a dedicated register (\reg{ebx}) to address the
base of the GOT table. The function prologue of every function needs
to set up this register to the correct value. The \xARCH processor
family introduces a new IP-relative addressing mode which is used in
this ABI instead of using a dedicated register.
On \xARCH the GOT table contains 64 bit entries.
\section{Execution of 32bit programs}
% Let's follow Sparc64 and MIPS64
The \xARCH is able to execute 64 bit \xARCH and also 32 bit ia32
programs. Libraries conforming to the \intelabi will live in the
normal places like \path{/lib}, \path{/usr/lib} and \path{/usr/bin}.
Libraries following the \xARCH, will use \path{lib64} subdirectories
for the libraries, e.g \path{/lib64} and \path{/usr/lib64}. Programs
conforming to \intelabi and to the \xARCH ABI will share directories
like \path{/usr/bin}. In particular, there will be no \path{bin64}
For the \textindex{C++} ABI we will use the ia64 C++ ABI and instantiate it
appropriately. The current draft of that ABI is available at:\\
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "abi"