Re: svn commit: r324815 - in head: lib/libc/gen sys/sys
On 02.09.2018 18:44, Ian Lepore wrote: > On Sun, 2018-09-02 at 16:16 +0200, Jan Beich wrote: >> Michal Meloun writes: >> >>> >>> Author: mmel >>> Date: Sat Oct 21 12:06:18 2017 >>> New Revision: 324815 >>> URL: https://svnweb.freebsd.org/changeset/base/324815 >>> >>> Log: >>> Make elf_aux_info() as public libc function. >>> - Teach elf aux vector functions about newly added AT_HWCAP and >>> AT_HWCAP2 >>> vectors. >>> - Export _elf_aux_info() as new public libc function >>> elf_aux_info(3) >>> >>> The elf_aux_info(3) should be considered as FreeBSD counterpart >>> of glibc >>> getauxval() with more robust interface. >> Can you back it out? I've reported sys/auxv.h breaks existing >> consumers >> and the function is yet to be documented. 12.0-RELEASE is approaching >> but there's no fix in sight, and by the time it lands there maybe >> not enough time to test. >> >> http://docs.freebsd.org/cgi/mid.cgi?03a31eff-34e8-be4c-c008-528824fea >> 261 >> > > Are you seriously suggesting that freebsd is forbidden to add a system > header file of any name it chooses, just because some port's autotools > stuff mistakenly assumes the presence of that name implies something > linux-specific? If the port is broken, fix it. > > -- Ian > Jan, I apologize for the late reply but right now I noticed this thread in my spam folder. I don't know why gmail so classified it :( I agree with Ian, the port should test getauxval() presence, not a header file. Moreover, at this point elf_aux_info () is the only function with which we can implement FreeBSD specific version of the runtime hw feature detection for ARM cpus. So I think revert is the worst option. Do you know how many ports are affected? I only know about libvpx (for which I immediately sent a fix) and (from memory) mono is also affected. But, please remember, with or without the getauxval () emulation, majority of ports will still need a patch. Mainly because the cpu detection code is covered by #ifdef __linux__ and/or the port have hardcoded #AT_ values (we uses different numbers for it) or so. I ready to prepare patch for every single port affected by this problem, simple list of problematic ports is enough. Michal ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
Re: svn commit: r324815 - in head: lib/libc/gen sys/sys
On Sun, 2018-09-02 at 16:16 +0200, Jan Beich wrote: > Michal Meloun writes: > > > > > Author: mmel > > Date: Sat Oct 21 12:06:18 2017 > > New Revision: 324815 > > URL: https://svnweb.freebsd.org/changeset/base/324815 > > > > Log: > > Make elf_aux_info() as public libc function. > > - Teach elf aux vector functions about newly added AT_HWCAP and > > AT_HWCAP2 > > vectors. > > - Export _elf_aux_info() as new public libc function > > elf_aux_info(3) > > > > The elf_aux_info(3) should be considered as FreeBSD counterpart > > of glibc > > getauxval() with more robust interface. > Can you back it out? I've reported sys/auxv.h breaks existing > consumers > and the function is yet to be documented. 12.0-RELEASE is approaching > but there's no fix in sight, and by the time it lands there maybe > not enough time to test. > > http://docs.freebsd.org/cgi/mid.cgi?03a31eff-34e8-be4c-c008-528824fea > 261 > Are you seriously suggesting that freebsd is forbidden to add a system header file of any name it chooses, just because some port's autotools stuff mistakenly assumes the presence of that name implies something linux-specific? If the port is broken, fix it. -- Ian ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
Re: svn commit: r324815 - in head: lib/libc/gen sys/sys
Michal Meloun writes: > Author: mmel > Date: Sat Oct 21 12:06:18 2017 > New Revision: 324815 > URL: https://svnweb.freebsd.org/changeset/base/324815 > > Log: > Make elf_aux_info() as public libc function. > - Teach elf aux vector functions about newly added AT_HWCAP and AT_HWCAP2 > vectors. > - Export _elf_aux_info() as new public libc function elf_aux_info(3) > > The elf_aux_info(3) should be considered as FreeBSD counterpart of glibc > getauxval() with more robust interface. Can you back it out? I've reported sys/auxv.h breaks existing consumers and the function is yet to be documented. 12.0-RELEASE is approaching but there's no fix in sight, and by the time it lands there maybe not enough time to test. http://docs.freebsd.org/cgi/mid.cgi?03a31eff-34e8-be4c-c008-528824fea261 ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r324815 - in head: lib/libc/gen sys/sys
Author: mmel Date: Sat Oct 21 12:06:18 2017 New Revision: 324815 URL: https://svnweb.freebsd.org/changeset/base/324815 Log: Make elf_aux_info() as public libc function. - Teach elf aux vector functions about newly added AT_HWCAP and AT_HWCAP2 vectors. - Export _elf_aux_info() as new public libc function elf_aux_info(3) The elf_aux_info(3) should be considered as FreeBSD counterpart of glibc getauxval() with more robust interface. Note: We cannot name this new function as getauxval(), with glibc compatible interface. Some ports autodetect its existence and then expects that all Linux specific AT_<*> vectors are defined and implemented. MFC after:1 month Reviewed by: kib Differential Revision:https://reviews.freebsd.org/D12743 Added: head/sys/sys/auxv.h (contents, props changed) Modified: head/lib/libc/gen/Symbol.map head/lib/libc/gen/auxv.c Modified: head/lib/libc/gen/Symbol.map == --- head/lib/libc/gen/Symbol.mapSat Oct 21 12:05:01 2017 (r324814) +++ head/lib/libc/gen/Symbol.mapSat Oct 21 12:06:18 2017 (r324815) @@ -398,6 +398,7 @@ FBSD_1.5 { devname; devname_r; dirname; + elf_aux_info; fts_children; fts_close; fts_get_clientptr; Modified: head/lib/libc/gen/auxv.c == --- head/lib/libc/gen/auxv.cSat Oct 21 12:05:01 2017(r324814) +++ head/lib/libc/gen/auxv.cSat Oct 21 12:06:18 2017(r324815) @@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include "un-namespace.h" #include "libc_private.h" @@ -65,8 +66,10 @@ __init_elf_aux_vector(void) static pthread_once_t aux_once = PTHREAD_ONCE_INIT; static int pagesize, osreldate, canary_len, ncpus, pagesizes_len; +static int hwcap_present, hwcap2_present; static char *canary, *pagesizes; static void *timekeep; +static u_long hwcap, hwcap2; static void init_aux(void) @@ -83,6 +86,16 @@ init_aux(void) canary_len = aux->a_un.a_val; break; + case AT_HWCAP: + hwcap_present = 1; + hwcap = (u_long)(aux->a_un.a_val); + break; + + case AT_HWCAP2: + hwcap2_present = 1; + hwcap2 = (u_long)(aux->a_un.a_val); + break; + case AT_PAGESIZES: pagesizes = (char *)(aux->a_un.a_ptr); break; @@ -110,6 +123,8 @@ init_aux(void) } } +__weak_reference(_elf_aux_info, elf_aux_info); + int _elf_aux_info(int aux, void *buf, int buflen) { @@ -130,6 +145,20 @@ _elf_aux_info(int aux, void *buf, int buflen) } else res = ENOENT; break; + case AT_HWCAP: + if (hwcap_present && buflen == sizeof(u_long)) { + *(u_long *)buf = hwcap; + res = 0; + } else + res = ENOENT; + break; + case AT_HWCAP2: + if (hwcap2_present && buflen == sizeof(u_long)) { + *(u_long *)buf = hwcap2; + res = 0; + } else + res = ENOENT; + break; case AT_PAGESIZES: if (pagesizes != NULL && pagesizes_len >= buflen) { memcpy(buf, pagesizes, buflen); @@ -137,7 +166,6 @@ _elf_aux_info(int aux, void *buf, int buflen) } else res = ENOENT; break; - case AT_PAGESZ: if (buflen == sizeof(int)) { if (pagesize != 0) { Added: head/sys/sys/auxv.h == --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/sys/auxv.h Sat Oct 21 12:06:18 2017(r324815) @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2017 Michal Meloun + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *notice, this list of conditions and the following disclaimer in the + *documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR