[Vm-dev] attempting to build BochsX64Plugin on 32-bit Ubuntu
Robert Withers
robert.w.withers at gmail.com
Mon Oct 26 02:37:32 UTC 2015
I removed the double-dots parent directory from the include statement
with no change - still getting this issue and running out of ideas.
I changed:
-I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build/../../bochs86
to: -I/home/rabbit/warren/oscogvm/build.linux32x86/bochs86
Robert
On 10/25/2015 08:39 PM, Robert Withers wrote:
> Yes, Eliot, I see what you are saying...
>
> On 10/25/2015 07:47 PM, Eliot Miranda wrote:
>>
>>
>>
>> Hi Robert,
>>
>> On Sun, Oct 25, 2015 at 12:05 PM, Robert Withers
>> <robert.w.withers at gmail.com> wrote:
>>
>>
>> Eliot, thank you for that orientation. I looked at your mac but
>> had to go one more step. I realized I probably couldn't build
>> both BochsIA32Plugin and BochsX64Plugin at the same time while
>> sharing the processors/IA32 support code - it is compiled
>> separately for IA32 and X64. So I added a processors/X64
>> directory, with a seaparate copy of Bochs for 64-bit emulation,
>> built the libs with your conf.COG from mac, and built both Bochs
>> plugins. I am attaching the link to BochsX64Plugin for 32-bit
>> linux:
>> https://www.dropbox.com/s/g73feosuzlx45le/BochsX64Plugin.11-25-2015.tgz?dl=0
>>
>>
>> You definitely /don't/ need a separate copy and /can/ use the IA32
>> Bochs sources. It works fine. That's what I've been doing. Look at
>> the conf.COG files. They differ only in configure options. They
>> build all objects locally, taking only source from processors/IA32/bochs
>
> What confused me was the location for the generated libs. They are put
> in subdirectories of the directory where conf.COG is run from.
>
> So I reflected what you did and created bochs86 and bochs64 in the
> build.linux32x86 directory, copied conf.COG for 32-bits to bochs86,
> copied conf.COG for 64-bits to bochs64, ran each conf.COG and makeem
> and the libs are in these subdirectories, one set for 86 and one set
> for 64. So only one installation of Bochs.
>
> My issue occurs when I mvm the build. The
> BochsIA32Plugin/BochsX64Plugin blow up trying to read bochsconfig.h
> from bochs.h, where bochs.h is in the bochs directorory of the
> processor code and the bochsconfig.h is in the bochs86/bochs64
> directory under the main build directory (build.linux32x86).
>
> What is confusing is that these blochs86 and bochs64 directories are
> included in the path:
> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build/../../bochs86
> and
> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build/../../bochs64,
> yet they are not found when #include "bochsconfig.h" is specified in
> bochs.h. Is this due to having the headers in totally different
> directories?
>
> Would you know what to make of this?
>
> Regards,
> Robert
>
> g++ -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2 -D_GNU_SOURCE
> -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0 -DLSB_FIRST=1 -m32 -DHAVE_CONFIG_H
> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
> -I/home/rabbit/warren/oscogvm/platforms/unix/vm
> -I/home/rabbit/warren/oscogvm/platforms/Cross/vm
> -I/home/rabbit/warren/oscogvm/spursrc/vm
> -I/home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsIA32Plugin
> -m32 -DUSE_BOCHS_CONFIG_H=1
> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build/../../bochs86
> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs
> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs/instrument/stubs
> -c
> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsIA32Plugin/sqBochsIA32Plugin.cpp
> -fPIC -DPIC -DPIC -o sqBochsIA32Plugin.o
> In file included from
> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsIA32Plugin/sqBochsIA32Plugin.cpp:7:0:
> /home/rabbit/warren/oscogvm/processors/IA32/bochs/bochs.h:38:79: fatal
> error: bochsconfig.h: No such file or directory
> # include "bochsconfig.h" /* generated by configure script from
> config.h.in */
> ^
> compilation terminated.
> make[1]: *** [sqBochsIA32Plugin.lo] Error 1
> make: *** [BochsIA32Plugin.la] Error 2
>
>> oscogvm$ diff build.macos32x86/bochsx*/conf.COG
>> 3,4c3,4
>> < # Bochs x64 simulator for the BochsX64Alien plugin.
>> < # this sets up the x64 compile for Cog on Mac OS X. Disable as
>> much inessential
>> ---
>> > # Bochs x86 simulator for the BochsIA32Alien plugin.
>> > # this sets up the x86 compile for Cog on Mac OS X. Disable as
>> much inessential
>> 32,33c32,35
>> < --enable-x86-64 \
>> < --enable-global-pages \
>> ---
>> > --disable-x86-64 \
>> > --disable-pae \
>> > --disable-large-pages \
>> > --disable-global-pages \
>> oscogvm$ cat build.macos32x86/bochsx64/conf.COG
>> #!/bin/sh
>>
>> # Bochs x64 simulator for the BochsX64Alien plugin.
>> # this sets up the x64 compile for Cog on Mac OS X. Disable as much
>> inessential
>> # stuff as possible leaving only the cpu/fpu & memory interface
>>
>> # build cpu/libcpu.a disasm/libdisasm.a fpu/libfpu.a using
>> # $ ./conf.COG
>> # $ ../../processors/IA32/bochs/makeem
>>
>> set echo
>> # CFLAGS="-pipe -O3 -fomit-frame-pointer -finline-functions
>> -falign-loops=16 -falign-jumps=16 -falign-functions=16
>> -falign-labels=16 -falign-loops-max-skip=15 -falign-jumps-max-skip=15
>> -fprefetch-loop-arrays $CFLAGS"
>> CFLAGS="-m32 $CFLAGS"
>> CFLAGS="-Dlongjmp=_longjmp -Dsetjmp=_setjmp $CFLAGS"
>> CFLAGS="-pipe -O3 -fomit-frame-pointer -finline-functions $CFLAGS"
>> CFLAGS="-g $CFLAGS"
>> CPPFLAGS=""
>> CXXFLAGS="$CFLAGS"
>>
>> export CFLAGS
>> export CPATH
>> export CPPFLAGS
>> export CXXFLAGS
>> export LDFLAGS
>>
>> ../../processors/IA32/bochs/configure \
>> --enable-Cog \
>> --enable-cpu-level=6 \
>> --enable-sse=2 \
>> --enable-assert-checks \
>> --with-nogui \
>> --enable-x86-64 \
>> --enable-global-pages \
>> --disable-mtrr \
>> --disable-sb16 \
>> --disable-ne2000 \
>> --disable-pci \
>> --disable-acpi \
>> --disable-apic \
>> --disable-clgd54xx \
>> --disable-usb \
>> --disable-plugins \
>> ${CONFIGURE_ARGS}
>>
>> # apic == Advanced programmable Interrupt Controller
>> # acpi == Advanced Configuration and Power Interface
>> # pci == Peripheral Component Interconnect local bus
>> # clgd54xx == Cirrus Logic GD54xx video card
>>
>> # avoid conflict with squeak unix build's config.h
>> echo cp config.h bochsconfig.h
>> cp config.h bochsconfig.h
>>
>> echo "and don't forget to run ../../processors/IA32/bochs/makeem"
>>
>>
>>
>> Best,
>> Robert
>>
>> ... ^^
>>
>> On 10/24/2015 11:54 PM, Eliot Miranda wrote:
>>>
>>>
>>>
>>> Hi Rob,
>>>
>>> I've only tried to build it in Mac OS X. I've also changed
>>> the build structure so one /can/ build it either in 32 or 64
>>> bits. So look at the structure for building the support
>>> libraries under build.macos32x86 and replicate it under
>>> build.linux32x86, write or change
>>> platforms/unix/plugins/BochsX64Plugin/Makefile to pick up the
>>> libraries from (IIRC)
>>> build.linux32x86/bochsx64/{cpu/libcpu.a,disasm/libdisasm.a,fpu/libfpu.a}
>>> and you should be fine. You'll need to
>>> run build.linux32x86/bochsx64/conf.COG which you'll copy
>>> from build.macos32x86/bochsx64/conf.COG
>>>
>>> _,,,^..^,,,_ (phone)
>>>
>>> On Oct 24, 2015, at 5:59 PM, Robert Withers
>>> <robert.w.withers at gmail.com> wrote:
>>>
>>>> Is it possible I need 64-bit headers/libraries on the 32-bit
>>>> Ubuntu when compiling BochsX64Plugin? Here a line I am
>>>> receiving an error for and it is for 64-bits:
>>>>
>>>> from sqBochsX64Plugin.cpp, line 68:
>>>> bx_cpu.sregs[BX_SEG_REG_CS].cache.u.segment.l = 1; // 64-bit seg
>>>>
>>>> resulting in error, below.
>>>>
>>>>
>>>> On 10/23/2015 01:49 PM, Eliot Miranda wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Oct 21, 2015 at 7:26 PM, Robert Withers
>>>>> <robert.w.withers at gmail.com
>>>>> <mailto:robert.w.withers at gmail.com>> wrote:
>>>>>
>>>>>
>>>>> I am not sure it is possible, even. Can this plugin be
>>>>> build 32-bit; does it make any sense to do so?
>>>>>
>>>>>
>>>>> yes. How on earth can the 64-bit Cogit be created if this
>>>>> plugin can't be built in 32-bits? I'm using it on Mac OS X in
>>>>> 32-bits using a 32-bit VM.
>>>>>
>>>>>
>>>>> Here is the make portion of this attempt for this plugin.
>>>>> I am unsure how to deal with this C++ issue in the
>>>>> Cross/plugins/BochsX64Plugin/sqUnixBochsX64Plugin.cpp file.
>>>>>
>>>>>
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:
>>>>> In function 'int resetCPU(void*)':
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:68:47:
>>>>> error: 'struct bx_descriptor_t::<anonymous
>>>>> union>::<anonymous>' has no member named 'l'
>>>>> bx_cpu.sregs[BX_SEG_REG_CS].cache.u.segment.l = 1; //
>>>>> 64-bit seg
>>>>>
>>>>>
>>>>> Thank you,
>>>>> Robert
>>>>>
>>>>>
>>>>> /bin/bash
>>>>> /home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build/libtool
>>>>> --mode=compile gcc -m32 -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2
>>>>> -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0
>>>>> -DLSB_FIRST=1 -m32 -DHAVE_CONFIG_H
>>>>> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
>>>>> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
>>>>> -I/home/rabbit/warren/oscogvm/platforms/unix/vm
>>>>> -I/home/rabbit/warren/oscogvm/platforms/Cross/vm
>>>>> -I/home/rabbit/warren/oscogvm/spursrc/vm
>>>>> -I/home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin
>>>>> -m32 -DUSE_BOCHS_CONFIG_H=1
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/linuxbochs
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs/instrument/stubs
>>>>> -c -o BochsX64Plugin.lo
>>>>> /home/rabbit/warren/oscogvm/src/plugins/BochsX64Plugin/BochsX64Plugin.c
>>>>> gcc -m32 -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2 -D_GNU_SOURCE
>>>>> -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0 -DLSB_FIRST=1 -m32
>>>>> -DHAVE_CONFIG_H
>>>>> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
>>>>> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
>>>>> -I/home/rabbit/warren/oscogvm/platforms/unix/vm
>>>>> -I/home/rabbit/warren/oscogvm/platforms/Cross/vm
>>>>> -I/home/rabbit/warren/oscogvm/spursrc/vm
>>>>> -I/home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin
>>>>> -m32 -DUSE_BOCHS_CONFIG_H=1
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/linuxbochs
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs/instrument/stubs
>>>>> -c
>>>>> /home/rabbit/warren/oscogvm/src/plugins/BochsX64Plugin/BochsX64Plugin.c
>>>>> -fPIC -DPIC -DPIC -o BochsX64Plugin.o
>>>>> mv -f BochsX64Plugin.o BochsX64Plugin.lo
>>>>> /bin/bash
>>>>> /home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build/libtool
>>>>> --mode=compile g++ -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2
>>>>> -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0
>>>>> -DLSB_FIRST=1 -m32 -DHAVE_CONFIG_H
>>>>> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
>>>>> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
>>>>> -I/home/rabbit/warren/oscogvm/platforms/unix/vm
>>>>> -I/home/rabbit/warren/oscogvm/platforms/Cross/vm
>>>>> -I/home/rabbit/warren/oscogvm/spursrc/vm
>>>>> -I/home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin
>>>>> -m32 -DUSE_BOCHS_CONFIG_H=1
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/linuxbochs
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs/instrument/stubs
>>>>> -c -o sqBochsX64Plugin.lo
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp
>>>>> g++ -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2 -D_GNU_SOURCE
>>>>> -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0 -DLSB_FIRST=1 -m32
>>>>> -DHAVE_CONFIG_H
>>>>> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
>>>>> -I/home/rabbit/warren/oscogvm/build.linux32x86/squeak.cog.spur/build
>>>>> -I/home/rabbit/warren/oscogvm/platforms/unix/vm
>>>>> -I/home/rabbit/warren/oscogvm/platforms/Cross/vm
>>>>> -I/home/rabbit/warren/oscogvm/spursrc/vm
>>>>> -I/home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin
>>>>> -m32 -DUSE_BOCHS_CONFIG_H=1
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/linuxbochs
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs
>>>>> -I/home/rabbit/warren/oscogvm/processors/IA32/bochs/instrument/stubs
>>>>> -c
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp
>>>>> -fPIC -DPIC -DPIC -o sqBochsX64Plugin.o
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:17:0:
>>>>> warning: "setjmp" redefined [enabled by default]
>>>>> # define setjmp(jb) _setjmp(jb)
>>>>> ^
>>>>> In file included from
>>>>> /home/rabbit/warren/oscogvm/processors/IA32/bochs/gui/siminterface.h:1069:0,
>>>>> from
>>>>> /home/rabbit/warren/oscogvm/processors/IA32/bochs/bochs.h:117,
>>>>> from
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:7:
>>>>> /usr/include/setjmp.h:67:0: note: this is the location of
>>>>> the previous definition
>>>>> #define setjmp(env) _setjmp (env)
>>>>> ^
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:
>>>>> In function 'int resetCPU(void*)':
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:68:47:
>>>>> error: 'struct bx_descriptor_t::<anonymous
>>>>> union>::<anonymous>' has no member named 'l'
>>>>> bx_cpu.sregs[BX_SEG_REG_CS].cache.u.segment.l = 1; //
>>>>> 64-bit seg
>>>>> ^
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:74:47:
>>>>> error: 'struct bx_descriptor_t::<anonymous
>>>>> union>::<anonymous>' has no member named 'l'
>>>>> bx_cpu.sregs[BX_SEG_REG_DS].cache.u.segment.l = 1; //
>>>>> 64-bit seg
>>>>> ^
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:80:47:
>>>>> error: 'struct bx_descriptor_t::<anonymous
>>>>> union>::<anonymous>' has no member named 'l'
>>>>> bx_cpu.sregs[BX_SEG_REG_SS].cache.u.segment.l = 1; //
>>>>> 64-bit seg
>>>>> ^
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:101:10:
>>>>> error: 'class bx_cpu_c' has no member named 'efer'
>>>>> bx_cpu.efer.set_LMA(1); /* Hack. The old version we use
>>>>> have doesn't support set_EFER */
>>>>> ^
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:
>>>>> In function 'int disassembleForAtInSize(void*, ulong,
>>>>> void*, ulong)':
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:213:52:
>>>>> error: 'struct bx_descriptor_t::<anonymous
>>>>> union>::<anonymous>' has no member named 'l'
>>>>> anx64->sregs[BX_SEG_REG_CS].cache.u.segment.l,
>>>>> ^
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:
>>>>> At global scope:
>>>>> /home/rabbit/warren/oscogvm/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp:324:39:
>>>>> error: no 'void bx_cpu_c::TLB_flushNonGlobal()' member
>>>>> function declared in class 'bx_cpu_c'
>>>>> void BX_CPU_C::TLB_flushNonGlobal(void)
>>>>> ^
>>>>> make[1]: *** [sqBochsX64Plugin.lo] Error 1
>>>>> make: *** [BochsX64Plugin.la] Error 2
>>>>> rabbit at rabbithole:~/warren/oscogvm/build.linux32x86/squeak.cog.spur/build$
>>>>> <mailto:rabbit at rabbithole:%7E/warren/oscogvm/build.linux32x86/squeak.cog.spur/build$>
>>>>> mv -f BochsX64Plugin.o BochsX64Plugin.lo
>>>>> mv: cannot stat ‘BochsX64Plugin.o’: No such file or directory
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> _,,,^..^,,,_
>>>>> best, Eliot
>>>>
>>
>>
>>
>>
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20151025/7bc4feec/attachment-0001.htm
More information about the Vm-dev
mailing list