Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
35b35fd0
Commit
35b35fd0
authored
17 years ago
by
Kai Tietz
Committed by
Kai Tietz
17 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[patch i386]: For target x86_64-pc-mingw32 _alloca and
_stkchk may corrupts stack alignment. From-SVN: r132236
parent
f8c5cff4
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
3 deletions
+38
-3
gcc/ChangeLog
+6
-0
gcc/config/i386/cygwin.asm
+32
-3
No files found.
gcc/ChangeLog
View file @
35b35fd0
2008-02-11 Kai Tietz <kai.tietz@onevision.com>
* config/i386/cygwin.asm: (__alloca): Correct calling
convention and alignment.
(__chkstk): Force 8 byte stack alignment.
2008-02-11 Uros Bizjak <ubizjak@gmail.com>
Richard Guenther <rguenther@suse.de>
...
...
This diff is collapsed.
Click to expand it.
gcc/config/i386/cygwin.asm
View file @
35b35fd0
...
...
@@ -72,15 +72,44 @@ Ldone:
pushl
%
eax
ret
#
else
/*
__alloca
is
a
normal
function
call
,
which
uses
%
rcx
as
the
argument
.
*/
/*
__alloca
is
a
normal
function
call
,
which
uses
%
rcx
as
the
argument
.
And
stack
space
for
the
argument
is
saved
.
*/
__alloca
:
movq
%
rcx
,
%
rax
/*
FALLTHRU
*/
movq
%
rcx
,
%
rax
addq
$
0x7
,
%
rax
andq
$
0xfffffffffffffff8
,
%
rax
popq
%
rcx
/*
pop
return
address
*/
popq
%
r10
/*
Pop
the
reserved
stack
space
.
*/
movq
%
rsp
,
%
r10
/*
get
sp
*/
cmpq
$
0x1000
,
%
rax
/*
>
4
k
?
*/
jb
Ldone_alloca
Lprobe_alloca
:
subq
$
0x1000
,
%
r10
/*
yes
,
move
pointer
down
4
k
*/
orq
$
0x0
,
(
%
r10
)
/*
probe
there
*/
subq
$
0x1000
,
%
rax
/*
decrement
count
*/
cmpq
$
0x1000
,
%
rax
ja
Lprobe_alloca
/*
and
do
it
again
*/
Ldone_alloca
:
subq
%
rax
,
%
r10
orq
$
0x0
,
(
%
r10
)
/*
less
than
4
k
,
just
peek
here
*/
movq
%
r10
,
%
rax
subq
$
0x8
,
%
r10
/*
Reserve
argument
stack
space
.
*/
movq
%
r10
,
%
rsp
/*
decrement
stack
*/
/*
Push
the
return
value
back
.
Doing
this
instead
of
just
jumping
to
%
rcx
preserves
the
cached
call
-
return
stack
used
by
most
modern
processors
.
*/
pushq
%
rcx
ret
/*
___chkstk
is
a
*
special
*
function
call
,
which
uses
%
rax
as
the
argument
.
We
avoid
clobbering
the
4
integer
argument
registers
,
%
rcx
,
%
rdx
,
%
r8
and
%
r9
,
which
leaves
us
with
%
rax
,
%
r10
,
and
%
r11
to
use
.
*/
___chkstk
:
addq
$
0x7
,
%
rax
/*
Make
sure
stack
is
on
alignment
of
8
.
*/
andq
$
0xfffffffffffffff8
,
%
rax
popq
%
r11
/*
pop
return
address
*/
movq
%
rsp
,
%
r10
/*
get
sp
*/
cmpq
$
0x1000
,
%
rax
/*
>
4
k
?
*/
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment