diff options
author | Andy Wingo <wingo@pobox.com> | 2012-06-22 13:35:55 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2012-06-22 13:40:50 +0200 |
commit | b8bc86bce147cf280ca2a60d36c8b6493cbf11e8 (patch) | |
tree | 510c9f80953d586f40af3b5ad0ffa5fc7c0b2ec9 /doc/ref/compiler.texi | |
parent | afc74c2920d2f8f8424db9d6f554a91866cbac01 (diff) | |
download | guile-b8bc86bce147cf280ca2a60d36c8b6493cbf11e8.tar.gz |
instead of our custom .go format, use elf
* libguile/objcodes.c: Change to expect objcode on disk to be embedded
in ELF instead of having the funky cookie.
(to_native_order): Use already existing SCM_BYTE_ORDER style byte
order instead of chars.
(bytecode_to_objcode): No need for word_size arg.
(scm_bytecode_to_objcode, scm_objcode_to_bytecode): Take optional
endianness arg instead of sometimes using target-endianness.
(scm_load_objcode, scm_write_objcode, scm_bytecode_to_native_objcode):
Remove.
* libguile/objcodes.h: Adapt.
* libguile/vm.c (scm_load_compiled_with_vm): Use
scm_load_thunk_from_file.
(make_boot_program): Adapt to use scm_bytecode_to_objcode with
endianness arg.
* module/Makefile.am (OBJCODE_LANG_SOURCES): Add (language objcode
elf).
* module/language/objcode/elf.scm: New module, embeds objcode in ELF.
* module/language/bytecode/spec.scm (compile-objcode):
(decompile-objcode): Use (target-endianness).
* module/language/objcode/spec.scm: use (language objcode elf) for
write-objcode.
* module/scripts/disassemble.scm (disassemble):
* module/system/repl/command.scm (disassemble-file): Use
load-thunk-from-file.
* module/system/vm/objcode.scm: Remove load-objcode and write-objcode.
* test-suite/tests/asm-to-bytecode.test (test-target): Adapt to the new
ELF world.
Diffstat (limited to 'doc/ref/compiler.texi')
-rw-r--r-- | doc/ref/compiler.texi | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/doc/ref/compiler.texi b/doc/ref/compiler.texi index 692cb3684..d95cd02aa 100644 --- a/doc/ref/compiler.texi +++ b/doc/ref/compiler.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Guile Reference Manual. -@c Copyright (C) 2008, 2009, 2010, 2011 +@c Copyright (C) 2008, 2009, 2010, 2011, 2012 @c Free Software Foundation, Inc. @c See the file guile.texi for copying conditions. @@ -800,29 +800,36 @@ objcode)} module. Returns @code{#f} iff @var{obj} is object code, @code{#f} otherwise. @end deffn -@deffn {Scheme Procedure} bytecode->objcode bytecode +@deffn {Scheme Procedure} bytecode->objcode bytecode [endianness] @deffnx {C Function} scm_bytecode_to_objcode (bytecode) Makes a bytecode object from @var{bytecode}, which should be a -bytevector. @xref{Bytevectors}. +bytevector. @xref{Bytevectors}. By default, the embedded length fields +in the bytevector are interpreted in the native byte order. @end deffn -@deffn {Scheme Variable} load-objcode file -@deffnx {C Function} scm_load_objcode (file) +@deffn {Scheme Variable} load-thunk-from-file file +@deffnx {C Function} scm_load_thunk_from_file (file) Load object code from a file named @var{file}. The file will be mapped into memory via @code{mmap}, so this is a very fast operation. -On disk, object code has an sixteen-byte cookie prepended to it, to -prevent accidental loading of arbitrary garbage. +On disk, object code is embedded in ELF, a flexible container format +created for use in UNIX systems. Guile has its own ELF linker and +loader, so it uses the ELF format on all systems. @end deffn @deffn {Scheme Variable} write-objcode objcode file @deffnx {C Function} scm_write_objcode (objcode) -Write object code out to a file, prepending the sixteen-byte cookie. +Embed object code into an ELF container, and write it out to a file. + +This procedure is part of a separate module, @code{(language objcode +elf)}. @end deffn -@deffn {Scheme Variable} objcode->bytecode objcode +@deffn {Scheme Variable} objcode->bytecode objcode [endianness] @deffnx {C Function} scm_objcode_to_bytecode (objcode) -Copy object code out to a bytevector for analysis by Scheme. +Copy object code out to a bytevector for analysis by Scheme. By +default, the length fields in the @code{struct scm_objcode} are +interpreted in the native byte order. @end deffn The following procedure is actually in @code{(system vm program)}, but |