Dnia 15 czerwca 2017 15:45:10 CEST, Matthias Maier <[email protected]>
napisał(a):
>From: Arfrever Frehtes Taifersar Arahesis <[email protected]>
>
>Newly added tc-enables-pie(), tc-enables-ssp(), tc-enables-ssp-strong()
>and tc-enables-ssp-all() check macros instead of specs.
>This solution also works with older GCC and with Clang.
>
>Signed-off-by: Matthias Maier <[email protected]>
>---
>eclass/toolchain-funcs.eclass | 67
>+++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 67 insertions(+)
>
>diff --git a/eclass/toolchain-funcs.eclass
>b/eclass/toolchain-funcs.eclass
>index a0c359a950..8cfe329a96 100644
>--- a/eclass/toolchain-funcs.eclass
>+++ b/eclass/toolchain-funcs.eclass
>@@ -792,6 +792,73 @@ gcc-specs-stack-check() {
> }
>
>
>+# @FUNCTION: tc-enables-pie
>+# @RETURN: Truth if the current compiler generates
>position-independent code (PIC) which can be linked into executables
>+# @DESCRIPTION:
>+# Return truth if the current compiler generates position-independent
>code (PIC)
>+# which can be linked into executables.
>+tc-enables-pie() {
>+ local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2>
>/dev/null
>+ #if defined(__PIE__)
>+ true
>+ #endif
>+ EOF
>+ )"
>+ [ "${ret}" = "true" ]
[[ ${ret} == true ]]
Would be the canonical bash way.
>+}
>+
>+# @FUNCTION: tc-enables-ssp
>+# @RETURN: Truth if the current compiler enables stack smashing
>protection (SSP) on at least minimal level
>+# @DESCRIPTION:
>+# Return truth if the current compiler enables stack smashing
>protection (SSP)
>+# on level corresponding to any of the following options:
>+# -fstack-protector
>+# -fstack-protector-strong
>+# -fstack-protector-all
>+tc-enables-ssp() {
>+ local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2>
>/dev/null
>+ #if defined(__SSP__) || defined(__SSP_STRONG__) ||
>defined(__SSP_ALL__)
>+ true
>+ #endif
>+ EOF
>+ )"
>+ [ "${ret}" = "true" ]
>+}
>+
>+# @FUNCTION: tc-enables-ssp-strong
>+# @RETURN: Truth if the current compiler enables stack smashing
>protection (SSP) on at least middle level
>+# @DESCRIPTION:
>+# Return truth if the current compiler enables stack smashing
>protection (SSP)
>+# on level corresponding to any of the following options:
>+# -fstack-protector-strong
>+# -fstack-protector-all
>+tc-enables-ssp-strong() {
>+ local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2>
>/dev/null
>+ #if defined(__SSP_STRONG__) || defined(__SSP_ALL__)
>+ true
>+ #endif
>+ EOF
>+ )"
>+ [ "${ret}" = "true" ]
>+}
>+
>+# @FUNCTION: tc-enables-ssp-all
>+# @RETURN: Truth if the current compiler enables stack smashing
>protection (SSP) on maximal level
>+# @DESCRIPTION:
>+# Return truth if the current compiler enables stack smashing
>protection (SSP)
>+# on level corresponding to any of the following options:
>+# -fstack-protector-all
>+tc-enables-ssp-all() {
>+ local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2>
>/dev/null
>+ #if defined(__SSP_ALL__)
>+ true
>+ #endif
>+ EOF
>+ )"
>+ [ "${ret}" = "true" ]
>+}
>+
>+
> # @FUNCTION: gen_usr_ldscript
> # @USAGE: [-a] <list of libs to create linker scripts for>
> # @DESCRIPTION:
--
Best regards,
Michał Górny (by phone)