| 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 |  | 
|---|