diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2010-07-07 13:36:31 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2010-07-07 06:36:31 -0700 |
commit | ab33bd5ceb055d40a2f84faa603f0367a0e0f13b (patch) | |
tree | 68f0cd7a4c8448fe1b2bdf11e3700569bbde8898 /gcc | |
parent | 5e86e5405761d9accc2780c524946e29e00b6608 (diff) | |
download | gcc-ab33bd5ceb055d40a2f84faa603f0367a0e0f13b.zip gcc-ab33bd5ceb055d40a2f84faa603f0367a0e0f13b.tar.gz gcc-ab33bd5ceb055d40a2f84faa603f0367a0e0f13b.tar.bz2 |
Revert revision 161876.
2010-07-07 H.J. Lu <hongjiu.lu@intel.com>
PR target/44850
* config/i386/i386.c (ix86_function_ms_hook_prologue): Revert
revision 161876.
(ix86_expand_prologue): Likewise.
(ix86_handle_fndecl_attribute): Likewise.
(ix86_asm_declare_function_name): Likewise.
* config/i386/i386.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
* config/i386/cygming.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
(SUBTARGET_ASM_DECLARE_FUNCTION_NAME): Likewise.
* config/i386/i386-protos.h (ix86_asm_declare_function_name):
Likewise.
* doc/extend.texi: Likewise.
From-SVN: r161911
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/config/i386/cygming.h | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 79 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 8 | ||||
-rw-r--r-- | gcc/doc/extend.texi | 8 |
6 files changed, 45 insertions, 71 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 88b7319..bd9cf80 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,20 @@ 2010-07-07 H.J. Lu <hongjiu.lu@intel.com> + PR target/44850 + * config/i386/i386.c (ix86_function_ms_hook_prologue): Revert + revision 161876. + (ix86_expand_prologue): Likewise. + (ix86_handle_fndecl_attribute): Likewise. + (ix86_asm_declare_function_name): Likewise. + * config/i386/i386.h (ASM_DECLARE_FUNCTION_NAME): Likewise. + * config/i386/cygming.h (ASM_DECLARE_FUNCTION_NAME): Likewise. + (SUBTARGET_ASM_DECLARE_FUNCTION_NAME): Likewise. + * config/i386/i386-protos.h (ix86_asm_declare_function_name): + Likewise. + * doc/extend.texi: Likewise. + +2010-07-07 H.J. Lu <hongjiu.lu@intel.com> + PR target/44844 * config/i386/i386.md (rdrand<mode>): Changed to expand to retry if the carry flag isn't valid. diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index a970ca2..f2b70af 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -269,13 +269,14 @@ do { \ /* Write the extra assembler code needed to declare a function properly. If we are generating SDB debugging information, this will happen automatically, so we only need to handle other cases. */ -#undef SUBTARGET_ASM_DECLARE_FUNCTION_NAME -#define SUBTARGET_ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ +#undef ASM_DECLARE_FUNCTION_NAME +#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ do \ { \ i386_pe_maybe_record_exported_symbol (DECL, NAME, 0); \ if (write_symbols != SDB_DEBUG) \ i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL)); \ + ASM_OUTPUT_LABEL (FILE, NAME); \ } \ while (0) diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index 021cbe7..4a0e306 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -136,7 +136,6 @@ extern enum machine_mode ix86_fp_compare_mode (enum rtx_code); extern rtx ix86_libcall_value (enum machine_mode); extern bool ix86_function_arg_regno_p (int); -extern void ix86_asm_declare_function_name (FILE *, const char *, tree); extern int ix86_function_arg_boundary (enum machine_mode, tree); extern bool ix86_sol10_return_in_memory (const_tree,const_tree); extern rtx ix86_force_to_memory (enum machine_mode, rtx); diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 0c404ae..7dfd7bb 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5078,15 +5078,18 @@ ix86_function_type_abi (const_tree fntype) static bool ix86_function_ms_hook_prologue (const_tree fntype) { - if (lookup_attribute ("ms_hook_prologue", DECL_ATTRIBUTES (fntype))) + if (!TARGET_64BIT) { - if (decl_function_context (fntype) != NULL_TREE) - { - error_at (DECL_SOURCE_LOCATION (fntype), - "ms_hook_prologue is not compatible with nested function"); - } + if (lookup_attribute ("ms_hook_prologue", DECL_ATTRIBUTES (fntype))) + { + if (decl_function_context (fntype) != NULL_TREE) + { + error_at (DECL_SOURCE_LOCATION (fntype), + "ms_hook_prologue is not compatible with nested function"); + } - return true; + return true; + } } return false; } @@ -5109,45 +5112,6 @@ ix86_cfun_abi (void) return cfun->machine->call_abi; } -/* Write the extra assembler code needed to declare a function properly. */ - -void -ix86_asm_declare_function_name (FILE *asm_out_file, const char *fname, - tree decl) -{ - bool is_ms_hook = ((decl && ix86_function_ms_hook_prologue (decl)) ? true - : false); -#ifdef SUBTARGET_ASM_DECLARE_FUNCTION_NAME - SUBTARGET_ASM_DECLARE_FUNCTION_NAME (asm_out_file, fname, decl); -#endif - - if (is_ms_hook) - { - int i, filler_count = (TARGET_64BIT ? 32 : 16); - unsigned int filler_cc = 0xcccccccc; - - for (i = 0; i < filler_count; i += 4) - fprintf (asm_out_file, ASM_LONG " %#x\n", filler_cc); - } - - ASM_OUTPUT_LABEL (asm_out_file, fname); - - /* Output magic byte marker, if hot-patch attribute is set. - For x86 case frame-pointer prologue will be emitted in - expand_prologue. */ - if (is_ms_hook) - { - if (TARGET_64BIT) - /* leaq [%rsp + 0], %rsp */ - asm_fprintf (asm_out_file, ASM_BYTE - "0x48, 0x8d, 0xa4, 0x24, " - "0x00, 0x00, 0x00, 0x00\n"); - else - /* movl.s %edi, %edi. */ - asm_fprintf (asm_out_file, ASM_BYTE "0x8b, 0xff\n"); - } -} - /* regclass.c */ extern void init_regs (void); @@ -8793,24 +8757,21 @@ ix86_expand_prologue (void) ix86_compute_frame_layout (&frame); - if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) + if (ix86_function_ms_hook_prologue (current_function_decl)) { rtx push, mov; /* Make sure the function starts with - 8b ff movl.s %edi,%edi (see below in text) + 8b ff movl.s %edi,%edi 55 push %ebp 8b ec movl.s %esp,%ebp This matches the hookable function prologue in Win32 API functions in Microsoft Windows XP Service Pack 2 and newer. Wine uses this to enable Windows apps to hook the Win32 API - functions provided by Wine. - Remark: Initial nop-move gets emitted by the function - ix86_asm_declare_function_name and isn't part of this - function. The following instruction don't get hard-coded - in ix86_asm_declare_function_name too, as here notes - for those instructions are necessary for unwinder/debug. */ + functions provided by Wine. */ + insn = emit_insn (gen_vswapmov (gen_rtx_REG (SImode, DI_REG), + gen_rtx_REG (SImode, DI_REG))); push = emit_insn (gen_push (hard_frame_pointer_rtx)); mov = emit_insn (gen_vswapmov (hard_frame_pointer_rtx, stack_pointer_rtx)); @@ -26592,9 +26553,15 @@ ix86_handle_fndecl_attribute (tree *node, tree name, return NULL_TREE; } + if (TARGET_64BIT) + { + warning (OPT_Wattributes, "%qE attribute only available for 32-bit", + name); + return NULL_TREE; + } + #ifndef HAVE_AS_IX86_SWAP - if (!TARGET_64BIT) - sorry ("ms_hook_prologue attribute needs assembler swap suffix support"); + sorry ("ms_hook_prologue attribute needs assembler swap suffix support"); #endif return NULL_TREE; diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index e7bd36a..d036bf0 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2082,14 +2082,6 @@ do { \ } #endif -/* Write the extra assembler code needed to declare a function - properly. Target can add additional code by the sub-target - macro SUBTARGET_ASM_DECLARE_FUNCTION_NAME. */ - -#undef ASM_DECLARE_FUNCTION_NAME -#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ - ix86_asm_declare_function_name (FILE, NAME, DECL) - /* Under some conditions we need jump tables in the text section, because the assembler cannot handle label differences between sections. This is the case for x86_64 on Mach-O for example. */ diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index b9b4a44..967be91 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -2736,10 +2736,10 @@ the @option{-maccumulate-outgoing-args} option. @item ms_hook_prologue @cindex @code{ms_hook_prologue} attribute -On 32 bit i[34567]86-*-* targets and 64 bit x86_64-*-* targets, you can use -this function attribute to make gcc generate the "hot-patching" function -prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2 -and newer. +On 32 bit i[34567]86-*-* targets, you can use this function attribute to make +gcc generate the "hot-patching" function prologue used in Win32 API +functions in Microsoft Windows XP Service Pack 2 and newer. This requires +support for the swap suffix in the assembler. (GNU Binutils 2.19.51 or later) @item naked @cindex function without a prologue/epilogue code |