2N/A * The contents of this file are subject to the terms of the 2N/A * Common Development and Distribution License (the "License"). 2N/A * You may not use this file except in compliance with the License. 2N/A * See the License for the specific language governing permissions 2N/A * and limitations under the License. 2N/A * When distributing Covered Code, include this CDDL HEADER in each 2N/A * If applicable, add the following below this CDDL HEADER, with the 2N/A * fields enclosed by brackets "[]" replaced with your own identifying 2N/A * information: Portions Copyright [yyyy] [name of copyright owner] 2N/A * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. 2N/A#
define SYSCALL32 0x91d02008 /* 32-bit syscall (ta 8) instruction */ 2N/A * For gwindows_t support, we define a structure to pass arguments to 2N/A * a Plwp_iter() callback routine. 2N/A int rv = 0;
/* Return value for skip to next lwp */ 2N/A return (0);
/* Nothing doing; skip to next lwp */ 2N/A * Zero out the gwindows_t because the gwindows file only has 2N/A * as much data as needed to represent the saved windows. 2N/A * If we actually found a non-zero gwindows file and 2N/A * were able to read it, iterate through the buffers 2N/A * looking for a stack pointer match; if one is found, 2N/A * copy out the corresponding register window. 2N/A continue;
/* No gwindows for this lwp */ 2N/A * If this lwp has gwindows associated with it, iterate 2N/A * through the buffers looking for a stack pointer 2N/A * match; if one is found, copy out the register window. 2N/A return (0);
/* We're done */ 2N/A return (-
1);
/* No gwindows match found */ 2N/A int sig;
/* ignored unless (frame_flags & PR_FOUND_SIGNAL) */ 2N/A for (i = 0; i <
6; i++)
2N/A * If we get here, then our Pread of the register window 2N/A * failed. If this is because the address was not mapped, 2N/A * then we attempt to read this window via any gwindows 2N/A * information we have. If that too fails, abort our loop. 2N/A break;
/* Failed for reason other than not mapped */ 2N/A break;
/* No gwindows match either */