You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
44 lines
1.3 KiB
// 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
|
|
})
|
|
}
|