diff options
author | Kevin F. Quinn <kevquinn@gentoo.org> | 2006-12-20 11:23:30 +0000 |
---|---|---|
committer | Kevin F. Quinn <kevquinn@gentoo.org> | 2006-12-20 11:23:30 +0000 |
commit | 0fd3b8fde778729ba3c74e4897458ecc6c24de54 (patch) | |
tree | bb3834d9f3ae16bfa925b5a212608c53706b9abe | |
parent | Remove obsolete setup checks (hardened/vanilla compiler vs vanilla/hardened b... (diff) | |
download | kevquinn-0fd3b8fde778729ba3c74e4897458ecc6c24de54.tar.gz kevquinn-0fd3b8fde778729ba3c74e4897458ecc6c24de54.tar.bz2 kevquinn-0fd3b8fde778729ba3c74e4897458ecc6c24de54.zip |
Modify gcc-specs-directive to deal with %(x) references fully
svn path=/; revision=132
-rw-r--r-- | hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain-funcs.eclass | 39 | ||||
-rw-r--r-- | hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain.eclass | 12 |
2 files changed, 40 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} ]]) } diff --git a/hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain.eclass b/hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain.eclass index a168e07..9d73035 100644 --- a/hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain.eclass +++ b/hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain.eclass @@ -1598,6 +1598,18 @@ gcc_src_compile() { concat_minispecs vanilla.specs "${WORKDIR}" build.specs fi export GCC_SPECS="${WORKDIR}"/build.specs + else + if gcc-specs-pie ; then + if use hardened ; then + [[ -f $(gcc-install-dir)/hardenednopiessp.specs ]] || + die "Couldn't find hardenednopiessp.specs" + export GCC_SPECS="hardenednopiessp.specs" + else + [[ -f $(gcc-install-dir)/vanilla.specs ]] || + die "Couldn't find vanilla.specs" + export GCC_SPECS="vanilla.specs" + fi + fi fi # Build in a separate build tree |