Lines Matching refs:wctx

1575  * @param wctx
1579 cache_get (struct WalkContext *wctx)
1584 uint64_t idx = wctx->pc % ValTableSize;
1586 if (addr == wctx->pc)
1589 unsigned long fp = wctx->fp;
1591 if (fp < wctx->sp || fp >= wctx->sbase - sizeof (*sp))
1596 unsigned long tbgn = wctx->tbgn;
1597 unsigned long tend = wctx->tend;
1605 wctx->pc = npc;
1606 wctx->sp = (unsigned long) sp;
1607 wctx->fp = fp;
1608 wctx->tbgn = tbgn;
1609 wctx->tend = tend;
1615 uint64_t idx = wctx->pc % ValTableSize;
1617 if (addr != wctx->pc)
1624 * @param wctx
1627 cache_put (struct WalkContext *wctx, const uint32_t val)
1634 uint64_t idx = wctx->pc % ValTableSize;
1635 AddrTable_RA_FROMFP[ idx ] = wctx->pc;
1637 if (AddrTable_RA_EOSTCK[ idx ] == wctx->pc)
1648 uint64_t idx = wctx->pc % ValTableSize;
1649 AddrTable_RA_EOSTCK[ idx ] = wctx->pc;
1652 if (AddrTable_RA_FROMFP[ idx ] == wctx->pc)
1662 process_return_real (struct WalkContext *wctx, struct AdvWalkContext *cur, int cache_on)
1664 if ((unsigned long) cur->sp >= wctx->sbase ||
1665 (unsigned long) cur->sp < wctx->sp)
1668 cur->sp, wctx->sp, wctx->sbase);
1678 else if (cur->sp >= cur->sp_safe && (unsigned long) cur->sp < wctx->sbase)
1688 cache_put (wctx, RA_EOSTCK);
1689 wctx->pc = ra;
1690 wctx->sp = (unsigned long) cur->sp;
1691 wctx->fp = (unsigned long) cur->fp;
1696 unsigned long tbgn = wctx->tbgn;
1697 unsigned long tend = wctx->tend;
1703 ra, wctx->tbgn, wctx->tend);
1710 if (wctx->fp == (unsigned long) (cur->sp - 2))
1713 cache_put (wctx, RA_FROMFP);
1725 DprintfT (SP_DUMP_UNWIND, "unwind.c: trusted fp, pc = 0x%lX\n", wctx->pc);
1726 wctx->pc = ra;
1735 wctx->pc = npc;
1736 wctx->sp = (unsigned long) cur->sp;
1737 wctx->fp = (unsigned long) cur->fp;
1738 wctx->tbgn = tbgn;
1739 wctx->tend = tend;
1744 process_return (struct WalkContext *wctx, struct AdvWalkContext *cur)
1746 return process_return_real (wctx, cur, 1);
1751 struct WalkContext *wctx, uint32_t val)
1774 __collector_memcpy (&(OmpCtxs[ idx % OmpValTableSize ]), wctx, sizeof (struct WalkContext));
1781 sp = (unsigned long *) (wctx->sp);
1789 sp = (unsigned long *) (wctx->sp);
1801 if (sp < cur_sp_safe || ((unsigned long) sp >= wctx->sbase))
1811 sp = (unsigned long *) (wctx->sp);
1824 __collector_memcpy (&(OmpCtxs [ idx3 % OmpValTableSize ]), wctx, sizeof (struct WalkContext));
1876 find_i386_ret_addr (struct WalkContext *wctx, int do_walk)
1878 if (wctx->sp == 0)
1883 int retc = cache_get (wctx);
1899 targets[ntrg++] = (unsigned char*) wctx->pc;
1906 cur->pc = (unsigned char*) wctx->pc;
1907 cur->sp = (unsigned long*) wctx->sp;
1909 cur->fp = (unsigned long*) wctx->fp;
1975 __collector_memcpy (&wctx_pc_save, wctx, sizeof (struct WalkContext));
1986 uint64_t idx = wctx->pc * ROOT_IDX;
1999 if (wctx->pc == saved_ctx.pc
2000 && wctx->sp == saved_ctx.sp
2001 && wctx->fp == saved_ctx.fp
2002 && wctx->tbgn == saved_ctx.tbgn
2003 && wctx->tend == saved_ctx.tend)
2007 unsigned long fp = wctx->fp;
2011 DprintfT (SP_DUMP_UNWIND, "find_i386_ret_addr:%d -- RA_END_OF_STACK: pc=0x%lx\n", __LINE__, wctx->pc);
2012 __collector_memcpy (wctx, &OmpCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
2017 if (fp < wctx->sp || fp >= wctx->sbase - sizeof (*sp))
2019 TprintfT (DBG_LT1, "omp_cache_get -- wrong fp: pc=0x%lx\n", wctx->pc);
2022 if (sp < cur->sp_safe || (unsigned long) sp >= wctx->sbase)
2030 __collector_memcpy (wctx, &OmpCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
2031 TprintfT (DBG_LT1, "omp_cache_get -- ra match with target sp: pc=0x%lx, ra=0x%lx, val=%d\n", wctx->pc, ra, val);
2045 unsigned long tbgn = wctx->tbgn;
2046 unsigned long tend = wctx->tend;
2051 //if (sp < cur->sp_safe - 16 || (unsigned long)sp >= wctx->sbase - sizeof(*sp)) {
2054 if (sp < cur->sp_safe || (unsigned long) sp >= wctx->sbase)
2062 TprintfT (DBG_LT1, "omp_cache_get -- ra match: pc=0x%lx\n", wctx->pc);
2063 __collector_memcpy (wctx, &OmpCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
2120 int rc = process_return_real (wctx, cur, 0);
2124 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
2159 unsigned long tbgn = wctx->tbgn;
2160 unsigned long tend = wctx->tend;
2171 int rc = process_return_real (wctx, cur, 0);
2175 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
2346 wctx->sp = (unsigned long) cur->sp;
2348 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_RT_SIGRETURN);
2359 wctx->sp = (unsigned long) cur->sp;
2361 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_SIGRETURN);
2454 if ((unsigned long) npc < wctx->tbgn || (unsigned long) npc >= wctx->tend)
2789 if (isInside ((unsigned long) cur->sp, (unsigned long) cur->sp_safe, wctx->sbase))
2796 (unsigned long) cur->sp < wctx->sbase)
2807 (unsigned long) cur->sp < wctx->sbase)
2813 if (cur->sp >= cur->sp_safe && (unsigned long) cur->sp < wctx->sbase)
3010 if (wctx->fp == (unsigned long) cur->sp)
3082 if (wctx->fp == (unsigned long) cur->sp)
3099 else if (ptr >= cur->sp_safe && (unsigned long) ptr < wctx->sbase)
3117 else if (ptr >= cur->sp_safe && (unsigned long) ptr < wctx->sbase)
3134 (unsigned long) cur->sp < wctx->sbase)
3229 DprintfT (SP_DUMP_UNWIND, "stack_unwind%d cur->pc=0x%lx val=0x%lx wctx->sp=0x%lx wctx->sbase=0x%lx\n",
3231 (unsigned long) wctx->sp, (unsigned long) wctx->sbase);
3238 if (!isInside ((unsigned long) val, wctx->sp, wctx->sbase))
3240 DprintfT (SP_DUMP_UNWIND, "stack_unwind%d cannot calculate RSP. cur->pc=0x%lx opcode=0x%02x val=0x%lx wctx->sp=0x%lx wctx->sbase=0x%lx\n",
3242 (unsigned long) wctx->sp, (unsigned long) wctx->sbase);
3280 int rc = process_return (wctx, tmpctx);
3284 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3354 int rc = process_return (wctx, cur);
3362 wctx->sp += immv;
3364 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3373 int rc = process_return (wctx, cur);
3377 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3449 (unsigned long) cur->sp < wctx->sbase)
3452 if (wctx->fp == (unsigned long) cur->sp)
3483 wctx->sp = (unsigned long) cur->sp;
3485 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_RT_SIGRETURN);
3497 wctx->sp = (unsigned long) cur->sp;
3499 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_SIGRETURN);
3594 int rc = process_return (wctx, tmpctx);
3598 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3613 if ((unsigned long) npc < wctx->tbgn || (unsigned long) npc >= wctx->tend)
3693 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_END_OF_STACK);
3711 cache_put (wctx, RA_EOSTCK);
3712 wctx->pc = 0;
3713 wctx->sp = 0;
3714 wctx->fp = 0;
3716 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_END_OF_STACK);
3778 int rc = process_return (wctx, tmpctx);
3782 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3793 int rc = process_return (wctx, tmpctx);
3797 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3814 int rc = process_return (wctx, cur);
3823 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3839 int rc = process_return_real (wctx, cur, 0);
3843 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3918 int rc = process_return_real (wctx, cur, 0);
3922 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3941 int rc = process_return_real (wctx, cur, 0);
3945 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3972 Tprintf (DBG_LT3, "find_i386_ret_addr:%d checkFP: wctx=0x%lx fp=0x%lx ln=0x%lx pc=0x%lx sbase=0x%lx sp=0x%lx tbgn=0x%lx tend=0x%lx\n",
3973 __LINE__, (unsigned long) wctx, (unsigned long) wctx->fp,
3974 (unsigned long) wctx->ln, (unsigned long) wctx->pc, (unsigned long) wctx->sbase,
3975 (unsigned long) wctx->sp, (unsigned long) wctx->tbgn, (unsigned long) wctx->tend);
3981 DprintfT (SP_DUMP_UNWIND, "stack_unwind jmp reg mode on: pc = 0x%lx cnt = %d, nctx = %d\n", wctx->pc, cnt, nctx);
3987 __collector_memcpy (&wctx_pc_save, wctx, sizeof (struct WalkContext));
3993 if ((unsigned long) cur->sp >= wctx->sbase ||
3994 (unsigned long) cur->sp < wctx->sp)
3996 DprintfT (SP_DUMP_UNWIND, "unwind.c:%d do_walk=%d cur->sp=0x%p out of range. wctx->sbase=0x%lx wctx->sp=0x%lx wctx->pc=0x%lx\n",
3997 __LINE__, (int) do_walk, cur->sp, (unsigned long) wctx->sbase,
3998 (unsigned long) wctx->sp, (unsigned long) wctx->pc);
4008 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
4013 if (fp <= (unsigned long) cur->sp || fp >= wctx->sbase)
4015 DprintfT (SP_DUMP_UNWIND, "unwind.c:%d fp=0x%016llx out of range. cur->sp=%p wctx->sbase=0x%lx wctx->pc=0x%lx\n",
4017 (unsigned long) wctx->sbase, (unsigned long) wctx->pc);
4027 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
4034 cache_put (wctx, RA_EOSTCK);
4035 DprintfT (SP_DUMP_UNWIND, "unwind.c:%d returns RA_END_OF_STACK wctx->pc = 0x%lx\n", __LINE__, wctx->pc);
4037 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_END_OF_STACK);
4041 unsigned long tbgn = wctx->tbgn;
4042 unsigned long tend = wctx->tend;
4048 DprintfT (SP_DUMP_UNWIND, "unwind.c: __collector_check_segment fail. wctx->pc = 0x%lx\n", wctx->pc);
4058 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
4066 DprintfT (SP_DUMP_UNWIND, "unwind.c: adjust_ret_addr fail. wctx->pc = 0x%lx\n", wctx->pc);
4076 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
4079 wctx->pc = npc;
4080 wctx->sp = (unsigned long) cur->sp;
4081 wctx->fp = fp;
4082 wctx->tbgn = tbgn;
4083 wctx->tend = tend;
4087 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_SUCCESS);
4418 struct WalkContext wctx;
4419 wctx.pc = GET_PC (context);
4420 wctx.sp = GET_SP (context);
4421 wctx.fp = GET_FP (context);
4422 wctx.ln = (unsigned long) context->uc_link;
4424 if (sbase && *sbase > wctx.sp)
4425 wctx.sbase = *sbase;
4428 wctx.sbase = wctx.sp + 0x100000;
4429 if (wctx.sbase < wctx.sp) /* overflow */
4430 wctx.sbase = (unsigned long) - 1;
4433 __collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0);
4437 if (ind >= lsize || wctx.pc == 0)
4439 if (bptr != NULL && extra_frame && wctx.sp <= (unsigned long) bptr && ind < 2)
4441 lbuf[0] = wctx.pc;
4449 if (bptr == NULL || wctx.sp > (unsigned long) bptr)
4451 lbuf[ind++] = wctx.pc;
4458 if (eptr != NULL && wctx.sp >= (unsigned long) eptr)
4463 int ret = find_i386_ret_addr (&wctx, do_walk);
4481 } *sframe = (struct SigFrame*) wctx.sp;
4483 wctx.pc = GET_PC (ncontext);
4484 if (!__collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0))
4496 wctx.sp = nsp;
4497 wctx.fp = GET_FP (ncontext);
4502 struct sigcontext *sctx = (struct sigcontext*) wctx.sp;
4503 wctx.pc = sctx->eip;
4504 if (!__collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0))
4509 wctx.sp = sctx->esp;
4510 wctx.fp = sctx->ebp;
4516 ucontext_t *ncontext = (ucontext_t*) wctx.sp;
4517 wctx.pc = GET_PC (ncontext);
4518 if (!__collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0))
4525 if (nsp <= wctx.sp || nsp > wctx.sp + sizeof (ucontext_t) + 1024)
4530 wctx.sp = nsp;
4531 wctx.fp = GET_FP (ncontext);
4535 if (bptr != NULL && extra_frame && wctx.sp <= (unsigned long) bptr && ind < 2)
4537 lbuf[0] = wctx.pc;
4545 if (bptr == NULL || wctx.sp > (unsigned long) bptr)
4547 lbuf[ind++] = wctx.pc;