Lines 61-66
Link Here
|
61 |
#### bindnow-flags #### |
61 |
#### bindnow-flags #### |
62 |
# Returns the flags to enable "now" binding in the current selected linker. |
62 |
# Returns the flags to enable "now" binding in the current selected linker. |
63 |
# |
63 |
# |
|
|
64 |
#### get-soft-flags #### |
65 |
# Write to stdout the gcc options to disable hardened tech |
66 |
# Intended for use where the options need to be set to |
67 |
# something other than C[XX]FLAGS. Use this rather than |
68 |
# hard-coding the flags in ebuilds. |
69 |
# Usage: |
70 |
# MY_CC_OPTS=$(get-soft-flags [pie] [ssp] [ssp-to-all] [now] [relro]) |
71 |
# |
64 |
################ DEPRECATED functions ################ |
72 |
################ DEPRECATED functions ################ |
65 |
# The following are still present to avoid breaking existing |
73 |
# The following are still present to avoid breaking existing |
66 |
# code more than necessary; however they are deprecated. Please |
74 |
# code more than necessary; however they are deprecated. Please |
Lines 101-107
Link Here
|
101 |
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -g -g0 -g1 -g2 -g3 -ggdb -ggdb0 -ggdb1 -ggdb2 -ggdb3" |
109 |
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -g -g0 -g1 -g2 -g3 -ggdb -ggdb0 -ggdb1 -ggdb2 -ggdb3" |
102 |
fi |
110 |
fi |
103 |
# allow a bunch of flags that negate features / control ABI |
111 |
# allow a bunch of flags that negate features / control ABI |
104 |
ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-stack-protector -fno-stack-protector-all" |
112 |
ALLOWED_FLAGS="${ALLOWED_FLAGS} -nopie -nonow -norelro -fno-stack-protector -fno-stack-protector-all" |
105 |
ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs \ |
113 |
ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs \ |
106 |
-mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow \ |
114 |
-mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow \ |
107 |
-mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 \ |
115 |
-mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 \ |
Lines 118-123
Link Here
|
118 |
return 0 |
126 |
return 0 |
119 |
} |
127 |
} |
120 |
|
128 |
|
|
|
129 |
# echo flags to disabled hardened tech |
130 |
get-soft-flags() { |
131 |
local f |
132 |
for f in "$@" ; do |
133 |
case "${f}" in |
134 |
# Ideally we should only concern ourselves with PIE flags, |
135 |
# not -fPIC or -fpic, but too many places filter -fPIC without |
136 |
# thinking about -fPIE. |
137 |
pie) |
138 |
gcc-specs-pie || continue |
139 |
is-flagq -nopie || echo -n -nopie;; |
140 |
ssp) |
141 |
gcc-specs-ssp || continue |
142 |
is-flagq -fno-stack-protector || echo -n -fno-stack-protector;; |
143 |
ssp-to-all) |
144 |
gcc-specs-ssp-to-all || continue |
145 |
is-flagq -fno-stack-protector-all || echo -n -fno-stack-protector-all;; |
146 |
now) |
147 |
gcc-specs-now || continue |
148 |
is-flagq -nonow || echo -n -nonow;; |
149 |
relro) |
150 |
gcc-specs-relro || continue |
151 |
is-flagq -norelro || echo -n -norelro;; |
152 |
*) |
153 |
die "get-soft-flags does not understand ${f}";; |
154 |
esac |
155 |
done |
156 |
} |
157 |
|
121 |
# inverted filters for hardened compiler. This is trying to unpick |
158 |
# inverted filters for hardened compiler. This is trying to unpick |
122 |
# the hardened compiler defaults. |
159 |
# the hardened compiler defaults. |
123 |
_filter-hardened() { |
160 |
_filter-hardened() { |
Lines 128-141
Link Here
|
128 |
# not -fPIC or -fpic, but too many places filter -fPIC without |
165 |
# not -fPIC or -fpic, but too many places filter -fPIC without |
129 |
# thinking about -fPIE. |
166 |
# thinking about -fPIE. |
130 |
-fPIC|-fpic|-fPIE|-fpie|-Wl,pie|-pie) |
167 |
-fPIC|-fpic|-fPIE|-fpie|-Wl,pie|-pie) |
131 |
gcc-specs-pie || continue |
168 |
append-flags $(get-soft-flags pie);; |
132 |
is-flagq -nopie || append-flags -nopie;; |
|
|
133 |
-fstack-protector) |
169 |
-fstack-protector) |
134 |
gcc-specs-ssp || continue |
170 |
append-flags $(get-soft-flags ssp);; |
135 |
is-flagq -fno-stack-protector || append-flags -fno-stack-protector;; |
|
|
136 |
-fstack-protector-all) |
171 |
-fstack-protector-all) |
137 |
gcc-specs-ssp-to-all || continue |
172 |
append-flags $(get-soft-flags ssp-to-all);; |
138 |
is-flagq -fno-stack-protector-all || append-flags -fno-stack-protector-all;; |
|
|
139 |
esac |
173 |
esac |
140 |
done |
174 |
done |
141 |
} |
175 |
} |
Lines 385-391
Link Here
|
385 |
# its really only present due to the append-flags() abomination. |
420 |
# its really only present due to the append-flags() abomination. |
386 |
test-flags() { test-flags-CC "$@"; } |
421 |
test-flags() { test-flags-CC "$@"; } |
387 |
|
422 |
|
388 |
# Depriciated, use test-flags() |
423 |
# Deprecated, use test-flags() |
389 |
test_flag() { |
424 |
test_flag() { |
390 |
ewarn "test_flag: deprecated, please use test-flags()!" >&2 |
425 |
ewarn "test_flag: deprecated, please use test-flags()!" >&2 |
391 |
|
426 |
|