Home | History | Annotate | Download | only in libcollector

Lines Matching refs:wctx

1586  * @param wctx
1590 cache_get (struct WalkContext *wctx)
1595 uint64_t idx = wctx->pc % ValTableSize;
1597 if (addr == wctx->pc)
1600 unsigned long fp = wctx->fp;
1602 if (fp < wctx->sp || fp >= wctx->sbase - sizeof (*sp))
1607 unsigned long tbgn = wctx->tbgn;
1608 unsigned long tend = wctx->tend;
1616 wctx->pc = npc;
1617 wctx->sp = (unsigned long) sp;
1618 wctx->fp = fp;
1619 wctx->tbgn = tbgn;
1620 wctx->tend = tend;
1626 uint64_t idx = wctx->pc % ValTableSize;
1628 if (addr != wctx->pc)
1635 * @param wctx
1638 cache_put (struct WalkContext *wctx, const uint32_t val)
1645 uint64_t idx = wctx->pc % ValTableSize;
1646 AddrTable_RA_FROMFP[ idx ] = wctx->pc;
1648 if (AddrTable_RA_EOSTCK[ idx ] == wctx->pc)
1659 uint64_t idx = wctx->pc % ValTableSize;
1660 AddrTable_RA_EOSTCK[ idx ] = wctx->pc;
1663 if (AddrTable_RA_FROMFP[ idx ] == wctx->pc)
1673 process_return_real (struct WalkContext *wctx, struct AdvWalkContext *cur, int cache_on)
1675 if ((unsigned long) cur->sp >= wctx->sbase ||
1676 (unsigned long) cur->sp < wctx->sp)
1679 cur->sp, wctx->sp, wctx->sbase);
1689 else if (cur->sp >= cur->sp_safe && (unsigned long) cur->sp < wctx->sbase)
1699 cache_put (wctx, RA_EOSTCK);
1700 wctx->pc = ra;
1701 wctx->sp = (unsigned long) cur->sp;
1702 wctx->fp = (unsigned long) cur->fp;
1707 unsigned long tbgn = wctx->tbgn;
1708 unsigned long tend = wctx->tend;
1714 ra, wctx->tbgn, wctx->tend);
1721 if (wctx->fp == (unsigned long) (cur->sp - 2))
1724 cache_put (wctx, RA_FROMFP);
1736 DprintfT (SP_DUMP_UNWIND, "unwind.c: trusted fp, pc = 0x%lX\n", wctx->pc);
1737 wctx->pc = ra;
1746 wctx->pc = npc;
1747 wctx->sp = (unsigned long) cur->sp;
1748 wctx->fp = (unsigned long) cur->fp;
1749 wctx->tbgn = tbgn;
1750 wctx->tend = tend;
1755 process_return (struct WalkContext *wctx, struct AdvWalkContext *cur)
1757 return process_return_real (wctx, cur, 1);
1762 struct WalkContext *wctx, uint32_t val)
1785 __collector_memcpy (&(OmpCtxs[ idx % OmpValTableSize ]), wctx, sizeof (struct WalkContext));
1792 sp = (unsigned long *) (wctx->sp);
1800 sp = (unsigned long *) (wctx->sp);
1812 if (sp < cur_sp_safe || ((unsigned long) sp >= wctx->sbase))
1822 sp = (unsigned long *) (wctx->sp);
1835 __collector_memcpy (&(OmpCtxs [ idx3 % OmpValTableSize ]), wctx, sizeof (struct WalkContext));
1887 find_i386_ret_addr (struct WalkContext *wctx, int do_walk)
1889 if (wctx->sp == 0)
1894 int retc = cache_get (wctx);
1910 targets[ntrg++] = (unsigned char*) wctx->pc;
1917 cur->pc = (unsigned char*) wctx->pc;
1918 cur->sp = (unsigned long*) wctx->sp;
1920 cur->fp = (unsigned long*) wctx->fp;
1986 __collector_memcpy (&wctx_pc_save, wctx, sizeof (struct WalkContext));
1997 uint64_t idx = wctx->pc * ROOT_IDX;
2010 if (wctx->pc == saved_ctx.pc
2011 && wctx->sp == saved_ctx.sp
2012 && wctx->fp == saved_ctx.fp
2013 && wctx->tbgn == saved_ctx.tbgn
2014 && wctx->tend == saved_ctx.tend)
2018 unsigned long fp = wctx->fp;
2022 DprintfT (SP_DUMP_UNWIND, "find_i386_ret_addr:%d -- RA_END_OF_STACK: pc=0x%lx\n", __LINE__, wctx->pc);
2023 __collector_memcpy (wctx, &OmpCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
2028 if (fp < wctx->sp || fp >= wctx->sbase - sizeof (*sp))
2030 TprintfT (DBG_LT1, "omp_cache_get -- wrong fp: pc=0x%lx\n", wctx->pc);
2033 if (sp < cur->sp_safe || (unsigned long) sp >= wctx->sbase)
2041 __collector_memcpy (wctx, &OmpCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
2042 TprintfT (DBG_LT1, "omp_cache_get -- ra match with target sp: pc=0x%lx, ra=0x%lx, val=%d\n", wctx->pc, ra, val);
2056 unsigned long tbgn = wctx->tbgn;
2057 unsigned long tend = wctx->tend;
2062 //if (sp < cur->sp_safe - 16 || (unsigned long)sp >= wctx->sbase - sizeof(*sp)) {
2065 if (sp < cur->sp_safe || (unsigned long) sp >= wctx->sbase)
2073 TprintfT (DBG_LT1, "omp_cache_get -- ra match: pc=0x%lx\n", wctx->pc);
2074 __collector_memcpy (wctx, &OmpCtxs[ idx % OmpValTableSize ], sizeof (struct WalkContext));
2131 int rc = process_return_real (wctx, cur, 0);
2135 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
2170 unsigned long tbgn = wctx->tbgn;
2171 unsigned long tend = wctx->tend;
2182 int rc = process_return_real (wctx, cur, 0);
2186 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
2357 wctx->sp = (unsigned long) cur->sp;
2359 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_RT_SIGRETURN);
2370 wctx->sp = (unsigned long) cur->sp;
2372 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_SIGRETURN);
2465 if ((unsigned long) npc < wctx->tbgn || (unsigned long) npc >= wctx->tend)
2800 if (isInside ((unsigned long) cur->sp, (unsigned long) cur->sp_safe, wctx->sbase))
2807 (unsigned long) cur->sp < wctx->sbase)
2818 (unsigned long) cur->sp < wctx->sbase)
2824 if (cur->sp >= cur->sp_safe && (unsigned long) cur->sp < wctx->sbase)
3021 if (wctx->fp == (unsigned long) cur->sp)
3093 if (wctx->fp == (unsigned long) cur->sp)
3110 else if (ptr >= cur->sp_safe && (unsigned long) ptr < wctx->sbase)
3128 else if (ptr >= cur->sp_safe && (unsigned long) ptr < wctx->sbase)
3145 (unsigned long) cur->sp < wctx->sbase)
3240 DprintfT (SP_DUMP_UNWIND, "stack_unwind%d cur->pc=0x%lx val=0x%lx wctx->sp=0x%lx wctx->sbase=0x%lx\n",
3242 (unsigned long) wctx->sp, (unsigned long) wctx->sbase);
3249 if (!isInside ((unsigned long) val, wctx->sp, wctx->sbase))
3251 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",
3253 (unsigned long) wctx->sp, (unsigned long) wctx->sbase);
3291 int rc = process_return (wctx, tmpctx);
3295 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3365 int rc = process_return (wctx, cur);
3373 wctx->sp += immv;
3375 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3384 int rc = process_return (wctx, cur);
3388 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3460 (unsigned long) cur->sp < wctx->sbase)
3463 if (wctx->fp == (unsigned long) cur->sp)
3494 wctx->sp = (unsigned long) cur->sp;
3496 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_RT_SIGRETURN);
3508 wctx->sp = (unsigned long) cur->sp;
3510 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_SIGRETURN);
3605 int rc = process_return (wctx, tmpctx);
3609 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3624 if ((unsigned long) npc < wctx->tbgn || (unsigned long) npc >= wctx->tend)
3704 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_END_OF_STACK);
3722 cache_put (wctx, RA_EOSTCK);
3723 wctx->pc = 0;
3724 wctx->sp = 0;
3725 wctx->fp = 0;
3727 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_END_OF_STACK);
3789 int rc = process_return (wctx, tmpctx);
3793 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3804 int rc = process_return (wctx, tmpctx);
3808 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3825 int rc = process_return (wctx, cur);
3834 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3850 int rc = process_return_real (wctx, cur, 0);
3854 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3929 int rc = process_return_real (wctx, cur, 0);
3933 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3952 int rc = process_return_real (wctx, cur, 0);
3956 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, rc);
3983 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",
3984 __LINE__, (unsigned long) wctx, (unsigned long) wctx->fp,
3985 (unsigned long) wctx->ln, (unsigned long) wctx->pc, (unsigned long) wctx->sbase,
3986 (unsigned long) wctx->sp, (unsigned long) wctx->tbgn, (unsigned long) wctx->tend);
3992 DprintfT (SP_DUMP_UNWIND, "stack_unwind jmp reg mode on: pc = 0x%lx cnt = %d, nctx = %d\n", wctx->pc, cnt, nctx);
3998 __collector_memcpy (&wctx_pc_save, wctx, sizeof (struct WalkContext));
4004 if ((unsigned long) cur->sp >= wctx->sbase ||
4005 (unsigned long) cur->sp < wctx->sp)
4007 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",
4008 __LINE__, (int) do_walk, cur->sp, (unsigned long) wctx->sbase,
4009 (unsigned long) wctx->sp, (unsigned long) wctx->pc);
4019 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
4024 if (fp <= (unsigned long) cur->sp || fp >= wctx->sbase)
4026 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",
4028 (unsigned long) wctx->sbase, (unsigned long) wctx->pc);
4038 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
4045 cache_put (wctx, RA_EOSTCK);
4046 DprintfT (SP_DUMP_UNWIND, "unwind.c:%d returns RA_END_OF_STACK wctx->pc = 0x%lx\n", __LINE__, wctx->pc);
4048 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_END_OF_STACK);
4052 unsigned long tbgn = wctx->tbgn;
4053 unsigned long tend = wctx->tend;
4059 DprintfT (SP_DUMP_UNWIND, "unwind.c: __collector_check_segment fail. wctx->pc = 0x%lx\n", wctx->pc);
4069 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
4077 DprintfT (SP_DUMP_UNWIND, "unwind.c: adjust_ret_addr fail. wctx->pc = 0x%lx\n", wctx->pc);
4087 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_FAILURE);
4090 wctx->pc = npc;
4091 wctx->sp = (unsigned long) cur->sp;
4092 wctx->fp = fp;
4093 wctx->tbgn = tbgn;
4094 wctx->tend = tend;
4098 omp_cache_put (cur->sp_safe, &wctx_pc_save, wctx, RA_SUCCESS);
4429 struct WalkContext wctx;
4430 wctx.pc = GET_PC (context);
4431 wctx.sp = GET_SP (context);
4432 wctx
4433 wctx.ln = (unsigned long) context->uc_link;
4435 if (sbase && *sbase > wctx.sp)
4436 wctx.sbase = *sbase;
4439 wctx.sbase = wctx.sp + 0x100000;
4440 if (wctx.sbase < wctx.sp) /* overflow */
4441 wctx.sbase = (unsigned long) - 1;
4444 __collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0);
4448 if (ind >= lsize || wctx.pc == 0)
4450 if (bptr != NULL && extra_frame && wctx.sp <= (unsigned long) bptr && ind < 2)
4452 lbuf[0] = wctx.pc;
4460 if (bptr == NULL || wctx.sp > (unsigned long) bptr)
4462 lbuf[ind++] = wctx.pc;
4469 if (eptr != NULL && wctx.sp >= (unsigned long) eptr)
4474 int ret = find_i386_ret_addr (&wctx, do_walk);
4492 } *sframe = (struct SigFrame*) wctx.sp;
4494 wctx.pc = GET_PC (ncontext);
4495 if (!__collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0))
4507 wctx.sp = nsp;
4508 wctx.fp = GET_FP (ncontext);
4513 struct sigcontext *sctx = (struct sigcontext*) wctx.sp;
4514 wctx.pc = sctx->eip;
4515 if (!__collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0))
4520 wctx.sp = sctx->esp;
4521 wctx.fp = sctx->ebp;
4527 ucontext_t *ncontext = (ucontext_t*) wctx.sp;
4528 wctx.pc = GET_PC (ncontext);
4529 if (!__collector_check_segment (wctx.pc, &wctx.tbgn, &wctx.tend, 0))
4536 if (nsp <= wctx.sp || nsp > wctx.sp + sizeof (ucontext_t) + 1024)
4541 wctx.sp = nsp;
4542 wctx.fp = GET_FP (ncontext);
4546 if (bptr != NULL && extra_frame && wctx.sp <= (unsigned long) bptr && ind < 2)
4548 lbuf[0] = wctx.pc;
4556 if (bptr == NULL || wctx.sp > (unsigned long) bptr)
4558 lbuf[ind++] = wctx.pc;