The solution in other projects I have worked on is to have an initialized struct and just copy it at runtime to the right place. This gets around all the issues with ld (which have been issues in various ways for 12 years now ... just different ones :)
How big are the tables? If they're not that big then just copying them to where they need to be at startup might be the best solution. LD is going to continue to break, always has and always will. Just a thought.
This fails on recent arch and ubuntu. If you can find a way not to use this kind of LD trick, life will be easier.
Of course if this is going to mess up entry points then we're out of luck.
thanks
ron