Package: virtuoso-opensource Version: 6.1.0+dfsg2-2 Severity: serious Tags: confirmed upstream
See following. ---------- Forwarded message ---------- From: Obey Arthur Liu <art...@milliways.fr> Date: Mon, Mar 15, 2010 at 12:43 AM Subject: FTBFS for virtuoso-opensource on SPARC To: debian-sp...@lists.debian.org Cc: pkg-virtuoso-maintain...@lists.alioth.debian.org Hi all, I am the maintainer of virtuoso-opensource[1], a newly packaged semantic database on which new versions of KDE will depend. It is therefore important to get it to build on all architectures[2]. I have so far squashed issues on kfreebsd-* and armel but hurd-i386 and sparc are still problematic. While the hurd-i386 problems are probably too deep right now for a fix, I believe sparc can be fixed. I suspect it is a memory alignment issue, similarly to the armel fix[3], although my attempts at fixing them similarly[ftbfs-sparc.patch attached] have not been successful yet. Here's the crash without any patching (full backtrace further below): Program received signal SIGBUS, Bus error. sequence_next_inc_1 (name=0x1391148 "RDF_PREF_SEQ", in_map=0, inc_by=1, err_ret=0x0) at regist.c:714 714 res = (*place); Location[4]. Here's how to reproduce the crash: dchroot sid # as needed dget http://www.milliways.fr/debian/packages/virtuoso/virtuoso-opensource_6.1.0+dfsg2-2.dsc dpkg-source -x virtuoso-opensource_6.1.0+dfsg2-2.dsc cd virtuoso-opensource-6.1.0+dfsg2 # We want to enable debug symbols by adding --with-debug to the ./configure sed -i 's/\(zlib$\)/\1 --with-debug/' debian/rules dpkg-buildpackage -us -uc -d After a while, you should see: Waiting Virtuoso Server start on port 1111... Waiting Virtuoso Server start on port 1111... Waiting Virtuoso Server start on port 1111... Just Ctrl-C the build. It has already crashed by this point. Now, to reproduce the crash: cd binsrc/rdf_mappers rm vad.db # This should crash: ../virtuoso/virtuoso-t +wait +foreground +debug +configfile virtuoso.ini # Now to make it crash again, wipe the database and run it again under gdb: rm vad.db gdb --args ../virtuoso/virtuoso-t +wait +foreground +debug +configfile virtuoso.ini Full backtrace: (gdb) bt #0 sequence_next_inc_1 (name=0x1391148 "RDF_PREF_SEQ", in_map=0, inc_by=1, err_ret=0x0) at regist.c:714 #1 0x001e737c in tb_new_id_and_name (lt=0xa48290, itc=0xffe81d98, tb=0x133a528, name=0x1391318 "http://www.w3.org/2002/07/owl#", value_seq_name=0x4d0870 "RDF_PREF_SEQ") at rdf_core.c:1629 #2 0x001e7690 in tb_name_to_id (lt=0xa48290, tb_name=0x4d0848 "DB.DBA.RDF_PREFIX", name=0x1391318 "http://www.w3.org/2002/07/owl#", value_seq_name=0x4d0870 "RDF_PREF_SEQ") at rdf_core.c:1747 #3 0x001e87e4 in key_name_to_iri_id_1 (lt=0xa48290, name=0xe36268 "http://www.w3.org/2002/07/owl#sameAs", make_new=1) at rdf_core.c:1882 #4 0x001ea6e0 in iri_to_id (qst=0x1391208, name=0xe36268 "http://www.w3.org/2002/07/owl#sameAs", mode=1, err_ret=0xffe82b3c) at rdf_core.c:2248 #5 0x001eab74 in bif_iri_to_id (qst=0x1391208, err_ret=0xffe82ba4, args=0x13b2898) at rdf_core.c:2281 #6 0x0016e094 in ins_call_bif (ins=0x1391190, qst=0x1391208, code_vec=0x1391190) at sqlintrp.c:285 #7 0x00172db4 in code_vec_run_1 (code_vec=0x1391190, qst=0x1391208, offset=0) at sqlintrp.c:2004 #8 0x00198144 in qn_input (xx=0x1266980, inst=0x1391208, state=0x1391208) at sqlrun.c:682 #9 0x0019ca14 in qr_exec (cli=0xa46a98, qr=0x1390d50, caller=0x1, cr_name=0x0, stmt=0x0, lc_ret=0xffe82f5c, parms=0x130dd70, opts=0x0, named_params=1) at sqlrun.c:3172 #10 0x0019d304 in qr_quick_exec (qr=0x1390d50, cli=0xa46a98, id=0x5a1e58 "", lc_ret=0xffe82f5c, n_pars=<value optimized out>) at sqlrun.c:3727 #11 0x001ee6c0 in sas_init () at rdfinf.c:999 #12 0x001e80ac in rdf_core_init () at rdf_core.c:3293 #13 0x001a6524 in srv_global_init (mode=0x5a1e58 "") at sqlsrv.c:3844 #14 0x000480d4 in main (argc=6, argv=0x9bcd30) at viunix.c:657 Note that the build system is quite horrible, but the following incantation should approximate an incremental compilation for any edited files under libsrc/Wi/: $ cd libsrc/Wi/ && make clean && cd ../.. If you have an easy fix for this, I'd be very grateful. If there's none, I'll escalate to upstream in a few days. I'm not subscribed to debian-sparc@ but I'm on pkg-virtuoso-maintainers@ (cc'ed). Cheers Arthur [1] <http://packages.qa.debian.org/v/virtuoso-opensource.html> [2] <https://buildd.debian.org/pkg.cgi?pkg=virtuoso-opensource> [3] <https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi?p=pkg-virtuoso/pkg-virtuoso.git;a=blob;f=debian/patches/ftbfs-armel.patch;h=537d80cbadcee6ff1989423996ee56081bfecf16;hb=e6e9276c42ee01dcc3436fe72f73000cb0e28f69> [4] <https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi?p=pkg-virtuoso/pkg-virtuoso.git;a=blob;f=libsrc/Wi/regist.c;h=3a806cf5b4da627f0828f8702f1aa540af957223;hb=HEAD#l714>
--- a/libsrc/Wi/widisk.h 2010-03-14 22:55:59.753733192 +0100 +++ b/libsrc/Wi/widisk.h 2010-03-14 23:52:32.165226937 +0100 @@ -216,16 +216,33 @@ #ifdef WORDS_BIGENDIAN +// Debian maintainer: sparc compatibility +#if 0 #define LONG_REF(ip) \ ((((int)(*(short*)(ip))) << 16) \ + (((unsigned short*)(ip)) [1])) +#endif +static inline int LONG_REF(unsigned char *ip) { + int ret; + memcpy(&ret, ip + 2, 2); + memcpy(&ret + 2, ip, 2); + return ret; +} +// Debian maintainer: sparc compatibility +#if 0 #define LONG_SET(ip, v) \ { \ ((unsigned short *) (ip))[0] = (v) >> 16; \ ((unsigned short *) (ip))[1] = (unsigned short)(v); \ } +#endif +static inline void LONG_SET(unsigned char *ip, int v) { + int x = v; + memcpy(ip, &x + 2, 2); + memcpy(ip + 2, &x, 2); +} #else @@ -248,6 +265,8 @@ #ifdef WORDS_BIGENDIAN +// Debian maintainer: sparc compatibility +#if 0 #define INT64_REF(p) \ ( \ ( ((int64)((short*)(p))[0]) << 48) \ @@ -255,7 +274,18 @@ | (((int32)((unsigned short*)(p))[2]) << 16) \ | (((unsigned short*)(p))[3]) \ ) +#endif +static inline int64 INT64_REF(unsigned char *p) { + int64 ret; + memcpy(&ret, p + 6, 2); + memcpy(&ret + 2, p + 4, 2); + memcpy(&ret + 4, p + 2, 2); + memcpy(&ret + 6, p, 2); + return ret; +} +// Debian maintainer: sparc compatibility +#if 0 #define INT64_SET(p, v) \ { \ ((unsigned short *) (p))[0] = (unsigned short)((v) >> 48); \ @@ -263,6 +293,8 @@ ((unsigned short *) (p))[2] = (unsigned short)((v) >> 16); \ ((unsigned short *) (p))[3] = (unsigned short)(v); \ } +#endif +static inline void INT64_SET(unsigned char *p, int64 v) { int64 x = v; memcpy(p, &x + 6, 2); memcpy(p + 2, &x + 4, 2); memcpy(p + 4, &x + 2, 2); memcpy(p + 6, &x, 2); } #else