
In message f608b67d0807231546t44ef5a6ak68d98b26beb5d8fc@mail.gmail.com you wrote:
What is a module?
for the purposes of this discussion any .o file or any library of .o files.
Neither of these is executable - you either have to link these with the U-Boot code or into a standalone application - and in both cases none of the problems you describe happens.
How does a it relate to u-boot?
I need to extend u-boot with certain functionality available from those modules.
OK - as mentioned: either statically linked or as standalone app.
Why does it need to be relocated?
because the modules are now part of u-boot, they need to be relocated along with the rest of the image.
U-Boot does this (if statically linked) the very same way like all other U-Boot code gets relocated.
Why isn't it written in position independent manner?
because they come from different sources, not concerned with u-boot, and just work and need to be ported as is.
If you want to link against U-Boot, you have to use at least compatible compiler options and the U-Boot linker script.
How is your relocation methodology going to fixup a module's data structures?
The relocation will adjust only pointers to absolute addresses stored in text/data segments.
No.
What pointers are in your data structures? Why do they need to be relocated?
in some cases data structures include pointers to other data structures, etc. (This is called 'tree' btw, sorry couldn't resist :-)
This should get sorted out correctly when linking.
Gcc supports "proper" relocation, if only we knew how to make it work for all "reasonable" versions of gcc (and Grant's conclusion is that many versions of gcc in use today do *not* support the relocation). http://article.gmane.org/gmane.comp.boot-loaders.u-boot/36343/
well, if there is a pointer to a data element or to a function stored in a data structure, the .bin image is built and fixed using actual addresses set by the linker. How can gcc help here?
By adding the respective entries to the GOT.
I am sure it is doable, I am just trying to understand if this would be accepted in general, because it can be done differently depending if one needs to push it upstream or not.
If you invest time in solving such problems, than your time willbe much better iinvested if you try to help solving the remaining issues with Grant's code.
What Grant suggests is the way to go. I do not think your approach has chances for mainline.
Best regards,
Wolfgang Denk