[patch i386 windows]: Fix PR/52790 also required for workig upcoming cygwin x64 target

Richard Henderson rth@redhat.com
Tue Apr 2 18:48:00 GMT 2013


On 2013-03-22 02:27, Kai Tietz wrote:
> Hi,
>
> this patch fixes PR/52790 and supports for x64 Windows targets the use
> of large and medium code-model.
> This feature is required for upcoming new cygwin x64 target, which
> uses full 48-bit available address-space of x64 Windows.
> The cygwin-target depends on pseudo-relocation-feature, which operates
> on instruction relocations.  This can lead for x86_64 to issues, due
> instructions are in general signed-32bit-pc-relative relocated.  So
> distances can become too wide for pseudo-relocation.
> Due for functions we generate anyway on pe-coff targets jump-stubs, we
> just need to make sure that variables are accessed via
> reference-pointer-variables.  So we add for them in medium model
> .refptr-variables.
> In large model we using for external (therefore possibly
> pseudo-relocated) symbols also indirect-addressing via refptr-stubs.
>
> To avoid same issues as we noticed on cygwin64, I want to change
> code-model default to medium also for native-windows x64 target.
>
> ChangeLog
>
> 2013-03-22  Kai Tietz  <ktietz@redhat.com>
>
> 	PR target/52790
> 	* config/i386/cygming.h (SUB_TARGET_RECORD_STUB): New sub-target macro.
> 	* config/i386/i386-protos.h (i386_pe_record_stub): Add new prototype.
> 	* config/i386/i386.c (legitimize_pe_coff_extern_decl): New static function.
> 	(legitimize_pe_coff_symbol): Likewise.
> 	(is_imported_p): New helper-function.
> 	(ix86_option_override_internal): Make MEDIUM_PIC the default code-model
> 	for Windows x64 targets.
> 	(ix86_expand_prologue): Optimize for pe-coff targets.
> 	(ix86_expand_split_stack_prologue): Adjust for pe-coff targets.
> 	(legitimate_pic_address_disp_p): Adjust for x64 pe-coff to support
> 	medium/large code-model.
> 	(legitimize_pic_address): Likewise.
> 	(legitimize_tls_address): Likewise.
> 	(ix86_expand_call): Likewise.
> 	(x86_output_mi_thunk): Likewise.
> 	(get_dllimport_decl): Add new beimport argument.
> 	(construct_plt_address): Don't assert for x64 pe-coff targets.
> 	* config/i386/i386.h (PIC_OFFSET_TABLE_REGNUM): Adjust for x64 pe-coff
> 	targets.
> 	(SYMBOL_FLAG_STUBVAR): New macro.
> 	(SYMBOL_REF_STUBVAR_P): Likewise.
> 	* config/i386/winnt.c (stub_list): New structure.
> 	(stub_head): New local variable.
> 	(i386_pe_record_stub): New function.
> 	(i386_pe_file_end): Emit refptr-stubs.

Ok.


r~



More information about the Gcc-patches mailing list