On Wednesday 27. June 2018 00.43.33 Paul Boddie wrote:
Global entries: Address Access Initial Sym.Val. Type Ndx Name 00025f80 -32176(gp) 00000000 00000000 FUNC UND __register_frame_info
Here, we see the offending entry and what the program apparently expects to find. Other entries that are apparently undefined are the following:
_ITM_deregisterTMCloneTable _ITM_registerTMCloneTable __deregister_frame_info
Here, I should have realised that the declarations and "null" definitions in pkg/l4re-core/ldso/ldso/fixup.c were important in this context, having already looked at it amongst many other files while trying to understand what was happening.
Fortunately, my off-list helper, Jean Wolter, kindly pointed me to this file and suggested that I add definitions for these symbols being produced by my compiler (GCC 6.4.0 from Buildroot). Presumably, these symbols are not produced by earlier GCC versions, or perhaps not by the compilers employed in the MIPS porting exercise.
I did see if I could configure GCC to not use these symbols at all, given that there are tests in the code incorporated into executables (libgcc/crtstuff.c) for the presence of such symbols, but this was beyond me. So, I added the following to fixup.c:
void __deregister_frame_info(void); void __register_frame_info(void); void _ITM_deregisterTMCloneTable(void); void _ITM_registerTMCloneTable(void);
void __deregister_frame_info(void) {} void __register_frame_info(void) {} void _ITM_deregisterTMCloneTable(void) {} void _ITM_registerTMCloneTable(void) {}
Anyway, as a consequence, I got the shared-hello example to function and to write its output to fbterminal. Many thanks must go to Jean for suggesting things to look at over the course of a few mails.
It was, I suppose, interesting to go from a coprocessor error, related to the accidental execution of an ELF magic number word that happens to resemble a MIPS floating point instruction, through the different routines related to library loading and initialisation in an attempt to identify some mystery code (from crtstuff.c), examining global offset table entries and their potential misinterpretation, before arriving at such a simple solution.
Paul