diff options
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.eclass | 39 |
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} ]]) } |