2020-01-05 02:03:17 +08:00
|
|
|
#!/usr/bin/python3
|
2024-01-02 02:12:26 +08:00
|
|
|
# Copyright (C) 2014-2024 Free Software Foundation, Inc.
|
2014-06-11 16:46:29 +08:00
|
|
|
# This file is part of the GNU C Library.
|
|
|
|
#
|
|
|
|
# The GNU C Library is free software; you can redistribute it and/or
|
|
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
|
|
# License as published by the Free Software Foundation; either
|
|
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# The GNU C Library 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
|
|
|
|
# Lesser General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
|
|
# License along with the GNU C Library; if not, see
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 13:40:42 +08:00
|
|
|
# <https://www.gnu.org/licenses/>.
|
2014-06-11 16:46:29 +08:00
|
|
|
"""Benchmark output validator
|
|
|
|
|
|
|
|
Given a benchmark output file in json format and a benchmark schema file,
|
|
|
|
validate the output against the schema.
|
|
|
|
"""
|
|
|
|
|
|
|
|
from __future__ import print_function
|
|
|
|
import json
|
|
|
|
import sys
|
|
|
|
import os
|
|
|
|
|
|
|
|
try:
|
2015-06-02 01:43:29 +08:00
|
|
|
import import_bench as bench
|
2014-06-11 16:46:29 +08:00
|
|
|
except ImportError:
|
2015-06-02 01:43:29 +08:00
|
|
|
print('Import Error: Output will not be validated.')
|
2014-06-11 16:46:29 +08:00
|
|
|
# Return success because we don't want the bench target to fail just
|
|
|
|
# because the jsonschema module was not found.
|
|
|
|
sys.exit(os.EX_OK)
|
|
|
|
|
|
|
|
|
2015-06-02 01:43:29 +08:00
|
|
|
def print_and_exit(message, exitcode):
|
|
|
|
"""Prints message to stderr and returns the exit code.
|
2014-06-11 16:46:29 +08:00
|
|
|
|
|
|
|
Args:
|
2015-06-02 01:43:29 +08:00
|
|
|
message: The message to print
|
|
|
|
exitcode: The exit code to return
|
2014-06-11 16:46:29 +08:00
|
|
|
|
2015-06-02 01:43:29 +08:00
|
|
|
Returns:
|
|
|
|
The passed exit code
|
2014-06-11 16:46:29 +08:00
|
|
|
"""
|
2015-06-02 01:43:29 +08:00
|
|
|
print(message, file=sys.stderr)
|
|
|
|
return exitcode
|
2014-06-11 16:46:29 +08:00
|
|
|
|
|
|
|
|
|
|
|
def main(args):
|
|
|
|
"""Main entry point
|
|
|
|
|
|
|
|
Args:
|
|
|
|
args: The command line arguments to the program
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
0 on success or a non-zero failure code
|
|
|
|
|
|
|
|
Exceptions:
|
|
|
|
Exceptions thrown by validate_bench
|
|
|
|
"""
|
|
|
|
if len(args) != 2:
|
2015-06-02 01:43:29 +08:00
|
|
|
return print_and_exit("Usage: %s <bench.out file> <bench.out schema>"
|
|
|
|
% sys.argv[0], os.EX_USAGE)
|
|
|
|
|
|
|
|
try:
|
|
|
|
bench.parse_bench(args[0], args[1])
|
|
|
|
except IOError as e:
|
|
|
|
return print_and_exit("IOError(%d): %s" % (e.errno, e.strerror),
|
|
|
|
os.EX_OSFILE)
|
|
|
|
|
|
|
|
except bench.validator.ValidationError as e:
|
|
|
|
return print_and_exit("Invalid benchmark output: %s" % e.message,
|
benchtests: Fix validate_benchout.py exceptions
This patch fixed validate_benchout.py two exceptions,
1) AttributeError
if benchout_strings.schema.json is specified, and
2) json.decoder.JSONDecodeError
if benchout file is not JSON.
$ ~/glibc/benchtests/scripts/validate_benchout.py bench-memset.out \
~/glibc/benchtests/scripts/benchout_strings.schema.json
Traceback (most recent call last):
File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 86, in <module>
sys.exit(main(sys.argv[1:]))
File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 69, in main
bench.parse_bench(args[0], args[1])
File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 139, in parse_bench
do_for_all_timings(bench, lambda b, f, v:
File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 107, in do_for_all_timings
if 'timings' not in bench['functions'][func][k].keys():
AttributeError: 'str' object has no attribute 'keys'
$ ~/glibc/benchtests/scripts/validate_benchout.py bench-math-inlines.out \
~/glibc/benchtests/scripts/benchout_strings.schema.json
Traceback (most recent call last):
File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 86, in <module>
sys.exit(main(sys.argv[1:]))
File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 69, in main
bench.parse_bench(args[0], args[1])
File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 137, in parse_bench
bench = json.load(benchfile)
File "/usr/lib/python3.6/json/__init__.py", line 299, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 17 (char 16)
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
2021-09-16 11:49:55 +08:00
|
|
|
os.EX_DATAERR)
|
2015-06-02 01:43:29 +08:00
|
|
|
|
|
|
|
except bench.validator.SchemaError as e:
|
|
|
|
return print_and_exit("Invalid schema: %s" % e.message, os.EX_DATAERR)
|
2014-06-11 16:46:29 +08:00
|
|
|
|
benchtests: Fix validate_benchout.py exceptions
This patch fixed validate_benchout.py two exceptions,
1) AttributeError
if benchout_strings.schema.json is specified, and
2) json.decoder.JSONDecodeError
if benchout file is not JSON.
$ ~/glibc/benchtests/scripts/validate_benchout.py bench-memset.out \
~/glibc/benchtests/scripts/benchout_strings.schema.json
Traceback (most recent call last):
File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 86, in <module>
sys.exit(main(sys.argv[1:]))
File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 69, in main
bench.parse_bench(args[0], args[1])
File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 139, in parse_bench
do_for_all_timings(bench, lambda b, f, v:
File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 107, in do_for_all_timings
if 'timings' not in bench['functions'][func][k].keys():
AttributeError: 'str' object has no attribute 'keys'
$ ~/glibc/benchtests/scripts/validate_benchout.py bench-math-inlines.out \
~/glibc/benchtests/scripts/benchout_strings.schema.json
Traceback (most recent call last):
File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 86, in <module>
sys.exit(main(sys.argv[1:]))
File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 69, in main
bench.parse_bench(args[0], args[1])
File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 137, in parse_bench
bench = json.load(benchfile)
File "/usr/lib/python3.6/json/__init__.py", line 299, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 17 (char 16)
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
2021-09-16 11:49:55 +08:00
|
|
|
except json.decoder.JSONDecodeError as e:
|
|
|
|
return print_and_exit("Benchmark output in %s is not JSON." % args[0],
|
|
|
|
os.EX_DATAERR)
|
|
|
|
|
2015-06-02 01:43:29 +08:00
|
|
|
print("Benchmark output in %s is valid." % args[0])
|
2014-06-11 16:46:29 +08:00
|
|
|
return os.EX_OK
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
sys.exit(main(sys.argv[1:]))
|