Opened 6 months ago

Closed 6 months ago

#1433 closed defect (worksforme)

Static egg linkling seems to be broken

Reported by: felix Owned by:
Priority: critical Milestone: 5.0
Component: core libraries Version: 5.0
Keywords: Cc: sjamaan
Estimated difficulty: medium

Description

Compiling this with srfi-1 egg installed attempts to load a shared library and fails

(import srfi-1)

With `csc -static x.scm -kv -debug 2:

'/home/felix/chicken/chicken-5-master/bin/chicken' 'x.scm' -output-file 'x.c' -static -verbose -debug 2 -emit-link-file x.link

Note: re-importing already imported identifier: assoc

Note: re-importing already imported identifier: member
[canonicalized]
(##core#callunit library)

(##core#callunit eval)

(##core#callunit expand)

(##core#callunit srfi-1)

(##core#undefined)

(##core#undefined)

(##core#undefined)

(scheme#eval '(import-for-syntax scheme chicken.base chicken.syntax))

(scheme#eval '(import scheme chicken.base chicken.syntax))

(##core#undefined)

(scheme#newline)

((chicken.base#implicit-exit-handler))

'gcc' 'x.c' -o 'x.o' -c  -fno-strict-aliasing -fwrapv -DHAVE_CHICKEN_CONFIG_H -DC_ENABLE_PTABLES -g -Wall -Wno-unused -I/home/felix/chicken/chicken-5-master/include/chicken
'gcc' 'x.o' '/home/felix/chicken/chicken-5-master/lib/chicken/9/srfi-1.o' -o 'x' -L/home/felix/chicken/chicken-5-master/lib  -Wl,-R'/home/felix/chicken/chicken-5-master/lib' /home/felix/chicken/chicken-5-master/lib/libchicken.a -lm -ldl
[debug] application startup...
[debug] heap resized to 1048576 bytes
[debug] stack bottom is 0x7fff624cffd0.
[debug] entering toplevel...
[debug] entering library...
[debug] entering build-version...
[debug] entering eval...
[debug] entering chicken-syntax...
[debug] entering expand...
[debug] entering internal...
[debug] entering modules...
[debug] entering srfi-1...
; loading /home/felix/chicken/chicken-5-master/lib/chicken/9/chicken.import.so ...

Error: (load) during expansion of (import-syntax ...) - unable to load compiled module - cannot load compiled code dynamically - this is a statically linked executable: "/home/felix/chicken/chicken-5-master/lib/chicken/9/chicken.import.so"

	Call history:

	<syntax>	  (import scheme chicken.base chicken.syntax)
	<syntax>	  (##core#begin (##core#require library scheme#) (##core#require library chicken.base#) (##core#requir...
	<syntax>	  (##core#require library scheme#)
	<syntax>	  (##sys#load-library (##core#quote library))
	<syntax>	  (##core#quote library)
	<syntax>	  (##core#require library chicken.base#)
	<syntax>	  (##sys#load-library (##core#quote library))
	<syntax>	  (##core#quote library)
	<syntax>	  (##core#begin (##core#require expand chicken.syntax#))
	<syntax>	  (##core#require expand chicken.syntax#)
	<syntax>	  (##sys#load-library (##core#quote expand))
	<syntax>	  (##core#quote expand)
	<eval>	  (##sys#load-library (##core#quote library))
	<eval>	  (##sys#load-library (##core#quote library))
	<eval>	  (##sys#load-library (##core#quote expand))
	<syntax>	  (import-syntax (except scheme member assoc) chicken)	<--
␄

Change History (9)

comment:1 Changed 6 months ago by felix

Actually, the command is:

csc -static x.scm -kv -debug 2 && ./x -:rd

It looks like srfi-1.scm actually is triggering the loading of chicken.import.so, which it shouldn't.

Last edited 6 months ago by felix (previous) (diff)

comment:2 follow-up: Changed 6 months ago by evhan

Hey Felix, I can't reproduce this. What revision of CHICKEN and the srfi-1 egg is this?

The output I see is this, which is what's expected, I think:

$ /nowhere/bin/csc -static x.scm -kv -debug 2 && ./x -:rd
'/nowhere/bin/chicken' 'x.scm' -output-file 'x.c' -static -verbose -debug 2 -emit-link-file x.link

Note: re-importing already imported identifier: assoc

Note: re-importing already imported identifier: member
[canonicalized]
(##core#callunit library)

(##core#callunit eval)

(##core#callunit expand)

(##core#callunit srfi-1)

(##core#undefined)

(##core#undefined)

(##core#undefined)

(##core#undefined)

((chicken.base#implicit-exit-handler))

'gcc' 'x.c' -o 'x.o' -c  -fno-strict-aliasing -fwrapv -DHAVE_CHICKEN_CONFIG_H -DC_ENABLE_PTABLES -Os -fomit-frame-pointer -I/nowhere/include/chicken
'gcc' 'x.o' '/nowhere/lib/chicken/9/srfi-1.o' -o 'x' -L/nowhere/lib  -Wl,-R'/nowhere/lib' /nowhere/lib/libchicken.a -lm -ldl
[debug] application startup...
[debug] heap resized to 1048576 bytes
[debug] stack bottom is 0x7fff1c6ddf60.
[debug] entering toplevel...
[debug] entering library...
[debug] entering build-version...
[debug] entering eval...
[debug] entering chicken-syntax...
[debug] entering expand...
[debug] entering internal...
[debug] entering modules...
[debug] resizing mutation stack from 8k to 16k ...
[debug] entering srfi-1...
chicken.base#implicit-exit-handler
[debug] forcing finalizers...
[debug] application terminated normally

Versions:

$ /nowhere/bin/chicken -version
(c) 2008-2017, The CHICKEN Team
(c) 2000-2007, Felix L. Winkelmann
Version 5.0.0 (rev 57ec6d2b)
linux-unix-gnu-x86-64 [ 64bit dload ptables ]
$ git show -q # in the chicken-5-eggs repo
commit 36c190d79b415a91ecbbea3cb95f946ae837dd5e
Author: felix <felix@call-with-current-continuation.org>
Date:   Mon Dec 25 15:00:29 2017 +0100

    Added big-chicken

comment:3 in reply to: ↑ 2 Changed 6 months ago by felix

Replying to evhan:

Hey Felix, I can't reproduce this. What revision of CHICKEN and the srfi-1 egg is this?

Using the same srfi-1 version and master HEAD (with and without Peter's last 3 patches). But I'll try again.

comment:4 Changed 6 months ago by felix

I tried once more, with clean install locations and this seems indeed only happen with the recent three patches by sjamaan:

0001-Remove-obsolete-deprecated-stuff.patch
0002-Drop-weird-macro-workarounds-in-favour-of-chicken.in.patch
0003-Include-definitions-of-default-modules-into-modules..patch

comment:5 follow-up: Changed 6 months ago by sjamaan

I built a clean version of CHICKEN 5 with and without the patches, and didn't get the error. Maybe you were using a stale copy of srfi-1?

If you're using the "local" repository you will need to uninstall and git clean -df before retrying, I think.

comment:6 in reply to: ↑ 5 ; follow-up: Changed 6 months ago by felix

Replying to sjamaan:

I built a clean version of CHICKEN 5 with and without the patches, and didn't get the error. Maybe you were using a stale copy of srfi-1?

If you're using the "local" repository you will need to uninstall and git clean -df before retrying, I think.

Did you purge the egg install cache? And can you give me the complete genealogy of the csc you are finally using? (including intermediate steps of producing (boot-)chickens)

comment:7 in reply to: ↑ 6 Changed 6 months ago by sjamaan

Replying to felix:

Replying to sjamaan:

I built a clean version of CHICKEN 5 with and without the patches, and didn't get the error. Maybe you were using a stale copy of srfi-1?

If you're using the "local" repository you will need to uninstall and git clean -df before retrying, I think.

Did you purge the egg install cache? And can you give me the complete genealogy of the csc you are finally using? (including intermediate steps of producing (boot-)chickens)

From the top (on a clean Linux system without CHICKEN 5):

First install pre4:

$ rm -rf ~/.chicken-install.cache
$ wget https://code.call-cc.org/dev-snapshots/2017/12/14/chicken-5.0.0pre4.tar.gz
$ tar xzf chicken-5.0.0pre4.tar.gz
$ cd chicken-5.0.0pre4
$ make PLATFORM=linux PREFIX=/home/peter/chickens/5.0.0pre4 install

Next, apply patches and build a boot-chicken, then use that to build the actual CHICKEN:

$ cd ../chicken-core
$ git clean -df
$ git am < ~/0001-Remove-obsolete-deprecated-stuff.patch
$ git am < ~/0002-Drop-weird-macro-workarounds-in-favour-of-chicken.in.patch
$ git am < ~/0003-Include-definitions-of-default-modules-into-modules..patch
$ make PLATFORM=linux CHICKEN=/home/peter/chickens/5.0.0pre4/bin/chicken boot-chicken
$ make PLATFORM=linux CHICKEN=./chicken-boot PREFIX=/home/peter/chickens/chicken-5 install

Now, run the test program:

$ cd /tmp
$ ~/chickens/chicken-5/bin/chicken-install srfi-1
$ echo '(import srfi-1)' > test.scm
$ ~/chickens/chicken-5/bin/csc  -static test.scm -kv -debug 2

Let's check it's statically linked (no libchicken in there):

$ ldd test
        linux-vdso.so.1 (0x00007fffa6ff1000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9507f4a000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9507d46000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f95079a7000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f9508686000)

OK, great. Now let's run it:

$ ./test -:rd
[debug] application startup...
[debug] heap resized to 1048576 bytes
[debug] stack bottom is 0x7ffdf3e09100.
[debug] entering toplevel...
[debug] entering library...
[debug] entering build-version...
[debug] entering eval...
[debug] entering chicken-syntax...
[debug] entering expand...
[debug] entering internal...
[debug] entering modules...
[debug] entering srfi-1...
scheme#eval
scheme#eval
chicken.base#implicit-exit-handler
[debug] forcing finalizers...
[debug] application terminated normally

This gave me no errors.

comment:8 Changed 6 months ago by sjamaan

Oh, BTW, I had revision 57ec6d2b4dc6110db0b24f48cae2cfa0e29fa48a of master checked out in my chicken-core git repo.

comment:9 Changed 6 months ago by felix

  • Resolution set to worksforme
  • Status changed from new to closed

I seem to have conflated several issues.

Note: See TracTickets for help on using tickets.