Sat 18 Sep 2010 11:54:41 PM UTC, comment #2:
I compared the files, and I narrowed down the trouble to lack of templated BitPrecision() function.
The mldonkey code had them for 'unsigned long' data type (32-bits in mips64), while words were 64bits long. Using a templated BitPrecision function made the assertion check go fine.
With this patch I attach (gcc44mips64.patch), mldonkey starts fine. I included also some refinements over the first patch I posted, thanks to a review by Zhang Le in the loongson-dev mailing list.
(The first incomplete patch had the sufix _2; this may look confusing. The complete patch sits in gcc44mips64.patch, not gcc44mips64_2.patch).
Just to note, this works with gcc 4.5.1 for abi n32. I haven't tried other configurations.
(file #21490)
|
Sat 18 Sep 2010 04:23:49 PM UTC, original submission:
THIS ITEM WAS REASSIGNED TO PATCH #7319
Hello,
I had problems building mldonkey for mips64, and I came up with a patch I attach for review. The problem was in the CryptoPP.cc file, related to multiplication of double words.
Since gcc 4.4, the asm constraint 'h' is not there, and I was using gcc 4.5.1.
Once I could build mldonkey, I tried to run it, and some division code in CryptoPP.cc failed an assertion:
mlnet: src/utils/lib/CryptoPP.cc:3745: void CryptoPP::Divide(CryptoPP::word, CryptoPP::word, CryptoPP::word, const CryptoPP::word, unsigned int, const CryptoPP::word*, unsigned int): Assertion `shiftBits < WORD_BITS' failed.
The gdb session:
(gdb) f 3
#3 0x100983cc in CryptoPP::Divide (R=0x1022ba30, Q=0x1022bac0, T=0x1022bae8, A=0x1022ba78,
NA=6, B=0x1022b910, NB=4) at src/utils/lib/CryptoPP.cc:3745
3745 assert(shiftBits < WORD_BITS);
(gdb) print shiftBits
$1 = 64
(gdb) print WORD_BITS
$2 = 64
Any idea of what can be wrong in that code? I can debug further if you need.
|