Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
b3c8243c
Kaydet (Commit)
b3c8243c
authored
Ock 27, 2008
tarafından
Neal Norwitz
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Update to newer version of ffi. Fixes crashes and test failures of longdouble
üst
e9057ff1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
48 additions
and
16 deletions
+48
-16
ffi.c
Modules/_ctypes/libffi/src/alpha/ffi.c
+42
-12
osf.S
Modules/_ctypes/libffi/src/alpha/osf.S
+6
-4
No files found.
Modules/_ctypes/libffi/src/alpha/ffi.c
Dosyayı görüntüle @
b3c8243c
...
...
@@ -25,11 +25,22 @@
#include <ffi.h>
#include <ffi_common.h>
#include <stdlib.h>
extern
void
ffi_call_osf
(
void
*
,
unsigned
long
,
unsigned
,
void
*
,
void
(
*
)(
void
));
extern
void
ffi_closure_osf
(
void
);
/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE;
all further uses in this file will refer to the 128-bit type. */
#if defined(__LONG_DOUBLE_128__)
# if FFI_TYPE_LONGDOUBLE != 4
# error FFI_TYPE_LONGDOUBLE out of date
# endif
#else
# undef FFI_TYPE_LONGDOUBLE
# define FFI_TYPE_LONGDOUBLE 4
#endif
extern
void
ffi_call_osf
(
void
*
,
unsigned
long
,
unsigned
,
void
*
,
void
(
*
)(
void
))
FFI_HIDDEN
;
extern
void
ffi_closure_osf
(
void
)
FFI_HIDDEN
;
ffi_status
...
...
@@ -49,6 +60,11 @@ ffi_prep_cif_machdep(ffi_cif *cif)
cif
->
flags
=
cif
->
rtype
->
type
;
break
;
case
FFI_TYPE_LONGDOUBLE
:
/* 128-bit long double is returned in memory, like a struct. */
cif
->
flags
=
FFI_TYPE_STRUCT
;
break
;
default:
cif
->
flags
=
FFI_TYPE_INT
;
break
;
...
...
@@ -57,6 +73,7 @@ ffi_prep_cif_machdep(ffi_cif *cif)
return
FFI_OK
;
}
void
ffi_call
(
ffi_cif
*
cif
,
void
(
*
fn
)(
void
),
void
*
rvalue
,
void
**
avalue
)
{
...
...
@@ -64,8 +81,6 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
long
i
,
avn
;
ffi_type
**
arg_types
;
FFI_ASSERT
(
cif
->
abi
==
FFI_OSF
);
/* If the return value is a struct and we don't have a return
value address then we need to make one. */
if
(
rvalue
==
NULL
&&
cif
->
flags
==
FFI_TYPE_STRUCT
)
...
...
@@ -84,6 +99,8 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
while
(
i
<
avn
)
{
size_t
size
=
(
*
arg_types
)
->
size
;
switch
((
*
arg_types
)
->
type
)
{
case
FFI_TYPE_SINT8
:
...
...
@@ -129,6 +146,12 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
*
(
double
*
)
argp
=
*
(
double
*
)(
*
avalue
);
break
;
case
FFI_TYPE_LONGDOUBLE
:
/* 128-bit long double is passed by reference. */
*
(
long
double
**
)
argp
=
(
long
double
*
)(
*
avalue
);
size
=
sizeof
(
long
double
*
);
break
;
case
FFI_TYPE_STRUCT
:
memcpy
(
argp
,
*
avalue
,
(
*
arg_types
)
->
size
);
break
;
...
...
@@ -137,7 +160,7 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
FFI_ASSERT
(
0
);
}
argp
+=
ALIGN
(
(
*
arg_types
)
->
size
,
FFI_SIZEOF_ARG
)
/
FFI_SIZEOF_ARG
;
argp
+=
ALIGN
(
size
,
FFI_SIZEOF_ARG
)
/
FFI_SIZEOF_ARG
;
i
++
,
arg_types
++
,
avalue
++
;
}
...
...
@@ -153,8 +176,6 @@ ffi_prep_closure (ffi_closure* closure,
{
unsigned
int
*
tramp
;
FFI_ASSERT
(
cif
->
abi
==
FFI_OSF
);
tramp
=
(
unsigned
int
*
)
&
closure
->
tramp
[
0
];
tramp
[
0
]
=
0x47fb0401
;
/* mov $27,$1 */
tramp
[
1
]
=
0xa77b0010
;
/* ldq $27,16($27) */
...
...
@@ -177,7 +198,8 @@ ffi_prep_closure (ffi_closure* closure,
return
FFI_OK
;
}
int
long
FFI_HIDDEN
ffi_closure_osf_inner
(
ffi_closure
*
closure
,
void
*
rvalue
,
unsigned
long
*
argp
)
{
ffi_cif
*
cif
;
...
...
@@ -205,6 +227,8 @@ ffi_closure_osf_inner(ffi_closure *closure, void *rvalue, unsigned long *argp)
/* Grab the addresses of the arguments from the stack frame. */
while
(
i
<
avn
)
{
size_t
size
=
arg_types
[
i
]
->
size
;
switch
(
arg_types
[
i
]
->
type
)
{
case
FFI_TYPE_SINT8
:
...
...
@@ -236,16 +260,22 @@ ffi_closure_osf_inner(ffi_closure *closure, void *rvalue, unsigned long *argp)
avalue
[
i
]
=
&
argp
[
argn
-
(
argn
<
6
?
6
:
0
)];
break
;
case
FFI_TYPE_LONGDOUBLE
:
/* 128-bit long double is passed by reference. */
avalue
[
i
]
=
(
long
double
*
)
argp
[
argn
];
size
=
sizeof
(
long
double
*
);
break
;
default:
FFI_ASSERT
(
0
);
abort
(
);
}
argn
+=
ALIGN
(
arg_types
[
i
]
->
size
,
FFI_SIZEOF_ARG
)
/
FFI_SIZEOF_ARG
;
argn
+=
ALIGN
(
size
,
FFI_SIZEOF_ARG
)
/
FFI_SIZEOF_ARG
;
i
++
;
}
/* Invoke the closure. */
(
closure
->
fun
)
(
cif
,
rvalue
,
avalue
,
closure
->
user_data
);
closure
->
fun
(
cif
,
rvalue
,
avalue
,
closure
->
user_data
);
/* Tell ffi_closure_osf how to perform return type promotions. */
return
cif
->
rtype
->
type
;
...
...
Modules/_ctypes/libffi/src/alpha/osf.S
Dosyayı görüntüle @
b3c8243c
/* -----------------------------------------------------------------------
osf.S - Copyright (c) 1998, 2001 Red Hat
osf.S - Copyright (c) 1998, 2001
, 2007
Red Hat
Alpha/OSF Foreign Function Interface
$Id: osf.S,v 1.2 2006/03/03 20:24:26 theller Exp $
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
``Software''), to deal in the Software without restriction, including
...
...
@@ -42,6 +40,8 @@
.align 3
.globl ffi_call_osf
.ent ffi_call_osf
FFI_HIDDEN(ffi_call_osf)
ffi_call_osf:
.frame $15, 32, $26, 0
.mask 0x4008000, -32
...
...
@@ -129,6 +129,8 @@ $LFE1:
.align 3
.globl ffi_closure_osf
.ent ffi_closure_osf
FFI_HIDDEN(ffi_closure_osf)
ffi_closure_osf:
.frame $30, 16*8, $26, 0
.mask 0x4000000, -16*8
...
...
@@ -265,7 +267,7 @@ $load_table:
.gprel32 $load_32 # FFI_TYPE_INT
.gprel32 $load_float # FFI_TYPE_FLOAT
.gprel32 $load_double # FFI_TYPE_DOUBLE
.gprel32 $load_
doubl
e # FFI_TYPE_LONGDOUBLE
.gprel32 $load_
non
e # FFI_TYPE_LONGDOUBLE
.gprel32 $load_u8 # FFI_TYPE_UINT8
.gprel32 $load_s8 # FFI_TYPE_SINT8
.gprel32 $load_u16 # FFI_TYPE_UINT16
...
...
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