| // Copyright 2019 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package main |
| |
| func processPieFlags(builder *commandBuilder) { |
| fpieMap := map[string]bool{"-D__KERNEL__": true, "-fPIC": true, "-fPIE": true, "-fno-PIC": true, "-fno-PIE": true, |
| "-fno-pic": true, "-fno-pie": true, "-fpic": true, "-fpie": true, "-nopie": true, |
| "-nostartfiles": true, "-nostdlib": true, "-pie": true, "-static": true} |
| |
| pieMap := map[string]bool{"-D__KERNEL__": true, "-A": true, "-fno-PIC": true, "-fno-PIE": true, "-fno-pic": true, "-fno-pie": true, |
| "-nopie": true, "-nostartfiles": true, "-nostdlib": true, "-pie": true, "-r": true, "--shared": true, |
| "-shared": true, "-static": true} |
| |
| pie := false |
| fpie := false |
| if builder.target.abi != "eabi" { |
| for _, arg := range builder.args { |
| if arg.fromUser { |
| if fpieMap[arg.value] { |
| fpie = true |
| } |
| if pieMap[arg.value] { |
| pie = true |
| } |
| } |
| } |
| } |
| builder.transformArgs(func(arg builderArg) string { |
| // Remove -nopie as it is a non-standard flag. |
| if arg.value == "-nopie" { |
| return "" |
| } |
| if fpie && !arg.fromUser && arg.value == "-fPIE" { |
| return "" |
| } |
| if pie && !arg.fromUser && arg.value == "-pie" { |
| return "" |
| } |
| return arg.value |
| }) |
| } |