I am using VxWorks 5.5 with a BSP for the 5307 Coldfire CPU, and the
Diab 4.4 compiler.
The problem is this:
The makeSymTbl.tcl script filters symbols that do not begin with an
underscore =93_=94. This removes symbols from the symbol table such as
=91dbmul=92 and =91fltused=92 found in libdcc.a., libcfp.a, and/or
libimpfp.a.
When creating a dynamically loadable module (.out), the loadModule
function (or ld shell function) can=92t load and link the module because
symbols required to perform double/FP arithmetic are not in the symbol
table.
Undefined symbol: dbmul (binding 1 type 0)
Undefined symbol: fltused (binding 1 type 0)
These symbols are indeed in the vxWorks image.
Here is the code in the makeSymTbl.tcl script. This is a WindRiver
build tool for making a standalone symbol table.
C:\Tornado2.2\host\src\hutils\makeSymTbl.tcl:134 filters these out.
Here is the comment associated with the filter:
# for 68k and coldfire, all global symbols which don't begin
with '_'
# should be filtered out. Such symbols are from assembly code
and
# can't
# be referenced in C file. Subsequently, they can't be in
symTbl.c.
# To make global symbols defined in assembly code valid for
# standalone symbol table, they have to begin with '_'. Note
this
# is true for 68k and coldfire only.
if [regexp {^.* . [^_].*$} $symbolEntry] {
if {($cpuType =3D=3D "68k") || ($cpuType =3D=3D "cf")} {
continue
}
}
How can we build a dynamic load module (.out) that uses FP arithmetic
when the required symbols are removed from the symbol table in the
VxWorks kernel executable?