Re: [patch 2/8] compiler-gcc.h: add more comments to RELOC_HIDE

From: Richard Henderson
Date: Mon Jan 19 2009 - 11:30:46 EST


Christoph Lameter wrote:
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?

No, I'm saying that all those high bits will be passed along and won't
fit in the 16-bit relocation that'll come out of the assembler, leading
to a hard linker error.

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.

Something I'm pretty sure we don't want the compiler to be able to do.


r~
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/