| ... | @@ -7193,6 +7193,9 @@ pub fn addCCArgs( | ... | @@ -7193,6 +7193,9 @@ pub fn addCCArgs( |
| 7193 | } | 7193 | } |
| 7194 | | 7194 | |
| 7195 | try argv.append(if (mod.omit_frame_pointer) "-fomit-frame-pointer" else "-fno-omit-frame-pointer"); | 7195 | try argv.append(if (mod.omit_frame_pointer) "-fomit-frame-pointer" else "-fno-omit-frame-pointer"); |
| | 7196 | if (target.cpu.arch == .s390x) { |
| | 7197 | try argv.append(if (mod.omit_frame_pointer) "-mbackchain" else "-mno-backchain"); |
| | 7198 | } |
| 7196 | | 7199 | |
| 7197 | const ssp_buf_size = mod.stack_protector; | 7200 | const ssp_buf_size = mod.stack_protector; |
| 7198 | if (ssp_buf_size != 0) { | 7201 | if (ssp_buf_size != 0) { |
| ... | @@ -7258,9 +7261,10 @@ pub fn addCCArgs( | ... | @@ -7258,9 +7261,10 @@ pub fn addCCArgs( |
| 7258 | const is_enabled = target.cpu.features.isEnabled(index); | 7261 | const is_enabled = target.cpu.features.isEnabled(index); |
| 7259 | | 7262 | |
| 7260 | if (feature.llvm_name) |llvm_name| { | 7263 | if (feature.llvm_name) |llvm_name| { |
| 7261 | // We communicate float ABI to Clang through the dedicated options. | 7264 | // We communicate these to Clang through the dedicated options. |
| 7262 | if (std.mem.startsWith(u8, llvm_name, "soft-float") or | 7265 | if (std.mem.startsWith(u8, llvm_name, "soft-float") or |
| 7263 | std.mem.startsWith(u8, llvm_name, "hard-float")) | 7266 | std.mem.startsWith(u8, llvm_name, "hard-float") or |
| | 7267 | (target.cpu.arch == .s390x and std.mem.eql(u8, llvm_name, "backchain"))) |
| 7264 | continue; | 7268 | continue; |
| 7265 | | 7269 | |
| 7266 | // Ignore these until we figure out how to handle the concept of omitting features. | 7270 | // Ignore these until we figure out how to handle the concept of omitting features. |