-
-
Notifications
You must be signed in to change notification settings - Fork 14.5k
add rustc option -Zpacked-stack #152432
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
base: main
Are you sure you want to change the base?
add rustc option -Zpacked-stack #152432
Conversation
|
r? @chenyukang rustbot has assigned @chenyukang. Use Why was this reviewer chosen?The reviewer was selected based on:
|
|
I'll add tests for assembly output and for target incompatibility. |
This comment has been minimized.
This comment has been minimized.
|
|
||
| fn packed_stack_attr<'ll>(cx: &SimpleCx<'ll>, sess: &Session) -> Option<&'ll Attribute> { | ||
| if sess.target.arch != Arch::S390x { | ||
| return None; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe panic here given that the frontend should already have emitted an error.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hmm packed_stack_attr(...) is called every time llfn_attrs_from_instance is called indifferent of target arch.
And I think it would not be a good thing to add an arch check to llfn_attrs_from_instance as there are no other checks in that function. It blindly calls all possibilities and assumes that checks are already handled elsewhere.
this enables packed-stack just as -mpacked-stack in clang and gcc. packed-stack is needed on s390x for kernel development.
5ddcabb to
4ebec9d
Compare
| return Err(format!( | ||
| "Enabling both `packed-stack` and `backchain` attributes is incompatible with the default s390x target. Switch to s390x-unknown-none-softfloat if you need both attributes." | ||
| )); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This only checks the default-enabled features but ignores -Ctarget-features, so this check is largely ineffective. Also it checks for the packed-stack target feature which doesn't exist! Please add a test to confirm this, then move the check to a better place where it actually works.
| if sess.opts.unstable_opts.packed_stack { | ||
| if sess.target.arch != Arch::S390x { | ||
| sess.dcx().emit_err(errors::UnsupportedPackedStack); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems like the most reasonable place to check the backchain condition?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes i will move the other check here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
unfortunately feature flags are only parsed during codegen_backend.init(sess) which is one step after rustc_session::build_session(...). So no feature flags available to check at this point.
-> i need to check them in codegen_llvm or codegen_ssa.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please avoid duplicating the check across the codegen backends.
The check seems to be somewhat similar in nature to
| util::check_abi_required_features(&sess); |
check_abi_required_features to something slightly more general and do the check there?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes this seems, also to me, the only option left.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there is another way.
I could try to talk to the llvm guys if its possible to make packed-stack a proper target-feature so we dont have to go over a cli argument.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure if that would help. Target feature conflicts currently also need ad-hoc checks, we don't have a framework for dealing with them at the moment.
| If not specified, overflow checks are enabled if | ||
| [debug-assertions](#debug-assertions) are enabled, disabled otherwise. | ||
|
|
||
| ## packed-stack |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since the option isn't stable yet, this is the wrong place to document it I think?
this enables
-Zpacked-stackjust as-mpacked-stackin clang and gcc. packed-stack is needed on s390x for kernel development.For reference: #151154 and #150766
look at @uweigand s post for full explanation of what this does. Here a wrap-up:
#150766 (comment)