On śro, 2017-06-14 at 18:15 -0500, Matthias Maier wrote: > 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 | 71 > +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 71 insertions(+) > > diff --git a/eclass/toolchain-funcs.eclass b/eclass/toolchain-funcs.eclass > index a0c359a950..3658c40518 100644 > --- a/eclass/toolchain-funcs.eclass > +++ b/eclass/toolchain-funcs.eclass > @@ -792,6 +792,77 @@ 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() { > + $($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null > + #if defined(__PIE__) > + true > + #else > + false > + #endif > + EOF > + )
Looks quite horrible. Why can't you just compare the output against
a value instead of randomly executing it?
> +}
> +
> +# @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() {
> + $($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null
> + #if defined(__SSP__) || defined(__SSP_STRONG__) ||
> defined(__SSP_ALL__)
> + true
> + #else
> + false
> + #endif
> + EOF
> + )
> +}
> +
> +# @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() {
> + $($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null
> + #if defined(__SSP_STRONG__) || defined(__SSP_ALL__)
> + true
> + #else
> + false
> + #endif
> + EOF
> + )
> +}
> +
> +# @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() {
> + $($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null
> + #if defined(__SSP_ALL__)
> + true
> + #else
> + false
> + #endif
> + EOF
> + )
> +}
> +
> +
> # @FUNCTION: gen_usr_ldscript
> # @USAGE: [-a] <list of libs to create linker scripts for>
> # @DESCRIPTION:
--
Best regards,
Michał Górny
signature.asc
Description: This is a digitally signed message part
