mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-29 16:30:19 +02:00
for mmap objcodes, store the fd in the third word, as a scheme int
This leaves space for native code. * libguile/objcodes.h (SCM_OBJCODE_NATIVE_CODE) (SCM_SET_OBJCODE_NATIVE_CODE): Reserve the fourth word of objcode for "native code", whatever that means. * libguile/objcodes.c: Update a comment. (make_objcode_by_mmap): Put the fd in the third word.
This commit is contained in:
parent
f9654187b1
commit
6ce3666ff2
2 changed files with 8 additions and 6 deletions
|
@ -45,11 +45,11 @@ verify (((sizeof (SCM_OBJCODE_COOKIE) - 1) & 7) == 0);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* The words in an objcode SCM object are as follows:
|
/* The words in an objcode SCM object are as follows:
|
||||||
- scm_tc7_objcode | the flags for this objcode
|
- scm_tc7_objcode | type | flags
|
||||||
- the struct scm_objcode C object
|
- the struct scm_objcode C object
|
||||||
- the parent of this objcode, if this is a slice, or #f if none
|
- the parent of this objcode: either another objcode, a bytevector,
|
||||||
- the file descriptor this objcode came from if this was mmaped,
|
or, in the case of mmap types, file descriptors (as an inum)
|
||||||
or 0 if none
|
- "native code" -- not currently used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static SCM
|
static SCM
|
||||||
|
@ -100,8 +100,7 @@ make_objcode_by_mmap (int fd)
|
||||||
|
|
||||||
sret = scm_double_cell (SCM_MAKE_OBJCODE_TAG (SCM_OBJCODE_TYPE_MMAP, 0),
|
sret = scm_double_cell (SCM_MAKE_OBJCODE_TAG (SCM_OBJCODE_TYPE_MMAP, 0),
|
||||||
(scm_t_bits)(addr + strlen (SCM_OBJCODE_COOKIE)),
|
(scm_t_bits)(addr + strlen (SCM_OBJCODE_COOKIE)),
|
||||||
SCM_UNPACK (SCM_BOOL_F),
|
SCM_UNPACK (scm_from_int (fd)), 0);
|
||||||
(scm_t_bits)fd);
|
|
||||||
|
|
||||||
/* FIXME: we leak ourselves and the file descriptor. but then again so does
|
/* FIXME: we leak ourselves and the file descriptor. but then again so does
|
||||||
dlopen(). */
|
dlopen(). */
|
||||||
|
|
|
@ -57,6 +57,9 @@ struct scm_objcode
|
||||||
#define SCM_OBJCODE_IS_SLICE(x) (SCM_OBJCODE_TYPE (x) == SCM_OBJCODE_TYPE_SLICE)
|
#define SCM_OBJCODE_IS_SLICE(x) (SCM_OBJCODE_TYPE (x) == SCM_OBJCODE_TYPE_SLICE)
|
||||||
#define SCM_OBJCODE_IS_STATIC(x) (SCM_OBJCODE_TYPE (x) == SCM_OBJCODE_TYPE_STATIC)
|
#define SCM_OBJCODE_IS_STATIC(x) (SCM_OBJCODE_TYPE (x) == SCM_OBJCODE_TYPE_STATIC)
|
||||||
|
|
||||||
|
#define SCM_OBJCODE_NATIVE_CODE(x) (SCM_CELL_WORD_3 (x))
|
||||||
|
#define SCM_SET_OBJCODE_NATIVE_CODE(x, code) (SCM_SET_CELL_WORD_3 (x, code))
|
||||||
|
|
||||||
SCM scm_c_make_objcode_slice (SCM parent, const scm_t_uint8 *ptr);
|
SCM scm_c_make_objcode_slice (SCM parent, const scm_t_uint8 *ptr);
|
||||||
SCM_API SCM scm_load_objcode (SCM file);
|
SCM_API SCM scm_load_objcode (SCM file);
|
||||||
SCM_API SCM scm_objcode_p (SCM obj);
|
SCM_API SCM scm_objcode_p (SCM obj);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue