gEDA-dev: Stack corruption PCB bug in hid_parse_actions????
Peter Clifton
pcjc2 at cam.ac.uk
Wed Sep 6 12:48:12 EDT 2006
Hi,
I'm trying to script PCB, and notice that when I use the:
"ExecuteFile(aaaa.cmd)" action, there is damaged log-output, and nasty
memory corruption inside PCB.
Looks like a nasty stack corruption, as whilst argv[0] moves its
location by 2 bytes (and IIRC, its always this ammount), argv[0] still
evaluates to the same string.. as if a portion of the stack has been
shifted. (Cant have shifted all of it, as the function return appears to
be ok) (Evaluation of argv[0] as string not shown in output below)
With the line "hid_parse_actions (sp, 0);" in ActionExecuteFile()
commented out, the log corruption doesn't appear to occur.
Could this be due to the static variables like "static char **list"
being used in hid_parse_actions? Is hid_parse_actions recursion save (or
should it be) with these static variables?
Regards
Peter Clifton
OUTPUT BELOW:
Log output:
"
aaaa.cmd : line 4 : "ChangePinName(R3, 1, 1)"
e : line 5 : "ChangePinName(R3, 2, 2)"
e : line 8 : "ChangePinName(CONN2, 1, 1)"
e : line 9 : "ChangePinName(CONN2, 2, 2)"
e : line 12 : "ChangePinName(R2, 1, 1)"
e : line 13 : "ChangePinName(R2, 2, 2)"
e : line 16 : "ChangePinName(CONN1, 1, 1)"
e : line 17 : "ChangePinName(CONN1, 2, 2)"
e : line 20 : "ChangePinName(R1, 1, 1)"
e : line 21 : "ChangePinName(R1, 2, 2)"
e : line 24 : "ChangePinName(C1, 2, 2)"
e : line 25 : "ChangePinName(C1, 1, 1)"
"
And program output - from an instrumented version of PCB:
(gdb) run
Starting program: /usr/local/bin/pcb-bin test.pcb
hid_parse_actions: rstr 0x824d950, is "ExecuteFile(aaaa.cmd)", function
(nil)
hid_parse_actions: sp 0x8317f4b, is "(aaaa.cmd)", aname 0x8317f40, is
"ExecuteFile(aaaa.cmd)"
hid_parse_actions: sp 0x8317f4c, is "aaaa.cmd)", aname 0x8317f40, is
"ExecuteFile"
hid_parse_actions: sp 0x8317f55, is "", aname 0x8317f40, is
"ExecuteFile"
fname is aaaa.cmd
2 argv[0]=0x8317f4c, fname=0x8317f4c
3 argv[0]=0x8317f4c, fname=0x8317f4c
4 argv[0]=0x8317f4c, fname=0x8317f4c
4 argv[0]=0x8317f4c, fname=0x8317f4c
4 argv[0]=0x8317f4c, fname=0x8317f4c
4 argv[0]=0x8317f4c, fname=0x8317f4c
fname 0x8317f4c, is "aaaa.cmd"
n is "4"
sp 0xbfe3d680, is "ChangePinName(R3, 1, 1)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(R3, 1, 1)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(R3, 1, 1)", aname 0x8317f40, is
"ChangePinName(R3, 1, 1)"
hid_parse_actions: sp 0x8317f4e, is "R3, 1, 1)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f57, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "5"
sp 0xbfe3d680, is "ChangePinName(R3, 2, 2)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(R3, 2, 2)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(R3, 2, 2)", aname 0x8317f40, is
"ChangePinName(R3, 2, 2)"
hid_parse_actions: sp 0x8317f4e, is "R3, 2, 2)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f57, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "8"
sp 0xbfe3d680, is "ChangePinName(CONN2, 1, 1)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(CONN2, 1, 1)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(CONN2, 1, 1)", aname 0x8317f40, is
"ChangePinName(CONN2, 1, 1)"
hid_parse_actions: sp 0x8317f4e, is "CONN2, 1, 1)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f5a, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "9"
sp 0xbfe3d680, is "ChangePinName(CONN2, 2, 2)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(CONN2, 2, 2)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(CONN2, 2, 2)", aname 0x8317f40, is
"ChangePinName(CONN2, 2, 2)"
hid_parse_actions: sp 0x8317f4e, is "CONN2, 2, 2)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f5a, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "12"
sp 0xbfe3d680, is "ChangePinName(R2, 1, 1)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(R2, 1, 1)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(R2, 1, 1)", aname 0x8317f40, is
"ChangePinName(R2, 1, 1)"
hid_parse_actions: sp 0x8317f4e, is "R2, 1, 1)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f57, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "13"
sp 0xbfe3d680, is "ChangePinName(R2, 2, 2)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(R2, 2, 2)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(R2, 2, 2)", aname 0x8317f40, is
"ChangePinName(R2, 2, 2)"
hid_parse_actions: sp 0x8317f4e, is "R2, 2, 2)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f57, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "16"
sp 0xbfe3d680, is "ChangePinName(CONN1, 1, 1)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(CONN1, 1, 1)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(CONN1, 1, 1)", aname 0x8317f40, is
"ChangePinName(CONN1, 1, 1)"
hid_parse_actions: sp 0x8317f4e, is "CONN1, 1, 1)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f5a, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "17"
sp 0xbfe3d680, is "ChangePinName(CONN1, 2, 2)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(CONN1, 2, 2)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(CONN1, 2, 2)", aname 0x8317f40, is
"ChangePinName(CONN1, 2, 2)"
hid_parse_actions: sp 0x8317f4e, is "CONN1, 2, 2)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f5a, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "20"
sp 0xbfe3d680, is "ChangePinName(R1, 1, 1)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(R1, 1, 1)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(R1, 1, 1)", aname 0x8317f40, is
"ChangePinName(R1, 1, 1)"
hid_parse_actions: sp 0x8317f4e, is "R1, 1, 1)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f57, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "21"
sp 0xbfe3d680, is "ChangePinName(R1, 2, 2)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(R1, 2, 2)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(R1, 2, 2)", aname 0x8317f40, is
"ChangePinName(R1, 2, 2)"
hid_parse_actions: sp 0x8317f4e, is "R1, 2, 2)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f57, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "24"
sp 0xbfe3d680, is "ChangePinName(C1, 2, 2)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(C1, 2, 2)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(C1, 2, 2)", aname 0x8317f40, is
"ChangePinName(C1, 2, 2)"
hid_parse_actions: sp 0x8317f4e, is "C1, 2, 2)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f57, is "", aname 0x8317f40, is
"ChangePinName"
4 argv[0]=0x8317f4e, fname=0x8317f4c
fname 0x8317f4c, is "e"
n is "25"
sp 0xbfe3d680, is "ChangePinName(C1, 1, 1)"
hid_parse_actions: rstr 0xbfe3d680, is "ChangePinName(C1, 1, 1)",
function (nil)
hid_parse_actions: sp 0x8317f4d, is "(C1, 1, 1)", aname 0x8317f40, is
"ChangePinName(C1, 1, 1)"
hid_parse_actions: sp 0x8317f4e, is "C1, 1, 1)", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f57, is "", aname 0x8317f40, is
"ChangePinName"
hid_parse_actions: sp 0x8317f56, is "", aname 0x8317f55, is "1"
unknown action `1'
More information about the geda-dev
mailing list