summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin F. Quinn <kevquinn@gentoo.org>2006-12-20 11:23:30 +0000
committerKevin F. Quinn <kevquinn@gentoo.org>2006-12-20 11:23:30 +0000
commit0fd3b8fde778729ba3c74e4897458ecc6c24de54 (patch)
treebb3834d9f3ae16bfa925b5a212608c53706b9abe
parentRemove obsolete setup checks (hardened/vanilla compiler vs vanilla/hardened b... (diff)
downloadkevquinn-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.eclass39
-rw-r--r--hardened/toolchain/branches/gcc-glibc-nopie/eclass/toolchain.eclass12
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