[Vm-dev] Cog on linux

Rob Withers reefedjib at yahoo.com
Fri Jul 16 09:20:36 UTC 2010


Eliot, note that I can provide you access to this box if you have the time to take a look.  

I get the sqLowLevelMFence()...

vawhigso at vawhigs.org [~/public_html/squeakelib/Cog/unixbuild/bld]# gcc -m32 -g -O2 -msse2 -D_GNU_SOURCE -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DCOGMTVM=0 -msse -DLSB_FIRST=1  -DHAVE_CONFIG_H  -DSQUEAK_BUILTIN_PLUGIN -I/home1/vawhigso/public_html/squeakelib/Cog/unixbuild/bld -I/home1/vawhigso/public_html/squeakelib/Cog/unixbuild/bld -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/unix/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm -I/home1/vawhigso/public_html/squeakelib/Cog/src/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/unix/vm -I/home1/vawhigso/public_html/squeakelib/Cog/src/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/plugins/FilePlugin -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/unix/plugins/B3DAcceleratorPlugin -I/home1/vawhigso/public_html/squeakelib/Cog/unixbuild/bld -I/home1/vawhigso/public_html/squeakelib/Cog/unixbuild/bld -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/unix/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm -I/home1/vawhigso/public_html/squeakelib/Cog/src/vm   -E -dM /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c | egrep "86|GLIBC|Fence"
#define M_SQRT1_2 0.70710678118654752440
#define VM_HOST_CPU "x86_64"
#define __GLIBC_PREREQ(maj,min) ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
#define __GLIBC__ 2
#define __GLIBC_HAVE_LONG_LONG 1
#define __DBL_MAX__ 1.7976931348623157e+308
#define M_SQRT1_2l 0.7071067811865475244008443621048490L
#define __i386 1
#define VM_HOST "x86_64-linux-gnu"
#define i386 1
#define __i386__ 1
#define M_1_PIl 0.3183098861837906715377675267450287L
#define __GLIBC_MINOR__ 5
#define M_1_PI 0.31830988618379067154
#define sqLowLevelMFence() asm volatile ("mfence")


and



vawhigso at vawhigs.org [~/public_html/squeakelib/Cog/unixbuild/bld]# gcc -m32 -g -O2 -msse2 -D_GNU_SOURCE -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DCOGMTVM=0 -msse -DLSB_FIRST=1  -DHAVE_CONFIG_H  -DSQUEAK_BUILTIN_PLUGIN -I/home1/vawhigso/public_html/squeakelib/Cog/unixbuild/bld -I/home1/vawhigso/public_html/squeakelib/Cog/unixbuild/bld -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/unix/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm -I/home1/vawhigso/public_html/squeakelib/Cog/src/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/unix/vm -I/home1/vawhigso/public_html/squeakelib/Cog/src/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/plugins/FilePlugin -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/unix/plugins/B3DAcceleratorPlugin -I/home1/vawhigso/public_html/squeakelib/Cog/unixbuild/bld -I/home1/vawhigso/public_html/squeakelib/Cog/unixbuild/bld -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/unix/vm -I/home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm -I/home1/vawhigso/public_html/squeakelib/Cog/src/vm   -E -dM /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqTicker.c | egrep "86|GLIBC|Fence"
#define M_SQRT1_2 0.70710678118654752440
#define VM_HOST_CPU "x86_64"
#define __GLIBC_PREREQ(maj,min) ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
#define __GLIBC__ 2
#define __GLIBC_HAVE_LONG_LONG 1
#define __DBL_MAX__ 1.7976931348623157e+308
#define M_SQRT1_2l 0.7071067811865475244008443621048490L
#define __i386 1
#define VM_HOST "x86_64-linux-gnu"
#define i386 1
#define __i386__ 1
#define M_1_PIl 0.3183098861837906715377675267450287L
#define __GLIBC_MINOR__ 5
#define M_1_PI 0.31830988618379067154
#define sqLowLevelMFence() asm volatile ("mfence")


Now I am getting a different error and this error like the last one is when building squeak itself, the last step.

gcc -m32 -g -O2 -msse2 -D_GNU_SOURCE -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DCOGMTVM=0 -msse -DLSB_FIRST=1 -o squeak disabledPlugins.o version.o -Wl,--export-dynamic  vm/vm.a ADPCMCodecPlugin/ADPCMCodecPlugin.a AsynchFilePlugin/AsynchFilePlugin.a B2DPlugin/B2DPlugin.a BitBltPlugin/BitBltPlugin.a BMPReadWriterPlugin/BMPReadWriterPlugin.a CroquetPlugin/CroquetPlugin.a ZipPlugin/ZipPlugin.a DropPlugin/DropPlugin.a DSAPrims/DSAPrims.a FFTPlugin/FFTPlugin.a FileCopyPlugin/FileCopyPlugin.a FilePlugin/FilePlugin.a FloatArrayPlugin/FloatArrayPlugin.a FloatMathPlugin/FloatMathPlugin.a IA32ABI/IA32ABI.a JoystickTabletPlugin/JoystickTabletPlugin.a JPEGReaderPlugin/JPEGReaderPlugin.a JPEGReadWriter2Plugin/JPEGReadWriter2Plugin.a Klatt/Klatt.a LargeIntegers/LargeIntegers.a Matrix2x3Plugin/Matrix2x3Plugin.a MIDIPlugin/MIDIPlugin.a MiscPrimitivePlugin/MiscPrimitivePlugin.a Mpeg3Plugin/Mpeg3Plugin.a RePlugin/RePlugin.a SecurityPlugin/SecurityPlugin.a SerialPlugin/SerialPlugin.a SocketPlugin/SocketPlugin.a SoundCodecPrims/SoundCodecPrims.a SoundGenerationPlugin/SoundGenerationPlugin.a SoundPlugin/SoundPlugin.a StarSqueakPlugin/StarSqueakPlugin.a SurfacePlugin/SurfacePlugin.a -lutil -ldl -lpthread -lm -lnsl -lpthread vm/vm.a -Wl,--rpath -Wl,/usr/local/lib
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(gcc3x-cointerp.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(cogit.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(sqNamedPrims.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(sqVirtualMachine.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(sqHeapMap.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(aio.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(debug.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(osExports.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(sqUnixMemory.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(sqUnixCharConv.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `vm/vm.a(sqUnixVMProfile.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(FloatMathPlugin.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(acos.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(acosh.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(asin.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(asinh.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(atan.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(atan2.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(atanh.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(cos.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(cosh.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(exp.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(expm1.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(fmod.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(hypot.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(k_cos.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(k_sin.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(ldexp.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(log.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(log10.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(log1p.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(modf.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(pow.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(rem_pio2.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(scalbn.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(sin.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(sinh.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(sqrt.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(tan.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(tanh.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(finite.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(k_rem_pio2.o)' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `FloatMathPlugin/FloatMathPlugin.a(k_tan.o)' is incompatible with i386 output

   text    data     bss     dec     hex filename
 952169   44560  297284 1294013  13bebd squeak

make: *** [squeak] Segmentation fault
make: *** Deleting file `squeak'


Rob


From: Eliot Miranda 
Sent: Thursday, July 15, 2010 9:04 PM
To: Squeak Virtual Machine Development Discussion 
Subject: Re: [Vm-dev] Cog on linux




--------------------------------------------------------------------------------





On Thu, Jul 15, 2010 at 4:49 PM, Rob Withers <reefedjib at yahoo.com> wrote:



  I get the following:

  vawhigso at vawhigs.org [~/public_html/squeakelib/Cog]# gcc -m32 -E -dM platforms/Cross/vm/sqMemoryFence.h | egrep "86|GNUC"
  #define __GNUC_PATCHLEVEL__ 2
  #define __GNUC__ 4
  #define __DBL_MAX__ 1.7976931348623157e+308
  #define __i386 1
  #define i386 1
  #define __i386__ 1
  #define __GNUC_RH_RELEASE__ 48
  #define __GNUC_MINOR__ 1
  #define __GNUC_GNU_INLINE__ 1


  vawhigso at vawhigs.org [~/public_html/squeakelib/Cog]# gcc -m64 -E -dM platforms/Cross/vm/sqMemoryFence.h | egrep "86|GNUC"
  #define __GNUC__ 4
  #define __DBL_MAX__ 1.7976931348623157e+308
  #define __x86_64 1
  #define __GNUC_RH_RELEASE__ 48
  #define __x86_64__ 1
  #define __GNUC_PATCHLEVEL__ 2
  #define __GNUC_MINOR__ 1
  #define __GNUC_GNU_INLINE__ 1

  It looks like I match the incantation, as both 32 and 64.  Not sure what to change.


You need to figure out why, when sqMemoryFence.h is included by sqExternalSemaphores.c and sqTicker.c, the following macro in sqMemoryFence.h is not being defined or not being expanded:


#if defined(__GNUC__) && (defined(i386) || defined(__i386) || defined(__i386__) || defined(_X86_))
# if defined(__MINGW32__) && !__SSE2__
    /* Andreas is fond of the gcc 2.95 MINGW but it lacks sse2 support */
#   define sqLowLevelMFence() asm volatile (".byte 0x0f;.byte 0xae;.byte 0xf0")
# else
#   define sqLowLevelMFence() asm volatile ("mfence")
# endif
#else
# if !defined(sqLowLevelMFence)
extern void sqLowLevelMFence(void);
# endif
#endif


i.e. from the above 
#   define sqLowLevelMFence() asm volatile ("mfence")
should be live and hence in sqExternalSemaphores.c and sqTicker.c sqLowLevelMFence() should expand to asm volatile ("mfence").


gcc -E or gcc -P will run the preprocessor, so run the make capturing the compile commands for these two and retry the command deleting -c thefile and adding -E.  Then look at the output and see what files are included (is sqMemoryFence.h being included?) and then if it is find out why, if as the -dM output above indicates, the macro isn't being defined given the above tests for both __GNUC__ and __i386__.


HTH
Eliot



  Rob


  From: Eliot Miranda 
  Sent: Thursday, July 15, 2010 6:27 PM
  To: Squeak Virtual Machine Development Discussion 
  Subject: Re: [Vm-dev] Cog on linux




------------------------------------------------------------------------------





  On Thu, Jul 15, 2010 at 2:54 PM, Rob Withers <reefedjib at yahoo.com> wrote:


    (I am having trouble quoting Eliot's email as well.  Plain text is best)



  OK.




    I finally figured out how to specify to configure to use -m32 on the CFLAGS entries.  It is a part of the invocation of configure.

    ../../platforms/unix/config/configure CFLAGS="-m32 -g -O2 -msse2 -D_GNU_SOURCE -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DCOGMTVM=0" LIBS=-lpthread

    I seem to have gotten past the problem with sqUnixHeartbeat.c and now I have a new problem:

    vm/vm.a(sqExternalSemaphores.o): In function `doSignalExternalSemaphores':
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:198: undefined reference to `sqLowLevelMFence'



  gcc -E -dM should print predefined macros.  e.g.


  McStalker.oscogvm$ gcc -m32 -E -dM platforms/Cross/vm/sqMemoryFence.h | egrep "86|GNUC"
  #define __GNUC__ 4
  #define __DBL_MAX__ 1.7976931348623157e+308
  #define __i386 1
  #define i386 1
  #define __i386__ 1
  #define __GNUC_PATCHLEVEL__ 1
  #define __GNUC_MINOR__ 2
  #define __GNUC_GNU_INLINE__ 1
  McStalker.oscogvm$ gcc -m64 -E -dM platforms/Cross/vm/sqMemoryFence.h | egrep "86|GNUC"
  #define __GNUC__ 4
  #define __DBL_MAX__ 1.7976931348623157e+308
  #define __x86_64 1
  #define __x86_64__ 1
  #define __GNUC_PATCHLEVEL__ 1
  #define __GNUC_MINOR__ 2
  #define __GNUC_GNU_INLINE__ 1


  You'll then see what names are given to define x86/IA32 on your system.  You can then edit the following incantation to include your configuration (and let me know what it is).


   #if defined(__GNUC__) && (defined(i386) || defined(__i386) || defined(__i386__) || defined(_X86_))


  HTH
  Eliot


    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:213: undefined reference to `sqLowLevelMFence'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:184: undefined reference to `sqLowLevelMFence'
    vm/vm.a(sqExternalSemaphores.o): In function `signalSemaphoreWithIndex':
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:130: undefined reference to `sqLowLevelMFence'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:131: undefined reference to `sqAtomicAddConst'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:147: undefined reference to `sqLowLevelMFence'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:148: undefined reference to `sqCompareAndSwap'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:152: undefined reference to `sqLowLevelMFence'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:153: undefined reference to `sqCompareAndSwap'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:135: undefined reference to `sqLowLevelMFence'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:136: undefined reference to `sqCompareAndSwap'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:140: undefined reference to `sqLowLevelMFence'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqExternalSemaphores.c:141: undefined reference to `sqCompareAndSwap'
    vm/vm.a(sqTicker.o): In function `checkHighPriorityTickees':
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqTicker.c:211: undefined reference to `sqLowLevelMFence'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqTicker.c:217: undefined reference to `sqCompareAndSwapRes'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqTicker.c:227: undefined reference to `sqLowLevelMFence'
    vm/vm.a(sqTicker.o): In function `addHighPriorityTickee':
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqTicker.c:185: undefined reference to `sqLowLevelMFence'
    vm/vm.a(sqTicker.o): In function `ioSynchronousCheckForEvents':
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqTicker.c:128: undefined reference to `sqLowLevelMFence'
    vm/vm.a(sqTicker.o): In function `addHighPriorityTickee':
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqTicker.c:193: undefined reference to `sqLowLevelMFence'
    /home1/vawhigso/public_html/squeakelib/Cog/platforms/Cross/vm/sqTicker.c:193: undefined reference to `sqLowLevelMFence'
    collect2: ld returned 1 exit status
    make: *** [squeak] Error 1 


    --------------------------------------------------
    From: "Levente Uzonyi" <leves at elte.hu>

    Sent: Thursday, July 15, 2010 3:38 PM
    To: "Squeak Virtual Machine Development Discussion" <vm-dev at lists.squeakfoundation.org> 

    Subject: Re: [Vm-dev] Cog on linux




      On Thu, 15 Jul 2010, Rob Withers wrote:

      (Pine is unable to quote your mail...)

      The question is: is your OS 32 or 64-bit? The CPU doesn't matter here. If your OS is 64-bit then you'll probably need the gcc-multilibs package (or equivalent for your platform) and as Eliot suggested the -m32 switch for compilation and linking. To run the resulting VM, you'll need the ia32-libs package (or equivalent for your platform), but you already have that if you can run the prebuilt SqueakVM.


      Levente 








-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20100716/29f1afd3/attachment-0001.htm


More information about the Vm-dev mailing list