Hi all,
I am a bit worried and confused about this patch:
Op di 31-10-2006, om 00:59 schreef Pedro Alves:
> Hi all,
>
> I am commiting this patch that cleans up gcc's support of Windows CE for
> arm.
>
> This patch fixes some major bugs/annoyances we had:
>
> - __declspec(dllexport/dllimport) was so broken that it was hurting.
> We weren't passing -export= in .drectve properly,
> so the linker would default to exporting everything. If you used .def
> files, this would go unnoticed.
>
> - We had some major violations of WinCE's ABI:
>
> Currently this test gives wrong results:
> struct abi_check_doubles { char a; double d; };
> struct foo0 { char x; };
> struct foo1 { char x;char :0; char y; };
> struct foo2 { char x; int :0; int :0; int :0; int :0; char y; };
> struct foo3 { char x; char :1; char y; };
> struct foo4 { char x; int :1; char y; };
>
> int main()
> {
> printf ("Size of foo0 is %d, should be 1\n", sizeof (struct foo0));
> printf ("Size of foo1 is %d, should be 2\n", sizeof (struct foo1));
> printf ("Size of foo2 is %d, should be 2\n", sizeof (struct foo2));
> printf ("Size of foo3 is %d, should be 3\n", sizeof (struct foo3));
> printf ("Size of foo4 is %d, should be 12\n", sizeof (struct foo4));
> return 0;
> }
>
> The right results where taken from compiling the test case with MSVC.
> Note that this is a simplified test case.
> If you where experiencing weird crashes before while calling/interfacing
> MSVC/eVC compiled code,
> including the system dlls, this may very well be the reason.
>
> This patch also brings gcc support very close to what should be
> submitted upstream.
compiling the above on an ARM-Linux box yields:
$> ./test
Size of foo0 is 4, should be 1
Size of foo1 is 4, should be 2
Size of foo2 is 8, should be 2
Size of foo3 is 4, should be 3
Size of foo4 is 4, should be 12
This is with
$> gcc --version
gcc (GCC) 3.4.3
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
We should note that this can break a lot of other stuff. We had rather
be using the __packed__ attributed here.
struct abi_check_doubles { char a; double d; };
struct __attribute__((__packed__)) foo0 { char x; };
struct __attribute__((__packed__)) foo1 { char x;char :0; char y; };
struct __attribute__((__packed__)) foo2 { char x; int :0; int :0; int
:0; int :0; char y; };
struct __attribute__((__packed__)) foo3 { char x; char :1; char y; };
struct __attribute__((__packed__)) foo4 { char x; int :1; char y; };
int main()
{
printf ("Size of foo0 is %d, should be 1\n", sizeof (struct foo0));
printf ("Size of foo1 is %d, should be 2\n", sizeof (struct foo1));
printf ("Size of foo2 is %d, should be 2\n", sizeof (struct foo2));
printf ("Size of foo3 is %d, should be 3\n", sizeof (struct foo3));
printf ("Size of foo4 is %d, should be 12\n", sizeof (struct foo4));
return 0;
}
Will yield:
./test
Size of foo0 is 1, should be 1
Size of foo1 is 2, should be 2
Size of foo2 is 2, should be 2
Size of foo3 is 3, should be 3
Size of foo4 is 3, should be 12
Where the foo4 is 3 in my opinion is fully correct.. 12 is pretty large
for 2 chars and 1 bit...
The compiler can do this behaviour on all structs when we have
-fpack-struct when invoking gcc. The manual of gcc however warns about
the behaviour and the resulting binary incompatibilities.
I am not sure about the behaviour of eVC in this respect but the packing
of integers on an ARM processor is pretty much going to slowdown memory
access by a factor of at least four! (each byte is read separately when
unaligned memory access is done.)
I will need to do some more checking on this in respect to eVC.
Jan Rinze.
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Cegcc-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cegcc-devel