| <html lang="en"> |
| <head> |
| <title>Sparc64 - Debugging with GDB</title> |
| <meta http-equiv="Content-Type" content="text/html"> |
| <meta name="description" content="Debugging with GDB"> |
| <meta name="generator" content="makeinfo 4.13"> |
| <link title="Top" rel="start" href="index.html#Top"> |
| <link rel="up" href="Architectures.html#Architectures" title="Architectures"> |
| <link rel="prev" href="Nios-II.html#Nios-II" title="Nios II"> |
| <link rel="next" href="S12Z.html#S12Z" title="S12Z"> |
| <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> |
| <!-- |
| Copyright (C) 1988-2019 Free Software Foundation, Inc. |
| |
| Permission is granted to copy, distribute and/or modify this document |
| under the terms of the GNU Free Documentation License, Version 1.3 or |
| any later version published by the Free Software Foundation; with the |
| Invariant Sections being ``Free Software'' and ``Free Software Needs |
| Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,'' |
| and with the Back-Cover Texts as in (a) below. |
| |
| (a) The FSF's Back-Cover Text is: ``You are free to copy and modify |
| this GNU Manual. Buying copies from GNU Press supports the FSF in |
| developing GNU and promoting software freedom.'' |
| --> |
| <meta http-equiv="Content-Style-Type" content="text/css"> |
| <style type="text/css"><!-- |
| pre.display { font-family:inherit } |
| pre.format { font-family:inherit } |
| pre.smalldisplay { font-family:inherit; font-size:smaller } |
| pre.smallformat { font-family:inherit; font-size:smaller } |
| pre.smallexample { font-size:smaller } |
| pre.smalllisp { font-size:smaller } |
| span.sc { font-variant:small-caps } |
| span.roman { font-family:serif; font-weight:normal; } |
| span.sansserif { font-family:sans-serif; font-weight:normal; } |
| --></style> |
| </head> |
| <body> |
| <div class="node"> |
| <a name="Sparc64"></a> |
| <p> |
| Next: <a rel="next" accesskey="n" href="S12Z.html#S12Z">S12Z</a>, |
| Previous: <a rel="previous" accesskey="p" href="Nios-II.html#Nios-II">Nios II</a>, |
| Up: <a rel="up" accesskey="u" href="Architectures.html#Architectures">Architectures</a> |
| <hr> |
| </div> |
| |
| <h4 class="subsection">21.4.9 Sparc64</h4> |
| |
| <p><a name="index-Sparc64-support-1644"></a><a name="index-Application-Data-Integrity-1645"></a> |
| |
| <h5 class="subsubsection">21.4.9.1 ADI Support</h5> |
| |
| <p>The M7 processor supports an Application Data Integrity (ADI) feature that |
| detects invalid data accesses. When software allocates memory and enables |
| ADI on the allocated memory, it chooses a 4-bit version number, sets the |
| version in the upper 4 bits of the 64-bit pointer to that data, and stores |
| the 4-bit version in every cacheline of that data. Hardware saves the latter |
| in spare bits in the cache and memory hierarchy. On each load and store, |
| the processor compares the upper 4 VA (virtual address) bits to the |
| cacheline's version. If there is a mismatch, the processor generates a |
| version mismatch trap which can be either precise or disrupting. The trap |
| is an error condition which the kernel delivers to the process as a SIGSEGV |
| signal. |
| |
| <p>Note that only 64-bit applications can use ADI and need to be built with |
| ADI-enabled. |
| |
| <p>Values of the ADI version tags, which are in granularity of a |
| cacheline (64 bytes), can be viewed or modified. |
| |
| |
| <a name="index-adi-examine-1646"></a> |
| <dl><dt><code>adi (examine | x) [ / </code><var>n</var><code> ] </code><var>addr</var><dd> |
| The <code>adi examine</code> command displays the value of one ADI version tag per |
| cacheline. |
| |
| <p><var>n</var> is a decimal integer specifying the number in bytes; the default |
| is 1. It specifies how much ADI version information, at the ratio of 1:ADI |
| block size, to display. |
| |
| <p><var>addr</var> is the address in user address space where you want <span class="sc">gdb</span> |
| to begin displaying the ADI version tags. |
| |
| <p>Below is an example of displaying ADI versions of variable "shmaddr". |
| |
| <pre class="smallexample"> (gdb) adi x/100 shmaddr |
| 0xfff800010002c000: 0 0 |
| </pre> |
| <p><a name="index-adi-assign-1647"></a><br><dt><code>adi (assign | a) [ / </code><var>n</var><code> ] </code><var>addr</var><code> = </code><var>tag</var><dd> |
| The <code>adi assign</code> command is used to assign new ADI version tag |
| to an address. |
| |
| <p><var>n</var> is a decimal integer specifying the number in bytes; |
| the default is 1. It specifies how much ADI version information, at the |
| ratio of 1:ADI block size, to modify. |
| |
| <p><var>addr</var> is the address in user address space where you want <span class="sc">gdb</span> |
| to begin modifying the ADI version tags. |
| |
| <p><var>tag</var> is the new ADI version tag. |
| |
| <p>For example, do the following to modify then verify ADI versions of |
| variable "shmaddr": |
| |
| <pre class="smallexample"> (gdb) adi a/100 shmaddr = 7 |
| (gdb) adi x/100 shmaddr |
| 0xfff800010002c000: 7 7 |
| </pre> |
| </dl> |
| |
| </body></html> |
| |