[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