⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cris-pic.html

📁 gcc手册
💻 HTML
字号:
<html lang="en">

<head>

<title>Using as</title>

<meta http-equiv="Content-Type" content="text/html">

<meta name="description" content="Using as">

<meta name="generator" content="makeinfo 4.3">

<link href="http://www.gnu.org/software/texinfo/" rel="generator-home">

</head>

<body>

<div class="node">

<p>

Node:<a name="CRIS-Pic">CRIS-Pic</a>,

Next:<a rel="next" accesskey="n" href="CRIS-Regs.html#CRIS-Regs">CRIS-Regs</a>,

Previous:<a rel="previous" accesskey="p" href="CRIS-Chars.html#CRIS-Chars">CRIS-Chars</a>,

Up:<a rel="up" accesskey="u" href="CRIS-Syntax.html#CRIS-Syntax">CRIS-Syntax</a>

<hr><br>

</div>



<h5 class="subsection">Symbols in position-independent code</h5>



   <p>When generating <a name="crispic"></a>position-independent code (SVR4

PIC) for use in cris-axis-linux-gnu shared libraries, symbol

suffixes are used to specify what kind of run-time symbol lookup

will be used, expressed in the object as different

<em>relocation types</em>.  Usually, all absolute symbol values

must be located in a table, the <em>global offset table</em>,

leaving the code position-independent; independent of values of

global symbols and independent of the address of the code.  The

suffix modifies the value of the symbol, into for example an

index into the global offset table where the real symbol value

is entered, or a PC-relative value, or a value relative to the

start of the global offset table.  All symbol suffixes start

with the character <code>:</code> (omitted in the list below).  Every

symbol use in code or a read-only section must therefore have a

PIC suffix to enable a useful shared library to be created. 

Usually, these constructs must not be used with an additive

constant offset as is usually allowed, i.e. no 4 as in

<code>symbol + 4</code> is allowed.  This restriction is checked at

link-time, not at assembly-time.



     <dl>

<dt><code>GOT</code>

     <dd>

Attaching this suffix to a symbol in an instruction causes the

symbol to be entered into the global offset table.  The value is

a 32-bit index for that symbol into the global offset table. 

The name of the corresponding relocation is

<code>R_CRIS_32_GOT</code>.  Example: <code>move.d

[$r0+extsym:GOT],$r9</code>



     <br><dt><code>GOT16</code>

     <dd>

Same as for <code>GOT</code>, but the value is a 16-bit index into the

global offset table.  The corresponding relocation is

<code>R_CRIS_16_GOT</code>.  Example: <code>move.d

[$r0+asymbol:GOT16],$r10</code>



     <br><dt><code>PLT</code>

     <dd>

This suffix is used for function symbols.  It causes a

<em>procedure linkage table</em>, an array of code stubs, to be

created at the time the shared object is created or linked

against, together with a global offset table entry.  The value

is a pc-relative offset to the corresponding stub code in the

procedure linkage table.  This arrangement causes the run-time

symbol resolver to be called to look up and set the value of the

symbol the first time the function is called (at latest;

depending environment variables).  It is only safe to leave the

symbol unresolved this way if all references are function calls. 

The name of the relocation is <code>R_CRIS_32_PLT_PCREL</code>. 

Example: <code>add.d fnname:PLT,$pc</code>



     <br><dt><code>PLTG</code>

     <dd>

Like PLT, but the value is relative to the beginning of the

global offset table.  The relocation is

<code>R_CRIS_32_PLT_GOTREL</code>.  Example: <code>move.d

fnname:PLTG,$r3</code>



     <br><dt><code>GOTPLT</code>

     <dd>

Similar to <code>PLT</code>, but the value of the symbol is a 32-bit

index into the global offset table.  This is somewhat of a mix

between the effect of the <code>GOT</code> and the <code>PLT</code> suffix;

the difference to <code>GOT</code> is that there will be a procedure

linkage table entry created, and that the symbol is assumed to

be a function entry and will be resolved by the run-time

resolver as with <code>PLT</code>.  The relocation is

<code>R_CRIS_32_GOTPLT</code>.  Example: <code>jsr

[$r0+fnname:GOTPLT]</code>



     <br><dt><code>GOTPLT16</code>

     <dd>

A variant of <code>GOTPLT</code> giving a 16-bit value.  Its

relocation name is <code>R_CRIS_16_GOTPLT</code>.  Example: <code>jsr

[$r0+fnname:GOTPLT16]</code>



     <br><dt><code>GOTOFF</code>

     <dd>

This suffix must only be attached to a local symbol, but may be

used in an expression adding an offset.  The value is the

address of the symbol relative to the start of the global offset

table.  The relocation name is <code>R_CRIS_32_GOTREL</code>. 

Example: <code>move.d [$r0+localsym:GOTOFF],r3</code>

</dl>



   </body></html>



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -