Hi,

The current implementation of -fstack-protector for x86 defaults to
using a TLS guard, unless the target in question is Android, in which
case it falls back on using a global guard. Code from
config/i386/i386.c line 5512 or thereabouts:

  /* Handle stack protector */
  if (!opts_set->x_ix86_stack_protector_guard)
    opts->x_ix86_stack_protector_guard
      = TARGET_HAS_BIONIC ? SSP_GLOBAL : SSP_TLS;

The rationale for the current behavior is described here:

  https://gcc.gnu.org/ml/gcc-patches/2013-04/msg00764.html

e.g. the decision to default to a global guard was motivated by the
desire to promote compatibility at the time with older versions of
Android (pre Jelly Bean).

This default for Android no longer makes sense given Bionic has had
TLS guard support for quite some time now; platform developers and
kernel developers have complained about the current behavior and have
been lobbying for changing the default.  Folks that are compiling
native code for pre-4.2 Android will most likely be using older
versions of the Android NDK in any case.

I would like to propose removing the Bionic exception, e.g. changing
the code to read:

  /* Handle stack protector */
  if (!opts_set->x_ix86_stack_protector_guard)
    opts->x_ix86_stack_protector_guard = SSP_TLS;

Any comments, questions, etc. would be appreciated.

Thanks, Than

Reply via email to