mailing list of musl libc
 help / color / mirror / code / Atom feed
From: "writeonce@midipix.org" <writeonce@midipix.org>
To: musl@lists.openwall.com
Subject: Re: fopen64 and friends as aliases
Date: Tue, 15 Apr 2014 15:38:00 -0400	[thread overview]
Message-ID: <534D8A98.60708@midipix.org> (raw)
In-Reply-To: <20140415191535.GB26358@brightrain.aerifal.cx>

On 04/15/2014 03:15 PM, Rich Felker wrote:
> On Tue, Apr 15, 2014 at 03:03:54PM -0400, writeonce@midipix.org wrote:
>> On 04/15/2014 10:21 AM, Rich Felker wrote:
>>> On Tue, Apr 15, 2014 at 06:59:46AM -0700, writeonce@midipix.org wrote:
>>>>     Greetings,
>>>>     I could not find in the archives any discussion of the above topic, and
>>>>     was therefore wondering: would it be possible to have fopen64 and friends
>>>>     (fseeko64, ftello64, tmpfile64) as aliases of the non-prefixed functions,
>>>>     rather than having them #define'd as synonyms?  This will make most of the
>>>>     musl-llvm patch unnecessary, and could probably help with other packages
>>>>     as well.
>>>>     Kind regards,
>>>>     zg
>>> For some of them like stat64, the #define is necessary anyway since
>>> there is a struct that also needs to be mapped. So it's not so simple.
>>> In any case, the aliases already exist for binary compatibility, but
>>> some of them would be masked by these defines even if we declared them
>>> in the public headers.
>>>
>>> Really what you're asking for is just a workaround of a nonsensical
>>> bug in llvm, which should just be fixed. There is no excuse for the
>>> hack they're doing with namespaces; instead the names should just be
>>> properly prefixed to avoid clashing.
>> I understand. In that case, and for those functions that do not
>> require an extra structure mapping, what is the advantage of
>>
>> 	#define fopen64 fopen
>>
>> over
>>
>> 	FILE *fopen64 (const char *__restrict, const char *__restrict);
>>
>> If the weak alias is already there anyway, then using the latter
>> should only "penalize" (by adding a reference to the extra symbol)
>> those apps/libs that use fopen64 in the first place. Is that
>> correct?
> There are three main advantages in my mind:
>
> 1. Lack of an extra set of prototypes that might need to be correct
>     and which might not get tested well.
>
> 2. Avoiding putting references to the nonsense "64" symbols in the
>     resulting binaries, so that the "64" symbols remain part of the
>     ABI-compat layer (which could, in theory, be optional at build time
>     somewhere in the future) rather than part of the public libc API.
>
> 3. Consistency: due to the need for #define stat64 stat (and perhaps
>     others like this), using separate prototypes for the "64 functions
>     would result in inconsistency in the binaries using them; some
>     symbols would be referenced in the "64" version and others
>     wouldn't. (And likewise, the "llvm bug" would manifest for some of
>     them but not others.)
>
> Rich
>
>
Thanks for the explanation, these are indeed great reasons to stick with 
#define for all of the "64" functions.

As far as llvm goes, and for what it's worth: my own patch of 
llvm/Target/TargetLibraryInfo.h simply #undefines fopen64, etc., which 
allows keeping all of the header's original code intact.  With llvm-3.4 
and using a native musl compiler (gcc-4.8.2), that was the only patch 
required (tweaking excluded) for the entire thing to compile and build 
(so no need to further patch TargetLibraryInfo.cpp, etc.)

zg


      reply	other threads:[~2014-04-15 19:38 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-15 13:59 writeonce
2014-04-15 14:21 ` Rich Felker
2014-04-15 19:03   ` writeonce
2014-04-15 19:15     ` Rich Felker
2014-04-15 19:38       ` writeonce [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=534D8A98.60708@midipix.org \
    --to=writeonce@midipix.org \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).