Date: Thu, 1 Aug 2013 22:52:44 -0400 From: Rich Felker <dalias@...ifal.cx> To: musl@...ts.openwall.com Subject: Re: Solving the recursive memcpy/memset/etc. issue On Wed, Jul 31, 2013 at 08:49:40PM -0400, Rich Felker wrote: > OK, so now that it's hit us for real, what should we do about GCC > generating code for memcpy, memset, etc. which might contain infinite > recursion? Aside from the ARM issue (which was separate), we know the > option causing this bad code generation, and it can be disabled via > -fno-tree-loop-distribute-patterns. However, if GCC policy is that > they consider the compiler entitled to generate calls to > memcpy/memset/memmove/memcmp whenever it wants, then we're just going > to be playing whack-a-mole. For now, I solved it with just this option, and also added some more asm for x86[_64]. > The only fully viable option I see is replacing the code for these > functions with code that uses volatile objects so as to make > optimization utterly impossible. This will of course make them > incredibly slow, but at least we would have safe, working C code, and > we could add asm for each supported arch. I'd actually like to experiment with some ideas for volatile that don't make the C slow. If the compiler really honors volatile, it seems like you can write C code in such a way where the compiler has to implement it pretty close to the abstract machine -- but you can be selective about it, so as to allow the compiler some freedom. > An alternative might be to test the compiler in configure to determine > if, with the selected CFLAGS, it generates recursive code for these > functions, and if so, defining a macro that causes musl to revert to > the volatile code. This is not in the workaround I committed, but could be added.. Rich
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.