From: Brian Date: Mon, 18 Dec 2006 23:22:27 +0000 (-0700) Subject: Added instruction counter to catch infinite loops (temporary). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d22079217c5a1954a07afb1193d06eecb2decbb6;p=mesa.git Added instruction counter to catch infinite loops (temporary). --- diff --git a/src/mesa/swrast/s_fragprog.c b/src/mesa/swrast/s_fragprog.c index 180b86e7bb6..c59e24debed 100644 --- a/src/mesa/swrast/s_fragprog.c +++ b/src/mesa/swrast/s_fragprog.c @@ -656,7 +656,8 @@ execute_program( GLcontext *ctx, struct fp_machine *machine, const SWspan *span, GLuint column ) { - GLuint pc; + const GLuint MAX_EXEC = 5000; + GLuint pc, total = 0; if (DEBUG_FRAG) { printf("execute fragment program --------------------\n"); @@ -717,6 +718,9 @@ execute_program( GLcontext *ctx, test_cc(machine->CondCodes[GET_SWZ(swizzle, 3)], condMask)) { /* take branch */ pc = inst->BranchTarget; + /* + printf("Take branch to %u\n", pc); + */ } } break; @@ -1518,6 +1522,12 @@ execute_program( GLcontext *ctx, _mesa_problem(ctx, "Bad opcode %d in _mesa_exec_fragment_program", inst->Opcode); return GL_TRUE; /* return value doesn't matter */ + + } + total++; + if (total > MAX_EXEC) { + _mesa_problem(ctx, "Infinite loop detected in fragment program"); + abort(); } } return GL_TRUE;