| 1 | GC on EWS4800
|
|---|
| 2 | -------------
|
|---|
| 3 |
|
|---|
| 4 | 1. About EWS4800
|
|---|
| 5 | EWS4800 is 32bit/64bit workstation.
|
|---|
| 6 |
|
|---|
| 7 | Vender: NEC Corporation
|
|---|
| 8 | OS: UX/4800 R9.* - R13.* (SystemV R4.2)
|
|---|
| 9 | CPU: R4000, R4400, R10000 (MIPS)
|
|---|
| 10 |
|
|---|
| 11 | 2. Compiler
|
|---|
| 12 |
|
|---|
| 13 | 32bit:
|
|---|
| 14 | Use ANSI C compiler.
|
|---|
| 15 | CC = /usr/abiccs/bin/cc
|
|---|
| 16 |
|
|---|
| 17 | 64bit:
|
|---|
| 18 | Use 64bit ANSI C compiler.
|
|---|
| 19 | CC = /usr/ccs64/bin/cc
|
|---|
| 20 | AR = /usr/ccs64/bin/ar
|
|---|
| 21 |
|
|---|
| 22 | 3. ELF file format
|
|---|
| 23 | *** Caution: The following infomation is empirical. ***
|
|---|
| 24 |
|
|---|
| 25 | 32bit:
|
|---|
| 26 | ELF file has an unique format. (See a.out(4) and end(3C).)
|
|---|
| 27 |
|
|---|
| 28 | &_start
|
|---|
| 29 | : text segment
|
|---|
| 30 | &etext
|
|---|
| 31 | DATASTART
|
|---|
| 32 | : data segment (initialized)
|
|---|
| 33 | &edata
|
|---|
| 34 | DATASTART2
|
|---|
| 35 | : data segment (uninitialized)
|
|---|
| 36 | &end
|
|---|
| 37 |
|
|---|
| 38 | Here, DATASTART and DATASTART2 are macros of GC, and are defined as
|
|---|
| 39 | the following equations. (See include/private/gcconfig.h.)
|
|---|
| 40 | The algorithm for DATASTART is similar with the function
|
|---|
| 41 | GC_SysVGetDataStart() in os_dep.c.
|
|---|
| 42 |
|
|---|
| 43 | DATASTART = ((&etext + 0x3ffff) & ~0x3ffff) + (&etext & 0xffff)
|
|---|
| 44 |
|
|---|
| 45 | Dynamically linked:
|
|---|
| 46 | DATASTART2 = (&_gp + 0x8000 + 0x3ffff) & ~0x3ffff
|
|---|
| 47 |
|
|---|
| 48 | Statically linked:
|
|---|
| 49 | DATASTART2 = &edata
|
|---|
| 50 |
|
|---|
| 51 | GC has to check addresses both between DATASTART and &edata, and
|
|---|
| 52 | between DATASTART2 and &end. If a program accesses between &etext
|
|---|
| 53 | and DATASTART, or between &edata and DATASTART2, the segmentation
|
|---|
| 54 | error occurs and the program stops.
|
|---|
| 55 |
|
|---|
| 56 | If a program is statically linked, there is not a gap between
|
|---|
| 57 | &edata and DATASTART2. The global symbol &_DYNAMIC_LINKING is used
|
|---|
| 58 | for the detection.
|
|---|
| 59 |
|
|---|
| 60 | 64bit:
|
|---|
| 61 | ELF file has a simple format. (See end(3C).)
|
|---|
| 62 |
|
|---|
| 63 | _ftext
|
|---|
| 64 | : text segment
|
|---|
| 65 | _etext
|
|---|
| 66 | _fdata = DATASTART
|
|---|
| 67 | : data segment (initialized)
|
|---|
| 68 | _edata
|
|---|
| 69 | _fbss
|
|---|
| 70 | : data segment (uninitialized)
|
|---|
| 71 | _end = DATAEND
|
|---|
| 72 |
|
|---|
| 73 | --
|
|---|
| 74 | Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
|---|
| 75 |
|
|---|