b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* $XFree86: xc/programs/Xserver/hw/xfree86/loader/coff.h,v 1.5 1998/07/25 16:56:12 dawes Exp $ */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* This file was implemented from the information in the book
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync Understanding and Using COFF
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync Gintaras R. Gircys
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync O'Reilly, 1988
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync and by looking at the Linux kernel code.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync It is therefore most likely free to use...
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync If the file format changes in the COFF object, this file should be
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync subsequently updated to reflect the changes.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync The actual loader module only uses a few of the COFF structures.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync Only those are included here. If you wish more information about
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync COFF, thein check out the book mentioned above.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync*/
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifdef HAVE_XORG_CONFIG_H
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#include <xorg-config.h>
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#ifndef _COFF_H
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _COFF_H
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define E_SYMNMLEN 8 /* Number of characters in a symbol name */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Intel 386/486
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * FILE HEADER
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct COFF_filehdr {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short f_magic; /* magic number */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short f_nscns; /* number of sections */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long f_timdat; /* time & date stamp */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long f_symptr; /* file pointer to symtab */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long f_nsyms; /* number of symtab entries */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short f_opthdr; /* sizeof(optional hdr) */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short f_flags; /* flags */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} FILHDR;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define FILHSZ sizeof(FILHDR)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * SECTION HEADER
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct COFF_scnhdr {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char s_name[8]; /* section name */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long s_paddr; /* physical address */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long s_vaddr; /* virtual address */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long s_size; /* section size */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long s_scnptr; /* raw data for section */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long s_relptr; /* relocation */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long s_lnnoptr; /* line numbers */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short s_nreloc; /* number of relocation entries */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short s_nlnno; /* number of line number entries */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long s_flags; /* flags */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} SCNHDR;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define COFF_SCNHDR struct COFF_scnhdr
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define COFF_SCNHSZ sizeof(COFF_SCNHDR)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SCNHSZ COFF_SCNHSZ
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * the optional COFF header as used by Linux COFF
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char magic[2]; /* type of file */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char vstamp[2]; /* version stamp */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char tsize[4]; /* text size in bytes */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char dsize[4]; /* initialized data */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char bsize[4]; /* uninitialized data */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char entry[4]; /* entry point */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char text_start[4]; /* base of text */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char data_start[4]; /* base of data */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} AOUTHDR;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * SYMBOLS
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct COFF_syment {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync union {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char _n_name[E_SYMNMLEN]; /* Symbol name (first 8 chars) */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync struct {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long _n_zeroes; /* Leading zeros */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long _n_offset; /* Offset for a header section */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync } _n_n;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char *_n_nptr[2]; /* allows for overlaying */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync } _n;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long n_value; /* address of the segment */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync short n_scnum; /* Section number */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short n_type; /* Type of section */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char n_sclass; /* Loader class */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char n_numaux; /* Number of aux entries following */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} SYMENT;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define n_name _n._n_name
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define n_nptr _n._n_nptr[1]
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define n_zeroes _n._n_n._n_zeroes
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define n_offset _n._n_n._n_offset
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define COFF_E_SYMNMLEN 8 /* characters in a short symbol name */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define COFF_E_FILNMLEN 14 /* characters in a file name */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define COFF_E_DIMNUM 4 /* array dimensions in aux entry */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SYMNMLEN COFF_E_SYMNMLEN
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define SYMESZ 18 /* not really sizeof(SYMENT) due to padding */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Special section number found in the symbol section */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define N_UNDEF 0
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define N_ABS -1
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define N_DEBUG -2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Symbol storage class values */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define C_NULL 0
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define C_EXT 2
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define C_FILE 103
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define C_HIDEXT 107
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * AUX Entries
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct COFF_auxent {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long x_scnlen;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long x_parmhash;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short x_snhash;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned char x_smtyp;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned char x_smclas;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long x_stab;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short x_snstab;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} AUXENT;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Auxillary Symbol type values */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XTY_ER 0 /* Enternal Reference */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XTY_SD 1 /* csect section definition */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XTY_LD 2 /* Label definition */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XTY_CM 3 /* common csect definition */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Auxillary Symbol storage mapping class values */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_PR 0 /* Program code */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_RO 1 /* Read-only constant */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_DB 2 /* Debug dictionary */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_TC 3 /* TOC entry */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_UA 4 /* Unclassified */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_RW 5 /* Read/write data */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_GL 6 /* Global linkage */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_XO 7 /* Extended operation */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_SV 8 /* Supervisor call descriptor */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_BS 9 /* BSS class */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_DS 10 /* Function descriptor csect */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_UC 11 /* Unnamed FORTRAN comon */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_TI 12 /* Reserved */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_TB 13 /* Reserved */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_TC0 15 /* TOC anchor */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XMC_TD 16 /* Scalar data entry in TOC */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * RELOCATION DIRECTIVES
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef struct COFF_reloc {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long r_vaddr; /* Virtual address of item */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync long r_symndx; /* Symbol index in the symtab */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if defined(__powerpc__)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync union {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short _r_type; /* old style coff relocation type */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync struct {
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char _r_rsize; /* sign and reloc bit len */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char _r_rtype; /* toc relocation type */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync } _r_r;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync } _r;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define r_otype _r._r_type /* old style reloc - original name */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define r_rsize _r._r_r._r_rsize /* extract sign and bit len */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define r_type _r._r_r._r_rtype /* extract toc relocation type */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#else
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync unsigned short r_type; /* Relocation type */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync} RELOC;
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define COFF_RELOC struct COFF_reloc
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define COFF_RELSZ 10
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define RELSZ COFF_RELSZ
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * x86 Relocation types
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_ABS 000
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_DIR32 006
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_PCRLONG 024
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if defined(__powerpc__)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Power PC
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_LEN 0x1F /* extract bit-length field */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_SIGN 0x80 /* extract sign of relocation */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_FIXUP 0x40 /* extract code-fixup bit */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define RELOC_RLEN(x) ((x)._r._r_r._r_rsize & R_LEN)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define RELOC_RSIGN(x) ((x)._r._r_r._r_rsize & R_SIGN)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define RELOC_RFIXUP(x) ((x)._r._r_r._r_rsize & R_FIXUP)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define RELOC_RTYPE(x) ((x)._r._r_r._r_rtype)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * POWER and PowerPC - relocation types
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_POS 0x00 /* A(sym) Positive Relocation */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_NEG 0x01 /* -A(sym) Negative Relocation */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_REL 0x02 /* A(sym-*) Relative to self */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_TOC 0x03 /* A(sym-TOC) Relative to TOC */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_TRL 0x12 /* A(sym-TOC) TOC Relative indirect load. */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync /* modifiable instruction */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_TRLA 0x13 /* A(sym-TOC) TOC Rel load address. modifiable inst */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_GL 0x05 /* A(external TOC of sym) Global Linkage */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_TCL 0x06 /* A(local TOC of sym) Local object TOC address */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_RL 0x0C /* A(sym) Pos indirect load. modifiable instruction */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_RLA 0x0D /* A(sym) Pos Load Address. modifiable instruction */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_REF 0x0F /* AL0(sym) Non relocating ref. No garbage collect */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_BA 0x08 /* A(sym) Branch absolute. Cannot modify instruction */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_RBA 0x18 /* A(sym) Branch absolute. modifiable instruction */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_RBAC 0x19 /* A(sym) Branch absolute constant. modifiable instr */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_BR 0x0A /* A(sym-*) Branch rel to self. non modifiable */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_RBR 0x1A /* A(sym-*) Branch rel to self. modifiable instr */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_RBRC 0x1B /* A(sym-*) Branch absolute const. */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync /* modifiable to R_RBR */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_RTB 0x04 /* A((sym-*)/2) RT IAR Rel Branch. non modifiable */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_RRTBI 0x14 /* A((sym-*)/2) RT IAR Rel Br. modifiable to R_RRTBA */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define R_RRTBA 0x15 /* A((sym-*)/2) RT absolute br. modifiable to R_RRTBI */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* __powerpc */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* _COFF_H */