RFR (small) 6518907: purge IA64 platform-specific ifdefs in source code
Christian Thalinger
christian.thalinger at oracle.com
Tue Nov 27 16:13:21 PST 2012
Quick question: Do you have a non-empty implementation for CodeBuffer::flush_bundle on IA64?
-- Chris
On Nov 8, 2012, at 12:25 AM, "Lindenmaier, Goetz" <goetz.lindenmaier at sap.com> wrote:
> Hi Morris,
>
>
>
> I had a look at your change. As you know we maintain a port for IA64.
>
> We basically use all the IA64 specific code, although some of the defines
>
> are obviously superfluous.
>
> The changes are not that essential that removing them would cause us
>
> huge problems, but nevertheless we would prefer if most of them stay
>
> in the code to reduce our deviation from your code.
>
>
>
> In more detail:
>
>
>
> Code to remove
>
> =============
>
>
>
> We do not use the agent on ia64, so we don't care about
>
> agent/src/os/linux/LinuxDebuggerLocal.c
>
> agent/src/os/linux/libproc.h
>
> agent/src/os/win32/windbg/sawindbg.cpp
>
>
>
> We don’t need the code here:
>
> src/os/bsd/vm/os_bsd.cpp
>
>
>
> Here we removed the #define ourselves:
>
> src/share/vm/interpreter/bytecodeInterpreter.cpp
>
> src/share/vm/runtime/sharedRuntime.cpp
>
> src/share/vm/runtime/synchronizer.cpp
>
>
>
> Further you can remove
>
> src/share/vm/runtime/vframeArray.cpp
>
>
>
> We can easily work around need_register_stack_bang(), and as it's rather platform
>
> dependent, just remove it in
>
> src/share/vm/opto/compile.hpp
>
> src/share/vm/opto/output.cpp
>
>
>
>
>
> Code to keep
>
> ===========
>
>
>
> This is basic platform support, so keep it please:
>
> src/share/vm/runtime/vm_version.cpp
>
> src/share/vm/utilities/macros.hpp
>
>
>
> Keep this:
>
> src/share/vm/prims/forte.cpp
>
>
>
> Don't care:
>
> src/share/vm/runtime/os.cpp
>
> We extended the code at this place to cover more cases, see below.
>
> Therefore we don't care about the fix in openJDK.
>
> Note that our code is also used on AMD64:
>
>
>
> // Looks like all platforms except IA64 can use the same function to check
>
> // if C stack is walkable beyond current frame. The check for fp() is not
>
> // necessary on Sparc, but it's harmless.
>
> bool os::is_first_C_frame(frame* fr) {
>
> #if defined(IA64) && !defined(_WIN32)
>
> // On IA64 we have to check if the callers bsp is still valid
>
> // (i.e. within the register stack bounds).
>
> // Notice: this only works for threads created by the VM and only if
>
> // we walk the current stack!!! If we want to be able to walk
>
> // arbitrary other threads, we'll have to somehow store the thread
>
> // object in the frame.
>
> Thread *thread = Thread::current();
>
> if ((address)fr->fp() <= thread->register_stack_base() HPUX_ONLY(+ 0x0) LINUX_ONLY(+ 0x50)) {
>
> // This check is a little hacky, because on Linux the frist C
>
> // frame's ('start_thread') register stack frame starts at
>
> // "register_stack_base + 0x48" while on HPUX, the first C frame's
>
> // ('__pthread_bound_body') register stack frame seems to really
>
> // start at "register_stack_base".
>
> return true;
>
> } else {
>
> return false;
>
> }
>
> // On Windows AMD64 link() does not work as there's no back link on the stack.
>
> #elif (defined(IA64) || defined(AMD64)) && defined(_WIN32)
>
> return true;
>
> #else
>
> // Load up sp, fp, sender sp and sender fp, check for reasonable values.
>
> // Check usp first, because if that's bad the other accessors may fault
>
> // on some architectures. Ditto ufp second, etc.
>
> uintptr_t fp_align_mask = (uintptr_t)(sizeof(address)-1);
>
>
>
>
>
> The extension of the frame_slots in
>
> src/share/vm/opto/output.cpp
>
> is only needed for the _zap_dead_*_locals stubs. But better keep it.
>
>
>
> We use most of the code in os_linux.cpp as is, please keep it.
>
> src/os/linux/vm/os_linux.cpp
>
>
>
> There are two patches where you could improve the code:
>
>
>
> You could use IA64_ONLY(* 2) here:
>
>
>
> @@ -1174,12 +1170,7 @@
>
> // for initial thread if its stack size exceeds 6M. Cap it at 2M,
>
> // in case other parts in glibc still assumes 2M max stack size.
>
> // FIXME: alt signal stack is gone, maybe we can relax this constraint?
>
> -#ifndef IA64
>
> if (stack_size > 2 * K * K) stack_size = 2 * K * K;
>
> -#else
>
> - // Problem still exists RH7.2 (IA64 anyway) but 2MB is a little small
>
> - if (stack_size > 4 * K * K) stack_size = 4 * K * K;
>
> -#endif
>
>
>
> // Try to figure out where the stack base (top) is. This is harder.
>
> //
>
>
>
> You can apply this patch, instead I implemented the two functions empty
>
> in the platform file.
>
>
>
> @@ -4385,16 +4373,12 @@
>
> if (is_NPTL()) {
>
> return pthread_cond_timedwait(_cond, _mutex, _abstime);
>
> } else {
>
> -#ifndef IA64
>
> // 6292965: LinuxThreads pthread_cond_timedwait() resets FPU control
>
> // word back to default 64bit precision if condvar is signaled. Java
>
> // wants 53bit precision. Save and restore current value.
>
> int fpu = get_fpu_control_word();
>
> -#endif // IA64
>
> int status = pthread_cond_timedwait(_cond, _mutex, _abstime);
>
> -#ifndef IA64
>
> set_fpu_control_word(fpu);
>
> -#endif // IA64
>
> return status;
>
> }
>
> }
>
>
>
> We use all of the #defines/#ifdefs here:
>
> src/os/windows/vm/os_windows.cpp
>
> But we changed the IA64 specific code a lot.
>
>
>
> It's unclear whether this change is needed:
>
> src/share/vm/oops/oop.inline.hpp
>
> but to avoid a regression we would like to keep it. Maybe it
>
> would be better to protect the change by
>
> #if defined(IA64) && defined(_WIN32)
>
> as it's done at other shared code locations.
>
>
>
> Best regards,
>
> Goetz
>
>
>
>
>
>
>
>
>
>
>
>
>
> -----Original Message-----
> From: Volker Simonis [mailto:volker.simonis at gmail.com]
> Sent: Montag, 5. November 2012 11:25
> To: Morris Meyer
> Cc: Lindenmaier, Goetz
> Subject: Re: RFR (small) 6518907: purge IA64 platform-specific ifdefs in source code
>
>
>
> Hi Morris,
>
>
>
> we had a long weekend last week because last Thursday was public
>
> holiday in Germany, but my colleague Goetz is currently looking at the
>
> change and will come back to you.
>
>
>
> Thank you and best regards,
>
> Volker
>
>
>
> On Fri, Nov 2, 2012 at 10:42 PM, Morris Meyer <morris.meyer at oracle.com<mailto:morris.meyer at oracle.com>> wrote:
>
>> Volker,
>
>>
>
>> Have you had a chance to review my changes for this bug?
>
>>
>
>> Thanks in advance,
>
>>
>
>> --morris
More information about the hotspot-dev
mailing list