Mercurial > hg > graal-compiler
comparison src/share/vm/runtime/os.cpp @ 7994:9fae07c31641
6518907: cleanup IA64 specific code in Hotspot
Summary: removed unused IA64 specific code
Reviewed-by: twisti, kvn, dholmes
author | morris |
---|---|
date | Fri, 25 Jan 2013 16:50:33 -0800 |
parents | f34d701e952e |
children | 5fc51c1ecdeb eca90b8a06eb |
comparison
equal
deleted
inserted
replaced
7993:76341426b645 | 7994:9fae07c31641 |
---|---|
983 | 983 |
984 // Looks like all platforms except IA64 can use the same function to check | 984 // Looks like all platforms except IA64 can use the same function to check |
985 // if C stack is walkable beyond current frame. The check for fp() is not | 985 // if C stack is walkable beyond current frame. The check for fp() is not |
986 // necessary on Sparc, but it's harmless. | 986 // necessary on Sparc, but it's harmless. |
987 bool os::is_first_C_frame(frame* fr) { | 987 bool os::is_first_C_frame(frame* fr) { |
988 #ifdef IA64 | 988 #if defined(IA64) && !defined(_WIN32) |
989 // In order to walk native frames on Itanium, we need to access the unwind | 989 // On IA64 we have to check if the callers bsp is still valid |
990 // table, which is inside ELF. We don't want to parse ELF after fatal error, | 990 // (i.e. within the register stack bounds). |
991 // so return true for IA64. If we need to support C stack walking on IA64, | 991 // Notice: this only works for threads created by the VM and only if |
992 // this function needs to be moved to CPU specific files, as fp() on IA64 | 992 // we walk the current stack!!! If we want to be able to walk |
993 // is register stack, which grows towards higher memory address. | 993 // arbitrary other threads, we'll have to somehow store the thread |
994 // object in the frame. | |
995 Thread *thread = Thread::current(); | |
996 if ((address)fr->fp() <= | |
997 thread->register_stack_base() HPUX_ONLY(+ 0x0) LINUX_ONLY(+ 0x50)) { | |
998 // This check is a little hacky, because on Linux the first C | |
999 // frame's ('start_thread') register stack frame starts at | |
1000 // "register_stack_base + 0x48" while on HPUX, the first C frame's | |
1001 // ('__pthread_bound_body') register stack frame seems to really | |
1002 // start at "register_stack_base". | |
1003 return true; | |
1004 } else { | |
1005 return false; | |
1006 } | |
1007 #elif defined(IA64) && defined(_WIN32) | |
994 return true; | 1008 return true; |
995 #endif | 1009 #else |
996 | |
997 // Load up sp, fp, sender sp and sender fp, check for reasonable values. | 1010 // Load up sp, fp, sender sp and sender fp, check for reasonable values. |
998 // Check usp first, because if that's bad the other accessors may fault | 1011 // Check usp first, because if that's bad the other accessors may fault |
999 // on some architectures. Ditto ufp second, etc. | 1012 // on some architectures. Ditto ufp second, etc. |
1000 uintptr_t fp_align_mask = (uintptr_t)(sizeof(address)-1); | 1013 uintptr_t fp_align_mask = (uintptr_t)(sizeof(address)-1); |
1001 // sp on amd can be 32 bit aligned. | 1014 // sp on amd can be 32 bit aligned. |
1021 // is not walkable beyond current frame. | 1034 // is not walkable beyond current frame. |
1022 if (old_fp < ufp) return true; | 1035 if (old_fp < ufp) return true; |
1023 if (old_fp - ufp > 64 * K) return true; | 1036 if (old_fp - ufp > 64 * K) return true; |
1024 | 1037 |
1025 return false; | 1038 return false; |
1039 #endif | |
1026 } | 1040 } |
1027 | 1041 |
1028 #ifdef ASSERT | 1042 #ifdef ASSERT |
1029 extern "C" void test_random() { | 1043 extern "C" void test_random() { |
1030 const double m = 2147483647; | 1044 const double m = 2147483647; |