The coredump occurs within this loop of the 'prin_route' function,
 for the same route, only when debug mode is enabled, as can be
 proved by the output ending with '{' :
  $ L_RT.l -pr
0.0.0.0/0               wlp59s0                 192.168.43.1            UP,GW
                600     {       prefsrc:192.168.43.70   protocol:dhcp   
scope:global    type:unicast    }
0.0.0.0/32              *                       0.0.0.0                 UP,HO
                0       {       protocol:boot   scope:global    type:blackhole  
}
..
192.168.42.1/32         ppp0                    0.0.0.0                 UP,HO
                0       {       prefsrc:192.168.42.10   protocol:kernel 
scope:link      type:unicast    }
192.168.42.1/32         ppp0                    0.0.0.0                 UP,HO
                50      {       Segmentation fault (core dumped)

So the code MUST be in this loop when the coredump occurs :

       (for r (idx ratr)
         (when (and (bool r) (lst? r))
         (let
          ( k (car r) v (cdr r) )
          (case k
           ('( "dst" "gateway" "dev" "metric" "mtu" ))
           (T
            (out 1 (prin (pack k ":" v "^I")))
           )
          )
         )
        )
       )

Why, only when the trailing '+' "Enable Debug Mode" is in '(argv)' ,
should the behaviour of 'idx' change so drastically ?

I can send you hundreds of such coredumps - they are not very helpful
unless you can combine using GDB with use of a live picolisp to inspect
the stack . That is what I'd like to get working .

I suspect the CFA stack frame info being generated and possibly data layouts
when not in debug mode may be different to when in debug mode ?

Here's more details of the one that just happened :

(gdb) where
#0  0x0000000000444921 in consTree ()
#1  0x0000000000422428 in _for ()
#2  0x00000000004212f7 in _prog ()
#3  0x000000000042324d in _let ()
#4  0x000000000042324d in _let ()
#5  0x0000000000432469 in evExpr ()
#6  0x000000000041fd02 in _eval ()
#7  0x00000000004211d8 in _bool ()
#8  0x0000000000421218 in _not ()
#9  0x00000000004214ac in _if ()
#10 0x00000000004212f7 in _prog ()
#11 0x000000000042324d in _let ()
#12 0x000000000043e505 in loop1 ()
#13 0x0000000000422573 in _for ()
#14 0x000000000042324d in _let ()
#15 0x000000000042324d in _let ()
#16 0x00000000004238c7 in _catch ()
#17 0x000000000042324d in _let ()
#18 0x0000000000434476 in repl ()
#19 0x00000000004495b8 in main ()
(gdb) info reg
rax            0x45b6b8            4568760
rbx            0x7f38d2f23780      139882033985408
rcx            0x7f38d2f247c0      139882033989568
rdx            0x7f38d2f23780      139882033985408
rsi            0x3                 3
rdi            0x7f38d2f247c0      139882033989568
rbp            0x7ffc913afc80      0x7ffc913afc80
rsp            0x7ffc913afc40      0x7ffc913afc40
r8             0x45b5e8            4568552
r9             0x45b5e8            4568552
r10            0x45b6b8            4568760
r11            0x202               514
r12            0x7ffc913afc40      140722745048128
r13            0x45b6b8            4568760
r14            0x7ffc913afc50      140722745048144
r15            0x45b5e8            4568552
rip            0x444921            0x444921 <consTree+129>
eflags         0x10212             [ AF IF RF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0
(gdb) disass
Dump of assembler code for function consTree:
   0x00000000004448a0 <+0>:     push   %rbp
   0x00000000004448a1 <+1>:     mov    %rsp,%rbp
   0x00000000004448a4 <+4>:     push   %r15
   0x00000000004448a6 <+6>:     push   %r14
   0x00000000004448a8 <+8>:     push   %r12
   0x00000000004448aa <+10>:    push   %rbx
   0x00000000004448ab <+11>:    mov    %rsi,%rax
   0x00000000004448ae <+14>:    mov    %rdi,%rbx
   0x00000000004448b1 <+17>:    test   $0xf,%bl
   0x00000000004448b4 <+20>:    jne    0x4449c4 <consTree+292>
   0x00000000004448ba <+26>:    mov    %rsp,%rcx
   0x00000000004448bd <+29>:    lea    -0x10(%rcx),%r14
   0x00000000004448c1 <+33>:    mov    %r14,%rsp
   0x00000000004448c4 <+36>:    mov    $0x45b5e8,%r15
   0x00000000004448cb <+43>:    mov    (%r15),%rdx
   0x00000000004448ce <+46>:    mov    %rdx,-0x8(%rcx)
   0x00000000004448d2 <+50>:    mov    %rsp,%rcx
   0x00000000004448d5 <+53>:    lea    -0x10(%rcx),%r12
   0x00000000004448d9 <+57>:    mov    %r12,%rsp
   0x00000000004448dc <+60>:    movq   $0xa,-0x10(%rcx)
   0x00000000004448e4 <+68>:    mov    %r14,-0x8(%rcx)
   0x00000000004448e8 <+72>:    mov    %r12,(%r15)
   0x00000000004448eb <+75>:    mov    $0xa,%ecx
   0x00000000004448f0 <+80>:    mov    0x8(%rbx),%rsi
   0x00000000004448f4 <+84>:    mov    0x8(%rsi),%rdx
   0x00000000004448f8 <+88>:    test   $0xf,%dl
   0x00000000004448fb <+91>:    jne    0x44492e <consTree+142>
   0x00000000004448fd <+93>:    add    $0x8,%rsi
   0x0000000000444901 <+97>:    cs nopw 0x0(%rax,%rax,1)
   0x000000000044490b <+107>:   nopl   0x0(%rax,%rax,1)
   0x0000000000444910 <+112>:   mov    %rcx,(%rsi)
   0x0000000000444913 <+115>:   mov    %rbx,(%r12)
   0x0000000000444917 <+119>:   mov    %rbx,%rcx
   0x000000000044491a <+122>:   mov    %rdx,%rbx
   0x000000000044491d <+125>:   mov    0x8(%rdx),%rsi
=> 0x0000000000444921 <+129>:   mov    0x8(%rsi),%rdx
   0x0000000000444925 <+133>:   add    $0x8,%rsi
   0x0000000000444929 <+137>:   test   $0xf,%dl
   0x000000000044492c <+140>:   je     0x444910 <consTree+112>


So '0x8(%rsi)' is invalid when not in debug mode, but valid when in
debug mode. Why ?

On 02/08/2023, Jason Vas Dias <jason.vas.d...@gmail.com> wrote:
> Good day Alex -
> RE:
>>Can you debug this a little more? E.g. look at the output of (traceAll) and
>> see
>> *where* exactly it happens.
>
> That's the whole problem - doesn't 'traceAll' depend on Debug Mode
> being enabled by trailing '+' ?
> And the coredump does NOT occur in debug mode, nor in normal
> usage where there are not 2 routes that share the same Key / destination 

Reply via email to