Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor weak symbols in std::sys::unix #90846

Merged
merged 1 commit into from
Nov 27, 2021
Merged

Refactor weak symbols in std::sys::unix #90846

merged 1 commit into from
Nov 27, 2021

Commits on Nov 12, 2021

  1. Refactor weak symbols in std::sys::unix

    This makes a few changes to the weak symbol macros in `sys::unix`:
    
    - `dlsym!` is added to keep the functionality for runtime `dlsym`
      lookups, like for `__pthread_get_minstack@GLIBC_PRIVATE` that we don't
      want to show up in ELF symbol tables.
    - `weak!` now uses `#[linkage = "extern_weak"]` symbols, so its runtime
      behavior is just a simple null check. This is also used by `syscall!`.
      - On non-ELF targets (macos/ios) where that linkage is not known to
        behave, `weak!` is just an alias to `dlsym!` for the old behavior.
    - `raw_syscall!` is added to always call `libc::syscall` on linux and
      android, for cases like `clone3` that have no known libc wrapper.
    
    The new `weak!` linkage does mean that you'll get versioned symbols if
    you build with a newer glibc, like `WEAK DEFAULT UND statx@GLIBC_2.28`.
    This might seem problematic, but old non-weak symbols can tie the build
    to new versions too, like `dlsym@GLIBC_2.34` from their recent library
    unification. If you build with an old glibc like `dist-x86_64-linux`
    does, you'll still get unversioned `WEAK DEFAULT UND statx`, which may
    be resolved based on the runtime glibc.
    
    I also found a few functions that don't need to be weak anymore:
    
    - Android can directly use `ftruncate64`, `pread64`, and `pwrite64`, as
      these were added in API 12, and our baseline is API 14.
    - Linux can directly use `splice`, added way back in glibc 2.5 and
      similarly old musl. Android only added it in API 21 though.
    cuviper committed Nov 12, 2021
    Configuration menu
    Copy the full SHA
    5ff6ac4 View commit details
    Browse the repository at this point in the history