[gdb/testsuite] Fix ada tests with -fPIE/-pie
authorTom de Vries <tdevries@suse.de>
Thu, 10 Oct 2019 09:51:34 +0000 (11:51 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 10 Oct 2019 09:51:34 +0000 (11:51 +0200)
When running the gdb testsuite with target board unix/-fPIE/-pie, the
resulting ada executables are not PIE executables, because gnatmake doesn't
recognize -pie, and consequently doesn't pass it to gnatlink.

Fix this by replacing "-pie" with "-largs -pie -margs" in
target_compile_ada_from_dir, and doing the same for -no-pie.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2019-10-10  Tom de Vries  <tdevries@suse.de>

PR testsuite/24888
* lib/ada.exp (target_compile_ada_from_dir): Route -pie/-no-pie to
gnatlink.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/ada.exp

index 4191661a2f3beaa957eaa204ba807876419a0e13..aa57a8532b95ebe4957f75fd5d666995ca770036 100644 (file)
@@ -1,3 +1,9 @@
+2019-10-10  Tom de Vries  <tdevries@suse.de>
+
+       PR testsuite/24888
+       * lib/ada.exp (target_compile_ada_from_dir): Route -pie/-no-pie to
+       gnatlink.
+
 2019-10-09  Tom de Vries  <tdevries@suse.de>
 
        PR testsuite/25048
index 95f0f525b1a75ca3ad02754a680dd1ab88ea3f88..45c41806a648308cb10eb2ef731652a6e6fb4860 100644 (file)
 
 proc target_compile_ada_from_dir {builddir source dest type options} {
     set saved_cwd [pwd]
+
+    global board
+    set board [target_info name]
+    set save_multilib_flag [board_info $board multilib_flags]
+    set multilib_flag ""
+    foreach op $save_multilib_flag {
+       if { $op == "-pie" || $op == "-no-pie" } {
+           # Pretend gnatmake supports -pie/-no-pie, route it to
+           # linker.
+           append multilib_flag " -largs $op -margs"
+       } else {
+           append multilib_flag " $op"
+       }
+    }
+    if { $multilib_flag != "" } {
+       unset_board_info "multilib_flags"
+       set_board_info multilib_flags "$multilib_flag"
+    }
+
     catch {
         cd $builddir
         return [target_compile $source $dest $type $options]
     } result options
     cd $saved_cwd
+
+    if { $save_multilib_flag != "" } {
+       unset_board_info "multilib_flags"
+       set_board_info multilib_flags $save_multilib_flag
+    }
+
     return -options $options $result
 }