On Sun, 3 Oct 2010 22:41:50 +0200, you wrote:

>err... reading the trace first helps. this is actually pretty clearly a
>problem in re. I don't feel responsible for re tho :)

Is there something else I should do before submitting something to bugs?

Both of these source files haven't been modified since I grabbed this
snapshot.

OpenBSD 4.8-current (GENERIC) #312: Tue Aug 31 21:59:22 MDT 2010
    dera...@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC

http://www.openbsd.org/cgi-bin/cvsweb/src/sys/dev/ic/re.c?sortby=date
http://www.openbsd.org/cgi-bin/cvsweb/src/sys/net/if_ethersubr.c?sortby=date

ddb> trace
ether_input(d1be7054,0,d66ca000,0,60) at ether_input+0xa9
re_rxeof(d1be7000,dbc13000,3e,4001,1) at re_rxeof+0x33c


# objdump --line --disassemble --reloc re.o > ~/re.o.dis

# cat ~/re.o.dis | grep "<re_rxeof>"
00001800 <re_rxeof>:

0x1800 + 0x33c = 1b3c

# cat /root/re.o.dis

../../../../dev/ic/re.c:1480
    1b38:       66 89 43 26             mov    %ax,0x26(%ebx)
    1b3c:       e9 76 ff ff ff          jmp    1ab7 <re_rxeof+0x2b7>


# cat -n ../../../../dev/ic/re.c | head -n 1485 | tail -n 10
  1476                                      M_UDP_CSUM_IN_OK;
  1477                  }
  1478  #if NVLAN > 0
  1479                  if (rxvlan & RL_RDESC_VLANCTL_TAG) {
  1480                          m->m_pkthdr.ether_vtag =
  1481                              ntohs((rxvlan & RL_RDESC_VLANCTL_DATA));
  1482                          m->m_flags |= M_VLANTAG;
  1483                  }
  1484  #endif
  1485


# objdump --line --disassemble --reloc if_ethersubr.o > ~/if_ethersubr.o.dis

# cat /root/if_ethersubr.o.dis | grep "<ether_input>"
00000e80 <ether_input>:

0xe80 +0xa9 = 0xf29

# cat /root/if_ethersubr.o.dis

../../../../net/if_ethersubr.c:570
     f26:       8b 55 e0                mov    0xffffffe0(%ebp),%edx
     f29:       f6 02 01                testb  $0x1,(%edx)
     f2c:       0f 85 09 01 00 00       jne    103b <ether_input+0x1bb>

# cat -n ../../../../net/if_ethersubr.c | head -n 575 | tail -n 10
   566          if ((ifp->if_flags & IFF_UP) == 0) {
   567                  m_freem(m);
   568                  return;
   569          }
   570          if (ETHER_IS_MULTICAST(eh->ether_dhost)) {
   571                  if ((ifp->if_flags & IFF_SIMPLEX) == 0) {
   572                          struct ifaddr *ifa;
   573                          struct sockaddr_dl *sdl = NULL;
   574
   575                          TAILQ_FOREACH(ifa, &ifp->if_addrlist,
ifa_list)
{

Reply via email to