From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/3793 Path: news.gmane.org!not-for-mail From: Luca Barbato Newsgroups: gmane.linux.lib.musl.general Subject: Re: Solving the recursive memcpy/memset/etc. issue Date: Thu, 01 Aug 2013 08:05:01 +0200 Message-ID: <51F9FA8D.2000403@gentoo.org> References: <20130801004940.GA20323@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1375337114 3717 80.91.229.3 (1 Aug 2013 06:05:14 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 1 Aug 2013 06:05:14 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-3797-gllmg-musl=m.gmane.org@lists.openwall.com Thu Aug 01 08:05:17 2013 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1V4m0j-0001DU-0V for gllmg-musl@plane.gmane.org; Thu, 01 Aug 2013 08:05:17 +0200 Original-Received: (qmail 28581 invoked by uid 550); 1 Aug 2013 06:05:16 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 28567 invoked from network); 1 Aug 2013 06:05:16 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130411 Thunderbird/17.0.5 In-Reply-To: <20130801004940.GA20323@brightrain.aerifal.cx> Xref: news.gmane.org gmane.linux.lib.musl.general:3793 Archived-At: On 01/08/13 02:49, 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. Sounds lovely. > 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. Not exactly great. > 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. Sounds much better. > Other ideas? For now, if -fno-tree-loop-distribute-patterns fixes it > (still waiting on confirmation for this) I'm going to commit that to > configure, but it doesn't seem like a viable long-term solution. I'd rather check and error out reporting the compiler is broken. Then have an explicit configure option to try to workaround it. > My ideal outcome would be a promise from the GCC developers that, in > future GCC versions, -ffreestanding implies disabling any options > which would generate calls to the mem* functions. However that sounds > unlikely. They have competition, if clang works better then we could just suggest to use it and nowadays gcc has no deployment advantage to it anymore. lu