xref: /aosp_15_r20/external/toolchain-utils/compiler_wrapper/thumb_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 Liimport (
8*760c253cSXin Li	"strings"
9*760c253cSXin Li)
10*760c253cSXin Li
11*760c253cSXin Lifunc processThumbCodeFlags(builder *commandBuilder) {
12*760c253cSXin Li	arch := builder.target.arch
13*760c253cSXin Li	if builder.target.abi != "eabi" && (strings.HasPrefix(arch, "armv7") || strings.HasPrefix(arch, "armv8")) {
14*760c253cSXin Li		// ARM32 specfic:
15*760c253cSXin Li		// 1. Generate thumb codes by default.  GCC is configured with
16*760c253cSXin Li		//    --with-mode=thumb and defaults to thumb mode already.  This
17*760c253cSXin Li		//    changes the default behavior of clang and doesn't affect GCC.
18*760c253cSXin Li		// 2. Do not force frame pointers on ARM32 (https://crbug.com/693137).
19*760c253cSXin Li		builder.addPreUserArgs("-mthumb")
20*760c253cSXin Li		builder.transformArgs(func(arg builderArg) string {
21*760c253cSXin Li			if !arg.fromUser && arg.value == "-fno-omit-frame-pointer" {
22*760c253cSXin Li				return ""
23*760c253cSXin Li			}
24*760c253cSXin Li			return arg.value
25*760c253cSXin Li		})
26*760c253cSXin Li	}
27*760c253cSXin Li}
28