Home | History | Annotate | Line # | Download | only in gdb.base
      1 # Copyright 2018-2024 Free Software Foundation, Inc.
      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 
     16 # Test if gdb can read a core file with a program header size of 4MB, if the
     17 # stack size is limited to 4MB.
     18 
     19 if { [target_info gdb_protocol] != "" } {
     20     # Even though the feature under features being tested are supported by
     21     # gdbserver, the way this test is written doesn't make it easy with a
     22     # remote target.
     23     unsupported "not native"
     24     return
     25 }
     26 
     27 standard_testfile
     28 
     29 if {[build_executable "failed to prepare" $testfile $srcfile debug]} {
     30     return -1
     31 }
     32 
     33 # Generate core file.
     34 set corefile [core_find $binfile]
     35 if {$corefile == ""} {
     36     return 0
     37 }
     38 
     39 # Limit is in kb, so this is 4MB.
     40 set stack_limit 4096
     41 
     42 # Verify if we can set the stack limit.
     43 catch {
     44     system [concat \
     45 		"(" \
     46 		"ulimit -s $stack_limit;" \
     47 		")"]
     48 } msg
     49 if { "$msg" != "" } {
     50     untested "Can't set stack limit"
     51     return -1
     52 }
     53 
     54 set cmd \
     55     [concat \
     56 	 "(" \
     57 	 "ulimit -s $stack_limit;" \
     58 	 "$GDB $INTERNAL_GDBFLAGS $GDBFLAGS -batch -core=$corefile" \
     59 	 ")"]
     60 verbose -log $cmd
     61 
     62 # Run gdb with stack limit
     63 set output [standard_output_file OUTPUT]
     64 catch {
     65     system "$cmd > $output 2>&1"
     66 } msg
     67 verbose -log [exec cat $output]
     68 file delete $output
     69 
     70 set test "read core file"
     71 if { "$msg" == "" } {
     72     pass "$test"
     73 } else {
     74     verbose -log $msg
     75     fail "$test"
     76 }
     77