* a.out.gnu.h, a.out.sun4.h: Make SEGMENT_SIZE able to depend
on the particular a.out being examined. * a.out.sun4.h: Define segment sizes for Sun-3's and Sun-4's. * FIXME: a.out.gnu.h is almost obsolete. * FIXME: a.out.sun4.h should be renamed a.out.sun.h now.
This commit is contained in:
parent
299eb5f15f
commit
d7f8f106b9
|
@ -100,9 +100,15 @@ enum machine_type {
|
|||
&& N_MAGIC(x) != ZMAGIC)
|
||||
#endif
|
||||
|
||||
/* By default, segment size is constant. But on some machines, it can
|
||||
be a function of the a.out header (e.g. machine type). */
|
||||
#ifndef N_SEGSIZE
|
||||
#define N_SEGSIZE(x) SEGMENT_SIZE
|
||||
#endif
|
||||
|
||||
/* This complexity is for encapsulated COFF support */
|
||||
#ifndef _N_HDROFF
|
||||
#define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec))
|
||||
#define _N_HDROFF(x) (N_SEGSIZE(x) - sizeof (struct exec))
|
||||
#endif
|
||||
|
||||
#ifndef N_TXTOFF
|
||||
|
@ -140,7 +146,7 @@ enum machine_type {
|
|||
#ifndef N_DATADDR
|
||||
#define N_DATADDR(x) \
|
||||
(N_MAGIC(x)==OMAGIC? (N_TXTADDR(x)+(x).a_text) \
|
||||
: (SEGMENT_SIZE + ((N_TXTADDR(x)+(x).a_text-1) & ~(SEGMENT_SIZE-1))))
|
||||
: (N_SEGSIZE(x) + ((N_TXTADDR(x)+(x).a_text-1) & ~(N_SEGSIZE(x)-1))))
|
||||
#endif
|
||||
|
||||
/* Address of bss segment in memory after it is loaded. */
|
||||
|
|
|
@ -2,11 +2,20 @@
|
|||
|
||||
#define PAGE_SIZE 0x2000 /* 8K. aka NBPG in <sys/param.h> */
|
||||
/* Note that some SPARCs have 4K pages, some 8K, some others. */
|
||||
#define SEGMENT_SIZE PAGE_SIZE
|
||||
|
||||
#define SEG_SIZE_SPARC PAGE_SIZE
|
||||
#define SEG_SIZE_SUN3 0x80000 /* Resolution of r/w protection hw */
|
||||
|
||||
#define TEXT_START_ADDR PAGE_SIZE /* Location 0 is not accessible */
|
||||
|
||||
/* 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? */ PAGE_SIZE)
|
||||
|
||||
/* Offset in a.out file of the text section. For ZMAGIC, the text section
|
||||
actually includes the a.out header. */
|
||||
|
||||
|
|
|
@ -72,7 +72,13 @@ enum machine_type {
|
|||
((exec).a_info = \
|
||||
((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
|
||||
|
||||
#define _N_HDROFF(x) (SEGMENT_SIZE - EXEC_BYTES_SIZE)
|
||||
/* By default, segment size is constant. But on some machines, it can
|
||||
be a function of the a.out header (e.g. machine type). */
|
||||
#ifndef N_SEGSIZE
|
||||
#define N_SEGSIZE(x) SEGMENT_SIZE
|
||||
#endif
|
||||
|
||||
#define _N_HDROFF(x) (N_SEGSIZE(x) - EXEC_BYTES_SIZE)
|
||||
/* address in an a.out of the text section. When demand paged, it's
|
||||
set up a bit to make nothing at 0, when an object file it's 0.
|
||||
There's a special hack case when the entry point is < TEXT_START_ADDR
|
||||
|
@ -111,7 +117,7 @@ enum machine_type {
|
|||
|
||||
#define N_DATADDR(x) \
|
||||
(N_MAGIC(x)==OMAGIC? (N_TXTADDR(x)+(x).a_text) \
|
||||
: (SEGMENT_SIZE + ((N_TXTADDR(x)+(x).a_text-1) & ~(SEGMENT_SIZE-1))))
|
||||
: (N_SEGSIZE(x) + ((N_TXTADDR(x)+(x).a_text-1) & ~(N_SEGSIZE(x)-1))))
|
||||
|
||||
#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
|
||||
|
||||
|
|
Loading…
Reference in New Issue