From westfeld at inf.tu-dresden.de  Tue May 24 09:20:28 2005
From: westfeld at inf.tu-dresden.de (westfeld@inf.tu-dresden.de)
Date: Tue May 24 09:20:31 2005
Subject: [Rd] Segmentation violation in eval.c (R 2.1.0) (PR#7893)
Message-ID: <20050524072028.239BA8709@slim.kubism.ku.dk>

This is a multi-part message in MIME format.
--------------080506050109020709090406
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

Hi,

I get a segmentation fault in eval.c:
do_set (call=0x8ce166c, op=0x82b43b8, args=0x8ce1650, rho=0x8acf218)
    at eval.c:1309
1309                switch (NAMED(s)) {

The instruction is
0x080becf1 <do_set+177>:        movzbl (%eax),%edx

and %eax contains a non-accessible address
(gdb) x/x $eax
0x4a5bf008:     Cannot access memory at address 0x4a5bf008
in another try it was
(gdb) x/x $eax
0x59a5a008:     Cannot access memory at address 0x59a5a008

This segmentation fault occurs reproducible in a long simulation script.
However, I don't know the place in the .R file. I would like to isolate
the bug but don't know how. I attached the gdb session. I use R 2.1.0 on
a Linux machine (Athlon64). Maybe a package that I wrote and use for the
simulation clobbers some memory (although I already added some sanity
checks). But please let me know when you hear about this bug another
time (or have an idea how to debug this or have a solution).

Thank you,

Andreas

-- 
Andreas Westfeld, 0432 01CC F511 9E2B 0B57 5993 0B22 98F8 4AD8 EEEA
<westfeld@inf.tu-dresden.de> http://www.inf.tu-dresden.de/~aw4
TU Dresden Fakult?t Informatik, Institut f?r Systemarchitektur
Datenschutz und Datensicherheit, Tel. +49-351-463-37918


--------------080506050109020709090406
Content-Type: text/plain;
 name="debug.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="debug.txt"

> source("ber3.R")

Program received signal SIGSEGV, Segmentation fault.
do_set (call=0x86c8770, op=0x82b43b8, args=0x86c878c, rho=0x8626404)
    at eval.c:1309
1309                switch (NAMED(s)) {

# PRIMVAL(op): is 1 (code = 1)
(gdb) p R_FunTab[op->u.primsxp.offset]
$14 = {name = 0x81d99e8 "<-", cfun = 0x80bec40 <do_set>, code = 1,
  Rf_eval = 100, arity = -1, gram = {kind = PP_ASSIGN, precedence = PREC_LEFT,
    rightassoc = 1}}

# isSymbol(CAR(args)):
(gdb) p Rf_isSymbol(CAR(args))
$16 = TRUE

# NAMED(s):
(gdb) p s->sxpinfo.named
$20 = 0

# (s =) eval(CADR(args), rho):
(gdb) p *Rf_eval(CADR(args), rho)
$27 = {sxpinfo = {type = 13, obj = 0, named = 0, gp = 0, mark = 0, debug = 0,
    trace = 0, fin = 0, gcgen = 0, gccls = 7}, attrib = 0x82a5588,
  gengc_next_node = 0x1ee60648, gengc_prev_node = 0x4b1cb008, u = {primsxp = {
      offset = 985600}, symsxp = {pname = 0xf0a00, value = 0x0,
      internal = 0x0}, listsxp = {carval = 0xf0a00, cdrval = 0x0,
      tagval = 0x0}, envsxp = {frame = 0xf0a00, enclos = 0x0, hashtab = 0x0},
    closxp = {formals = 0xf0a00, body = 0x0, env = 0x0}, promsxp = {
      value = 0xf0a00, expr = 0x0, env = 0x0}}}

# s:
(gdb) p *s
$28 = {sxpinfo = {type = 7, obj = 0, named = 0, gp = 0, mark = 1, debug = 0,
    trace = 0, fin = 0, gcgen = 1, gccls = 0}, attrib = 0x82a5588,
  gengc_next_node = 0x85ba270, gengc_prev_node = 0x85bb5c8, u = {primsxp = {
      offset = 25}, symsxp = {pname = 0x19, value = 0x82a5588,
      internal = 0x82a5588}, listsxp = {carval = 0x19, cdrval = 0x82a5588,
      tagval = 0x82a5588}, envsxp = {frame = 0x19, enclos = 0x82a5588,
      hashtab = 0x82a5588}, closxp = {formals = 0x19, body = 0x82a5588,
      env = 0x82a5588}, promsxp = {value = 0x19, expr = 0x82a5588,
      env = 0x82a5588}}}

0x080becd6 <do_set+150>:        call   0x815a720 <Rf_isSymbol>
---Type <return> to continue, or q <return> to quit---
0x080becdb <do_set+155>:        test   %eax,%eax
0x080becdd <do_set+157>:        je     0x80bed36 <do_set+246>
0x080becdf <do_set+159>:        mov    %edi,0x4(%esp)
0x080bece3 <do_set+163>:        mov    0x14(%ebx),%eax
0x080bece6 <do_set+166>:        mov    0x10(%eax),%eax
0x080bece9 <do_set+169>:        mov    %eax,(%esp)
0x080becec <do_set+172>:        call   0x80bc530 <Rf_eval>
# here the SIGSEGV occurs:
0x080becf1 <do_set+177>:        movzbl (%eax),%edx

# %eax:
(gdb) x/x $eax
0x4a5bf008:     Cannot access memory at address 0x4a5bf008


SECOND TRY:
Program received signal SIGSEGV, Segmentation fault.
do_set (call=0x8ce166c, op=0x82b43b8, args=0x8ce1650, rho=0x8acf218)
    at eval.c:1309
1309                switch (NAMED(s)) {
(gdb) x/x $eax
0x59a5a008:     Cannot access memory at address 0x59a5a008
(gdb) p *s
$2 = {sxpinfo = {type = 7, obj = 0, named = 0, gp = 0, mark = 1, debug = 0,
    trace = 0, fin = 0, gcgen = 1, gccls = 0}, attrib = 0x82a5588,
  gengc_next_node = 0x85ba270, gengc_prev_node = 0x85bb5c8, u = {primsxp = {
      offset = 25}, symsxp = {pname = 0x19, value = 0x82a5588,
      internal = 0x82a5588}, listsxp = {carval = 0x19, cdrval = 0x82a5588,
      tagval = 0x82a5588}, envsxp = {frame = 0x19, enclos = 0x82a5588,
      hashtab = 0x82a5588}, closxp = {formals = 0x19, body = 0x82a5588,
      env = 0x82a5588}, promsxp = {value = 0x19, expr = 0x82a5588,
      env = 0x82a5588}}}
(gdb)


--------------080506050109020709090406--


[Rd] Segmentation violation in eval.c (R 2.1.0) (PR#7893)
westfeld@inf.tu-dresden.de