more fixes to profiling code.
This commit is contained in:
parent
083b7c9b92
commit
95fc66be25
16
C/cdmgr.c
16
C/cdmgr.c
@ -3779,10 +3779,10 @@ found_idb_clause(yamop *pc, CODEADDR *startp, CODEADDR *endp)
|
|||||||
static PredEntry *
|
static PredEntry *
|
||||||
found_expand_index(yamop *pc, CODEADDR *startp, CODEADDR *endp, yamop *codeptr)
|
found_expand_index(yamop *pc, CODEADDR *startp, CODEADDR *endp, yamop *codeptr)
|
||||||
{
|
{
|
||||||
PredEntry *pp = ((PredEntry *)(Unsigned(pc)-(CELL)(&(((PredEntry *)NULL)->cs.p_code.ExpandCode))));
|
PredEntry *pp = codeptr->u.sssllp.p;
|
||||||
if (pc == codeptr) {
|
if (pc == codeptr) {
|
||||||
*startp = (CODEADDR)&(pp->cs.p_code.ExpandCode);
|
*startp = (CODEADDR)codeptr;
|
||||||
*endp = (CODEADDR)&(pp->cs.p_code.ExpandCode);
|
*endp = (CODEADDR)NEXTOP(codeptr,sssllp);
|
||||||
}
|
}
|
||||||
return pp;
|
return pp;
|
||||||
}
|
}
|
||||||
@ -3806,6 +3806,16 @@ found_owner_op(yamop *pc, CODEADDR *startp, CODEADDR *endp)
|
|||||||
return pp;
|
return pp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* we hit a expand_index, no point in going on */
|
||||||
|
static PredEntry *
|
||||||
|
found_expand(yamop *pc, CODEADDR *startp, CODEADDR *endp)
|
||||||
|
{
|
||||||
|
PredEntry *pp = ((PredEntry *)(Unsigned(pc)-(CELL)(&(((PredEntry *)NULL)->cs.p_code.ExpandCode))));
|
||||||
|
*startp = (CODEADDR)&(pp->cs.p_code.ExpandCode);
|
||||||
|
*endp = (CODEADDR)NEXTOP((yamop *)&(pp->cs.p_code.ExpandCode),e);
|
||||||
|
return pp;
|
||||||
|
}
|
||||||
|
|
||||||
static PredEntry *
|
static PredEntry *
|
||||||
found_ystop(yamop *pc, int clause_code, CODEADDR *startp, CODEADDR *endp, PredEntry *pp)
|
found_ystop(yamop *pc, int clause_code, CODEADDR *startp, CODEADDR *endp, PredEntry *pp)
|
||||||
{
|
{
|
||||||
|
11
C/gprof.c
11
C/gprof.c
@ -939,7 +939,7 @@ prof_alrm(int signo, siginfo_t *si, void *scv)
|
|||||||
void * oldpc= NULL;
|
void * oldpc= NULL;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#ifdef __APPLE__
|
#if defined(__APPLE__) && defined(i386)
|
||||||
#ifdef __darwin__
|
#ifdef __darwin__
|
||||||
ucontext_t *sc = (ucontext_t *)scv;
|
ucontext_t *sc = (ucontext_t *)scv;
|
||||||
void * oldpc=(void *) sc->uc_mcontext->ss.srr0; /* 14= POWER PC */
|
void * oldpc=(void *) sc->uc_mcontext->ss.srr0; /* 14= POWER PC */
|
||||||
@ -947,7 +947,7 @@ prof_alrm(int signo, siginfo_t *si, void *scv)
|
|||||||
void * oldpc=(void *) CONTEXT_PC;
|
void * oldpc=(void *) CONTEXT_PC;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
void *NULL;
|
void *oldpc = NULL;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
rb_red_blk_node *node = NULL;
|
rb_red_blk_node *node = NULL;
|
||||||
@ -1005,6 +1005,9 @@ prof_alrm(int signo, siginfo_t *si, void *scv)
|
|||||||
if (oop == _call_cpred || oop == _call_usercpred) {
|
if (oop == _call_cpred || oop == _call_usercpred) {
|
||||||
/* doing C-code */
|
/* doing C-code */
|
||||||
current_p = PREVOP(P,Osbpp)->u.Osbpp.p->CodeOfPred;
|
current_p = PREVOP(P,Osbpp)->u.Osbpp.p->CodeOfPred;
|
||||||
|
} else if ((oop = Yap_op_from_opcode(PREVOP(P,pp)->opc)) == _execute_cpred) {
|
||||||
|
/* doing C-code */
|
||||||
|
current_p = PREVOP(P,pp)->u.pp.p->CodeOfPred;
|
||||||
} else {
|
} else {
|
||||||
current_p = P;
|
current_p = P;
|
||||||
}
|
}
|
||||||
@ -1037,7 +1040,7 @@ prof_alrm(int signo, siginfo_t *si, void *scv)
|
|||||||
PredEntry *pp = NULL;
|
PredEntry *pp = NULL;
|
||||||
CODEADDR start, end;
|
CODEADDR start, end;
|
||||||
|
|
||||||
pp = Yap_PredEntryForCode(current_p, FIND_PRED_FROM_ANYWHERE, &start, &end);
|
pp = Yap_PredEntryForCode(current_p, FIND_PRED_FROM_ANYWHERE, &start, &end);
|
||||||
if (Yap_OffLineProfiler) fprintf(FProf,"%p\n", pp);
|
if (Yap_OffLineProfiler) fprintf(FProf,"%p\n", pp);
|
||||||
if (!pp) {
|
if (!pp) {
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@ -1051,7 +1054,7 @@ prof_alrm(int signo, siginfo_t *si, void *scv)
|
|||||||
if (start < (CODEADDR)Yap_HeapBase || start > (CODEADDR)HeapTop ||
|
if (start < (CODEADDR)Yap_HeapBase || start > (CODEADDR)HeapTop ||
|
||||||
end < (CODEADDR)Yap_HeapBase || end > (CODEADDR)HeapTop) {
|
end < (CODEADDR)Yap_HeapBase || end > (CODEADDR)HeapTop) {
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
fprintf(stderr,"Oops2: %p, %p\n", start, end);
|
fprintf(stderr,"Oops2: %p->%d %p, %p\n", current_p, current_p->opc, start, end);
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
case _retry_logical:
|
case _retry_logical:
|
||||||
case _try_logical:
|
case _try_logical:
|
||||||
pc = pc->u.OtaLl.n;
|
pc = pc->u.OtaLl.n;
|
||||||
|
break;
|
||||||
/* instructions type OtapFs */
|
/* instructions type OtapFs */
|
||||||
#ifdef CUT_C
|
#ifdef CUT_C
|
||||||
case _cut_c:
|
case _cut_c:
|
||||||
@ -80,7 +81,7 @@
|
|||||||
case _try_and_mark:
|
case _try_and_mark:
|
||||||
case _try_clause:
|
case _try_clause:
|
||||||
case _try_me:
|
case _try_me:
|
||||||
clause_code = TRUE;
|
clause_code = FALSE;
|
||||||
pp = pc->u.Otapl.p;
|
pp = pc->u.Otapl.p;
|
||||||
pc = NEXTOP(pc,Otapl);
|
pc = NEXTOP(pc,Otapl);
|
||||||
break;
|
break;
|
||||||
@ -122,6 +123,7 @@
|
|||||||
case _copy_idb_term:
|
case _copy_idb_term:
|
||||||
return found_idb_clause(pc, startp, endp);
|
return found_idb_clause(pc, startp, endp);
|
||||||
case _expand_index:
|
case _expand_index:
|
||||||
|
return found_expand(pc, startp, endp);
|
||||||
case _index_pred:
|
case _index_pred:
|
||||||
return found_owner_op(pc, startp, endp);
|
return found_owner_op(pc, startp, endp);
|
||||||
case _lock_pred:
|
case _lock_pred:
|
||||||
@ -651,7 +653,7 @@
|
|||||||
case _getwork:
|
case _getwork:
|
||||||
case _getwork_seq:
|
case _getwork_seq:
|
||||||
case _sync:
|
case _sync:
|
||||||
clause_code = TRUE;
|
clause_code = FALSE;
|
||||||
pp = pc->u.Otapl.p;
|
pp = pc->u.Otapl.p;
|
||||||
pc = NEXTOP(pc,Otapl);
|
pc = NEXTOP(pc,Otapl);
|
||||||
break;
|
break;
|
||||||
@ -673,7 +675,7 @@
|
|||||||
case _table_try_answer:
|
case _table_try_answer:
|
||||||
case _table_try_me:
|
case _table_try_me:
|
||||||
case _table_try_single:
|
case _table_try_single:
|
||||||
clause_code = TRUE;
|
clause_code = FALSE;
|
||||||
pp = pc->u.Otapl.p;
|
pp = pc->u.Otapl.p;
|
||||||
pc = NEXTOP(pc,Otapl);
|
pc = NEXTOP(pc,Otapl);
|
||||||
break;
|
break;
|
||||||
|
@ -300,7 +300,7 @@ output_walk(C,"L",_) :- !,
|
|||||||
format(C,' return walk_got_lu_clause(pc->u.L.ClBase, startp, endp);~n',[]).
|
format(C,' return walk_got_lu_clause(pc->u.L.ClBase, startp, endp);~n',[]).
|
||||||
% we cannot jump to clause code.
|
% we cannot jump to clause code.
|
||||||
output_walk(C,"OtaLl",_) :- !,
|
output_walk(C,"OtaLl",_) :- !,
|
||||||
format(C,' pc = pc->u.OtaLl.n;~n',[]).
|
format(C,' pc = pc->u.OtaLl.n;~n break;~n',[]).
|
||||||
% ops which point at the clause's predicate.
|
% ops which point at the clause's predicate.
|
||||||
output_walk(C,"Osblp",_) :- !,
|
output_walk(C,"Osblp",_) :- !,
|
||||||
label_in_clause(C,"Osblp","p0").
|
label_in_clause(C,"Osblp","p0").
|
||||||
@ -314,7 +314,10 @@ output_walk(C,"pp",_) :- !,
|
|||||||
output_walk(C,"OtapFs",_) :- !,
|
output_walk(C,"OtapFs",_) :- !,
|
||||||
label_in_clause(C,"OtapFs","p").
|
label_in_clause(C,"OtapFs","p").
|
||||||
output_walk(C,"Otapl",_) :- !,
|
output_walk(C,"Otapl",_) :- !,
|
||||||
label_in_clause(C,"Otapl","p").
|
label_in_index(C,"Otapl","p").
|
||||||
|
output_walk(C,"p",["retry_profiled"|_]) :- !,
|
||||||
|
add_pi(C,"p","p"),
|
||||||
|
format(C,' break;~n',[]).
|
||||||
output_walk(C,"p",[Op|_]) :-
|
output_walk(C,"p",[Op|_]) :-
|
||||||
special_walk_op(Op), !,
|
special_walk_op(Op), !,
|
||||||
add_pp(C,"p","p"),
|
add_pp(C,"p","p"),
|
||||||
@ -350,6 +353,9 @@ output_ewalks(C,["undef_p"|Ops]) :-
|
|||||||
output_ewalks(C,["spy_pred"|Ops]) :-
|
output_ewalks(C,["spy_pred"|Ops]) :-
|
||||||
format(C,' return found_owner_op(pc, startp, endp);~n',[]),
|
format(C,' return found_owner_op(pc, startp, endp);~n',[]),
|
||||||
output_ewalks(C,Ops).
|
output_ewalks(C,Ops).
|
||||||
|
output_ewalks(C,["expand_index"|Ops]) :-
|
||||||
|
format(C,' return found_expand(pc, startp, endp);~n',[]),
|
||||||
|
output_ewalks(C,Ops).
|
||||||
output_ewalks(C,["index_pred"|Ops]) :-
|
output_ewalks(C,["index_pred"|Ops]) :-
|
||||||
format(C,' return found_owner_op(pc, startp, endp);~n',[]),
|
format(C,' return found_owner_op(pc, startp, endp);~n',[]),
|
||||||
output_ewalks(C,Ops).
|
output_ewalks(C,Ops).
|
||||||
@ -375,6 +381,17 @@ label_in_clause(C,Type,Field) :-
|
|||||||
format(C,' pc = NEXTOP(pc,~s);
|
format(C,' pc = NEXTOP(pc,~s);
|
||||||
break;~n',[Type]).
|
break;~n',[Type]).
|
||||||
|
|
||||||
|
label_in_index(C,Type,Field) :-
|
||||||
|
format(C,' clause_code = FALSE;~n',[]),
|
||||||
|
format(C,' pp = pc->u.~s.~s;~n',[Type,Field]),
|
||||||
|
format(C,' pc = NEXTOP(pc,~s);
|
||||||
|
break;~n',[Type]).
|
||||||
|
|
||||||
|
add_pi(C,Type,Field) :-
|
||||||
|
format(C,' pp = pc->u.~s.~s;~n',[Type,Field]),
|
||||||
|
format(C,' clause_code = FALSE;~n',[]),
|
||||||
|
format(C,' pc = NEXTOP(pc,~s);~n',[Type]).
|
||||||
|
|
||||||
add_pp(C,Type,Field) :-
|
add_pp(C,Type,Field) :-
|
||||||
format(C,' pp = pc->u.~s.~s;~n',[Type,Field]),
|
format(C,' pp = pc->u.~s.~s;~n',[Type,Field]),
|
||||||
format(C,' if (pp->PredFlags & MegaClausePredFlag)~n',[]),
|
format(C,' if (pp->PredFlags & MegaClausePredFlag)~n',[]),
|
||||||
|
Reference in New Issue
Block a user