mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
write-objcode uses target-endianness, target-word-size
* libguile/_scm.h (SCM_OBJCODE_ENDIANNESS_OFFSET): (SCM_OBJCODE_WORD_SIZE_OFFSET): New defines. * libguile/objcodes.c (scm_write_objcode): Use target-endianness and target-word-size when writing the objcode cookie.
This commit is contained in:
parent
34ed9dfd1f
commit
f0b7c3c6b9
2 changed files with 32 additions and 1 deletions
|
@ -219,6 +219,9 @@
|
|||
/* The objcode magic header. */
|
||||
#define SCM_OBJCODE_COOKIE \
|
||||
"GOOF----" SCM_OBJCODE_MACHINE_VERSION_STRING
|
||||
#define SCM_OBJCODE_ENDIANNESS_OFFSET 8
|
||||
#define SCM_OBJCODE_WORD_SIZE_OFFSET 11
|
||||
|
||||
|
||||
#endif /* SCM__SCM_H */
|
||||
|
||||
|
|
|
@ -327,10 +327,38 @@ SCM_DEFINE (scm_write_objcode, "write-objcode", 2, 0, 0,
|
|||
"")
|
||||
#define FUNC_NAME s_scm_write_objcode
|
||||
{
|
||||
static SCM target_endianness_var = SCM_BOOL_F;
|
||||
static SCM target_word_size_var = SCM_BOOL_F;
|
||||
|
||||
char cookie[sizeof (SCM_OBJCODE_COOKIE) - 1];
|
||||
char endianness;
|
||||
char word_size;
|
||||
|
||||
SCM_VALIDATE_OBJCODE (1, objcode);
|
||||
SCM_VALIDATE_OUTPUT_PORT (2, port);
|
||||
|
||||
scm_c_write (port, SCM_OBJCODE_COOKIE, strlen (SCM_OBJCODE_COOKIE));
|
||||
if (scm_is_false (target_endianness_var))
|
||||
target_endianness_var =
|
||||
scm_c_public_variable ("system base target", "target-endianness");
|
||||
if (scm_is_false (target_word_size_var))
|
||||
target_word_size_var =
|
||||
scm_c_public_variable ("system base target", "target-word-size");
|
||||
|
||||
endianness =
|
||||
scm_is_eq (scm_call_0 (scm_variable_ref (target_endianness_var)),
|
||||
scm_endianness_big) ? 'B' : 'L';
|
||||
switch (scm_to_int (scm_call_0 (scm_variable_ref (target_word_size_var))))
|
||||
{
|
||||
case 4: word_size = '4'; break;
|
||||
case 8: word_size = '8'; break;
|
||||
default: abort ();
|
||||
}
|
||||
|
||||
memcpy (cookie, SCM_OBJCODE_COOKIE, strlen (SCM_OBJCODE_COOKIE));
|
||||
cookie[SCM_OBJCODE_ENDIANNESS_OFFSET] = endianness;
|
||||
cookie[SCM_OBJCODE_WORD_SIZE_OFFSET] = word_size;
|
||||
|
||||
scm_c_write (port, cookie, strlen (SCM_OBJCODE_COOKIE));
|
||||
scm_c_write (port, SCM_OBJCODE_DATA (objcode),
|
||||
sizeof (struct scm_objcode) + SCM_OBJCODE_TOTAL_LEN (objcode));
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue