Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

#554 ari80386.c not generated <= discrepancy kernel/system

build problems
closed-fixed
Bruno Haible
clisp (525)
5
2011-04-03
2010-06-17
No

I'm running on Xen-4 a linux kernel for x86_64 (in an Intel i7), a virtual machine containing a debian lenny 32-bit system.
uname -m reports x86_64, but all the tools and libraries are 32-bit.

[pjb@mdi-development-1 localhost:12.0 ~]$ file /bin/ls /usr/lib/libcallback.so.0.0.0
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
/usr/lib/libcallback.so.0.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
[pjb@mdi-development-1 localhost:12.0 ~]$ uname -m
x86_64

When compiling clisp-2.48

# Doing INSTALL-PACKAGE on #<TARBALL-PACKAGE clisp>
{ ( source /usr/local/env.sh ; tar jxf "clisp-2.48.tar.bz2" ) >> /home/pjb/firms/medicalis/src/tools/clisp-2.48.log 2>&1 ; }
{ ( source /usr/local/env.sh ; ( cd "clisp-2.48" ; patch -p2 < ../"clisp-2.48"-sudo.patch ) ) >> /home/pjb/firms/medicalis/src/tools/clisp-2.48.log 2>&1 ; }
# Current directory: /home/pjb/firms/medicalis/src/tools/clisp-2.48/
{ ( source /usr/local/env.sh ; CFLAGS=-I"/usr/local"/include LDFLAGS=-L"/usr/local"/lib ./configure --prefix="/usr/local" && (cd src ; make && make install) ) >> /home/pjb/firms/medicalis/src/tools/clisp-2.48.log 2>&1 ; }

the compilation fails with this error:

gcc -I/home/pjb/firms/medicalis/src/tools/clisp-2.48/src/gllib -I/usr/local/include -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type -Wmissing-declarations -Wno-sign-compa\ re -Wno-format-nonliteral -O -falign-functions=4 -DUNICODE -DDYNAMIC_FFI -I. -c lisparit.c
In file included from lisparit.d:28:
arilev1.d:257:28: error: ari80386.c: No such file or directory
make[1]: *** [lisparit.o] Error 1
make[1]: Leaving directory `/home/pjb/firms/medicalis/src/tools/clisp-2.48/src'

configure identified a 64-bit system:

checking build system type... (cached) x86_64-unknown-linux-gnu
checking host system type... (cached) x86_64-unknown-linux-gnu

but this is only the kernel that is 64-bit.

Perhaps there would be a way to know what gcc can compile? Or to generate in all cases ari80386.c ?
Here are the ari*.c files:
[pjb@mdi-development-1 localhost:11.0 tools]$ ls clisp-2.48/src/ari*.c
clisp-2.48/src/ari80386.msvc.c clisp-2.48/src/arilev1c.c
clisp-2.48/src/aridecl.c clisp-2.48/src/arilev1e.c
clisp-2.48/src/arilev0.c clisp-2.48/src/arilev1i.c
clisp-2.48/src/arilev1.c
[pjb@mdi-development-1 localhost:11.0 tools]$

Discussion

  • Sam Steingold
    Sam Steingold
    2010-06-17

    1. you can force building 64-bit clisp using "./configure CC='gcc -m64' ..."
    2. please edit Makefile and add "--verbose" to the "./makemake" invocation in the "Makefile:" target; then touch makemake and do "make Makefile". This will print some information to the stderror, please cut and paste it here.
    3. please send us "gcc -print-multi-os-directory" output
    thanks!

     
  • 1- Well, I would like to compile a 32-bit version actually, so I tried CC='gcc -m32' but it ends the same way.
    2-
    [pjb@mdi-development-1 localhost:10.0 src]$ touch makemake
    [pjb@mdi-development-1 localhost:10.0 src]$ make Makefile
    ./makemake --verbose --with-dynamic-ffi --prefix=/usr/local > Makefile.tmp
    with_dynamic_ffi=yes
    # host system:
    hostname = "mdi-development-1"
    HSYS = "x86_64"
    HSYSOS = "linux"
    HOS = "unix"
    host_cpu = "x86_64"
    cpu = "x86_64"
    host_os = "linux-gnu"
    host = "x86_64-unknown-linux-gnu"
    # target system:
    TSYS = "x86_64"
    TSYSOS = "linux"
    TOS = "unix"
    mv Makefile Makefile~
    mv Makefile.tmp Makefile
    make: `Makefile' is up to date.

    3-

    [pjb@mdi-development-1 localhost:10.0 src]$ gcc -print-multi-os-directory
    ../lib
    [pjb@mdi-development-1 localhost:10.0 src]$

     
  • Sam Steingold
    Sam Steingold
    2010-06-22

    here is what I see on my 64-bit laptop:
    # host system:
    hostname = "sysu76"
    HSYS = "x86_64"
    HSYSOS = "linux"
    HOS = "unix"
    host_cpu = "x86_64"
    cpu = "x86_64"
    host_os = "linux-gnu"
    host = "x86_64-unknown-linux-gnu"
    # target system:
    TSYS = "x86_64"
    TSYSOS = "linux"
    TOS = "unix"
    $ gcc -print-multi-os-directory
    ../lib

    i.e., the same output for a 64-bit machine.

    1. please try cvs head instead: it has some updated scripts, it might detect the platform differently. if it does not, I think you should ask for help on the autoconf mailing list.
    2. please try this patch:

    --- makemake.in.~1.922.~ 2010-06-18 11:20:25.000000000 -0400
    +++ makemake.in 2010-06-22 10:07:32.002447000 -0400
    @@ -1123,7 +1123,7 @@ fi
    case "$host_cpu" in
    hppa*) cpu=hppa ;;
    arm*) cpu=arm ;;
    - x86_64) cpu=x86_64 ;;
    + x86_64) cpu=i386 ;;
    ia64) cpu=ia64 ;;
    mips) cpu=mips ;;
    mips64*) cpu=mips64 ;;

    obviously, this will never go through, I just want to make sure that the platform detection is the only problem.

     
  • Sam Steingold
    Sam Steingold
    2011-03-31

    did you try the makemake.in patch?

     
  • Bruno Haible
    Bruno Haible
    2011-04-03

    patch for 2.49

     
    Attachments
    uu
  • Bruno Haible
    Bruno Haible
    2011-04-03

    • summary: ari80384.c not generated <= discrepancy kernel/system --> ari80386.c not generated <= discrepancy kernel/system
     
  • Bruno Haible
    Bruno Haible
    2011-04-03

    Find attached a patch for clisp 2.49.
    In HEAD it was fixed by Sam on 2010-07-21 and 2010-09-01, through modifications in makemake.in.

    Note that this will only work if the linker (/usr/bin/ld) supports linking 32-bit objects. On a bi-arch openSUSE 11.0
    system, my linker reports an error in the "ld -r ..." command:

    ld -r -o lisp.o spvw.o spvwtabf.o spvwtabs.o spvwtabo.o eval.o control.o encoding.o pathname.o stream.o socket.o io.o funarg.o array.o hashtabl.o list.o package.o record.o weak.o sequence.o charstrg.o debug.o error.o misc.o time.o predtype.o symbol.o lisparit.o i18n.o unixaux.o built.o ari80386.o
    ld: Relocatable linking with relocations from format elf32-i386 (spvw.o) to format elf64-x86-64 (lisp.o) is not supported
    make: *** [lisp.a] Error 1

    Adding "--oformat elf32-i386" does not help, it produces the error:
    ld: Relocatable linking with relocations from format elf32-i386 (spvw.o) to format elf32-i386 (lisp.o) is not supported

    As a workaround, I really have to use a 32-bit ELF linker instead of /usr/bin/ld.

     
  • Bruno Haible
    Bruno Haible
    2011-04-03

    • status: open --> closed-fixed