On Thu, 15 Jan 2009, Richard Henderson wrote:
I didn't explore the space of possible solutions, merely gave Rusty a solution
that I knew would work, and would never fail because the compiler would never
look through the asm.
I wouldn't be surprised if the compiler thought "(long)&foo - large_constant"
could be put back together into a small-data relocation, simply because at the
level at which that optimization is performed, we've thrown away type data
like long and void*; we only have modes.
We are talking about
(long)&foo + long_variable
Are you saying that the compiler will be ignoring the high bits in
variable because of the size of foo?
It looks like its useless and more an indication of either a broken
compiler or wrong assumptions about the compiler. Removing RELOC_HIDE
should allow the compiler to freely optimize the per cpu address
calculations.