Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

scnhdr(5) [ultrix man page]

scnhdr(5)							File Formats Manual							 scnhdr(5)

       scnhdr - section header for a MIPS object file

       #include < scnhdr.h>

       Every  MIPS  object file has a table of section headers that specify the layout of the data in the file.  Each section that is in an object
       file has its own header.  The C structure appears as follows:
       struct scnhdr
       char	       s_name[8];    /* section name */
       long	       s_paddr;      /* physical address, aliased s_nlib */
       long	       s_vaddr;      /* virtual address */
       long	       s_size;	     /* section size */
       long	       s_scnptr;     /* file ptr to raw data for section */
       long	       s_relptr;     /* file ptr to relocation */
       long	       s_lnnoptr;    /* file ptr to gp table */
       unsigned short  s_nreloc;     /* number of relocation entries */
       unsigned short  s_nlnno;      /* number of gp table entries */
       long	       s_flags;      /* flags */

       File pointers are byte offsets into the file; they can be used as the offset in a call to FSEEK (see If a section is initialized, the  file
       contains  the  actual bytes.  An uninitialized section is somewhat different.  It has a size, symbols defined in it, and symbols that refer
       to it.  It cannot have relocation entries or data.  Consequently, an uninitialized section does not contain data in the	object	file,  and
       the values for s_scnptr, s_relptr, and s_nreloc are zero.

       The entries that refer to line numbers (s_lnnoptr and s_nlnno) are not used for line numbers on MIPS machines.  See the header file for the
       entries to get to the line number table.  The entries that were for line numbers in the section header are  used  for  gp  tables  on  MIPS

       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; thus, it is ignored when the relocation takes place.

       The gp table gives the section size corresponding to each applicable value of the compiler option  num  (always	including  0),	sorted	by
       smallest  size  first. It is pointed to by the s_lnnoptr field in the section header and its number of entries (including the header) is in
       the s_nlnno field in the section header.  This table only needs to exist for the .sdata and .sbss sections.  If a small	section  does  not
       exist,  then  the  gp  table  for it is attached to the corresponding large section so the information still gets to the link editor, The C
       union for the gp table follows:
       union gp_table
       struct {
	       long    current_g_value;    /* actual value */
	       long    unused;
       } header;
       struct {
	       long    g_value; 	   /* hypothetical value */
	       long    bytes;		   /* section size corresponding
					      to hypothetical value */
       } entry;

       Each gp table has one header structure that contains the actual value of the num option used to produce the object  file.   An  entry  must
       exist for every num -G num option.  The applicable values are all the sizes of the data items in that section.

       For  .lib  sections,  the  number  of shared libraries is in the s_nlib field (an alias to s_paddr).  The .lib section is made up of s_nlib
       descriptions of shared libraries.  Each description of a shared library is a libscn structure followed by  the  path  name  to  the  shared
       library.  The C structure appears here and is defined in scnhdr.h :
       struct libscn
       long    size;	    /* size of this entry (including target name) */
       long    offset;	    /* offset from start of entry to target name */
       long    tsize;	    /* text size in bytes, padded to DW boundary */
       long    dsize;	    /* initialized data size */
       long    bsize;	    /* uninitialized data */
       long    text_start;  /* base of text used for this library */
       long    data_start;  /* base of data used for this library */
       long    bss_start;   /* base of bss used for this library */
       /* pathname of target shared library */

See Also
       ld(1), fseek(3s), a.out(5), reloc(5)

								       RISC								 scnhdr(5)
Man Page