1 | #!/bin/bash
|
---|
2 | # $Id: pure_test.sh 106061 2024-09-16 14:03:52Z vboxsync $
|
---|
3 | ## @file
|
---|
4 | # pure_test.sh - test the effect of __attribute__((pure)) on a set of
|
---|
5 | # functions.
|
---|
6 | #
|
---|
7 | # Mark the functions with EXPERIMENT_PURE where the attribute normally would,
|
---|
8 | # go update this script so it points to the right header and execute it. At
|
---|
9 | # the end you'll get a pt-report.txt showing the fluctuations in the text size.
|
---|
10 | #
|
---|
11 |
|
---|
12 | #
|
---|
13 | # Copyright (C) 2010-2024 Oracle and/or its affiliates.
|
---|
14 | #
|
---|
15 | # This file is part of VirtualBox base platform packages, as
|
---|
16 | # available from https://www.virtualbox.org.
|
---|
17 | #
|
---|
18 | # This program is free software; you can redistribute it and/or
|
---|
19 | # modify it under the terms of the GNU General Public License
|
---|
20 | # as published by the Free Software Foundation, in version 3 of the
|
---|
21 | # License.
|
---|
22 | #
|
---|
23 | # This program is distributed in the hope that it will be useful, but
|
---|
24 | # WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
25 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
26 | # General Public License for more details.
|
---|
27 | #
|
---|
28 | # You should have received a copy of the GNU General Public License
|
---|
29 | # along with this program; if not, see <https://www.gnu.org/licenses>.
|
---|
30 | #
|
---|
31 | # SPDX-License-Identifier: GPL-3.0-only
|
---|
32 | #
|
---|
33 |
|
---|
34 | set -e
|
---|
35 | set -x
|
---|
36 |
|
---|
37 | BINDIR="../../../out/linux.amd64/release/bin/"
|
---|
38 | DLLEXT="so"
|
---|
39 | HEADER="../../../include/VBox/cpum.h"
|
---|
40 | REPORT="pt-report.txt"
|
---|
41 |
|
---|
42 | test -e ${HEADER}.bak || kmk_cp $HEADER ${HEADER}.bak
|
---|
43 | NAMES=`kmk_sed -e '/EXPERIMENT_PURE/!d' -e '/^#/d' -e 's/^[^()]*([^()]*)[[:space:]]*\([^() ]*\)(.*$/\1/' ${HEADER}.bak `
|
---|
44 | echo NAMES=$NAMES
|
---|
45 |
|
---|
46 |
|
---|
47 | #
|
---|
48 | # baseline
|
---|
49 | #
|
---|
50 | kmk_sed -e 's/EXPERIMENT_PURE//' ${HEADER}.bak --output ${HEADER}
|
---|
51 | kmk KBUILD_TYPE=release VBoxVMM VMMR0 VMMGC
|
---|
52 | size ${BINDIR}/VMMR0.r0 ${BINDIR}/VMMGC.gc ${BINDIR}/VBoxVMM.${DLLEXT} > pt-baseline.txt
|
---|
53 |
|
---|
54 | exec < "pt-baseline.txt"
|
---|
55 | read buf # ignore
|
---|
56 | read buf; baseline_r0=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
|
---|
57 | read buf; baseline_rc=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
|
---|
58 | read buf; baseline_r3=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
|
---|
59 |
|
---|
60 | kmk_cp -f "pt-baseline.txt" "${REPORT}"
|
---|
61 | kmk_printf -- "\n" >> "${REPORT}"
|
---|
62 | kmk_printf -- "%7s %7s %7s Name\n" "VMMR0" "VMMGC" "VBoxVMM" >> "${REPORT}"
|
---|
63 | kmk_printf -- "-------------------------------\n" >> "${REPORT}"
|
---|
64 | kmk_printf -- "%7d %7d %7d baseline\n" ${baseline_r0} ${baseline_rc} ${baseline_r3} >> "${REPORT}"
|
---|
65 |
|
---|
66 | #
|
---|
67 | # Now, do each of the names.
|
---|
68 | #
|
---|
69 | for name in $NAMES;
|
---|
70 | do
|
---|
71 | kmk_sed \
|
---|
72 | -e '/'"${name}"'/s/EXPERIMENT_PURE/__attribute__((pure))/' \
|
---|
73 | -e 's/EXPERIMENT_PURE//' \
|
---|
74 | ${HEADER}.bak --output ${HEADER}
|
---|
75 | kmk KBUILD_TYPE=release VBoxVMM VMMR0 VMMGC
|
---|
76 | size ${BINDIR}/VMMR0.r0 ${BINDIR}/VMMGC.gc ${BINDIR}/VBoxVMM.${DLLEXT} > "pt-${name}.txt"
|
---|
77 |
|
---|
78 | exec < "pt-${name}.txt"
|
---|
79 | read buf # ignore
|
---|
80 | read buf; cur_r0=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
|
---|
81 | read buf; cur_rc=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
|
---|
82 | read buf; cur_r3=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
|
---|
83 | kmk_printf -- "%7d %7d %7d ${name}\n" \
|
---|
84 | `kmk_expr ${baseline_r0} - ${cur_r0} ` \
|
---|
85 | `kmk_expr ${baseline_rc} - ${cur_rc} ` \
|
---|
86 | `kmk_expr ${baseline_r3} - ${cur_r3} ` \
|
---|
87 | >> "${REPORT}"
|
---|
88 | done
|
---|
89 |
|
---|
90 | # clean up
|
---|
91 | kmk_mv -f ${HEADER}.bak ${HEADER}
|
---|
92 |
|
---|
93 |
|
---|
94 |
|
---|