c2206235fb
From-SVN: r49359
76 lines
1.8 KiB
Plaintext
76 lines
1.8 KiB
Plaintext
GC on EWS4800
|
|
-------------
|
|
|
|
1. About EWS4800
|
|
EWS4800 is 32bit/64bit workstation.
|
|
|
|
Vender: NEC Corporation
|
|
OS: UX/4800 R9.* - R13.* (SystemV R4.2)
|
|
CPU: R4000, R4400, R10000 (MIPS)
|
|
|
|
2. Compiler
|
|
|
|
32bit:
|
|
Use ANSI C compiler.
|
|
CC = /usr/abiccs/bin/cc
|
|
|
|
64bit:
|
|
Use 64bit ANSI C compiler.
|
|
CC = /usr/ccs64/bin/cc
|
|
AR = /usr/ccs64/bin/ar
|
|
|
|
3. ELF file format
|
|
*** Caution: The following infomation is empirical. ***
|
|
|
|
32bit:
|
|
ELF file has an unique format. (See a.out(4) and end(3C).)
|
|
|
|
&_start
|
|
: text segment
|
|
&etext
|
|
DATASTART
|
|
: data segment (initialized)
|
|
&edata
|
|
DATASTART2
|
|
: data segment (uninitialized)
|
|
&end
|
|
|
|
Here, DATASTART and DATASTART2 are macros of GC, and are defined as
|
|
the following equations. (See include/private/gcconfig.h.)
|
|
The algorithm for DATASTART is similar with the function
|
|
GC_SysVGetDataStart() in os_dep.c.
|
|
|
|
DATASTART = ((&etext + 0x3ffff) & ~0x3ffff) + (&etext & 0xffff)
|
|
|
|
Dynamically linked:
|
|
DATASTART2 = (&_gp + 0x8000 + 0x3ffff) & ~0x3ffff
|
|
|
|
Statically linked:
|
|
DATASTART2 = &edata
|
|
|
|
GC has to check addresses both between DATASTART and &edata, and
|
|
between DATASTART2 and &end. If a program accesses between &etext
|
|
and DATASTART, or between &edata and DATASTART2, the segmentation
|
|
error occurs and the program stops.
|
|
|
|
If a program is statically linked, there is not a gap between
|
|
&edata and DATASTART2. The global symbol &_DYNAMIC_LINKING is used
|
|
for the detection.
|
|
|
|
64bit:
|
|
ELF file has a simple format. (See end(3C).)
|
|
|
|
_ftext
|
|
: text segment
|
|
_etext
|
|
_fdata = DATASTART
|
|
: data segment (initialized)
|
|
_edata
|
|
_fbss
|
|
: data segment (uninitialized)
|
|
_end = DATAEND
|
|
|
|
--
|
|
Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
|
|