From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/3548 Path: news.gmane.org!not-for-mail From: Szabolcs Nagy Newsgroups: gmane.linux.lib.musl.general Subject: Re: Use of size_t and ssize_t in mseek Date: Thu, 4 Jul 2013 13:10:54 +0200 Message-ID: <20130704111054.GY15323@port70.net> References: <1372517802.8324.13.camel@eris.loria.fr> <20130629154859.GI29800@brightrain.aerifal.cx> <1372521678.8324.18.camel@eris.loria.fr> <20130629161338.GK29800@brightrain.aerifal.cx> <1372523967.8324.19.camel@eris.loria.fr> <20130704012800.GK29800@brightrain.aerifal.cx> <1372918318.16412.164.camel@eris.loria.fr> <20130704063740.GL29800@brightrain.aerifal.cx> <1372921889.16412.167.camel@eris.loria.fr> <20130704081245.GN29800@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1372936265 28242 80.91.229.3 (4 Jul 2013 11:11:05 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 4 Jul 2013 11:11:05 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-3552-gllmg-musl=m.gmane.org@lists.openwall.com Thu Jul 04 13:11:06 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 1UuhRK-0007hn-D6 for gllmg-musl@plane.gmane.org; Thu, 04 Jul 2013 13:11:06 +0200 Original-Received: (qmail 32246 invoked by uid 550); 4 Jul 2013 11:11:06 -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 32238 invoked from network); 4 Jul 2013 11:11:05 -0000 Content-Disposition: inline In-Reply-To: <20130704081245.GN29800@brightrain.aerifal.cx> User-Agent: Mutt/1.5.21 (2010-09-15) Xref: news.gmane.org gmane.linux.lib.musl.general:3548 Archived-At: * Rich Felker [2013-07-04 04:12:45 -0400]: > On Thu, Jul 04, 2013 at 09:11:29AM +0200, Jens Gustedt wrote: > > > qsort_s can store the comparison function and context in TLS, and then > > > pass to qsort a comparison function that grabs these from TLS and > > > calls the original comparison function with the context pointer. This > > > is valid assuming qsort does not run the comparisons in new threads. > > > > sure, but for an execution of qsort_s this would have a lot of > > indirections and a call to TLS for every comparison. For performance > > sensible functions like this, this doesn't sound very attractive. > > If it's inside musl, the TLS dereference is very cheap on most archs: > it's just a constant offset from the thread pointer. Same if the code > were static linked in the main program. Otherwise, if it's a dynamic > library, then yes it would be fairly costly, like you say. it seems to me that if a qsort_s call sets the tls and then before the callee reads that pointer a signal interrupts with a handler that calls qsort_s again then the tls is overwritten by another pointer so you lose signal-safety with the tls design > > (In P99 I do that with inlining and gcc shows to be able to expand all > > comparisons in place and to optimize that smoothly.) > > Nice. I'll have to take a look -- I've always wanted to see a fully > inlined qsort that could be compared to the C++ template-based sorts > to demonstrate that inline functions in C can do just as good or > better, inlining the comparison callback... :) * Jens Gustedt [2013-07-04 10:45:47 +0200]: > http://gustedt.wordpress.com/2012/12/04/inline-functions-as-good-as-templates/ good to know that this works now.. it's not clear from the article how the compiler knew that the last arg for qsort_s is supposed to be passed to the comparision function: was it lto+static linking or was the internal of qsort_s visible in the same translation unit? a few years ago i did similar experiments but those failed back then: https://groups.google.com/d/msg/comp.lang.c/sO2oYdZGdd8/bqFZ4i81P7AJ (P.S. google seems to broke its usenet archives, if anyone knows a good one that works without javascript enabled i'm interested, meanwhile you can just replace /d/ with /forum/print/ in the url and get a reasonable rendering without js)