Package: src:firebird3.0 Version: 3.0.0.32483.ds4-1 Severity: important Tags: upstream patch Control: forwarded -1 http://tracker.firebirdsql.org/browse/CORE-5233 User: debian-sp...@lists.debian.org Usertags: sparc64
After applying the patch in https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=823705, when building employee.fdb on sparc64, a bus error is produced: sh -x -c "lockfile -1 ../../gen/Release/firebird/bin/build-db.lock && ./empbuild ../../gen/examples/employee.fdb; res=\$?; rm -f ../../gen/Release/firebird/bin/build-db.lock; exit \$res" + lockfile -1 ../../gen/Release/firebird/bin/build-db.lock ERROR: ld.so: object 'libeatmydata.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored. + ./empbuild ../../gen/examples/employee.fdb creating database ../../gen/examples/employee.fdb Turning forced writes off Creating tables Turning off indices and triggers Bus error Couldn't turn off indices and triggers + res=44 + rm -f ../../gen/Release/firebird/bin/build-db.lock + exit 44 Makefile.examples:125: recipe for target '../../gen/examples/employee.fdb' failed This can be fixed by applying the attached patch. Regards, James
--- a/src/jrd/met.epp +++ b/src/jrd/met.epp @@ -1486,11 +1486,19 @@ USHORT offset = p[0] | (p[1] << 8); p += 2; - const Ods::Descriptor* odsDflDesc = (Ods::Descriptor*) p; - p = (UCHAR*) (odsDflDesc + 1); + Ods::Descriptor odsDflDesc; + memcpy(&odsDflDesc, p, sizeof(odsDflDesc)); + p += sizeof(Ods::Descriptor); - dsc desc = *odsDflDesc; - desc.dsc_address = const_cast<UCHAR*>(p); + dsc desc = odsDflDesc; + + USHORT align = type_alignments[desc.dsc_dtype]; + if (!align) + align = 1; + + UCHAR tmp_buffer[desc.dsc_length + align - 1]; + desc.dsc_address = FB_ALIGN(&tmp_buffer[0], align); + memcpy(desc.dsc_address, p, desc.dsc_length); EVL_make_value(tdbb, &desc, &format->fmt_defaults[offset], relation->rel_pool); p += desc.dsc_length;