GC on EWS4800 ------------- 1. About EWS4800 EWS4800 is a 32/64-bit workstation. Vendor: NEC Corporation OS: UX/4800 R9.* - R13.* (SystemV R4.2) CPU: R4000, R4400, R10000 (MIPS) 2. Compiler 32-bit: Use ANSI C compiler. CC = /usr/abiccs/bin/cc 64-bit: Use the 64-bit ANSI C compiler. CC = /usr/ccs64/bin/cc AR = /usr/ccs64/bin/ar 3. ELF file format *** Caution: The following information is empirical. *** 32-bit: ELF file has a 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. 64-bit: 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 When using the new "configure; make" build process, please run configure with the --disable-shared option. "Make check" does not yet pass with dynamic libraries. The reasons for that are not yet understood. (HB, paraphrasing message from Hironori SAKAMOTO.)
Generated by dwww version 1.15 on Sun Jun 2 00:35:54 CEST 2024.