--- Begin Message ---
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
--- End Message ---