Ping.

On Fri, Mar 11, 2016 at 9:09 AM, H.J. Lu <hongjiu...@intel.com> wrote:
> We can't set flag_pie to the default when flag_pic == 0, which may be
> set by -fno-pic or -fno-PIC, since the default value of flag_pie is
> non-zero when GCC is configured with --enable-default-pie.  We need
> to initialize flag_pic to -1 so that we can tell if -fpic, -fPIC,
> -fno-pic or -fno-PIC is used.
>
> OK for trunk?
>
>
> H.J.
> ---
> gcc/
>
>         PR driver/70192
>         * opts.c (finish_options): Don't set flag_pie to the default if
>         -fpic, -fPIC, -fno-pic or -fno-PIC is used.  Set flag_pic to 0
>         if it is -1.
>
> gcc/testsuite/
>
>         PR driver/70192
>         * gcc.dg/pic-1.c: New test.
>         * gcc.dg/pic-2.c: Likewise.
>         * gcc.dg/pic-3.c: Likewise.
>         * gcc.dg/pic-4.c: Likewise.
>         * gcc.dg/pie-1.c: Likewise.
>         * gcc.dg/pie-2.c: Likewise.
>         * gcc.dg/pie-3.c: Likewise.
>         * gcc.dg/pie-4.c: Likewise.
>         * gcc.dg/pie-5.c: Likewise.
>         * gcc.dg/pie-6.c: Likewise.
> ---
>  gcc/common.opt               |  4 ++--
>  gcc/opts.c                   |  7 ++++++-
>  gcc/testsuite/gcc.dg/pic-1.c | 10 ++++++++++
>  gcc/testsuite/gcc.dg/pic-2.c | 10 ++++++++++
>  gcc/testsuite/gcc.dg/pic-3.c | 10 ++++++++++
>  gcc/testsuite/gcc.dg/pic-4.c | 10 ++++++++++
>  gcc/testsuite/gcc.dg/pie-1.c | 10 ++++++++++
>  gcc/testsuite/gcc.dg/pie-2.c | 10 ++++++++++
>  gcc/testsuite/gcc.dg/pie-3.c | 10 ++++++++++
>  gcc/testsuite/gcc.dg/pie-4.c | 10 ++++++++++
>  gcc/testsuite/gcc.dg/pie-5.c | 10 ++++++++++
>  gcc/testsuite/gcc.dg/pie-6.c | 10 ++++++++++
>  12 files changed, 108 insertions(+), 3 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.dg/pic-1.c
>  create mode 100644 gcc/testsuite/gcc.dg/pic-2.c
>  create mode 100644 gcc/testsuite/gcc.dg/pic-3.c
>  create mode 100644 gcc/testsuite/gcc.dg/pic-4.c
>  create mode 100644 gcc/testsuite/gcc.dg/pie-1.c
>  create mode 100644 gcc/testsuite/gcc.dg/pie-2.c
>  create mode 100644 gcc/testsuite/gcc.dg/pie-3.c
>  create mode 100644 gcc/testsuite/gcc.dg/pie-4.c
>  create mode 100644 gcc/testsuite/gcc.dg/pie-5.c
>  create mode 100644 gcc/testsuite/gcc.dg/pie-6.c
>
> diff --git a/gcc/common.opt b/gcc/common.opt
> index 1c8cc8e..67048db 100644
> --- a/gcc/common.opt
> +++ b/gcc/common.opt
> @@ -1840,7 +1840,7 @@ Common Report Var(flag_peephole2) Optimization
>  Enable an RTL peephole pass before sched2.
>
>  fPIC
> -Common Report Var(flag_pic,2) Negative(fPIE)
> +Common Report Var(flag_pic,2) Negative(fPIE) Init(-1)
>  Generate position-independent code if possible (large mode).
>
>  fPIE
> @@ -1848,7 +1848,7 @@ Common Report Var(flag_pie,2) Negative(fpic) Init(-1)
>  Generate position-independent code for executables if possible (large mode).
>
>  fpic
> -Common Report Var(flag_pic,1) Negative(fpie)
> +Common Report Var(flag_pic,1) Negative(fpie) Init(-1)
>  Generate position-independent code if possible (small mode).
>
>  fpie
> diff --git a/gcc/opts.c b/gcc/opts.c
> index 2f45312..0f9431a 100644
> --- a/gcc/opts.c
> +++ b/gcc/opts.c
> @@ -766,13 +766,18 @@ finish_options (struct gcc_options *opts, struct 
> gcc_options *opts_set,
>          default value.  */
>        if (opts->x_flag_pie == -1)
>         {
> -         if (opts->x_flag_pic == 0)
> +         /* We initialize opts->x_flag_pic to -1 so that we can tell if
> +            -fpic, -fPIC, -fno-pic or -fno-PIC is used.  */
> +         if (opts->x_flag_pic == -1)
>             opts->x_flag_pie = DEFAULT_FLAG_PIE;
>           else
>             opts->x_flag_pie = 0;
>         }
> +      /* If -fPIE or -fpie is used, turn on PIC.  */
>        if (opts->x_flag_pie)
>         opts->x_flag_pic = opts->x_flag_pie;
> +      else if (opts->x_flag_pic == -1)
> +       opts->x_flag_pic = 0;
>        if (opts->x_flag_pic && !opts->x_flag_pie)
>         opts->x_flag_shlib = 1;
>        opts->x_flag_opts_finished = true;
> diff --git a/gcc/testsuite/gcc.dg/pic-1.c b/gcc/testsuite/gcc.dg/pic-1.c
> new file mode 100644
> index 0000000..7eb0765
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pic-1.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile } */
> +/* { dg-options "-fpic" } */
> +
> +#if __PIC__ != 1
> +# error __PIC__ is not 1!
> +#endif
> +
> +#ifdef __PIE__
> +# error __PIE__ is defined!
> +#endif
> diff --git a/gcc/testsuite/gcc.dg/pic-2.c b/gcc/testsuite/gcc.dg/pic-2.c
> new file mode 100644
> index 0000000..2c742e9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pic-2.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile } */
> +/* { dg-options "-fPIC" } */
> +
> +#if __PIC__ != 2
> +# error __PIC__ is not 2!
> +#endif
> +
> +#ifdef __PIE__
> +# error __PIE__ is defined!
> +#endif
> diff --git a/gcc/testsuite/gcc.dg/pic-3.c b/gcc/testsuite/gcc.dg/pic-3.c
> new file mode 100644
> index 0000000..d7d861b
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pic-3.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile } */
> +/* { dg-options "-fno-pic" } */
> +
> +#ifdef __PIC__
> +# error __PIC__ is defined!
> +#endif
> +
> +#ifdef __PIE__
> +# error __PIE__ is defined!
> +#endif
> diff --git a/gcc/testsuite/gcc.dg/pic-4.c b/gcc/testsuite/gcc.dg/pic-4.c
> new file mode 100644
> index 0000000..732f61f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pic-4.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile } */
> +/* { dg-options "-fno-PIC" } */
> +
> +#ifdef __PIC__
> +# error __PIC__ is defined!
> +#endif
> +
> +#ifdef __PIE__
> +# error __PIE__ is defined!
> +#endif
> diff --git a/gcc/testsuite/gcc.dg/pie-1.c b/gcc/testsuite/gcc.dg/pie-1.c
> new file mode 100644
> index 0000000..ff6281f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pie-1.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile } */
> +/* { dg-options "-fpie" } */
> +
> +#if __PIC__ != 1
> +# error __PIC__ is not 1!
> +#endif
> +
> +#if __PIE__ != 1
> +# error __PIE__ is not 1!
> +#endif
> diff --git a/gcc/testsuite/gcc.dg/pie-2.c b/gcc/testsuite/gcc.dg/pie-2.c
> new file mode 100644
> index 0000000..e185e51
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pie-2.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile } */
> +/* { dg-options "-fPIE" } */
> +
> +#if __PIC__ != 2
> +# error __PIC__ is not 2!
> +#endif
> +
> +#if __PIE__ != 2
> +# error __PIE__ is not 2!
> +#endif
> diff --git a/gcc/testsuite/gcc.dg/pie-3.c b/gcc/testsuite/gcc.dg/pie-3.c
> new file mode 100644
> index 0000000..fe46c98
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pie-3.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile } */
> +/* { dg-options "-fno-pie" } */
> +
> +#ifdef __PIC__
> +# error __PIC__ is defined!
> +#endif
> +
> +#ifdef __PIE__
> +# error __PIE__ is defined!
> +#endif
> diff --git a/gcc/testsuite/gcc.dg/pie-4.c b/gcc/testsuite/gcc.dg/pie-4.c
> new file mode 100644
> index 0000000..977baf0
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pie-4.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile } */
> +/* { dg-options "-fno-PIE" } */
> +
> +#ifdef __PIC__
> +# error __PIC__ is defined!
> +#endif
> +
> +#ifdef __PIE__
> +# error __PIE__ is defined!
> +#endif
> diff --git a/gcc/testsuite/gcc.dg/pie-5.c b/gcc/testsuite/gcc.dg/pie-5.c
> new file mode 100644
> index 0000000..d49554f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pie-5.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile { target pie_enabled } } */
> +/* { dg-options "" } */
> +
> +#ifndef __PIC__
> +# error __PIC__ is not defined!
> +#endif
> +
> +#ifndef __PIE__
> +# error __PIE__ is not defined!
> +#endif
> diff --git a/gcc/testsuite/gcc.dg/pie-6.c b/gcc/testsuite/gcc.dg/pie-6.c
> new file mode 100644
> index 0000000..85529a8
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pie-6.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile { target { ! pie_enabled } } } */
> +/* { dg-options "" } */
> +
> +#ifdef __PIC__
> +# error __PIC__ is defined!
> +#endif
> +
> +#ifdef __PIE__
> +# error __PIE__ is defined!
> +#endif
> --
> 2.5.0
>



-- 
H.J.

Reply via email to