Page MenuHomeFreeBSD

Publish __aeabi_uidiv and __aeabi_idiv as compatible symbols from libc.
ClosedPublic

Authored by mmel on Feb 16 2017, 1:06 PM.
Tags
None
Referenced Files
Unknown Object (File)
Mon, Dec 16, 1:19 AM
Unknown Object (File)
Nov 13 2024, 2:08 PM
Unknown Object (File)
Oct 18 2024, 7:31 AM
Unknown Object (File)
Oct 2 2024, 4:46 AM
Unknown Object (File)
Oct 2 2024, 12:37 AM
Unknown Object (File)
Oct 1 2024, 11:19 PM
Unknown Object (File)
Oct 1 2024, 9:57 PM
Unknown Object (File)
Sep 30 2024, 5:01 PM
Subscribers

Details

Summary

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.

MFC after: 2 months

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

mmel retitled this revision from to Publish __aeabi_uidiv and __aeabi_idiv as compatible symbols from libc..
mmel updated this object.
mmel edited the test plan for this revision. (Show Details)
mmel added reviewers: kib, dim.
mmel set the repository for this revision to rS FreeBSD src repository - subversion.
mmel added a subscriber: ARM.
This revision was automatically updated to reflect the committed changes.