URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [services/] [loader/] [v2_0/] [docs/] [notes.txt] - Rev 346
Go to most recent revision | Compare with Previous | Blame | View Log
These notes were written to record the current state of this code.
Much of it was written during the investigation work.
At present this stuff is only partially functional. Do not assume
anything works. In particular things like constructor/destructors and
init/fini sections have not been fully implemented.
Initial Investigations
======================
Attempts to build a simple shared library using the existing
tools. Command line is something like:
xxx-gcc -shared -o libfoo.so foo.so
arm-elf no - includes crt0 which fails to find main() etc.
thumb-elf no - includes crt0 which fails to find main() etc.
i686-pc-linux-gnu yes
i386-elf no - tries to build program
mn10300 no - tries to build program
powerpc-eabi no - implicit ref to libc.so
sh-elf no - tries to build program
sparclite no - fails to find crtn.o
mips-tx39-elf yes - but seriously mangles PHDR DYNAMIC section
mips66vr4300-elf yes - but seriously mangles PHDR DYNAMIC section
Building new Toolchains
=======================
Given the poor results from our standard toolchains, it was decided to
try and use Linux-targeted toolchains, which are guranteed to have the
necessary support.
These builds all use bindutils-2.1.1, gcc-2.95.2 and gdb-5.0.
arm-unknown-linux-gnu build of libgcc fails looking for asm/unistd.h
All MIPS Linux toolchains use collect2 constructors, so no priorities.
MIPS support also requires PIC code support, which needs HAL
changes. In this case it is fairly easy since the assembler does a lot
of the conversion for us but there are still some things that need
fixing.
MIPS BSD toolchains fail building libgcc, but adding files from
openbsd sources allows these to build. However, these then fail to
build proper PIC code and omit some features.
PowerPC toolchains need to use the full ABI, not the ebedded one, with
TOCs and all the trimmings. This requires major changes to the
HAL. Or maybe not - not too sure about this one.
Since we are having so much difficulty getting any of these to work,
try to get it running on the i686-pc-linux-gnu synthetic target, since
we know that works.
Synthetic Target
================
To enable a progam to be capable of loading a shared library it must
include a DYNAMIC section. This includes the symbol, string and hash
tables needed to satisfy any references from the loaded library back
to the executable. The only way I have so far worked out to make this
happen is to link the executable against a dynamic library. This needs
the -Wl,-static flag to be removed.
A simple library, libdlforce.so has been created to make this
happen. It is not even necessary for the progam to call into the
library, just having it on the command line is enough.
Generation of usable libraries and executables is very sensitive to
the exact form of the linker scripts used.
src/dynamic.ld has been replaced by a very lightly edited copy of
i686-pc-linux-gnu/H-i686-pc-linux-gnu/i686-pc-linux-gnu/lib/ldscripts/elf_i386.xs
To make the main executable work correctly the i386.dynamic.ld script
in this directory must be copied over target.ld before building any
programs. I have not yet worked out what the problems are, but the
original target.ld causes programs built for dynamic loading to
SIGSEGV in ld.so.
If we try to use the POSIX package, we get spurious calls to
pthread_mutex_unlock() from somewhere in the Linux runtime. This may
be a result of using a different linker script, however.
Retesting toolchains
====================
Having got the synthetic target sort-of working, now go back and see
what happens when configuring each of our standard toolchains for the
loader.
arm-elf - build of shared library with external references
result in "undefined reference to `fee'".
mips-tx39-elf - mangles DYNAMIC section as before.
powerpc-eabi - Compiler selects a libgcc.a that contains references
to "abort" and "strcmp". With these defined we get
sensible looking libraries.
Go to most recent revision | Compare with Previous | Blame | View Log