On Fri, 2008-04-25 at 23:11 -0700, Andrew Morton wrote: > Also, init_call_single_data() is __cpuinit but isn't declared that way. > There have been rare occasions (FRV was one) where this matters - iirc the > compiler was emitting a short-relative-addressing-form instruction which > which wasn't able to branch far enough once things were linked. We hae > this problem in eight zillion other places, of course. And it's a pita to > go adding __cpunit etc to the declaration because the compiler usually > won't tell us when it gets out of sync with reality. So we could leave he > code as-is and wait for stuff to break :( Erm, that's a bug in the frv toolchain, isn't it? The linker should *never* rely on C code annotation for jump lengths ... mainly because you can screw it all up again in the linker script, so the sectional annotations should only be in the function body (think -ffunction-sections) We have exactly this problem on parisc: our standard relocation jumps are only 17 bits (on ILP32). The linker actually lays down special sandwich sections between individual functions (places where we jump to as a 17 bit relative and then do another absolute jump via a pointer). The sandwich sections should be added at final link time every place the linker sees the relative jump is out of range. James -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html