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

Link object files that use #[used] #137426

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from
Draft

Conversation

DianQK
Copy link
Member

@DianQK DianQK commented Feb 22, 2025

By directly linking the object files that use #[used], we ensure the linker can see them.

This approach allows #[used] to avoid modifying symbol visibility, preserving local symbols. A similar example in C would be:

// foo.c
__attribute__((constructor)) static void foo() {}
// main.c
void main(void) {}

If foo.c is placed in a static library, it will never be loaded unless the entire static library is fully loaded by --whole-archive.

This pull request removes some of the symbols in symbols.o. We can remove more symbols in a follow-up PR.

try-job: x86_64-msvc-1
try-job: aarch64-apple

r? bjorn3

@rustbot rustbot added A-run-make Area: port run-make Makefiles to rmake.rs S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 22, 2025
@rust-log-analyzer
Copy link
Collaborator

The job mingw-check-tidy failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
info: removing rustup binaries
info: rustup is uninstalled
##[group]Image checksum input
mingw-check-tidy
# We use the ghcr base image because ghcr doesn't have a rate limit
# and the mingw-check-tidy job doesn't cache docker images in CI.
FROM ghcr.io/rust-lang/ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
  g++ \
  make \
---

COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/

# NOTE: intentionally uses python2 for x.py so we can test it still works.
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
ENV SCRIPT TIDY_PRINT_DIFF=1 python2.7 ../x.py test \
           --stage 0 src/tools/tidy tidyselftest --extra-checks=py,cpp
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
#    pip-compile --allow-unsafe --generate-hashes reuse-requirements.in
---
#12 2.876 Building wheels for collected packages: reuse
#12 2.877   Building wheel for reuse (pyproject.toml): started
#12 3.088   Building wheel for reuse (pyproject.toml): finished with status 'done'
#12 3.089   Created wheel for reuse: filename=reuse-4.0.3-cp310-cp310-manylinux_2_35_x86_64.whl size=132720 sha256=0c2fd2aaf7b0bf8d6e131220aff14712a774c2ca462f3204d25460cbcf610b63
#12 3.090   Stored in directory: /tmp/pip-ephem-wheel-cache-vcokt54a/wheels/3d/8d/0a/e0fc6aba4494b28a967ab5eaf951c121d9c677958714e34532
#12 3.092 Installing collected packages: boolean-py, binaryornot, tomlkit, reuse, python-debian, markupsafe, license-expression, jinja2, chardet, attrs
#12 3.491 Successfully installed attrs-23.2.0 binaryornot-0.4.4 boolean-py-4.0 chardet-5.2.0 jinja2-3.1.4 license-expression-30.3.0 markupsafe-2.1.5 python-debian-0.1.49 reuse-4.0.3 tomlkit-0.13.0
#12 3.491 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
#12 4.032 Collecting virtualenv
#12 4.032 Collecting virtualenv
#12 4.087   Downloading virtualenv-20.29.2-py3-none-any.whl (4.3 MB)
#12 4.241      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3/4.3 MB 28.2 MB/s eta 0:00:00
#12 4.300 Collecting platformdirs<5,>=3.9.1
#12 4.307   Downloading platformdirs-4.3.6-py3-none-any.whl (18 kB)
#12 4.347 Collecting filelock<4,>=3.12.2
#12 4.377 Collecting distlib<1,>=0.3.7
#12 4.385   Downloading distlib-0.3.9-py2.py3-none-any.whl (468 kB)
#12 4.396      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 469.0/469.0 KB 49.4 MB/s eta 0:00:00
#12 4.396      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 469.0/469.0 KB 49.4 MB/s eta 0:00:00
#12 4.475 Installing collected packages: distlib, platformdirs, filelock, virtualenv
#12 4.656 Successfully installed distlib-0.3.9 filelock-3.17.0 platformdirs-4.3.6 virtualenv-20.29.2
#12 DONE 4.7s

#13 [7/8] COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
#13 DONE 0.0s
---
DirectMap4k:      128960 kB
DirectMap2M:     5113856 kB
DirectMap1G:    13631488 kB
##[endgroup]
Executing TIDY_PRINT_DIFF=1 python2.7 ../x.py test            --stage 0 src/tools/tidy tidyselftest --extra-checks=py,cpp
+ TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py,cpp
    Finished `dev` profile [unoptimized] target(s) in 0.05s
##[endgroup]
WARN: currently no CI rustc builds have rustc debug assertions enabled. Please either set `rust.debug-assertions` to `false` if you want to use download CI rustc or set `rust.download-rustc` to `false`.
downloading https://static.rust-lang.org/dist/2025-02-08/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz
---
fmt check
fmt: checked 5853 files
tidy check
tidy: Skipping binary file check, read-only filesystem
##[error]tidy error: /checkout/compiler/rustc_codegen_ssa/src/back/linker.rs:1875: TODO is used for tasks that should be done before merging a PR; If you want to leave a message in the codebase use FIXME
removing old virtual environment
creating virtual environment at '/checkout/obj/build/venv' using 'python3.10' and 'venv'
creating virtual environment at '/checkout/obj/build/venv' using 'python3.10' and 'virtualenv'
Requirement already satisfied: pip in ./build/venv/lib/python3.10/site-packages (25.0.1)
All checks passed!
checking python file formatting
28 files already formatted
checking C++ file formatting
checking C++ file formatting
some tidy checks failed
Command has failed. Rerun with -v to see more details.
  local time: Sat Feb 22 15:52:10 UTC 2025
  network time: Sat, 22 Feb 2025 15:52:10 GMT
##[error]Process completed with exit code 1.
Post job cleanup.

@DianQK
Copy link
Member Author

DianQK commented Feb 22, 2025

Weird. The tests failed on macOS after I fixed various test cases. I'll look into it tomorrow.

@bjorn3
Copy link
Member

bjorn3 commented Feb 22, 2025

I think we should link all rlibs with --whole-archive. That would also make some currently cgu partitioning dependent linker errors when an unused function references an undefined symbol consistently produce errors independent of which cgu it ends up in.

@petrochenkov petrochenkov self-assigned this Feb 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-run-make Area: port run-make Makefiles to rmake.rs S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants