 |
Index for Section 4 |
|
 |
Alphabetical listing for R |
|
 |
Bottom of page |
|
reloc(4)
NAME
reloc - Relocation information for an object file
SYNOPSIS
#include <reloc.h>
DESCRIPTION
Object files have one relocation entry for each relocatable reference in
the text or data. If relocation information is present, it will be in the
following format.
struct reloc
{
long r_vaddr ; /* (virtual) address of
reference */
unsigned r_symndx ; /* index into symbol table */
unsigned r_type:8 ; /* relocation type */
unsigned r_extern:1 ; /* if 1 symndx is an index
into the external table
the external table, else
symndx is a section # */
unsigned r_offset;6 ; /* for R_OP_STORE, quad
based LE bit offset */
unsigned r_reserved;11; /* Must be zero */
unsigned r_size;6 ; /* R_OP_STORE, bit size */
} ;
/* Relocation types */
#define R_ABS 0
#define R_REFLONG 1
#define R_REFQUAD 2
#define R_GPREL32 3
#define R_LITERAL 4
#define R_LITUSE 5
#define R_GPDISP 6
#define R_BRADDR 7
#define R_HINT 8
#define R_SREL16 9 /* self relative 16 bit
offset */
#define R_SREL32 10 /* self relative 32 bit
offset */
#define R_SREL64 11 /* self relative 64-bit
offset */
#define R_OP_PUSH 12 /* stack[++tos] =
relocate(vaddr) */
#define R_OP_STORE 13 /* vaddr(r_offset:r_size =
stack[tos--] */
#define R_OP_PSUB 14 /* stack[tos] = stack[tos] -
relocate(vaddr) */
#define R_OP_PRSHIFT 15 /* stack[tos] = stack[tos] >>
relocate(vaddr) */
#define R_GPVALUE 16
/* Section numbers */
#define R_SN_NULL 0
#define R_SN_TEXT 1
#define R_SN_RDATA 2
#define R_SN_DATA 3
#define R_SN_SDATA 4
#define R_SN_SBSS 5
#define R_SN_BSS 6
#define R_SN_INIT 7
#define R_SN_LIT8 8
#define R_SN_LIT4 9
#define R_SN_XDATA 10
#define R_SN_PDATE 11
#define R_SN_FINI 12
#define R_SN_LITA 13
#define R_SN_ABS 14
The link editor (ld) reads each input section and performs relocation. The
relocation entries direct how references found within the input section are
treated.
If r_extern is zero then it is a local relocation entry and then r_symndx
is a section number (R_SN_*). For these entries the starting address for
the section referenced by the section number is used in place of an
external symbol table entry's value.
For every external relocation (except R_ABS) a signed constant is added to
the symbol's virtual address that the relocation entry refers to. This
constant is assembled at the address being relocated.
R_ABS A relocation has already been performed.
R_REFLONG A 32-bit reference to the symbol's virtual address.
R_REFQUAD A 64-bit reference to the symbol's virtual address.
R_GPREL32 A 32-bit displacement from the global pointer to the
symbol's virtual address.
R_LITERAL A reference to a literal in the literal address pool as
an offset from the global pointer. R_LITUSE Identifies
usage of a lteral address previously loaded into a
register. The r_symndx field identifies the specific
usage of the register. See the Assembly Language
Programmer's Guide for more information.
R_GPDISP Identifies an lda/ldah instruction pair that is used to
initialize a procedure's global-pointer register. The
r_symndx contains a byte offset, which, when added to the
r_vaddr field results in the address of the other
instruction of the pair.
R_BRADDR A 21-bit branch reference to the symbol's virtual
address.
R_HINT A 14-bit jsr hint reference to the symbol's virtual
address.
R_SREL16 A 16-bit self-relative reference to the symbol's virtual
address.
R_SREL32 A 32-bit self-relative reference to the symbols's virtual
address.
R_SREL64 A 64-bit self-relative reference to the symbol's virtual
address.
R_OP_PUSH Push symbol's virtual address on relocation expression
stack.
R_OP_STORE Pop value from the relocation expression stack and store
at the symbol's virtual address. The r_size field
determines the number of bits stored. The r_offset field
designates the bit offset from the symbol to the target.
R_OP_PSUB Pop value from the relocation expression stack and
subtract the symbol's virtual address. The result is
pushed on the relocation expression stack.
R_OP_PRSHIFT Pop value from the relocation expression stack and shift
right by the symbol's value. The result is pushed on the
relocation stack.
R_GPVALUE Specifies a new gp value is to be used starting with the
address specified by the r_vaddr field. The gp value is
the sum of the optional header's gp_value field and the
r_symndx field. The r_extern field must be zero.
RELATED INFORMATION
as(1), ld(1), a.out(4), syms(4), scnhdr(4).
Assembly Language Programmer's Guide
 |
Index for Section 4 |
|
 |
Alphabetical listing for R |
|
 |
Top of page |
|