Re: svn commit: r324815 - in head: lib/libc/gen sys/sys

2018-09-06 Thread Michal Meloun


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

2018-09-02 Thread Ian Lepore
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

2018-09-02 Thread Jan Beich
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

2017-10-21 Thread Michal Meloun
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