]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.base/nostdlib.exp
Automatic date update in version.in
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.base / nostdlib.exp
CommitLineData
d01e8234 1# Copyright 2010-2025 Free Software Foundation, Inc.
628fe4e4
JK
2
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program. If not, see <http://www.gnu.org/licenses/>.
15
822bd149 16standard_testfile .c
628fe4e4 17
a1e28cb2
UW
18# If we're using a stub, breakpoints at the entry point will not trigger.
19# See also the comment in break-entry.exp.
20
8ce7423f 21require !use_gdb_stub
a1e28cb2 22
628fe4e4
JK
23# default_target_compile would otherwise add "-lm" making the testcase
24# dependent on whether the system libraries are already prelinked.
25# prelink: Could not set /lib64/libm-2.11.1.so owner or mode: Operation not permitted
26set compile {
5770f680 27 gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $opts
628fe4e4
JK
28}
29
5770f680
AB
30foreach_with_prefix pie { "nopie" "pie" } {
31 # OPTS and BINFILE are used by the COMPILE string (defined above)
32 # when it is evaluated below.
33 set opts [list debug additional_flags=-nostdlib $pie]
34 set binfile [standard_output_file $testfile-$pie]
35
36 set board [target_info name]
37 if [board_info $board exists mathlib] {
38 set mathlib [board_info $dest mathlib]
39 set_board_info mathlib ""
40 set err [eval $compile]
41 set_board_info mathlib $mathlib
42 } else {
43 set_board_info mathlib ""
44 set err [eval $compile]
45 unset_board_info mathlib
46 }
47 if {$err != ""} {
48 untested "failed to compile"
49 return -1
50 }
628fe4e4 51
5770f680 52 clean_restart $binfile
628fe4e4 53
5770f680 54 gdb_breakpoint "*marker"
8cdf110a
TV
55
56 # Say we set a permanent breakpoint on *_start. When setting the
57 # breakpoint, it will resolve to _start in the exec.
58 # After starting to run, that may stay the same, and consequently
59 # execution will stop there.
60 # OTOH, after starting to run, that may change to *_start in the dynamic
61 # linker, and consequently execution will stop there.
62 # There's currently no way to enforce one or the other (PR32748).
63 #
64 # Say we run into a stop in *_start in the dynamic linker. Continuing
65 # from this situation, the dynamic linker is reported as unloaded, which
66 # makes the breakpoint resolve again to *_start in the exec, and
67 # consequently execution will stop there as well.
68 #
69 # However, we cannot rely on this behavior either. Reporting the dynamic
70 # linker as unloaded is a GLIBC bug, which may get fixed eventually.
71 #
72 # Instead of trying to cater for all these possibilities in a controlled
73 # fashion, make the breakpoint temporary, ensuring that there will just be
74 # one stop.
75 gdb_breakpoint "*_start" temporary
628fe4e4 76
5770f680 77 gdb_run_cmd
628fe4e4 78
5770f680
AB
79 # Breakpoint 2, Stopped due to shared library event
80 # _start () at ./gdb.base/nostdlib.c:20
8cdf110a 81 gdb_test "" {Temporary breakpoint [0-9]+, .*_start .*} "stop at run"
5770f680
AB
82
83 gdb_test "continue" {Breakpoint [0-9]+, marker .*} "continue to marker"
84
85 # When compiling as PIE the executable will be a dynamic
86 # executable, the dynamic linker performs the PIE relocation.
87 # Some versions of glibc would (possibly due to a bug) report the
88 # dynamic linker as unmapped during startup, which places the
89 # 'shlib event' breakpoint(s) into the PENDING state.
90 #
91 # At one point trying to print these internal breakpoints in a
92 # PENDING state would crash GDB, so lets make sure that doesn't
93 # happen now. We don't really care about the exact output,
94 # gdb_test will spot if running this command crashes GDB, which is
95 # all we're really checking for.
96 gdb_test "maint info breakpoints" ".*"
97}