Due to bug[1] in libcompiler_rt, all symbols declared by DEFINE_AEABI_FUNCTION_ALIAS() are not hidden. All these but two are explicitly exported from libc and don't causes problems. Remaining two, __aeabi_uidiv and __aeabi_idiv, infecting all non-versioned shared libraries. And these symbols are consumed by many (if not all) packages[2]. As workaround, export these from libc as compatible symbols, in global namespace. With this, these are still visible for rtld, but static linker doesn't use then. [1] DEFINE_AEABI_FUNCTION_ALIAS() macro uses '.set' directive for declaration of aliased symbol. Unfortunately, '.set' doesn't inherit visibility of base symbol, and macro don't explicitly sets visibility for aliased one. [2] Given symbols are exported from non-versioned libraries only if library itself uses them. So, if world is built for CPU with HW divide, these function are not used and given symbols are not exported. By this, contents of these libraries is not stable, and all packages fails to run. Note: Due to r313823 I'm forced to commit this too early, without leave enough time for proper review. MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D9632
80 lines
1.2 KiB
Plaintext
80 lines
1.2 KiB
Plaintext
/*
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
/*
|
|
* This only needs to contain AEABI symbols that are not listed in
|
|
* symbol maps from other parts of libc (i.e., not found in
|
|
* stdlib/Symbol.map, string/Symbol.map, sys/Symbol.map, ...).
|
|
*/
|
|
FBSDprivate_1.0 {
|
|
__aeabi_atexit;
|
|
|
|
__aeabi_dcmpeq;
|
|
__aeabi_dcmplt;
|
|
__aeabi_dcmple;
|
|
__aeabi_dcmpge;
|
|
__aeabi_dcmpgt;
|
|
__aeabi_dcmpun;
|
|
|
|
__aeabi_cdcmpeq;
|
|
__aeabi_cdcmple;
|
|
__aeabi_cdrcmple;
|
|
|
|
__aeabi_d2iz;
|
|
__aeabi_d2f;
|
|
|
|
__aeabi_dadd;
|
|
__aeabi_ddiv;
|
|
__aeabi_dmul;
|
|
__aeabi_dsub;
|
|
|
|
|
|
__aeabi_fcmpeq;
|
|
__aeabi_fcmplt;
|
|
__aeabi_fcmple;
|
|
__aeabi_fcmpge;
|
|
__aeabi_fcmpgt;
|
|
__aeabi_fcmpun;
|
|
|
|
__aeabi_cfcmpeq;
|
|
__aeabi_cfcmple;
|
|
__aeabi_cfrcmple;
|
|
|
|
__aeabi_f2iz;
|
|
__aeabi_f2d;
|
|
|
|
__aeabi_fadd;
|
|
__aeabi_fdiv;
|
|
__aeabi_fmul;
|
|
__aeabi_fsub;
|
|
|
|
|
|
__aeabi_i2d;
|
|
__aeabi_i2f;
|
|
|
|
|
|
__aeabi_memclr;
|
|
__aeabi_memclr4;
|
|
__aeabi_memclr8;
|
|
__aeabi_memcmp;
|
|
__aeabi_memcmp4;
|
|
__aeabi_memcmp8;
|
|
__aeabi_memcpy;
|
|
__aeabi_memcpy4;
|
|
__aeabi_memcpy8;
|
|
__aeabi_memmove;
|
|
__aeabi_memmove4;
|
|
__aeabi_memmove8;
|
|
__aeabi_memset;
|
|
__aeabi_memset4;
|
|
__aeabi_memset8;
|
|
|
|
/*
|
|
* A workaround for DEFINE_AEABI_FUNCTION_ALIAS() bug.
|
|
* - see aeabi_int_div.S
|
|
*/
|
|
__aeabi_idiv;
|
|
__aeabi_uidiv;
|
|
};
|