diff options
author | Ian Lance Taylor <iant@google.com> | 2010-11-08 04:34:32 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-11-08 04:34:32 +0000 |
commit | f3824a8b6cd929c0e29440387a5066b8b71da346 (patch) | |
tree | 01d2fff5e4ff4189da1309dc99b45cbd714f2464 /libgcc | |
parent | bf8c0c1b63ef70e19c2391610db3a521b60384f4 (diff) | |
download | gcc-f3824a8b6cd929c0e29440387a5066b8b71da346.zip gcc-f3824a8b6cd929c0e29440387a5066b8b71da346.tar.gz gcc-f3824a8b6cd929c0e29440387a5066b8b71da346.tar.bz2 |
re PR target/46089 (ICE: in gen_reg_rtx, at emit-rtl.c:861 with -mcmodel=large -fsplit-stack)
gcc/:
PR target/46089
* config/i386/i386.c (split_stack_fn_large): New static variable.
(ix86_expand_split_stack_prologue): Handle large model.
libgcc/:
* config/i386/morestack.S (__morestack_large_model): New
function.
From-SVN: r166427
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 6 | ||||
-rw-r--r-- | libgcc/config/i386/morestack.S | 34 |
2 files changed, 40 insertions, 0 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index ea864d3..21099ab 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +2010-11-07 Ian Lance Taylor <iant@google.com> + + PR target/46089 + * config/i386/morestack.S (__morestack_large_model): New + function. + 2010-10-23 Nathan Froyd <froydnj@codesourcery.com> * config/libbid/bid_gcc_intrinsics.h (LIBGCC2_WORDS_BIG_ENDIAN): diff --git a/libgcc/config/i386/morestack.S b/libgcc/config/i386/morestack.S index 79abba3..10fa1fd 100644 --- a/libgcc/config/i386/morestack.S +++ b/libgcc/config/i386/morestack.S @@ -488,6 +488,40 @@ DW.ref.__gcc_personality_v0: #endif #endif +#ifdef __x86_64__ + +# This entry point is used for the large model. With this entry point +# the upper 32 bits of %r10 hold the argument size and the lower 32 +# bits hold the new stack frame size. There doesn't seem to be a way +# to know in the assembler code that we are assembling for the large +# model, and there doesn't seem to be a large model multilib anyhow. +# If one is developed, then the non-PIC code is probably OK since we +# will probably be close to the morestack code, but the PIC code +# almost certainly needs to be changed. FIXME. + + .text + .global __morestack_large_model + .hidden __morestack_large_model + +#ifdef __ELF__ + .type __morestack_large_model,@function +#endif + +__morestack_large_model: + + .cfi_startproc + + movq %r10, %r11 + andl $0xffffffff, %r10d + sarq $32, %r11 + jmp __morestack + + .cfi_endproc +#ifdef __ELF__ + .size __morestack_large_model, . - __morestack_large_model +#endif + +#endif /* __x86_64__ */ # Initialize the stack test value when the program starts or when a # new thread starts. We don't know how large the main stack is, so we |