Alright, thanks for the time you did manage.

I still am unable to build the X64 plugin: when it includes <bochs.h> it is unable to find "bochsconfig.h, residing in the new bochs64 directory. Interestingly, it is able to do this when building the BochsIA32Plugin, so I don't know what gives.

I am attaching the new version of platforms/unix/plugins/BochsX64Plugin/Makefile.inc, with hardcoded paths to build.linux32x64.

To really get this using context driven paths, a new dir in the Makefiles should be established:
targetblddir = $(topdir)/build.linux32x86

Then these Makefile.inc files in the Bochs plugin directories could refer to $(targetblddir)/bochs86 and $(targetblddir)/bochs64, without hardcoding.

Robert

On 10/26/2015 12:07 AM, Eliot Miranda wrote:
 


Hi Robert,

    ok I did that.  Probably won't have time to do any more this week.  HTH

_,,,^..^,,,_ (phone)

On Oct 25, 2015, at 8:52 PM, Eliot Miranda <eliot.miranda@gmail.com> wrote:

Hi Robert,

    just copy platforms/unix/plugins/BochsIA32Plugin/Makefile.inc to platforms/unix/plugins/BochsX64Plugin/Makefile.inc and adapt it.

_,,,^..^,,,_ (phone)

On Oct 25, 2015, at 7:37 PM, Robert Withers <robert.w.withers@gmail.com> wrote:

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@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@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@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@rabbithole:~/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