summaryrefslogtreecommitdiff
path: root/libguile/objcodes.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-08-11 20:25:19 +0200
committerAndy Wingo <wingo@pobox.com>2009-08-11 20:25:44 +0200
commit86cfb42d56907c77e557b760328bfcee0d3be20c (patch)
tree8672677092f5e5c90bd9821c641bb3b720834b4c /libguile/objcodes.c
parentf5d7662fc86462fef68477fbfed994d2cf228e3e (diff)
downloadguile-86cfb42d56907c77e557b760328bfcee0d3be20c.tar.gz
include objcode cookie in the fallback path
* libguile/_scm.h (SCM_OBJCODE_COOKIE): Move the objcode cookie define here, so that load.c can use it. This is a private header. * libguile/load.c (FALLBACK_DIR): Include the objcode cookie in the fallback path. Should fix problems when objcode changes incompatibly during the 1.9 series. * libguile/objcodes.c: Adapt to SCM_OBJCODE_COOKIE move. This should fix http://article.gmane.org/gmane.lisp.guile.devel/9059.
Diffstat (limited to 'libguile/objcodes.c')
-rw-r--r--libguile/objcodes.c37
1 files changed, 9 insertions, 28 deletions
diff --git a/libguile/objcodes.c b/libguile/objcodes.c
index 91691a70a..19c2406b1 100644
--- a/libguile/objcodes.c
+++ b/libguile/objcodes.c
@@ -28,33 +28,14 @@
#include <sys/types.h>
#include <assert.h>
-#include <verify.h>
-
#include "_scm.h"
#include "vm-bootstrap.h"
#include "programs.h"
#include "objcodes.h"
-/* The endianness marker in objcode. */
-#ifdef WORDS_BIGENDIAN
-# define OBJCODE_ENDIANNESS "BE"
-#else
-# define OBJCODE_ENDIANNESS "LE"
-#endif
-
-#define _OBJCODE_STRINGIFY(x) # x
-#define OBJCODE_STRINGIFY(x) _OBJCODE_STRINGIFY (x)
-
-/* The word size marker in objcode. */
-#define OBJCODE_WORD_SIZE OBJCODE_STRINGIFY (SIZEOF_VOID_P)
-
-/* The objcode magic header. */
-#define OBJCODE_COOKIE \
- "GOOF-0.9-" OBJCODE_ENDIANNESS "-" OBJCODE_WORD_SIZE "---"
-
+/* SCM_OBJCODE_COOKIE is defined in _scm.h */
/* The length of the header must be a multiple of 8 bytes. */
-verify (((sizeof (OBJCODE_COOKIE) - 1) & 7) == 0);
-
+verify (((sizeof (SCM_OBJCODE_COOKIE) - 1) & 7) == 0);
/*
@@ -77,7 +58,7 @@ make_objcode_by_mmap (int fd)
if (ret < 0)
SCM_SYSERROR;
- if (st.st_size <= sizeof (struct scm_objcode) + strlen (OBJCODE_COOKIE))
+ if (st.st_size <= sizeof (struct scm_objcode) + strlen (SCM_OBJCODE_COOKIE))
scm_misc_error (FUNC_NAME, "object file too small (~a bytes)",
scm_list_1 (SCM_I_MAKINUM (st.st_size)));
@@ -88,18 +69,18 @@ make_objcode_by_mmap (int fd)
SCM_SYSERROR;
}
- if (memcmp (addr, OBJCODE_COOKIE, strlen (OBJCODE_COOKIE)))
+ if (memcmp (addr, SCM_OBJCODE_COOKIE, strlen (SCM_OBJCODE_COOKIE)))
{
SCM args = scm_list_1 (scm_from_locale_stringn
- (addr, strlen (OBJCODE_COOKIE)));
+ (addr, strlen (SCM_OBJCODE_COOKIE)));
(void) close (fd);
(void) munmap (addr, st.st_size);
scm_misc_error (FUNC_NAME, "bad header on object file: ~s", args);
}
- data = (struct scm_objcode*)(addr + strlen (OBJCODE_COOKIE));
+ data = (struct scm_objcode*)(addr + strlen (SCM_OBJCODE_COOKIE));
- if (data->len + data->metalen != (st.st_size - sizeof (*data) - strlen (OBJCODE_COOKIE)))
+ if (data->len + data->metalen != (st.st_size - sizeof (*data) - strlen (SCM_OBJCODE_COOKIE)))
{
(void) close (fd);
(void) munmap (addr, st.st_size);
@@ -109,7 +90,7 @@ make_objcode_by_mmap (int fd)
+ data->metalen)));
}
- SCM_NEWSMOB3 (sret, scm_tc16_objcode, addr + strlen (OBJCODE_COOKIE),
+ SCM_NEWSMOB3 (sret, scm_tc16_objcode, addr + strlen (SCM_OBJCODE_COOKIE),
SCM_PACK (SCM_BOOL_F), fd);
SCM_SET_SMOB_FLAGS (sret, SCM_F_OBJCODE_IS_MMAP);
@@ -270,7 +251,7 @@ SCM_DEFINE (scm_write_objcode, "write-objcode", 2, 0, 0,
SCM_VALIDATE_OBJCODE (1, objcode);
SCM_VALIDATE_OUTPUT_PORT (2, port);
- scm_c_write (port, OBJCODE_COOKIE, strlen (OBJCODE_COOKIE));
+ scm_c_write (port, SCM_OBJCODE_COOKIE, strlen (SCM_OBJCODE_COOKIE));
scm_c_write (port, SCM_OBJCODE_DATA (objcode),
sizeof (struct scm_objcode) + SCM_OBJCODE_TOTAL_LEN (objcode));