URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/trunk/gnu-stable/binutils-2.20.1/include/aout
- from Rev 816 to Rev 818
- ↔ Reverse comparison
Rev 816 → Rev 818
/sun4.h
0,0 → 1,235
/* SPARC-specific values for a.out files |
|
Copyright 2001 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
/* Some systems, e.g., AIX, may have defined this in header files already |
included. */ |
#undef TARGET_PAGE_SIZE |
#define TARGET_PAGE_SIZE 0x2000 /* 8K. aka NBPG in <sys/param.h> */ |
/* Note that some SPARCs have 4K pages, some 8K, some others. */ |
|
#define SEG_SIZE_SPARC TARGET_PAGE_SIZE |
#define SEG_SIZE_SUN3 0x20000 /* Resolution of r/w protection hw */ |
|
#define TEXT_START_ADDR TARGET_PAGE_SIZE /* Location 0 is not accessible */ |
#define N_HEADER_IN_TEXT(x) 1 |
|
/* Non-default definitions of the accessor macros... */ |
|
/* Segment size varies on Sun-3 versus Sun-4. */ |
|
#define N_SEGSIZE(x) (N_MACHTYPE(x) == M_SPARC? SEG_SIZE_SPARC: \ |
N_MACHTYPE(x) == M_68020? SEG_SIZE_SUN3: \ |
/* Guess? */ TARGET_PAGE_SIZE) |
|
/* Virtual Address of text segment from the a.out file. For OMAGIC, |
(almost always "unlinked .o's" these days), should be zero. |
Sun added a kludge so that shared libraries linked ZMAGIC get |
an address of zero if a_entry (!!!) is lower than the otherwise |
expected text address. These kludges have gotta go! |
For linked files, should reflect reality if we know it. */ |
|
/* This differs from the version in aout64.h (which we override by defining |
it here) only for NMAGIC (we return TEXT_START_ADDR+EXEC_BYTES_SIZE; |
they return 0). */ |
|
#define N_TXTADDR(x) \ |
(N_MAGIC(x)==OMAGIC? 0 \ |
: (N_MAGIC(x) == ZMAGIC && (x).a_entry < TEXT_START_ADDR)? 0 \ |
: TEXT_START_ADDR+EXEC_BYTES_SIZE) |
|
/* When a file is linked against a shared library on SunOS 4, the |
dynamic bit in the exec header is set, and the first symbol in the |
symbol table is __DYNAMIC. Its value is the address of the |
following structure. */ |
|
struct external_sun4_dynamic |
{ |
/* The version number of the structure. SunOS 4.1.x creates files |
with version number 3, which is what this structure is based on. |
According to gdb, version 2 is similar. I believe that version 2 |
used a different type of procedure linkage table, and there may |
have been other differences. */ |
bfd_byte ld_version[4]; |
/* The virtual address of a 28 byte structure used in debugging. |
The contents are filled in at run time by ld.so. */ |
bfd_byte ldd[4]; |
/* The virtual address of another structure with information about |
how to relocate the executable at run time. */ |
bfd_byte ld[4]; |
}; |
|
/* The size of the debugging structure pointed to by the debugger |
field of __DYNAMIC. */ |
#define EXTERNAL_SUN4_DYNAMIC_DEBUGGER_SIZE (24) |
|
/* The structure pointed to by the linker field of __DYNAMIC. As far |
as I can tell, most of the addresses in this structure are offsets |
within the file, but some are actually virtual addresses. */ |
|
struct internal_sun4_dynamic_link |
{ |
/* Linked list of loaded objects. This is filled in at runtime by |
ld.so and probably by dlopen. */ |
unsigned long ld_loaded; |
|
/* The address of the list of names of shared objects which must be |
included at runtime. Each entry in the list is 16 bytes: the 4 |
byte address of the string naming the object (e.g., for -lc this |
is "c"); 4 bytes of flags--the high bit is whether to search for |
the object using the library path; the 2 byte major version |
number; the 2 byte minor version number; the 4 byte address of |
the next entry in the list (zero if this is the last entry). The |
version numbers seem to only be non-zero when doing library |
searching. */ |
unsigned long ld_need; |
|
/* The address of the path to search for the shared objects which |
must be included. This points to a string in PATH format which |
is generated from the -L arguments to the linker. According to |
the man page, ld.so implicitly adds ${LD_LIBRARY_PATH} to the |
beginning of this string and /lib:/usr/lib:/usr/local/lib to the |
end. The string is terminated by a null byte. This field is |
zero if there is no additional path. */ |
unsigned long ld_rules; |
|
/* The address of the global offset table. This appears to be a |
virtual address, not a file offset. The first entry in the |
global offset table seems to be the virtual address of the |
sun4_dynamic structure (the same value as the __DYNAMIC symbol). |
The global offset table is used for PIC code to hold the |
addresses of variables. A dynamically linked file which does not |
itself contain PIC code has a four byte global offset table. */ |
unsigned long ld_got; |
|
/* The address of the procedure linkage table. This appears to be a |
virtual address, not a file offset. |
|
On a SPARC, the table is composed of 12 byte entries, each of |
which consists of three instructions. The first entry is |
sethi %hi(0),%g1 |
jmp %g1 |
nop |
These instructions are changed by ld.so into a jump directly into |
ld.so itself. Each subsequent entry is |
save %sp, -96, %sp |
call <address of first entry in procedure linkage table> |
<reloc_number | 0x01000000> |
The reloc_number is the number of the reloc to use to resolve |
this entry. The reloc will be a JMP_SLOT reloc against some |
symbol that is not defined in this object file but should be |
defined in a shared object (if it is not, ld.so will report a |
runtime error and exit). The constant 0x010000000 turns the |
reloc number into a sethi of %g0, which does nothing since %g0 is |
hardwired to zero. |
|
When one of these entries is executed, it winds up calling into |
ld.so. ld.so looks at the reloc number, available via the return |
address, to determine which entry this is. It then looks at the |
reloc and patches up the entry in the table into a sethi and jmp |
to the real address followed by a nop. This means that the reloc |
lookup only has to happen once, and it also means that the |
relocation only needs to be done if the function is actually |
called. The relocation is expensive because ld.so must look up |
the symbol by name. |
|
The size of the procedure linkage table is given by the ld_plt_sz |
field. */ |
unsigned long ld_plt; |
|
/* The address of the relocs. These are in the same format as |
ordinary relocs. Symbol index numbers refer to the symbols |
pointed to by ld_stab. I think the only way to determine the |
number of relocs is to assume that all the bytes from ld_rel to |
ld_hash contain reloc entries. */ |
unsigned long ld_rel; |
|
/* The address of a hash table of symbols. The hash table has |
roughly the same number of entries as there are dynamic symbols; |
I think the only way to get the exact size is to assume that |
every byte from ld_hash to ld_stab is devoted to the hash table. |
|
Each entry in the hash table is eight bytes. The first four |
bytes are a symbol index into the dynamic symbols. The second |
four bytes are the index of the next hash table entry in the |
bucket. The ld_buckets field gives the number of buckets, say B. |
The first B entries in the hash table each start a bucket which |
is chained through the second four bytes of each entry. A value |
of zero ends the chain. |
|
The hash function is simply |
h = 0; |
while (*string != '\0') |
h = (h << 1) + *string++; |
h &= 0x7fffffff; |
|
To look up a symbol, compute the hash value of the name. Take |
the modulos of hash value and the number of buckets. Start at |
that entry in the hash table. See if the symbol (from the first |
four bytes of the hash table entry) has the name you are looking |
for. If not, use the chain field (the second four bytes of the |
hash table entry) to move on to the next entry in this bucket. |
If the chain field is zero you have reached the end of the |
bucket, and the symbol is not in the hash table. */ |
unsigned long ld_hash; |
|
/* The address of the symbol table. This is a list of |
external_nlist structures. The string indices are relative to |
the ld_symbols field. I think the only way to determine the |
number of symbols is to assume that all the bytes between ld_stab |
and ld_symbols are external_nlist structures. */ |
unsigned long ld_stab; |
|
/* I don't know what this is for. It seems to always be zero. */ |
unsigned long ld_stab_hash; |
|
/* The number of buckets in the hash table. */ |
unsigned long ld_buckets; |
|
/* The address of the symbol string table. The first string in this |
string table need not be the empty string. */ |
unsigned long ld_symbols; |
|
/* The size in bytes of the symbol string table. */ |
unsigned long ld_symb_size; |
|
/* The size in bytes of the text segment. */ |
unsigned long ld_text; |
|
/* The size in bytes of the procedure linkage table. */ |
unsigned long ld_plt_sz; |
}; |
|
/* The external form of the structure. */ |
|
struct external_sun4_dynamic_link |
{ |
bfd_byte ld_loaded[4]; |
bfd_byte ld_need[4]; |
bfd_byte ld_rules[4]; |
bfd_byte ld_got[4]; |
bfd_byte ld_plt[4]; |
bfd_byte ld_rel[4]; |
bfd_byte ld_hash[4]; |
bfd_byte ld_stab[4]; |
bfd_byte ld_stab_hash[4]; |
bfd_byte ld_buckets[4]; |
bfd_byte ld_symbols[4]; |
bfd_byte ld_symb_size[4]; |
bfd_byte ld_text[4]; |
bfd_byte ld_plt_sz[4]; |
}; |
/adobe.h
0,0 → 1,313
/* `a.out.adobe' differences from standard a.out files |
|
Copyright 2001 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
#ifndef __A_OUT_ADOBE_H__ |
#define __A_OUT_ADOBE_H__ |
|
#define BYTES_IN_WORD 4 |
|
/* Struct external_exec is the same. */ |
|
/* This is the layout on disk of the 32-bit or 64-bit exec header. */ |
|
struct external_exec |
{ |
bfd_byte e_info[4]; /* magic number and stuff */ |
bfd_byte e_text[BYTES_IN_WORD]; /* length of text section in bytes */ |
bfd_byte e_data[BYTES_IN_WORD]; /* length of data section in bytes */ |
bfd_byte e_bss[BYTES_IN_WORD]; /* length of bss area in bytes */ |
bfd_byte e_syms[BYTES_IN_WORD]; /* length of symbol table in bytes */ |
bfd_byte e_entry[BYTES_IN_WORD]; /* start address */ |
bfd_byte e_trsize[BYTES_IN_WORD]; /* length of text relocation info */ |
bfd_byte e_drsize[BYTES_IN_WORD]; /* length of data relocation info */ |
}; |
|
#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7) |
|
/* Magic numbers for a.out files */ |
|
#undef ZMAGIC |
#define ZMAGIC 0xAD0BE /* Cute, eh? */ |
#undef OMAGIC |
#undef NMAGIC |
|
#define N_BADMAG(x) ((x).a_info != ZMAGIC) |
|
/* By default, segment size is constant. But some machines override this |
to be a function of the a.out header (e.g. machine type). */ |
#ifndef N_SEGSIZE |
#define N_SEGSIZE(x) SEGMENT_SIZE |
#endif |
#undef N_SEGSIZE /* FIXMEXXXX */ |
|
/* Segment information for the a.out.Adobe format is specified after the |
file header. It contains N segment descriptors, followed by one with |
a type of zero. |
|
The actual text of the segments starts at N_TXTOFF in the file, |
regardless of how many or how few segment headers there are. */ |
|
struct external_segdesc { |
unsigned char e_type[1]; |
unsigned char e_size[3]; |
unsigned char e_virtbase[4]; |
unsigned char e_filebase[4]; |
}; |
|
struct internal_segdesc { |
unsigned int a_type:8; /* Segment type N_TEXT, N_DATA, 0 */ |
unsigned int a_size:24; /* Segment size */ |
bfd_vma a_virtbase; /* Virtual address */ |
unsigned int a_filebase; /* Base address in object file */ |
}; |
|
#define N_TXTADDR(x) \ |
|
/* This is documented to be at 1024, but appears to really be at 2048. |
FIXME?! */ |
#define N_TXTOFF(x) 2048 |
|
#define N_TXTSIZE(x) ((x).a_text) |
|
#define N_DATADDR(x) |
|
#define N_BSSADDR(x) |
|
/* Offsets of the various portions of the file after the text segment. */ |
|
#define N_DATOFF(x) ( N_TXTOFF(x) + N_TXTSIZE(x) ) |
#define N_TRELOFF(x) ( N_DATOFF(x) + (x).a_data ) |
#define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize ) |
#define N_SYMOFF(x) ( N_DRELOFF(x) + (x).a_drsize ) |
#define N_STROFF(x) ( N_SYMOFF(x) + (x).a_syms ) |
|
/* Symbols */ |
struct external_nlist { |
bfd_byte e_strx[BYTES_IN_WORD]; /* index into string table of name */ |
bfd_byte e_type[1]; /* type of symbol */ |
bfd_byte e_other[1]; /* misc info (usually empty) */ |
bfd_byte e_desc[2]; /* description field */ |
bfd_byte e_value[BYTES_IN_WORD]; /* value of symbol */ |
}; |
|
#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD) |
|
struct internal_nlist { |
unsigned long n_strx; /* index into string table of name */ |
unsigned char n_type; /* type of symbol */ |
unsigned char n_other; /* misc info (usually empty) */ |
unsigned short n_desc; /* description field */ |
bfd_vma n_value; /* value of symbol */ |
}; |
|
/* The n_type field is the symbol type, containing: */ |
|
#define N_UNDF 0 /* Undefined symbol */ |
#define N_ABS 2 /* Absolute symbol -- defined at particular addr */ |
#define N_TEXT 4 /* Text sym -- defined at offset in text seg */ |
#define N_DATA 6 /* Data sym -- defined at offset in data seg */ |
#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg */ |
#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink) */ |
#define N_FN 0x1f /* File name of .o file */ |
#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh) */ |
/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT, |
N_DATA, or N_BSS. When the low-order bit of other types is set, |
(e.g. N_WARNING versus N_FN), they are two different types. */ |
#define N_EXT 1 /* External symbol (as opposed to local-to-this-file) */ |
#define N_TYPE 0x1e |
#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol */ |
|
#define N_INDR 0x0a |
|
/* The following symbols refer to set elements. |
All the N_SET[ATDB] symbols with the same name form one set. |
Space is allocated for the set in the text section, and each set |
elements value is stored into one word of the space. |
The first word of the space is the length of the set (number of elements). |
|
The address of the set is made into an N_SETV symbol |
whose name is the same as the name of the set. |
This symbol acts like a N_DATA global symbol |
in that it can satisfy undefined external references. */ |
|
/* These appear as input to LD, in a .o file. */ |
#define N_SETA 0x14 /* Absolute set element symbol */ |
#define N_SETT 0x16 /* Text set element symbol */ |
#define N_SETD 0x18 /* Data set element symbol */ |
#define N_SETB 0x1A /* Bss set element symbol */ |
|
/* This is output from LD. */ |
#define N_SETV 0x1C /* Pointer to set vector in data area. */ |
|
/* Warning symbol. The text gives a warning message, the next symbol |
in the table will be undefined. When the symbol is referenced, the |
message is printed. */ |
|
#define N_WARNING 0x1e |
|
/* Relocations |
|
There are two types of relocation flavours for a.out systems, |
standard and extended. The standard form is used on systems where the |
instruction has room for all the bits of an offset to the operand, whilst |
the extended form is used when an address operand has to be split over n |
instructions. Eg, on the 68k, each move instruction can reference |
the target with a displacement of 16 or 32 bits. On the sparc, move |
instructions use an offset of 14 bits, so the offset is stored in |
the reloc field, and the data in the section is ignored. |
*/ |
|
/* This structure describes a single relocation to be performed. |
The text-relocation section of the file is a vector of these structures, |
all of which apply to the text section. |
Likewise, the data-relocation section applies to the data section. */ |
|
struct reloc_std_external { |
bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */ |
bfd_byte r_index[3]; /* symbol table index of symbol */ |
bfd_byte r_type[1]; /* relocation type */ |
}; |
|
#define RELOC_STD_BITS_PCREL_BIG 0x80 |
#define RELOC_STD_BITS_PCREL_LITTLE 0x01 |
|
#define RELOC_STD_BITS_LENGTH_BIG 0x60 |
#define RELOC_STD_BITS_LENGTH_SH_BIG 5 /* To shift to units place */ |
#define RELOC_STD_BITS_LENGTH_LITTLE 0x06 |
#define RELOC_STD_BITS_LENGTH_SH_LITTLE 1 |
|
#define RELOC_STD_BITS_EXTERN_BIG 0x10 |
#define RELOC_STD_BITS_EXTERN_LITTLE 0x08 |
|
#define RELOC_STD_BITS_BASEREL_BIG 0x08 |
#define RELOC_STD_BITS_BASEREL_LITTLE 0x08 |
|
#define RELOC_STD_BITS_JMPTABLE_BIG 0x04 |
#define RELOC_STD_BITS_JMPTABLE_LITTLE 0x04 |
|
#define RELOC_STD_BITS_RELATIVE_BIG 0x02 |
#define RELOC_STD_BITS_RELATIVE_LITTLE 0x02 |
|
#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry */ |
|
struct reloc_std_internal |
{ |
bfd_vma r_address; /* Address (within segment) to be relocated. */ |
/* The meaning of r_symbolnum depends on r_extern. */ |
unsigned int r_symbolnum:24; |
/* Nonzero means value is a pc-relative offset |
and it should be relocated for changes in its own address |
as well as for changes in the symbol or section specified. */ |
unsigned int r_pcrel:1; |
/* Length (as exponent of 2) of the field to be relocated. |
Thus, a value of 2 indicates 1<<2 bytes. */ |
unsigned int r_length:2; |
/* 1 => relocate with value of symbol. |
r_symbolnum is the index of the symbol |
in files the symbol table. |
0 => relocate with the address of a segment. |
r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS |
(the N_EXT bit may be set also, but signifies nothing). */ |
unsigned int r_extern:1; |
/* The next three bits are for SunOS shared libraries, and seem to |
be undocumented. */ |
unsigned int r_baserel:1; /* Linkage table relative */ |
unsigned int r_jmptable:1; /* pc-relative to jump table */ |
unsigned int r_relative:1; /* "relative relocation" */ |
/* unused */ |
unsigned int r_pad:1; /* Padding -- set to zero */ |
}; |
|
|
/* EXTENDED RELOCS */ |
|
struct reloc_ext_external { |
bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */ |
bfd_byte r_index[3]; /* symbol table index of symbol */ |
bfd_byte r_type[1]; /* relocation type */ |
bfd_byte r_addend[BYTES_IN_WORD]; /* datum addend */ |
}; |
|
#define RELOC_EXT_BITS_EXTERN_BIG 0x80 |
#define RELOC_EXT_BITS_EXTERN_LITTLE 0x01 |
|
#define RELOC_EXT_BITS_TYPE_BIG 0x1F |
#define RELOC_EXT_BITS_TYPE_SH_BIG 0 |
#define RELOC_EXT_BITS_TYPE_LITTLE 0xF8 |
#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3 |
|
/* Bytes per relocation entry */ |
#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD) |
|
enum reloc_type |
{ |
/* simple relocations */ |
RELOC_8, /* data[0:7] = addend + sv */ |
RELOC_16, /* data[0:15] = addend + sv */ |
RELOC_32, /* data[0:31] = addend + sv */ |
/* pc-rel displacement */ |
RELOC_DISP8, /* data[0:7] = addend - pc + sv */ |
RELOC_DISP16, /* data[0:15] = addend - pc + sv */ |
RELOC_DISP32, /* data[0:31] = addend - pc + sv */ |
/* Special */ |
RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */ |
RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */ |
RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */ |
RELOC_22, /* data[0:21] = (addend + sv) */ |
RELOC_13, /* data[0:12] = (addend + sv) */ |
RELOC_LO10, /* data[0:9] = (addend + sv) */ |
RELOC_SFA_BASE, |
RELOC_SFA_OFF13, |
/* P.I.C. (base-relative) */ |
RELOC_BASE10, /* Not sure - maybe we can do this the */ |
RELOC_BASE13, /* right way now */ |
RELOC_BASE22, |
/* for some sort of pc-rel P.I.C. (?) */ |
RELOC_PC10, |
RELOC_PC22, |
/* P.I.C. jump table */ |
RELOC_JMP_TBL, |
/* reputedly for shared libraries somehow */ |
RELOC_SEGOFF16, |
RELOC_GLOB_DAT, |
RELOC_JMP_SLOT, |
RELOC_RELATIVE, |
|
RELOC_11, |
RELOC_WDISP2_14, |
RELOC_WDISP19, |
RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */ |
RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */ |
|
/* 29K relocation types */ |
RELOC_JUMPTARG, |
RELOC_CONST, |
RELOC_CONSTH, |
|
NO_RELOC |
}; |
|
|
struct reloc_internal { |
bfd_vma r_address; /* offset of of data to relocate */ |
long r_index; /* symbol table index of symbol */ |
enum reloc_type r_type; /* relocation type */ |
bfd_vma r_addend; /* datum addend */ |
}; |
|
#endif /* __A_OUT_ADOBE_H__ */ |
/host.h
0,0 → 1,42
/* host.h - Parameters about the a.out format, based on the host system |
on which the program is compiled. |
|
Copyright 2001 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
/* Address of data segment in memory after it is loaded. |
It is up to you to define SEGMENT_SIZE on machines not listed here. */ |
#ifndef SEGMENT_SIZE |
|
#if defined(hp300) || defined(pyr) |
#define SEGMENT_SIZE page_size |
#endif |
|
#ifdef sony |
#define SEGMENT_SIZE 0x1000 |
#endif /* Sony. */ |
|
#ifdef is68k |
#define SEGMENT_SIZE 0x20000 |
#endif |
|
#if defined(m68k) && defined(PORTAR) |
#define TARGET_PAGE_SIZE 0x400 |
#define SEGMENT_SIZE TARGET_PAGE_SIZE |
#endif |
|
#endif /*!defined(SEGMENT_SIZE)*/ |
|
/dynix3.h
0,0 → 1,86
/* a.out specifics for Sequent Symmetry running Dynix 3.x |
|
Copyright 2001 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
#ifndef A_OUT_DYNIX3_H |
#define A_OUT_DYNIX3_H |
|
#define external_exec dynix_external_exec |
|
/* struct exec for Dynix 3 |
|
a_gdtbl and a_bootstrap are only for standalone binaries. |
Shared data fields are not supported by the kernel as of Dynix 3.1, |
but are supported by Dynix compiler programs. */ |
struct dynix_external_exec |
{ |
unsigned char e_info[4]; |
unsigned char e_text[4]; |
unsigned char e_data[4]; |
unsigned char e_bss[4]; |
unsigned char e_syms[4]; |
unsigned char e_entry[4]; |
unsigned char e_trsize[4]; |
unsigned char e_drsize[4]; |
unsigned char e_g_code[8]; |
unsigned char e_g_data[8]; |
unsigned char e_g_desc[8]; |
unsigned char e_shdata[4]; |
unsigned char e_shbss[4]; |
unsigned char e_shdrsize[4]; |
unsigned char e_bootstrap[44]; |
unsigned char e_reserved[12]; |
unsigned char e_version[4]; |
}; |
|
#define EXEC_BYTES_SIZE (128) |
|
/* All executables under Dynix are demand paged with read-only text, |
Thus no NMAGIC. |
|
ZMAGIC has a page of 0s at virtual 0, |
XMAGIC has an invalid page at virtual 0. */ |
#define OMAGIC 0x12eb /* .o */ |
#define ZMAGIC 0x22eb /* zero @ 0, demand load */ |
#define XMAGIC 0x32eb /* invalid @ 0, demand load */ |
#define SMAGIC 0x42eb /* standalone, not supported here */ |
|
#define N_BADMAG(x) ((OMAGIC != N_MAGIC(x)) && \ |
(ZMAGIC != N_MAGIC(x)) && \ |
(XMAGIC != N_MAGIC(x)) && \ |
(SMAGIC != N_MAGIC(x))) |
|
#define N_ADDRADJ(x) ((ZMAGIC == N_MAGIC(x) || XMAGIC == N_MAGIC(x)) ? 0x1000 : 0) |
|
#define N_TXTOFF(x) (EXEC_BYTES_SIZE) |
#define N_DATOFF(x) (N_TXTOFF(x) + N_TXTSIZE(x)) |
#define N_SHDATOFF(x) (N_DATOFF(x) + (x).a_data) |
#define N_TRELOFF(x) (N_SHDATOFF(x) + (x).a_shdata) |
#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize) |
#define N_SHDRELOFF(x) (N_DRELOFF(x) + (x).a_drsize) |
#define N_SYMOFF(x) (N_SHDRELOFF(x) + (x).a_shdrsize) |
#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms) |
|
#define N_TXTADDR(x) \ |
(((OMAGIC == N_MAGIC(x)) || (SMAGIC == N_MAGIC(x))) ? 0 \ |
: TEXT_START_ADDR + EXEC_BYTES_SIZE) |
|
#define N_TXTSIZE(x) \ |
(((OMAGIC == N_MAGIC(x)) || (SMAGIC == N_MAGIC(x))) ? ((x).a_text) \ |
: ((x).a_text - N_ADDRADJ(x) - EXEC_BYTES_SIZE)) |
|
#endif /* A_OUT_DYNIX3_H */ |
/hp300hpux.h
0,0 → 1,119
/* Special version of <a.out.h> for use under hp-ux. |
Copyright 1988, 1993, 1995, 2001 Free Software Foundation, Inc. */ |
|
struct hp300hpux_exec_bytes |
{ |
unsigned char e_info[4]; /* a_machtype/a_magic */ |
unsigned char e_spare1[4]; |
unsigned char e_spare2[4]; |
unsigned char e_text[4]; /* length of text, in bytes */ |
unsigned char e_data[4]; /* length of data, in bytes */ |
unsigned char e_bss[4]; /* length of uninitialized data area , in bytes */ |
unsigned char e_trsize[4]; /* length of relocation info for text, in bytes*/ |
unsigned char e_drsize[4]; /* length of relocation info for data, in bytes*/ |
unsigned char e_passize[4];/* HP = pascal interface size */ |
unsigned char e_syms[4]; /* HP = symbol table size */ |
unsigned char e_spare5[4]; /* HP = debug name table size */ |
unsigned char e_entry[4]; /* start address */ |
unsigned char e_spare6[4]; /* HP = source line table size */ |
unsigned char e_supsize[4];/* HP = value table size */ |
unsigned char e_drelocs[4]; |
unsigned char e_extension[4]; /* file offset of extension */ |
}; |
#define EXEC_BYTES_SIZE 64 |
|
struct hp300hpux_nlist_bytes |
{ |
unsigned char e_value[4]; |
unsigned char e_type[1]; |
unsigned char e_length[1]; /* length of ascii symbol name */ |
unsigned char e_almod[2]; /* alignment mod */ |
unsigned char e_shlib[2]; /* info about dynamic linking */ |
}; |
#define EXTERNAL_NLIST_SIZE 10 |
|
struct hp300hpux_reloc |
{ |
unsigned char r_address[4];/* offset of of data to relocate */ |
unsigned char r_index[2]; /* symbol table index of symbol */ |
unsigned char r_type[1]; /* relocation type */ |
unsigned char r_length[1]; /* length of item to reloc */ |
}; |
|
struct hp300hpux_header_extension |
{ |
unsigned char e_syms[4]; |
unsigned char unique_headers[12*4]; |
unsigned char e_header[2]; /* type of header */ |
unsigned char e_version[2]; /* version */ |
unsigned char e_size[4]; /* bytes following*/ |
unsigned char e_extension[4];/* file offset of next extension */ |
}; |
#define EXTERNAL_EXTENSION_HEADER_SIZE (16*4) |
|
/* hpux separates object files (0x106) and impure executables (0x107) */ |
/* but the bfd code does not distinguish between them. Since we want to*/ |
/* read hpux .o files, we add an special define and use it below in */ |
/* offset and address calculations. */ |
|
#define HPUX_DOT_O_MAGIC 0x106 |
#define OMAGIC 0x107 /* object file or impure executable. */ |
#define NMAGIC 0x108 /* Code indicating pure executable. */ |
#define ZMAGIC 0x10B /* demand-paged executable. */ |
|
#define N_HEADER_IN_TEXT(x) 0 |
|
#if 0 /* libaout.h only uses the lower 8 bits */ |
#define HP98x6_ID 0x20A |
#define HP9000S200_ID 0x20C |
#endif |
#define HP98x6_ID 0x0A |
#define HP9000S200_ID 0x0C |
|
#define N_BADMAG(x) ((_N_BADMAG (x)) || (_N_BADMACH (x))) |
|
#define N_DATADDR(x) \ |
((N_MAGIC (x) == OMAGIC || N_MAGIC (x) == HPUX_DOT_O_MAGIC) \ |
? (N_TXTADDR (x) + N_TXTSIZE (x)) \ |
: (N_SEGSIZE (x) + ((N_TXTADDR (x) + N_TXTSIZE (x) - 1) \ |
& ~ (bfd_vma) (N_SEGSIZE (x) - 1)))) |
|
#define _N_BADMACH(x) \ |
(((N_MACHTYPE (x)) != HP9000S200_ID) && ((N_MACHTYPE (x)) != HP98x6_ID)) |
|
#define _N_BADMAG(x) (N_MAGIC(x) != HPUX_DOT_O_MAGIC \ |
&& N_MAGIC(x) != OMAGIC \ |
&& N_MAGIC(x) != NMAGIC \ |
&& N_MAGIC(x) != ZMAGIC ) |
|
#undef _N_HDROFF |
#define _N_HDROFF(x) (SEGMENT_SIZE - (sizeof (struct exec))) |
|
#undef N_DATOFF |
#undef N_PASOFF |
#undef N_SYMOFF |
#undef N_SUPOFF |
#undef N_TRELOFF |
#undef N_DRELOFF |
#undef N_STROFF |
|
#define N_DATOFF(x) ( N_TXTOFF(x) + N_TXTSIZE(x) ) |
#define N_PASOFF(x) ( N_DATOFF(x) + (x).a_data) |
#define N_SYMOFF(x) ( N_PASOFF(x) /* + (x).a_passize*/ ) |
#define N_SUPOFF(x) ( N_SYMOFF(x) + (x).a_syms ) |
#define N_TRELOFF(x) ( N_SUPOFF(x) /* + 0 (x).a_supsize*/ ) |
#define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize ) |
#define N_EXTHOFF(x) ( N_DRELOFF(x) /* + 0 (x).a_drsize */) |
#define N_STROFF(x) ( 0 /* no string table */ ) |
|
/* use these when the file has gnu symbol tables */ |
#define N_GNU_TRELOFF(x) (N_DATOFF(x) + (x).a_data) |
#define N_GNU_DRELOFF(x) (N_GNU_TRELOFF(x) + (x).a_trsize) |
#define N_GNU_SYMOFF(x) (N_GNU_DRELOFF(x) + (x).a_drsize) |
|
#define TARGET_PAGE_SIZE 0x1000 |
#define SEGMENT_SIZE 0x1000 |
#define TEXT_START_ADDR 0 |
|
#undef N_SHARED_LIB |
#define N_SHARED_LIB(x) ( 0 /* no shared libraries */ ) |
/stab.def
0,0 → 1,282
/* Table of DBX symbol codes for the GNU system. |
Copyright 1988, 1991, 1992, 1993, 1994, 1996, 1998, 2004 |
Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or |
modify it under the terms of the GNU General Public License as |
published by the Free Software Foundation; either version 2 of the |
License, or (at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
/* New stab from Solaris 2. This uses an n_type of 0, which in a.out files |
overlaps the N_UNDF used for ordinary symbols. In ELF files, the |
debug information is in a different file section, so there is no conflict. |
This symbol's n_value gives the size of the string section associated |
with this file. The symbol's n_strx (relative to the just-updated |
string section start address) gives the name of the source file, |
e.g. "foo.c", without any path information. The symbol's n_desc gives |
the count of upcoming symbols associated with this file (not including |
this one). */ |
/* __define_stab (N_UNDF, 0x00, "UNDF") */ |
|
/* Global variable. Only the name is significant. |
To find the address, look in the corresponding external symbol. */ |
__define_stab (N_GSYM, 0x20, "GSYM") |
|
/* Function name for BSD Fortran. Only the name is significant. |
To find the address, look in the corresponding external symbol. */ |
__define_stab (N_FNAME, 0x22, "FNAME") |
|
/* Function name or text-segment variable for C. Value is its address. |
Desc is supposedly starting line number, but GCC doesn't set it |
and DBX seems not to miss it. */ |
__define_stab (N_FUN, 0x24, "FUN") |
|
/* Data-segment variable with internal linkage. Value is its address. |
"Static Sym". */ |
__define_stab (N_STSYM, 0x26, "STSYM") |
|
/* BSS-segment variable with internal linkage. Value is its address. */ |
__define_stab (N_LCSYM, 0x28, "LCSYM") |
|
/* Name of main routine. Only the name is significant. */ |
__define_stab (N_MAIN, 0x2a, "MAIN") |
|
/* Solaris2: Read-only data symbols. */ |
__define_stab (N_ROSYM, 0x2c, "ROSYM") |
|
/* MacOS X: |
The beginning of a relocatable function block - including stabs. */ |
__define_stab (N_BNSYM, 0x2e, "BNSYM") |
|
/* Global symbol in Pascal. |
Supposedly the value is its line number; I'm skeptical. */ |
__define_stab (N_PC, 0x30, "PC") |
|
/* Number of symbols: 0, files,,funcs,lines according to Ultrix V4.0. */ |
__define_stab (N_NSYMS, 0x32, "NSYMS") |
|
/* "No DST map for sym: name, ,0,type,ignored" according to Ultrix V4.0. */ |
__define_stab (N_NOMAP, 0x34, "NOMAP") |
|
/* New stab from Solaris 2. Like N_SO, but for the object file. Two in |
a row provide the build directory and the relative path of the .o from it. |
Solaris2 uses this to avoid putting the stabs info into the linked |
executable; this stab goes into the ".stab.index" section, and the debugger |
reads the real stabs directly from the .o files instead. */ |
__define_stab (N_OBJ, 0x38, "OBJ") |
|
/* New stab from Solaris 2. Options for the debugger, related to the |
source language for this module. E.g. whether to use ANSI |
integral promotions or traditional integral promotions. */ |
__define_stab (N_OPT, 0x3c, "OPT") |
|
/* Register variable. Value is number of register. */ |
__define_stab (N_RSYM, 0x40, "RSYM") |
|
/* Modula-2 compilation unit. Can someone say what info it contains? */ |
__define_stab (N_M2C, 0x42, "M2C") |
|
/* Line number in text segment. Desc is the line number; |
value is corresponding address. On Solaris2, the line number is |
relative to the start of the current function. */ |
__define_stab (N_SLINE, 0x44, "SLINE") |
|
/* Similar, for data segment. */ |
__define_stab (N_DSLINE, 0x46, "DSLINE") |
|
/* Similar, for bss segment. */ |
__define_stab (N_BSLINE, 0x48, "BSLINE") |
|
/* Sun's source-code browser stabs. ?? Don't know what the fields are. |
Supposedly the field is "path to associated .cb file". THIS VALUE |
OVERLAPS WITH N_BSLINE! */ |
__define_stab_duplicate (N_BROWS, 0x48, "BROWS") |
|
/* GNU Modula-2 definition module dependency. Value is the modification time |
of the definition file. Other is non-zero if it is imported with the |
GNU M2 keyword %INITIALIZE. Perhaps N_M2C can be used if there |
are enough empty fields? */ |
__define_stab(N_DEFD, 0x4a, "DEFD") |
|
/* New in Solaris2. Function start/body/end line numbers. */ |
__define_stab(N_FLINE, 0x4C, "FLINE") |
|
/* MacOS X: This tells the end of a relocatable function + debugging info. */ |
__define_stab(N_ENSYM, 0x4E, "ENSYM") |
|
/* THE FOLLOWING TWO STAB VALUES CONFLICT. Happily, one is for Modula-2 |
and one is for C++. Still,... */ |
/* GNU C++ exception variable. Name is variable name. */ |
__define_stab (N_EHDECL, 0x50, "EHDECL") |
/* Modula2 info "for imc": name,,0,0,0 according to Ultrix V4.0. */ |
__define_stab_duplicate (N_MOD2, 0x50, "MOD2") |
|
/* GNU C++ `catch' clause. Value is its address. Desc is nonzero if |
this entry is immediately followed by a CAUGHT stab saying what exception |
was caught. Multiple CAUGHT stabs means that multiple exceptions |
can be caught here. If Desc is 0, it means all exceptions are caught |
here. */ |
__define_stab (N_CATCH, 0x54, "CATCH") |
|
/* Structure or union element. Value is offset in the structure. */ |
__define_stab (N_SSYM, 0x60, "SSYM") |
|
/* Solaris2: Last stab emitted for module. */ |
__define_stab (N_ENDM, 0x62, "ENDM") |
|
/* Name of main source file. |
Value is starting text address of the compilation. |
If multiple N_SO's appear, the first to contain a trailing / is the |
compilation directory. The first to not contain a trailing / is the |
source file name, relative to the compilation directory. Others (perhaps |
resulting from cfront) are ignored. |
On Solaris2, value is undefined, but desc is a source-language code. */ |
|
__define_stab (N_SO, 0x64, "SO") |
|
/* Apple: This is the stab that associated the .o file with the |
N_SO stab, in the case where debug info is mostly stored in the .o file. */ |
__define_stab (N_OSO, 0x66, "OSO") |
|
/* SunPro F77: Name of alias. */ |
__define_stab (N_ALIAS, 0x6c, "ALIAS") |
|
/* Automatic variable in the stack. Value is offset from frame pointer. |
Also used for type descriptions. */ |
__define_stab (N_LSYM, 0x80, "LSYM") |
|
/* Beginning of an include file. Only Sun uses this. |
In an object file, only the name is significant. |
The Sun linker puts data into some of the other fields. */ |
__define_stab (N_BINCL, 0x82, "BINCL") |
|
/* Name of sub-source file (#include file). |
Value is starting text address of the compilation. */ |
__define_stab (N_SOL, 0x84, "SOL") |
|
/* Parameter variable. Value is offset from argument pointer. |
(On most machines the argument pointer is the same as the frame pointer. */ |
__define_stab (N_PSYM, 0xa0, "PSYM") |
|
/* End of an include file. No name. |
This and N_BINCL act as brackets around the file's output. |
In an object file, there is no significant data in this entry. |
The Sun linker puts data into some of the fields. */ |
__define_stab (N_EINCL, 0xa2, "EINCL") |
|
/* Alternate entry point. Value is its address. */ |
__define_stab (N_ENTRY, 0xa4, "ENTRY") |
|
/* Beginning of lexical block. |
The desc is the nesting level in lexical blocks. |
The value is the address of the start of the text for the block. |
The variables declared inside the block *precede* the N_LBRAC symbol. |
On Solaris2, the value is relative to the start of the current function. */ |
__define_stab (N_LBRAC, 0xc0, "LBRAC") |
|
/* Place holder for deleted include file. Replaces a N_BINCL and everything |
up to the corresponding N_EINCL. The Sun linker generates these when |
it finds multiple identical copies of the symbols from an include file. |
This appears only in output from the Sun linker. */ |
__define_stab (N_EXCL, 0xc2, "EXCL") |
|
/* Modula-2 scope information. Can someone say what info it contains? */ |
__define_stab (N_SCOPE, 0xc4, "SCOPE") |
|
/* Solaris2: Patch Run Time Checker. */ |
__define_stab (N_PATCH, 0xd0, "PATCH") |
|
/* End of a lexical block. Desc matches the N_LBRAC's desc. |
The value is the address of the end of the text for the block. |
On Solaris2, the value is relative to the start of the current function. */ |
__define_stab (N_RBRAC, 0xe0, "RBRAC") |
|
/* Begin named common block. Only the name is significant. */ |
__define_stab (N_BCOMM, 0xe2, "BCOMM") |
|
/* End named common block. Only the name is significant |
(and it should match the N_BCOMM). */ |
__define_stab (N_ECOMM, 0xe4, "ECOMM") |
|
/* Member of a common block; value is offset within the common block. |
This should occur within a BCOMM/ECOMM pair. */ |
__define_stab (N_ECOML, 0xe8, "ECOML") |
|
/* Solaris2: Pascal "with" statement: type,,0,0,offset */ |
__define_stab (N_WITH, 0xea, "WITH") |
|
/* These STAB's are used on Gould systems for Non-Base register symbols |
or something like that. FIXME. I have assigned the values at random |
since I don't have a Gould here. Fixups from Gould folk welcome... */ |
__define_stab (N_NBTEXT, 0xF0, "NBTEXT") |
__define_stab (N_NBDATA, 0xF2, "NBDATA") |
__define_stab (N_NBBSS, 0xF4, "NBBSS") |
__define_stab (N_NBSTS, 0xF6, "NBSTS") |
__define_stab (N_NBLCS, 0xF8, "NBLCS") |
|
/* Second symbol entry containing a length-value for the preceding entry. |
The value is the length. */ |
__define_stab (N_LENG, 0xfe, "LENG") |
|
/* The above information, in matrix format. |
|
STAB MATRIX |
_________________________________________________ |
| 00 - 1F are not dbx stab symbols | |
| In most cases, the low bit is the EXTernal bit| |
|
| 00 UNDEF | 02 ABS | 04 TEXT | 06 DATA | |
| 01 |EXT | 03 |EXT | 05 |EXT | 07 |EXT | |
|
| 08 BSS | 0A INDR | 0C FN_SEQ | 0E WEAKA | |
| 09 |EXT | 0B | 0D WEAKU | 0F WEAKT | |
|
| 10 WEAKD | 12 COMM | 14 SETA | 16 SETT | |
| 11 WEAKB | 13 | 15 | 17 | |
|
| 18 SETD | 1A SETB | 1C SETV | 1E WARNING| |
| 19 | 1B | 1D | 1F FN | |
|
|_______________________________________________| |
| Debug entries with bit 01 set are unused. | |
| 20 GSYM | 22 FNAME | 24 FUN | 26 STSYM | |
| 28 LCSYM | 2A MAIN | 2C ROSYM | 2E | |
| 30 PC | 32 NSYMS | 34 NOMAP | 36 | |
| 38 OBJ | 3A | 3C OPT | 3E | |
| 40 RSYM | 42 M2C | 44 SLINE | 46 DSLINE | |
| 48 BSLINE*| 4A DEFD | 4C FLINE | 4E | |
| 50 EHDECL*| 52 | 54 CATCH | 56 | |
| 58 | 5A | 5C | 5E | |
| 60 SSYM | 62 ENDM | 64 SO | 66 | |
| 68 | 6A | 6C ALIAS | 6E | |
| 70 | 72 | 74 | 76 | |
| 78 | 7A | 7C | 7E | |
| 80 LSYM | 82 BINCL | 84 SOL | 86 | |
| 88 | 8A | 8C | 8E | |
| 90 | 92 | 94 | 96 | |
| 98 | 9A | 9C | 9E | |
| A0 PSYM | A2 EINCL | A4 ENTRY | A6 | |
| A8 | AA | AC | AE | |
| B0 | B2 | B4 | B6 | |
| B8 | BA | BC | BE | |
| C0 LBRAC | C2 EXCL | C4 SCOPE | C6 | |
| C8 | CA | CC | CE | |
| D0 PATCH | D2 | D4 | D6 | |
| D8 | DA | DC | DE | |
| E0 RBRAC | E2 BCOMM | E4 ECOMM | E6 | |
| E8 ECOML | EA WITH | EC | EE | |
| F0 | F2 | F4 | F6 | |
| F8 | FA | FC | FE LENG | |
+-----------------------------------------------+ |
* 50 EHDECL is also MOD2. |
* 48 BSLINE is also BROWS. |
*/ |
/ChangeLog
0,0 → 1,231
2008-08-28 Tristan Gingold <gingold@adacore.com> |
|
* stab.def: Add BNSYM, ENSYM, OSO for darwin. |
|
2008-03-27 Cary Coutant <ccoutant@google.com> |
|
* ar.h (ARMAGT): New magic string for thin archives. |
|
2005-08-18 Alan Modra <amodra@bigpond.net.au> |
|
* encap.h: Remove a29k support. |
|
2005-05-10 Nick Clifton <nickc@redhat.com> |
|
* Update the address and phone number of the FSF organization in |
the GPL notices in the following files: |
adobe.h, aout64.h, ar.h, dynix3.h, encap.h, host.h, hp.h, |
ranlib.h, reloc.h, stab.def, stab_gnu.h, sun4.h |
|
2004-01-06 Mark Kettenis <kettenis@gnu.org> |
|
* stab.def: Add N_PATCH to DO definition. |
|
2003-03-06 Elias Athanasopoulos <elathan@phys.uoa.gr> |
|
* aout64.h (BYTES_IN_WORD): Define if necessary. |
|
2001-09-18 Alan Modra <amodra@bigpond.net.au> |
|
* aout64.h: Formatting fixes. |
(N_TXTADDR): Evaluate to a bfd_vma. |
(N_DATADDR): Avoid negative unsigned warning. |
* hp300hpux.h: Formatting fixes. |
(N_DATADDR): Avoid negative unsigned warning. |
|
2000-04-03 Hans-Peter Nilsson <hp@axis.com> |
|
* aout64.h (RELOC_EXT_BITS_EXTERN_BIG): Wrap definition in #ifndef. |
(RELOC_EXT_BITS_EXTERN_LITTLE): Ditto. |
(RELOC_EXT_BITS_TYPE_BIG): Ditto. |
(RELOC_EXT_BITS_TYPE_SH_BIG): Ditto. |
(RELOC_EXT_BITS_TYPE_LITTLE): Ditto. |
(RELOC_EXT_BITS_TYPE_SH_LITTLE): Ditto. |
|
1999-07-12 Ian Lance Taylor <ian@zembu.com> |
|
* aout64.h (N_SHARED_LIB): Define as 0 if TEXT_START_ADDR is |
defined as 0. |
|
1998-06-28 Peter Schauer <pes@regent.e-technik.tu-muenchen.de> |
|
* stab.def: Add N_ALIAS from SunPro F77. |
|
1996-03-11 Ian Lance Taylor <ian@cygnus.com> |
|
* stab.def: Use __define_stab_duplicate rather than __define_stab |
for duplicate entries N_BROWS and N_MOD2. |
* stab_gnu.h (__define_stab_duplicate): Define before including |
stab.def. |
|
1995-10-27 Niklas Hallqvist <niklas@appli.se> |
|
* aout64.h, host.h, hp300hpux.h, sun4.h: Changed PAGE_SIZE to |
TARGET_PAGE_SIZE. |
|
1995-09-12 Ian Lance Taylor <ian@cygnus.com> |
|
* sun4.h (struct internal_sun4_dynamic_link): Change all fields |
from long to unsigned long. |
|
1995-07-12 Ken Raeburn <raeburn@kr-pc.cygnus.com> |
|
* sun4.h (PAGE_SIZE): Undefine before defining. |
|
1994-09-04 Richard Earnshaw (rwe@pegasus.esprit.ec.org) |
|
* aout64.h: Only define QMAGIC if it isn't already defined. |
|
1994-06-16 Ian Lance Taylor (ian@tweedledumb.cygnus.com) |
|
* aout64.h (BMAGIC): Define. |
|
1994-06-11 Ian Lance Taylor (ian@tweedledumb.cygnus.com) |
|
Add weak symbols as an extension to a.out. |
* aout64.h (N_WEAKU, N_WEAKA, N_WEAKT, N_WEAKD, N_WEAKB): Define. |
* stab.def: Update symbol value table. |
|
1994-06-02 Ian Lance Taylor (ian@tweedledumb.cygnus.com) |
|
* sun4.h (EXTERNAL_SUN4_DYNAMIC_DEBUGGER_SIZE): Correct from 28 to |
24. Fix up ld_got comment. |
|
1994-03-30 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) |
|
* dynix3.h: Cleanup, adapt to current bfd version. |
|
1994-02-26 Ian Lance Taylor (ian@cygnus.com) |
|
* aout64.h: Add casts to avoid warnings from SVR4 cc. |
|
1994-02-11 Stan Shebs (shebs@andros.cygnus.com) |
|
* ar.h (ARMAG, ARMAGB, ARFMAG): Change '\n' to '\012', for greater |
portability. |
|
1994-01-21 Ian Lance Taylor (ian@tweedledumb.cygnus.com) |
|
* sun4.h: Added information about SunOS shared libraries. |
|
1994-01-07 Jim Kingdon (kingdon@deneb.cygnus.com) |
|
* aout64.h (N_TXTADDR): Add comment regarding OMAGIC and NMAGIC. |
|
1993-12-25 Jim Kingdon (kingdon@lioth.cygnus.com) |
|
* aout64.h (N_DATOFF): Don't pad (revert change of 8 Jul 1993). |
|
1993-11-16 Jim Kingdon (kingdon@lioth.cygnus.com) |
|
* aout64.h: New macros ZMAGIC_DISK_BLOCK_SIZE and N_DISK_BLOCK_SIZE |
for Linux ZMAGIC. |
(N_TXTOFF, N_DATOFF): Use them. |
|
1993-11-04 Ken Raeburn (raeburn@kr-pc.cygnus.com) |
|
* aout64.h (RELOC_STD_BITS_RELATIVE_LITTLE): Fixed value to match |
sun3 system; used to overlap other fields. |
(RELOC_STD_BITS_JMPTABLE_LITTLE): Likewise. |
|
1993-11-03 David J. Mackenzie (djm@thepub.cygnus.com) |
|
* aout64.h (RELOC_STD_BITS_BASEREL_LITTLE): Make it 0x10 (Ken's |
suggestion) to avoid conflict with RELOC_STD_BITS_EXTERN_LITTLE. |
|
1993-10-29 Ian Lance Taylor (ian@tweedledumb.cygnus.com) |
|
* hp300hpux.h (N_SHARED_LIB): Define to be 0. |
|
1993-09-13 John Gilmore (gnu@cygnus.com) |
|
* ar.h (ARMAP_TIME_OFFSET): Add and describe. |
|
Mon Aug 23 Sean Fagan (sef@cygnus.com) |
|
* aout64.h [ARCH_SIZE != 64]: Allow N_BADMAG to be overridden. |
|
1993-08-16 Jim Kingdon (kingdon@lioth.cygnus.com) |
|
* stab_gnu.h: Include aout/stab.def not just stab.def. |
|
1993-07-18 Jim Kingdon (kingdon@rtl.cygnus.com) |
|
* dynix3.h: New, for symmetry running dynix. |
|
1993-07-08 Jim Kingdon (kingdon@lioth.cygnus.com) |
|
* aout64.h (N_BADMAG): Recognize QMAGIC. |
N_TXTOFF, N_TXTADDR, N_TXTSIZE: Special code for QMAGIC. |
N_DATOFF: Pad text size if we need to. |
|
1993-06-18 Jim Kingdon (kingdon@lioth.cygnus.com) |
|
* stab.def (N_ECOML): Fix comment. |
|
1993-05-31 Jim Kingdon (kingdon@cygnus.com) |
|
* stab.def: Remove Solaris information on N_FUN stabstring grammar; |
I've transferred it to gdb/doc/stabs.texinfo, where it belongs. |
|
1993-05-10 Ken Raeburn (raeburn@kr-pc.cygnus.com) |
|
* hp300hpux.h: Patch from Glenn Engel for linker problem and |
compatibility fix: |
(OMAGIC, NMAGIC): New definitions. |
(SHAREMAGIC): Deleted. |
(HPUX_DOT_O_MAGIC): New macro. |
(_N_BADMAG): Adjusted. |
(N_HEADER_IN_TEXT, N_DATADDR): New macros. |
|
1993-04-29 Ken Raeburn (raeburn@deneb.cygnus.com) |
|
* hp300hpux.h: New file from Glenn Engel, glenne@lsid.hp.com. |
|
1993-04-27 Ken Raeburn (raeburn@kr-pc.cygnus.com) |
|
* aout64.h (struct external_exec, *MAGIC, N_BADMAG): Don't define |
if `external_exec' is already defined as a macro. |
(N_DATOFF, N_TRELOFF, N_DRELOFF, N_SYMOFF, N_STROFF): Don't define |
if already defined. |
(struct external_nlist, EXTERNAL_NLIST_SIZE): Don't define if |
`external_nlist' is already defined as a macro. |
|
1992-08-15 John Gilmore (gnu@cygnus.com) |
|
* adobe.h: Add description of a.out.adobe format. |
|
1992-07-03 John Gilmore (gnu at cygnus.com) |
|
* stab.def: Update more Solaris definitions. |
* stab_gnu.h: Add N_SO language types, and Solaris basic float types. |
|
1992-06-14 John Gilmore (gnu at cygnus.com) |
|
* stab.def: Update descriptions of Solaris-2 stabs; add N_UNDF. |
|
1992-06-11 John Gilmore (gnu at cygnus.com) |
|
* stab.def: Add N_OBJ and N_OPT from Solaris-2. |
|
1992-01-30 John Gilmore (gnu at cygnus.com) |
|
* aout64.h: N_TXTSIZE needs some more parentheses. |
I don't trust C precedence. |
|
1991-12-18 Per Bothner (bothner at cygnus.com) |
|
* aout64.h: Move common sunos-specific test |
to recognize shared libraries into new macro N_SHARED_LIB. |
Use it to simplify & reformat N_TXTADDR, N_TXTOFF, N_TXTSIZE. |
|
1991-11-30 Steve Chamberlain (sac at rtl.cygnus.com) |
|
* aout64.h, ar.h, encap.h, host.h, hp.h, ranlib.h, reloc.h, |
stab.def, stab_gnu.h, sun4.h: All moved from the devo/include |
directory. |
|
|
Local Variables: |
version-control: never |
End: |
/aout64.h
0,0 → 1,519
/* `a.out' object-file definitions, including extensions to 64-bit fields |
|
Copyright 1999, 2000, 2001, 2003 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
#ifndef __A_OUT_64_H__ |
#define __A_OUT_64_H__ |
|
#ifndef BYTES_IN_WORD |
#define BYTES_IN_WORD 4 |
#endif |
|
/* This is the layout on disk of the 32-bit or 64-bit exec header. */ |
|
#ifndef external_exec |
struct external_exec |
{ |
bfd_byte e_info[4]; /* Magic number and stuff. */ |
bfd_byte e_text[BYTES_IN_WORD]; /* Length of text section in bytes. */ |
bfd_byte e_data[BYTES_IN_WORD]; /* Length of data section in bytes. */ |
bfd_byte e_bss[BYTES_IN_WORD]; /* Length of bss area in bytes. */ |
bfd_byte e_syms[BYTES_IN_WORD]; /* Length of symbol table in bytes. */ |
bfd_byte e_entry[BYTES_IN_WORD]; /* Start address. */ |
bfd_byte e_trsize[BYTES_IN_WORD]; /* Length of text relocation info. */ |
bfd_byte e_drsize[BYTES_IN_WORD]; /* Length of data relocation info. */ |
}; |
|
#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7) |
|
/* Magic numbers for a.out files. */ |
|
#if ARCH_SIZE==64 |
#define OMAGIC 0x1001 /* Code indicating object file. */ |
#define ZMAGIC 0x1002 /* Code indicating demand-paged executable. */ |
#define NMAGIC 0x1003 /* Code indicating pure executable. */ |
|
/* There is no 64-bit QMAGIC as far as I know. */ |
|
#define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \ |
&& N_MAGIC(x) != NMAGIC \ |
&& N_MAGIC(x) != ZMAGIC) |
#else |
#define OMAGIC 0407 /* Object file or impure executable. */ |
#define NMAGIC 0410 /* Code indicating pure executable. */ |
#define ZMAGIC 0413 /* Code indicating demand-paged executable. */ |
#define BMAGIC 0415 /* Used by a b.out object. */ |
|
/* This indicates a demand-paged executable with the header in the text. |
It is used by 386BSD (and variants) and Linux, at least. */ |
#ifndef QMAGIC |
#define QMAGIC 0314 |
#endif |
# ifndef N_BADMAG |
# define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \ |
&& N_MAGIC(x) != NMAGIC \ |
&& N_MAGIC(x) != ZMAGIC \ |
&& N_MAGIC(x) != QMAGIC) |
# endif /* N_BADMAG */ |
#endif |
|
#endif |
|
#ifdef QMAGIC |
#define N_IS_QMAGIC(x) (N_MAGIC (x) == QMAGIC) |
#else |
#define N_IS_QMAGIC(x) (0) |
#endif |
|
/* The difference between TARGET_PAGE_SIZE and N_SEGSIZE is that TARGET_PAGE_SIZE is |
the finest granularity at which you can page something, thus it |
controls the padding (if any) before the text segment of a ZMAGIC |
file. N_SEGSIZE is the resolution at which things can be marked as |
read-only versus read/write, so it controls the padding between the |
text segment and the data segment (in memory; on disk the padding |
between them is TARGET_PAGE_SIZE). TARGET_PAGE_SIZE and N_SEGSIZE are the same |
for most machines, but different for sun3. */ |
|
/* By default, segment size is constant. But some machines override this |
to be a function of the a.out header (e.g. machine type). */ |
|
#ifndef N_SEGSIZE |
#define N_SEGSIZE(x) SEGMENT_SIZE |
#endif |
|
/* Virtual memory address of the text section. |
This is getting very complicated. A good reason to discard a.out format |
for something that specifies these fields explicitly. But til then... |
|
* OMAGIC and NMAGIC files: |
(object files: text for "relocatable addr 0" right after the header) |
start at 0, offset is EXEC_BYTES_SIZE, size as stated. |
* The text address, offset, and size of ZMAGIC files depend |
on the entry point of the file: |
* entry point below TEXT_START_ADDR: |
(hack for SunOS shared libraries) |
start at 0, offset is 0, size as stated. |
* If N_HEADER_IN_TEXT(x) is true (which defaults to being the |
case when the entry point is EXEC_BYTES_SIZE or further into a page): |
no padding is needed; text can start after exec header. Sun |
considers the text segment of such files to include the exec header; |
for BFD's purposes, we don't, which makes more work for us. |
start at TEXT_START_ADDR + EXEC_BYTES_SIZE, offset is EXEC_BYTES_SIZE, |
size as stated minus EXEC_BYTES_SIZE. |
* If N_HEADER_IN_TEXT(x) is false (which defaults to being the case when |
the entry point is less than EXEC_BYTES_SIZE into a page (e.g. page |
aligned)): (padding is needed so that text can start at a page boundary) |
start at TEXT_START_ADDR, offset TARGET_PAGE_SIZE, size as stated. |
|
Specific configurations may want to hardwire N_HEADER_IN_TEXT, |
for efficiency or to allow people to play games with the entry point. |
In that case, you would #define N_HEADER_IN_TEXT(x) as 1 for sunos, |
and as 0 for most other hosts (Sony News, Vax Ultrix, etc). |
(Do this in the appropriate bfd target file.) |
(The default is a heuristic that will break if people try changing |
the entry point, perhaps with the ld -e flag.) |
|
* QMAGIC is always like a ZMAGIC for which N_HEADER_IN_TEXT is true, |
and for which the starting address is TARGET_PAGE_SIZE (or should this be |
SEGMENT_SIZE?) (TEXT_START_ADDR only applies to ZMAGIC, not to QMAGIC). */ |
|
/* This macro is only relevant for ZMAGIC files; QMAGIC always has the header |
in the text. */ |
#ifndef N_HEADER_IN_TEXT |
#define N_HEADER_IN_TEXT(x) \ |
(((x).a_entry & (TARGET_PAGE_SIZE-1)) >= EXEC_BYTES_SIZE) |
#endif |
|
/* Sun shared libraries, not linux. This macro is only relevant for ZMAGIC |
files. */ |
#ifndef N_SHARED_LIB |
#if defined (TEXT_START_ADDR) && TEXT_START_ADDR == 0 |
#define N_SHARED_LIB(x) (0) |
#else |
#define N_SHARED_LIB(x) ((x).a_entry < TEXT_START_ADDR) |
#endif |
#endif |
|
/* Returning 0 not TEXT_START_ADDR for OMAGIC and NMAGIC is based on |
the assumption that we are dealing with a .o file, not an |
executable. This is necessary for OMAGIC (but means we don't work |
right on the output from ld -N); more questionable for NMAGIC. */ |
|
#ifndef N_TXTADDR |
#define N_TXTADDR(x) \ |
(/* The address of a QMAGIC file is always one page in, \ |
with the header in the text. */ \ |
N_IS_QMAGIC (x) \ |
? (bfd_vma) TARGET_PAGE_SIZE + EXEC_BYTES_SIZE \ |
: (N_MAGIC (x) != ZMAGIC \ |
? (bfd_vma) 0 /* Object file or NMAGIC. */ \ |
: (N_SHARED_LIB (x) \ |
? (bfd_vma) 0 \ |
: (N_HEADER_IN_TEXT (x) \ |
? (bfd_vma) TEXT_START_ADDR + EXEC_BYTES_SIZE \ |
: (bfd_vma) TEXT_START_ADDR)))) |
#endif |
|
/* If N_HEADER_IN_TEXT is not true for ZMAGIC, there is some padding |
to make the text segment start at a certain boundary. For most |
systems, this boundary is TARGET_PAGE_SIZE. But for Linux, in the |
time-honored tradition of crazy ZMAGIC hacks, it is 1024 which is |
not what TARGET_PAGE_SIZE needs to be for QMAGIC. */ |
|
#ifndef ZMAGIC_DISK_BLOCK_SIZE |
#define ZMAGIC_DISK_BLOCK_SIZE TARGET_PAGE_SIZE |
#endif |
|
#define N_DISK_BLOCK_SIZE(x) \ |
(N_MAGIC(x) == ZMAGIC ? ZMAGIC_DISK_BLOCK_SIZE : TARGET_PAGE_SIZE) |
|
/* Offset in an a.out of the start of the text section. */ |
#ifndef N_TXTOFF |
#define N_TXTOFF(x) \ |
(/* For {O,N,Q}MAGIC, no padding. */ \ |
N_MAGIC (x) != ZMAGIC \ |
? EXEC_BYTES_SIZE \ |
: (N_SHARED_LIB (x) \ |
? 0 \ |
: (N_HEADER_IN_TEXT (x) \ |
? EXEC_BYTES_SIZE /* No padding. */ \ |
: ZMAGIC_DISK_BLOCK_SIZE /* A page of padding. */))) |
#endif |
/* Size of the text section. It's always as stated, except that we |
offset it to `undo' the adjustment to N_TXTADDR and N_TXTOFF |
for ZMAGIC files that nominally include the exec header |
as part of the first page of text. (BFD doesn't consider the |
exec header to be part of the text segment.) */ |
#ifndef N_TXTSIZE |
#define N_TXTSIZE(x) \ |
(/* For QMAGIC, we don't consider the header part of the text section. */\ |
N_IS_QMAGIC (x) \ |
? (x).a_text - EXEC_BYTES_SIZE \ |
: ((N_MAGIC (x) != ZMAGIC || N_SHARED_LIB (x)) \ |
? (x).a_text \ |
: (N_HEADER_IN_TEXT (x) \ |
? (x).a_text - EXEC_BYTES_SIZE /* No padding. */ \ |
: (x).a_text /* A page of padding. */ ))) |
#endif |
/* The address of the data segment in virtual memory. |
It is the text segment address, plus text segment size, rounded |
up to a N_SEGSIZE boundary for pure or pageable files. */ |
#ifndef N_DATADDR |
#define N_DATADDR(x) \ |
(N_MAGIC (x) == OMAGIC \ |
? (N_TXTADDR (x) + N_TXTSIZE (x)) \ |
: (N_SEGSIZE (x) + ((N_TXTADDR (x) + N_TXTSIZE (x) - 1) \ |
& ~ (bfd_vma) (N_SEGSIZE (x) - 1)))) |
#endif |
/* The address of the BSS segment -- immediately after the data segment. */ |
|
#define N_BSSADDR(x) (N_DATADDR (x) + (x).a_data) |
|
/* Offsets of the various portions of the file after the text segment. */ |
|
/* For {Q,Z}MAGIC, there is padding to make the data segment start on |
a page boundary. Most of the time the a_text field (and thus |
N_TXTSIZE) already contains this padding. It is possible that for |
BSDI and/or 386BSD it sometimes doesn't contain the padding, and |
perhaps we should be adding it here. But this seems kind of |
questionable and probably should be BSDI/386BSD-specific if we do |
do it. |
|
For NMAGIC (at least for hp300 BSD, probably others), there is |
padding in memory only, not on disk, so we must *not* ever pad here |
for NMAGIC. */ |
|
#ifndef N_DATOFF |
#define N_DATOFF(x) (N_TXTOFF (x) + N_TXTSIZE (x)) |
#endif |
#ifndef N_TRELOFF |
#define N_TRELOFF(x) (N_DATOFF (x) + (x).a_data) |
#endif |
#ifndef N_DRELOFF |
#define N_DRELOFF(x) (N_TRELOFF (x) + (x).a_trsize) |
#endif |
#ifndef N_SYMOFF |
#define N_SYMOFF(x) (N_DRELOFF (x) + (x).a_drsize) |
#endif |
#ifndef N_STROFF |
#define N_STROFF(x) (N_SYMOFF (x) + (x).a_syms) |
#endif |
|
/* Symbols */ |
#ifndef external_nlist |
struct external_nlist |
{ |
bfd_byte e_strx[BYTES_IN_WORD]; /* Index into string table of name. */ |
bfd_byte e_type[1]; /* Type of symbol. */ |
bfd_byte e_other[1]; /* Misc info (usually empty). */ |
bfd_byte e_desc[2]; /* Description field. */ |
bfd_byte e_value[BYTES_IN_WORD]; /* Value of symbol. */ |
}; |
#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD) |
#endif |
|
struct internal_nlist |
{ |
unsigned long n_strx; /* Index into string table of name. */ |
unsigned char n_type; /* Type of symbol. */ |
unsigned char n_other; /* Misc info (usually empty). */ |
unsigned short n_desc; /* Description field. */ |
bfd_vma n_value; /* Value of symbol. */ |
}; |
|
/* The n_type field is the symbol type, containing: */ |
|
#define N_UNDF 0 /* Undefined symbol. */ |
#define N_ABS 2 /* Absolute symbol -- defined at particular addr. */ |
#define N_TEXT 4 /* Text sym -- defined at offset in text seg. */ |
#define N_DATA 6 /* Data sym -- defined at offset in data seg. */ |
#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg. */ |
#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink). */ |
#define N_FN 0x1f /* File name of .o file. */ |
#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh). */ |
/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT, |
N_DATA, or N_BSS. When the low-order bit of other types is set, |
(e.g. N_WARNING versus N_FN), they are two different types. */ |
#define N_EXT 1 /* External symbol (as opposed to local-to-this-file). */ |
#define N_TYPE 0x1e |
#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol. */ |
|
#define N_INDR 0x0a |
|
/* The following symbols refer to set elements. |
All the N_SET[ATDB] symbols with the same name form one set. |
Space is allocated for the set in the text section, and each set |
elements value is stored into one word of the space. |
The first word of the space is the length of the set (number of elements). |
|
The address of the set is made into an N_SETV symbol |
whose name is the same as the name of the set. |
This symbol acts like a N_DATA global symbol |
in that it can satisfy undefined external references. */ |
|
/* These appear as input to LD, in a .o file. */ |
#define N_SETA 0x14 /* Absolute set element symbol. */ |
#define N_SETT 0x16 /* Text set element symbol. */ |
#define N_SETD 0x18 /* Data set element symbol. */ |
#define N_SETB 0x1A /* Bss set element symbol. */ |
|
/* This is output from LD. */ |
#define N_SETV 0x1C /* Pointer to set vector in data area. */ |
|
/* Warning symbol. The text gives a warning message, the next symbol |
in the table will be undefined. When the symbol is referenced, the |
message is printed. */ |
|
#define N_WARNING 0x1e |
|
/* Weak symbols. These are a GNU extension to the a.out format. The |
semantics are those of ELF weak symbols. Weak symbols are always |
externally visible. The N_WEAK? values are squeezed into the |
available slots. The value of a N_WEAKU symbol is 0. The values |
of the other types are the definitions. */ |
#define N_WEAKU 0x0d /* Weak undefined symbol. */ |
#define N_WEAKA 0x0e /* Weak absolute symbol. */ |
#define N_WEAKT 0x0f /* Weak text symbol. */ |
#define N_WEAKD 0x10 /* Weak data symbol. */ |
#define N_WEAKB 0x11 /* Weak bss symbol. */ |
|
/* Relocations |
|
There are two types of relocation flavours for a.out systems, |
standard and extended. The standard form is used on systems where the |
instruction has room for all the bits of an offset to the operand, whilst |
the extended form is used when an address operand has to be split over n |
instructions. Eg, on the 68k, each move instruction can reference |
the target with a displacement of 16 or 32 bits. On the sparc, move |
instructions use an offset of 14 bits, so the offset is stored in |
the reloc field, and the data in the section is ignored. */ |
|
/* This structure describes a single relocation to be performed. |
The text-relocation section of the file is a vector of these structures, |
all of which apply to the text section. |
Likewise, the data-relocation section applies to the data section. */ |
|
struct reloc_std_external |
{ |
bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */ |
bfd_byte r_index[3]; /* Symbol table index of symbol. */ |
bfd_byte r_type[1]; /* Relocation type. */ |
}; |
|
#define RELOC_STD_BITS_PCREL_BIG ((unsigned int) 0x80) |
#define RELOC_STD_BITS_PCREL_LITTLE ((unsigned int) 0x01) |
|
#define RELOC_STD_BITS_LENGTH_BIG ((unsigned int) 0x60) |
#define RELOC_STD_BITS_LENGTH_SH_BIG 5 |
#define RELOC_STD_BITS_LENGTH_LITTLE ((unsigned int) 0x06) |
#define RELOC_STD_BITS_LENGTH_SH_LITTLE 1 |
|
#define RELOC_STD_BITS_EXTERN_BIG ((unsigned int) 0x10) |
#define RELOC_STD_BITS_EXTERN_LITTLE ((unsigned int) 0x08) |
|
#define RELOC_STD_BITS_BASEREL_BIG ((unsigned int) 0x08) |
#define RELOC_STD_BITS_BASEREL_LITTLE ((unsigned int) 0x10) |
|
#define RELOC_STD_BITS_JMPTABLE_BIG ((unsigned int) 0x04) |
#define RELOC_STD_BITS_JMPTABLE_LITTLE ((unsigned int) 0x20) |
|
#define RELOC_STD_BITS_RELATIVE_BIG ((unsigned int) 0x02) |
#define RELOC_STD_BITS_RELATIVE_LITTLE ((unsigned int) 0x40) |
|
#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry. */ |
|
struct reloc_std_internal |
{ |
bfd_vma r_address; /* Address (within segment) to be relocated. */ |
/* The meaning of r_symbolnum depends on r_extern. */ |
unsigned int r_symbolnum:24; |
/* Nonzero means value is a pc-relative offset |
and it should be relocated for changes in its own address |
as well as for changes in the symbol or section specified. */ |
unsigned int r_pcrel:1; |
/* Length (as exponent of 2) of the field to be relocated. |
Thus, a value of 2 indicates 1<<2 bytes. */ |
unsigned int r_length:2; |
/* 1 => relocate with value of symbol. |
r_symbolnum is the index of the symbol |
in files the symbol table. |
0 => relocate with the address of a segment. |
r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS |
(the N_EXT bit may be set also, but signifies nothing). */ |
unsigned int r_extern:1; |
/* The next three bits are for SunOS shared libraries, and seem to |
be undocumented. */ |
unsigned int r_baserel:1; /* Linkage table relative. */ |
unsigned int r_jmptable:1; /* pc-relative to jump table. */ |
unsigned int r_relative:1; /* "relative relocation". */ |
/* unused */ |
unsigned int r_pad:1; /* Padding -- set to zero. */ |
}; |
|
|
/* EXTENDED RELOCS. */ |
|
struct reloc_ext_external |
{ |
bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */ |
bfd_byte r_index[3]; /* Symbol table index of symbol. */ |
bfd_byte r_type[1]; /* Relocation type. */ |
bfd_byte r_addend[BYTES_IN_WORD]; /* Datum addend. */ |
}; |
|
#ifndef RELOC_EXT_BITS_EXTERN_BIG |
#define RELOC_EXT_BITS_EXTERN_BIG ((unsigned int) 0x80) |
#endif |
|
#ifndef RELOC_EXT_BITS_EXTERN_LITTLE |
#define RELOC_EXT_BITS_EXTERN_LITTLE ((unsigned int) 0x01) |
#endif |
|
#ifndef RELOC_EXT_BITS_TYPE_BIG |
#define RELOC_EXT_BITS_TYPE_BIG ((unsigned int) 0x1F) |
#endif |
|
#ifndef RELOC_EXT_BITS_TYPE_SH_BIG |
#define RELOC_EXT_BITS_TYPE_SH_BIG 0 |
#endif |
|
#ifndef RELOC_EXT_BITS_TYPE_LITTLE |
#define RELOC_EXT_BITS_TYPE_LITTLE ((unsigned int) 0xF8) |
#endif |
|
#ifndef RELOC_EXT_BITS_TYPE_SH_LITTLE |
#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3 |
#endif |
|
/* Bytes per relocation entry. */ |
#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD) |
|
enum reloc_type |
{ |
/* Simple relocations. */ |
RELOC_8, /* data[0:7] = addend + sv */ |
RELOC_16, /* data[0:15] = addend + sv */ |
RELOC_32, /* data[0:31] = addend + sv */ |
/* PC-rel displacement. */ |
RELOC_DISP8, /* data[0:7] = addend - pc + sv */ |
RELOC_DISP16, /* data[0:15] = addend - pc + sv */ |
RELOC_DISP32, /* data[0:31] = addend - pc + sv */ |
/* Special. */ |
RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */ |
RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */ |
RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */ |
RELOC_22, /* data[0:21] = (addend + sv) */ |
RELOC_13, /* data[0:12] = (addend + sv) */ |
RELOC_LO10, /* data[0:9] = (addend + sv) */ |
RELOC_SFA_BASE, |
RELOC_SFA_OFF13, |
/* P.I.C. (base-relative). */ |
RELOC_BASE10, /* Not sure - maybe we can do this the */ |
RELOC_BASE13, /* right way now */ |
RELOC_BASE22, |
/* For some sort of pc-rel P.I.C. (?) */ |
RELOC_PC10, |
RELOC_PC22, |
/* P.I.C. jump table. */ |
RELOC_JMP_TBL, |
/* Reputedly for shared libraries somehow. */ |
RELOC_SEGOFF16, |
RELOC_GLOB_DAT, |
RELOC_JMP_SLOT, |
RELOC_RELATIVE, |
|
RELOC_11, |
RELOC_WDISP2_14, |
RELOC_WDISP19, |
RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */ |
RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */ |
|
/* 29K relocation types. */ |
RELOC_JUMPTARG, |
RELOC_CONST, |
RELOC_CONSTH, |
|
/* All the new ones I can think of, for sparc v9. */ |
RELOC_64, /* data[0:63] = addend + sv */ |
RELOC_DISP64, /* data[0:63] = addend - pc + sv */ |
RELOC_WDISP21, /* data[0:20] = (addend + sv - pc)>>2 */ |
RELOC_DISP21, /* data[0:20] = addend - pc + sv */ |
RELOC_DISP14, /* data[0:13] = addend - pc + sv */ |
/* Q . |
What are the other ones, |
Since this is a clean slate, can we throw away the ones we dont |
understand ? Should we sort the values ? What about using a |
microcode format like the 68k ? */ |
NO_RELOC |
}; |
|
|
struct reloc_internal |
{ |
bfd_vma r_address; /* Offset of of data to relocate. */ |
long r_index; /* Symbol table index of symbol. */ |
enum reloc_type r_type; /* Relocation type. */ |
bfd_vma r_addend; /* Datum addend. */ |
}; |
|
/* Q. |
Should the length of the string table be 4 bytes or 8 bytes ? |
|
Q. |
What about archive indexes ? */ |
|
#endif /* __A_OUT_64_H__ */ |
/ar.h
0,0 → 1,54
/* archive file definition for GNU software |
|
Copyright 2001, 2008 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
/* So far this is correct for BSDish archives. Don't forget that |
files must begin on an even byte boundary. */ |
|
#ifndef __GNU_AR_H__ |
#define __GNU_AR_H__ |
|
/* Note that the usual '\n' in magic strings may translate to different |
characters, as allowed by ANSI. '\012' has a fixed value, and remains |
compatible with existing BSDish archives. */ |
|
#define ARMAG "!<arch>\012" /* For COFF and a.out archives. */ |
#define ARMAGB "!<bout>\012" /* For b.out archives. */ |
#define ARMAGT "!<thin>\012" /* For thin archives. */ |
#define SARMAG 8 |
#define ARFMAG "`\012" |
|
/* The ar_date field of the armap (__.SYMDEF) member of an archive |
must be greater than the modified date of the entire file, or |
BSD-derived linkers complain. We originally write the ar_date with |
this offset from the real file's mod-time. After finishing the |
file, we rewrite ar_date if it's not still greater than the mod date. */ |
|
#define ARMAP_TIME_OFFSET 60 |
|
struct ar_hdr |
{ |
char ar_name[16]; /* Name of this member. */ |
char ar_date[12]; /* File mtime. */ |
char ar_uid[6]; /* Owner uid; printed as decimal. */ |
char ar_gid[6]; /* Owner gid; printed as decimal. */ |
char ar_mode[8]; /* File mode, printed as octal. */ |
char ar_size[10]; /* File size, printed as decimal. */ |
char ar_fmag[2]; /* Should contain ARFMAG. */ |
}; |
|
#endif /* __GNU_AR_H__ */ |
/stab_gnu.h
0,0 → 1,54
/* gnu_stab.h Definitions for GNU extensions to STABS |
|
Copyright 2001 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
#ifndef __GNU_STAB__ |
|
/* Indicate the GNU stab.h is in use. */ |
|
#define __GNU_STAB__ |
|
#define __define_stab(NAME, CODE, STRING) NAME=CODE, |
#define __define_stab_duplicate(NAME, CODE, STRING) NAME=CODE, |
|
enum __stab_debug_code |
{ |
#include "aout/stab.def" |
LAST_UNUSED_STAB_CODE |
}; |
|
#undef __define_stab |
|
/* Definitions of "desc" field for N_SO stabs in Solaris2. */ |
|
#define N_SO_AS 1 |
#define N_SO_C 2 |
#define N_SO_ANSI_C 3 |
#define N_SO_CC 4 /* C++ */ |
#define N_SO_FORTRAN 5 |
#define N_SO_PASCAL 6 |
|
/* Solaris2: Floating point type values in basic types. */ |
|
#define NF_NONE 0 |
#define NF_SINGLE 1 /* IEEE 32-bit */ |
#define NF_DOUBLE 2 /* IEEE 64-bit */ |
#define NF_COMPLEX 3 /* Fortran complex */ |
#define NF_COMPLEX16 4 /* Fortran double complex */ |
#define NF_COMPLEX32 5 /* Fortran complex*16 */ |
#define NF_LDOUBLE 6 /* Long double (whatever that is) */ |
|
#endif /* __GNU_STAB_ */ |
/reloc.h
0,0 → 1,66
/* reloc.h -- Header file for relocation information. |
Copyright 1989, 1990, 1991 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
/* Relocation types for a.out files using reloc_info_extended |
(SPARC and AMD 29000). */ |
|
#ifndef _RELOC_H_READ_ |
#define _RELOC_H_READ_ 1 |
|
enum reloc_type |
{ |
RELOC_8, RELOC_16, RELOC_32, /* simple relocations */ |
RELOC_DISP8, RELOC_DISP16, RELOC_DISP32, /* pc-rel displacement */ |
RELOC_WDISP30, RELOC_WDISP22, |
RELOC_HI22, RELOC_22, |
RELOC_13, RELOC_LO10, |
RELOC_SFA_BASE, RELOC_SFA_OFF13, |
RELOC_BASE10, RELOC_BASE13, RELOC_BASE22, /* P.I.C. (base-relative) */ |
RELOC_PC10, RELOC_PC22, /* for some sort of pc-rel P.I.C. (?) */ |
RELOC_JMP_TBL, /* P.I.C. jump table */ |
RELOC_SEGOFF16, /* reputedly for shared libraries somehow */ |
RELOC_GLOB_DAT, RELOC_JMP_SLOT, RELOC_RELATIVE, |
RELOC_11, |
RELOC_WDISP2_14, |
RELOC_WDISP19, |
RELOC_HHI22, |
RELOC_HLO10, |
|
/* 29K relocation types */ |
RELOC_JUMPTARG, RELOC_CONST, RELOC_CONSTH, |
|
RELOC_WDISP14, RELOC_WDISP21, |
|
NO_RELOC |
}; |
|
#define RELOC_TYPE_NAMES \ |
"8", "16", "32", "DISP8", \ |
"DISP16", "DISP32", "WDISP30", "WDISP22", \ |
"HI22", "22", "13", "LO10", \ |
"SFA_BASE", "SFAOFF13", "BASE10", "BASE13", \ |
"BASE22", "PC10", "PC22", "JMP_TBL", \ |
"SEGOFF16", "GLOB_DAT", "JMP_SLOT", "RELATIVE", \ |
"11", "WDISP2_14", "WDISP19", "HHI22", \ |
"HLO10", \ |
"JUMPTARG", "CONST", "CONSTH", "WDISP14", \ |
"WDISP21", \ |
"NO_RELOC" |
|
#endif /* _RELOC_H_READ_ */ |
|
/* end of reloc.h */ |
/encap.h
0,0 → 1,134
/* Yet Another Try at encapsulating bsd object files in coff. |
Copyright 1988, 1989, 1991 Free Software Foundation, Inc. |
Written by Pace Willisson 12/9/88 |
|
This file is obsolete. It needs to be converted to just define a bunch |
of stuff that BFD can use to do coff-encapsulated files. --gnu@cygnus.com |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
/* |
* We only use the coff headers to tell the kernel |
* how to exec the file. Therefore, the only fields that need to |
* be filled in are the scnptr and vaddr for the text and data |
* sections, and the vaddr for the bss. As far as coff is concerned, |
* there is no symbol table, relocation, or line numbers. |
* |
* A normal bsd header (struct exec) is placed after the coff headers, |
* and before the real text. I defined a the new fields 'a_machtype' |
* and a_flags. If a_machtype is M_386, and a_flags & A_ENCAP is |
* true, then the bsd header is preceeded by a coff header. Macros |
* like N_TXTOFF and N_TXTADDR use this field to find the bsd header. |
* |
* The only problem is to track down the bsd exec header. The |
* macros HEADER_OFFSET, etc do this. |
*/ |
|
#define N_FLAGS_COFF_ENCAPSULATE 0x20 /* coff header precedes bsd header */ |
|
/* Describe the COFF header used for encapsulation. */ |
|
struct coffheader |
{ |
/* filehdr */ |
unsigned short f_magic; |
unsigned short f_nscns; |
long f_timdat; |
long f_symptr; |
long f_nsyms; |
unsigned short f_opthdr; |
unsigned short f_flags; |
/* aouthdr */ |
short magic; |
short vstamp; |
long tsize; |
long dsize; |
long bsize; |
long entry; |
long text_start; |
long data_start; |
struct coffscn |
{ |
char s_name[8]; |
long s_paddr; |
long s_vaddr; |
long s_size; |
long s_scnptr; |
long s_relptr; |
long s_lnnoptr; |
unsigned short s_nreloc; |
unsigned short s_nlnno; |
long s_flags; |
} scns[3]; |
}; |
|
/* Describe some of the parameters of the encapsulation, |
including how to find the encapsulated BSD header. */ |
|
/* FIXME, this is dumb. The same tools can't handle a.outs for different |
architectures, just because COFF_MAGIC is different; so you need a |
separate GNU nm for every architecture!!? Unfortunately, it needs to |
be this way, since the COFF_MAGIC value is determined by the kernel |
we're trying to fool here. */ |
|
#define COFF_MAGIC_I386 0514 /* I386MAGIC */ |
#define COFF_MAGIC_M68K 0520 /* MC68MAGIC */ |
|
#ifdef COFF_MAGIC |
short __header_offset_temp; |
#define HEADER_OFFSET(f) \ |
(__header_offset_temp = 0, \ |
fread ((char *)&__header_offset_temp, sizeof (short), 1, (f)), \ |
fseek ((f), -sizeof (short), 1), \ |
__header_offset_temp==COFF_MAGIC ? sizeof(struct coffheader) : 0) |
#else |
#define HEADER_OFFSET(f) 0 |
#endif |
|
#define HEADER_SEEK(f) (fseek ((f), HEADER_OFFSET((f)), 1)) |
|
/* Describe the characteristics of the BSD header |
that appears inside the encapsulation. */ |
|
/* Encapsulated coff files that are linked ZMAGIC have a text segment |
offset just past the header (and a matching TXTADDR), excluding |
the headers from the text segment proper but keeping the physical |
layout and the virtual memory layout page-aligned. |
|
Non-encapsulated a.out files that are linked ZMAGIC have a text |
segment that starts at 0 and an N_TXTADR similarly offset to 0. |
They too are page-aligned with each other, but they include the |
a.out header as part of the text. |
|
The _N_HDROFF gets sizeof struct exec added to it, so we have |
to compensate here. See <a.out.gnu.h>. */ |
|
#undef _N_HDROFF |
#undef N_TXTADDR |
#undef N_DATADDR |
|
#define _N_HDROFF(x) ((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \ |
sizeof (struct coffheader) : 0) |
|
/* Address of text segment in memory after it is loaded. */ |
#define N_TXTADDR(x) \ |
((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \ |
sizeof (struct coffheader) + sizeof (struct exec) : 0) |
#define SEGMENT_SIZE 0x400000 |
|
#define N_DATADDR(x) \ |
((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \ |
(SEGMENT_SIZE + ((N_TXTADDR(x)+(x).a_text-1) & ~(SEGMENT_SIZE-1))) : \ |
(N_TXTADDR(x)+(x).a_text)) |
/hp.h
0,0 → 1,82
/* Special version of <a.out.h> for use under hp-ux. |
Copyright 1988, 1991 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
/* THIS FILE IS OBSOLETE. It needs to be revised as a variant "external" |
a.out format for use with BFD. */ |
|
/* The `exec' structure and overall layout must be close to HP's when |
we are running on an HP system, otherwise we will not be able to |
execute the resulting file. */ |
|
/* Allow this file to be included twice. */ |
#ifndef __GNU_EXEC_MACROS__ |
|
struct exec |
{ |
unsigned short a_machtype; /* machine type */ |
unsigned short a_magic; /* magic number */ |
unsigned long a_spare1; |
unsigned long a_spare2; |
unsigned long a_text; /* length of text, in bytes */ |
unsigned long a_data; /* length of data, in bytes */ |
unsigned long a_bss; /* length of uninitialized data area for file, in bytes */ |
unsigned long a_trsize; /* length of relocation info for text, in bytes */ |
unsigned long a_drsize; /* length of relocation info for data, in bytes */ |
unsigned long a_spare3; /* HP = pascal interface size */ |
unsigned long a_spare4; /* HP = symbol table size */ |
unsigned long a_spare5; /* HP = debug name table size */ |
unsigned long a_entry; /* start address */ |
unsigned long a_spare6; /* HP = source line table size */ |
unsigned long a_spare7; /* HP = value table size */ |
unsigned long a_syms; /* length of symbol table data in file, in bytes */ |
unsigned long a_spare8; |
}; |
|
/* Tell a.out.gnu.h not to define `struct exec'. */ |
#define __STRUCT_EXEC_OVERRIDE__ |
|
#include "../a.out.gnu.h" |
|
#undef N_MAGIC |
#undef N_MACHTYPE |
#undef N_FLAGS |
#undef N_SET_INFO |
#undef N_SET_MAGIC |
#undef N_SET_MACHTYPE |
#undef N_SET_FLAGS |
|
#define N_MAGIC(exec) ((exec) . a_magic) |
#define N_MACHTYPE(exec) ((exec) . a_machtype) |
#define N_SET_MAGIC(exec, magic) (((exec) . a_magic) = (magic)) |
#define N_SET_MACHTYPE(exec, machtype) (((exec) . a_machtype) = (machtype)) |
|
#undef N_BADMAG |
#define N_BADMAG(x) ((_N_BADMAG (x)) || (_N_BADMACH (x))) |
|
#define _N_BADMACH(x) \ |
(((N_MACHTYPE (x)) != HP9000S200_ID) && \ |
((N_MACHTYPE (x)) != HP98x6_ID)) |
|
#define HP98x6_ID 0x20A |
#define HP9000S200_ID 0x20C |
|
#undef _N_HDROFF |
#define _N_HDROFF(x) (SEGMENT_SIZE - (sizeof (struct exec))) |
|
#define SEGMENT_SIZE 0x1000 |
|
#endif /* __GNU_EXEC_MACROS__ */ |
/ranlib.h
0,0 → 1,62
/* ranlib.h -- archive library index member definition for GNU. |
Copyright 1990, 1991 Free Software Foundation, Inc. |
|
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
/* The Symdef member of an archive contains two things: |
a table that maps symbol-string offsets to file offsets, |
and a symbol-string table. All the symbol names are |
run together (each with trailing null) in the symbol-string |
table. There is a single longword bytecount on the front |
of each of these tables. Thus if we have two symbols, |
"foo" and "_bar", that are in archive members at offsets |
200 and 900, it would look like this: |
16 ; byte count of index table |
0 ; offset of "foo" in string table |
200 ; offset of foo-module in file |
4 ; offset of "bar" in string table |
900 ; offset of bar-module in file |
9 ; byte count of string table |
"foo\0_bar\0" ; string table */ |
|
#define RANLIBMAG "__.SYMDEF" /* Archive file name containing index */ |
#define RANLIBSKEW 3 /* Creation time offset */ |
|
/* Format of __.SYMDEF: |
First, a longword containing the size of the 'symdef' data that follows. |
Second, zero or more 'symdef' structures. |
Third, a longword containing the length of symbol name strings. |
Fourth, zero or more symbol name strings (each followed by a null). */ |
|
struct symdef |
{ |
union |
{ |
unsigned long string_offset; /* In the file */ |
char *name; /* In memory, sometimes */ |
} s; |
/* this points to the front of the file header (AKA member header -- |
a struct ar_hdr), not to the front of the file or into the file). |
in other words it only tells you which file to read */ |
unsigned long file_offset; |
}; |
|
/* Compatability with BSD code */ |
|
#define ranlib symdef |
#define ran_un s |
#define ran_strx string_offset |
#define ran_name name |
#define ran_off file_offset |
/hppa.h
0,0 → 1,7
#include "filehdr.h" |
#include "aouthdr.h" |
#include "scnhdr.h" |
#include "spacehdr.h" |
#include "syms.h" |
|
|