15abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm/* libunwind - a platform-independent unwind library 25abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm Copyright (C) 2001-2003 Hewlett-Packard Co 35abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm Contributed by David Mosberger-Tang <davidm@hpl.hp.com> 45abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 55abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmThis file is part of libunwind. 65abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 75abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmPermission is hereby granted, free of charge, to any person obtaining 85abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidma copy of this software and associated documentation files (the 95abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm"Software"), to deal in the Software without restriction, including 105abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmwithout limitation the rights to use, copy, modify, merge, publish, 115abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmdistribute, sublicense, and/or sell copies of the Software, and to 125abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmpermit persons to whom the Software is furnished to do so, subject to 135abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmthe following conditions: 145abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 155abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmThe above copyright notice and this permission notice shall be 165abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmincluded in all copies or substantial portions of the Software. 175abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 185abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 195abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 205abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 215abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 225abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 235abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 245abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ 255abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 265abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#include "ucontext_i.h" 275abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 285abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#ifdef UNW_LOCAL_ONLY 295abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm# include "Lcursor_i.h" 305abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm# define ia64_install_cursor _ULia64_install_cursor 315abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#else 325abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm# include "Gcursor_i.h" 335abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm# define ia64_install_cursor _Uia64_install_cursor 345abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#endif 355abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 365abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#define SYS_sigreturn 1181 375abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 385abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#ifndef UNW_REMOTE_ONLY 395abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 400aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm/* ia64_install_cursor (const cursor *c, long pri_unat, long *extra, 410aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm long bspstore, long dirty_size, long *dirty_partition, 420aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm long dirty_rnat) 435abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 445abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm Restores the machine-state represented by C and thereby resumes execution 455abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm in that frame. If the frame or one of its descendants was interrupted 465abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm by a signal, all registers are restored (including the signal mask). 475abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm Otherwise, only the preserved registers, the global-pointer (r1), and 485abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm the exception-arguments (r15-r18) are restored. */ 495abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 505abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#define pRet p6 515abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#define pSig p7 525abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 535abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm .align 32 545abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm .hidden ia64_install_cursor 555abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm .global ia64_install_cursor 565abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm .proc ia64_install_cursor 575abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmia64_install_cursor: 580aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm alloc r3 = ar.pfs, 7, 0, 0, 0 595abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm invala 605abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r2 = FR_LOC_OFF, in0 615abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 625abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 635abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r16 = [r2], LOC_SIZE // r16 = loc[IA64_REG_FR16] 645abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov.m r10 = ar.rsc // (ar.rsc: ~ 12 cycle latency) 655abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r3 = FR_LOC_OFF + 16, in0 665abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 675abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 685abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r17 = [r2], 2*LOC_SIZE // r17 = loc[IA64_REG_FR17] 695abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r18 = [r3], 2*LOC_SIZE // r18 = loc[IA64_REG_FR18] 705abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r16 = -4, r16 715abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 725abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 735abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r19 = [r2], 2*LOC_SIZE // r19 = loc[IA64_REG_FR19] 745abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r20 = [r3], 2*LOC_SIZE // r20 = loc[IA64_REG_FR20] 755abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r17 = -4, r17 765abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 775abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 785abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f16 = [r16] // f16 restored (don't touch no more) 795abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f17 = [r17] // f17 restored (don't touch no more) 805abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r18 = -4, r18 815abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 825abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r21 = [r2], 2*LOC_SIZE // r21 = loc[IA64_REG_FR21] 835abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r22 = [r3], 2*LOC_SIZE // r22 = loc[IA64_REG_FR22] 845abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r19 = -4, r19 855abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 865abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 875abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f18 = [r18] // f18 restored (don't touch no more) 885abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f19 = [r19] // f19 restored (don't touch no more) 895abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r20 = -4, r20 905abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 915abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r23 = [r2], 2*LOC_SIZE // r23 = loc[IA64_REG_FR23] 925abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r24 = [r3], 2*LOC_SIZE // r24 = loc[IA64_REG_FR24] 935abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r21 = -4, r21 945abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 955abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 965abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f20 = [r20] // f20 restored (don't touch no more) 975abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f21 = [r21] // f21 restored (don't touch no more) 985abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r22 = -4, r22 995abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1005abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r25 = [r2], 2*LOC_SIZE // r25 = loc[IA64_REG_FR25] 1015abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r26 = [r3], 2*LOC_SIZE // r26 = loc[IA64_REG_FR26] 1025abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r23 = -4, r23 1035abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1045abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1055abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f22 = [r22] // f22 restored (don't touch no more) 1065abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f23 = [r23] // f23 restored (don't touch no more) 1075abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r24 = -4, r24 1085abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1095abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r27 = [r2], 2*LOC_SIZE // r27 = loc[IA64_REG_FR27] 1105abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r28 = [r3], 2*LOC_SIZE // r28 = loc[IA64_REG_FR28] 1115abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r25 = -4, r25 1125abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1135abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1145abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f24 = [r24] // f24 restored (don't touch no more) 1155abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f25 = [r25] // f25 restored (don't touch no more) 1165abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r26 = -4, r26 1175abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1185abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r29 = [r2], 2*LOC_SIZE // r29 = loc[IA64_REG_FR29] 1195abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r30 = [r3], 2*LOC_SIZE // r30 = loc[IA64_REG_FR30] 1205abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r27 = -4, r27 1215abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1225abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1235abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f26 = [r26] // f26 restored (don't touch no more) 1245abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f27 = [r27] // f27 restored (don't touch no more) 1255abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r28 = -4, r28 1265abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1275abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r31 = [r2] // r31 = loc[IA64_REG_FR31] 1285abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov.m ar.unat = in1 1295abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r29 = -4, r29 1305abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1315abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1325abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f28 = [r28] // f28 restored (don't touch no more) 1335abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f29 = [r29] // f29 restored (don't touch no more) 1345abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r30 = -4, r30 1355abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1365abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r1 = [in2], 8 // gp restored (don't touch no more) 1375abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r8 = SIGCONTEXT_ADDR_OFF, in0 1385abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r31 = -4, r31 1395abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1405abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1415abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r8 = [r8] // r8 = sigcontext_addr 1425abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r11 = 0x1c, r10 // clear all but rsc.be and rsc.pl 1435abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r2 = PFS_LOC_OFF, in0 1445abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1455abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f30 = [r30] // f30 restored (don't touch no more) 1465abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f31 = [r31] // f31 restored (don't touch no more) 1475abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r3 = 8, in2 1485abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1495abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1505abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8.fill r4 = [in2], 16 // r4 restored (don't touch no more) 1515abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8.fill r5 = [r3], 16 // r5 restored (don't touch no more) 1525abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm cmp.eq pRet, pSig = r0, r8 // sigcontext_addr == NULL? 1535abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1545abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8.fill r6 = [in2], 16 // r6 restored (don't touch no more) 1555abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8.fill r7 = [r3] // r7 restored (don't touch no more) 1565abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r3 = IP_OFF, in0 1575abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1585abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1595abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r14 = [r2], (B1_LOC_OFF - PFS_LOC_OFF) // r14 = pfs_loc 1605abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r15 = [r3] // r15 = ip 1615abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r3 = (B2_LOC_OFF - IP_OFF), r3 1625abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1635abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1645abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r16 = [r2], (B3_LOC_OFF - B1_LOC_OFF) // r16 = b1_loc 1655abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r17= [r3], (B4_LOC_OFF - B2_LOC_OFF) // r17 = b2_loc 1665abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r14 = -4, r14 1675abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1685abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1695abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r18 = [r2], (B5_LOC_OFF - B3_LOC_OFF) // r18 = b3_loc 1705abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r19 = [r3], (F2_LOC_OFF - B4_LOC_OFF) // r19 = b4_loc 1715abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r16 = -4, r16 1725abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1735abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1745abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r20 = [r2], (F3_LOC_OFF - B5_LOC_OFF) // r20 = b5_loc 1755abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r21 = [r3], (F4_LOC_OFF - F2_LOC_OFF) // r21 = f2_loc 1765abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r17 = -4, r17 1775abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1785abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1795abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r16 = [r16] // r16 = *b1_loc 1805abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r17 = [r17] // r17 = *b2_loc 1815abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r18 = -4, r18 1825abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1835abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r22 = [r2], (F5_LOC_OFF - F3_LOC_OFF) // r21 = f3_loc 1845abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r23 = [r3], (UNAT_LOC_OFF - F4_LOC_OFF) // r22 = f4_loc 1855abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r19 = -4, r19 1865abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1875abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1885abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r18 = [r18] // r18 = *b3_loc 1895abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r19 = [r19] // r19 = *b4_loc 1905abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r20 = -4, r20 1915abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1925abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r24 = [r2], (LC_LOC_OFF - F5_LOC_OFF) // r24 = f5_loc 1935abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r25 = [r3], (FPSR_LOC_OFF - UNAT_LOC_OFF) // r25 = unat_loc 1945abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r21 = -4, r21 1955abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 1965abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 1975abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r22 = -4, r22 1985abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r23 = -4, r23 1995abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r24 = -4, r24 2005abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2015abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r20 = [r20] // r20 = *b5_loc 2025abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f2 = [r21] // f2 restored (don't touch no more) 2035abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov b1 = r16 // b1 restored (don't touch no more) 2045abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2055abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2065abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f3 = [r22] // f3 restored (don't touch no more) 2075abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f4 = [r23] // f4 restored (don't touch no more) 2085abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov b2 = r17 // b2 restored (don't touch no more) 2095abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2105abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r26 = [r2], (RNAT_LOC_OFF - LC_LOC_OFF) // r26 = lc_loc 2115abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r27 = [r3] // r27 = fpsr_loc 2125abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r25 = -4, r25 2135abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2145abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r3 = (PSP_OFF - FPSR_LOC_OFF), r3 2155abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm nop 0 2165abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm nop 0 2175abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2185abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2195abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f5 = [r24] // f5 restored (don't touch no more) 2205abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm(pRet) ld8 r25 = [r25] // r25 = *unat_loc 2215abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov b3 = r18 // b3 restored (don't touch no more) 2225abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2235abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r28 = [r2], (BSP_OFF - RNAT_LOC_OFF) // r28 = rnat_loc 2245abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r29 = [r3], (PR_OFF - PSP_OFF) // r29 = sp 2255abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov b4 = r19 // b4 restored (don't touch no more) 2265abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2275abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r26 = -4, r26 2285abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r27 = -4, r27 2295abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov b5 = r20 // b5 restored (don't touch no more) 2305abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2315abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2325abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r26 = [r26] // r26 = *lc_loc 2335abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r27 = [r27] // r27 = *fpsr_loc 2345abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm and r28 = -4, r28 2355abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2360aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm mov r30 = in3 // make backup-copy of new bsp 2375abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r31 = [r3] // r31 = pr 2385abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov rp = r15 2395abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2405abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2415abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r28 = [r28] // r28 = rnat 2425abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov.m ar.rsc = r11 // put RSE into enforced lazy mode 2435abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov.i ar.lc = r26 // lc restored (don't touch no more) 2445abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2455abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2465abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm loadrs // drop dirty partition 2470aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm mov r9 = in2 // make backup-copy of &extra[r16] 2480aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm cmp.eq p8, p0 = in4, r0 // dirty-size == 0? 2490aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm(p8) br.cond.dpnt.many .skip_load_dirty 2500aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm 2510aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm mov r2 = in4 // make backup-copy of dirty_size 2520aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm mov r15 = in5 // make backup-copy of dirty_partition 2530aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm mov r16 = in6 // make backup-copy of dirty_rnat 2540aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm ;; 2550aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm 2560aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm alloc r3 = ar.pfs, 0, 0, 0, 0 // drop register frame 2570aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm dep r11 = r2, r11, 16, 16 2580aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm ;; 2590aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm mov.m ar.bspstore = r15 2605abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2610aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm mov.m ar.rnat = r16 2620aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm mov.m ar.rsc = r11 // 14 cycles latency to loadrs 2630aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm ;; 2640aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm loadrs // loadup new dirty partition 2650aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm ;; 2660aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm 2670aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm.skip_load_dirty: 2685abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov.m ar.bspstore = r30 // restore register backing-store 2690aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm add r3 = 8, r9 // r3 = &extra[r16] 2705abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2715abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2725abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm(pRet) mov.m ar.fpsr = r27 // fpsr restored (don't touch no more) 2735abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov.m ar.rnat = r28 2745abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm(pSig) br.cond.dpnt.many .next 2755abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2765abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm/****** Return via br.ret: */ 2775abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2785abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r14 = [r14] // r14 = *pfs_loc 2790aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm ld8 r15 = [r9], 16 // r15 restored (don't touch no more) 2805abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov pr = r31, -1 // pr restored (don't touch no more) 2815abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2825abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2835abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r16 = [r3], 16 // r16 restored (don't touch no more) 2840aa29032f620f291476f449c0cce49a03324e6c6hp.com!davidm ld8 r17 = [r9] // r17 restored (don't touch no more) 2855abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm nop.i 0 2865abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2875abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2885abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r18 = [r3] // r18 restored (don't touch no more) 2895abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov.m ar.rsc = r10 // restore original ar.rsc 2905abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov sp = r29 2915abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2925abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov.m ar.unat = r25 // unat restored (don't touch no more) 2935abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov.i ar.pfs = r14 2945abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm br.ret.sptk.many rp 2955abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 2965abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2975abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm/****** Return via sigreturn(): */ 2985abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 2995abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm.next: mov.m ar.rsc = r10 // restore original ar.rsc 3005abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r2 = (SC_FR + 6*16), r8 3015abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r3 = (SC_FR + 7*16), r8 3025abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 3035abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 3045abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f6 = [r2], 32 3055abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f7 = [r3], 32 3065abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm nop 0 3075abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 3085abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 3095abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f8 = [r2], 32 3105abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f9 = [r3], 32 3115abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm nop 0 3125abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 3135abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 3145abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f10 = [r2], 32 3155abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f11 = [r3], 32 3165abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm nop 0 3175abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 3185abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 3195abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f12 = [r2], 32 3205abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f13 = [r3], 32 3215abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm nop 0 3225abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 3235abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 3245abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f14 = [r2], 32 3255abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ldf.fill f15 = [r3], 32 3265abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov sp = r29 3275abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 3285abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 3295abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#if NEW_SYSCALL 3305abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm add r2 = 8, tp;; 3315abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ld8 r2 = [r2] 3325abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov r15 = SYS_sigreturn 3335abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov b7 = r2 3345abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm br.call.sptk.many b6 = b7 3355abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm ;; 3365abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#else 3375abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm mov r15 = SYS_sigreturn 3385abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm break 0x100000 3395abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#endif 3405abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm break 0 // bug out if sigreturn() returns 3415abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 3425abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm .endp ia64_install_cursor 3435abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm 3445abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#endif /* !UNW_REMOTE_ONLY */ 34557e569646368cb730f028ecf1732143474e3e642Jan Kratochvil#ifdef __linux__ 34657e569646368cb730f028ecf1732143474e3e642Jan Kratochvil /* We do not need executable stack. */ 34757e569646368cb730f028ecf1732143474e3e642Jan Kratochvil .section .note.GNU-stack,"",@progbits 34857e569646368cb730f028ecf1732143474e3e642Jan Kratochvil#endif 349