xref: /aosp_15_r20/external/toolchain-utils/compiler_wrapper/stackprotector_flags.go (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1*760c253cSXin Li// Copyright 2019 The ChromiumOS Authors
2*760c253cSXin Li// Use of this source code is governed by a BSD-style license that can be
3*760c253cSXin Li// found in the LICENSE file.
4*760c253cSXin Li
5*760c253cSXin Lipackage main
6*760c253cSXin Li
7*760c253cSXin Lifunc processStackProtectorFlags(builder *commandBuilder) {
8*760c253cSXin Li	fstackMap := map[string]bool{"-D__KERNEL__": true, "-fno-stack-protector": true, "-nodefaultlibs": true,
9*760c253cSXin Li		"-nostdlib": true}
10*760c253cSXin Li
11*760c253cSXin Li	fstack := false
12*760c253cSXin Li	if builder.target.abi != "eabi" {
13*760c253cSXin Li		for _, arg := range builder.args {
14*760c253cSXin Li			if arg.fromUser && fstackMap[arg.value] {
15*760c253cSXin Li				fstack = true
16*760c253cSXin Li				break
17*760c253cSXin Li			}
18*760c253cSXin Li		}
19*760c253cSXin Li	}
20*760c253cSXin Li	if fstack {
21*760c253cSXin Li		builder.addPreUserArgs("-fno-stack-protector")
22*760c253cSXin Li		builder.transformArgs(func(arg builderArg) string {
23*760c253cSXin Li			if !arg.fromUser && arg.value == "-fstack-protector-strong" {
24*760c253cSXin Li				return ""
25*760c253cSXin Li			}
26*760c253cSXin Li			return arg.value
27*760c253cSXin Li		})
28*760c253cSXin Li	}
29*760c253cSXin Li}
30