# Copyright 2018-2021 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"
}
