summaryrefslogtreecommitdiff
path: root/libjava/classpath/native/target/readme.txt
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/native/target/readme.txt')
-rw-r--r--libjava/classpath/native/target/readme.txt149
1 files changed, 0 insertions, 149 deletions
diff --git a/libjava/classpath/native/target/readme.txt b/libjava/classpath/native/target/readme.txt
deleted file mode 100644
index 6fee79eba63..00000000000
--- a/libjava/classpath/native/target/readme.txt
+++ /dev/null
@@ -1,149 +0,0 @@
-The GNU classpath native layer
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To enable GNU classpath to run on a diverse array of different hardware
-platforms, a new native software layer has been added. This layer hide all
-machine and hardware dependent issues except common available definitions,
-which are ANSI C functions. For each targets system where the GNU classpath
-library is to be used, a specific set of native layer functions have to be
-provided. A generic set of functions is provided for Unix like systems
-(currently tested only with Linux). For a new target system, some or
-all native layer functions have to be rewritten. The following scheme
-illustrate the native layer.
-
- Java API
- ----------------------
- | Java classes |
- | -------------------- |
- | C native functions |
- | -------------------- |
- >> | C native layer | <<
- | -------------------- |
- | operating system |
- | -------------------- |
- | hardware |
- ----------------------
-
-The C native layer is implemented as a set of C pre-processor native macros.
-These macros expand to the appropriated native code. Macros are used
-instead function calls to give optimal performance and small code size.
-Of course in special cases, a macro can also expand to a function call
-if this is needed. This approach provide a flexible and efficient
-implementation of the native layer.
-
-The naming pattern for native macros is like follows:
-
- TARGET_NATIVE_<module name>_<macro name>
-
-where <module name> is a name of a module, e. g. FILE; <macro name> is
-the name of the specific native macro, e. g. OPEN_READ.
-
-The parameters for the macro use in general (with a few exceptions) the
-scheme
-
- <parameter>,<parameter>,...,<result>
-
-where <parameter> is input/output parameter and <result> is the result
-code TARGET_NATIVE_OK or TARGET_NATIVE_ERROR. Specific error codes
-and error strings can be gotten with
-
- TARGET_NATIVE_LAST_ERROR and
- TARGET_NATIVE_LAST_ERROR_STRING
-
-(see also file target_generic.h).
-
-For a single target system there exists two sets of native macros in
-the files
-
- a) <target name>/target_native_<module name>.h
- b) generic/target_generic_<module name>.h
-
-The macros in "a" are target specific implementations of native
-functions, the macros in "b" are generic implementations (for Unix) of
-the same native functions. If a native macro is not defined in the file
-"a", then the definition in file "b" is used (there is a check to see if
-a native macros is already defined elsewhere). This technique enables
-"a" to 'overwrite' single generic native macros with specific native
-macros for a specific target. In the default case, where only the
-generic implementation of the native macros is used, the files in the
-directory '<target name>' are empty except for the mandatory include of the
-generic header file in the directory 'generic' at the end. Please
-look at the existing Linux target specific files.
-
-The directory and file structure is as follows.
-
- native
- ...
- |
- |--- target
- | |
- | |--- Linux
- | | |--- target_native_<module name>.h
- | | |--- ...
- | | ...
- | |--- ...
- | |--- generic
- | | |--- target_generic_<module name>.h
- | | |--- ...
- ... ... ...
-
-
-Include hierarchy is as follows.
-
- native file <name>
- --> include 'target_native_<module name>.h'
- ...
- <target specific definitions>
- ...
- --> include 'target_generic_<module name>.h'
- ...
- <generic definitions>
- ...
-
-When writing native code, please take care with the following.
-
- - Use _only_ ANSI C specific functions directly which are available
- on all target systems with the same parameters, e. g. strdup() is
- not an ANSI C function, thus is is not available on all systems; mkdir()
- expect on some systems different parameters.
-
- !!!Do NOT use this functions in your native code!!!
-
- Instead
-
- * if a function is not available, create a native macro in the file
-
- <target name>/target_native_<module name>.h
-
- * if it is a generic function, include a generic implementation in
-
- generic/target_generic_<module name>.h
-
- * Then use this macro in your native code.
-
- - Avoid _all_ OS specific data types and constants, e. g. structures or error
- numbers. Instead, wrap them in a native macro and convert the values to
- basic scalar types like char, int, double or long.
-
- - Take care with 64 bit values; the are machine dependent. Not all
- target system support 64 bit operations. The macros in
- target_generic_math_int.h give a set of macros implementing 64 bit
- operations and constants.
-
- - Avoid - if possible - non-reentrant functions. Non-reentrant functions
- cause strange problems on some multitasking systems.
-
- - Avoid - if possible - dynamic data types created by malloc() and similar
- functions. Instead use (local) static variables to avoid stack usage.
- On some target systems, dynamic memory management is either slow or even
- dangerous. Moreover malloc()-calls can cause fragmentation of the system
- memory, which could result in a system crash or an application failure.
-
-For some examples, please look in the current implementation for
-Linux in the directory 'target/Linux' and the generic implementation in
-the directory 'target/generic'.
-
-
- aicas GmbH, February 2003
-
-