Wolfgang Thallergcc16 merge934c3885 months agoHistory
104 lines · 3.1 KB · Shell
RawDownload
#!/bin/sh # allocfail.sh -- Test for libbacktrace library.# Copyright (C) 2018-2026 Free Software Foundation, Inc. # Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions are# met: #     (1) Redistributions of source code must retain the above copyright#     notice, this list of conditions and the following disclaimer. #     (2) Redistributions in binary form must reproduce the above copyright#     notice, this list of conditions and the following disclaimer in#     the documentation and/or other materials provided with the#     distribution. #     (3) The name of the author may not be used to#     endorse or promote products derived from this software without#     specific prior written permission. # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE# POSSIBILITY OF SUCH DAMAGE. set -e if [ ! -f ./allocfail ]; then    # Hard failure.    exit 99fi allocs=$(./allocfail 2>&1)if [ "$allocs" = "" ]; then    # Hard failure.    exit 99fi # This generates the following output:# ...# $ allocfail.sh# allocs: 80495# Status changed to 0 at 1# Status changed to 1 at 3# Status changed to 0 at 11# Status changed to 1 at 12# Status changed to 0 at 845# ...## We have status 0 for an allocation failure at:# - 1 because backtrace_create_state handles failure robustly# - 2 because the fail switches backtrace_full to !can_alloc mode.# - 11 because failure of elf_open_debugfile_by_buildid does not generate an#   error callback beyond the one for the allocation failure itself. echo "allocs: $allocs" step=1i=1passes=0prev_status=-1while [ $i -le $allocs ]; do    if ./allocfail $i >/dev/null 2>&1; status=$?; then	true    fi    if [ $status -gt 1 ]; then	echo "Unallowed fail found: $i"	# Failure.	exit 1    fi     # The test-case would run too long if we would excercise all allocs.    # So, run with step 1 initially, and increase the step once we have 10    # subsequent passes, and drop back to step 1 once we encounter another    # failure.  This takes ~2.6 seconds on an i7-6600U CPU @ 2.60GHz.    if [ $status -eq 0 ]; then	passes=$(($passes + 1))	if [ $passes -ge 10 ]; then	    step=$((step * 10))	    passes=0	fi    elif [ $status -eq 1 ]; then	passes=0	step=1    fi     if [ $status -ne $prev_status ]; then	echo "Status changed to $status at $i"    fi    prev_status=$status     i=$(($i + $step))done # Success.exit 0

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t