From: Tom de Vries <tdevries@suse.de>
To: Tom Tromey <tom@tromey.com>
Cc: gdb-patches@sourceware.org, Joel Brobecker <brobecker@gnat.com>
Subject: [gdb/testsuite] Compile ada with -lgnarl_pic and -lgnat_pic if required
Date: Thu, 10 Oct 2019 14:03:00 -0000 [thread overview]
Message-ID: <373ebbd0-d646-3162-31af-174e8b08f8a4@suse.de> (raw)
In-Reply-To: <87tv8idleo.fsf@tromey.com>
[-- Attachment #1: Type: text/plain, Size: 610 bytes --]
[ Re: [PING][PATCH][gdb/testsuite] Fix ada tests with -fPIE/-pie ]
On 09-10-2019 16:49, Tom Tromey wrote:
>>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:
>
>>> 2019-08-08 Tom de Vries <tdevries@suse.de>
>>>
>>> PR testsuite/24888
>>> * lib/ada.exp (target_compile_ada_from_dir): Route -pie/-no-pie to
>>> gnatlink.
>
> I'm sorry about the delay on this.
Np, thanks for the review.
> I think this is ok.
Committed. And now that the approach has been deemed acceptable, here's
a followup patch that makes gdb.ada work for me on openSUSE Leap 15.1
with -fPIE/-pie.
OK for trunk?
Thanks,
- Tom
[-- Attachment #2: 0001-gdb-testsuite-Compile-ada-with-lgnarl_pic-and-lgnat_pic-if-required.patch --]
[-- Type: text/x-patch, Size: 5104 bytes --]
[gdb/testsuite] Compile ada with -lgnarl_pic and -lgnat_pic if required
On openSUSE Leap 15.1, when running the gdb.ada testsuite with target board
unix/-fPIE/-pie, I get:
...
nr of unexpected failures 158
...
The problem is that although due to commit abcf2cc85a3 "[gdb/testsuite] Fix
ada tests with -fPIE/-pie" we try to compile say, hello.adb like so:
...
$ gnatmake -fPIE -largs -pie -margs hello.adb
...
this is not sufficient, because gnatlink is try to link in libgnat.a, which is
not Position Independent Code.
This issue has been filed as gcc PR ada/87936 - "gnatlink fails with -pie".
Work around this issue by compiling with _pic versions of lgnarl and lgnat:
...
$ gnatmake -fPIE -largs -pie -lgnarl_pic -lgnat_pic -margs hello.adb
...
if that is required to make hello.adb compile.
Using this patch, I get instead:
...
nr of unexpected failures 2
...
where one failure also happens with native, and the other has been filed as
gdb PR24890.
Tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2019-10-10 Tom de Vries <tdevries@suse.de>
PR testsuite/24888
* lib/ada.exp (gdb_simple_compile_ada): New proc.
(calculating_ada_needs_libs_pic_suffix): New global, initialized to 0.
(gdb_ada_needs_libs_pic_suffix): New caching proc.
(target_compile_ada_from_dir): Append -largs -lgnarl_pic -lgnat_pic
-margs to multilib_flags if required.
(gdb_compile_ada_1): Factor out of ...
(gdb_compile_ada): ... here.
---
gdb/testsuite/lib/ada.exp | 86 ++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 85 insertions(+), 1 deletion(-)
diff --git a/gdb/testsuite/lib/ada.exp b/gdb/testsuite/lib/ada.exp
index 45c41806a64..4bdb12051ec 100644
--- a/gdb/testsuite/lib/ada.exp
+++ b/gdb/testsuite/lib/ada.exp
@@ -17,6 +17,78 @@
# after having temporarily changed the current working directory to
# BUILDDIR.
+proc gdb_simple_compile_ada {name code {type object} {compile_flags {}} {object obj}} {
+ upvar $object obj
+
+ switch -regexp -- $type {
+ "executable" {
+ set postfix "x"
+ }
+ "object" {
+ set postfix "o"
+ }
+ "preprocess" {
+ set postfix "i"
+ }
+ "assembly" {
+ set postfix "s"
+ }
+ }
+ set src [standard_temp_file $name.adb]
+ set obj [standard_temp_file $name-[pid].$postfix]
+ set compile_flags [concat $compile_flags {debug nowarnings quiet}]
+
+ gdb_produce_source $src $code
+
+ verbose "$name: compiling testfile $src" 2
+ set lines [gdb_compile_ada_1 $src $obj $type $compile_flags]
+
+ if ![string match "" $lines] then {
+ verbose "$name: compilation failed, returning 0" 2
+ return 0
+ }
+ return 1
+}
+
+global calculating_ada_needs_libs_pic_suffix
+set calculating_ada_needs_libs_pic_suffix 0
+gdb_caching_proc gdb_ada_needs_libs_pic_suffix {
+ global calculating_ada_needs_libs_pic_suffix
+ if { $calculating_ada_needs_libs_pic_suffix } {
+ return 0
+ }
+ set ada_hello {
+ with Ada.Text_IO;
+
+ procedure Hello is
+ begin
+ Ada.Text_IO.Put_Line("Hello, world!");
+ end Hello;
+ }
+
+ set calculating_ada_needs_libs_pic_suffix 1
+ set res \
+ [gdb_simple_compile_ada hello $ada_hello executable]
+ if { $res == 1 } {
+ set calculating_ada_needs_libs_pic_suffix 0
+ return 0
+ }
+ set flags {}
+ lappend flags "additional_flags=-largs"
+ lappend flags "additional_flags=-lgnarl_pic"
+ lappend flags "additional_flags=-lgnat_pic"
+ lappend flags "additional_flags=-margs"
+ set res \
+ [gdb_simple_compile_ada hello $ada_hello executable $flags]
+ if { $res == 1 } {
+ set calculating_ada_needs_libs_pic_suffix 0
+ return 1
+ }
+
+ set calculating_ada_needs_libs_pic_suffix 0
+ return 0
+}
+
proc target_compile_ada_from_dir {builddir source dest type options} {
set saved_cwd [pwd]
@@ -29,6 +101,10 @@ proc target_compile_ada_from_dir {builddir source dest type options} {
# Pretend gnatmake supports -pie/-no-pie, route it to
# linker.
append multilib_flag " -largs $op -margs"
+ if { $op == "-pie" && [gdb_ada_needs_libs_pic_suffix]} {
+ # Work around PR gcc/87936 by using libgnat_pic
+ append multilib_flag " -largs -lgnarl_pic -lgnat_pic -margs"
+ }
} else {
append multilib_flag " $op"
}
@@ -54,7 +130,7 @@ proc target_compile_ada_from_dir {builddir source dest type options} {
# Compile some Ada code.
-proc gdb_compile_ada {source dest type options} {
+proc gdb_compile_ada_1 {source dest type options} {
set srcdir [file dirname $source]
set gprdir [file dirname $srcdir]
@@ -78,6 +154,14 @@ proc gdb_compile_ada {source dest type options} {
# We therefore simply check whether the dest file has been created
# or not. Unless not present, the build has succeeded.
if [file exists $dest] { set result "" }
+ return $result
+}
+
+# Compile some Ada code.
+
+proc gdb_compile_ada {source dest type options} {
+ set result [gdb_compile_ada_1 $source $dest $type $options]
+
gdb_compile_test $source $result
return $result
}
prev parent reply other threads:[~2019-10-10 14:03 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-07 11:07 [PATCH][gdb/testsuite] Fix ada tests with -fPIE/-pie Tom de Vries
2019-08-07 14:18 ` Tom Tromey
2019-08-07 15:27 ` Tom de Vries
2019-08-08 10:15 ` Tom de Vries
2019-08-21 7:15 ` [PING][PATCH][gdb/testsuite] " Tom de Vries
2019-08-28 7:18 ` [PING^2][PATCH][gdb/testsuite] " Tom de Vries
2019-09-04 8:17 ` [PING^3][PATCH][gdb/testsuite] " Tom de Vries
2019-09-13 19:47 ` [PING^4][PATCH][gdb/testsuite] " Tom de Vries
2019-10-09 14:49 ` [PING][PATCH][gdb/testsuite] " Tom Tromey
2019-10-10 14:03 ` Tom de Vries [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=373ebbd0-d646-3162-31af-174e8b08f8a4@suse.de \
--to=tdevries@suse.de \
--cc=brobecker@gnat.com \
--cc=gdb-patches@sourceware.org \
--cc=tom@tromey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox