|
|
1.1 ! root 1: /* $Id: a.out.h,v 1.8 2002/02/09 19:49:31 davem Exp $ */ ! 2: #ifndef __SPARC64_A_OUT_H__ ! 3: #define __SPARC64_A_OUT_H__ ! 4: ! 5: #define SPARC_PGSIZE 0x2000 /* Thanks to the sun4 architecture... */ ! 6: #define SEGMENT_SIZE SPARC_PGSIZE /* whee... */ ! 7: ! 8: #ifndef __ASSEMBLY__ ! 9: ! 10: struct exec { ! 11: unsigned char a_dynamic:1; /* A __DYNAMIC is in this image */ ! 12: unsigned char a_toolversion:7; ! 13: unsigned char a_machtype; ! 14: unsigned short a_info; ! 15: unsigned int a_text; /* length of text, in bytes */ ! 16: unsigned int a_data; /* length of data, in bytes */ ! 17: unsigned int a_bss; /* length of bss, in bytes */ ! 18: unsigned int a_syms; /* length of symbol table, in bytes */ ! 19: unsigned int a_entry; /* where program begins */ ! 20: unsigned int a_trsize; ! 21: unsigned int a_drsize; ! 22: }; ! 23: ! 24: #endif /* !__ASSEMBLY__ */ ! 25: ! 26: /* Where in the file does the text information begin? */ ! 27: #define N_TXTOFF(x) (N_MAGIC(x) == ZMAGIC ? 0 : sizeof (struct exec)) ! 28: ! 29: /* Where do the Symbols start? */ ! 30: #define N_SYMOFF(x) (N_TXTOFF(x) + (x).a_text + \ ! 31: (x).a_data + (x).a_trsize + \ ! 32: (x).a_drsize) ! 33: ! 34: /* Where does text segment go in memory after being loaded? */ ! 35: #define N_TXTADDR(x) (unsigned long)(((N_MAGIC(x) == ZMAGIC) && \ ! 36: ((x).a_entry < SPARC_PGSIZE)) ? \ ! 37: 0 : SPARC_PGSIZE) ! 38: ! 39: /* And same for the data segment.. */ ! 40: #define N_DATADDR(x) (N_MAGIC(x)==OMAGIC ? \ ! 41: (N_TXTADDR(x) + (x).a_text) \ ! 42: : (unsigned long)(_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) ! 43: ! 44: #define N_TRSIZE(a) ((a).a_trsize) ! 45: #define N_DRSIZE(a) ((a).a_drsize) ! 46: #define N_SYMSIZE(a) ((a).a_syms) ! 47: ! 48: #ifndef __ASSEMBLY__ ! 49: ! 50: /* ! 51: * Sparc relocation types ! 52: */ ! 53: enum reloc_type ! 54: { ! 55: RELOC_8, ! 56: RELOC_16, ! 57: RELOC_32, /* simplest relocs */ ! 58: RELOC_DISP8, ! 59: RELOC_DISP16, ! 60: RELOC_DISP32, /* Disp's (pc-rel) */ ! 61: RELOC_WDISP30, ! 62: RELOC_WDISP22, /* SR word disp's */ ! 63: RELOC_HI22, ! 64: RELOC_22, /* SR 22-bit relocs */ ! 65: RELOC_13, ! 66: RELOC_LO10, /* SR 13&10-bit relocs */ ! 67: RELOC_SFA_BASE, ! 68: RELOC_SFA_OFF13, /* SR S.F.A. relocs */ ! 69: RELOC_BASE10, ! 70: RELOC_BASE13, ! 71: RELOC_BASE22, /* base_relative pic */ ! 72: RELOC_PC10, ! 73: RELOC_PC22, /* special pc-rel pic */ ! 74: RELOC_JMP_TBL, /* jmp_tbl_rel in pic */ ! 75: RELOC_SEGOFF16, /* ShLib offset-in-seg */ ! 76: RELOC_GLOB_DAT, ! 77: RELOC_JMP_SLOT, ! 78: RELOC_RELATIVE /* rtld relocs */ ! 79: }; ! 80: ! 81: /* ! 82: * Format of a relocation datum. ! 83: */ ! 84: struct relocation_info /* used when header.a_machtype == M_SPARC */ ! 85: { ! 86: unsigned int r_address; /* relocation addr */ ! 87: unsigned int r_index:24; /* segment index or symbol index */ ! 88: unsigned int r_extern:1; /* if F, r_index==SEG#; if T, SYM idx */ ! 89: int r_pad:2; /* <unused> */ ! 90: enum reloc_type r_type:5; /* type of relocation to perform */ ! 91: int r_addend; /* addend for relocation value */ ! 92: }; ! 93: ! 94: #define N_RELOCATION_INFO_DECLARED 1 ! 95: ! 96: #ifdef __KERNEL__ ! 97: ! 98: #define STACK_TOP32 ((1UL << 32UL) - PAGE_SIZE) ! 99: #define STACK_TOP64 (0x0000080000000000UL - (1UL << 32UL)) ! 100: ! 101: #define STACK_TOP (test_thread_flag(TIF_32BIT) ? \ ! 102: STACK_TOP32 : STACK_TOP64) ! 103: ! 104: #endif ! 105: ! 106: #endif /* !(__ASSEMBLY__) */ ! 107: ! 108: #endif /* !(__SPARC64_A_OUT_H__) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.