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