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.
I'm only posting the ChangeLog, since the patch is pretty big. You can
see it at cegcc-svn
or by svn updating.
I only tested this on mingw32ce yet, will test cegcc tomorrow.
Cheers,
Pedro Alves
---
src/gcc/gcc/ChangeLog.ce
2006-10-30 Pedro Alves <[EMAIL PROTECTED]>
* target-def.h (TARGET_ATTRIBUTE_TABLE): Only define if not
defined before.
* config/arm/arm.c (arm_file_end): Give it external linkage.
(arm_handle_struct_attribute): New.
(arm_ms_bitfield_layout_p): New.
(TARGET_ATTRIBUTE_TABLE, TARGET_ASM_FILE_END,
TARGET_ENCODE_SECTION_INFO, TARGET_STRIP_NAME_ENCODING): Move
declarations to config/arm/arm.h.
(TARGET_MS_BITFIELD_LAYOUT_P): Define to
arm_ms_bitfield_layout_p.
(arm_return_in_memory): Replace #ifdef'ing on ARM_WINCE with
TARGET_RETURN_AGGREGATES_IN_MEMORY.
(arm_attribute_table): Add shared, ms_struct, gcc_struct
attributes.
Allow subtarget to add attributes using
SUBTARGET_ATTRIBUTE_TABLE.
(arm_elf_asm_constructor): Only compile on OBJECT_FORMAT_ELF.
(thumb_output_function_prologue): Call arm_pe_strip_name_encoding
instead of arm_strip_name_encoding.
(arm_handle_struct_attribute): New function.
(arm_ms_bitfield_layout_p): New function.
* config/arm/arm.h (TARGET_ASM_FILE_END, TARGET_ATTRIBUTE_TABLE,
TARGET_ENCODE_SECTION_INFO, TARGET_STRIP_NAME_ENCODING): Define.
* config/arm/t-wince-cegcc: Add cegcc1.o rule.
(TARGET_LIBGCC2_CFLAGS): Add -mwin32.
* config/arm/t-mingw32 (SYSTEM_INCLUDE_DIR): Delete.
(NATIVE_SYSTEM_HEADER_DIR): Likewise.
* config/arm/arm-protos.h (arm_file_end,
arm_pe_asm_named_section, arm_pe_section_type_flags,
arm_pe_strip_name_encoding, arm_pe_output_labelref,
arm_pe_handle_shared_attribute): Declare.
* config/arm/wince-pe.h:
(TARGET_VERSION): Set to "(arm Windows CE/Native SDK)".
(MULTILIB_DEFAULTS): Remove -mfpu=vfp.
(SUBTARGET_CPU_DEFAULT): Default to TARGET_CPU_arm8 (armv4).
(CPP_SPEC): Remove cegcc specifics.
(ASM_SPEC): Don't pass -cpu=iwmmxt to assembler when -mcpu=xscale
is used.
(SUBTARGET_EXTRA_SPECS, SUBTARGET_ASM_FLOAT_SPEC): Remove.
(TARGET_OS_CPP_BUILTINS): Add _stdcall, _fastcall and _cdecl.
(SUBTARGET_CPP_SPEC, HANDLE_SYSV_PRAGMA,
HANDLE_PRAGMA_PACK_PUSH_POP): Delete.
(STARTFILE_SPEC): Remove cegcc specifics.
(LIBGCC_SPEC): Likewise.
(LIB_SPEC): Likewise.
(COMMON_ASM_OP, ASM_OUTPUT_COMMON, ASM_DECLARE_OBJECT_NAME,
ASM_DECLARE_FUNCTION_NAME, ASM_OUTPUT_EXTERNAL,
ASM_OUTPUT_EXTERNAL_LIBCALL, ASM_OUTPUT_ALIGNED_BSS,
TARGET_ASM_FILE_END, SUPPORTS_ONE_ONLY, MULTIPLE_SYMBOL_SPACES):
Delete.
(ARM_MCOUNT_NAME): Define to _mcount to avoid conflicts.
(CHECK_STACK_LIMIT): Delete.
(TARGET_DEFAULT): Match Windows CE ABI with
MASK_MS_BITFIELD_LAYOUT and MASK_RETURN_AGGREGATES_IN_MEMORY.
(TARGET_SUBTARGET_DEFAULT): Delete.
(BIGGEST_FIELD_ALIGNMENT): Delete.
(SET_ASM_OP): Delete.
(DEFAULT_STRUCTURE_SIZE_BOUNDARY): Define to 8 as WinCE's ABI
requires.
(ASM_OUTPUT_DEF_FROM_DECLS, TARGET_USE_JCR_SECTION,
TARGET_USE_LOCAL_THUNK_ALIAS_P, SUBTARGET_ATTRIBUTE_TABLE):
Delete.
* config/arm/mingw32.h (STANDARD_INCLUDE_DIR,
STANDARD_INCLUDE_COMPONENT): Delete.
* config/arm/arm.opt: New option -mreturn-aggregates-in-memory.
* config/arm/pe.opt: New option -mms-bitfields.
* config/arm/pe.c (arm_pe_handle_shared_attribute): New.
(arm_pe_strip_name_encoding): New.
(arm_pe_output_labelref): Call arm_pe_strip_name_encoding instead
of arm_strip_name_encoding.
(arm_pe_unique_section): Likewise.
(arm_pe_section_type_flags): New.
(arm_pe_asm_named_section ): New.
(arm_pe_file_end): Call arm_file_end.
* config/arm/pe.h (HANDLE_SYSV_PRAGMA): New.
(HANDLE_PRAGMA_PACK_PUSH_POP): New.
(SUBTARGET_OVERRIDE_OPTIONS): New.
(TARGET_ASM_NAMED_SECTION): Set to arm_pe_asm_named_section
specialized version.
(TARGET_SECTION_TYPE_FLAGS): New.
(ASM_DECLARE_FUNCTION_NAME): Don't output -export to .drectve
directly.
Use arm_pe_record_exported_symbol instead.
(TARGET_ASM_FILE_END): Set to arm_pe_file_end.
(TARGET_ENCODE_SECTION_INFO): Set to arm_pe_encode_section_info.
(TARGET_STRIP_NAME_ENCODING): Set to arm_pe_strip_name_encoding.
(COMMON_ASM_OP): New.
(ASM_OUTPUT_COMMON): Don't output -export to .drectve directly.
Use arm_pe_record_exported_symbol instead.
(ASM_DECLARE_OBJECT_NAME): Likewise.
(ASM_OUTPUT_EXTERNAL): New.
(ASM_OUTPUT_EXTERNAL_LIBCALL): New.
(PROFILE_HOOK): New.
(ASM_OUTPUT_DEF_FROM_DECLS): New.
(SUPPORTS_ONE_ONLY).
(SUBTARGET_ATTRIBUTE_TABLE): New.
(TARGET_USE_LOCAL_THUNK_ALIAS_P): New.
(TARGET_USE_JCR_SECTION): New.
(SUBTARGET_ENCODE_SECTION_INFO): New.
(TARGET_STRIP_NAME_ENCODING): New.
* config/arm/wince-cegcc.h (SUBTARGET_EXTRA_SPECS,
EXTRA_OS_CPP_BUILTINS, TARGET_OS_CPP_BUILTINS,
SUBTARGET_CPP_SPEC): Delete.
* config/arm/t-wince-pe (pe.o): Add expr.h to dependencies.
(cegcc1.o): Delete build rule.
(MULTILIB_OPTIONS): Remove -mfpu=vfp.
(TARGET_LIBGCC2_CFLAGS): Remove unneeded options.
-------------------------------------------------------------------------
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