summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain-funcs.eclass')
-rw-r--r--hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain-funcs.eclass39
1 files changed, 28 insertions, 11 deletions
diff --git a/hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain-funcs.eclass b/hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain-funcs.eclass
index 676d97d..5d6786f 100644
--- a/hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain-funcs.eclass
+++ b/hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain-funcs.eclass
@@ -213,7 +213,7 @@ gcc-specs-exists() {
# spec starts with '+' then it appends.
# gcc -dumpspecs is parsed first, followed by files listed by "gcc -v"
# as "Reading <file>", in order.
-gcc-specs-directive() {
+gcc-specs-directive1() {
local cc=$(tc-getCC)
local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}')
${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 \
@@ -225,41 +225,58 @@ spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
END { print spec }'
return 0
}
+gcc-specs-directive() {
+ local d s sd
+ d="$(gcc-specs-directive1 $1)"
+ while [[ ${d} == *%\(*\)* ]]; do
+ s=${d/*%\(}
+ s=${d/\)*}
+ sd="$(gcc-specs-directive1 ${s})"
+ d=${d//\%(${s})/${sd}}
+ done
+ echo ${d}
+ return 0
+}
# Returns true if the toolchain sets relro
gcc-specs-relro() {
local directive
- directive=$(gcc-specs-directive link_relro)
- [[ -z ${directive} ]] && directive=$(gcc-specs-directive link_command)
+# directive=$(gcc-specs-directive link_relro)
+# [[ -z ${directive} ]] && directive=$(gcc-specs-directive link_command)
+ directive=$(gcc-specs-directive link_command)
return $([[ ${directive/\{!norelro:} != ${directive} ]])
}
# Returns true if the toolchain sets now
gcc-specs-now() {
local directive
- directive=$(gcc-specs-directive link_now)
- [[ -z ${directive} ]] && directive=$(gcc-specs-directive link_command)
+# directive=$(gcc-specs-directive link_now)
+# [[ -z ${directive} ]] && directive=$(gcc-specs-directive link_command)
+ directive=$(gcc-specs-directive link_command)
return $([[ ${directive/\{!nonow:} != ${directive} ]])
}
# Returns true if gcc builds PIEs
gcc-specs-pie() {
local directive
- directive=$(gcc-specs-directive cc1_pie)
- [[ -z ${directive} ]] && directive=$(gcc-specs-directive cc1)
+# directive=$(gcc-specs-directive cc1_pie)
+# [[ -z ${directive} ]] && directive=$(gcc-specs-directive cc1)
+ directive=$(gcc-specs-directive cc1)
return $([[ ${directive/\{!nopie:} != ${directive} ]])
}
# Returns true if gcc builds with the stack protector
gcc-specs-ssp() {
local directive
- directive=$(gcc-specs-directive cc1_ssp)
- [[ -z ${directive} ]] && directive=$(gcc-specs-directive cc1)
+# directive=$(gcc-specs-directive cc1_ssp)
+# [[ -z ${directive} ]] && directive=$(gcc-specs-directive cc1)
+ directive=$(gcc-specs-directive cc1)
return $([[ ${directive/\{!fno-stack-protector:} != ${directive} ]])
}
# Returns true if gcc upgrades fstack-protector to fstack-protector-all
gcc-specs-ssp-to-all() {
local directive
gcc-specs-ssp || return 1
- directive=$(gcc-specs-directive cc1_ssp_all)
- [[ -z ${directive} ]] && directive=$(gcc-specs-directive cc1)
+# directive=$(gcc-specs-directive cc1_ssp_all)
+# [[ -z ${directive} ]] && directive=$(gcc-specs-directive cc1)
+ directive=$(gcc-specs-directive cc1)
return $([[ ${directive/\{!fno-stack-protector-all:} != ${directive} ]])
}