HP-UX Programmer's Guide for Java 2

Table Of Contents
program using the Java™ method:System.loadLibrary(). The implementation of
this function with the JVM on HP-UX relies upon the HP-UX runtime routine shl_load.
The alignment requirements for Java™ data structures allocated in the JVM are not the
same as those found in the standard PA-RISC 2.0 calling conventions. The JVM requires
that class instance data members 64-bits in size (longs and doubles) be allocated at the
next available 4-byte boundary. The standard PA-RISC 2.0 calling conventions normally
require that such objects be aligned on the next 8-byte boundary. If a C or C++ native
method were to access such a Java™ class instance data member that was not properly
aligned on an 8-byte boundary, a SIGBUS signal would be delivered to the program
and this would terminate the JVM. To prevent this situation, use the +u4 option to the
C and aCC compilers when compiling native that will directly access Java™ data
members. This command-line option instructs the compiler to use a special sequence
when dereferencing pointers to the 64-bit types. The special sequence correctly handles
the cases in which a 64-bit type is misaligned.
When building native method implementations to be used with the kernel-threaded
JVM, sources must be compiled with the following additional command-line option:
-mt
Additionally developers who produce hybrid applications where the application entry
point is a language other than Java, for example a C language main(), must link with
the p-thread library using -lpthread on the link line in order to use the
kernel-threaded JVM. Failing to link with libpthread.sl (libpthread.so on
Integrity) will result in an runtime failure when the JVM is loaded. The libpthread
library was not available in releases prior to HP-UX 11.0.
Implementers of native methods called by Java™ main programs should take care to
insure that null pointers are not dereferenced. The JVM is linked using the -z option,
which is discussed in the man page for the C compiler. If a native method does deference
a null pointer a SIGSEGV will be delivered to the JVM and this will cause the JVM to
terminate.
HP provides the following two Java™ examples on how to call C and C++ from Java™
using the standard JNI calling mechanism. Code examples C++ for Java™ 1.3.1 and
1.4.2 follow.
Sample code for SDK 1.3.1
Sample Java™ calling native method implementation in C
Here is the sample Java™ program that calls a native method, which has a C
implementation:
//
// File TestJava2CallingNative.java
//
class TestJava2CallingNative {
native static void sayHelloWorld();
Java™ calling a native (non-Java) method 47