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

Reply via email to