diff options
author | Ludovic Courtès <ludo@gnu.org> | 2009-07-15 23:53:22 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2009-07-15 23:53:22 +0200 |
commit | ec99fe8ecb412e49e8e981246eb62ca46b32754b (patch) | |
tree | cf1a08b33982387cfd26053db70cb65af8edc16d | |
parent | 5bd047cefa9ffcf17751dbeda1fa56ae56f45199 (diff) | |
download | guile-ec99fe8ecb412e49e8e981246eb62ca46b32754b.tar.gz |
Add FIXMEs about misaligned objcode-metas.
* libguile/objcodes.c (scm_c_make_objcode_slice): Add comment about
misaligned `objcode-meta'.
* module/language/assembly/compile-bytecode.scm (write-bytecode):
Likewise.
-rw-r--r-- | libguile/objcodes.c | 6 | ||||
-rw-r--r-- | module/language/assembly/compile-bytecode.scm | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/libguile/objcodes.c b/libguile/objcodes.c index 69e464c3b..a2105530f 100644 --- a/libguile/objcodes.c +++ b/libguile/objcodes.c @@ -138,6 +138,12 @@ scm_c_make_objcode_slice (SCM parent, const scm_t_uint8 *ptr) scm_from_uint32 (parent_data->len), scm_from_uint32 (parent_data->metalen))); +#if 0 + /* FIXME: We currently generate bytecode where the objcode-meta isn't + suitable aligned, which is an issue on some arches (e.g., SPARC). */ + assert ((((uintptr_t) ptr) & (__alignof__ (struct scm_objcode) - 1UL)) == 0); +#endif + data = (struct scm_objcode*)ptr; if (data->base + data->len + data->metalen > parent_data->base + parent_data->len + parent_data->metalen) abort (); diff --git a/module/language/assembly/compile-bytecode.scm b/module/language/assembly/compile-bytecode.scm index 73ed620d6..4b9f7b701 100644 --- a/module/language/assembly/compile-bytecode.scm +++ b/module/language/assembly/compile-bytecode.scm @@ -110,6 +110,9 @@ (set! i (1+ i)) (if (> i 0) (write-byte x)))) (get-addr (lambda () i))) + ;; FIXME: We should add padding here so that META's bytecode + ;; meets the alignment requirements of `scm_objcode'. See + ;; `scm_c_make_objcode_slice ()'. (write-bytecode meta write get-addr '())))) ((load-unsigned-integer ,str) (write-loader str)) ((load-integer ,str) (write-loader str)) |