Re: [PATCH 1/2] compiler.h: Introduce ptr_eq() to preserve address dependency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2024-10-03 19:07, David Laight wrote:
...
What _does_ work however are the following two approaches:

1) Perform the equality check on the original variables, creating
new versions (with OPTIMIZER_HIDE_VAR) of both variables for the
rest of their use, therefore making sure the pointer dereference
are not derived from versions of the variables which were compared
with another pointer. (as suggested by Boqun)

If that is
	a1 = a; OPTIMISER_HIDE_VAR(a1);
	b1 = b; OPTIMISER_HIDE_BAR(b1);
	if (a != b}
		return;
	// code using a1 and b1
then can't the compiler first flip it to:
	if (a != b)
		return;
	a1 = a; OPTIMISER_HIDE_VAR(a1);
	b1 = b; OPTIMISER_HIDE_VAR(b1);
and then replace the last line with:
	b1 = a; OPTIMISER_HIDE_VAR(b1);
which isn't intended at all.

Good point, so I suspect Boqun's ADDRESS_EQ() suggestion did not work:

https://lore.kernel.org/lkml/ZvX12_1mK8983cXm@boqun-archlinux/
		
	
OTOH if you do:
	a1 = a; OPTIMISER_HIDE_VAR(a1);
	b1 = b; OPTIMISER_HIDE_VAR(b1);
	if (a1 != b1)
		return;
	// code using a and b
(which I think is)

This is in line with Linus' suggestion, which is the approach I
retained.


2) Perform the equality check on the versions resulting of hiding
both variables, making sure those versions of the variables are
not dereferenced afterwards. (as suggested by Linus)

then the compiler can't possibly reverse the asm blocks.

Indeed.

Thanks,

Mathieu


	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux