RELOC(4-SysV) RISC/os Reference Manual RELOC(4-SysV)
NAME
reloc - relocation information for a MIPS 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 */
long r_symndx ; /* index into symbol table */
ushort r_type ; /* relocation type */
unsigned r_symndx:24,/* index into symbol table */
r_reserved:3,
r_type:4,/* relocation type */
r_extern:1; /* if 1 symndx is an index into the external
symbol table, else symndx is a section # */
} ;
/* Relocation types */
#define R_ABS 0
#define R_REFHALF 1
#define R_REFWORD 2
#define R_JMPADDR 3
#define R_REFHI 4
#define R_REFLO 5
#define R_GPREL 6
#define R_LITERAL 7
/* 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
The link editor reads each input section and performs relo-
cation. 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_symndex is a section number (R_SN_*). For these
entries the starting address for the section referenced by
Printed 1/15/91 Page 1
RELOC(4-SysV) RISC/os Reference Manual RELOC(4-SysV)
the section number is used in place of an external symbol
table entry's value. The assembler and loader always use
local relocation entries if the item to be relocated is
defined in the object file.
For every external relocation (except R_ABS) a signed con-
stant 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 The reference is absolute and no relocation
is necessary. The entry will be ignored.
R_REFHALF A 16-bit reference to the symbol's virtual
address.
R_REFWORD A 32-bit reference to the symbol's virtual
address.
R_JMPADDR A 26-bit jump instruction reference to the
symbol's virtual address.
R_REFHI A reference to the high 16-bits of the
symbol's virtual address. The next reloca-
tion entry must be the corresponding R_REFLO
entry so the proper value of the constant to
be added to the symbol's virtual address can
be reconstructed.
R_REFLO A reference to low 16-bits to the symbol's
virtual address.
R_GPREL A 16-bit offset to the symbol's virtual
address from the global pointer register.
R_LITERAL A 16-bit offset to the literal's virtual
address from the global pointer register.
Relocation entries are generated automatically by the assem-
bler and automatically used by the link editor. Link editor
options exist for both preserving and removing the reloca-
tion entries from object files.
The number of relocation entries for a section is found in
the s_nreloc field of the section header. This field is a
`C' language short and can overflow with large objects. If
this field overflows the section header s_flags field has
the S_NRELOC_OVFL bit set. In this case the true number of
relocation entries is found in the r_vaddr field of the
first relocation entry for that section. That relocation
entry has a type of R_ABS so it is ignored when the reloca-
tion takes place.
Page 2 Printed 1/15/91
RELOC(4-SysV) RISC/os Reference Manual RELOC(4-SysV)
SEE ALSO
MIPS Assembly Language Programmer's Guide, Chapter 10, the
section entitled ``Section Relocation Information''
a.out(4), syms(4), scnhdr(4).
as(1), ld(1) in the User's Reference Manual.
Printed 1/15/91 Page 3