FW: Porting OpenJDK 6 to Stratus OpenVOS on IA32 -- OpenVOSfunction pointers not the same as code pointers
Barnes, Richard
Richard.Barnes at stratus.com
Mon Dec 15 14:07:08 PST 2008
Hi Gary,
That is indeed the way I decided to proceed last Friday. I will be
adding some code that will only run on our OS that will make sure that
the value is treated as a function pointer.
Thanks for your confirmation.
Richard
-----Original Message-----
From: Gary Benson [mailto:gbenson at redhat.com]
Sent: Monday, December 15, 2008 4:16 AM
To: Barnes, Richard
Cc: porters-dev at openjdk.java.net; Joe.Darcy at Sun.COM
Subject: Re: FW: Porting OpenJDK 6 to Stratus OpenVOS on IA32 --
OpenVOSfunction pointers not the same as code pointers
Hi Richard,
I *think* Address(method, methodOopDesc::native_function_offset())
will return whatever your operating system things is a function
pointer, ie it will return a pointer to the descriptor rather than
the code pointer. That's certainly how it works on ppc64, which
has a similar system. But just try it; if it crashes then maybe
try it the other way ;)
Cheers,
Gary
Barnes, Richard wrote:
> One of the problems we have run into is that on most platforms a
> function pointer contains the address of the entrypoint of the
> function. That is, it is literally a pointer to the code. With
> OpenVOS, like on PA-RISC and IA64, a function pointer is a pointer
> to a two-word descriptor -- one word pointing to the code and the
> other pointing to data (think of this as a pointer to the global
> offset table or a pointer to thread-local storage).
>
> The HotSpot code we have seen does not seem to be prepared for this
> difference in what a function pointer is. Consider the macros
> CAST_FROM_FN_PTR and CAST_TO_FN_PTR in
> src/share/vm/utilities/globalDefinitions.hpp, where it is obvious
> that a function pointer is supposed to be a direct pointer to the
> entry point. This is causing us confusion in what we might have to
> do to make native calls work, such as in
> src/cpu/i486//vm/interpreter_i486.cpp's
> InterpreterGenerator::generate_native_entry() method. What we do
> not know is whether Address(method,
> methodOopDesc::native_function_offset()) is going to return a
> function pointer or a pointer to the code. While this wouldn't
> matter for most platforms, it does matter for ours.
>
> Does anybody have any experience with this kind of problem?
>
> Thanks,
>
> Richard Barnes
> Senior Technical Consultant
> Stratus Technologies
>
> > ______________________________________________
> > From: Barnes, Richard
> > Sent: Friday, September 12, 2008 4:31 PM
> > To: 'porters-dev at openjdk.java.net'
> > Cc: 'Joe.Darcy at Sun.COM'; Richard Barnes
> > Subject: Porting OpenJDK 6 to Stratus OpenVOS on IA32
> >
> > I am part of a small team at Stratus Technologies that is planning
> > to port OpenJDK6 to its proprietary OpenVOS operating system
> > running on IA32. What makes this interesting and unusual is that
> > even though we are targeting a little-endian chip, for
> > compatibility reasons OpenVOS must present a big-endian
> > environment to its users, so that gcc and g++, as well as native
> > OpenVOS compilers, produce code that makes IA32 appear to be
> > big-endian at the source level. The internals of OpenVOS are
> > quite different from the internals of Unix, but we have added a
> > POSIX.1 API to our operating system in recent years, which should
> > help to make this project possible. The runtime conventions are
> > close to those of Unix on IA32, with the exception of endianness
> > and some register usage, but that should not be insurmountable.
> >
> > When I first sent mail to jdk-6.dev, Joe Darcy of Sun suggested
> > that we check in with this group for community advice.
> >
> > For these reasons, we hope to have our project accepted to join
> > OpenJDK.
> >
> > Thanks,
> >
> > Richard Barnes
> > Senior Technical Consultant
> > Stratus Technologies
--
http://gbenson.net/
More information about the porters-dev
mailing list