On Wed, Apr 1, 2020 at 5:31 AM Karel Zak <kzak@xxxxxxxxxx> wrote: > > On Thu, Mar 26, 2020 at 03:38:27PM +0100, Aurelien LAJOIE wrote: > > + __attribute__((alias("uuid_unparse_upper"))); > > +#else > > +void uuid_unparse(const uuid_t uu, char *out) > > + __attribute__((alias("uuid_unparse_lower"))); > > +#endif > > The alias attribute is not portable to clang on Darwin. > > https://travis-ci.org/github/karelzak/util-linux/jobs/669244356?utm_medium=notification&utm_source=email > > I have replaced the aliases with function calls. > > https://github.com/karelzak/util-linux/commit/bee464006776203a8cb545a35c86234181c7a55a Since Darwin does support weak_alias, can we just use that? Is it "strong enough"? I'm assuming nothing will override the alias so it can still have the same efficient end result, having both symbols resolve to the same address with no extra per-call overhead. (And without bloating the library from a compiler deciding to inline the static helper function into all 3 instead of 2 callers. Although most programs probably only ever call one, so only one has to stay hot in I-cache, with the others only bloating the file size and space in that iTLB memory page.) Or can we put the wrapper function in a .h so it can inline away? That would bake the choice into applications that use libuuid, so you couldn't change it just by rebuilding libuuid. That's perhaps not desirable; if applications wanted to have that choice baked in they could have called the explicit upper or lower versions.