libgcj for Arm/Linux
cdornan@arm.com
cdornan@arm.com
Thu May 4 04:34:00 GMT 2000
Hi Folks,
I have built gcj (patched 2.95.2) and libgcj (patched 2000年03月02日) for
ARM Linux on a NetWinder. gcj went straight through without any
changes. Libgcj just required a few simple mods:
zip/tailor.h:
This file contains the following:
#ifdef __arm
#include "acorn/osdep.h"
#endif
so including RiscOS header files for all ARM compilers. I
don't know what the test for RiscOS is; I removed these lines.
boehm-gc/gcconfig.h:
This file doesn't have any code to deal with ARM/Linux
targets. Thjere are two parts: identifying the target and
setting various parameters. The first is easy:
# if defined (arm) && defined(LINUX)
# define ARM32
# define mach_type_known
# endif
For the second part, I took other Linux tagets as a base and
modified and inserted it into the ARM section. I have
appended the fragment I used at the end of the message.
libffi/configure:
It doesm't recognise the armv4l target. I added
armv4l-*-linux-*) TARGET=ARM; TARGETDIR=arm;;
to the target case, but maybe `arm*-*-linux-*' would make more
sense for the distribution.
Chris Dornan
cdornan@arm.com
----------------------------gcconfig.h insert----------------------------
# ifdef ARM32
# define CPP_WORDSZ 32
# define MACH_TYPE "ARM32"
# define ALIGNMENT 4
# ifdef NETBSD
# define OS_TYPE "NETBSD"
# define HEURISTIC2
extern char etext;
# define DATASTART ((ptr_t)(&etext))
# define USE_GENERIC_PUSH_REGS
# endif
# ifdef LINUX
# define OS_TYPE "LINUX"
# define HEURISTIC1
# undef STACK_GRAN
# define STACK_GRAN 0x10000000
/* STACKBOTTOM is usually 0xc0000000, but this changes with */
/* different kernel configurations. In particular, systems */
/* with 2GB physical memory will usually move the user */
/* address space limit, and hence initial SP to 0x80000000. */
# if !defined(LINUX_THREADS) || !defined(REDIRECT_MALLOC)
/* libgcj: Linux threads don't interact well with the read() wrapper.
Not defining MPROTECT_VDB fixes this. */
/* # define MPROTECT_VDB */
# else
/* We seem to get random errors in incremental mode, */
/* possibly because Linux threads is itself a malloc client */
/* and can't deal with the signals. */
# endif
# ifdef __ELF__
# include <features.h>
# define DYNAMIC_LOADING
# if defined(__GLIBC__) && __GLIBC__ >= 2
extern int __data_start;
# define DATASTART ((ptr_t)(&__data_start))
# endif
# if !defined(DATASTART)
# /* includes ro data */
extern int _etext;
# define DATASTART ((ptr_t)((((word) (&_etext)) + 0xfff) & ~0xfff))
# endif
extern int _end;
# define DATAEND (&_end)
# else
extern int etext;
# define DATASTART ((ptr_t)((((word) (&etext)) + 0xfff) & ~0xfff))
# endif
# define USE_GENERIC_PUSH_REGS
# endif
#endif
----------------------------gcconfig.h insert end------------------------
More information about the Java
mailing list