< prev index next >

src/hotspot/cpu/s390/frame_s390.cpp

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2016, 2019, SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as

@@ -57,21 +57,13 @@
   bool safe = false;
   address sp = (address)_sp;
   address fp = (address)_fp;
   address unextended_sp = (address)_unextended_sp;
 
-  // Consider stack guards when trying to determine "safe" stack pointers
-  static size_t stack_guard_size = os::uses_stack_guard_pages() ?
-    JavaThread::stack_red_zone_size() + JavaThread::stack_yellow_reserved_zone_size() : 0;
-  size_t usable_stack_size = thread->stack_size() - stack_guard_size;
-
+  // consider stack guards when trying to determine "safe" stack pointers
   // sp must be within the usable part of the stack (not in guards)
-  bool sp_safe = (sp < thread->stack_base()) &&
-                 (sp >= thread->stack_base() - usable_stack_size);
-
-
-  if (!sp_safe) {
+  if (!thread->is_in_usable_stack(sp)) {
     return false;
   }
 
   // Unextended sp must be within the stack
   bool unextended_sp_safe = (unextended_sp < thread->stack_base());

@@ -79,14 +71,14 @@
   if (!unextended_sp_safe) {
     return false;
   }
 
   // An fp must be within the stack and above (but not equal) sp.
-  bool fp_safe = (fp <= thread->stack_base()) &&  (fp > sp);
+  bool fp_safe = (fp < thread->stack_base()) && (fp > sp);
   // An interpreter fp must be within the stack and above (but not equal) sp.
   // Moreover, it must be at least the size of the z_ijava_state structure.
-  bool fp_interp_safe = (fp <= thread->stack_base()) && (fp > sp) &&
+  bool fp_interp_safe = (fp < thread->stack_base()) && (fp > sp) &&
     ((fp - sp) >= z_ijava_state_size);
 
   // We know sp/unextended_sp are safe, only fp is questionable here
 
   // If the current frame is known to the code cache then we can attempt to

@@ -142,11 +134,11 @@
     // Do we have a valid fp?
     address sender_fp = (address) sender.fp();
 
     // sender_fp must be within the stack and above (but not
     // equal) current frame's fp.
-    if (sender_fp > thread->stack_base() || sender_fp <= fp) {
+    if (sender_fp >= thread->stack_base() || sender_fp <= fp) {
         return false;
     }
 
     // If the potential sender is the interpreter then we can do some more checking.
     if (Interpreter::contains(sender_pc)) {
< prev index next >