Operating System - HP-UX
1753338 Members
5235 Online
108792 Solutions
New Discussion юеВ

Re: NULL problem in HP server

 
SOLVED
Go to solution
Dennis Handly
Acclaimed Contributor
Solution

Re: NULL problem in HP server

>Can anybody make it work on a HP machine?

Why? This code is illegal. Unfortunately it should work by the linker default, -Z.

>works on a AIX machine but not in HP.

What linker options are you using?

>is it possible to instruct compiler while compiling not to use "0"?

No.

>instead use a valid segment area?

That's the default for read. Trying to modify will always abort.

>Don: So "-Z" will probably get you going -- but I'd still fix that source in the future to have more clean portability.

Right. But since -Z is the default, you'll need to look for -z.
KarthiKhivi
Advisor

Re: NULL problem in HP server

Thanks Dennis

We made that sample code work by using -Z option in GCC. But even this approcah fails in our project, sice we are making a shared library and making use of that. Its a JNI project with Java and C. :(
Dennis Handly
Acclaimed Contributor

Re: NULL problem in HP server

>We made that sample code work by using -Z option in GCC.

It appears that gcc hates bad programmers and by default passes -z to ld.

>making a shared library and making use of that. It's a JNI project with Java and C

I suppose you could copy java and "chatr -Z java" and then use that?
But I don't know what will be broken in java, if that trap is removed?
Steven Schweda
Honored Contributor

Re: NULL problem in HP server

> [...] But even this approcah fails in our
> project, [...]

There is much to be said for fixing your
really very bad code.
KarthiKhivi
Advisor

Re: NULL problem in HP server

Hi Dennis

"I suppose you could copy java and "chatr -Z java" and then use that?"

Could you explain wats the purpose of "chatr -Z java" and for wat it is used? wer to use this? I'm new to this command.

Thanks.
Dennis Handly
Acclaimed Contributor

Re: NULL problem in HP server

>Could you explain what's the purpose of "chatr -Z java"

It does the same as linking java with -Z.
Copy the executable, make it writable, use chatr, make it read only.
Then test. It may not work unless the modified executable is in the original directory. If so, you should give it a different name. Then see if it works.
KarthiKhivi
Advisor

Re: NULL problem in HP server

Hello All

Thanks for your valid inputs.

With the help of -Z option in GCC command, 20% of our application which is not in JNI worked. But the remaining 80% of application which is in JNI fails even with -Z option in GCC command.

Is there any command which can be used with GCC or with Javac or somewhere that makes my JNI portion also wrking?

Expecting your inputs.
Andrew C Fieldsend
Respected Contributor

Re: NULL problem in HP server

Assuming you're passing these dereferenced null values through JNI, then Java is trying to work with either a null or semi-random pointer value.

(If I remember correctly, the -Z flag allows dereferencing of null pointers by mapping a small block of zero-intialised memory starting at address 0, but I'm sure Dennis can correct me on that.)

Java was designed to have no way to ignore reference errors. When you say that the 20% in JNI fails, do you mean it crashes, or do you get Java errors?
KarthiKhivi
Advisor

Re: NULL problem in HP server

Non JNI means creating exe files (which is workign with -Z option in GCC command). Now the issue is with the JNI portion.
We are creating a shared library which will be used by JVM. -Z doesnt seem to work with shared libraries.. or Java is unable to handle null ptr reference. JVM crashes after receiving a SIGSERV error and a core file and a log file (hs_err_pid28587.log)getting generated.

With all your inputs 20% of Non JNI (exe) worked. Still need your inputs to make the other 80% JNI stuff to work.

is there a way to make java handle the null ptr reference, like how -Z made exe work?
Andrew C Fieldsend
Respected Contributor

Re: NULL problem in HP server

Sorry, I wasn't very clear with my earlier post - but you've answered my question. What I actually meant to say was whether you had a Java stack dump from a null pointer exception, or an actual SIGSEGV crash.

The Java stack dump would indicate that Java had successfully interpreted the null pointer from the C code as a Java null reference, while the SIGSEGV indicates that the JVM is failing to dereference the null pointer internally.

You could possibly use Dennis' chatr command on the "java" executable itself, but I'm fairly certain that you would then get Java null pointer exceptions (from the dereferenced C null pointer) at some point. There's no way to turn these off in Java, other than by using a try...catch block around the JNI call to handle the exception.