Mercurial > pub > dyncall > dyncall
comparison doc/manual/callconvs/callconv_arm32.tex @ 173:8402121e1737
- doc tweaks
author | cslag |
---|---|
date | Wed, 08 Feb 2017 12:54:05 +0100 |
parents | 12729fd52ab7 |
children | 703d102cb580 |
comparison
equal
deleted
inserted
replaced
172:b27557033057 | 173:8402121e1737 |
---|---|
34 {\bf THUMB} & compressed instruction set using 16bit wide instruction encoding\\ | 34 {\bf THUMB} & compressed instruction set using 16bit wide instruction encoding\\ |
35 \end{tabular*} | 35 \end{tabular*} |
36 \\ | 36 \\ |
37 \\ | 37 \\ |
38 For more details, take a look at the ARM-THUMB Procedure Call Standard (ATPCS) \cite{ATPCS}, the Procedure Call Standard for the ARM Architecture (AAPCS) \cite{AAPCS}, as well as the Debian ARM EABI port wiki \cite{armeabi}.\\ | 38 For more details, take a look at the ARM-THUMB Procedure Call Standard (ATPCS) \cite{ATPCS}, the Procedure Call Standard for the ARM Architecture (AAPCS) \cite{AAPCS}, as well as the Debian ARM EABI port wiki \cite{armeabi}.\\ |
39 | 39 \\ |
40 \paragraph{\product{dyncall} support} | 40 \paragraph{\product{dyncall} support} |
41 | 41 |
42 Currently, the \product{dyncall} library supports the ARM and THUMB mode of the ARM32 family (ATPCS \cite{ATPCS} and EABI \cite{armeabi}), excluding manually triggered ARM-THUMB interworking calls. Although it's quite possible that the current implementation runs on other ARM processor families as well, please note that only the ARMv4t family has been thoroughly tested at the time of writing. Please report if the code runs on other ARM families, too.\\ | 42 Currently, the \product{dyncall} library supports the ARM and THUMB mode of the ARM32 family (ATPCS \cite{ATPCS} and EABI \cite{armeabi}), excluding manually triggered ARM-THUMB interworking calls. Although it's quite possible that the current implementation runs on other ARM processor families as well, please note that only the ARMv4t family has been thoroughly tested at the time of writing. Please report if the code runs on other ARM families, too.\\ |
43 It is important to note, that dyncall supports the ARM architecture calling convention variant {\bf with floating point hardware disabled} (meaning that the FPA and the VFP (scalar mode) procedure call standards are not supported). | 43 It is important to note, that dyncall supports the ARM architecture calling convention variant {\bf with floating point hardware disabled} (meaning that the FPA and the VFP (scalar mode) procedure call standards are not supported). |
44 This processor family features some instruction sets accelerating DSP and multimedia application like the ARM Jazelle Technology (direct Java bytecode execution, providing acceleration for some bytecodes while calling software code for others), etc. that are not supported by the dyncall library.\\ | 44 This processor family features some instruction sets accelerating DSP and multimedia application like the ARM Jazelle Technology (direct Java bytecode execution, providing acceleration for some bytecodes while calling software code for others), etc. that are not supported by the dyncall library.\\ |
224 8-byte aligned at function entries, as well as for 64 bit parameters. The latter | 224 8-byte aligned at function entries, as well as for 64 bit parameters. The latter |
225 are aligned on 8-byte boundaries on the stack and 2-registers for a parameter | 225 are aligned on 8-byte boundaries on the stack and 2-registers for a parameter |
226 passed via register. In order to achieve such an alignment, a register might | 226 passed via register. In order to achieve such an alignment, a register might |
227 have to be skipped for parameters passed via registers, or 4-bytes on the stack | 227 have to be skipped for parameters passed via registers, or 4-bytes on the stack |
228 for parameters passed via the stack. Refer to the Debian ARM EABI port wiki | 228 for parameters passed via the stack. Refer to the Debian ARM EABI port wiki |
229 for more information \cite{armeabi}. | 229 for more information \cite{armeabi}.\\ |
230 | 230 \\ |
231 | |
232 \paragraph{Status} | 231 \paragraph{Status} |
233 | 232 |
234 \begin{itemize} | 233 \begin{itemize} |
235 \item The EABI THUMB mode is tested and works fine (contrary to the ATPCS). | 234 \item The EABI THUMB mode is tested and works fine (contrary to the ATPCS). |
236 \item Ellipse calls do not work. | 235 \item Ellipse calls do not work. |
241 | 240 |
242 \subsubsection{ARM on Apple's iOS (Darwin) Platform} | 241 \subsubsection{ARM on Apple's iOS (Darwin) Platform} |
243 | 242 |
244 | 243 |
245 The iOS runs on ARMv6 (iOS 2.0) and ARMv7 (iOS 3.0) architectures. | 244 The iOS runs on ARMv6 (iOS 2.0) and ARMv7 (iOS 3.0) architectures. |
246 Typically code is compiled in Thumb mode. | 245 Typically code is compiled in Thumb mode.\\ |
247 | 246 \\ |
248 \paragraph{Register usage} | 247 \paragraph{Register usage} |
249 | 248 |
250 \begin{table}[h] | 249 \begin{table}[h] |
251 \begin{tabular*}{0.95\textwidth}{3 B} | 250 \begin{tabular*}{0.95\textwidth}{3 B} |
252 Name & Brief description\\ | 251 Name & Brief description\\ |
285 | 284 |
286 Most debian-based Linux systems on ARMv7 (or ARMv6 with FPU) platforms use a calling convention referred to | 285 Most debian-based Linux systems on ARMv7 (or ARMv6 with FPU) platforms use a calling convention referred to |
287 as armhf, using 16 32-bit floating point registers of the FPU of the VFPv3-D16 extension to the ARM architecture. | 286 as armhf, using 16 32-bit floating point registers of the FPU of the VFPv3-D16 extension to the ARM architecture. |
288 The instruction set used for armhf is Thumb-2. Refer to the debian wiki for more information \cite{armhf}. | 287 The instruction set used for armhf is Thumb-2. Refer to the debian wiki for more information \cite{armhf}. |
289 | 288 |
290 Code is little-endian, rest is similar to EABI with an 8-byte aligned stack, etc.. | 289 Code is little-endian, rest is similar to EABI with an 8-byte aligned stack, etc..\\ |
291 | 290 \\ |
292 \paragraph{Register usage} | 291 \paragraph{Register usage} |
293 | 292 |
294 \begin{table}[h] | 293 \begin{table}[h] |
295 \begin{tabular*}{0.95\textwidth}{3 B} | 294 \begin{tabular*}{0.95\textwidth}{3 B} |
296 Name & Brief description\\ | 295 Name & Brief description\\ |