Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ reloc(4) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

as(1)

ld(1)

a.out(4)

syms(4)

scnhdr(4)



reloc(4)                  FILE FORMATS                   reloc(4)



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



                                                                1





reloc(4)                  FILE FORMATS                   reloc(4)



     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  reloca-
                       tion  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 relo-
                       cation entry  must  be  the  corresponding
                       R_REFLO  entry  so the proper value of the
                       constant to be added to the symbol's  vir-
                       tual 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



                                                                2





reloc(4)                  FILE FORMATS                   reloc(4)



     relocation takes place.  This is a kluge.

SEE ALSO
     MIPS Assembly Language Programmer's Guide,  Chapter  10  the
     section entitled ``Section Relocation Information''
     as(1), ld(1), a.out(4), syms(4), scnhdr(4).

















































                                                                3



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026