|
Message-ID: <alpine.LNX.2.20.13.2001191959050.7204@monopod.intra.ispras.ru> Date: Sun, 19 Jan 2020 20:11:37 +0300 (MSK) From: Alexander Monakov <amonakov@...ras.ru> To: musl@...ts.openwall.com Subject: Re: Minor style patch to exit.c On Sun, 19 Jan 2020, Rich Felker wrote: > Conceptually the _start is an array; that means it's fine to iterate > over its elements, and we could even do so with the "correct" type. > The problem is that _end is a different symbol and thereby inherently > a "different object", and comparing against it with < is not valid; > the compiler can legitimately optimize that out. I think with != would > be valid, but I'm not sure we can trust compilers to honor any > consistency for such "one past the end" comparisons. Casting to > (uintptr_t) before doing the != comparison would absolutely be safe in > the abstract machine; whether compilers honor this is unclear (because > of the "provenance" stuff, which could break even the current code, so > arguably we should have some "provenance barrier" here). > > Of course exit runs the array in reverse, which makes it even more of > a mess. _end[-1] is clearly not valid when _end is an array object, > and the compiler is free to break that. I would suggest void (**ptr)(void); __asm__ ("" : "=g"(ptr) : "0"(..._end), "X"(..._start)); while (ptr != _start) (*--ptr)(); Alexander
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.