< prev index next >

src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp

Print this page
rev 48556 : 8196401: PPC64+s390: get_frame_at_stack_banging_point uses wrong PC
Reviewed-by: stuefe

*** 1,8 **** /* ! * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2012, 2017 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 * published by the Free Software Foundation. --- 1,8 ---- /* ! * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2012, 2018 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 * published by the Free Software Foundation.
*** 108,117 **** --- 108,121 ---- void os::Aix::ucontext_set_pc(ucontext_t* uc, address new_pc) { uc->uc_mcontext.jmp_context.iar = (uint64_t) new_pc; } + static address ucontext_get_lr(const ucontext_t * uc) { + return (address)uc->uc_mcontext.jmp_context.lr; + } + ExtendedPC os::fetch_frame_from_context(const void* ucVoid, intptr_t** ret_sp, intptr_t** ret_fp) { ExtendedPC epc; const ucontext_t* uc = (const ucontext_t*)ucVoid;
*** 164,174 **** // stack overflow handling. In compiled code, we bang before // the frame is complete. return false; } else { intptr_t* sp = os::Aix::ucontext_get_sp(uc); ! *fr = frame(sp, (address)*sp); if (!fr->is_java_frame()) { assert(fr->safe_for_sender(thread), "Safety check"); assert(!fr->is_first_frame(), "Safety check"); *fr = fr->java_sender(); } --- 168,179 ---- // stack overflow handling. In compiled code, we bang before // the frame is complete. return false; } else { intptr_t* sp = os::Aix::ucontext_get_sp(uc); ! address lr = ucontext_get_lr(uc); ! *fr = frame(sp, lr); if (!fr->is_java_frame()) { assert(fr->safe_for_sender(thread), "Safety check"); assert(!fr->is_first_frame(), "Safety check"); *fr = fr->java_sender(); }
< prev index next >