annotate doc/manual/callconvs/callconv_ppc64.tex @ 499:fc614cb865c6

- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
author Tassilo Philipp
date Mon, 04 Apr 2022 15:50:52 +0200
parents ead041d93e36
children 0909837648d2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 %//////////////////////////////////////////////////////////////////////////////
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 %
473
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 467
diff changeset
3 % Copyright (c) 2007-2022 Daniel Adler <dadler@uni-goettingen.de>,
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 % Tassilo Philipp <tphilipp@potion-studios.com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 % Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 % purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 % copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 % ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 % OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 %
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 %//////////////////////////////////////////////////////////////////////////////
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 % ==================================================
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 % PowerPC 64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 % ==================================================
328
276eb8c87aa0 - review and fixes, cleanup, amendments to calling convention appendix of manual
Tassilo Philipp
parents: 132
diff changeset
23 \subsection{PowerPC (64bit) Calling Conventions}
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 \paragraph{Overview}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 \begin{itemize}
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
28 \item Word size is 32 bits for historical reasons
473
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 467
diff changeset
29 \item Doublework size is 64 bits.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 \item Big endian (MSB) and litte endian (LSB) operating modes.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 \item Apple Mac OS X/Darwin PPC is specified in "Mac OS X ABI Function Call Guide"\cite{ppcMacOSX}. It uses Big Endian (MSB).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 \item Linux PPC 64-bit ABI is specified in "64-bit PowerPC ELF Application Binary Interface Supplement"\cite{ppcelf64abi} which is based on "System V ABI".
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 \end{itemize}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 \paragraph{\product{dyncall} support}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36
345
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
37 \product{Dyncall} and \product{dyncallback} are supported for PowerPC (64bit)
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
38 Big Endian and Little Endian ELF ABIs on System V systems. Mac OS X is not
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
39 supported.\\
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
40 \product{Dyncall} can also be used to issue syscalls by using the syscall
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
41 number as target parameter and selecting the correct mode.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 \subsubsection{PPC64 ELF ABI}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 \paragraph{Registers and register usage}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
48 \begin{table}[h]
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
49 \begin{tabular*}{0.95\textwidth}{3 B}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
50 Name & Brief description\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
51 \hline
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
52 {\bf gpr0} & scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
53 {\bf gpr1} & stack pointer\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
54 {\bf gpr2} & TOC base ptr (offset table and data for position independent code), scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
55 {\bf gpr3} & return value, parameter 0 for integer or pointer, scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
56 {\bf gpr4-gpr10} & parameter 1-7 for integer or pointer parameters, scratch\\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
58 {\bf gpr11} & env pointer if needed, scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
59 {\bf gpr12} & used for exception handling and glink code, scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
60 {\bf gpr13} & used for system thread ID, preserve\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
61 {\bf gpr14-31} & preserve\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
62 {\bf fpr0} & scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
63 {\bf fpr1-fpr4} & floating point return value, floating point parameter 0-3 (always double precision)\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
64 {\bf fpr5-fpr13} & floating point parameters 4-12 (always double precision)\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
65 {\bf fpr14-fpr31} & preserve\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
66 {\bf v0-v1} & scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
67 {\bf v2-v13} & vector parameters\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
68 {\bf v14-v19} & scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
69 {\bf v20-v31} & preserve\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
70 {\bf lr} & link-register, scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
71 {\bf ctr} & count-register, scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
72 {\bf xer} & fixed point exception register, scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
73 {\bf fpscr} & floating point status and control register, scratch\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
74 {\bf cr0-cr7} & conditional register fields, each 4-bit wide (cr0-cr1 and cr5-cr7 are scratch)\\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
75 \end{tabular*}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
76 \caption{Register usage on PowerPC 64-Bit ELF ABI}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
77 \end{table}
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 \paragraph{Parameter passing}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80
123
d203ba52c246 - manual callconv clarifications
cslag
parents: 95
diff changeset
81 \begin{itemize}
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
82 \item stack grows down
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
83 \item stack parameter order: right-to-left
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
84 \item caller cleans up the stack
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
85 \item stack is always 16 byte aligned
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
86 \item the stack pointer must be atomically updated (to avoid any timing window in which an interrupt can occur with a partially updated stack), usually with the stdu (store doubleword with update) instruction
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
87 \item the first 8 integer parameters are passed in registers gpr3-gpr10
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
88 \item the first 13 floating point parameters are passed in registers fpr1-fpr13
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
89 \item preserved registers are saved using a defined order (from high to low addresses):
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
90 fpr* (64bit aligned),
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
91 gpr*,
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
92 VRSAVE save word (32 bits),
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
93 padding for alignment (4 or 12 bytes),
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
94 v* (128bit aligned)
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
95 \item if a floating point parameter is passed via a register, a gpr registers is skipped for subsequent integer parameters
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
96 \item the caller pushes subsequent parameters onto the stack
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
97 \item single precision floating point values use the second word in a doubleword
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
98 \item a quad precision floating point argument is passed as two consecutive double precision ones
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
99 \item integer types \textless\ 64 bit are sign or zero extended and use a doubleword
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
100 \item ellipsis calls take floating point values in int and float registers (single precision floats are promoted to double precision as
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
101 required by ellipsis calls)
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
102 \item space for all potential gpr* register passed arguments is reserved in the stack parameter area (in order to spill the parameters if
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
103 needed - e.g. varargs), meaning a minimum of 64 bytes to hold gpr3-gpr10
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
104 \item all nonvector parameters are aligned on 8-byte boundaries
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
105 \item vector parameters are aligned on 16-byte boundaries
125
f1fc1c836baf - mips doc stuff
cslag
parents: 123
diff changeset
106 \item integer parameters \textless\ 64 bit are right-justified (meaning occupy higher-address bytes) in their 8-byte slot on the stack, requiring extra-care for big-endian targets
473
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 467
diff changeset
107 \item aggregates (struct, union) are passed as a sequence of doublewords (following above rules for doublewords)
499
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 473
diff changeset
108 \item {\it non-trivial} C++ aggregates (as defined by the language) of any size, are passed indirectly via a pointer to a copy of the aggregate
123
d203ba52c246 - manual callconv clarifications
cslag
parents: 95
diff changeset
109 \end{itemize}
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 \paragraph{Return values}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
114 \begin{itemize}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
115 \item return values of integer \textless=\ 32bit or pointer type use gpr3 and are zero or sign extended depending on their type
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
116 \item 64 bit integers use gpr3
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
117 \item floating point values are returned via fpr1
499
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 473
diff changeset
118 \item for any aggregate (struct, union), the caller allocates space, passes pointer to it to the callee as a hidden first param
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 473
diff changeset
119 (meaning in gpr3), and callee writes return value to this space; the ptr to the aggregate is returned in gpr3
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
120 \end{itemize}
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 \paragraph{Stack layout}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
125 Stack frame is always 16-byte aligned.
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
126 % verified/amended: TP nov 2019 (see also doc/disas_examples/ppc64.elfabi.disas)
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
127 Stack directly after function prolog:\\
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128
331
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
129 \begin{figure}[h]
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
130 \begin{tabular}{5|3|1 1}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
131 & \vdots & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
132 \hhline{~=~~}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
133 register save area & \hspace{4cm} & & \mrrbrace{14}{caller's frame} \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
134 \hhline{~-~~}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
135 local data & & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
136 \hhline{~-~~}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
137 \mrlbrace{6}{parameter area} & last arg & \mrrbrace{3}{stack parameters} & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
138 & \ldots & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
139 & arg 8 & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
140 & gpr10 & \mrrbrace{3}{spill area (as needed)} & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
141 & \ldots & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
142 & gpr3 & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
143 \hhline{~-~~}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
144 \mrlbrace{6}{linkage area} & TOC ptr reg & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
145 & reserved & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
146 & reserved & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
147 & return address (callee saved) & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
148 & condition reg (callee saved) & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
149 & parent stack frame pointer & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
150 \hhline{~=~~}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
151 register save area & & & \mrrbrace{4}{current frame} \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
152 \hhline{~-~~}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
153 local data & & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
154 \hhline{~-~~}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
155 parameter area & & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
156 \hhline{~-~~}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
157 linkage area & \vdots & & \\
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
158 \end{tabular}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
159 \caption{Stack layout on ppc64 ELF ABI}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
160 \end{figure}
74c056b597b7 - disassembly example annotations
Tassilo Philipp
parents: 328
diff changeset
161
345
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
162
467
b47168dacba6 manual:
Tassilo Philipp
parents: 345
diff changeset
163 \clearpage
345
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
164
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
165 \subsubsection{System V syscalls}
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
166
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
167 \paragraph{Parameter passing}
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
168
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
169 \begin{itemize}
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
170 \item syscall is issued via the {\em sc} instruction
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
171 \item kernel destroys registers r13
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
172 \item syscall number is set in r0
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
173 \item params are passed in registers r3 through r10
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
174 \item no stack in use, meaning syscalls are in theory limited to eight arguments
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
175 \item register r3 holds the return value, overflow flag in conditional register cr0 signals errors in syscall
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
176 \end{itemize}
c607d67cd6b8 - doc: added syscall info to appendix, fixed broken literature link
Tassilo Philipp
parents: 331
diff changeset
177