On 13/12/2010, at 8:12 PM, Domen Puncer wrote: > On Thu, Nov 25, 2010 at 15:45, Domen Puncer <domen.pun...@visionect.si> wrote: >> I can reliably reproduce this one with: >> jtag_khz 1000 >> verify_image my_image.elf >> # some prints about too high clock >> reset init >> # openocd aborts > > Additional info. > > valgrind: > ==32465== Invalid free() / delete / delete[] > ==32465== at 0x4C270BD: free (vg_replace_malloc.c:366) > ==32465== by 0x4B4CD9: Jim_EvalObj (jim.c:527) > ==32465== by 0x4B6DB2: Jim_Eval_Named (jim.c:9644) > ==32465== by 0x424AA4: handle_reset_command (target.c:505) > ==32465== by 0x42F448: script_command_run (command.c:627) > ==32465== by 0x4B4E30: Jim_EvalObj (jim.c:9398) > ==32465== by 0x4B60E8: Jim_EvalCoreCommand (jim.c:11557) > ==32465== by 0x4B4E30: Jim_EvalObj (jim.c:9398) > ==32465== by 0x4B83CC: Jim_CatchCoreCommand (jim.c:12372) > ==32465== by 0x4B4E30: Jim_EvalObj (jim.c:9398) > ==32465== by 0x4B6F8B: Jim_EvalExpression (jim.c:8227) > ==32465== by 0x4B7482: Jim_GetBoolFromExpr (jim.c:8269) > ==32465== Address 0x7feffeb00 is on thread 1's stack > ==32465== > > And it's really bugging me, because I can't figure out where exactly. > > It disappears if I configure jimtcl with ./configure CFLAGS=-g, also > disappeared when I inserted some printfs in Jim_EvalObj. > > I do have some questions about some code: > 1. > In jim.c Jim_EvalObj there's a loop: > > /* Now copy in the expanded version */ > for (k = 0; k < len; k++) { > argv[j++] = wordObjPtr->internalRep.listValue.ele[k]; > Jim_IncrRefCount(wordObjPtr->internalRep.listValue.ele[k]); > } > > but code only allocates space for extra len-1 objects.
There is already one "slot" allocated for the arg. If the arg expands to 'len' elements, we only need to allocate 'len-1' more. Can we see the code being evaluated here? > ==32465== by 0x4B6DB2: Jim_Eval_Named (jim.c:9644) Cheers, Steve > > > 2. > src/target/target.c: > In handle_reg_command, there is: > /* display a register */ > if ((CMD_ARGC == 1) || ((CMD_ARGC == 2) && !((CMD_ARGV[1][0] >= '0') > && (CMD_ARGV[1][0] <= '9')))) > > it seems to be that should be written as: > if ((CMD_ARGC == 1) || ((CMD_ARGC == 2) && !((CMD_ARGV[0][0] >= '0') > && (CMD_ARGV[0][0] <= '9')))) > _______________________________________________ > Openocd-development mailing list > Openocd-development@lists.berlios.de > https://lists.berlios.de/mailman/listinfo/openocd-development > -- µWeb: Embedded Web Framework - http://uweb.workware.net.au/ WorkWare Systems Pty Ltd W: www.workware.net.au P: 0434 921 300 E: ste...@workware.net.au F: 07 3102 9221 _______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development