1bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\documentclass{article} 2bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\usepackage[fancyhdr,pdf]{latex2man} 3bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 4bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\input{common.tex} 5bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 6bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\begin{document} 7bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 8972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\begin{Name}{3}{libunwind-ia64}{David Mosberger-Tang}{Programming Library}{IA-64-specific support in libunwind}libunwind-ia64 -- IA-64-specific support in libunwind 9bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\end{Name} 10bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 11bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 12bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\section{Introduction} 13bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 14bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmThe IA-64 version of \Prog{libunwind} uses a platform-string of 15bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\texttt{ia64} and, at least in theory, should be able to support all 16bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmoperating systems adhering to the processor-specific ABI defined for 17bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmthe Itanium Processor Family. This includes both little-endian Linux 18bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmand big-endian HP-UX. Furthermore, to make it possible for a single 19bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmlibrary to unwind both 32- and 64-bit targets, the type 20bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\Type{unw\_word\_t} is always defined to be 64 bits wide (independent 21bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmof the natural word-size of the host). Having said that, the current 22bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmimplementation has been tested only with IA-64 Linux. 23bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 24bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmWhen targeting IA-64, the \Prog{libunwind} header file defines the 25bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmmacro \Const{UNW\_TARGET\_IA64} as 1 and the macro \Const{UNW\_TARGET} 26bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmas ``ia64'' (without the quotation marks). The former makes it 27bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmpossible for platform-dependent unwind code to use 28bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmconditional-compilation to select an appropriate implementation. The 29bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmlatter is useful for stringification purposes and to construct 30bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmtarget-platform-specific symbols. 31bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 32bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmOne special feature of IA-64 is the use of NaT bits to support 33bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmspeculative execution. Often, NaT bits are thought of as the ``65-th 34bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmbit'' of a general register. However, to make everything fit into 35bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm64-bit wide \Type{unw\_word\_t} values, \Prog{libunwind} treats the 36bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmNaT-bits like separate boolean registers, whose 64-bit value is either 37bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmTRUE (non-zero) or FALSE (zero). 38bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 39bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 40bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\section{Machine-State} 41bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 42bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmThe machine-state (set of registers) that is accessible through 43bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\Prog{libunwind} depends on the type of stack frame that a cursor 44bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmpoints to. For normal frames, all ``preserved'' (callee-saved) 45bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmregisters are accessible. For signal-trampoline frames, all registers 46bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm(including ``scratch'' (caller-saved) registers) are accessible. Most 47bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmapplications do not have to worry a-priori about which registers are 48bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmaccessible when. In case of doubt, it is always safe to \emph{try} to 49bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmaccess a register (via \Func{unw\_get\_reg}() or 50bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\Func{unw\_get\_fpreg}()) and if the register isn't accessible, the 51bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmcall will fail with a return-value of \texttt{-}\Const{UNW\_EBADREG}. 52bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 53bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmAs a special exception to the above general rule, scratch registers 54bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\texttt{r15}-\texttt{r18} are always accessible, even in normal 55bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmframes. This makes it possible to pass arguments, e.g., to exception 56bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmhandlers. 57bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 58bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmFor a detailed description of the IA-64 register usage convention, 59bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmplease see the ``Itanium Software Conventions and Runtime Architecture 60bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmGuide'', available at: 61bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\begin{center} 62bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm \URL{http://www.intel.com/design/itanium/downloads/245358.htm} 63bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\end{center} 64bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 65bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 66bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\section{Register Names} 67bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 68bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmThe IA-64-version of \Prog{libunwind} defines three kinds of register 69bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmname macros: frame-register macros, normal register macros, and 70bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmconvenience macros. Below, we describe each kind in turn: 71bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 72bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 73bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\subsection{Frame-register Macros} 74bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 75bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmFrame-registers are special (pseudo) registers because they always 76bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmhave a valid value, even though sometimes they do not get saved 77bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmexplicitly (e.g., if a memory stack frame is 16 bytes in size, the 78bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmprevious stack-pointer value can be calculated simply as 79bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\texttt{sp+16}, so there is no need to save the stack-pointer 80bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmexplicitly). Moreover, the set of frame register values uniquely 81bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmidentifies a stack frame. The IA-64 architecture defines two stacks 82bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm(a memory and a register stack). Including the instruction-pointer 83bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm(IP), this means there are three frame registers: 84bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\begin{Description} 85bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_IP}:] Contains the instruction pointer (IP, or 86bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm ``program counter'') of the current stack frame. Given this value, 87bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm the remaining machine-state corresponds to the register-values that 88bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm were present in the CPU when it was just about to execute the 89bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm instruction pointed to by \Const{UNW\_IA64\_IP}. Bits 0 and 1 of 90bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm this frame-register encode the slot number of the instruction. 91bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm \textbf{Note:} Due to the way the call instruction works on IA-64, 92bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm the slot number is usually zero, but can be non-zero, e.g., in the 93bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm stack-frame of a signal-handler trampoline. 94bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_SP}:] Contains the (memory) stack-pointer 952211958a9ce525a4230863d39a2c43a4fc5bc9e4hp.com!davidm value (SP). 96bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_BSP}:] Contains the register backing-store 972211958a9ce525a4230863d39a2c43a4fc5bc9e4hp.com!davidm pointer (BSP). \textbf{Note:} the value in this register is equal 982211958a9ce525a4230863d39a2c43a4fc5bc9e4hp.com!davidm to the contents of register \texttt{ar.bsp} at the time the 992211958a9ce525a4230863d39a2c43a4fc5bc9e4hp.com!davidm instruction at \Const{UNW\_IA64\_IP} was about to begin execution. 100bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\end{Description} 101bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 102bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 103bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\subsection{Normal Register Macros} 104bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 105bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmThe following normal register name macros are available: 106bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\begin{Description} 107bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_GR}:] The base-index for general (integer) 108bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm registers. Add an index in the range from 0..127 to get a 109bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm particular general register. For example, to access \texttt{r4}, 110eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the index \Const{UNW\_IA64\_GR}\texttt{+4} should be used. 111eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm Registers \texttt{r0} and \texttt{r1} (\texttt{gp}) are read-only, 112eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm and any attempt to write them will result in an error 113eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm (\texttt{-}\Const{UNW\_EREADONLYREG}). Even though \texttt{r1} is 114eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm read-only, \Prog{libunwind} will automatically adjust its value if 115eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the instruction-pointer (\Const{UNW\_IA64\_IP}) is modified. For 116eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm example, if \Const{UNW\_IA64\_IP} is set to a value inside a 117eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm function \Func{func}(), then reading 118eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm \Const{UNW\_IA64\_GR}\texttt{+1} will return the global-pointer 119eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm value for this function. 120bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_NAT}:] The base-index for the NaT bits of the 121bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm general (integer) registers. A non-zero value in these registers 122bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm corresponds to a set NaT-bit. Add an index in the range from 0..127 123bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm to get a particular NaT-bit register. For example, to access the 124bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm NaT bit of \texttt{r4}, the index \Const{UNW\_IA64\_NAT}\texttt{+4} 125bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm should be used. 126bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_FR}:] The base-index for floating-point 127bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm registers. Add an index in the range from 0..127 to get a 128bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm particular floating-point register. For example, to access 129bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm \texttt{f2}, the index \Const{UNW\_IA64\_FR}\texttt{+2} should be 130bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm used. Registers \texttt{f0} and \texttt{f1} are read-only, and any 131bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm attempt to write to indices \Const{UNW\_IA64\_FR}\texttt{+0} or 132bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm \Const{UNW\_IA64\_FR}\texttt{+1} will result in an error 133bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm (\texttt{-}\Const{UNW\_EREADONLYREG}). 134bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_AR}:] The base-index for application 135bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm registers. Add an index in the range from 0..127 to get a 136bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm particular application register. For example, to access 137bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm \texttt{ar40}, the index \Const{UNW\_IA64\_AR}\texttt{+40} should be 138bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm used. The IA-64 architecture defines several application registers 139bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm as ``reserved for future use''. Attempting to access such registers 140bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm results in an error (\texttt{-}\Const{UNW\_EBADREG}). 141bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_BR}:] The base-index for branch registers. 142bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm Add an index in the range from 0..7 to get a particular branch 143bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm register. For example, to access \texttt{b6}, the index 144bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm \Const{UNW\_IA64\_BR}\texttt{+6} should be used. 145bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_PR}:] Contains the set of predicate registers. 146bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm This 64-bit wide register contains registers \texttt{p0} through 1470cae8247a870cfb8c370046640923423f4a62ea1hp.com!davidm \texttt{p63} in the ``broad-side'' format. Just like with the 1480cae8247a870cfb8c370046640923423f4a62ea1hp.com!davidm ``move predicates'' instruction, the registers are mapped as if 1490cae8247a870cfb8c370046640923423f4a62ea1hp.com!davidm \texttt{CFM.rrb.pr} were set to 0. Thus, in general the value of 1500cae8247a870cfb8c370046640923423f4a62ea1hp.com!davidm predicate register \texttt{p}$N$ with $N$>=16 can be found 1510cae8247a870cfb8c370046640923423f4a62ea1hp.com!davidm in bit \texttt{16 + (($N$-16)+CFM.rrb.pr) \% 48}. 152bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_CFM}:] Contains the current-frame-mask 153bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm register. 154bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\end{Description} 155bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 156bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 157bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\subsection{Convenience Macros} 158bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 159bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmConvenience macros are simply aliases for certain frequently used 160bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmregisters: 161bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\begin{Description} 162eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_GP}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+1}, 163eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the global-pointer register. 164eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_TP}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+13}, 165eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the thread-pointer register. 166eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_RSC}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+16}, 167eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the register-stack configuration register. 168bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\item[\Const{UNW\_IA64\_AR\_BSP}:] Alias for 169bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm \Const{UNW\_IA64\_GR}\texttt{+17}. This register index accesses the 170bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm value of register \texttt{ar.bsp} as of the time it was last saved 171bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm explicitly. This is rarely what you want. Normally, you'll want to 172bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm use \Const{UNW\_IA64\_BSP} instead. 173eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_BSPSTORE}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+18}, 174eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the register-backing store write pointer. 175eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_RNAT}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+19}, 176eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the register-backing store NaT-collection register. 177eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_CCV}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+32}, 178eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the compare-and-swap value register. 179eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_CSD}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+25}, 180eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the compare-and-swap-data register (used by 16-byte atomic operations). 181eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_UNAT}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+36}, 182eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the user NaT-collection register. 183eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_FPSR}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+40}, 184eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the floating-point status (and control) register. 185eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_PFS}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+64}, 186eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the previous frame-state register. 187eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_LC}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+65} 188eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the loop-count register. 189eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm\item[\Const{UNW\_IA64\_AR\_EC}:] Alias for \Const{UNW\_IA64\_GR}\texttt{+66}, 190eb6d0a751f8a27db70e850530180459df9cfe091mostang.com!davidm the epilogue-count register. 191bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\end{Description} 192bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 193bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 194bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\section{The Unwind-Context Type} 195bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 196bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmOn IA-64, \Type{unw\_context\_t} is simply an alias for 197bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\Type{ucontext\_t} (as defined by the Single UNIX Spec). This implies 198bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmthat it is possible to initialize a value of this type not just with 199bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\Func{unw\_getcontext}(), but also with \Func{getcontext}(), for 200bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmexample. However, since this is an IA-64-specific extension to 201bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\Prog{libunwind}, portable code should not rely on this equivalence. 202bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 203bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 204bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\section{See Also} 205bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 206bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\SeeAlso{libunwind(3)} 207bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 208bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\section{Author} 209bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 210bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\noindent 211bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidmDavid Mosberger-Tang\\ 21275f34ccb7dcdfd2b96e370824b3fd723b2f22b49David Mosberger-TangEmail: \Email{dmosberger@gmail.com}\\ 21375f34ccb7dcdfd2b96e370824b3fd723b2f22b49David Mosberger-TangWWW: \URL{http://www.nongnu.org/libunwind/}. 214bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\LatexManEnd 215bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm 216bd2b4658cb223d68a339dc9b838aa7f9eb3a6c3emostang.com!davidm\end{document} 217