Messages in this thread | | | From | Geert Uytterhoeven <> | Date | Mon, 3 Aug 2020 12:06:34 +0200 | Subject | Re: [PATCH] powerpc/boot: Use address-of operator on section symbols |
| |
Hi Segher,
On Mon, Jul 20, 2020 at 11:03 PM Segher Boessenkool <segher@kernel.crashing.org> wrote: > On Sat, Jul 18, 2020 at 09:50:50AM +0200, Geert Uytterhoeven wrote: > > On Wed, Jun 24, 2020 at 6:02 AM Nathan Chancellor > > <natechancellor@gmail.com> wrote: > > > /* If we have an image attached to us, it overrides anything > > > * supplied by the loader. */ > > > - if (_initrd_end > _initrd_start) { > > > + if (&_initrd_end > &_initrd_start) { > > > > Are you sure that fix is correct? > > > > extern char _initrd_start[]; > > extern char _initrd_end[]; > > extern char _esm_blob_start[]; > > extern char _esm_blob_end[]; > > > > Of course the result of their comparison is a constant, as the addresses > > are constant. If clangs warns about it, perhaps that warning should be moved > > to W=1? > > > > But adding "&" is not correct, according to C. > > Why not? > > 6.5.3.2/3 > The unary & operator yields the address of its operand. [...] > Otherwise, the result is a pointer to the object or function designated > by its operand. > > This is the same as using the name of an array without anything else, > yes. It is a bit clearer if it would not be declared as array, perhaps, > but it is correct just fine like this.
Thanks, I stand corrected.
Regardless, the comparison is still a comparison between two constant addresses, so my fear is that the compiler will start generating warnings for that in the near or distant future, making this change futile.
Gr{oetje,eeting}s,
Geert
-- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
| |