blob: 9140d09ae6fdfe94001cb351d88583a2b778baac [file] [log] [blame]
<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:&nbsp;<a rel="next" accesskey="n" href="S12Z.html#S12Z">S12Z</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Nios-II.html#Nios-II">Nios II</a>,
Up:&nbsp;<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>