On Fri, Aug 18, 2017 at 05:58:16PM -0700, Darrick J. Wong wrote: > On Sat, Aug 19, 2017 at 10:33:00AM +1000, Dave Chinner wrote: > > On Fri, Aug 18, 2017 at 11:45:11AM -0700, Darrick J. Wong wrote: > > > On Fri, Aug 18, 2017 at 10:06:07AM -0700, Darrick J. Wong wrote: > > > > ...which is totally worthless, unless we want to compile all the verifier > > > > functions with __attribute__((optimize("O0"))), which is bogus. > > > > > > > > <sigh> Back to the drawing board on that one. > > > > > > Ok, there's /slightly/ less awful way to prevent gcc from optimizing the > > > verifier function to the point of imprecise pointer value, but it involves > > > writing to a volatile int: > > > > > > /* stupidly prevent gcc from over-optimizing getting the instruction ptr */ > > > extern volatile int xfs_lineno; > > > #define __this_address ({ __label__ __here; __here: xfs_lineno = __LINE__; &&__here; }) > > > > > > <grumble> Yucky, but it more or less works. > > > > Can you declare the label as volatile, like you can an asm > > statement to prevent the compiler from optimising out asm > > statements? > > > > Even so, given the yuckiness is very isolated and should only affect > > the slow path code, I can live with this. > > Hmmm. I can't declare the label as volatile, but I /can/ inject > asm volatile("") and that seems to prevent gcc from moving code hunks > around: > > #define __this_address ({ __label__ __here; __here: asm volatile(""); &&__here; }) That seems cleaner to me, and I /think/ the gcc manual says it won't remove such statements, but it also says: Under certain circumstances, GCC may duplicate (or remove duplicates of) your assembly code when optimizing. So I have no real idea whether this is going to be robust or not. I'm not a gcc/asm expert at all (that stuff is mostly black magic to me). Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html