|  | # Copyright 2018-2024 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/>. | 
|  |  | 
|  | # Test if gdb can read a core file with a program header size of 4MB, if the | 
|  | # stack size is limited to 4MB. | 
|  |  | 
|  | if { [target_info gdb_protocol] != "" } { | 
|  | # Even though the feature under features being tested are supported by | 
|  | # gdbserver, the way this test is written doesn't make it easy with a | 
|  | # remote target. | 
|  | unsupported "not native" | 
|  | return | 
|  | } | 
|  |  | 
|  | standard_testfile | 
|  |  | 
|  | if {[build_executable "failed to prepare" $testfile $srcfile debug]} { | 
|  | return -1 | 
|  | } | 
|  |  | 
|  | # Generate core file. | 
|  | set corefile [core_find $binfile] | 
|  | if {$corefile == ""} { | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | # Limit is in kb, so this is 4MB. | 
|  | set stack_limit 4096 | 
|  |  | 
|  | # Verify if we can set the stack limit. | 
|  | catch { | 
|  | system [concat \ | 
|  | "(" \ | 
|  | "ulimit -s $stack_limit;" \ | 
|  | ")"] | 
|  | } msg | 
|  | if { "$msg" != "" } { | 
|  | untested "Can't set stack limit" | 
|  | return -1 | 
|  | } | 
|  |  | 
|  | set cmd \ | 
|  | [concat \ | 
|  | "(" \ | 
|  | "ulimit -s $stack_limit;" \ | 
|  | "$GDB $INTERNAL_GDBFLAGS $GDBFLAGS -batch -core=$corefile" \ | 
|  | ")"] | 
|  | verbose -log $cmd | 
|  |  | 
|  | # Run gdb with stack limit | 
|  | set output [standard_output_file OUTPUT] | 
|  | catch { | 
|  | system "$cmd > $output 2>&1" | 
|  | } msg | 
|  | verbose -log [exec cat $output] | 
|  | file delete $output | 
|  |  | 
|  | set test "read core file" | 
|  | if { "$msg" == "" } { | 
|  | pass "$test" | 
|  | } else { | 
|  | verbose -log $msg | 
|  | fail "$test" | 
|  | } |