Update libvtv testsuite so that most of the tests now run under

the dejagnu test harness.

From-SVN: r202373
This commit is contained in:
Caroline Tice 2013-09-08 16:35:14 -07:00 committed by Caroline Tice
parent f085f27e12
commit 41e96dc8f0
66 changed files with 2134 additions and 203 deletions

View file

@ -1,3 +1,84 @@
2013-09-08 Caroline Tice <cmtice@google.com>
* testsuite/event-main.cc: Move to libvtv.cc subdirectory.
* testsuite/environment.cc: Ditto.
* testsuite/template-list2.cc: Ditto.
* testsuite/event.h: Ditto.
* testsuite/dataentry.cc: Ditto.
* testsuite/event-private.h: Ditto.
* testsuite/virtual_inheritance.cc: Ditto.
* testsuite/povray-derived.cc: Ditto.
* testsuite/nested_vcall_test.cc: Ditto.
* testsuite/template-list-iostream.cc: Ditto.
* testsuite/parts-test-extra-parts-views.h: Ditto.
* testsuite/virtfunc-test.cc: Ditto.
* testsuite/parts-test-extra-parts.h: Ditto.
* testsuite/const_vtable.cc: Ditto.
* testsuite/template-list.cc: Ditto.
* testsuite/dup_name.cc: Ditto.
* testsuite/thunk.cc: Ditto.
* testsuite/parts-test-main.h: Ditto.
* testsuite/mul_inh.cc: Ditto.
* testsuite/test1.cc: Ditto.
* testsuite/bb_tests.cc: Ditto.
* testsuite/v8-test-2.cc: Ditto.
* testsuite/thunk_vtable_map_attack.cc: Ditto.
* testsuite/xlan-test.cc: Ditto.
* testsuite/parts-test-main.cpp: Move to libvtv.cc subdirectory and
change file extension from .cc to .cpp.
* testsuite/event-definitions.cpp: Ditto.
* testsuite/event-main.cpp: Ditto.
* testsuite/derived-main.cpp: Ditto.
* testsuite/derived-lib.cpp: Ditto.
* testsuite/event-private.cpp: Ditto.
* testsuite/parts-test-extra-parts-views.cpp: Ditto.
* testsuite/parts-test-extra-parts.cpp: Ditto.
* testsuite/parts-test.list: Move to libvtv.cc subdirectory. Change
file extensions inside file from .cc to .cpp.
* testsuite/event.list: Ditto.
* testsuite/derived.list: Ditto.
* testsuite/register_pair.cc: Move to libvtv.cc; rename file to
register_set_pair.cc; include stdlib.h, stdio.h stdint.h string.h
(KEY_TYPE_FIXED_SIZE): New define.
(key_buffer, name_string, fake_names): New global variables.
(generate_names): New function.
(vtv_string_hans): New function.
(main): Add call to generate_names. Update middle for-loop to
initialize new parameters for __VLTRegisterPair... calls; move calls
to __VLTRegisterPair... to middle for-loop. Add calls to
__VLTRegisterSet...
* testsuite/register_pair_mt.cc: Ditto; renamed to
register_set_pair_mt.cc
* testsuite/libvtv.cc/vtv.exp: New file.
* testsuite/libvtv.mempool.cc/mempool.exp: New file.
* testsuite/libvtv.mt.cc/mt.exp: New file.
* testsuite/lib/libvtv.exp: New file.
* testsuite/lib/libvtv-dg.exp: New file.
* testsuite/config/default.exp: New file.
* testsuite/Makefile.am: New file. (Old file was moved to other-tests
subdirectory.)
* testsuite/Makefile.in: New file (generated).
* testsuite/mempool_negative.c: Change to C++ file; move to
libvtv.mempool.cc; include vtv-change-permission.h.
(main): Add call to __VLTChangePermission.
* testsuite/mempool_positive.c: Change to C++ file; move to
libvtv.mempool.cc; include vtv-change-permission.h.
(main): Add call to __VLTChangePermission.
* testsuite/temp_deriv3.cc: Move to other-tests subdirectory.
* testsuite/environment-fail-64.s: Ditto.
* testsutite/dlopen.cc: Ditto.
* testsuite/so.cc: Ditto.
* testsuite/temp_deriv2.cc: Ditto.
* testsuite/field-test.cc: Ditto.
* testsuite/dlopen_mt.cc: Ditto.
* testsuite/environment-fail-32.s: Ditto.
* testsuite/temp_deriv.cc: Ditto.
* testsuite/replace-fail.cc: Ditto.
* testsuite/other-tests/Makefile.am: New file. Copied from the
Makefile.am that used to be in testsuite directory.
* testsuite/other-tests/Makefile.in: Generated. (New file).
* testsuite/other-tests/README: New file.
2013-09-07 Paolo Carlini <paolo.carlini@oracle.com>
* testsuite/Makefile.am: Remove #if ENABLE_VTABLE_VERIFY check around

View file

@ -1,52 +1,11 @@
## Makefile for the testsuite subdirectory of the VTV library.
##
## Copyright (C) 2013 Free Software Foundation, Inc.
##
## Process this file with automake to produce Makefile.in.
##
## This file is part of the Vtable Verification (VTV) Library. This
## library is free software; you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3, or (at your option)
## any later version.
## Process this with automake to create Makefile.in
## This 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
## General Public License for more details.
AUTOMAKE_OPTIONS = foreign dejagnu
## You should have received a copy of the GNU General Public License
## along with this library; see the file COPYING3. If not see
## <http://www.gnu.org/licenses/>.
EXPECT = `if [ -f ../../expect/expect ] ; then \
echo ../../expect/expect ; \
else echo expect ; fi`
AUTOMAKE_OPTIONS = nostdinc
# Runs the testsuite via a script.
# Create subdirectories.
stamp-subdir:
if test ! -d lib64; then \
mkdir -p lib64; \
fi; \
if test ! -d lib32; then \
mkdir -p lib32; \
fi; \
echo `date` > stamp-subdir;
testing_script=${libvtv_srcdir}/scripts/run-testsuite.sh
check-script: ${testing_script} stamp-subdir
-@(chmod +x ${testing_script}; \
${testing_script} ${libvtv_srcdir} ${libvtv_builddir})
check-am:
$(MAKE) $(AM_MAKEFLAGS) check-script
.PHONY: check-script
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.out environment-fail-* stamp-* replace-fail-*
# To remove directories.
clean-local:
rm -rf lib*
RUNTEST = `if [ -f ${srcdir}/../../dejagnu/runtest ] ; then \
echo ${srcdir}/../../dejagnu/runtest ; \
else echo runtest ; fi`

View file

@ -53,6 +53,8 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DEJATOOL = $(PACKAGE)
RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
@ -190,11 +192,15 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
AUTOMAKE_OPTIONS = nostdinc
testing_script = ${libvtv_srcdir}/scripts/run-testsuite.sh
AUTOMAKE_OPTIONS = foreign dejagnu
EXPECT = `if [ -f ../../expect/expect ] ; then \
echo ../../expect/expect ; \
else echo expect ; fi`
RUNTEST = `if [ -f ${srcdir}/../../dejagnu/runtest ] ; then \
echo ${srcdir}/../../dejagnu/runtest ; \
else echo runtest ; fi`
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.out environment-fail-* stamp-* replace-fail-*
all: all-am
.SUFFIXES:
@ -240,7 +246,46 @@ TAGS:
ctags: CTAGS
CTAGS:
check-DEJAGNU: site.exp
srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
EXPECT=$(EXPECT); export EXPECT; \
runtest=$(RUNTEST); \
if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \
if $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
then :; else exit_status=1; fi; \
done; \
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
fi; \
exit $$exit_status
site.exp: Makefile
@echo 'Making a new site.exp file...'
@echo '## these variables are automatically generated by make ##' >site.tmp
@echo '# Do not edit here. If you wish to override these values' >>site.tmp
@echo '# edit the last section' >>site.tmp
@echo 'set srcdir $(srcdir)' >>site.tmp
@echo "set objdir `pwd`" >>site.tmp
@echo 'set build_alias "$(build_alias)"' >>site.tmp
@echo 'set build_triplet $(build_triplet)' >>site.tmp
@echo 'set host_alias "$(host_alias)"' >>site.tmp
@echo 'set host_triplet $(host_triplet)' >>site.tmp
@echo 'set target_alias "$(target_alias)"' >>site.tmp
@echo 'set target_triplet $(target_triplet)' >>site.tmp
@echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
@test ! -f site.exp || \
sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
@-rm -f site.bak
@test ! -f site.exp || mv site.exp site.bak
@mv site.tmp site.exp
distclean-DEJAGNU:
-rm -f site.exp site.bak
-l='$(DEJATOOL)'; for tool in $$l; do \
rm -f $$tool.sum $$tool.log; \
done
check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
check: check-am
all-am: Makefile
installdirs:
@ -261,7 +306,6 @@ install-strip:
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@ -272,11 +316,11 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-local mostlyclean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
distclean-am: clean-am distclean-DEJAGNU distclean-generic
dvi: dvi-am
@ -336,44 +380,21 @@ ps-am:
uninstall-am:
.MAKE: install-am install-strip
.MAKE: check-am install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
clean-local distclean distclean-generic distclean-libtool dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
.PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \
clean-libtool distclean distclean-DEJAGNU distclean-generic \
distclean-libtool dvi dvi-am html html-am info info-am install \
install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
uninstall uninstall-am
# Runs the testsuite via a script.
# Create subdirectories.
stamp-subdir:
if test ! -d lib64; then \
mkdir -p lib64; \
fi; \
if test ! -d lib32; then \
mkdir -p lib32; \
fi; \
echo `date` > stamp-subdir;
check-script: ${testing_script} stamp-subdir
-@(chmod +x ${testing_script}; \
${testing_script} ${libvtv_srcdir} ${libvtv_builddir})
check-am:
$(MAKE) $(AM_MAKEFLAGS) check-script
.PHONY: check-script
# To remove directories.
clean-local:
rm -rf lib*
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View file

@ -0,0 +1,17 @@
# Copyright (C) 2013 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
load_lib "standard.exp"

View file

@ -1 +0,0 @@
event-main.cc event-definitions.cc event-private.cc

View file

@ -0,0 +1,21 @@
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
proc libvtv-dg-test { prog do_what extra_tool_flags } {
return [gcc-dg-test-1 libvtv_target_compile $prog $do_what $extra_tool_flags]
}
proc libvtv-dg-prune { system text } {
return [gcc-dg-prune $system $text]
}

View file

@ -0,0 +1,220 @@
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Damn dejagnu for not having proper library search paths for load_lib.
# We have to explicitly load everything that gcc-dg.exp wants to load.
proc load_gcc_lib { filename } {
global srcdir loaded_libs
load_file $srcdir/../../gcc/testsuite/lib/$filename
set loaded_libs($filename) ""
}
load_lib dg.exp
load_gcc_lib file-format.exp
load_gcc_lib target-supports.exp
load_gcc_lib target-supports-dg.exp
load_gcc_lib scanasm.exp
load_gcc_lib scandump.exp
load_gcc_lib scanrtl.exp
load_gcc_lib scantree.exp
load_gcc_lib scanipa.exp
load_gcc_lib prune.exp
load_gcc_lib target-libpath.exp
load_gcc_lib wrapper.exp
load_gcc_lib gcc-defs.exp
load_gcc_lib torture-options.exp
load_gcc_lib timeout.exp
load_gcc_lib timeout-dg.exp
load_gcc_lib fortran-modules.exp
load_gcc_lib gcc-dg.exp
set dg-do-what-default run
#
# GCC_UNDER_TEST is the compiler under test.
#
set libvtv_compile_options ""
#
# libvtv_init
#
if [info exists TOOL_OPTIONS] {
set multilibs [get_multilibs $TOOL_OPTIONS]
} else {
set multilibs [get_multilibs]
}
proc libvtv_init { args } {
global srcdir blddir objdir tool_root_dir
global libvtv_initialized
global tmpdir
global blddir
global gluefile wrap_flags
global ALWAYS_CFLAGS
global CFLAGS
global TOOL_EXECUTABLE TOOL_OPTIONS
global GCC_UNDER_TEST
global TESTING_IN_BUILD_TREE
global target_triplet
global always_ld_library_path
set blddir [lookfor_file [get_multilibs] libvtv]
# We set LC_ALL and LANG to C so that we get the same error
# messages as expected.
setenv LC_ALL C
setenv LANG C
if ![info exists GCC_UNDER_TEST] then {
if [info exists TOOL_EXECUTABLE] {
set GCC_UNDER_TEST $TOOL_EXECUTABLE
} else {
set GCC_UNDER_TEST "[find_gcc]"
}
}
if ![info exists tmpdir] {
set tmpdir "/tmp"
}
if [info exists gluefile] {
unset gluefile
}
if {![info exists CFLAGS]} {
set CFLAGS ""
}
# Locate libgcc.a so we don't need to account for different values of
# SHLIB_EXT on different platforms
set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
if {$gccdir != ""} {
set gccdir [file dirname $gccdir]
}
# Compute what needs to be put into LD_LIBRARY_PATH
set always_ld_library_path ".:${blddir}/.libs"
# Compute what needs to be added to the existing LD_LIBRARY_PATH.
if {$gccdir != ""} {
# Add AIX pthread directory first.
if { [llength [glob -nocomplain ${gccdir}/pthread/libgcc_s*.a]] >= 1 } {
append always_ld_library_path ":${gccdir}/pthread"
}
append always_ld_library_path ":${gccdir}"
set compiler [lindex $GCC_UNDER_TEST 0]
if { [is_remote host] == 0 && [which $compiler] != 0 } {
foreach i "[exec $compiler --print-multi-lib]" {
set mldir ""
regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir
set mldir [string trimright $mldir "\;@"]
if { "$mldir" == "." } {
continue
}
if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
append always_ld_library_path ":${gccdir}/${mldir}"
}
}
}
}
set ALWAYS_CFLAGS ""
if { $blddir != "" } {
lappend ALWAYS_CFLAGS "additional_flags=-B${blddir}/"
lappend ALWAYS_CFLAGS "additional_flags=-I${blddir}"
lappend ALWAYS_CFLAGS "ldflags=-L${blddir}/.libs"
}
lappend ALWAYS_CFLAGS "additional_flags=-I${srcdir}/.."
if [istarget *-*-darwin*] {
lappend ALWAYS_CFLAGS "additional_flags=-shared-libgcc"
}
if [info exists TOOL_OPTIONS] {
lappend ALWAYS_CFLAGS "additional_flags=$TOOL_OPTIONS"
}
# Make sure that lines are not wrapped. That can confuse the
# error-message parsing machinery.
lappend ALWAYS_CFLAGS "additional_flags=-fmessage-length=0"
# Turn on vtable verification
lappend ALWAYS_CFLAGS "-fvtable-verify=std"
# lappend ALWAYS_CFLAGS "ldflags=-lvtv"
}
#
# libvtv_target_compile -- compile a source file
#
proc libvtv_target_compile { source dest type options } {
global blddir
global libvtv_compile_options
global gluefile wrap_flags
global ALWAYS_CFLAGS
global GCC_UNDER_TEST
global lang_test_file
global lang_library_path
global lang_link_flags
if { [info exists lang_test_file] } {
if { $blddir != "" } {
lappend options "ldflags=-L${blddir}/${lang_library_path}"
}
lappend options "ldflags=${lang_link_flags}"
}
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
lappend options "libs=${gluefile}"
lappend options "ldflags=${wrap_flags}"
}
lappend options "additional_flags=[libio_include_flags]"
lappend options "timeout=[timeout_value]"
lappend options "compiler=$GCC_UNDER_TEST"
set options [concat $libvtv_compile_options $options]
if [info exists ALWAYS_CFLAGS] {
set options [concat "$ALWAYS_CFLAGS" $options]
}
set options [dg-additional-files-options $options $source]
set result [target_compile $source $dest $type $options]
return $result
}
proc libvtv_option_help { } {
send_user " --additional_options,OPTIONS\t\tUse OPTIONS to compile the testcase files. OPTIONS should be comma-separated.\n"
}
proc libvtv_option_proc { option } {
if [regexp "^--additional_options," $option] {
global libvtv_compile_options
regsub "--additional_options," $option "" option
foreach x [split $option ","] {
lappend libvtv_compile_options "additional_flags=$x"
}
return 1
} else {
return 0
}
}

View file

@ -0,0 +1,53 @@
// { dg-do run }
struct base
{
int total;
virtual void add (int i) { total += i; }
virtual void sub (int i) { total -= i; }
virtual void init (void) { total = 73; }
};
struct derived : public base
{
int total;
virtual void add (int i) { total += 10 * i; }
virtual void sub (int i) { total -= 2 * i; }
virtual void init (void) { total = 0; }
};
bool
get_cond_value (int x)
{
if ((x % 3) > 0)
return true;
else
return false;
return false;
}
int
main (int argc, char **argv)
{
base *a;
bool cond_value = get_cond_value (10);
int x;
if (cond_value)
a = new base ();
else
a = new derived ();
cond_value = get_cond_value (47);
x = 0;
if (!cond_value)
x = 17;
a->init ();
for ( ; x < 10; ++x)
{
a->add(50);
a->sub(25);
}
}

View file

@ -1,3 +1,4 @@
// { dg-do run }
extern "C" int printf(const char *,...);
struct V1 {
int v;

View file

@ -1,3 +1,5 @@
// { dg-do run }
template<int patch_dim, int patch_space_dim>
class DataOutInterface
{

View file

@ -0,0 +1,18 @@
#include "lib.h"
struct Derived_Private : public Base
{
virtual ~Derived_Private()
{ printf("in Derived_Private destructor\n"); }
};
Base * GetPrivate()
{
return new Derived_Private();
}
void Destroy(Base * pb)
{
delete pb; // Virtual call #1
}

View file

@ -0,0 +1,18 @@
// { dg-do run }
#include "lib.h"
struct Derived: public Base
{
virtual ~Derived()
{ printf("In Derived destructor\n"); }
};
int main()
{
Derived * d = new Derived;
Destroy(d);
Base * pp = GetPrivate();
delete pp; // Virtual call #2
}

View file

@ -0,0 +1 @@
derived-main.cpp derived-lib.cpp

View file

@ -1,3 +1,5 @@
// { dg-do run }
#include <assert.h>
extern "C" int printf(const char *, ...);

View file

@ -1,3 +1,4 @@
// { dg-do run }
extern "C" int printf(const char *, ...);

View file

@ -1,3 +1,5 @@
// { dg-do run }
#include "event-private.h"
template<typename T> void derefIfNotNull(T* ptr)

View file

@ -0,0 +1 @@
event-main.cpp event-definitions.cpp event-private.cpp

View file

@ -0,0 +1,27 @@
// { dg-do run }
extern "C" int printf(const char *, ...);
struct A {
virtual ~A() {}
};
struct B {
virtual ~B() {}
};
struct C: public A {
virtual ~C() {}
};
struct D: public C, B {
virtual ~D() {}
};
D d;
int main()
{
printf ("%p\n", &d);
return 0;
}

View file

@ -1,3 +1,4 @@
// { dg-do run }
class EtherCtrl {
protected:

View file

@ -1,3 +1,5 @@
// { dg-do run }
#include "parts-test-main.h"
#include "parts-test-extra-parts-views.h"

View file

@ -0,0 +1 @@
parts-test-main.cpp parts-test-extra-parts.cpp parts-test-extra-parts-views.cpp

View file

@ -1,3 +1,5 @@
// { dg-do run }
// Small test case from povray, see if it reproduces.
#include <stdio.h>

View file

@ -0,0 +1,101 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "vtv_utils.h"
#include "vtv_rts.h"
/* This configuration will test mostly inserting of elements that are already inserted since
the number of repeats is 200 */
#define NUM_MAPS 4000
#define ELEMENTS_PER_MAP 100
#define NUM_REPEATS 200
#define KEY_TYPE_FIXED_SIZE 8
void *key_buffer = malloc (17);
typedef char * name_string;
name_string fake_names[NUM_MAPS];
/* This variable has to be put in rel.ro */
void * maps[NUM_MAPS] VTV_PROTECTED_VAR;
struct fake_vt {
void * fake_vfp [4];
};
void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP];
void
generate_names (void)
{
int i;
for (i = 0; i < NUM_MAPS; ++i)
{
fake_names[i] = (char *) malloc (9 * sizeof (char));
snprintf (fake_names[i], 9, "name%d", i);
}
}
static uint32_t
vtv_string_hash(const char *in)
{
const char *s = in;
uint32_t h = 0;
for ( ; *s; ++s)
h = 5 * h + *s;
return h;
}
int main()
{
__VLTChangePermission(__VLTP_READ_WRITE);
generate_names ();
for (int k = 0; k < NUM_REPEATS; k++)
{
int curr_fake_vt = 0;
for (int i = 0; i < NUM_MAPS; i++)
{
uint32_t *value_ptr = (uint32_t *) key_buffer;
uint32_t len1 = strlen (fake_names[i]);
uint32_t hash_value = vtv_string_hash (fake_names[i]);
void *temp_array[ELEMENTS_PER_MAP];
*value_ptr = len1;
value_ptr++;
*value_ptr = hash_value;
memcpy ((char *) key_buffer + KEY_TYPE_FIXED_SIZE, fake_names[i],
len1);
#ifdef VTV_DEBUG
__VLTRegisterPairDebug (&maps[i], (char *) key_buffer, 128,
&fake_vts[curr_fake_vt], "", "");
#else
__VLTRegisterPair (&maps[i], (char *) key_buffer, 128,
&fake_vts[curr_fake_vt]);
#endif
for (int j = 0; j < ELEMENTS_PER_MAP; j++)
{
temp_array[j] = &fake_vts[curr_fake_vt];
curr_fake_vt++;
}
#ifdef VTV_DEBUG
__VLTRegisterSetDebug (&maps[i], (char *) key_buffer, 128, 100,
(void **) &temp_array);
#else
__VLTRegisterSet (&maps[i], (char *) key_buffer, 128, 100,
(void **) &temp_array);
#endif
}
}
__VLTChangePermission(__VLTP_READ_ONLY);
return 0;
}

View file

@ -0,0 +1,106 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "vtv_utils.h"
#include "vtv_rts.h"
/* This configuration will test mostly inserting of new elements since
the number of repeats is 1. It should also do a lot of rehashing */
/* This test case may fail depending on the system configuration.
Check the value of /proc/sys/vm/max_map_count and fix by doing
Ex: sudo sh -c "echo 131060 > /proc/sys/vm/max_map_count" */
#define NUM_MAPS 40000
#define ELEMENTS_PER_MAP 100
#define NUM_REPEATS 1
#define KEY_TYPE_FIXED_SIZE 8
void *key_buffer = malloc (17);
typedef char * name_string;
name_string fake_names[NUM_MAPS];
/* This variable has to be put in rel.ro */
void * maps[NUM_MAPS] VTV_PROTECTED_VAR;
struct fake_vt {
void * fake_vfp [4];
};
void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP];
void
generate_names (void)
{
int i;
for (i = 0; i < NUM_MAPS; ++i)
{
fake_names[i] = (char *) malloc (9 * sizeof (char));
snprintf (fake_names[i], 9, "name%d", i);
}
}
static uint32_t
vtv_string_hash(const char *in)
{
const char *s = in;
uint32_t h = 0;
for ( ; *s; ++s)
h = 5 * h + *s;
return h;
}
int main()
{
__VLTChangePermission(__VLTP_READ_WRITE);
generate_names();
for (int k = 0; k < NUM_REPEATS; k++)
{
int curr_fake_vt = 0;
for (int i = 0; i < NUM_MAPS; i++)
{
uint32_t *value_ptr = (uint32_t *) key_buffer;
uint32_t len1 = strlen (fake_names[i]);
uint32_t hash_value = vtv_string_hash (fake_names[i]);
void *temp_array[ELEMENTS_PER_MAP];
*value_ptr = len1;
value_ptr++;
*value_ptr = hash_value;
memcpy ((char *) key_buffer + KEY_TYPE_FIXED_SIZE, fake_names[i],
len1);
#ifdef VTV_DEBUG
__VLTRegisterPairDebug (&maps[i], (char *) key_buffer, 128,
&fake_vts[curr_fake_vt], "", "");
#else
__VLTRegisterPair (&maps[i], (char *) key_buffer, 128,
&fake_vts[curr_fake_vt]);
#endif
for (int j = 0; j < ELEMENTS_PER_MAP; j++)
{
temp_array[j] = &fake_vts[curr_fake_vt];
curr_fake_vt++;
}
#ifdef VTV_DEBUG
__VLTRegisterSetDebug (&maps[i], (char *) key_buffer, 128, 100,
(void **) &temp_array);
#else
__VLTRegisterSet (&maps[i], (char *) key_buffer, 128, 100,
(void **) &temp_array);
#endif
}
}
__VLTChangePermission(__VLTP_READ_ONLY);
return 0;
}

View file

@ -1,3 +1,5 @@
// { dg-do run }
#include <assert.h>
#include <iostream>
#include <fstream>

View file

@ -1,3 +1,5 @@
// { dg-do run }
#include <assert.h>
extern "C" int printf(const char *, ...);

View file

@ -1,3 +1,5 @@
// { dg-do run }
#include <assert.h>
extern "C" int printf(const char *, ...);

View file

@ -0,0 +1,74 @@
// { dg-do run }
// Small test case from povray, see if it reproduces.
#include <stdio.h>
class POVMS_MessageReceiver
{
private:
int x;
class Handler
{
public:
virtual void print() = 0;
};
protected:
template<class T> class MemberHandler : public Handler
{
public:
MemberHandler(T *xx)
{
x = xx;
}
~MemberHandler() {}
void print()
{
printf("In print\n");
}
private:
T *x;
};
private:
struct HandlerNode
{
Handler *handler;
};
HandlerNode *receiver;
public:
POVMS_MessageReceiver(int xx) : x(xx) {}
~POVMS_MessageReceiver() {}
void foo(int *xx);
void try_call();
};
void POVMS_MessageReceiver::foo(int *xx)
{
receiver = new HandlerNode;
receiver->handler = new MemberHandler<int>(xx);
}
void POVMS_MessageReceiver::try_call()
{
receiver->handler->print();
}
int main()
{
int loc = 34;
POVMS_MessageReceiver a_test(100);
a_test.foo(&loc);
a_test.try_call();
}

View file

@ -1,3 +1,5 @@
// { dg-do run }
#include <assert.h>
struct A {
A():value(123) {}

View file

@ -1,3 +1,5 @@
// { dg-do run }
#include <assert.h>
#include <signal.h>
#include <setjmp.h>

View file

@ -0,0 +1,97 @@
// { dg-do run }
#include <stdlib.h>
#include <string>
class Literal;
class CallRuntime;
class AstNode {
public:
enum Type {
kLiteral, kCallRuntime,
kInvalid = -1
};
AstNode() { }
virtual ~AstNode() { }
virtual Type node_type() const = 0;
bool
IsLiteral() { return node_type() == AstNode::kLiteral; }
Literal *
AsLiteral() { return IsLiteral() ? reinterpret_cast<Literal*>(this)
: NULL; }
bool
IsCallRuntime() { return node_type() == AstNode::kCallRuntime; }
CallRuntime *
AsCallRuntime() { return IsCallRuntime() ? reinterpret_cast<CallRuntime*>(this)
: NULL; }
};
class Expression: public AstNode {
public:
private:
int id_;
};
class Literal: public Expression {
public:
virtual AstNode::Type node_type() const { return AstNode::kLiteral; }
private:
std::string ToString();
};
class CallRuntime: public Expression {
public:
virtual AstNode::Type node_type() const { return AstNode::kCallRuntime; }
private:
std::string name_;
};
Expression *
ExpressionCheck (bool *ok)
{
if (*ok == true)
return new CallRuntime();
else
return new Literal ();
return NULL;
}
Expression *
GetExpression (bool *ok)
{
Expression *expression = ExpressionCheck (ok);
Expression *return_expr = NULL;
if (expression != NULL && expression->AsLiteral() != NULL)
return_expr = new Literal();
else if (expression != NULL && expression->AsCallRuntime() != NULL)
return_expr = expression;
return return_expr;
}
int
main (int argc, char **argv)
{
bool a_bool = true;
AstNode *node = GetExpression (&a_bool);
return 0;
}

View file

@ -0,0 +1,222 @@
// { dg-do run }
/* This test script is part of GDB, the GNU debugger.
Copyright 1993, 1994, 1997, 1998, 1999, 2003, 2004,
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Pls try the following program on virtual functions and try to do print on
// most of the code in main(). Almost none of them works !
//
// The inheritance structure is:
//
// V : VA VB
// A : (V)
// B : A
// D : AD (V)
// C : (V)
// E : B (V) D C
//
class VA
{
public:
int va;
};
class VB
{
public:
int vb;
int fvb();
virtual int vvb();
};
class V : public VA, public VB
{
public:
int f();
virtual int vv();
int w;
};
class A : virtual public V
{
public:
virtual int f();
private:
int a;
};
class B : public A
{
public:
int f();
private:
int b;
};
class C : public virtual V
{
public:
int c;
};
class AD
{
public:
virtual int vg() = 0;
};
class D : public AD, virtual public V
{
public:
static void s();
virtual int vg();
virtual int vd();
int fd();
int d;
};
class E : public B, virtual public V, public D, public C
{
public:
int f();
int vg();
int vv();
int e;
};
D dd;
D* ppd = &dd;
AD* pAd = &dd;
A a;
B b;
C c;
D d;
E e;
V v;
VB vb;
A* pAa = &a;
A* pAe = &e;
B* pBe = &e;
D* pDd = &d;
D* pDe = &e;
V* pVa = &a;
V* pVv = &v;
V* pVe = &e;
V* pVd = &d;
AD* pADe = &e;
E* pEe = &e;
VB* pVB = &vb;
void init()
{
a.vb = 1;
b.vb = 2;
c.vb = 3;
d.vb = 4;
e.vb = 5;
v.vb = 6;
vb.vb = 7;
d.d = 1;
e.d = 2;
}
extern "C" int printf(const char *, ...);
int all_count = 0;
int failed_count = 0;
#define TEST(EXPR, EXPECTED) \
ret = EXPR; \
if (ret != EXPECTED) {\
printf("Failed %s is %d, should be %d!\n", #EXPR, ret, EXPECTED); \
failed_count++; } \
all_count++;
int ret;
void test_calls()
{
TEST(pAe->f(), 20);
TEST(pAa->f(), 1);
TEST(pDe->vg(), 202);
TEST(pADe->vg(), 202);
TEST(pDd->vg(), 101);
TEST(pEe->vvb(), 411);
TEST(pVB->vvb(), 407);
TEST(pBe->vvb(), 411);
TEST(pDe->vvb(), 411);
TEST(pEe->vd(), 282);
TEST(pEe->fvb(), 311);
TEST(pEe->D::vg(), 102);
printf("Did %d tests, of which %d failed.\n", all_count, failed_count);
}
#ifdef usestubs
extern "C" {
void set_debug_traps();
void breakpoint();
};
#endif
int main()
{
#ifdef usestubs
set_debug_traps();
breakpoint();
#endif
init();
e.w = 7;
e.vb = 11;
test_calls();
return 0;
}
int A::f() {return 1;}
int B::f() {return 2;}
void D::s() {}
int E::f() {return 20;}
int D::vg() {return 100+d;}
int E::vg() {return 200+d;}
int V::f() {return 600+w;}
int V::vv() {return 400+w;}
int E::vv() {return 450+w;}
int D::fd() {return 250+d;}
int D::vd() {return 280+d;}
int VB::fvb() {return 300+vb;}
int VB::vvb() {return 400+vb;}

View file

@ -1,3 +1,5 @@
// { dg-do run }
#include <assert.h>
struct V {
V(): virtual_value(-123) {}

View file

@ -0,0 +1,83 @@
load_lib libvtv-dg.exp
load_gcc_lib gcc-dg.exp
global VTV_FLAGS
set VTV_FLAGS [list {-O0} {-O2}]
libvtv_init c++
set shlib_ext [get_shlib_extension]
set lang_link_flags "-shared-libgcc -lstdc++"
set lang_test_file_found 0
set lang_library_path "../libstdc++-v3/src/.libs"
dg-init
set blddir [lookfor_file [get_multilibs] libvtv]
# Find the correct libstdc++ library to use.
if { $blddir != "" } {
# Look for a static libstdc++ first.
if [file exists "${blddir}/${lang_library_path}/libstdc++.a"] {
set lang_test_file "${lang_library_path}/libstdc++.a"
set lang_test_file_found 1
# We may have a shared only build, so look for a shared libstdc++.
} elseif [file exists "${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"] {
set lang_test_file "${lang_library_path}/libstdc++.${shlib_ext}"
set lang_test_file_found 1
} else {
puts "looking for ${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"
puts "No libstdc++ library found, will not execute c++ tests"
}
} elseif { [info exists GXX_UNDER_TEST] } {
set lang_test_file_found 1
# Needs to exist for libvtv.exp.
set lang_test_file ""
} else {
puts "GXX_UNDER_TEST not defined, will not execute c++ tests"
}
global srcdir
if { $lang_test_file_found } {
# Set the path for finding libstdc++.
if { $blddir != "" } {
set ld_library_path "$always_ld_library_path:${blddir}/${lang_library_path}"
} else {
set ld_library_path "$always_ld_library_path"
}
append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
set_ld_library_path_env_vars
# Make sure we can find the libstdc++ header files.
set flags_file "${blddir}/../libstdc++-v3/scripts/testsuite_flags"
if { [file exists $flags_file] } {
set libstdcxx_includes [exec sh $flags_file --build-includes]
} else {
set libstdcxx_includes ""
}
# Run the tests with -fvtable-verify=std
foreach flags $VTV_FLAGS {
foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.cc/*.cc]] {
dg-runtest $srcfile "$flags -fvtable-verify=std" $libstdcxx_includes
}
foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.cc/@*.list]] {
dg-runtest $srcfile "$flags -fvtable-verify=std" $libstdcxx_includes
}
}
# Run the tests with -fvtable-verify=preinit
foreach flags $VTV_FLAGS {
foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.cc/*.cc]] {
dg-runtest $srcfile "$flags -fvtable-verify=preinit" $libstdcxx_includes
}
foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.cc/@*.list]] {
dg-runtest $srcfile "$flags -fvtable-verify=preinit" $libstdcxx_includes
}
}
}

View file

@ -0,0 +1,185 @@
// { dg-do run }
#include <stdio.h>
#include <stdlib.h>
class XMemory
{
public:
void * operator new (size_t size);
void operator delete (void *p);
protected:
XMemory () {}
virtual ~XMemory() {}
};
class XSerializable
{
public:
virtual ~XSerializable () {};
virtual bool isSerializable() const = 0;
virtual void serialize () = 0;
protected:
XSerializable() {};
};
class Grammar: public XSerializable, public XMemory
{
public:
enum GrammarType {
DTDGrammarType,
SchemaGrammarType,
OtherGrammarType,
Unknown
};
virtual ~Grammar() {}
virtual GrammarType getGrammarType() const = 0;
virtual bool getValidated() const = 0;
virtual bool isSerializable() const;
virtual void serialize ();
protected:
Grammar() {};
};
class SchemaGrammar : public Grammar
{
public:
SchemaGrammar () : Grammar(), elemID(10) { fValidated = true; }
virtual ~SchemaGrammar() {}
virtual Grammar::GrammarType getGrammarType() const;
virtual bool getValidated() const;
virtual bool isSerializable () const;
virtual void serialize ();
private:
const unsigned int elemID;
bool fValidated;
};
class OtherGrammar : public Grammar
{
public:
OtherGrammar () : Grammar(), elemID(10) { fValidated = true; }
virtual ~OtherGrammar() {}
virtual Grammar::GrammarType getGrammarType() const;
virtual bool getValidated() const;
virtual bool isSerializable () const;
virtual void serialize ();
private:
const unsigned int elemID;
bool fValidated;
};
void
Grammar::serialize ()
{
printf ("in Grammar::serialize\n");
}
bool
Grammar::isSerializable () const
{
return true;
}
bool
SchemaGrammar::isSerializable () const
{
return true;
}
void
SchemaGrammar::serialize ()
{
printf ("in SchemaGrammar::serialize\n");
}
Grammar::GrammarType
SchemaGrammar::getGrammarType() const {
return Grammar::SchemaGrammarType;
}
bool
SchemaGrammar::getValidated () const
{
return fValidated;
}
void *
XMemory::operator new (size_t size)
{
return malloc (size);
}
void
XMemory::operator delete (void *p)
{
}
bool
OtherGrammar::isSerializable () const
{
return false;
}
void
OtherGrammar::serialize ()
{
printf ("in OtherGrammar::serialize\n");
}
Grammar::GrammarType
OtherGrammar::getGrammarType() const {
return Grammar::OtherGrammarType;
}
bool
OtherGrammar::getValidated () const
{
return fValidated;
}
int
main (int argc, char **argv)
{
SchemaGrammar sPtr;
OtherGrammar oPtr;
Grammar &sGrammar = sPtr;
for (int i = 0; i < 2; ++i)
{
if (i == 0)
sGrammar = oPtr;
else
sGrammar = sPtr;
if (sGrammar.getGrammarType() != Grammar::SchemaGrammarType ||
sGrammar.getValidated ())
printf ("if condition was true.\n");
else
printf ("if condition was false.\n");
}
return 0;
}

View file

@ -0,0 +1,68 @@
load_lib libvtv-dg.exp
load_gcc_lib gcc-dg.exp
global VTV_FLAGS
set VTV_FLAGS [list {-O0} {-O2}]
libvtv_init c++
set shlib_ext [get_shlib_extension]
set lang_link_flags "-shared-libgcc -lstdc++"
set lang_test_file_found 0
set lang_library_path "../libstdc++-v3/src/.libs"
dg-init
set blddir [lookfor_file [get_multilibs] libvtv]
# Find the correct libstdc++ library to use.
if { $blddir != "" } {
# Look for a static libstdc++ first.
if [file exists "${blddir}/${lang_library_path}/libstdc++.a"] {
set lang_test_file "${lang_library_path}/libstdc++.a"
set lang_test_file_found 1
# We may have a shared only build, so look for a shared libstdc++.
} elseif [file exists "${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"] {
set lang_test_file "${lang_library_path}/libstdc++.${shlib_ext}"
set lang_test_file_found 1
} else {
puts "looking for ${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"
puts "No libstdc++ library found, will not execute c++ tests"
}
} elseif { [info exists GXX_UNDER_TEST] } {
set lang_test_file_found 1
# Needs to exist for libvtv.exp.
set lang_test_file ""
} else {
puts "GXX_UNDER_TEST not defined, will not execute c++ tests"
}
global srcdir
if { $lang_test_file_found } {
# Set the path for finding libstdc++.
if { $blddir != "" } {
set ld_library_path "$always_ld_library_path:${blddir}/${lang_library_path}"
} else {
set ld_library_path "$always_ld_library_path"
}
append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
set_ld_library_path_env_vars
# Make sure we can find the libstdc++ header files.
set flags_file "${blddir}/../libstdc++-v3/scripts/testsuite_flags"
if { [file exists $flags_file] } {
set libstdcxx_includes [exec sh $flags_file --build-includes]
} else {
set libstdcxx_includes ""
}
# Run the tests with -fvtable-verify=std
foreach flags $VTV_FLAGS {
foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.mempool.cc/*.cc]] {
dg-runtest $srcfile "$flags -fvtable-verify=std" $libstdcxx_includes
}
}
}

View file

@ -5,26 +5,21 @@
#include <setjmp.h>
#include "vtv_malloc.h"
#include "../../../include/vtv-change-permission.h"
volatile static int signal_count = 0;
sigjmp_buf before_segv;
bool vtv_debug = false;
unsigned int vtv_debug = 0;
static void
handler(int sig, siginfo_t *si, void *unused)
{
/*
printf("Got SIGSEGV at address: 0x%lx\n",
(long) si->si_addr);
*/
signal_count++;
/* You are not supposed to longjmp out of a signal handler but it seems
to work for this test case and it simplifies it */
siglongjmp(before_segv, 1);
/* exit(1); */
}
/* Try to modify the memory pointed by "s" but dont actually change the values.
@ -38,13 +33,13 @@ void mempoke(void * s, size_t n)
ret = sigsetjmp(before_segv, 1);
if (ret == 0)
p[0] = p[0];
/* printf("after first setjmp ret=%d\n", ret); */
assert(ret == 1 && signal_count == 1);
ret = sigsetjmp(before_segv, 1);
if (ret == 0)
p[n - 1] = p[n - 1];
/* printf("after second setjmp ret=%d\n", ret); */
assert(ret == 1 && signal_count == 2);
}
@ -61,6 +56,8 @@ int main()
if (sigaction(SIGSEGV, &sa, NULL) == -1)
assert(0);
/* Make the 'bookkeeping' vars read-write. */
__VLTChangePermission (__VLTP_READ_WRITE);
__vtv_malloc_init();
size = 10;

View file

@ -4,8 +4,9 @@
#include <stdio.h>
#include "vtv_malloc.h"
#include "../../../include/vtv-change-permission.h"
bool vtv_debug = false;
unsigned int vtv_debug = 0;
static void
handler(int sig, siginfo_t *si, void *unused)
@ -37,6 +38,8 @@ int main()
if (sigaction(SIGSEGV, &sa, NULL) == -1)
assert(0);
/* Make the 'bookkeeping' vars read-write. */
__VLTChangePermission (__VLTP_READ_WRITE);
__vtv_malloc_init();
size = 10;

View file

@ -0,0 +1,68 @@
load_lib libvtv-dg.exp
load_gcc_lib gcc-dg.exp
global VTV_FLAGS
set VTV_FLAGS [list {-O0} {-O2}]
libvtv_init c++
set shlib_ext [get_shlib_extension]
set lang_link_flags "-shared-libgcc -lstdc++"
set lang_test_file_found 0
set lang_library_path "../libstdc++-v3/src/.libs"
dg-init
set blddir [lookfor_file [get_multilibs] libvtv]
# Find the correct libstdc++ library to use.
if { $blddir != "" } {
# Look for a static libstdc++ first.
if [file exists "${blddir}/${lang_library_path}/libstdc++.a"] {
set lang_test_file "${lang_library_path}/libstdc++.a"
set lang_test_file_found 1
# We may have a shared only build, so look for a shared libstdc++.
} elseif [file exists "${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"] {
set lang_test_file "${lang_library_path}/libstdc++.${shlib_ext}"
set lang_test_file_found 1
} else {
puts "looking for ${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"
puts "No libstdc++ library found, will not execute c++ tests"
}
} elseif { [info exists GXX_UNDER_TEST] } {
set lang_test_file_found 1
# Needs to exist for libvtv.exp.
set lang_test_file ""
} else {
puts "GXX_UNDER_TEST not defined, will not execute c++ tests"
}
global srcdir
if { $lang_test_file_found } {
# Set the path for finding libstdc++.
if { $blddir != "" } {
set ld_library_path "$always_ld_library_path:${blddir}/${lang_library_path}"
} else {
set ld_library_path "$always_ld_library_path"
}
append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
set_ld_library_path_env_vars
# Make sure we can find the libstdc++ header files.
set flags_file "${blddir}/../libstdc++-v3/scripts/testsuite_flags"
if { [file exists $flags_file] } {
set libstdcxx_includes [exec sh $flags_file --build-includes]
} else {
set libstdcxx_includes ""
}
# Run the tests with -fvtable-verify=std
foreach flags $VTV_FLAGS {
foreach srcfile [lsort [glob -nocomplain ${srcdir}/libvtv.mt.cc/*.cc]] {
dg-runtest $srcfile "$flags -fvtable-verify=std -lpthread" $libstdcxx_includes
}
}
}

View file

@ -1,7 +1,11 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "vtv_utils.h"
#include "vtv_rts.h"
#include "pthread.h"
#include <stdio.h>
/* Multi-threaded test for calls to RegisterPair */
@ -19,6 +23,11 @@
#define NUM_THREADS 9
#define KEY_TYPE_FIXED_SIZE 8
void *key_buffer = malloc (17);
typedef char * name_string;
name_string fake_names[NUM_MAPS];
/* This variable has to be put in rel.ro */
void * volatile maps[NUM_MAPS] VTV_PROTECTED_VAR;
@ -30,6 +39,29 @@ void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP];
volatile int current_map = -1;
volatile int threads_completed_it = 0;
void
generate_names (void)
{
int i;
for (i = 0; i < NUM_MAPS; ++i)
{
fake_names[i] = (char *) malloc (9 * sizeof (char));
snprintf (fake_names[i], 9, "name%d", i);
}
}
static uint32_t
vtv_string_hash(const char *in)
{
const char *s = in;
uint32_t h = 0;
for ( ; *s; ++s)
h = 5 * h + *s;
return h;
}
void * do_register_pairs(void *)
{
for (int k = 0; k < NUM_REPEATS; k++)
@ -37,22 +69,44 @@ void * do_register_pairs(void *)
int curr_fake_vt = 0;
for (int i = 0; i < NUM_MAPS; i++)
{
uint32_t *value_ptr = (uint32_t *) key_buffer;
uint32_t len1 = strlen (fake_names[i]);
uint32_t hash_value = vtv_string_hash (fake_names[i]);
void *temp_array[ELEMENTS_PER_MAP];
while (current_map < (k*NUM_MAPS + i))
;
__VLTChangePermission(__VLTP_READ_WRITE);
*value_ptr = len1;
value_ptr++;
*value_ptr = hash_value;
memcpy ((char *) key_buffer + KEY_TYPE_FIXED_SIZE, fake_names[i],
len1);
#ifdef VTV_DEBUG
__VLTRegisterPairDebug ((void **) &maps[i], (char *) key_buffer, 128,
&fake_vts[curr_fake_vt], "", "");
#else
__VLTRegisterPair ((void **) &maps[i], (char *) key_buffer, 128,
&fake_vts[curr_fake_vt]);
#endif
for (int j = 0; j < ELEMENTS_PER_MAP; j++)
{
#ifdef VTV_DEBUG
__VLTRegisterPairDebug((void **) &maps[i], &fake_vts[curr_fake_vt], 0, 0, 0, 0);
#else
__VLTRegisterPair((void **) &maps[i], &fake_vts[curr_fake_vt]);
#endif
__VLTVerifyVtablePointer((void **) &maps[i], &fake_vts[curr_fake_vt]);
temp_array[j] = &fake_vts[curr_fake_vt];
curr_fake_vt++;
}
#ifdef VTV_DEBUG
__VLTRegisterSetDebug ((void **) &maps[i], (char *) key_buffer, 128, 100,
(void **) &temp_array);
#else
__VLTRegisterSet ((void **) &maps[i], (char *) key_buffer, 128, 100,
(void **) &temp_array);
#endif
__VLTChangePermission(__VLTP_READ_ONLY);
int old_value;
@ -78,6 +132,8 @@ int main()
{
pthread_t thread_ids[NUM_THREADS];
generate_names();
for (int t = 0; t < NUM_THREADS; t++ )
if (pthread_create(&thread_ids[t], NULL, do_register_pairs, NULL) != 0)
{

View file

@ -1,7 +1,11 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "vtv_utils.h"
#include "vtv_rts.h"
#include "pthread.h"
#include <stdio.h>
/* Multi-threaded test for calls to RegisterPair */
@ -19,6 +23,11 @@
#define NUM_THREADS 9
#define KEY_TYPE_FIXED_SIZE 8
void *key_buffer = malloc (17);
typedef char * name_string;
name_string fake_names[NUM_MAPS];
/* This variable has to be put in rel.ro */
void * volatile maps[NUM_MAPS] VTV_PROTECTED_VAR;
@ -30,6 +39,29 @@ void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP];
volatile int current_map = -1;
volatile int threads_completed_it = 0;
void
generate_names (void)
{
int i;
for (i = 0; i < NUM_MAPS; ++i)
{
fake_names[i] = (char *) malloc (9 * sizeof (char));
snprintf (fake_names[i], 9, "name%d", i);
}
}
static uint32_t
vtv_string_hash(const char *in)
{
const char *s = in;
uint32_t h = 0;
for ( ; *s; ++s)
h = 5 * h + *s;
return h;
}
void * do_register_pairs(void *)
{
for (int k = 0; k < NUM_REPEATS; k++)
@ -37,22 +69,44 @@ void * do_register_pairs(void *)
int curr_fake_vt = 0;
for (int i = 0; i < NUM_MAPS; i++)
{
uint32_t *value_ptr = (uint32_t *) key_buffer;
uint32_t len1 = strlen (fake_names[i]);
uint32_t hash_value = vtv_string_hash (fake_names[i]);
void *temp_array[ELEMENTS_PER_MAP];
while (current_map < (k*NUM_MAPS + i))
;
__VLTChangePermission(__VLTP_READ_WRITE);
*value_ptr = len1;
value_ptr++;
*value_ptr = hash_value;
memcpy ((char *) key_buffer + KEY_TYPE_FIXED_SIZE, fake_names[i],
len1);
#ifdef VTV_DEBUG
__VLTRegisterPairDebug ((void **) &maps[i], (char *) key_buffer, 128,
&fake_vts[curr_fake_vt], "", "");
#else
__VLTRegisterPair ((void **) &maps[i], (char *) key_buffer, 128,
&fake_vts[curr_fake_vt]);
#endif
for (int j = 0; j < ELEMENTS_PER_MAP; j++)
{
#ifdef VTV_DEBUG
__VLTRegisterPair((void **) &maps[i], &fake_vts[curr_fake_vt], 0, 0, 0, 0);
#else
__VLTRegisterPair((void **) &maps[i], &fake_vts[curr_fake_vt]);
#endif
__VLTVerifyVtablePointer((void **) &maps[i], &fake_vts[curr_fake_vt]);
temp_array[j] = &fake_vts[curr_fake_vt];
curr_fake_vt++;
}
#ifdef VTV_DEBUG
__VLTRegisterSetDebug ((void **) &maps[i], (char *) key_buffer, 128, 100,
(void **) &temp_array);
#else
__VLTRegisterSet ((void **) &maps[i], (char *) key_buffer, 128, 100,
(void **) &temp_array);
#endif
__VLTChangePermission(__VLTP_READ_ONLY);
int old_value;
@ -77,6 +131,8 @@ void * do_register_pairs(void *)
int main()
{
pthread_t thread_ids[NUM_THREADS];
generate_names ();
for (int t = 0; t < NUM_THREADS; t++ )
if (pthread_create(&thread_ids[t], NULL, do_register_pairs, NULL) != 0)

View file

@ -0,0 +1,52 @@
## Makefile for the testsuite subdirectory of the VTV library.
##
## Copyright (C) 2013 Free Software Foundation, Inc.
##
## Process this file with automake to produce Makefile.in.
##
## This file is part of the Vtable Verification (VTV) Library. This
## library is free software; you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3, or (at your option)
## any later version.
## This 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
## General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with this library; see the file COPYING3. If not see
## <http://www.gnu.org/licenses/>.
AUTOMAKE_OPTIONS = nostdinc
# Runs the testsuite via a script.
# Create subdirectories.
stamp-subdir:
if test ! -d lib64; then \
mkdir -p lib64; \
fi; \
if test ! -d lib32; then \
mkdir -p lib32; \
fi; \
echo `date` > stamp-subdir;
testing_script=${libvtv_srcdir}/scripts/run-testsuite.sh
check-script: ${testing_script} stamp-subdir
-@(chmod +x ${testing_script}; \
${testing_script} ${libvtv_srcdir} ${libvtv_builddir})
check-am:
$(MAKE) $(AM_MAKEFLAGS) check-script
.PHONY: check-script
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.out environment-fail-* stamp-* replace-fail-*
# To remove directories.
clean-local:
rm -rf lib*

View file

@ -0,0 +1,379 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = testsuite
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
$(top_srcdir)/../config/libstdc++-raw-cxx.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/override.m4 \
$(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
$(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@
LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
XCFLAGS = @XCFLAGS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
enable_shared = @enable_shared@
enable_static = @enable_static@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
libtool_VERSION = @libtool_VERSION@
libvtv_builddir = @libvtv_builddir@
libvtv_srcdir = @libvtv_srcdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
multi_basedir = @multi_basedir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_noncanonical = @target_noncanonical@
target_os = @target_os@
target_vendor = @target_vendor@
toolexecdir = @toolexecdir@
toolexeclibdir = @toolexeclibdir@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
toplevel_builddir = @toplevel_builddir@
toplevel_srcdir = @toplevel_srcdir@
AUTOMAKE_OPTIONS = nostdinc
testing_script = ${libvtv_srcdir}/scripts/run-testsuite.sh
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.out environment-fail-* stamp-* replace-fail-*
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign testsuite/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-local mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
clean-local distclean distclean-generic distclean-libtool dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
# Runs the testsuite via a script.
# Create subdirectories.
stamp-subdir:
if test ! -d lib64; then \
mkdir -p lib64; \
fi; \
if test ! -d lib32; then \
mkdir -p lib32; \
fi; \
echo `date` > stamp-subdir;
check-script: ${testing_script} stamp-subdir
-@(chmod +x ${testing_script}; \
${testing_script} ${libvtv_srcdir} ${libvtv_builddir})
check-am:
$(MAKE) $(AM_MAKEFLAGS) check-script
.PHONY: check-script
# To remove directories.
clean-local:
rm -rf lib*
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View file

@ -0,0 +1,8 @@
This directory contains tests that have not yet been converted to
proper dejagnu tests. If you look at the run_testsuite script in
libvtv/scripts, you should get a fair idea as to how to run these
tests. The plan is to convert these tests into proper dejangnu tests
sometime in the near future.
Aug. 30, 2013

View file

@ -1 +0,0 @@
parts-test-main.cc parts-test-extra-parts.cc parts-test-extra-parts-views.cc

View file

@ -1,39 +0,0 @@
#include "vtv_utils.h"
#include "vtv_rts.h"
/* This configuration will test mostly inserting of elements that are already inserted since
the number of repeats is 200 */
#define NUM_MAPS 4000
#define ELEMENTS_PER_MAP 100
#define NUM_REPEATS 200
/* This variable has to be put in rel.ro */
void * maps[NUM_MAPS] VTV_PROTECTED_VAR;
struct fake_vt {
void * fake_vfp [4];
};
void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP];
int main()
{
__VLTChangePermission(__VLTP_READ_WRITE);
for (int k = 0; k < NUM_REPEATS; k++)
{
int curr_fake_vt = 0;
for (int i = 0; i < NUM_MAPS; i++)
for (int j = 0; j < ELEMENTS_PER_MAP; j++)
{
#ifdef VTV_DEBUG
__VLTRegisterPairDebug(&maps[i], &fake_vts[curr_fake_vt]);
#endif
curr_fake_vt++;
}
}
__VLTChangePermission(__VLTP_READ_ONLY);
return 0;
}

View file

@ -1,46 +0,0 @@
#include "vtv_utils.h"
#include "vtv_rts.h"
/* This configuration will test mostly inserting of new elements since
the number of repeats is 1. It should also do a lot of rehashing */
/* This test case may fail depending on the system configuration.
Check the value of /proc/sys/vm/max_map_count and fix by doing
Ex: sudo sh -c "echo 131060 > /proc/sys/vm/max_map_count" */
#define NUM_MAPS 40000
#define ELEMENTS_PER_MAP 100
#define NUM_REPEATS 1
/* This variable has to be put in rel.ro */
void * maps[NUM_MAPS] VTV_PROTECTED_VAR;
struct fake_vt {
void * fake_vfp [4];
};
void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP];
int main()
{
__VLTChangePermission(__VLTP_READ_WRITE);
for (int k = 0; k < NUM_REPEATS; k++)
{
int curr_fake_vt = 0;
for (int i = 0; i < NUM_MAPS; i++)
for (int j = 0; j < ELEMENTS_PER_MAP; j++)
{
#ifdef VTV_DEBUG
__VLTRegisterPairDebug(&maps[i], &fake_vts[curr_fake_vt], 0, 0, 0, 0);
#else
__VLTRegisterPair(&maps[i], &fake_vts[curr_fake_vt]);
#endif
curr_fake_vt++;
}
}
__VLTChangePermission(__VLTP_READ_ONLY);
return 0;
}