]> git.xonotic.org Git - xonotic/xonotic.git/commitdiff
Merge branch 'master' of git://nl.git.xonotic.org/xonotic/xonotic
authormerlijn <mhofstra@gmail.com>
Sat, 23 Jun 2012 12:17:45 +0000 (14:17 +0200)
committermerlijn <mhofstra@gmail.com>
Sat, 23 Jun 2012 12:17:45 +0000 (14:17 +0200)
misc/tools/all/git.subr
misc/tools/all/xonotic.subr
misc/tools/progs-analyzer.pl

index f210da95969eb7e12de4884ef97dbb04a1eae70a..ee53dc57694b7f5711a79c530efb374e39fc0a06 100644 (file)
@@ -53,12 +53,13 @@ testrepoflag()
 
 mirrorspeed()
 {
+       # first result is to be ignored, but we use it to check status
+       git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
+       # if we can't time, we only check availability
        if ! { time -p true; } >/dev/null 2>&1; then
                echo 0
                return
        fi
-       # first result is to be ignored, but we use it to check status
-       git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
        # now actually time it
        (
                set +x
@@ -103,7 +104,13 @@ bestmirror()
        bestcount=
        bestmirror_benchmark()
        {
-               if [ -z "$2" ]; then
+               bmb_curloc=$1
+               bmb_proto=$2
+               bmb_loc=$3
+               bmb_url=$4
+               bmb_fudge=$5
+
+               if [ -z "$bmb_loc" ]; then
                        # empty location is not allowed
                        return
                fi
@@ -111,7 +118,7 @@ bestmirror()
                        *"  "*)
                                # no protocol requested? all match
                                ;;
-                       *" $1 "*)
+                       *" $bmb_proto "*)
                                ;;
                        *)
                                return
@@ -120,9 +127,18 @@ bestmirror()
 
                # prefer location match
                case " $newlocation " in
-                       *" $2 "*)
+                       *" $bmb_loc "*)
+                               # bmb_curloc is true in first run, false in second
+                               # so first run gets all matching locations
+                               # so second run gets all non-matching locations
+                               if ! $bmb_curloc; then
+                                       return
+                               fi
                                ;;
                        *)
+                               if $bmb_curloc; then
+                                       return
+                               fi
                                case " $newlocation " in
                                        *" $bestlocation "*)
                                                # worse
@@ -133,7 +149,7 @@ bestmirror()
                esac
 
                case " $newlocation " in
-                       *" $2 "*)
+                       *" $bmb_loc "*)
                                # see below
                                ;;
                        *)
@@ -145,20 +161,20 @@ bestmirror()
                                esac
                                ;;
                esac
-               msg "Testing speed of $3..."
+               msg "Testing speed of $bmb_url..."
 
                # only working mirrors
-               if ! thistime=`mirrorspeed "$3$testrepo"`; then
+               if ! thistime=`mirrorspeed "$bmb_url$testrepo"`; then
                        msg "-> FAILED"
                        return
                fi
-               thistime=$(($thistime $4))
+               thistime=$(($thistime $bmb_fudge))
                msg "-> $thistime"
 
                # anything is better than nothing
                if [ -z "$besttime" ]; then
-                       besturl=$3
-                       bestlocation=$2
+                       besturl=$bmb_url
+                       bestlocation=$bmb_loc
                        besttime=$thistime
                        bestcount=1
                        return
@@ -166,15 +182,15 @@ bestmirror()
 
                # prefer location match
                case " $newlocation " in
-                       *" $2 "*)
+                       *" $bmb_loc "*)
                                case " $newlocation " in
                                        *" $bestlocation "*)
                                                # equality
                                                ;;
                                        *)
                                                # better
-                                               besturl=$3
-                                               bestlocation=$2
+                                               besturl=$bmb_url
+                                               bestlocation=$bmb_loc
                                                besttime=$thistime
                                                bestcount=1
                                                return
@@ -190,7 +206,8 @@ bestmirror()
                if [ $thistime -gt $besttime ]; then
                        return
                elif [ $thistime -lt $besttime ]; then
-                       besturl=$3
+                       besturl=$bmb_url
+                       bestlocation=$bmb_loc
                        besttime=$thistime
                        bestcount=1
                        return
@@ -198,10 +215,12 @@ bestmirror()
                # both location and time match. Random decision.
                bestcount=$(($bestcount + 1))
                if [ $((($RANDOM + 0) % $bestcount)) -eq 0 ]; then
-                       besturl=$3
+                       besturl=$bmb_url
+                       bestlocation=$bmb_loc
                fi
        }
-       allmirrors bestmirror_benchmark
+       allmirrors bestmirror_benchmark true
+       allmirrors bestmirror_benchmark false
        echo "$besturl"
 }
 
index e18d7fe2f9d0c84efac34c9a7b95c6cd30ddc73b..fc6a498dca55af3e8053b0144bbd24c653bc5d16 100644 (file)
@@ -244,11 +244,17 @@ case "$cmd" in
                        client=-sdl
                fi
                case "$1" in
-                       sdl|glx|agl|dedicated)
+                       dedicated)
+                               client=-$1
+                               shift
+                               ;;
+                       sdl|glx|agl)
+                               USE_RLWRAP=no
                                client=-$1
                                shift
                                ;;
                        wgl)
+                               USE_RLWRAP=no
                                client=
                                shift
                                ;;
@@ -276,11 +282,16 @@ case "$cmd" in
 
                if [ x"$USE_GDB" = x"yes" ]; then
                        set -- gdb --args "$@"
-               elif [ x"$USE_GDB" = x"core" ] && which gdb >/dev/null 2>&1; then
+                       USE_RLWRAP=no
+               elif [ x"$USE_GDB" = x"core" ]; then
                        set -- gdb --batch -x savecore.gdb --args "$@"
+                       USE_RLWRAP=no
                elif which catchsegv >/dev/null 2>&1; then
                        set -- catchsegv "$@"
                fi
+               if [ x"$USE_RLWRAP" != x"no" ] && which rlwrap >/dev/null 2>&1; then
+                       set -- rlwrap -A -g '^quit' -q "\"" -r -S ']' -w 100 "$@"
+               fi
                rm -f xonotic.core
                "$@" || true
                if [ -f xonotic.core ]; then
index 6ba7de89c4d8ba6d912059d51f34728ea3c317a4..b4ffbca5e226cfe549fd15e914c210ac16461c90 100644 (file)
@@ -501,7 +501,7 @@ sub disassemble_function($$;$)
                {
                        for(values %{$highlight->{$ip}})
                        {
-                               for(@$_)
+                               for(sort keys %$_)
                                {
                                        print PRE_MARK_STATEMENT;
                                        printf INSTRUCTION_FORMAT, '', '<!>', '.WARN';
@@ -694,7 +694,7 @@ sub find_uninitialized_locals($$)
                                                # COMPILER BUG of FTEQCC: AND and OR may take uninitialized as second argument (logicops)
                                                if($return_hack <= 2 and ($op ne 'OR' && $op ne 'AND' || $_ ne 'b'))
                                                {
-                                                       push @{$warned{$ip}{$_}}, "Use of uninitialized value";
+                                                       ++$warned{$ip}{$_}{"Use of uninitialized value"};
                                                }
                                        }
                                        elsif($valid->[0] < 0)
@@ -702,7 +702,7 @@ sub find_uninitialized_locals($$)
                                                # COMPILER BUG of FTEQCC: AND and OR may take uninitialized as second argument (logicops)
                                                if($return_hack <= 2 and ($op ne 'OR' && $op ne 'AND' || $_ ne 'b'))
                                                {
-                                                       push @{$warned{$ip}{$_}}, "Use of temporary across CALL";
+                                                       ++$warned{$ip}{$_}{"Use of temporary across CALL"};
                                                }
                                        }
                                        else
@@ -741,6 +741,13 @@ sub find_uninitialized_locals($$)
                                        $write->($ofs+1);
                                        $write->($ofs+2);
                                }
+                               elsif($type eq 'ipoffset')
+                               {
+                                       ++$warned{$ip}{$_}{"Endless loop"}
+                                               if $ofs == 0;
+                                       ++$warned{$ip}{$_}{"No-operation jump"}
+                                               if $ofs == 1;
+                               }
                        }
                        if($c->{iscall})
                        {
@@ -829,7 +836,7 @@ sub find_uninitialized_locals($$)
 
                        if(!$isread)
                        {
-                               push @{$warned{$ip}{$operand}}, "Value is never used";
+                               ++$warned{$ip}{$operand}{"Value is never used"};
                        }
                }
        }
@@ -1185,23 +1192,26 @@ sub parse_progs($)
                die "Out of range file in function $_"
                        if $f->{s_file} < 0 || $f->{s_file} >= length $p{strings};
                my $file = $p{getstring}->($f->{s_file});
-               die "Out of range first_statement in function $_ (name: \"$name\", file: \"$file\")"
+               die "Out of range first_statement in function $_ (name: \"$name\", file: \"$file\", first statement: $f->{first_statement})"
                        if $f->{first_statement} >= @{$p{statements}};
-               die "Out of range parm_start in function $_ (name: \"$name\", file: \"$file\")"
+               die "Out of range parm_start in function $_ (name: \"$name\", file: \"$file\", first statement: $f->{first_statement})"
                        if $f->{parm_start} < 0 || $f->{parm_start} >= @{$p{globals}};
-               die "Out of range locals in function $_ (name: \"$name\", file: \"$file\")"
+               die "Out of range locals in function $_ (name: \"$name\", file: \"$file\", first statement: $f->{first_statement})"
                        if $f->{locals} < 0 || $f->{parm_start} + $f->{locals} >= @{$p{globals}};
-               die "Out of range numparms in function $_ (name: \"$name\", file: \"$file\")"
-                       if $f->{numparms} < 0 || $f->{numparms} > 8;
-               my $totalparms = 0;
-               for(0..($f->{numparms}-1))
+               if($f->{first_statement} >= 0)
                {
-                       die "Out of range parm_size[$_] in function $_ (name: \"$name\", file: \"$file\")"
-                               unless { 0 => 1, 1 => 1, 3 => 1 }->{$f->{parm_size}[$_]};
-                       $totalparms += $f->{parm_size}[$_];
+                       die "Out of range numparms $f->{numparms} in function $_ (name: \"$name\", file: \"$file\", first statement: $f->{first_statement})"
+                               if $f->{numparms} < 0 || $f->{numparms} > 8;
+                       my $totalparms = 0;
+                       for(0..($f->{numparms}-1))
+                       {
+                               die "Out of range parm_size[$_] in function $_ (name: \"$name\", file: \"$file\", first statement: $f->{first_statement})"
+                                       unless { 0 => 1, 1 => 1, 3 => 1 }->{$f->{parm_size}[$_]};
+                               $totalparms += $f->{parm_size}[$_];
+                       }
+                       die "Out of range parms in function $_ (name: \"$name\", file: \"$file\", first statement: $f->{first_statement})"
+                               if $f->{locals} < 0 || $f->{parm_start} + $totalparms >= @{$p{globals}};
                }
-               die "Out of range parms in function $_ (name: \"$name\", file: \"$file\")"
-                       if $f->{locals} < 0 || $f->{parm_start} + $totalparms >= @{$p{globals}};
        }
 
        print STDERR "Range checking statements...\n";