cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rs6000.h (7205B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* IBM RS/6000 "XCOFF" file definitions for BFD.
      3   Copyright (C) 1990, 1991 Free Software Foundation, Inc.
      4   FIXME: Can someone provide a transliteration of this name into ASCII?
      5   Using the following chars caused a compiler warning on HIUX (so I replaced
      6   them with octal escapes), and isn't useful without an understanding of what
      7   character set it is.
      8   Written by Mimi Ph\373\364ng-Th\345o V\365 of IBM
      9   and John Gilmore of Cygnus Support.  */
     10
     11/********************** FILE HEADER **********************/
     12
     13struct external_filehdr {
     14	char f_magic[2];	/* magic number			*/
     15	char f_nscns[2];	/* number of sections		*/
     16	char f_timdat[4];	/* time & date stamp		*/
     17	char f_symptr[4];	/* file pointer to symtab	*/
     18	char f_nsyms[4];	/* number of symtab entries	*/
     19	char f_opthdr[2];	/* sizeof(optional hdr)		*/
     20	char f_flags[2];	/* flags			*/
     21};
     22
     23        /* IBM RS/6000 */
     24#define U802WRMAGIC     0730    /* writeable text segments **chh**      */
     25#define U802ROMAGIC     0735    /* readonly sharable text segments      */
     26#define U802TOCMAGIC    0737    /* readonly text segments and TOC       */
     27
     28#define BADMAG(x)	\
     29	((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
     30	 (x).f_magic != U802TOCMAGIC)
     31
     32#define	FILHDR	struct external_filehdr
     33#define	FILHSZ	20
     34
     35
     36/********************** AOUT "OPTIONAL HEADER" **********************/
     37
     38
     39typedef struct
     40{
     41  unsigned char	magic[2];	/* type of file			*/
     42  unsigned char	vstamp[2];	/* version stamp		*/
     43  unsigned char	tsize[4];	/* text size in bytes, padded to FW bdry */
     44  unsigned char	dsize[4];	/* initialized data "  "	*/
     45  unsigned char	bsize[4];	/* uninitialized data "   "	*/
     46  unsigned char	entry[4];	/* entry pt.			*/
     47  unsigned char	text_start[4];	/* base of text used for this file */
     48  unsigned char	data_start[4];	/* base of data used for this file */
     49  unsigned char	o_toc[4];	/* address of TOC */
     50  unsigned char	o_snentry[2];	/* section number of entry point */
     51  unsigned char	o_sntext[2];	/* section number of .text section */
     52  unsigned char	o_sndata[2];	/* section number of .data section */
     53  unsigned char	o_sntoc[2];	/* section number of TOC */
     54  unsigned char	o_snloader[2];	/* section number of .loader section */
     55  unsigned char	o_snbss[2];	/* section number of .bss section */
     56  unsigned char	o_algntext[2];	/* .text alignment */
     57  unsigned char	o_algndata[2];	/* .data alignment */
     58  unsigned char	o_modtype[2];	/* module type (??) */
     59  unsigned char o_cputype[2];	/* cpu type */
     60  unsigned char	o_maxstack[4];	/* max stack size (??) */
     61  unsigned char o_maxdata[4];	/* max data size (??) */
     62  unsigned char	o_resv2[12];	/* reserved */
     63}
     64AOUTHDR;
     65
     66#define AOUTSZ 72
     67#define SMALL_AOUTSZ (28)
     68#define AOUTHDRSZ 72
     69
     70#define	RS6K_AOUTHDR_OMAGIC	0x0107	/* old: text & data writeable */
     71#define	RS6K_AOUTHDR_NMAGIC	0x0108	/* new: text r/o, data r/w */
     72#define	RS6K_AOUTHDR_ZMAGIC	0x010B	/* paged: text r/o, both page-aligned */
     73
     74
     75/********************** SECTION HEADER **********************/
     76
     77
     78struct external_scnhdr {
     79	char		s_name[8];	/* section name			*/
     80	char		s_paddr[4];	/* physical address, aliased s_nlib */
     81	char		s_vaddr[4];	/* virtual address		*/
     82	char		s_size[4];	/* section size			*/
     83	char		s_scnptr[4];	/* file ptr to raw data for section */
     84	char		s_relptr[4];	/* file ptr to relocation	*/
     85	char		s_lnnoptr[4];	/* file ptr to line numbers	*/
     86	char		s_nreloc[2];	/* number of relocation entries	*/
     87	char		s_nlnno[2];	/* number of line number entries*/
     88	char		s_flags[4];	/* flags			*/
     89};
     90
     91/*
     92 * names of "special" sections
     93 */
     94#define _TEXT	".text"
     95#define _DATA	".data"
     96#define _BSS	".bss"
     97#define _PAD	".pad"
     98#define _LOADER	".loader"
     99
    100#define	SCNHDR	struct external_scnhdr
    101#define	SCNHSZ	40
    102
    103/* XCOFF uses a special .loader section with type STYP_LOADER.  */
    104#define STYP_LOADER 0x1000
    105
    106/* XCOFF uses a special .debug section with type STYP_DEBUG.  */
    107#define STYP_DEBUG 0x2000
    108
    109/* XCOFF handles line number or relocation overflow by creating
    110   another section header with STYP_OVRFLO set.  */
    111#define STYP_OVRFLO 0x8000
    112
    113/********************** LINE NUMBERS **********************/
    114
    115/* 1 line number entry for every "breakpointable" source line in a section.
    116 * Line numbers are grouped on a per function basis; first entry in a function
    117 * grouping will have l_lnno = 0 and in place of physical address will be the
    118 * symbol table index of the function name.
    119 */
    120struct external_lineno {
    121	union {
    122		char l_symndx[4];	/* function name symbol index, iff l_lnno == 0*/
    123		char l_paddr[4];	/* (physical) address of line number	*/
    124	} l_addr;
    125	char l_lnno[2];	/* line number		*/
    126};
    127
    128
    129#define	LINENO	struct external_lineno
    130#define	LINESZ	6
    131
    132
    133/********************** SYMBOLS **********************/
    134
    135#define E_SYMNMLEN	8	/* # characters in a symbol name	*/
    136#define E_FILNMLEN	14	/* # characters in a file name		*/
    137#define E_DIMNUM	4	/* # array dimensions in auxiliary entry */
    138
    139struct external_syment
    140{
    141  union {
    142    char e_name[E_SYMNMLEN];
    143    struct {
    144      char e_zeroes[4];
    145      char e_offset[4];
    146    } e;
    147  } e;
    148  char e_value[4];
    149  char e_scnum[2];
    150  char e_type[2];
    151  char e_sclass[1];
    152  char e_numaux[1];
    153};
    154
    155
    156
    157#define N_BTMASK	(017)
    158#define N_TMASK		(060)
    159#define N_BTSHFT	(4)
    160#define N_TSHIFT	(2)
    161
    162
    163union external_auxent {
    164	struct {
    165		char x_tagndx[4];	/* str, un, or enum tag indx */
    166		union {
    167			struct {
    168			    char  x_lnno[2]; /* declaration line number */
    169			    char  x_size[2]; /* str/union/array size */
    170			} x_lnsz;
    171			char x_fsize[4];	/* size of function */
    172		} x_misc;
    173		union {
    174			struct {		/* if ISFCN, tag, or .bb */
    175			    char x_lnnoptr[4];	/* ptr to fcn line # */
    176			    char x_endndx[4];	/* entry ndx past block end */
    177			} x_fcn;
    178			struct {		/* if ISARY, up to 4 dimen. */
    179			    char x_dimen[E_DIMNUM][2];
    180			} x_ary;
    181		} x_fcnary;
    182		char x_tvndx[2];		/* tv index */
    183	} x_sym;
    184
    185	union {
    186		char x_fname[E_FILNMLEN];
    187		struct {
    188			char x_zeroes[4];
    189			char x_offset[4];
    190		} x_n;
    191	} x_file;
    192
    193	struct {
    194		char x_scnlen[4];			/* section length */
    195		char x_nreloc[2];	/* # relocation entries */
    196		char x_nlinno[2];	/* # line numbers */
    197	} x_scn;
    198
    199        struct {
    200		char x_tvfill[4];	/* tv fill value */
    201		char x_tvlen[2];	/* length of .tv */
    202		char x_tvran[2][2];	/* tv range */
    203	} x_tv;		/* info about .tv section (in auxent of symbol .tv)) */
    204
    205	struct {
    206		unsigned char x_scnlen[4];
    207		unsigned char x_parmhash[4];
    208		unsigned char x_snhash[2];
    209		unsigned char x_smtyp[1];
    210		unsigned char x_smclas[1];
    211		unsigned char x_stab[4];
    212		unsigned char x_snstab[2];
    213	} x_csect;
    214
    215};
    216
    217#define	SYMENT	struct external_syment
    218#define	SYMESZ	18
    219#define	AUXENT	union external_auxent
    220#define	AUXESZ	18
    221#define DBXMASK 0x80		/* for dbx storage mask */
    222#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
    223
    224
    225
    226/********************** RELOCATION DIRECTIVES **********************/
    227
    228
    229struct external_reloc {
    230  char r_vaddr[4];
    231  char r_symndx[4];
    232  char r_size[1];
    233  char r_type[1];
    234};
    235
    236
    237#define RELOC struct external_reloc
    238#define RELSZ 10
    239
    240#define DEFAULT_DATA_SECTION_ALIGNMENT 4
    241#define DEFAULT_BSS_SECTION_ALIGNMENT 4
    242#define DEFAULT_TEXT_SECTION_ALIGNMENT 4
    243/* For new sections we haven't heard of before */
    244#define DEFAULT_SECTION_ALIGNMENT 4