Skip to content
Snippets Groups Projects
Commit 95322e54 authored by rtoy's avatar rtoy
Browse files

From A.M.Raportirenko, on cmucl-imp, Sep 25, 2009: dirname

destructively modifies its argument.

lisp/save.c:
o Call dirname once, saving the result, and use it everywhere.
parent 5768a002
No related branches found
No related tags found
No related merge requests found
/*
$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/save.c,v 1.21 2008/12/10 16:16:11 rtoy Exp $
$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/save.c,v 1.22 2009/09/28 12:32:42 rtoy Rel $
This code was written as part of the CMU Common Lisp project at
Carnegie Mellon University, and has been placed in the public domain.
......@@ -247,6 +247,7 @@ save(char *filename, lispobj init_function, int sse2_mode)
boolean
save_executable(char *filename, lispobj init_function)
{
char *dir_name;
#if defined WANT_CGC
volatile lispobj *func_ptr = &init_function;
......@@ -269,6 +270,8 @@ save_executable(char *filename, lispobj init_function)
if(SymbolValue(X86_CGC_ACTIVE_P) != NIL)
SetSymbolValue(ALLOCATION_POINTER, DYNAMIC_0_SPACE_START);
#endif
dir_name = dirname(strdup(filename));
printf("[Undoing binding stack... ");
fflush(stdout);
unbind_to_here((lispobj *)BINDING_STACK_START);
......@@ -285,11 +288,11 @@ save_executable(char *filename, lispobj init_function)
fflush(stdout);
printf("read-only... ");
fflush(stdout);
write_elf_object(dirname(filename), READ_ONLY_SPACE_ID, (os_vm_address_t)read_only_space,
write_elf_object(dir_name, READ_ONLY_SPACE_ID, (os_vm_address_t)read_only_space,
(os_vm_address_t)SymbolValue(READ_ONLY_SPACE_FREE_POINTER));
printf("static... ");
fflush(stdout);
write_elf_object(dirname(filename), STATIC_SPACE_ID, (os_vm_address_t)static_space,
write_elf_object(dir_name, STATIC_SPACE_ID, (os_vm_address_t)static_space,
(os_vm_address_t)SymbolValue(STATIC_SPACE_FREE_POINTER));
#ifdef GENCGC
/* Flush the current_region updating the tables. */
......@@ -345,10 +348,10 @@ save_executable(char *filename, lispobj init_function)
printf("dynamic... ");
fflush(stdout);
#ifdef reg_ALLOC
write_elf_object(dirname(filename), DYNAMIC_SPACE_ID, (os_vm_address_t)current_dynamic_space,
write_elf_object(dir_name, DYNAMIC_SPACE_ID, (os_vm_address_t)current_dynamic_space,
(os_vm_address_t)current_dynamic_space_free_pointer);
#else
write_elf_object(dirname(filename), DYNAMIC_SPACE_ID, (os_vm_address_t)current_dynamic_space,
write_elf_object(dir_name, DYNAMIC_SPACE_ID, (os_vm_address_t)current_dynamic_space,
(os_vm_address_t)SymbolValue(ALLOCATION_POINTER));
#endif
......@@ -358,7 +361,7 @@ save_executable(char *filename, lispobj init_function)
printf("Linking executable...\n");
fflush(stdout);
elf_run_linker(init_function, filename);
elf_cleanup(dirname(filename));
elf_cleanup(dir_name);
printf("done.\n");
exit(0);
......
#!/bin/sh -x
# $Id: linker.sh,v 1.7 2007/08/14 15:57:48 rtoy Exp $
# $Id: linker.sh,v 1.8 2009/09/28 12:32:42 rtoy Rel $
# This file was written by Fred Gilham and is placed in the public domain.
# It comes without warranty of any kind.
......@@ -51,6 +51,9 @@ VER=''
# Default values
OUTPUT="-o $2"
OUTDIR=`dirname $2`
CURDIR=`pwd`
LINKER=/usr/bin/ld
CMUCLLIB=`dirname $0`
OBJS="--whole-archive $CMUCLLIB/lisp.a --no-whole-archive"
......@@ -128,6 +131,8 @@ case "$OPSYS" in
;;
esac
cd $OUTDIR
$LINKER $SCRIPT $DLINKER $OUTPUT $STARTCRT $FLAGS $BIFLAG $IFADDR $OBJS $LIBS $ENDCRT
cd $CURDIR
exit 0
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment