Index: gdb/testsuite/gdb.base/gcore-relro-pie.exp |
diff --git a/gdb/testsuite/gdb.base/gcore-relro-pie.exp b/gdb/testsuite/gdb.base/gcore-relro-pie.exp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..eb45c52d61310a0d00e5b7310354b5e93918f86a |
--- /dev/null |
+++ b/gdb/testsuite/gdb.base/gcore-relro-pie.exp |
@@ -0,0 +1,75 @@ |
+# Copyright 2013 Free Software Foundation, Inc. |
+ |
+# This program is free software; you can redistribute it and/or modify |
+# it under the terms of the GNU General Public License as published by |
+# the Free Software Foundation; either version 3 of the License, or |
+# (at your option) any later version. |
+# |
+# This program is distributed in the hope that it will be useful, |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+# GNU General Public License for more details. |
+# |
+# You should have received a copy of the GNU General Public License |
+# along with this program. If not, see <http://www.gnu.org/licenses/>. |
+ |
+# PR 11786 (Gold and strip differ on flags,align fields of PT_GNU_RELRO). |
+# Generate a core file from the stripped version of the program, |
+# and then try to debug the core with the unstripped version. |
+ |
+standard_testfile |
+ |
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug additional_flags=-fpie "ldflags=-pie -Wl,-z,relro"}]} { |
+ return -1 |
+} |
+ |
+set stripped_binfile ${binfile}.stripped |
+set gcorefile ${binfile}.gcore |
+ |
+set strip_program [transform strip] |
+remote_file host delete ${stripped_binfile} |
+if [run_on_host "strip" "$strip_program" "-g -o ${stripped_binfile} $binfile"] { |
+ return -1 |
+} |
+ |
+# Workaround PR binutils/10802: |
+# Preserve the 'x' bit also for PIEs (Position Independent Executables). |
+set perm [file attributes ${binfile} -permissions] |
+file attributes ${stripped_binfile} -permissions $perm |
+ |
+clean_restart ${stripped_binfile} |
+ |
+# Does this gdb support gcore? |
+set test "help gcore" |
+gdb_test_multiple $test $test { |
+ -re "Undefined command: .gcore.*\r\n$gdb_prompt $" { |
+ # gcore command not supported -- nothing to test here. |
+ unsupported "gdb does not support gcore on this target" |
+ return -1 |
+ } |
+ -re "Save a core file .*\r\n$gdb_prompt $" { |
+ pass $test |
+ } |
+} |
+ |
+# The binary is stripped of debug info, but not minsyms. |
+if ![runto break_here] { |
+ fail "Can't run to break_here" |
+ return -1 |
+} |
+ |
+if {![gdb_gcore_cmd $gcorefile "save a corefile"]} { |
+ return -1 |
+} |
+ |
+# Now restart gdb with the unstripped binary and load the corefile. |
+ |
+clean_restart ${binfile} |
+ |
+gdb_test "core ${gcorefile}" \ |
+ "Core was generated by .*" "re-load generated corefile" |
+ |
+# Put $pc in gdb.log for debug purposes for comparison with stripped case. |
+gdb_test "x/i \$pc" "break_here.*" |
+ |
+gdb_test "frame" "#0 \[^\r\n\]* break_here .*" "unstripped + core ok" |