* [Patch,testsuite] Fix bind_pic_locally
@ 2014-06-04 13:56 Vidya Praveen
2014-06-25 10:07 ` Vidya Praveen
0 siblings, 1 reply; 3+ messages in thread
From: Vidya Praveen @ 2014-06-04 13:56 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1347 bytes --]
Hello,
This is to follow up the patch I had posted to fix bind_pic_locally some time
ago (sorry, this went in to my back log for a while).
To summarize, multilib_flags when it contains -fpic or -fPIC, overrides -fpie
or -fPIE that is added by bind_pic_locally. The fix that was finally agreed on
was to store the flags to a variable at bind_pic_locally and append it to
multilib_flags just before invoking target_compile and remove it immediately
after that (Refer [1]).
This patch implements the same. Since this is an issue not only for gcc but
also for g++ and gfortran tests, I have fixed this in g++.exp and gfortran.exp
along with gcc.exp.
This was tested and works fine on:
aarch64-none-elf
aarch64-none-linux-gnu
arm-none-linux-gnueabihf
x86_64-unknown-linux-gnu
OK for trunk?
Cheers
VP.
[1] http://gcc.gnu.org/ml/gcc-patches/2014-01/msg00365.html
~~~
gcc/testsuite/ChangeLog:
2014-06-04 Vidya Praveen <vidyapraveen@arm.com>
* lib/target-support.exp (bind_pic_locally): Save the flags to
'flags_to_postpone' instead of appending to 'flags'.
* lib/gcc.exp (gcc_target_compile): Append board_info's multilib_flags
with flags_to_postpone and revert after target_compile.
* lib/g++.exp (g++_target_compile): Ditto.
* lib/gfortran.exp (gfortran_target_compile): Ditto.
[-- Attachment #2: fixbplv2.patch --]
[-- Type: text/x-diff, Size: 6234 bytes --]
diff --git a/gcc/testsuite/lib/g++.exp b/gcc/testsuite/lib/g++.exp
index 751e27b..6658c58 100644
--- a/gcc/testsuite/lib/g++.exp
+++ b/gcc/testsuite/lib/g++.exp
@@ -288,6 +288,8 @@ proc g++_target_compile { source dest type options } {
global gluefile wrap_flags
global ALWAYS_CXXFLAGS
global GXX_UNDER_TEST
+ global flags_to_postpone
+ global board_info
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
lappend options "libs=${gluefile}"
@@ -313,10 +315,25 @@ proc g++_target_compile { source dest type options } {
exec rm -f $rponame
}
+ # bind_pic_locally adds -fpie/-fPIE flags to flags_to_postpone and it is
+ # appended here to multilib_flags as it can be overridden by the latter
+ # if it was added earlier. After the target_compile, multilib_flags is
+ # restored to its orignal content.
+ set tboard [target_info name]
+ if {[board_info $tboard exists multilib_flags]} {
+ set orig_multilib_flags "[board_info [target_info name] multilib_flags]"
+ append board_info($tboard,multilib_flags) " $flags_to_postpone"
+ }
+
set options [dg-additional-files-options $options $source]
set result [target_compile $source $dest $type $options]
+ if {[board_info $tboard exists multilib_flags]} {
+ set board_info($tboard,multilib_flags) $orig_multilib_flags
+ set flags_to_postpone ""
+ }
+
return $result
}
diff --git a/gcc/testsuite/lib/gcc.exp b/gcc/testsuite/lib/gcc.exp
index 49394b0..f937064 100644
--- a/gcc/testsuite/lib/gcc.exp
+++ b/gcc/testsuite/lib/gcc.exp
@@ -126,7 +126,9 @@ proc gcc_target_compile { source dest type options } {
global GCC_UNDER_TEST
global TOOL_OPTIONS
global TEST_ALWAYS_FLAGS
-
+ global flags_to_postpone
+ global board_info
+
if {[target_info needs_status_wrapper] != "" && \
[target_info needs_status_wrapper] != "0" && \
[info exists gluefile] } {
@@ -162,8 +164,26 @@ proc gcc_target_compile { source dest type options } {
set options [concat "{additional_flags=$TOOL_OPTIONS}" $options]
}
+ # bind_pic_locally adds -fpie/-fPIE flags to flags_to_postpone and it is
+ # appended here to multilib_flags as it can be overridden by the latter
+ # if it was added earlier. After the target_compile, multilib_flags is
+ # restored to its orignal content.
+ set tboard [target_info name]
+ if {[board_info $tboard exists multilib_flags]} {
+ set orig_multilib_flags "[board_info [target_info name] multilib_flags]"
+ append board_info($tboard,multilib_flags) " $flags_to_postpone"
+ }
+
lappend options "timeout=[timeout_value]"
lappend options "compiler=$GCC_UNDER_TEST"
set options [dg-additional-files-options $options $source]
- return [target_compile $source $dest $type $options]
+ set return_val [target_compile $source $dest $type $options]
+
+ if {[board_info $tboard exists multilib_flags]} {
+ set board_info($tboard,multilib_flags) $orig_multilib_flags
+ set flags_to_postpone ""
+ }
+
+ return $return_val
}
+
diff --git a/gcc/testsuite/lib/gfortran.exp b/gcc/testsuite/lib/gfortran.exp
index c9b5d64..9d174bb 100644
--- a/gcc/testsuite/lib/gfortran.exp
+++ b/gcc/testsuite/lib/gfortran.exp
@@ -234,16 +234,35 @@ proc gfortran_target_compile { source dest type options } {
global gluefile wrap_flags
global ALWAYS_GFORTRANFLAGS
global GFORTRAN_UNDER_TEST
+ global flags_to_postpone
+ global board_info
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
lappend options "libs=${gluefile}"
lappend options "ldflags=${wrap_flags}"
}
+ # bind_pic_locally adds -fpie/-fPIE flags to flags_to_postpone and it is
+ # appended here to multilib_flags as it can be overridden by the latter
+ # if it was added earlier. After the target_compile, multilib_flags is
+ # restored to its orignal content.
+ set tboard [target_info name]
+ if {[board_info $tboard exists multilib_flags]} {
+ set orig_multilib_flags "[board_info [target_info name] multilib_flags]"
+ append board_info($tboard,multilib_flags) " $flags_to_postpone"
+ }
+
lappend options "compiler=$GFORTRAN_UNDER_TEST"
lappend options "timeout=[timeout_value]"
set options [concat "$ALWAYS_GFORTRANFLAGS" $options]
set options [dg-additional-files-options $options $source]
- return [target_compile $source $dest $type $options]
+ set return_val [target_compile $source $dest $type $options]
+
+ if {[board_info $tboard exists multilib_flags]} {
+ set board_info($tboard,multilib_flags) $orig_multilib_flags
+ set flags_to_postpone ""
+ }
+
+ return $return_val
}
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 57b10d0..3f2d32c 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -5151,25 +5151,35 @@ proc add_options_for_ieee { flags } {
return $flags
}
+if {![info exists flags_to_postpone]} {
+ set flags_to_postpone ""
+}
+
# Add to FLAGS the flags needed to enable functions to bind locally
# when using pic/PIC passes in the testsuite.
-
proc add_options_for_bind_pic_locally { flags } {
+ global flags_to_postpone
+
+ # Instead of returning 'flags' with the -fPIE or -fpie appended, we save it
+ # in 'flags_to_postpone' and append it later in gcc_target_compile procedure in
+ # order to make sure that the multilib_flags doesn't override this.
+
if {[check_no_compiler_messages using_pic2 assembly {
#if __PIC__ != 2
#error FOO
#endif
}]} {
- return "$flags -fPIE"
+ set flags_to_postpone "-fPIE"
+ return $flags
}
if {[check_no_compiler_messages using_pic1 assembly {
#if __PIC__ != 1
#error FOO
#endif
}]} {
- return "$flags -fpie"
+ set flags_to_postpone "-fpie"
+ return $flags
}
-
return $flags
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Patch,testsuite] Fix bind_pic_locally
2014-06-04 13:56 [Patch,testsuite] Fix bind_pic_locally Vidya Praveen
@ 2014-06-25 10:07 ` Vidya Praveen
2014-06-25 21:11 ` Jeff Law
0 siblings, 1 reply; 3+ messages in thread
From: Vidya Praveen @ 2014-06-25 10:07 UTC (permalink / raw)
To: gcc-patches
PING!
On Wed, Jun 04, 2014 at 02:56:00PM +0100, Vidya Praveen wrote:
> Hello,
>
> This is to follow up the patch I had posted to fix bind_pic_locally some time
> ago (sorry, this went in to my back log for a while).
>
> To summarize, multilib_flags when it contains -fpic or -fPIC, overrides -fpie
> or -fPIE that is added by bind_pic_locally. The fix that was finally agreed on
> was to store the flags to a variable at bind_pic_locally and append it to
> multilib_flags just before invoking target_compile and remove it immediately
> after that (Refer [1]).
>
> This patch implements the same. Since this is an issue not only for gcc but
> also for g++ and gfortran tests, I have fixed this in g++.exp and gfortran.exp
> along with gcc.exp.
>
> This was tested and works fine on:
>
> aarch64-none-elf
> aarch64-none-linux-gnu
> arm-none-linux-gnueabihf
> x86_64-unknown-linux-gnu
>
> OK for trunk?
>
> Cheers
> VP.
>
> [1] http://gcc.gnu.org/ml/gcc-patches/2014-01/msg00365.html
>
> ~~~
>
> gcc/testsuite/ChangeLog:
>
> 2014-06-04 Vidya Praveen <vidyapraveen@arm.com>
>
> * lib/target-support.exp (bind_pic_locally): Save the flags to
> 'flags_to_postpone' instead of appending to 'flags'.
> * lib/gcc.exp (gcc_target_compile): Append board_info's multilib_flags
> with flags_to_postpone and revert after target_compile.
> * lib/g++.exp (g++_target_compile): Ditto.
> * lib/gfortran.exp (gfortran_target_compile): Ditto.
> diff --git a/gcc/testsuite/lib/g++.exp b/gcc/testsuite/lib/g++.exp
> index 751e27b..6658c58 100644
> --- a/gcc/testsuite/lib/g++.exp
> +++ b/gcc/testsuite/lib/g++.exp
> @@ -288,6 +288,8 @@ proc g++_target_compile { source dest type options } {
> global gluefile wrap_flags
> global ALWAYS_CXXFLAGS
> global GXX_UNDER_TEST
> + global flags_to_postpone
> + global board_info
>
> if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
> lappend options "libs=${gluefile}"
> @@ -313,10 +315,25 @@ proc g++_target_compile { source dest type options } {
> exec rm -f $rponame
> }
>
> + # bind_pic_locally adds -fpie/-fPIE flags to flags_to_postpone and it is
> + # appended here to multilib_flags as it can be overridden by the latter
> + # if it was added earlier. After the target_compile, multilib_flags is
> + # restored to its orignal content.
> + set tboard [target_info name]
> + if {[board_info $tboard exists multilib_flags]} {
> + set orig_multilib_flags "[board_info [target_info name] multilib_flags]"
> + append board_info($tboard,multilib_flags) " $flags_to_postpone"
> + }
> +
> set options [dg-additional-files-options $options $source]
>
> set result [target_compile $source $dest $type $options]
>
> + if {[board_info $tboard exists multilib_flags]} {
> + set board_info($tboard,multilib_flags) $orig_multilib_flags
> + set flags_to_postpone ""
> + }
> +
> return $result
> }
>
> diff --git a/gcc/testsuite/lib/gcc.exp b/gcc/testsuite/lib/gcc.exp
> index 49394b0..f937064 100644
> --- a/gcc/testsuite/lib/gcc.exp
> +++ b/gcc/testsuite/lib/gcc.exp
> @@ -126,7 +126,9 @@ proc gcc_target_compile { source dest type options } {
> global GCC_UNDER_TEST
> global TOOL_OPTIONS
> global TEST_ALWAYS_FLAGS
> -
> + global flags_to_postpone
> + global board_info
> +
> if {[target_info needs_status_wrapper] != "" && \
> [target_info needs_status_wrapper] != "0" && \
> [info exists gluefile] } {
> @@ -162,8 +164,26 @@ proc gcc_target_compile { source dest type options } {
> set options [concat "{additional_flags=$TOOL_OPTIONS}" $options]
> }
>
> + # bind_pic_locally adds -fpie/-fPIE flags to flags_to_postpone and it is
> + # appended here to multilib_flags as it can be overridden by the latter
> + # if it was added earlier. After the target_compile, multilib_flags is
> + # restored to its orignal content.
> + set tboard [target_info name]
> + if {[board_info $tboard exists multilib_flags]} {
> + set orig_multilib_flags "[board_info [target_info name] multilib_flags]"
> + append board_info($tboard,multilib_flags) " $flags_to_postpone"
> + }
> +
> lappend options "timeout=[timeout_value]"
> lappend options "compiler=$GCC_UNDER_TEST"
> set options [dg-additional-files-options $options $source]
> - return [target_compile $source $dest $type $options]
> + set return_val [target_compile $source $dest $type $options]
> +
> + if {[board_info $tboard exists multilib_flags]} {
> + set board_info($tboard,multilib_flags) $orig_multilib_flags
> + set flags_to_postpone ""
> + }
> +
> + return $return_val
> }
> +
> diff --git a/gcc/testsuite/lib/gfortran.exp b/gcc/testsuite/lib/gfortran.exp
> index c9b5d64..9d174bb 100644
> --- a/gcc/testsuite/lib/gfortran.exp
> +++ b/gcc/testsuite/lib/gfortran.exp
> @@ -234,16 +234,35 @@ proc gfortran_target_compile { source dest type options } {
> global gluefile wrap_flags
> global ALWAYS_GFORTRANFLAGS
> global GFORTRAN_UNDER_TEST
> + global flags_to_postpone
> + global board_info
>
> if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
> lappend options "libs=${gluefile}"
> lappend options "ldflags=${wrap_flags}"
> }
>
> + # bind_pic_locally adds -fpie/-fPIE flags to flags_to_postpone and it is
> + # appended here to multilib_flags as it can be overridden by the latter
> + # if it was added earlier. After the target_compile, multilib_flags is
> + # restored to its orignal content.
> + set tboard [target_info name]
> + if {[board_info $tboard exists multilib_flags]} {
> + set orig_multilib_flags "[board_info [target_info name] multilib_flags]"
> + append board_info($tboard,multilib_flags) " $flags_to_postpone"
> + }
> +
> lappend options "compiler=$GFORTRAN_UNDER_TEST"
> lappend options "timeout=[timeout_value]"
>
> set options [concat "$ALWAYS_GFORTRANFLAGS" $options]
> set options [dg-additional-files-options $options $source]
> - return [target_compile $source $dest $type $options]
> + set return_val [target_compile $source $dest $type $options]
> +
> + if {[board_info $tboard exists multilib_flags]} {
> + set board_info($tboard,multilib_flags) $orig_multilib_flags
> + set flags_to_postpone ""
> + }
> +
> + return $return_val
> }
> diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
> index 57b10d0..3f2d32c 100644
> --- a/gcc/testsuite/lib/target-supports.exp
> +++ b/gcc/testsuite/lib/target-supports.exp
> @@ -5151,25 +5151,35 @@ proc add_options_for_ieee { flags } {
> return $flags
> }
>
> +if {![info exists flags_to_postpone]} {
> + set flags_to_postpone ""
> +}
> +
> # Add to FLAGS the flags needed to enable functions to bind locally
> # when using pic/PIC passes in the testsuite.
> -
> proc add_options_for_bind_pic_locally { flags } {
> + global flags_to_postpone
> +
> + # Instead of returning 'flags' with the -fPIE or -fpie appended, we save it
> + # in 'flags_to_postpone' and append it later in gcc_target_compile procedure in
> + # order to make sure that the multilib_flags doesn't override this.
> +
> if {[check_no_compiler_messages using_pic2 assembly {
> #if __PIC__ != 2
> #error FOO
> #endif
> }]} {
> - return "$flags -fPIE"
> + set flags_to_postpone "-fPIE"
> + return $flags
> }
> if {[check_no_compiler_messages using_pic1 assembly {
> #if __PIC__ != 1
> #error FOO
> #endif
> }]} {
> - return "$flags -fpie"
> + set flags_to_postpone "-fpie"
> + return $flags
> }
> -
> return $flags
> }
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Patch,testsuite] Fix bind_pic_locally
2014-06-25 10:07 ` Vidya Praveen
@ 2014-06-25 21:11 ` Jeff Law
0 siblings, 0 replies; 3+ messages in thread
From: Jeff Law @ 2014-06-25 21:11 UTC (permalink / raw)
To: Vidya Praveen, gcc-patches
On 06/25/14 04:07, Vidya Praveen wrote:
> PING!
>
> On Wed, Jun 04, 2014 at 02:56:00PM +0100, Vidya Praveen wrote:
>> Hello,
>>
>> This is to follow up the patch I had posted to fix bind_pic_locally some time
>> ago (sorry, this went in to my back log for a while).
>>
>> To summarize, multilib_flags when it contains -fpic or -fPIC, overrides -fpie
>> or -fPIE that is added by bind_pic_locally. The fix that was finally agreed on
>> was to store the flags to a variable at bind_pic_locally and append it to
>> multilib_flags just before invoking target_compile and remove it immediately
>> after that (Refer [1]).
>>
>> This patch implements the same. Since this is an issue not only for gcc but
>> also for g++ and gfortran tests, I have fixed this in g++.exp and gfortran.exp
>> along with gcc.exp.
>>
>> This was tested and works fine on:
>>
>> aarch64-none-elf
>> aarch64-none-linux-gnu
>> arm-none-linux-gnueabihf
>> x86_64-unknown-linux-gnu
>>
>> OK for trunk?
>>
>> Cheers
>> VP.
>>
>> [1] http://gcc.gnu.org/ml/gcc-patches/2014-01/msg00365.html
>>
>> ~~~
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2014-06-04 Vidya Praveen <vidyapraveen@arm.com>
>>
>> * lib/target-support.exp (bind_pic_locally): Save the flags to
>> 'flags_to_postpone' instead of appending to 'flags'.
>> * lib/gcc.exp (gcc_target_compile): Append board_info's multilib_flags
>> with flags_to_postpone and revert after target_compile.
>> * lib/g++.exp (g++_target_compile): Ditto.
>> * lib/gfortran.exp (gfortran_target_compile): Ditto.
OK. Oh how I hate tcl...
jeff
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-06-25 21:11 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-04 13:56 [Patch,testsuite] Fix bind_pic_locally Vidya Praveen
2014-06-25 10:07 ` Vidya Praveen
2014-06-25 21:11 ` Jeff Law
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).