Ice 3.4.1
compiler:arm-none-linux-gnueabi-c++ (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72))
target: Samsung s3c6410 (ARM11 core)
The process of porting is quit smooth ( I use only libIce and libIceUtil so I need only compile the bzip2 lib). All the functions work correctly in my test program except that the Ice:ouble data type value has some problem.
when sending a Ice:ouble value from a Linux or Windows(both on the same 32-bit X86 machine) Ice client to the ARM target board Ice server, the server on target board prints strange values.
After analysed the binary data of the double value , I found it's some thing related to the so called middle-endian issue.
I found a lot of articles discuss about the endian of double type on a ARM is neither big nor little, but the middle one. I noticed that in the Ice source file: cpp/src/Ice/BasicStream.cpp line 1228,1274,1316,1363,1422, there are special treatments for the predefined __arm__ and __linux macro. This is reasonable if the middle-endian on ARM is true. But on my board, it seems that it needs no treatment for it. Just comment those special lines for __arm__ and __linux(treated as normal little-endian), the Ice:ouble datas on my target board print correctly.
Because I have only one type of the target board, so I can not do any more test on different ARM. So I don't know, whether it will be different on different ARM core version.

ouble data type value has some problem.
Reply With Quote