VirtualBox

source: vbox/trunk/src/VBox/VMM/pure_test.sh@ 25851

Last change on this file since 25851 was 25851, checked in by vboxsync, 15 years ago

pure_test.sh: Script for testing out attribute((pure)), see defect 4597.

  • Property svn:eol-style set to LF
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
1#!/bin/bash
2# $Id: pure_test.sh 25851 2010-01-15 10:49:36Z 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 Sun Microsystems, Inc.
14#
15# This file is part of VirtualBox Open Source Edition (OSE), as
16# available from http://www.virtualbox.org. This file is free software;
17# you can redistribute it and/or modify it under the terms of the GNU
18# General Public License (GPL) as published by the Free Software
19# Foundation, in version 2 as it comes in the "COPYING" file of the
20# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
21# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
22#
23# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
24# Clara, CA 95054 USA or visit http://www.sun.com if you need
25# additional information or have any questions.
26#
27#
28
29set -e
30set -x
31
32BINDIR="../../../out/linux.amd64/release/bin/"
33DLLEXT="so"
34HEADER="../../../include/VBox/cpum.h"
35REPORT="pt-report.txt"
36
37test -e ${HEADER}.bak || kmk_cp $HEADER ${HEADER}.bak
38NAMES=`kmk_sed -e '/EXPERIMENT_PURE/!d' -e '/^#/d' -e 's/^[^()]*([^()]*)[[:space:]]*\([^() ]*\)(.*$/\1/' ${HEADER}.bak `
39echo NAMES=$NAMES
40
41
42#
43# baseline
44#
45kmk_sed -e 's/EXPERIMENT_PURE//' ${HEADER}.bak --output ${HEADER}
46kmk KBUILD_TYPE=release VBoxVMM VMMR0 VMMGC
47size ${BINDIR}/VMMR0.r0 ${BINDIR}/VMMGC.gc ${BINDIR}/VBoxVMM.${DLLEXT} > pt-baseline.txt
48
49exec < "pt-baseline.txt"
50read buf # ignore
51read buf; baseline_r0=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
52read buf; baseline_rc=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
53read buf; baseline_r3=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
54
55kmk_cp -f "pt-baseline.txt" "${REPORT}"
56kmk_printf -- "\n" >> "${REPORT}"
57kmk_printf -- "%7s %7s %7s Name\n" "VMMR0" "VMMGC" "VBoxVMM" >> "${REPORT}"
58kmk_printf -- "-------------------------------\n" >> "${REPORT}"
59kmk_printf -- "%7d %7d %7d baseline\n" ${baseline_r0} ${baseline_rc} ${baseline_r3} >> "${REPORT}"
60
61#
62# Now, do each of the names.
63#
64for name in $NAMES;
65do
66 kmk_sed \
67 -e '/'"${name}"'/s/EXPERIMENT_PURE/__attribute__((pure))/' \
68 -e 's/EXPERIMENT_PURE//' \
69 ${HEADER}.bak --output ${HEADER}
70 kmk KBUILD_TYPE=release VBoxVMM VMMR0 VMMGC
71 size ${BINDIR}/VMMR0.r0 ${BINDIR}/VMMGC.gc ${BINDIR}/VBoxVMM.${DLLEXT} > "pt-${name}.txt"
72
73 exec < "pt-${name}.txt"
74 read buf # ignore
75 read buf; cur_r0=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
76 read buf; cur_rc=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
77 read buf; cur_r3=`echo $buf | kmk_sed -e 's/^[[:space:]]*\([^[[:space:]]*\).*$/\1/' `
78 kmk_printf -- "%7d %7d %7d ${name}\n" \
79 `kmk_expr ${baseline_r0} - ${cur_r0} ` \
80 `kmk_expr ${baseline_rc} - ${cur_rc} ` \
81 `kmk_expr ${baseline_r3} - ${cur_r3} ` \
82 >> "${REPORT}"
83done
84
85# clean up
86kmk_mv -f ${HEADER}.bak ${HEADER}
87
88
89
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette