Content-type: text/html Man page of reloc

reloc

Section: Devices and Network Interfaces (4)
Index Return to Main Contents
 

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 delim off


 

Index

NAME
SYNOPSIS
DESCRIPTION
RELATED INFORMATION

This document was created by man2html, using the manual pages.
Time: 02:40:03 GMT, October 02, 2010