3rdparty: cpufeatures workaround

pull/6069/head
Alexander Alekhin 8 years ago
parent 3dee87b697
commit f0c2da32f2
  1. 20
      3rdparty/cpufeatures/cpu-features.c

@ -515,6 +515,25 @@ cpulist_read_from(CpuList* list, const char* filename)
// its implementation does not parse /proc/self/auxv. Instead it depends // its implementation does not parse /proc/self/auxv. Instead it depends
// on values that are passed by the kernel at process-init time to the // on values that are passed by the kernel at process-init time to the
// C runtime initialization layer. // C runtime initialization layer.
#if 1
// OpenCV calls CPU features check during library initialization stage
// (under other dlopen() call).
// Unfortunatelly, calling dlopen() recursively is not supported on some old
// Android versions. Android fix is here:
// - https://android-review.googlesource.com/#/c/32951/
// - GitHub mirror: https://github.com/android/platform_bionic/commit/e19d702b8e330cef87e0983733c427b5f7842144
__attribute__((weak)) unsigned long getauxval(unsigned long); // Lets linker to handle this symbol
static uint32_t
get_elf_hwcap_from_getauxval(int hwcap_type) {
uint32_t ret = 0;
if(getauxval != 0) {
ret = (uint32_t)getauxval(hwcap_type);
} else {
D("getauxval() is not available\n");
}
return ret;
}
#else
static uint32_t static uint32_t
get_elf_hwcap_from_getauxval(int hwcap_type) { get_elf_hwcap_from_getauxval(int hwcap_type) {
typedef unsigned long getauxval_func_t(unsigned long); typedef unsigned long getauxval_func_t(unsigned long);
@ -539,6 +558,7 @@ get_elf_hwcap_from_getauxval(int hwcap_type) {
return ret; return ret;
} }
#endif #endif
#endif
#if defined(__arm__) #if defined(__arm__)
// Parse /proc/self/auxv to extract the ELF HW capabilities bitmap for the // Parse /proc/self/auxv to extract the ELF HW capabilities bitmap for the

Loading…
Cancel
Save