statethreads (http://state-threads.sourceforge.net/) crashes on
OpenBSD 6.4/amd64 (release) with an error in ld (see below); it
works fine on previous OpenBSD versions.  Do I have to set some
"special" cc/ld options to make this work? Or are patches to
statehreads required (there doesn't seem to be a port for it,
otherwise I would try that)?

#0  0x00000c0b0980db08 in _dl_bind (object=0xc0a85cff400, index=)
   from /usr/libexec/ld.so
(gdb) where
#0  0x00000c0b0980db08 in _dl_bind (object=0xc0a85cff400, index=)
   from /usr/libexec/ld.so
#1  0x00000c0b098080dd in _dl_bind_start ()
    at /usr/src/libexec/ld.so/amd64/ldasm.S:108
#2  0x00000c08448058bc in st_accept (fd=0xc0a634981c0, addr=0xc0ae5a31dd0, 
    addrlen=0xc0ae5a31dcc, timeout=18446744073709551615)
    at ../../mta/statethreads/io.c:258
#3  0x00000c0844802928 in handle_connections (arg=0x0)
    at ../../../mta/statethreads/examples/server.c:880
#4  0x00000c0844803e4a in st_thread_create (start=0, arg=)
    at ../../mta/statethreads/sched.c:329
#5  0x00000c0844801e38 in start_threads ()
    at ../../../mta/statethreads/examples/server.c:855
#6  0x00000c0844800b17 in main (argc=6, argv=0x7f7ffffd4ec8)
    at ../../../mta/statethreads/examples/server.c:266
(gdb) print *object
$2 = {obj_base = 13229648510976, load_name = 0xc0b0ee98d90 "./server", 
  load_dyn = 0xc0844a0dbc8, next = 0xc0a4aacb800, prev = 0x0, 
  load_base = 13229648510976, load_list = 0xc0a64e9c400, load_size = 2158592, 
  Dyn = {info = 0xc0a85cff440, u = {null = 0, needed = 1, pltrelsz = 1872, 
      pltgot = 0xc0844a0dd28, hash = 0xc0844908960, strtab = 0xc0844909650 "", 
      symtab = 0xc0844908c90, rela = 0xc0844909940, relasz = 1152, 
      relaent = 24, strsz = 748, syment = 24, init = 0, fini = 0, 
      soname = 0x0, rpath = 0x0, symbolic = 0, rel = 0x0, relsz = 0, 
      relent = 0, pltrel = 7, debug = 0, textrel = 0, jmprel = 13229649599936, 
      bind_now = 0, init_array = 0x0, fini_array = 0x0, init_arraysz = 0, 
      fini_arraysz = 0, runpath = 0x0, flags = 0, encoding = 0, 
      preinit_array = 0x0, preinit_arraysz = 0}}, relacount = 45, 
  relcount = 0, status = 5, phdrp = 0xc0844800040, phdrc = 10, obj_type = 2, 
  obj_flags = 2, buckets = 0xc0844908968, nbuckets = 97, 
  chains = 0xc0844908aec, nchains = 104, dynamic = 0x0, child_list = {
    tqh_first = 0xc0ab8651740, tqh_last = 0xc0ab8651740}, grpsym_list = {
    tqh_first = 0xc0aab280e40, tqh_last = 0xc0ad21a8bc0}, grpref_list = {
    tqh_first = 0x0, tqh_last = 0xc0a85cff5c8}, refcount = 0, opencount = 1, 
  grprefcount = 0, load_object = 0xc0a85cff400, sod = {
    sod_name = 13240289961776, sod_library = 0, sod_reserved = 0, 
    sod_major = 0, sod_minor = 0, sod_next = 0}, dev = 0, inode = 0, 
  tls_fsize = 0, tls_msize = 0, tls_align = 0, tls_static_data = 0x0, 
  tls_offset = 0, relro_addr = 13229650663352, relro_size = 2120, 
  grpsym_gen = 0, rpath = 0x0, runpath = 0x0, traced = 0}


$ ldd server
server:
        Start            End              Type  Open Ref GrpRef Name
        0000004e8ca00000 0000004e8cc0f000 exe   1    0   0      server
        00000051672ec000 00000051675db000 rlib  0    1   0      
/usr/lib/libc.so.92.5
        0000005183400000 0000005183400000 ld.so 0    1   0      
/usr/libexec/ld.so

ld doesn't seem to be mentioned in errata64.html, so I guess there's
no relevant change for it.

The test program (as well as statethreds) is part of MeTA1 in case
someone can take a look at it.

Reply via email to