1 /*
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3 * Copyright 2012, 2014 SAP AG. All rights reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation.
9 *
10 * This code is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * version 2 for more details (a copy is included in the LICENSE file that
14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
447
448 if (iid == vmIntrinsics::_linkToInterface) {
449 __ BIND(L_incompatible_class_change_error);
450 __ load_const_optimized(temp1, StubRoutines::throw_IncompatibleClassChangeError_entry());
451 __ mtctr(temp1);
452 __ bctr();
453 }
454 }
455 }
456
457 #ifndef PRODUCT
458 void trace_method_handle_stub(const char* adaptername,
459 oopDesc* mh,
460 intptr_t* entry_sp,
461 intptr_t* saved_regs) {
462
463 bool has_mh = (strstr(adaptername, "/static") == NULL &&
464 strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH
465 const char* mh_reg_name = has_mh ? "R23_method_handle" : "G23";
466 tty->print_cr("MH %s %s="INTPTR_FORMAT " sp=" INTPTR_FORMAT,
467 adaptername, mh_reg_name, (intptr_t) mh, entry_sp);
468
469 if (Verbose) {
470 tty->print_cr("Registers:");
471 const int abi_offset = frame::abi_reg_args_size / 8;
472 for (int i = R3->encoding(); i <= R12->encoding(); i++) {
473 Register r = as_Register(i);
474 int count = i - R3->encoding();
475 // The registers are stored in reverse order on the stack (by save_volatile_gprs(R1_SP, abi_reg_args_size)).
476 tty->print("%3s=" PTR_FORMAT, r->name(), saved_regs[abi_offset + count]);
477 if ((count + 1) % 4 == 0) {
478 tty->cr();
479 } else {
480 tty->print(", ");
481 }
482 }
483 tty->cr();
484
485 {
486 // dumping last frame with frame::describe
487
|
1 /*
2 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
3 * Copyright 2012, 2014 SAP AG. All rights reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation.
9 *
10 * This code is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * version 2 for more details (a copy is included in the LICENSE file that
14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
447
448 if (iid == vmIntrinsics::_linkToInterface) {
449 __ BIND(L_incompatible_class_change_error);
450 __ load_const_optimized(temp1, StubRoutines::throw_IncompatibleClassChangeError_entry());
451 __ mtctr(temp1);
452 __ bctr();
453 }
454 }
455 }
456
457 #ifndef PRODUCT
458 void trace_method_handle_stub(const char* adaptername,
459 oopDesc* mh,
460 intptr_t* entry_sp,
461 intptr_t* saved_regs) {
462
463 bool has_mh = (strstr(adaptername, "/static") == NULL &&
464 strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH
465 const char* mh_reg_name = has_mh ? "R23_method_handle" : "G23";
466 tty->print_cr("MH %s %s="INTPTR_FORMAT " sp=" INTPTR_FORMAT,
467 adaptername, mh_reg_name, (intptr_t) mh, (intptr_t) entry_sp);
468
469 if (Verbose) {
470 tty->print_cr("Registers:");
471 const int abi_offset = frame::abi_reg_args_size / 8;
472 for (int i = R3->encoding(); i <= R12->encoding(); i++) {
473 Register r = as_Register(i);
474 int count = i - R3->encoding();
475 // The registers are stored in reverse order on the stack (by save_volatile_gprs(R1_SP, abi_reg_args_size)).
476 tty->print("%3s=" PTR_FORMAT, r->name(), saved_regs[abi_offset + count]);
477 if ((count + 1) % 4 == 0) {
478 tty->cr();
479 } else {
480 tty->print(", ");
481 }
482 }
483 tty->cr();
484
485 {
486 // dumping last frame with frame::describe
487
|