[ECOS] Re: Synthetic target on linux x86_64 host
Mon May 4 08:42:00 GMT 2009
On Sun, May 03, 2009 at 11:09:45PM +0300, Tarmo Kuuse wrote:
> Thanks for the tips.
> Unfortunately I also host tools like rawether et al (no, they don't
> build either). eCos+gcc is a damn complex system and I don't have time
> (nor motivation, nor skill) for hacking it - when something breaks,
> result is pain, pain, pain. I'll just use a 32-bit environment.
> Nick Garnett wrote:
> >Ross Younger <firstname.lastname@example.org> writes:
> >>Tarmo Kuuse wrote:
> >>>Can synthetic target even be built with native x86_64 tools?
> >>As Andrew has said it's not a supported environment - synth predates
> >>x86_64 by some years - and I suspect would require a proper porting
> >>effort in due course.
> >>However, I did find myself poking at the synth target on my
> >>workstation a few weeks ago (Ubuntu 8.10, 64-bit) and was able to get
> >>it going, after a fashion, without very much trouble (and without
> >>having to know much about x86/x86_64 guts!) in order to play with some
> >>new code I was writing.
> >>I was using the eCos i386-elf toolchain; the syscalls and so on all
> >>seemed to just work thanks to x86_64's backwards compatibility (and I
> >>have various 32-bit compatibility libs installed, which may or may not
> >>have helped).
> >>I manually configured my ecos.ecc to use i386-elf, and once I had
> >>built eCos I had to edit target.ld by hand and remove the mention of
> >>libgcc_eh.a in order for my test applications to link. For debugging,
> >>the native gdb (not i386-elf-gcc!) just worked.
> >>Obviously, running synth cross-architecture in this way is not tested
> >>at all - it seemed to work for my limited purposes, and might for you,
> >>but if it breaks you get to keep both pieces :-)
> >I have also been running the synthetic target on my OpenSuSE 11.0
> >x86_64 system. I can do this without making any changes to eCos
> >sources at all.
> >I compile using the native "gcc" compiler, adding the -m32 flag. The
> >default configuration tries to use i686-pc-linux-gnu-gcc, so I have
> >put a script of that name in my path that simply contains the line
> >"gcc -m32 $*". I have also had to define i686-pc-linux-gnu-ar to "ar
> >$*". Those are the only two tools used during a build, and the
> >standard native "gdb" then works to debug.
> >Like Ross, I have the 32 bit compatibility libraries installed,
> >together with the development packages for some. eCos synthetic target
> >executables are not dynamically linked, so it may be necessary to
> >install the static versions of libraries you already have in dynamic
> >form. I simply used trial and error to work out which libraries were
> >needed: try a build, work out which header or library is missing, find
> >out which RPM it comes from, install that and repeat. The exact
> >combination will obviously depend on how a specific distribution
> >divided things up into packages, and what you might already have
> I admire the clever solutions. When the linker dies because something
> called "libgcc_eh.a" is missing I assume it's a sign from the gods
> saying it's not meant to build.
Often gods do not notice some things at all. To err is human. Tarno, it
seemed for me that you won't like a receipt the below, but, that would
be a useful for some atheists.
I use the wellknown variables and stream editor to play with eCos synth
target using the prebuilt i386-elf toolchain from eCosCentric
ecosconfig new linux
# No tweaks of ecos.ecc, let use vars
make CC=i386-elf-gcc AR=i386-elf-ar
# Is it a trick? Well, it is.
sed -i 's/ libgcc_eh.a//' install/lib/target.ld
The sed has one nice option `-i' (edit files in place)
$ head -4 install/lib/target.ld
GROUP(libtarget.a libgcc.a libsupc++.a)
Then using the same parameters I can build the tests, etc.
make CC=i386-elf-gcc AR=i386-elf-ar -C kernel/current tests
and play with them using native host's GDB
gdb -q install/tests/kernel/current/tests/tm_basic
Of course, you can have something like such an alias the below to play
with synth target in ... a bash
alias maksyn='make CC=i386-elf-gcc AR=i386-elf-ar'
or to use a scripting...
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
More information about the Ecos-discuss