blob: e4110827514d6a93a8b214763d450adfd6059f18 [file] [log] [blame]
// Copyright 2019 The ChromiumOS 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
})
}