Skip to content

Conversation

alessandrod
Copy link
Contributor

Fixes triggering the "only small returns supported" error in the BPF target.

@rustbot rustbot added 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 Oct 13, 2025
@rustbot
Copy link
Collaborator

rustbot commented Oct 13, 2025

r? @jackh726

rustbot has assigned @jackh726.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot

This comment has been minimized.

@rustbot
Copy link
Collaborator

rustbot commented Oct 13, 2025

This PR was rebased onto a different master commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@alessandrod
Copy link
Contributor Author

⚠️ Warning ⚠️

* This PR is based on an [upstream commit](https://github.com/rust-lang/rust/commit/41a79f1862aa6b81bac674598e275e80e9f09eb9) that is older than 28 days.

whoops, fixed

@rust-log-analyzer

This comment has been minimized.

@alessandrod
Copy link
Contributor Author

alessandrod commented Oct 13, 2025

#![no_std]
#![no_main]

#[unsafe(no_mangle)]
pub unsafe fn outer(a: u64) -> u64 {
    match try_inner(a) {
        Ok(v) => v,
        Err(()) => 0,
    }
}

#[inline(never)]
fn try_inner(a: u64) -> Result<u64, ()> {
    if a == 0 { Err(()) } else { Ok(a + 1) }
}

nightly without fix

sol@dev-alessandrod:/tmp/b$ cargo +nightly rustc --target=bpfel-unknown-none -Z build-std=core --release
   Compiling b v0.1.0 (/tmp/b)
error: linking with `bpf-linker` failed: exit status: 1
  |
  = note:  "bpf-linker" "--export-symbols" "/tmp/rustcpWeU1V/symbols" "/tmp/rustcpWeU1V/symbols.o" "<1 object files omitted>" "/tmp/b/target/bpfel-unknown-none/release/deps/{libcore-e2186c15db672292,libcompiler_builtins-33b0f57b988ec271}.rlib" "-L" "/tmp/rustcpWeU1V/raw-dylibs" "--cpu" "generic" "-o" "/tmp/b/target/bpfel-unknown-none/release/deps/b-89f0e403b55dfe7b" "-O3" "--debug"
  = note: some arguments are omitted. use `--verbose` to show all linker arguments
  = note: ERROR llvm: <unknown>:0:0: in function outer i64 (i64): only small returns supported
          
          ERROR llvm: <unknown>:0:0: in function _ZN1b9try_inner17ha7a0d46aa0ff6c7eE { i64, i64 } (i64): aggregate returns are not supported
          
          Error: LLVM issued diagnostic with error severity
          

error: could not compile `b` (bin "b") due to 1 previous error

with this PR

sol@dev-alessandrod:/tmp/b$ cargo +stage1 rustc --target=bpfel-unknown-none -Z build-std=core --release
   Compiling core v0.0.0 (/home/sol/src/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/src/rust/library/core)
   Compiling compiler_builtins v0.1.160 (/home/sol/src/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/src/rust/library/compiler-builtins/compiler-builtins)
   Compiling b v0.1.0 (/tmp/b)
    Finished `release` profile [optimized] target(s) in 18.25s

@wesleywiser
Copy link
Member

Thanks @alessandrod!

@bors r+ rollup

@bors
Copy link
Collaborator

bors commented Oct 13, 2025

📌 Commit 246f764 has been approved by wesleywiser

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 13, 2025
Fixes triggering the "only small returns supported" error in the BPF
target.
@wesleywiser
Copy link
Member

@bors r+

@bors
Copy link
Collaborator

bors commented Oct 14, 2025

📌 Commit 056c2da has been approved by wesleywiser

It is now in the queue for this repository.

matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 14, 2025
…wiser

bpf: return results larger than one register indirectly

Fixes triggering the "only small returns supported" error in the BPF target.
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Oct 14, 2025
…wiser

bpf: return results larger than one register indirectly

Fixes triggering the "only small returns supported" error in the BPF target.
bors added a commit that referenced this pull request Oct 14, 2025
Rollup of 12 pull requests

Successful merges:

 - #146187 (Unstably constify `ptr::drop_in_place` and related methods)
 - #146503 (std: improve handling of timed condition variable waits on macOS)
 - #147526 (Move computation of allocator shim contents to cg_ssa)
 - #147630 (Bitset cleanups)
 - #147638 (bpf: return results larger than one register indirectly)
 - #147666 (Replace manual implementation with `carrying_mul_add`)
 - #147669 (fix missing link to `std::char` in `std` docs)
 - #147673 (pretty print u128 with display)
 - #147677 (Fewer exceptions in `span()` on parsed attributes)
 - #147680 (Fix ICE caused by associated_item_def_ids on wrong type in resolve diag)
 - #147682 (convert `rustc_main` to the new attribute parsing infrastructure)
 - #147683 (only check duplicates on old/unparsed attributes)

r? `@ghost`
`@rustbot` modify labels: rollup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. 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.

7 participants