Blame sysdeps/ia64/fpu/import_check

Packit 6c4009
#!/bin/sh
Packit 6c4009
Packit 6c4009
objdir="$1"
Packit 6c4009
Packit 6c4009
num_errors=0
Packit 6c4009
Packit 6c4009
check_syms() {
Packit 6c4009
    global_count=0
Packit 6c4009
    entry_count=0
Packit 6c4009
    while read value type name; do
Packit 6c4009
	if [ $value = "U" ]; then
Packit 6c4009
	    name=$type
Packit 6c4009
	    # undefined symbols must start with double-underscore
Packit 6c4009
	    if [ $(expr $name : '\(..\)') != "__" ]; then
Packit 6c4009
		echo -e "$(basename $file):\tError: undefined reference $name doesn't start with \"__\"."
Packit 6c4009
		num_errors=$(($num_errors + 1))
Packit 6c4009
	    fi
Packit 6c4009
	    continue
Packit 6c4009
	fi
Packit 6c4009
Packit 6c4009
	case "$type" in
Packit 6c4009
	    W)
Packit 6c4009
		entry_count=$(($entry_count + 1))
Packit 6c4009
		;;
Packit 6c4009
	    *)
Packit 6c4009
		entry_count=$(($entry_count + 1))
Packit 6c4009
		if [ "$(expr $name : '\(..\)')" != "__" ]; then
Packit 6c4009
		    global_count=$(($global_count + 1))
Packit 6c4009
		fi
Packit 6c4009
		;;
Packit 6c4009
	esac
Packit 6c4009
    done
Packit 6c4009
    if [ $entry_count -gt 1 -a $global_count -gt 0 ]; then
Packit 6c4009
	echo -e "$(basename $file):\tError: detected $global_count strong " \
Packit 6c4009
	    "global and $entry_count entry-points."
Packit 6c4009
	num_errors=$(($num_errors + 1))
Packit 6c4009
    fi
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
check_file() {
Packit 6c4009
    file=$1
Packit 6c4009
    size=$(readelf -S $file | \
Packit 6c4009
	(sz=0; while read line; do
Packit 6c4009
		if echo $line | fgrep -q " .rodata"; then
Packit 6c4009
		    read sz rest
Packit 6c4009
		    break
Packit 6c4009
		fi
Packit 6c4009
	    done;
Packit 6c4009
	    printf "%d" 0x$sz))
Packit 6c4009
Packit 6c4009
    summands=$(readelf -s $file | fgrep " OBJECT " | tr -s ' ' |
Packit 6c4009
	cut -f4 -d' ' | sed 's,$,+,')0
Packit 6c4009
    sum=$(($summands))
Packit 6c4009
    if [ $sum != $size ]; then
Packit 6c4009
	echo -e "$(basename $file):\tError: sum of objects=$sum bytes, .rodata size=$size bytes"
Packit 6c4009
	num_errors=$(($num_errors + 1))
Packit 6c4009
    fi
Packit 6c4009
Packit 6c4009
    tmp=$(tempfile -p syms)
Packit 6c4009
    nm -g $file > $tmp
Packit 6c4009
    check_syms < $tmp
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
do_checks() {
Packit 6c4009
    echo "Note: 1 error expected in w_tgammal.o due to 64-byte alignment-padding."
Packit 6c4009
    while read func_pattern src_file dst_file; do
Packit 6c4009
	if [ "$(expr $dst_file : '.*\(S\)$')" = "S" ]; then
Packit 6c4009
	    objfile=$(expr $dst_file : '\(.*\)[.]S$')
Packit 6c4009
	    check_file $objdir/$objfile.o
Packit 6c4009
	fi
Packit 6c4009
    done
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
do_checks < import_file_list
Packit 6c4009
Packit 6c4009
if [ $num_errors -gt 0 ]; then
Packit 6c4009
    echo "FAILURE: Detected $num_errors error(s)."
Packit 6c4009
    exit 1
Packit 6c4009
fi
Packit 6c4009
echo SUCCESS
Packit 6c4009
exit 0