[tlbuild] sparc-linux (bigendian?) failure in icu

Karl Berry karl at freefriends.org
Fri Apr 13 02:24:53 CEST 2012


The build fails for me on sparc-linux, like this:
..
LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH  ../bin/icupkg -tb /u/guest/karl/tl/Build/source/Work/libs/icu/../../../libs/icu/icu-49.1/data/in/icudt49l.dat ./out/icudt49b.dat
udata_swapDataHeader(): header size mismatch - headerSize 32768 infoSize 5120 length 1024
make[6]: *** [out/icudt49b.dat] Error 8
make[6]: Leaving directory `/home/1007/gu/karl/tl/Build/source/Work/libs/icu/icu-build/data'

Some painful debugging showed that the function
icu-49.1/tools/toolutil/package.cpp:readFile() is calling
getTypeEnumForInputData() to read the file
icu-49.1/data/in/icudt49l.dat.  And that .dat file apparently embeds the
endianness of where the file was created (namely LittleEndian, on
Peter's machine).

And then it seems that that endianness is used in further processing on
the current machine (BigEndian on sparc-linux), and that causes things
to be (not) byte-swapped where they need to be.  Or something like that.
I didn't get to the bitter end of it today.

Specifically, `length' ends up being 1024, which is less than headerSize
(32768), which causes the bailing-out above (in
icu-49.1/common/udataswp.c line 268).

So far, this appears to be basically unrelated to the previous endian
problem with ICU, although there are so many changes it's hard to tell.

I'm not sure if rearranging the build process to generate icudt49l.dat
at build time would work, or if it's the best thing to do, in any case.

Jonathan, if you have any ideas about any of this, they would be most
welcome.

Dick, I'm surprised you didn't run into this on powerpc-darwin.

Vladimir, watch out on powerpc-aix. 

karl


P.S. For the record, turns out to be necessary to be use -mcpu=sparcv9
on the new sparc-linux host at Utah (gentoo 3.2.1), else get the
nefarious:
..
libTECkit_Compiler.a(Compiler.o): In function `__atomic_add':
/usr/lib/gcc/sparc-unknown-linux-gnu/4.5.3/include/g++-v4/ext/atomicity.h:50: undefined reference to `__sync_fetch_and_add_4'
make[5]: *** [teckit_compile] Error 1
make[5]: Leaving directory `/home/1007/gu/karl/tl/Build/source/Work/libs/teckit'


More information about the tlbuild mailing list