Also, I've verified that this is exactly the reason of unaligned accesses by making SumCtx bigger so that it doesn't fit into NBFS bytes. After that I was able to execute all tests without unaligned access exceptions. But those printf-8.1 printf-8.2 printf-9.5 types3-1.3 still fail, so it is not related.
On 3/25/06, Alexei Alexandrov <[EMAIL PROTECTED]> wrote: > Hi, > > I don't know whether it's been already reported or not, so anyway. > There are places in SQLite where unaligned access exception is > generated on Itanium. The unaligned access means that someone tries to > read or write memory crossing 8-bytes boundary. Usually this occur as > a result of pointers casting. > > I investigated it a little bit and found that the reason is this line > in func.c file: > > p->sum += sqlite3_value_int64(argv[0]); > > It is a part of sumStep function. p->sum is long double, that is 16 > bytes size. It means that it must be aligned on 16 bytes boundary, but > it is 0x6000000000094248 in my case. The reason it is not aligned is > that address returned by sqlite3_aggregate_context is not aligned on > 16 bytes boundary which is a must for ia64 systems and which is the > alignment of malloc returned pointers. > > So the reason comes to Mem structure and I can see that zShort member > is not forced to be aligned on 16 bytes and in fact it is aligned on 8 > bytes. > > This is where I got stuck because I don't know whether Mem structure > is on-disk structure or not. Is it OK to change it? > > P.S. To catch the unaligned access on Itanium, the easiest way is to say > > prctl --unaligned=signal > ulimit -c unlimited > > After that unaligned access will cause SIGBUS and core dump will be generated. > > P.P.S. Unaligned access can lead to serious performance degradations > and on some OSes (HP-UX) there isn't default unaligned access handler > so it will just crash. > > -- > Alexei Alexandrov > -- Alexei Alexandrov