On Sun, Oct 12, 2014 at 11:22 AM, Anthony G. Basile <[email protected]> wrote:
> Hi everyone,
>
> I'd like to add the patch below to toolchain-funcs.eclass.  I need it for
> bug #499996 and it helps to address a category of bugs which gcc-4.8
> uncovers.  4.8 and above introduces -fstack-check.  This is code emitted by
> gcc to make sure you don't go past the beyond the boundary of the stack in a
> multithreaded environment.  It requires one register on at least i686 and
> amd64, but I'm not sure about the others.  In asm heavy code, such as vlc
> and ffmpeg, we hit the limit of useable registers pretty quickly and go over
> the top with either -fstack-check or pie.  We have tests to check for pie in
> toolchain-funcs, but not for stack-check.  The following adds that check.  I
> tested it already.  I'll commit in a few days if there are no objections.
>
> --- toolchain-funcs.eclass.orig    2014-10-12 11:23:41.585182742 -0400
> +++ toolchain-funcs.eclass    2014-10-12 11:31:57.170205300 -0400
> @@ -610,6 +610,12 @@
>      directive=$(gcc-specs-directive cc1)
>      return $([[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]])
>  }
> +# Returns true if gcc builds with fstack-check
> +gcc-specs-stack-check() {
> +    local directive
> +    directive=$(gcc-specs-directive cc1)
> +    return $([[ "${directive/\{!fno-stack-check:}" != "${directive}" ]])
> +}
>
>
>  # @FUNCTION: gen_usr_ldscript

Am I missing something here? I don't see how any of the tests used in
gcc-specs-* functions could possibly produce an output. The fact that this
coincidentally works in Bash shouldn't be relied upon.

-- 
Dan Douglas

Reply via email to