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
6adb7308
Commit
6adb7308
authored
Mar 29, 2012
by
Anthony Green
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Restore trampled commits
From-SVN: r185955
parent
477fcae3
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
78 additions
and
7 deletions
+78
-7
libffi/ChangeLog
+28
-0
libffi/src/sparc/v9.S
+1
-1
libffi/src/x86/ffi.c
+20
-5
libffi/src/x86/win32.S
+29
-1
No files found.
libffi/ChangeLog
View file @
6adb7308
...
...
@@ -32,11 +32,28 @@
windows-like hosts.
* configure: Rebuilt.
2012-02-27 Mikael Pettersson <mikpe@it.uu.se>
PR libffi/52223
* Makefile.am (FLAGS_TO_PASS): Define.
* Makefile.in: Regenerate.
2012-02-23 Anthony Green <green@moxielogic.com>
* src/*/ffitarget.h: Ensure that users never include ffitarget.h
directly.
2012-02-23 Kai Tietz <ktietz@redhat.com>
PR libffi/52221
* src/x86/ffi.c (ffi_closure_raw_THISCALL): New
prototype.
(ffi_prep_raw_closure_loc): Use ffi_closure_raw_THISCALL for
thiscall-convention.
(ffi_raw_call): Use ffi_prep_args_raw.
* src/x86/win32.S (ffi_closure_raw_THISCALL): Add
implementation for stub.
2012-02-10 Kai Tietz <ktietz@redhat.com>
* configure.ac (AM_LTLDFLAGS): Add -no-undefine for x64
...
...
@@ -262,6 +279,10 @@
* src/sparc/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test,
just return FFI_BAD_ABI when things are wrong.
2012-02-11 Eric Botcazou <ebotcazou@adacore.com>
* src/sparc/v9.S (STACKFRAME): Bump to 176.
2011-02-09 Stuart Shelton <srcshelton@gmail.com>
http://bugs.gentoo.org/show_bug.cgi?id=286911
...
...
@@ -790,6 +811,13 @@
* src/pa/ffi.c (ffi_closure_inner_pa32): Handle FFI_TYPE_LONGDOUBLE
type on HP-UX.
2012-02-13 Kai Tietz <ktietz@redhat.com>
PR libffi/52221
* src/x86/ffi.c (ffi_prep_raw_closure_loc): Add thiscall
support for X86_WIN32.
(FFI_INIT_TRAMPOLINE_THISCALL): Fix displacement.
2009-12-11 Eric Botcazou <ebotcazou@adacore.com>
* src/sparc/ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long
...
...
libffi/src/sparc/v9.S
View file @
6adb7308
...
...
@@ -32,7 +32,7 @@
/* Only compile this in for 64bit builds, because otherwise the object file
will have inproper architecture due to used instructions. */
#define STACKFRAME 1
28 /* Minimum stack framesize for SPARC
*/
#define STACKFRAME 1
76 /* Minimum stack framesize for SPARC 64-bit
*/
#define STACK_BIAS 2047
#define ARGS (128) /* Offset of register area in frame */
...
...
libffi/src/x86/ffi.c
View file @
6adb7308
...
...
@@ -426,6 +426,8 @@ unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *)
void
FFI_HIDDEN
ffi_closure_raw_SYSV
(
ffi_raw_closure
*
)
__attribute__
((
regparm
(
1
)));
#ifdef X86_WIN32
void
FFI_HIDDEN
ffi_closure_raw_THISCALL
(
ffi_raw_closure
*
)
__attribute__
((
regparm
(
1
)));
void
FFI_HIDDEN
ffi_closure_STDCALL
(
ffi_closure
*
)
__attribute__
((
regparm
(
1
)));
void
FFI_HIDDEN
ffi_closure_THISCALL
(
ffi_closure
*
)
...
...
@@ -593,7 +595,7 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue,
{ unsigned char *__tramp = (unsigned char*)(TRAMP); \
unsigned int __fun = (unsigned int)(FUN); \
unsigned int __ctx = (unsigned int)(CTX); \
unsigned int __dis = __fun - (__ctx +
22
); \
unsigned int __dis = __fun - (__ctx +
49
); \
unsigned short __size = (unsigned short)(SIZE); \
*(unsigned int *) &__tramp[0] = 0x8324048b;
/* mov (%esp), %eax */
\
*(unsigned int *) &__tramp[4] = 0x4c890cec;
/* sub $12, %esp */
\
...
...
@@ -699,6 +701,9 @@ ffi_prep_raw_closure_loc (ffi_raw_closure* closure,
int
i
;
if
(
cif
->
abi
!=
FFI_SYSV
)
{
#ifdef X86_WIN32
if
(
cif
->
abi
!=
FFI_THISCALL
)
#endif
return
FFI_BAD_ABI
;
}
...
...
@@ -713,10 +718,20 @@ ffi_prep_raw_closure_loc (ffi_raw_closure* closure,
FFI_ASSERT
(
cif
->
arg_types
[
i
]
->
type
!=
FFI_TYPE_LONGDOUBLE
);
}
#ifdef X86_WIN32
if
(
cif
->
abi
==
FFI_SYSV
)
{
#endif
FFI_INIT_TRAMPOLINE
(
&
closure
->
tramp
[
0
],
&
ffi_closure_raw_SYSV
,
codeloc
);
#ifdef X86_WIN32
}
else
if
(
cif
->
abi
==
FFI_THISCALL
)
{
FFI_INIT_TRAMPOLINE_THISCALL
(
&
closure
->
tramp
[
0
],
&
ffi_closure_raw_THISCALL
,
codeloc
,
cif
->
bytes
);
}
#endif
closure
->
cif
=
cif
;
closure
->
user_data
=
user_data
;
closure
->
fun
=
fun
;
...
...
@@ -761,7 +776,7 @@ ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue)
#ifdef X86_WIN32
case
FFI_SYSV
:
case
FFI_STDCALL
:
ffi_call_win32
(
ffi_prep_args
,
&
ecif
,
cif
->
abi
,
cif
->
bytes
,
cif
->
flags
,
ffi_call_win32
(
ffi_prep_args
_raw
,
&
ecif
,
cif
->
abi
,
cif
->
bytes
,
cif
->
flags
,
ecif
.
rvalue
,
fn
);
break
;
case
FFI_THISCALL
:
...
...
@@ -789,7 +804,7 @@ ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue)
cif
->
abi
=
abi
=
FFI_THISCALL
;
if
(
passed_regs
<
1
&&
abi
==
FFI_THISCALL
)
cif
->
abi
=
abi
=
FFI_STDCALL
;
ffi_call_win32
(
ffi_prep_args
,
&
ecif
,
abi
,
cif
->
bytes
,
cif
->
flags
,
ffi_call_win32
(
ffi_prep_args
_raw
,
&
ecif
,
abi
,
cif
->
bytes
,
cif
->
flags
,
ecif
.
rvalue
,
fn
);
}
break
;
...
...
libffi/src/x86/win32.S
View file @
6adb7308
...
...
@@ -264,6 +264,18 @@ ffi_closure_SYSV ENDP
#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
#define CIF_FLAGS_OFFSET 20
ffi_closure_raw_THISCALL PROC NEAR
push ebp
mov ebp, esp
push esi
sub esp, 36
mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif
mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data
mov [esp + 12], edx
lea edx, [ebp + 12], edx
jmp stubraw
ffi_closure_raw_SYSV ENDP
ffi_closure_raw_SYSV PROC NEAR USES esi
;; the ffi_closure ctx is passed in eax by the trampoline.
...
...
@@ -272,6 +284,7 @@ ffi_closure_raw_SYSV PROC NEAR USES esi
mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data
mov [esp + 12], edx ;; user_data
lea edx, [ebp + 8]
stubraw:
mov [esp + 8], edx ;; raw_args
lea edx, [ebp - 24]
mov [esp + 4], edx ;; &res
...
...
@@ -722,7 +735,21 @@ _ffi_closure_SYSV:
#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
#define CIF_FLAGS_OFFSET 20
.balign 16
.globl _ffi_closure_raw_THISCALL
#ifndef __OS2__
.def _ffi_closure_raw_THISCALL; .scl 2; .type 32; .endef
#endif
_ffi_closure_raw_THISCALL:
pushl %ebp
movl %esp, %ebp
pushl %esi
subl $36, %esp
movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */
movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
movl %edx, 12(%esp) /* user_data */
leal 12(%ebp), %edx /* __builtin_dwarf_cfa () */
jmp .stubraw
# This assumes we are using gas.
.balign 16
.globl _ffi_closure_raw_SYSV
...
...
@@ -742,6 +769,7 @@ _ffi_closure_raw_SYSV:
movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
movl %edx, 12(%esp) /* user_data */
leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */
.stubraw:
movl %edx, 8(%esp) /* raw_args */
leal -24(%ebp), %edx
movl %edx, 4(%esp) /* &res */
...
...
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