From 233ee900de80a04299bb636635f65197dcfe9b78 Mon Sep 17 00:00:00 2001 From: toole1 <toole1@6fbd10e7-183d-0410-a318-cb416676e4f2> Date: Fri, 27 Jan 2012 19:26:26 +0000 Subject: [PATCH] deleting things for update git-svn-id: https://subversion.cs.illinois.edu/svn/cs225@5899 6fbd10e7-183d-0410-a318-cb416676e4f2 --- .monadid | 6 +- LICENSE.txt | 32 - Makefile | 63 - Makefile.proxy | 48 - README.txt | 41 - README_config.txt | 22 - README_tests.txt | 1 - ccmonad | Bin 561913 -> 0 bytes ccmonad.cpp | 115 -- config.ini | 24 - help.cpp | 43 - memcheck.h | 277 --- monad | Bin 748060 -> 0 bytes monad.cpp | 507 ----- monad.h | 34 - monad_shared.cpp | 160 -- monad_shared.h | 128 -- pipestream.cpp | 327 ---- pipestream.h | 105 - proxy.cpp | 726 ------- proxy.h | 488 ----- quotes.txt | 58 - random.h | 119 -- update.sh | 56 +- util.cpp | 1268 ------------ util.h | 403 ---- valgrind.h | 4792 --------------------------------------------- 27 files changed, 28 insertions(+), 9815 deletions(-) delete mode 100644 LICENSE.txt delete mode 100644 Makefile delete mode 100644 Makefile.proxy delete mode 100644 README.txt delete mode 100644 README_config.txt delete mode 100644 README_tests.txt delete mode 100755 ccmonad delete mode 100644 ccmonad.cpp delete mode 100644 config.ini delete mode 100644 help.cpp delete mode 100644 memcheck.h delete mode 100755 monad delete mode 100644 monad.cpp delete mode 100644 monad.h delete mode 100644 monad_shared.cpp delete mode 100644 monad_shared.h delete mode 100644 pipestream.cpp delete mode 100644 pipestream.h delete mode 100644 proxy.cpp delete mode 100644 proxy.h delete mode 100644 quotes.txt delete mode 100644 random.h delete mode 100644 util.cpp delete mode 100644 util.h delete mode 100644 valgrind.h diff --git a/.monadid b/.monadid index a32bb92..605d7b6 100644 --- a/.monadid +++ b/.monadid @@ -1,4 +1,4 @@ -monad identification file -This file is used for monad directory identification +pure-monad identification file +This file is used for pure-monad directory identification Built by toole1 on linux1.ews.illinois.edu -Build Date: Wed Jan 25 01:07:42 CST 2012 +Build Date: Thu Jan 26 17:09:06 CST 2012 diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 6b2a61a..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,32 +0,0 @@ -monad is released under the University of Illinois/NCSA Open Source License, -reproduced below: - -Copyright (c) 2011 Jack Toole. All rights reserved. - -Developed by: Jack Toole <jack@toole1.com> - University of Illinois at Urbana-Champaign - http://code.autograder.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal with the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimers. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimers in the - documentation and/or other materials provided with the distribution. - 3. Neither the names of Jack Toole, CS 225, the University of Illinois at - Urbana-Champaign, nor the names of its contributors may be used to - endorse or promote products derived from this Software without specific - prior written permission. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -WITH THE SOFTWARE. diff --git a/Makefile b/Makefile deleted file mode 100644 index 5045194..0000000 --- a/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -CC = g++ -CFLAGS = -Wall -Wshadow -EXENAME = monad -CCMONAD = ccmonad -OBJS = $(EXENAME).o help.o util.o monad_shared.o -CCOBJS = $(CCMONAD).o util.o monad_shared.o -IDFILE = .monadid -OPTIMIZE = off - -ifeq ($(strip $(OPTIMIZE)),on) -CFLAGS += -O2 -DOPTIMIZE -else ifeq ($(strip $(OPTIMIZE)),off) -CFLAGS += -g -O0 -else -$(warning Invalid value specified for OPTIMIZE. Should be on or off) -CFLAGS += -g -O0 -endif - -LIBS:= -IS_LIBRT:=$(shell echo "int main(){}" | g++ -o /dev/null -x c++ - -lrt &>/dev/null ; echo $$?) -IS_LIBPNG:=$(shell echo "int main(){}" | g++ -o /dev/null -x c++ - -lpng &>/dev/null ; echo $$?) -ifeq ($(IS_LIBRT),0) -LIBS+= -lrt -endif -ifeq ($(IS_LIBPNG),0) -LIBS+= -lpng -endif - -all: $(EXENAME) $(CCMONAD) $(IDFILE) - -$(IDFILE): $(OBJS) - echo -e '$(EXENAME) identification file\n'\ -'This file is used for $(EXENAME) directory identification\n'\ -'Built by' `whoami` 'on' `hostname`'\n'\ -'Build Date:' `date`> $(IDFILE) - -$(EXENAME): $(OBJS) $(IDFILE) - $(CC) $(LIBS) $(CFLAGS) $(OBJS) -o $@ - -$(CCMONAD): $(CCOBJS) $(IDFILE) - $(CC) $(LIBS) $(CFLAGS) $(CCOBJS) -o $@ - -help.o: help.cpp $(wildcard *.h) README.cgo README_config.cgo README_tests.cgo LICENSE.cgo quotes.cga - -CONVERT_TXT_TO_CGO=sed -e 's/"/\\"/g' -e 's/^/ << "/' -e 's/$$/" << endl/' -CONVERT_TXT_TO_CGA=sed -e 's/"/\\"/g' -e 's/^/"/' -e 's/$$/",/' - -%.cgo: %.txt - $(CONVERT_TXT_TO_CGO) $(@:.cgo=.txt) > $@ - -%.cga: %.txt - $(CONVERT_TXT_TO_CGA) $(@:.cga=.txt) > $@ - -%.o : %.cpp $(wildcard *.h) - $(CC) $(CFLAGS) -c $(@:.o=.cpp) -o $@ - -.PHONY: clean -clean: - rm -f $(wildcard *.o) $(wildcard *.cgo) $(wildcard *.cga) $(EXENAME) $(CCMONAD) $(IDFILE) $(wildcard $(EXENAME)$(EXENAME)*) - -.PHONY: clean.sh -clean.sh: $(EXENAME) - ./clean.sh diff --git a/Makefile.proxy b/Makefile.proxy deleted file mode 100644 index f4dfb11..0000000 --- a/Makefile.proxy +++ /dev/null @@ -1,48 +0,0 @@ -CC = g++ -WARNINGS := -Wchar-subscripts -Wparentheses -Wreturn-type -Wmissing-braces -Wundef -Wshadow -CFLAGS += $(WARNINGS) -TESTEXE := proxy -# This order is necessary for security. Always include student code last! -# TODO (toole1): I wish I knew why this was; doing unit_tests first is slow if the student code doesn't compile -TESTOBJS := $(TESTEXE).o util.o unit_tests.o monad_shared.o $(TESTOBJS) -OPTIMIZE := off - -ifeq ($(strip $(OPTIMIZE)),on) -CFLAGS += -O2 -DOPTIMIZE -else ifeq ($(strip $(OPTIMIZE)),off) -CFLAGS += -g -O0 -else -$(warning Invalid value specified for OPTIMIZE. Should be on or off) -CFLAGS += -g -O0 -endif - -ifndef ALL_TARGET -ALL_TARGET = all -all: $(TESTEXE) -endif - -LIBS:= -IS_LIBRT:=$(shell echo "int main(){}" | g++ -o /dev/null -x c++ - -lrt &>/dev/null ; echo $$?) -IS_LIBPNG:=$(shell echo "int main(){}" | g++ -o /dev/null -x c++ - -lpng &>/dev/null ; echo $$?) -ifeq ($(IS_LIBRT),0) -LIBS+= -lrt -endif -ifeq ($(IS_LIBPNG),0) -LIBS+= -lpng -endif - -$(TESTEXE): $(TESTOBJS) - $(CC) $(TESTOBJS) $(LIBS) -o $@ - -unit_tests.o : unit_tests.cpp $(wildcard *.h) - ../ccmonad $(CC) $(CFLAGS) -c $(@:.o=.cpp) -o $@ - -%.o : %.cpp $(wildcard *.h) - $(CC) $(CFLAGS) -c $(@:.o=.cpp) -o $@ - -ifndef CLEAN_TARGET -CLEAN_TARGET = clean -.PHONY: clean -clean: - -rm -f *.o $(TESTEXE) -endif diff --git a/README.txt b/README.txt deleted file mode 100644 index f0b77e1..0000000 --- a/README.txt +++ /dev/null @@ -1,41 +0,0 @@ -OVERVIEW: Monad Autograder (c) Jack Toole - Monad is a system for grading students' C/C++ code with point-weighted unit - tests. - -USAGE: monad <assignment> [options] - Runs the tests for <assignment> (mp1, lab01, ...) - '../<assignment>/' must exist - If '../<assignment>_tests/' or any necessary library directories do not exist, - they will be downloaded from SVN - -GENERAL OPTIONS: - Note: Any option may be negated with --no<option> or --<option>=false - Options which default to true are shown negated below - - --noclean Do not re-copy test cases into sandbox. This improves - performance at the cost of safety - --provided Use <assignment>_provided/ instead of - <assignment>_tests/ for test cases - --noupdate Do not call 'svn update' on the tests and library - directories - --verbose Display detailed test output information for passing - tests - --parallel Compiles code in parallel if possible - -INFORMATION OPTIONS: - --help Display this dialog - --help config Help for writing config files - --help tests Help for writing test cases - --info, --version Display version information - --license Display the license - -STAFF OPTIONS: - --staff Use the staff SVN repository to download test cases. - This allows monad to be run by staff without - releasing the test cases to students - --solution Grade <assignment>_solution/ instead of - <assignment>/ - --newtests Use <assignment>_newtests/ instead of - <assignment>_tests/ for test cases. This allows new - test cases to be developed without replacing the old - ones for release tests diff --git a/README_config.txt b/README_config.txt deleted file mode 100644 index 52e7cdd..0000000 --- a/README_config.txt +++ /dev/null @@ -1,22 +0,0 @@ -monad settings and individual test settings are stored in config.ini files -The following options are available for monad's ./config.ini: -[SVN Root] -; svn base url here (http://.../cs225/) -[Monad Files] -; Any files to be copied from monad ./ to ./ASSIGNMENT/ testing directory -; By default, proxy.cpp is used to run test cases: -proxy.cpp - -The following options are available for individual tests' ../ASSIGNMENT_tests/config.ini: -[Required Files] -; Any files that must be copied from the ../ASSIGNMENT directory -main.cpp -[Testing Files] -; Any files that must be copied from ../ASSIGNMENT_tests -; By default, unit_tests.cpp contains the test cases -unit_tests.cpp -[Libraries] -; Any external library folders to be present in the same directory as the -; testing directory. These should be mirrored in [SVN Root]/_shared/ -; The 'testutil' library in this directory is also available -EasyBMP diff --git a/README_tests.txt b/README_tests.txt deleted file mode 100644 index 8d09c35..0000000 --- a/README_tests.txt +++ /dev/null @@ -1 +0,0 @@ -[not finished yet] diff --git a/ccmonad b/ccmonad deleted file mode 100755 index e0bc62275472a765481334fc990367f4363eba35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561913 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�#; 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 bI>vnAB8F;gJm&CFuRA_@0Y1M=J)-|F<yKv_ diff --git a/ccmonad.cpp b/ccmonad.cpp deleted file mode 100644 index 91836bd..0000000 --- a/ccmonad.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "util.h" - -using namespace std; -using namespace util; - -int main(int argc, const char * const * argv) -{ - if (argc < 4) - { - cerr << "ccmonad: usage error" << endl; - exit(1); - } - string compiler = argv[1]; - string inputFile; - vector<string> options; - string outputFile; - bool isNextOutput = false; - for (int32_t i = 2; i < argc; i++) - { - if (strlen(argv[i]) > 0) - { - if (argv[i][0] == '-') - { - if (strlen(argv[i]) > 1 && argv[i][1] == 'o') - isNextOutput = true; - else if (strcmp(argv[i], "-c") != 0) - options.push_back(argv[i]); - } - else - { - if (isNextOutput) - outputFile = argv[i]; - else - { - if (inputFile == "") - inputFile = argv[i]; - else - { - cerr << "ccmonad: error: ccmonad can only take one input file" << endl; - exit(1); - } - } - } - } - } - if (outputFile == "") - { - cerr << "ccmonad: usage error" << endl; - exit(1); - } -#if 0 - cout << "Compiler: " << compiler << endl; - cout << "Input: " << inputFile << endl; - cout << "Output: " << outputFile << endl; -#endif - - if (!exists(inputFile)) - { - cerr << "ccmonad: error: file not found: " << inputFile << endl; - exit(1); - } - - vector<string> args1 = options; - args1.push_back("-c"); - args1.push_back(inputFile); - args1.push_back("-o"); - args1.push_back(outputFile); - int8_t result1 = exec(compiler, args1); - if (result1 != 0) - { - vector<size_t> splits; - splits.push_back(0); // for compiling something always (should be empty) - - ifstream input(inputFile.c_str()); - for (size_t line_i = 1; input.good(); line_i++) - { - string line; - getline(input, line); - vector<string> tokens = tokenize(line, " \t"); - if (tokens.size() >= 2 && tokens[0] == "#if" && tokens[1] == "MONAD_SPLIT") - splits.push_back(line_i); - } - - vector<string> intermediate_outputs; // = options; - //intermediate_outputs.push_back("-shared"); - intermediate_outputs.push_back("-r"); - for (size_t split_i = 0; split_i < splits.size(); split_i++) - { - vector<string> args = options; - args.push_back("-c"); - args.push_back(inputFile); - args.push_back("-DMONAD_SPLIT_LINE_NUMBER=" + lexical_cast<string>(splits[split_i])); - args.push_back("-o"); - args.push_back(outputFile + "." + split_i); - -#if 0 - cout << "\tmonacc: " << compiler; - for (size_t i = 0; i < args.size(); i++) - cout << ' ' << args[i]; - cout << endl; -#endif - - int8_t result2 = exec(compiler, args); - if (result2 == 0) - intermediate_outputs.push_back(outputFile + "." + split_i); - } - intermediate_outputs.push_back("-o"); - intermediate_outputs.push_back(outputFile); - - return exec("ld", intermediate_outputs); - //return exec("mv", intermediate_outputs[2], outputFile); - } - else - return 0; -} diff --git a/config.ini b/config.ini deleted file mode 100644 index 7454c9a..0000000 --- a/config.ini +++ /dev/null @@ -1,24 +0,0 @@ -[SVN Root] -:https://subversion.ews.illinois.edu/svn/sp12-cs225/ - -[SVN Public Dir] -:_shared - -[Staff SVN] -:https://subversion.cs.illinois.edu/svn/cs225/ - -[Staff SVN Dir] -:_current - -[Monad Files] -Makefile.proxy -memcheck.h -monad_shared.h -monad_shared.cpp -proxy.h -proxy.cpp -valgrind.h - -[Libraries] -util - diff --git a/help.cpp b/help.cpp deleted file mode 100644 index 9fbbb41..0000000 --- a/help.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "monad.h" - -namespace monad -{ - -void printHelp() -{ - cout -#include "README.cgo" - ; -} - -void printHelpConfig() -{ - cout -#include "README_config.cgo" - ; -} - -void printHelpTests() -{ - cout -#include "README_tests.cgo" - ; -} - -void printLicense() -{ - cout -#include "LICENSE.cgo" - ; -} - -const char * getRandomQuote() -{ - const char * quotes[] = { -#include "quotes.cga" - }; - size_t quotes_size = (sizeof quotes) / (sizeof quotes[0]); - return quotes[urandn(quotes_size)]; -} - -} // namespace monad diff --git a/memcheck.h b/memcheck.h deleted file mode 100644 index 0e00270..0000000 --- a/memcheck.h +++ /dev/null @@ -1,277 +0,0 @@ - -/* - ---------------------------------------------------------------- - - Notice that the following BSD-style license applies to this one - file (memcheck.h) only. The rest of Valgrind is licensed under the - terms of the GNU General Public License, version 2, unless - otherwise indicated. See the COPYING file in the source - distribution for details. - - ---------------------------------------------------------------- - - This file is part of MemCheck, a heavyweight Valgrind tool for - detecting memory errors. - - Copyright (C) 2000-2010 Julian Seward. All rights reserved. - - redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ---------------------------------------------------------------- - - Notice that the above BSD-style license applies to this one file - (memcheck.h) only. The entire rest of Valgrind is licensed under - the terms of the GNU General Public License, version 2. See the - COPYING file in the source distribution for details. - - ---------------------------------------------------------------- -*/ - - -#ifndef __MEMCHECK_H -#define __MEMCHECK_H - - -/* This file is for inclusion into client (your!) code. - - You can use these macros to manipulate and query memory permissions - inside your own programs. - - See comment near the top of valgrind.h on how to use them. -*/ - -#include "valgrind.h" - -/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !! - This enum comprises an ABI exported by Valgrind to programs - which use client requests. DO NOT CHANGE THE ORDER OF THESE - ENTRIES, NOR DELETE ANY -- add new ones at the end. */ -typedef - enum { - VG_USERREQ__MAKE_MEM_NOACCESS = VG_USERREQ_TOOL_BASE('M','C'), - VG_USERREQ__MAKE_MEM_UNDEFINED, - VG_USERREQ__MAKE_MEM_DEFINED, - VG_USERREQ__DISCARD, - VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE, - VG_USERREQ__CHECK_MEM_IS_DEFINED, - VG_USERREQ__DO_LEAK_CHECK, - VG_USERREQ__COUNT_LEAKS, - - VG_USERREQ__GET_VBITS, - VG_USERREQ__SET_VBITS, - - VG_USERREQ__CREATE_BLOCK, - - VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE, - - /* Not next to VG_USERREQ__COUNT_LEAKS because it was added later. */ - VG_USERREQ__COUNT_LEAK_BLOCKS, - - /* This is just for memcheck's internal use - don't use it */ - _VG_USERREQ__MEMCHECK_RECORD_OVERLAP_ERROR - = VG_USERREQ_TOOL_BASE('M','C') + 256 - } Vg_MemCheckClientRequest; - - - -/* Client-code macros to manipulate the state of memory. */ - -/* Mark memory at _qzz_addr as unaddressable for _qzz_len bytes. */ -#define VALGRIND_MAKE_MEM_NOACCESS(_qzz_addr,_qzz_len) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ - VG_USERREQ__MAKE_MEM_NOACCESS, \ - (_qzz_addr), (_qzz_len), 0, 0, 0) - -/* Similarly, mark memory at _qzz_addr as addressable but undefined - for _qzz_len bytes. */ -#define VALGRIND_MAKE_MEM_UNDEFINED(_qzz_addr,_qzz_len) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ - VG_USERREQ__MAKE_MEM_UNDEFINED, \ - (_qzz_addr), (_qzz_len), 0, 0, 0) - -/* Similarly, mark memory at _qzz_addr as addressable and defined - for _qzz_len bytes. */ -#define VALGRIND_MAKE_MEM_DEFINED(_qzz_addr,_qzz_len) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ - VG_USERREQ__MAKE_MEM_DEFINED, \ - (_qzz_addr), (_qzz_len), 0, 0, 0) - -/* Similar to VALGRIND_MAKE_MEM_DEFINED except that addressability is - not altered: bytes which are addressable are marked as defined, - but those which are not addressable are left unchanged. */ -#define VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE(_qzz_addr,_qzz_len) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ - VG_USERREQ__MAKE_MEM_DEFINED_IF_ADDRESSABLE, \ - (_qzz_addr), (_qzz_len), 0, 0, 0) - -/* Create a block-description handle. The description is an ascii - string which is included in any messages pertaining to addresses - within the specified memory range. Has no other effect on the - properties of the memory range. */ -#define VALGRIND_CREATE_BLOCK(_qzz_addr,_qzz_len, _qzz_desc) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ - VG_USERREQ__CREATE_BLOCK, \ - (_qzz_addr), (_qzz_len), (_qzz_desc), \ - 0, 0) - -/* Discard a block-description-handle. Returns 1 for an - invalid handle, 0 for a valid handle. */ -#define VALGRIND_DISCARD(_qzz_blkindex) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ - VG_USERREQ__DISCARD, \ - 0, (_qzz_blkindex), 0, 0, 0) - - -/* Client-code macros to check the state of memory. */ - -/* Check that memory at _qzz_addr is addressable for _qzz_len bytes. - If suitable addressibility is not established, Valgrind prints an - error message and returns the address of the first offending byte. - Otherwise it returns zero. */ -#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(_qzz_addr,_qzz_len) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ - VG_USERREQ__CHECK_MEM_IS_ADDRESSABLE, \ - (_qzz_addr), (_qzz_len), 0, 0, 0) - -/* Check that memory at _qzz_addr is addressable and defined for - _qzz_len bytes. If suitable addressibility and definedness are not - established, Valgrind prints an error message and returns the - address of the first offending byte. Otherwise it returns zero. */ -#define VALGRIND_CHECK_MEM_IS_DEFINED(_qzz_addr,_qzz_len) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ - VG_USERREQ__CHECK_MEM_IS_DEFINED, \ - (_qzz_addr), (_qzz_len), 0, 0, 0); - -/* Use this macro to force the definedness and addressibility of an - lvalue to be checked. If suitable addressibility and definedness - are not established, Valgrind prints an error message and returns - the address of the first offending byte. Otherwise it returns - zero. */ -#define VALGRIND_CHECK_VALUE_IS_DEFINED(__lvalue) \ - VALGRIND_CHECK_MEM_IS_DEFINED( \ - (volatile unsigned char *)&(__lvalue), \ - (unsigned long)(sizeof (__lvalue))) - - -/* Do a full memory leak check (like --leak-check=full) mid-execution. */ -#define VALGRIND_DO_LEAK_CHECK \ - {unsigned long _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__DO_LEAK_CHECK, \ - 0, 0, 0, 0, 0); \ - } - -/* Do a summary memory leak check (like --leak-check=summary) mid-execution. */ -#define VALGRIND_DO_QUICK_LEAK_CHECK \ - {unsigned long _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__DO_LEAK_CHECK, \ - 1, 0, 0, 0, 0); \ - } - -/* Return number of leaked, dubious, reachable and suppressed bytes found by - all previous leak checks. They must be lvalues. */ -#define VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed) \ - /* For safety on 64-bit platforms we assign the results to private - unsigned long variables, then assign these to the lvalues the user - specified, which works no matter what type 'leaked', 'dubious', etc - are. We also initialise '_qzz_leaked', etc because - VG_USERREQ__COUNT_LEAKS doesn't mark the values returned as - defined. */ \ - {unsigned long _qzz_res; \ - unsigned long _qzz_leaked = 0, _qzz_dubious = 0; \ - unsigned long _qzz_reachable = 0, _qzz_suppressed = 0; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__COUNT_LEAKS, \ - &_qzz_leaked, &_qzz_dubious, \ - &_qzz_reachable, &_qzz_suppressed, 0); \ - leaked = _qzz_leaked; \ - dubious = _qzz_dubious; \ - reachable = _qzz_reachable; \ - suppressed = _qzz_suppressed; \ - } - -/* Return number of leaked, dubious, reachable and suppressed bytes found by - all previous leak checks. They must be lvalues. */ -#define VALGRIND_COUNT_LEAK_BLOCKS(leaked, dubious, reachable, suppressed) \ - /* For safety on 64-bit platforms we assign the results to private - unsigned long variables, then assign these to the lvalues the user - specified, which works no matter what type 'leaked', 'dubious', etc - are. We also initialise '_qzz_leaked', etc because - VG_USERREQ__COUNT_LEAKS doesn't mark the values returned as - defined. */ \ - {unsigned long _qzz_res; \ - unsigned long _qzz_leaked = 0, _qzz_dubious = 0; \ - unsigned long _qzz_reachable = 0, _qzz_suppressed = 0; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__COUNT_LEAK_BLOCKS, \ - &_qzz_leaked, &_qzz_dubious, \ - &_qzz_reachable, &_qzz_suppressed, 0); \ - leaked = _qzz_leaked; \ - dubious = _qzz_dubious; \ - reachable = _qzz_reachable; \ - suppressed = _qzz_suppressed; \ - } - - -/* Get the validity data for addresses [zza..zza+zznbytes-1] and copy it - into the provided zzvbits array. Return values: - 0 if not running on valgrind - 1 success - 2 [previously indicated unaligned arrays; these are now allowed] - 3 if any parts of zzsrc/zzvbits are not addressable. - The metadata is not copied in cases 0, 2 or 3 so it should be - impossible to segfault your system by using this call. -*/ -#define VALGRIND_GET_VBITS(zza,zzvbits,zznbytes) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ - VG_USERREQ__GET_VBITS, \ - (char*)(zza), (char*)(zzvbits), \ - (zznbytes), 0, 0) - -/* Set the validity data for addresses [zza..zza+zznbytes-1], copying it - from the provided zzvbits array. Return values: - 0 if not running on valgrind - 1 success - 2 [previously indicated unaligned arrays; these are now allowed] - 3 if any parts of zza/zzvbits are not addressable. - The metadata is not copied in cases 0, 2 or 3 so it should be - impossible to segfault your system by using this call. -*/ -#define VALGRIND_SET_VBITS(zza,zzvbits,zznbytes) \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ - VG_USERREQ__SET_VBITS, \ - (char*)(zza), (char*)(zzvbits), \ - (zznbytes), 0, 0 ) - -#endif - diff --git a/monad b/monad deleted file mode 100755 index 2d043f1c18e3ea1126401c3f22af96475f8eb878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748060 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 diff --git a/monad.cpp b/monad.cpp deleted file mode 100644 index 16bf983..0000000 --- a/monad.cpp +++ /dev/null @@ -1,507 +0,0 @@ -// monad -// For illinois.edu CS 225 spring 2011 -// By Jack Toole - -#include "monad.h" - -namespace monad -{ -void find_base_dir(const char * argv0); -void create_mp_part_file(); -void processArgs(int argc, const char * const * argv); -void copyRequiredFiles(); -void getLibs(const vector<string> & libs); -string updateFolder(const string & folder, bool link); -string tryGetFolder(string dirAndFolder, const string & target, bool link); -string getFolder(const string & folder, const string & searchDir = "", bool link = false); -void importFiles(const string & preservedFolder, const string & theSourceFolder, - const string & destFolder, const vector<string> & files); -void exec_command(const string & command); - -string assignment_base; -int8_t mp_part; -const int8_t no_mp_part = -1; - -string testsFolder; -string sourceFolder; -string gradeFolder; -string tempFolder; - -FileMap config; - -namespace opts -{ -bool solution = false; -bool clean = true; -bool update = true; -bool staff = false; -bool newtests = false; -bool provided = false; - -bool verbose = false; -bool buffer = true; -bool valgrind = false; -bool parallel = false; - -bool help = false; -bool info = false; -bool license = false; -#if OPTIMIZE -bool optimize = true; -#else -bool optimize = false; -#endif -} - -} - - -int main(int argc, const char * const * argv) -{ - using namespace monad; - - output::set_error_message(); - - // Find monad/ directory - find_base_dir(argv[0]); - - // Read in local config settings. - // Necessary to do this early for [SVN Root] url - readConfig("./", config); - processArgs(argc, argv); - - cout << versioninfo::official_name << endl; - cout << "Testing " << assignment_base; - if (mp_part != no_mp_part) cout << '.' << (int)mp_part; - cout << "..." << endl; - cout << getRandomQuote() << endl; - cout << endl; - - cout << "Setting up test environment..." << endl; - - // Read in test-specific config settings - if (mp_part == no_mp_part) - readConfig(testsFolder, config); - else - readConfig(testsFolder, config, to_string((int)mp_part)); - - copyRequiredFiles(); - - // Sleep for a second to avoid clock skew warnings - // This cummulatively adds about 5 minutes to grade each mp, - // but with the benefit of avoiding newsgroup posts - // CHANGED: Judging by previous emails, the time needed for - // this would vary significantly. not sure about solution - // sleep(1); - - output::header("Compiling"); - chdir(gradeFolder.c_str()); - - // #define MP_PART_NUMBER in proxy - create_mp_part_file(); - // Change inclusion guards in proxy.h - exec("sed", "-i", "-e", "s/PROXY_H/PROXY_" + lexical_cast<string>(urand()) + "_H/g", "./proxy.h"); - - // run [Pre-Make Commands] config header - const vector<string> & processing_commands = config["Pre-Make Commands"]; - for (size_t i = 0; i < processing_commands.size(); i++) - exec_command(processing_commands[i]); - - string makestr = "/usr/bin/make --warn-undefined-variables -Wfatal-errors"; - if (opts::parallel) - makestr += " --jobs=4"; - if (!opts::verbose) - makestr += " --quiet"; - if (opts::optimize) - makestr += " OPTIMIZE=on"; - if (!config["Make Options"].empty()) - makestr += " " + config["Make Options"][0]; - if (opts::verbose) - cout << makestr <<endl; - - // Compile with make - system(makestr.c_str()); // yes, system is insecure if the user has control - // over config.ini. But students don't. - // TODO (toole1): Yeah but this leaves us open to - // aliasing issues, or forces us to specify make's - // path. Ugly either way. - // TODO exec("make", "--quiet", "--warn-undefined-variables", - - cout << endl << endl; - vector<string> args; - if (opts::verbose) args.push_back("--verbose"); - if (opts::valgrind) args.push_back("--valgrind"); - if (!opts::buffer) args.push_back("--noredirect"); - int score = exec("./proxy", args); - - // TODO (toole1): this causes weird output when scores are like 200 - if (score < 0) - { - output::header("Running tests"); - cout << "Could not execute test cases" << endl << endl; - score = 0; - - cout << endl; - output::total_score(score, -1); - } - - return score; -} - -void monad::create_mp_part_file() -{ - ofstream mp_part_file("mp_part.h"); - mp_part_file << "#ifndef MONAD_SPLIT_LINE_NUMBER" << endl; - mp_part_file << "#define MONAD_SPLIT_LINE_NUMBER -1" << endl; - mp_part_file << "#endif" << endl; - mp_part_file << "#define MONAD_SPLIT (MONAD_SPLIT_LINE_NUMBER == __LINE__ || MONAD_SPLIT_LINE_NUMBER == -1)" << endl; - mp_part_file << "#define NO_MP_PART " << static_cast<int>(no_mp_part) << endl; - mp_part_file << "#define MP_PART_NUMBER "; - if (mp_part == no_mp_part) mp_part_file << "NO_MP_PART"; else mp_part_file << static_cast<int>(mp_part); - mp_part_file << endl; - mp_part_file << "#define MP_PART(x) (MP_PART_NUMBER == (x) || MP_PART_NUMBER == NO_MP_PART)" << endl; - mp_part_file.close(); -} - -void monad::processArgs(int argc, const char * const * argv) -{ - // Create OptionsMap for options and vector for positional arguments: - OptionsParser options; - - // Add our possible options to our map - options.addOption("solution", opts::solution); - options.addOption("newtests", opts::newtests); - options.addOption("provided", opts::provided); - options.addOption("clean", opts::clean); - options.addOption("update", opts::update); - options.addOption("staff", opts::staff); - - options.addOption("optimize", opts::optimize); - options.addOption("verbose", opts::verbose); - options.addOption("buffer", opts::buffer); - options.addOption("valgrind", opts::valgrind); - options.addOption("parallel", opts::parallel); - - options.addOption("help", opts::help); - options.addOption("h", opts::help); - options.addOption("info", opts::info); - options.addOption("version", opts::info); - options.addOption("v", opts::info); - options.addOption("license", opts::license); - - // Add arguments - string assignment = ""; - options.addArg(assignment); - - // Read in options and arguments - vector<string> posargs = options.parse(argc, argv); - - // Help - if (opts::help || toLower(assignment) == "help") - { - if (toLower(assignment) == "config") - printHelpConfig(); - else if (toLower(assignment) == "tests") - printHelpTests(); - else - printHelp(); - exit(0); - } - - // Info - if (opts::info) - { - printInfo(); - exit(0); - } - - // License - if (opts::license) - { - printLicense(); - exit(0); - } - - // Clean - if (toLower(assignment) == "clean") - { - system("/bin/rm -rf *_grade/ *_tests/ *_newtests/ *_providedtests *_solution/"); - exit(0); - } - - // Check argument list length - if (assignment == "") - { - cout << "Usage: " << argv[0] << " mp1" << endl; - cout << "Run \'" << argv[0] << " --help\' for more information" << endl; - exit(0); - } - - // Find mp/lab name and tests folder - if (assignment[assignment.length() - 1] == '/') - assignment = assignment.substr(0, assignment.length() - 1); - size_t slash_i = assignment.find_last_of('/'); - string assignment_name = (slash_i == string::npos) ? assignment : assignment.substr(slash_i + 1); - string assignment_dir = (slash_i == string::npos) ? "" : assignment.substr(0, slash_i); - - // TODO (toole1): All this stuff is ugly! - vector<string> splitname = tokenize(assignment_name, '.'); - assignment_base = splitname[0]; - if (splitname.size() == 1) - mp_part = no_mp_part; - else - mp_part = lexical_cast<int>(splitname[1].c_str()); - - gradeFolder = "./" + assignment_base + "_grade/"; - if (!exists(gradeFolder)) opts::clean = true; - - if (opts::clean) - tempFolder = ""; - else - tempFolder = "./" + assignment_base + "_temp/"; - - // Find source folder (i.e. ../mp1) - if (opts::solution) - sourceFolder = updateFolder(assignment_base + "_solution/", false); - else - sourceFolder = getFolder(assignment_base + '/', assignment_dir, false); - - // tests folder - if (opts::provided) - testsFolder = updateFolder(assignment_base + "_provided/", false); - else if (opts::newtests) - testsFolder = updateFolder(assignment_base + "_newtests/", false); - else - testsFolder = updateFolder(assignment_base + "_tests/", false); -} - - -void monad::find_base_dir(const char * argv0) -{ - EXIT_IF_ERROR(argv0 == NULL); - size_t argv0len = strlen(argv0); - char * dir = new char[argv0len + 1]; - strncpy(dir, argv0, argv0len); - dir[argv0len] = '\0'; - - size_t i = argv0len + 1; - do - { - i--; - if (argv0[i] == '/') break; - } while (i != 0); - - // Change directory - if (i != 0) - { - dir[i] = '\0'; - EXIT_IF_ERROR(chdir(dir)); - } - delete [] dir; - - // Ensure the dir is correct - if (!exists("./.monadid")) - { - cerr << "Could not find monad directory. " - "Please run ./monad from the directory it is located in." - << endl; - exit(-1); - } -} - - -void monad::copyRequiredFiles() -{ - // Clear out the temp testing folder - if (opts::clean) - forceRemoveDir(gradeFolder); - else - { - forceRemoveDir(tempFolder); - EXIT_IF_ERROR(rename(gradeFolder.c_str(), tempFolder.c_str())); - } - - exec("/bin/mkdir", gradeFolder); - - // Copy and link appropriate files - parsed from config.ini - importFiles(tempFolder, "./", gradeFolder, config["Monad Files"]); - importFiles(tempFolder, testsFolder, gradeFolder, config["Testing Files"]); - importFiles("", sourceFolder, gradeFolder, config["Required Files"]); - importFiles(tempFolder, "", gradeFolder, config["Preserved Files"]); - - forceRemoveDir(tempFolder); - - getLibs(config["Libraries"]); -} - - -void monad::importFiles(const string & preservedFolder, const string & theSourceFolder, - const string & destFolder, const vector<string> & files) -{ - // 0 for student errors for missing Required Files dir - int student_error_code = ((preservedFolder == "") ? 0 : -1); - - assertExists(destFolder); - if (preservedFolder != "") assertExists(preservedFolder); - if (theSourceFolder != "") assertExists(theSourceFolder, student_error_code); - - for (size_t i = 0; i < files.size(); i++) - { - string preservedFile = preservedFolder + files[i]; - string destFile = destFolder + files[i]; - - // Move the file from it's preservation instance - if (preservedFolder != "" && exists(preservedFile) && - (theSourceFolder == "" || (permissions(preservedFile) & S_IWUSR) == 0)) - { -//!! cout << "mv " << preservedFile << ' ' << destFile << endl; - EXIT_IF_ERROR(rename(preservedFile.c_str(), destFile.c_str())); - } - else if (theSourceFolder != "") - { - // copy the file from it's source - string sourceFile = theSourceFolder + files[i]; - assertExists(sourceFile, student_error_code); - - // Remove hacky call to exec here... - EXIT_IF_ERROR(exec("cp", "-RL", sourceFile.c_str(), destFile.c_str()) != 0, - "cp " + sourceFile + " " + destFile + " failed"); - } - else continue; - - // TODO (toole1) Protect files. This is hacky and should be in util - // TODO (toole1) this should also be AFTER Pre-Make Commands - // EXIT_IF_ERROR(chmod(destFile.c_str(), - // S_IRUSR | (permissions(destFile) & S_IXUSR)) != 0); - } -} - - -void monad::getLibs(const vector<string> & libs) -{ - for (size_t lib_i = 0; lib_i < libs.size(); lib_i++) - { - string folder = updateFolder(libs[lib_i], false); - protectDir(folder); - chdir(gradeFolder.c_str()); - system(("/bin/ln -s ../"+folder+"* ./").c_str()); - chdir(".."); - } -} - -string monad::updateFolder(const string & folder, bool link) -{ - string get = getFolder(folder, "", link); - if (opts::update) - exec("svn", "up", get /*, NULL*/); - return get; -} - -string monad::tryGetFolder(string dirAndFolder, const string & target, bool link) -{ - if (dirAndFolder[dirAndFolder.length() - 1] == '/') - dirAndFolder = dirAndFolder.substr(0, dirAndFolder.size() - 1); - - if (exists(dirAndFolder + "/")) - { - if (!link) return dirAndFolder + "/"; - EXIT_IF_ERROR(symlink(dirAndFolder.c_str(), target.c_str()) != 0); - return target + "/"; - } - - return ""; -} - -string monad::getFolder(const string & folder, const string & searchDir /* = "" */, bool link /* = false */) -{ - // TODO (toole1): All this stuff is ugly! - string target = "./" + folder; - string result; - - // Look in the searchDir folder - if (searchDir != "") - { - result = tryGetFolder(searchDir + "/" + folder, target, link); - if (result != "") return result; - - // Try SVN - // Clear out our cache first - if (exists(target + "/")) - exec("rm", "-rf", target + "/"); - - EXIT_IF_ERROR(config["SVN Root"].size() != 1); - string svndir = config["SVN Root"][0] + "/" + searchDir + "/" + folder; - - int svnstatus = exec("svn", "co", svndir /*, NULL*/); - if (svnstatus == 0) return target + "/"; - - cerr << "Error: " << folder << " not found." << endl; - exit(-1); - } - - // Look in the parent folder - result = tryGetFolder("../" + folder, target, link); - if (result != "") return result; - - // Look in the current folder - if (exists(target + "/")) - return target + "/"; - - // Look two directories up and over - why not? If the parent folder is - // the target source folder for the mp/lab, then the tests or libs - // may be two up and over - // This also covers the case where it is our parent folder - result = tryGetFolder("../../" + folder, target, link); - if (result != "") return result; - - // Check Subversion - - string svn_config_name; - string svn_config_subdir; - if (!opts::staff) - { - svn_config_name = "SVN Root"; - svn_config_subdir = "SVN Public Dir"; - } - else - { - svn_config_name = "Staff SVN"; - svn_config_subdir = "Staff SVN Dir"; - } - if (!config[svn_config_name].empty()) - { - EXIT_IF_ERROR(config[svn_config_name].size() != 1); - EXIT_IF_ERROR(config[svn_config_subdir].size() != 1); - string svndir = config[svn_config_name][0] + "/" + config[svn_config_subdir][0] + "/" + folder; - - // TODO (toole1): Won't work if user needs to type password - int svnstatus = exec("svn", "co", svndir /*, NULL*/); - if (svnstatus == 0) return target + "/"; - } - - cerr << "Error: " << folder << " not found." << endl; - exit(-1); -} - - -// Execute a monad or command line command -void monad::exec_command(const string & command) -{ - vector<string> args = tokenize(command, ' '); - - // Allow processing of special internals - if (args[0] == "rename_main") - { - EXIT_IF_ERROR(args.size() != 3, "rename_main must take 2 arguments: a file and a new name"); - rename_main(args[1], args[2]); - return; - } - -#if DEBUG - cout << "Pre-Make Command: " << command << endl; -#endif - system(command.c_str()); -} - - - diff --git a/monad.h b/monad.h deleted file mode 100644 index 1a7e036..0000000 --- a/monad.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef MONAD_H -#define MONAD_H - -#include <iostream> -#include <fstream> -#include <map> -#include <sstream> -#include <stdlib.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <time.h> -#include <unistd.h> -#include <vector> - -#include "monad_shared.h" -#include "random.h" -#include "util.h" - -using namespace std; -using namespace util; -using namespace monad_shared; - -namespace monad -{ - -void printHelp(); -void printHelpConfig(); -void printHelpTests(); -void printLicense(); -const char * getRandomQuote(); - -} - -#endif // MONAD_H diff --git a/monad_shared.cpp b/monad_shared.cpp deleted file mode 100644 index fb6f846..0000000 --- a/monad_shared.cpp +++ /dev/null @@ -1,160 +0,0 @@ -#include <iostream> -#include "monad_shared.h" -#include "util.h" - -using namespace monad_shared; -using namespace util; -using std::cout; -using std::cerr; -using std::endl; - -namespace monad_shared -{ - -namespace versioninfo -{ -const char * official_name = "Monad Autograder"; -const char * version_name = "confession"; -const Version version_num = Version(2, 1, 4, 3); -const char * date = "18 Jan 2012"; -} - -const char * unit_test_result::pass_string = "~~PASSED~~"; -const size_t header_length = 64; - -void printInfo() -{ - cout << endl - << versioninfo::official_name << endl - << "Version " << versioninfo::version_num << ": " << versioninfo::version_name << endl - << "Released " << versioninfo::date << endl - << "Developed by Jack Toole 2011-2012" << endl - << "Copyright 2011-2012 Jack Toole" << endl - << "Run monad --license to see licensing information" << endl - << endl; -} - -namespace output -{ - -// Set EXIT_IF_ERROR message -void set_error_message() -{ - SET_ERROR_MESSAGE("Oops! Something went wrong inside of me.\n" - "Please contact course staff with the following error details, and they'll figure it out:\n"); -} - -void header(const string & title) -{ - cout << title << "..." << endl - << string(header_length, '=') << endl; -} - -void warning(const string & message) -{ - cerr << endl - << string(header_length, '*') << endl - << "WARNING!" << endl - << message << endl - << string(header_length, '*') << endl << endl; -} - - -void total_score(int32_t score, int32_t outof) -{ - if (outof < 0) - output::header("Total score"); - else - output::header("Total score (out of " + to_string(outof) + ")"); - - cout << "TOTAL SCORE: " << score << endl << endl; -} - -void testname(const unit_test_input & curr_test, int32_t max_testname_len, int32_t max_points_len) -{ - // Output test name - int32_t pos = 0; // keep track of cursor position - std::cout << curr_test.name() << ' '; - pos += strlen(curr_test.name()) + 1; - - if (curr_test.is_valgrind()) - { - cout << "(valgrind) "; - pos += 11; - } - - if (pos % 2 == max_testname_len % 2) - { - cout << ' '; - pos++; - } - - while (pos < max_testname_len + 1) - { - cout << ". "; - pos += 2; - } - pos = 0; // reset column - - std::cout << "[" << curr_test.points() << " pts] "; - pos += intlen(curr_test.points()) + 7; - - while (pos < max_points_len + 7) - { - cout << ' '; - pos++; - } - - cout << "- "; -} - - -void detailed_info(const unit_test_result & curr_test) -{ - std::cout << string(header_length, '-') << endl - << curr_test.name(); - if (curr_test.is_valgrind()) std::cout << " (run under valgrind)"; - std::cout << " [" << curr_test.points() << " points]" << endl; - - const string & error = curr_test.errormsg(); - const string & output = curr_test.output(); - - if (curr_test.passed()) - std::cout << "Result: " << passed_string() << endl; - else - std::cout << "Result: " << failed_string() << ": " << error << endl; - - if (curr_test.time() < 0) - cout << "Took unknown time ("; - else - cout << "Took " << curr_test.time() << "ms ("; - cout << curr_test.timeout() << "ms timeout)" << endl; - - std::cout << "Output:" << endl - << string(header_length, '-') << endl; - - // Tab the output over to distinguish it from the test case - if (output != "") - { - //std::cout << " "; - //replaceAllInternal(output,"\n","\n "); - std::cout << output; - if (output[output.length() - 1] != '\n') std::cout << endl; - } - - cout << endl; -} - -string passed_string() -{ - return colorize::make_color(colorize::GREEN, "passed"); -} - -string failed_string() -{ - return colorize::make_color(colorize::RED , "FAILED"); -} - -} // namespace output -} // namespace monad_shared - diff --git a/monad_shared.h b/monad_shared.h deleted file mode 100644 index be64ec4..0000000 --- a/monad_shared.h +++ /dev/null @@ -1,128 +0,0 @@ -#ifndef MONAD_SHARED -#define MONAD_SHARED - -#include "util.h" -#include "pipestream.h" - -namespace monad_shared -{ - struct Version - { - int32_t major_; - int32_t minor_; - int32_t patch_; - int32_t build_; - - Version(int32_t maj, int32_t min, int32_t pat, int32_t bld) - : major_(maj), minor_(min), patch_(pat), build_(bld) - { } - -#if 0 - Version(const std::string & s) - { - size_t i = 0; - - } -#endif - - void print(std::ostream & out) const - { - out << major_ << '.' << minor_ << '.' << patch_ << '.' << build_; - } - }; - - inline std::ostream & operator<<(std::ostream & out, const Version & v) - { - v.print(out); - return out; - } - - namespace versioninfo - { - extern const char * official_name; - extern const char * version_name; - extern const Version version_num; - extern const char * date; - } - - void printInfo(); - - struct unit_test_input - { - typedef void (*function)(util::pipestream &); - - private: - function func_; - const char * name_; - long timeout_; - int32_t points_; - bool is_valgrind_; - - public: - unit_test_input(const char * _name, - unit_test_input::function _func, - int32_t _points, - long _timeout, - bool _is_valgrind) - : func_(_func), - name_(_name), - timeout_(_timeout), - points_(_points), - is_valgrind_(_is_valgrind) { } - - void execute(util::pipestream & checkstream) const { func_(checkstream); } - const char * name() const { return name_; } - long timeout() const { return timeout_; } - int32_t points() const { return points_; } - bool is_valgrind() const { return is_valgrind_; } - }; - - struct unit_test_result : public unit_test_input - { - private: - std::string errormsg_; - std::string output_; - long time_; - int32_t valgrind_flags_; - - public: - unit_test_result(const unit_test_input & _input, - const std::string & _errormsg, - const std::string & _output, - const long _time, - const int32_t _valgrind_flags) - : unit_test_input(_input), - errormsg_((_errormsg != "") ? _errormsg : "Unexpectedly Aborted"), - output_(_output), - time_(_time), - valgrind_flags_(_valgrind_flags) { } - - const std::string & errormsg() const { return errormsg_; } - const std::string & output() const { return output_; } - long time() const { return time_; } - int32_t valgrind_flags() const { return valgrind_flags_; } - - bool passed() const { return errormsg_ == pass_string; } - bool failed() const { return !passed(); } - int32_t points_scored() const { return passed() ? points() : 0; } - - // Static class data - static const char * pass_string; - static bool _failed(const unit_test_result & obj) { return obj.failed(); } - }; - - namespace output - { - void set_error_message(); - void header(const std::string & title); - void total_score(int32_t score, int32_t outof); - void warning(const std::string & message); - void testname(const unit_test_input & curr_test, int32_t max_testname_len, int32_t max_points_len); - void detailed_info(const unit_test_result & curr_test); - std::string passed_string(); - std::string failed_string(); - } // namespace output - -} - -#endif // MONAD_SHARED diff --git a/pipestream.cpp b/pipestream.cpp deleted file mode 100644 index ea6db27..0000000 --- a/pipestream.cpp +++ /dev/null @@ -1,327 +0,0 @@ - -template <size_t buffersize> -sizedpipestream<buffersize>::sizedpipestream() - : wbufferpos(0), rbufferpos(buffersize), rbuffersize(buffersize), - maxopsize(-1), is_eof(false), enable_multiline_strings(true) -{ - // Give a compile time error if an invalid buffsize is specified - // This is necessary for much easier primitive reading/writing - // The buffer must be either 0 or at least large enough to hold any - // primitive (probably 8 or 16 bytes) - char buffer_size_must_be_0_or_over_16 - [(buffersize != 0 && buffersize < sizeof(intmax_t)) ? -1 : 1]; - buffer_size_must_be_0_or_over_16[0] = '\0'; - - // Create the pipe - pipe(fds); -} - -template <size_t buffersize> -sizedpipestream<buffersize>::~sizedpipestream() -{ - close(); -} - -template <size_t buffersize> -void sizedpipestream<buffersize>::close() -{ - close_write(); - close_read(); -} - -template <size_t buffersize> -void sizedpipestream<buffersize>::close_read() -{ - if (fds[READ_END] == -1) return; - ::close(fds[READ_END]); - fds[READ_END] = -1; -} - -template <size_t buffersize> -void sizedpipestream<buffersize>::close_write() -{ - if (fds[WRITE_END] == -1) return; - flush(); - ::close(fds[WRITE_END]); - fds[WRITE_END] = -1; -} - -template <size_t buffersize> -int sizedpipestream<buffersize>::steal_output(int fd) -{ - ::close(fd); - dup2(fds[WRITE_END], fd); - return 0; -} - -template <size_t buffersize> -int sizedpipestream<buffersize>::steal_input(int fd) -{ - ::close(fd); - dup2(fds[READ_END], fd); - return 0; -} - -template <size_t buffersize> -int sizedpipestream<buffersize>::get_read_fd() -{ - return fds[READ_END]; -} - -template <size_t buffersize> -int sizedpipestream<buffersize>::get_write_fd() -{ - return fds[WRITE_END]; -} - - -template <size_t buffersize> -void sizedpipestream<buffersize>::flush() -{ - if (buffersize == 0 || wbufferpos == 0 || fds[WRITE_END] == -1) - return; - - writen(fds[WRITE_END], &wbuffer[0], wbufferpos); - wbufferpos = 0; -} - -template <size_t buffersize> -int sizedpipestream<buffersize>::fill(size_t byte_count) -{ - if (buffersize == 0 || rbufferpos == 0 || fds[READ_END] == -1) - return -1; - - if (buffersize - rbufferpos < byte_count) - { - memmove(&rbuffer[0], &rbuffer[rbufferpos], rbuffersize - rbufferpos); - rbuffersize -= rbufferpos; - rbufferpos = 0; - } - - while (rbuffersize - rbufferpos < byte_count) - { - ssize_t read_count = ::read(fds[READ_END], - &rbuffer[rbuffersize], - buffersize - rbuffersize); - if (read_count == 0) return 0; - if (read_count == -1) - { - if (errno == EINTR) continue; - return -1; - } - rbuffersize += read_count; - } - - return rbuffersize - rbufferpos; -} - -template <size_t buffersize> -sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const string & str) -{ - if (buffersize == 0) - { - writen(fds[WRITE_END], str.c_str(), str.length()+1); - return *this; - } - - size_t len = str.length(); - for (size_t i = 0; i < len; i++) - { - if (wbufferpos == buffersize) flush(); - wbuffer[wbufferpos++] = str[i]; - } - if (wbufferpos == buffersize) flush(); - wbuffer[wbufferpos++] = '\0'; - return *this; -} - -template <size_t buffersize> -sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const char * str) -{ - if (buffersize == 0) - { - writen(fds[WRITE_END], str, strlen(str)+1); - return *this; - } - - for (size_t i = 0; str[i] != '\0'; i++) - { - if (wbufferpos == buffersize) flush(); - wbuffer[wbufferpos++] = str[i]; - } - if (wbufferpos == buffersize) flush(); - wbuffer[wbufferpos++] = '\0'; - return *this; -} - -template <size_t buffersize> -sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(char * & str) -{ - size_t capacity = 4; - str = new char[capacity]; - size_t len = 0; - - int error = 0; - char c = '\0'; - do - { - error = read_primitive<char>(c); - if (len == maxopsize) continue; - - if (len == capacity) - { - char * temp = str; - str = new char[capacity*2]; - memcpy(str, temp, capacity); - capacity *= 2; - delete [] temp; - } - str[len++] = c; - - } while (error > 0 && c != '\0' && (enable_multiline_strings || c != '\n')); - - str[len-1] = '\0'; - - if (!enable_multiline_strings && len > 2 && str[len-2] == '\r') - str[len-2] = '\0'; - - maxopsize = -1; - return *this; -} - -template <size_t buffersize> -sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(string & str) -{ - char * cstr = NULL; - operator>>(cstr); - str = cstr; - delete [] cstr; - return *this; -} - -template <size_t buffersize> -sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<< - (pipestream_manip::enable_multiline_strings_t value) -{ - enable_multiline_strings = value.value; - return *this; -} - -template <size_t buffersize> -sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>> - (pipestream_manip::setmax_t max) -{ - maxopsize = max.max; - return *this; -} - -template <size_t buffersize> -inline bool sizedpipestream<buffersize>::eof() -{ return is_eof; } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const signed char & value) -{ return write_primitive(value); } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const signed short & value) -{ return write_primitive(value); } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const signed int & value) -{ return write_primitive(value); } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const signed long & value) -{ return write_primitive(value); } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const unsigned char & value) -{ return write_primitive(value); } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const unsigned short & value) -{ return write_primitive(value); } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const unsigned int & value) -{ return write_primitive(value); } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator<<(const unsigned long & value) -{ return write_primitive(value); } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(signed char & value) -{ read_primitive(value); return *this; } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(signed short & value) -{ read_primitive(value); return *this; } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(signed int & value) -{ read_primitive(value); return *this; } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(signed long & value) -{ read_primitive(value); return *this; } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(unsigned char & value) -{ read_primitive(value); return *this; } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(unsigned short & value) -{ read_primitive(value); return *this; } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(unsigned int & value) -{ read_primitive(value); return *this; } - -template <size_t buffersize> -inline sizedpipestream<buffersize> & sizedpipestream<buffersize>::operator>>(unsigned long & value) -{ read_primitive(value); return *this; } - -template <size_t buffersize> -template <typename T> -sizedpipestream<buffersize> & sizedpipestream<buffersize>::write_primitive(T value) -{ - if (fds[WRITE_END] == -1) return *this; - - if (buffersize == 0) - { - writen(fds[WRITE_END], &value, sizeof value); - return *this; - } - - if (buffersize - wbufferpos < sizeof value) - flush(); - - *reinterpret_cast<T*>(&wbuffer[wbufferpos]) = value; - wbufferpos += sizeof value; - return *this; -} - -template <size_t buffersize> -template <typename T> -int sizedpipestream<buffersize>::read_primitive(T & value) -{ - if (fds[READ_END] == -1) return -1; - - if (buffersize == 0) - return readn(fds[READ_END], &value, sizeof value); - - if (rbuffersize - rbufferpos < sizeof value) - { - int error = fill(sizeof value); - if (error == 0) is_eof = true; - if (error <= 0) return error; - } - - value = *reinterpret_cast<T*>(&rbuffer[rbufferpos]); - rbufferpos += sizeof value; - return sizeof value; -} - - diff --git a/pipestream.h b/pipestream.h deleted file mode 100644 index 4657ebe..0000000 --- a/pipestream.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef UTIL_PIPESTREAM_H -#define UTIL_PIPESTREAM_H -#include <unistd.h> -#include <errno.h> -#include <string.h> -#include "util.h" - -namespace util -{ - -namespace pipestream_manip { - struct setmax_t { - size_t max; - }; - - struct enable_multiline_strings_t { - bool value; - }; -} -inline pipestream_manip::setmax_t setmax(size_t max) -{ - pipestream_manip::setmax_t retval = { max }; - return retval; -} - -const pipestream_manip::enable_multiline_strings_t enable_multiline_strings = { true }; -const pipestream_manip::enable_multiline_strings_t disable_multiline_strings = { false }; - -template <size_t buffersize> -class sizedpipestream -{ - protected: - uint8_t wbuffer[buffersize+1]; // +1 to avoid 0 sized arrays - uint8_t rbuffer[buffersize+1]; - size_t wbufferpos; - size_t rbufferpos; - size_t rbuffersize; - size_t maxopsize; - int fds[2]; - bool is_eof; - bool enable_multiline_strings; - static const int READ_END = 0; - static const int WRITE_END = 1; - - public: - sizedpipestream(); - - ~sizedpipestream(); - void close(); - void close_read(); - void close_write(); - - bool eof(); - - void flush(); - int fill(size_t byte_count); - - int steal_output(int fd); - int steal_input(int fd); - - int get_read_fd(); - int get_write_fd(); - - sizedpipestream<buffersize> & operator<<(const string & str); - sizedpipestream<buffersize> & operator<<(const char * str); - sizedpipestream<buffersize> & operator<<(const signed char & value); - sizedpipestream<buffersize> & operator<<(const signed short & value); - sizedpipestream<buffersize> & operator<<(const signed int & value); - sizedpipestream<buffersize> & operator<<(const signed long & value); - sizedpipestream<buffersize> & operator<<(const unsigned char & value); - sizedpipestream<buffersize> & operator<<(const unsigned short & value); - sizedpipestream<buffersize> & operator<<(const unsigned int & value); - sizedpipestream<buffersize> & operator<<(const unsigned long & value); - - sizedpipestream<buffersize> & operator>>(string & str); - sizedpipestream<buffersize> & operator>>(char * & str); - sizedpipestream<buffersize> & operator>>( signed char & value); - sizedpipestream<buffersize> & operator>>( signed short & value); - sizedpipestream<buffersize> & operator>>( signed int & value); - sizedpipestream<buffersize> & operator>>( signed long & value); - sizedpipestream<buffersize> & operator>>(unsigned char & value); - sizedpipestream<buffersize> & operator>>(unsigned short & value); - sizedpipestream<buffersize> & operator>>(unsigned int & value); - sizedpipestream<buffersize> & operator>>(unsigned long & value); - - sizedpipestream<buffersize> & operator<<(pipestream_manip::enable_multiline_strings_t value); - sizedpipestream<buffersize> & operator>>(pipestream_manip::setmax_t max); - - protected: - template <typename T> - sizedpipestream<buffersize> & write_primitive(T value); - template <typename T> - int read_primitive(T & value); - - private: - sizedpipestream(sizedpipestream<buffersize> & other); - sizedpipestream<buffersize> & operator=(sizedpipestream<buffersize> & other); -}; - -typedef sizedpipestream<512> pipestream; - -#include "pipestream.cpp" - -} // namespace util -#endif diff --git a/proxy.cpp b/proxy.cpp deleted file mode 100644 index 576300c..0000000 --- a/proxy.cpp +++ /dev/null @@ -1,726 +0,0 @@ -// proxy.cpp -// NOTE: This is a generic file. Actual unit tests are located in -// unit_tests.cpp. -// By Jack Toole for CS 225 spring 2011 - -// For strsignal: -#ifndef _GNU_SOURCE - #define _GNU_SOURCE -#endif - -#include <sys/types.h> -#include <sys/wait.h> -#include <sys/time.h> - -#include <algorithm> -#include <iomanip> -#include <numeric> - -#include "memcheck.h" -#include "monad_shared.h" -#include "pipestream.h" -#include "proxy.h" -#include "util.h" -#include "valgrind.h" - -using namespace std; -using namespace util; -using namespace monad_shared; - - -OUTPUT_CHECK(equals) -{ - return output == expected; -} - - -OUTPUT_CHECK(contains) -{ - return output.find(expected) != string::npos; -} - - -OUTPUT_CHECK(not_contains) -{ - return output.find(expected) == string::npos; -} - - -namespace proxy -{ - vector<unit_test_input> * global_tests = NULL; - output_check_map * global_output_checks = NULL; - - double time_constant(size_t smaller, size_t larger) { return 1.0; } - double time_logn (size_t smaller, size_t larger) { return log(larger) / log(smaller); } - double time_linear (size_t smaller, size_t larger) { return (double)larger / smaller; } - double time_nlogn (size_t smaller, size_t larger) { return (larger*log(larger)) / (smaller*log(smaller)); } - double time_nsquared(size_t smaller, size_t larger) { return ((double)larger*larger) / ((double)smaller*smaller); } - double time_cubed (size_t smaller, size_t larger) { return ((double)larger*larger*larger) / ((double)smaller*smaller*smaller); } - double time_infinity(size_t smaller, size_t larger) { return std::numeric_limits<double>::max(); } - - runtime_ratio_func runtime_ratio[TIME_COUNT] = - { - time_constant, - time_logn, - time_linear, - time_nlogn, - time_nsquared, - time_cubed, - time_infinity - }; - const char * runtime_str[TIME_COUNT] = - { - "O(1)", - "O(logn)", - "O(n)", - "O(nlogn)", -// "O(nrootn)", - "O(n^2)", - "O(n^3)", - "O(infinity)" - }; -} - - - -int main(int argc, char ** argv) -{ - using namespace proxy; - - // set up EXIT_IF_ERROR messages - output::set_error_message(); - - RunTimeEnvironment::Options opts; - const char * testname = parse_options(argc, argv, opts); - - // Set up run-time environment - RunTimeEnvironment env(global_tests, global_output_checks, opts, testname); - - // Set up the tests - RunTests runner(env); - - // Execute - return runner.execute(); -} - - -namespace proxy { - -// class add_unit_test -add_unit_test::add_unit_test(const char * name, unit_test_input::function func, - int32_t points_in_part, int32_t points_in_total, long timeout, - bool is_valgrind) -{ - lazy_init_global_tests(); - int32_t points = get_points(points_in_total, points_in_part); - // Add to global tests vector - global_tests->push_back(unit_test_input(name, func, points, timeout, is_valgrind)); -} - - -// Check to make global tests vector -void add_unit_test::lazy_init_global_tests() -{ - if (global_tests == NULL) - global_tests = new std::vector<unit_test_input>; -} - -// Discriminate which points value to add -int32_t add_unit_test::get_points(int32_t points_in_total, int32_t points_in_part) -{ - #if MP_PART(NO_MP_PART) - return points_in_total; - #else - return points_in_part; - #endif -} - - -const char * parse_options(int argc, const char * const * const argv, RunTimeEnvironment::Options & opts) -{ - string getTestName = "all"; - - OptionsParser parseopts; - parseopts.addOption("verbose", opts.verbose); - parseopts.addOption("redirect", opts.redirect_test_output); - parseopts.addOption("valgrind", opts.valgrind); - parseopts.addArg(getTestName); - parseopts.parse(argc, argv); - - const char * testname = "all"; - for (int32_t i = 0; i < argc; i++) - if (getTestName == argv[i]) - testname = argv[i]; - return testname; -} - - -// class add_output_check -add_output_check::add_output_check(const char * name, output_check func) -{ - if (global_output_checks == NULL) - global_output_checks = new output_check_map; - (*global_output_checks)[name] = func; -} - - - -// class Run_Time_Environment -RunTimeEnvironment::RunTimeEnvironment(vector<unit_test_input> *& init_tests, - output_check_map *& init_output_checks, - const Options & init_opts, const char * testname) - : max_output_length(8*1024), //arbitrary - single_test_passed_string("Result: passed"), - heap_tests(init_tests), - output_checks(init_output_checks != NULL ? init_output_checks : new output_check_map), - opts(init_opts), - mode(strcasecmp(testname, "all") == 0 ? ALL_TESTS : SINGLE_TEST), - test_arg(testname) -{ - // Copy globals to the RunTimeEnvironment space - // And remove them from the global scope - static int8_t singleton = 0; - EXIT_IF_ERROR(singleton++ != 0, "There may only be one runtime environment"); - EXIT_IF_ERROR(heap_tests == NULL, "No test cases found"); - - init_tests = NULL; - init_output_checks = NULL; -} - - -void RunTimeEnvironment::cleanup_globals() -{ - static bool called_already = false; - if (!called_already) - { - if (heap_tests != NULL) delete heap_tests; - if (output_checks != NULL) delete output_checks; - called_already = true; - } -} - - - -// class RunTests -RunTests::RunTests(RunTimeEnvironment & env) - : environment(env) -{ } - - -int32_t RunTests::execute() -{ - int32_t return_code = execute_by_mode(); - environment.cleanup_globals(); - return return_code; -} - - -int32_t RunTests::execute_by_mode() -{ - if (environment.mode == SINGLE_TEST) - return run_single_test(environment.test_arg); - else if (environment.mode == ALL_TESTS) - return run_all_tests(); - - EXIT_IF_ERROR(true, string("Failed to implement case for mode ") + environment.mode); - exit(-1); -} - - -int32_t RunTests::run_single_test(const char * testname) -{ - const vector<unit_test_input> & tests = *environment.heap_tests; - - for (size_t test_i = 0; test_i < tests.size(); test_i++) - if (strcmp(tests[test_i].name(), testname) == 0) - return run_single_test(tests[test_i]); - - cout << "Test not found" << endl; - exit(-1); -} - - -int32_t RunTests::run_single_test(const unit_test_input & curr_test) -{ - cout << "Running " << curr_test.name() << " [worth " - << curr_test.points() << " points, output below]" << endl; - - unit_test_result result = execute_test(curr_test, false); - - const string & error = result.errormsg(); - - handle_single_test_output(result.output()); - - if (result.passed()) - cout << environment.single_test_passed_string << endl; - else - cout << "Result: FAILED:" << endl << error << endl; - - return result.valgrind_flags(); -} - - -void RunTests::handle_single_test_output(const string & output) -{ - if (output != "") - { - cout << output; - if (output[output.size()-1] != '\n') - cout << endl; - } -} - -int32_t foldTestScore (int score, const unit_test_result & test) { return score + test.points_scored(); } -int32_t foldTestPoints(int points, const unit_test_input & test) { return points + test.points(); } - -int RunTests::run_all_tests() -{ - const vector<unit_test_input> & tests = *environment.heap_tests; - - output::header("Running tests"); - - int32_t points_sum = get_sum_points(); - int32_t max_testname_len = get_max_testname_length(); - int32_t max_points_len = get_max_points_length(); - -#if 0 // removed due to partial compilation lowering this number artificially - if (points_sum != 0 && points_sum < 100) - output::warning("Unit test scores sum to " + to_string(points_sum) + - ", should be at least 100"); -#endif - if (points_sum > 125) - output::warning("Unit test scores sum to " + to_string(points_sum) + - ", this will overflow the return value. Should be <= 125"); - - vector<unit_test_result> results; - for (size_t test_i = 0; test_i < tests.size(); test_i++) - { - output::testname(tests[test_i], max_testname_len, max_points_len); - results.push_back(execute_test(tests[test_i], true)); - output_single_test_passfail(results.back()); - } - - const int32_t score = accumulate(results.begin(), results.end(), 0, foldTestScore); - - cout << endl << endl; - output_detailed_info_if_any_failed(results, score); - output::total_score(score, -1); - - return score; -} - -int32_t RunTests::get_sum_points() -{ - static int32_t cached_sum = INT_MIN; - if (cached_sum == INT_MIN) - cached_sum = accumulate(environment.heap_tests->begin(), environment.heap_tests->end(), 0, foldTestPoints); - return cached_sum; -} - -int32_t RunTests::get_max_testname_length() -{ - const vector<unit_test_input> & tests = *environment.heap_tests; - int32_t max_testname_len = 0; - for (size_t test_i = 0; test_i < tests.size(); test_i++) - { - // TODO (toole1): This is horrible style! - int32_t currlen = strlen(tests[test_i].name()) + (int)tests[test_i].is_valgrind() * 11; // strlen(" (valgrind)"); - - if (currlen > max_testname_len) - max_testname_len = currlen; - } - return max_testname_len; -} - -int32_t RunTests::get_max_points_length() -{ - const vector<unit_test_input> & tests = *environment.heap_tests; - uint32_t max_points_len = 0; - for (size_t test_i = 0; test_i < tests.size(); test_i++) - max_points_len = max(max_points_len, intlen(tests[test_i].points())); - return max_points_len; -} - -void RunTests::output_detailed_info_if_any_failed(const vector<unit_test_result> & results, int32_t score) -{ - if (count_if(results.begin(), results.end(), unit_test_result::_failed) || - environment.opts.verbose) - output_detailed_tests_info(results, score); -} - - -void RunTests::output_detailed_tests_info(const vector<unit_test_result> & results, int32_t score) -{ - output::total_score(score, -1); - cout << endl << endl; - - output::header("Detailed test output"); - - for (size_t test_i = 0; test_i < results.size(); test_i++) - if (results[test_i].failed() || environment.opts.verbose) - output::detailed_info(results[test_i]); - - cout << endl << string(64, '-') << endl; // TODO (toole1): poor style, should be refactored to monad_shared::output -} - - -void RunTests::output_single_test_passfail(const unit_test_result & curr_test) -{ - if (curr_test.passed()) - std::cout << output::passed_string() << endl; - else - std::cout << output::failed_string() << ": " << curr_test.errormsg() << endl; -} - -test_execution::test_execution(const unit_test_input & _test, RunTimeEnvironment & env, bool enable_valgrind_call) - : test(_test), environment(env) -{ - do_valgrind = enable_valgrind_call && (test.is_valgrind() || env.opts.valgrind); -//!! if (!do_valgrind) -//!! test.checkstream = new pipestream; // TODO (reimplement) -} - -void test_execution::child() -{ - fmsg_pipe.close_read(); - cout_pipe.close_read(); - nums_pipe.close_read(); - - // redirect stdout/stderr to pipe - if (environment.opts.redirect_test_output) - { - cout_pipe.steal_output(STDOUT_FILENO); - cout_pipe.steal_output(STDERR_FILENO); - } - - if (do_valgrind) - { - child_valgrind(); - } - else // if (!test.is_valgrind) - { - child_test(); - } -} - -void test_execution::parent() -{ - fmsg_pipe.close_write(); - cout_pipe.close_write(); - nums_pipe.close_write(); -//!! if (test.checkstream != NULL) - checkstream.close_write(); - - // Read stdout/stderr pipe while process is running - if (environment.opts.redirect_test_output) - cout_pipe >> setmax(environment.max_output_length) >> output; - else - output = "Test output was displayed above instead of being buffered\n"; - - cout_pipe.close_read(); -} - -unit_test_result test_execution::result(int8_t return_code) -{ - if (do_valgrind) - return after_valgrind_success(return_code); - else - return after_test_success(); -} - -unit_test_result test_execution::result(const Signal & s) -{ - string errormsg; - long time; - int32_t valgrind_flags = get_valgrind_flags(true); - - fmsg_pipe.close(); - nums_pipe.close(); - if (environment.is_timeout_signal(s)) - { - errormsg = string("Timed out") + " (" + to_string(test.timeout()) + "ms)"; - time = test.timeout(); - } - else - errormsg = s.what(); - - return unit_test_result(test, errormsg, output, time, valgrind_flags); -} - - -unit_test_result RunTests::execute_test(const unit_test_input & test, bool enable_valgrind_call) -{ - cout << std::flush; - test_execution executor(test, environment, enable_valgrind_call); - try - { - int32_t return_code = fork_execute(executor); - return executor.result(return_code); - } - catch (Signal & s) - { - return executor.result(s); - } -} - -template <typename F> -int32_t fork_execute(F & executor) -{ - // Fork - pid_t process_id; - process_id = fork(); - EXIT_IF_ERROR(process_id < 0, "Could not fork application"); - - if (process_id == 0) - { - executor.child(); - exit(0); - } - else // if (process_id > 0) - { - executor.parent(); - - int child_status; - pid_t ws = waitpid(process_id, &child_status, 0); //should return immediately because it's after parent() - EXIT_IF_ERROR(ws == -1); - - if (WIFEXITED(child_status)) - return WEXITSTATUS(child_status); - else if (WIFSIGNALED(child_status)) - throw Signal(WTERMSIG(child_status)); - else - throw Signal(SIGSTOP); - } -} - -void test_execution::child_valgrind() -{ - // We're giving up control to valgrind, so we can't - // Use anything but the cout pipe now - fmsg_pipe.close_write(); - nums_pipe.close_write(); - - start_timeout(); - exec("valgrind", "--dsymutil=yes", "--trace-children=yes", /*"--log-fd=-1",*/ "-q", "./proxy", test.name()); -} - - -void test_execution::child_test() -{ - checkstream.close_read(); - // Execute test - bool test_failed = false; - long test_time = -1; - start_timeout(); - try - { - test.execute(checkstream); // execute function - test_time = end_timeout(); - fmsg_pipe << unit_test_result::pass_string; - } - catch (Failure & failure) - { - test_time = end_timeout(); - test_failed = true; - // Write failure message to pipe - fmsg_pipe << failure.message(); - } - fmsg_pipe.close(); - - // write time and valgrind flags to pipe -//!! delete test.checkstream; - checkstream.close(); - environment.cleanup_globals(); - int32_t valgrind_flags = get_valgrind_flags(test_failed); - nums_pipe << test_time; - nums_pipe << valgrind_flags; - nums_pipe.close(); -} - - -unit_test_result test_execution::after_valgrind_success(int8_t return_code) -{ - fmsg_pipe.close_read(); - nums_pipe.close_read(); - - string errormsg; - - size_t last_endl = findNthLast(output, '\n', 2); - int32_t valgrind_flags = return_code; - - if (last_endl == string::npos) - { - if (environment.opts.redirect_test_output) - errormsg = "Valgrind test did not complete"; - else - errormsg = "Valgrind test output was not redirected to pipe because --redirect was set."; - } - else - { - errormsg = output.substr(last_endl + 1, - output.length() - last_endl - 2); - - if (errormsg == environment.single_test_passed_string) - errormsg = get_valgrind_string(valgrind_flags); - // This will always be unit_test::pass_string unless someone tried to hack monad, in which case - // basing our passing on the return code (valgrind flags) rather than string parsing is the - // right thing to do - } - - return unit_test_result(test, errormsg, output, -1, valgrind_flags); -} - - -unit_test_result test_execution::after_test_success() -{ - string errormsg; - long time; - int32_t valgrind_flags; - - fmsg_pipe >> errormsg; - fmsg_pipe.close(); - nums_pipe >> time; - nums_pipe >> valgrind_flags; - nums_pipe.close(); - - // Check for output's correctness, if that was a condition of passing - if (errormsg == unit_test_result::pass_string) - { - while (!checkstream.eof()) - { - string checkname; - string checkstr; - checkstream >> checkname; - if (checkstream.eof()) break; - checkstream >> checkstr; - if (checkstream.eof()) break; - - output_check check_function = (*environment.output_checks).find(checkname)->second; - if (check_function == NULL) - { - cerr << "Internal Error: in test " << test.name() << ": " - << checkname << " is not a registered OUTPUT_CHECK function" << endl; - exit(-2); - } - - if (!check_function(output, checkstr)) - errormsg = "Incorrect Terminal Output"; - } - } - - if (errormsg == unit_test_result::pass_string) - errormsg = get_valgrind_string(valgrind_flags); - -//!! delete test.checkstream; - checkstream.close(); - - return unit_test_result(test, errormsg, output, time, valgrind_flags); -} - - -int32_t get_valgrind_flags(bool test_failed) -{ - // Check for valgrind errors or leaks (if running under valgrind) - unsigned long errors = 0; - unsigned long leaked = 0; - unsigned long dubious = 0; - unsigned long reachable = 0; - unsigned long suppressed = 0; - - errors = VALGRIND_COUNT_ERRORS; - VALGRIND_DO_LEAK_CHECK; //QUICK - VALGRIND_COUNT_LEAK_BLOCKS(leaked, dubious, reachable, suppressed); - - return bitflags(test_failed, errors, leaked, dubious, reachable); -} - - -const char * get_valgrind_string(int32_t flags) -{ - if (flags == 0) return unit_test_result::pass_string; - - bool test_failed = bitflag(flags, 0); - bool errors = bitflag(flags, 1); - bool leaked = bitflag(flags, 2); - bool dubious = bitflag(flags, 3); - bool reachable = bitflag(flags, 4); - - if (test_failed) return "Test failed (see output)"; - if (errors) return "Invalid read/write errors"; - if (leaked) return "Directly lost memory leaks"; - if (dubious) return "Possibly lost memory leaks"; - // For now we will ignore reachable errors, as they are always present on Mac - // TODO (toole1): Refactor. Still reachable should still hit "unknown" below, not be a free pass - // (this doesn't impact current code paths, but is inelegant) - if (reachable) return unit_test_result::pass_string; //"Still-reachable memory leaks"; - return "Unknown memory errors"; -} - -bool test_execution::prof_timeout_enabled() -{ - struct itimerval temp; - errno = 0; - if (getitimer(ITIMER_PROF, &temp) == 0) - return true; - if (errno == EINVAL) - return false; - cerr << __FILE__ << ":" << __LINE__ << ": ERROR: getitimer failed" << endl; - exit(-1); -} - -void test_execution::start_timeout() -{ - static const bool prof_enabled = prof_timeout_enabled(); - - struct itimerval timeout; - timeout.it_interval.tv_sec = 0; - timeout.it_interval.tv_usec = 0; - timeout.it_value.tv_sec = test.timeout()/1000; - timeout.it_value.tv_usec = (test.timeout()%1000) * 1000; - - if (prof_enabled) - { - EXIT_IF_ERROR(setitimer(ITIMER_PROF, &timeout, NULL)); - // second real time signal in case the student calls a blocking call - timeout.it_value.tv_sec *= 10; - EXIT_IF_ERROR(setitimer(ITIMER_REAL, &timeout, NULL)); - } - else - { - EXIT_IF_ERROR(setitimer(ITIMER_REAL, &timeout, NULL)); - } -} - - -long test_execution::end_timeout() -{ - static const bool prof_enabled = prof_timeout_enabled(); - - struct itimerval timeout; - timeout.it_interval.tv_sec = 0; - timeout.it_interval.tv_usec = 0; - timeout.it_value.tv_sec = 0; - timeout.it_value.tv_usec = 0; - struct itimerval remaining; - - if (prof_enabled) - { - EXIT_IF_ERROR(setitimer(ITIMER_PROF, &timeout, &remaining)); - EXIT_IF_ERROR(setitimer(ITIMER_REAL, &timeout, NULL)); - } - else - { - EXIT_IF_ERROR(setitimer(ITIMER_REAL, &timeout, &remaining)); - } - - // There seems to be a strange -1 error here. I may just be tired, - // but I can't figure out why right now - long time = test.timeout() - remaining.it_value.tv_sec*1000 - remaining.it_value.tv_usec/1000; - return (time < 0) ? 0 : time; -} - - - -} // namespace proxy - diff --git a/proxy.h b/proxy.h deleted file mode 100644 index 47f47bb..0000000 --- a/proxy.h +++ /dev/null @@ -1,488 +0,0 @@ -// proxy.h -// NOTE: This is a generic file. Actual unit tests are located in -// unit_tests.cpp. -// By Jack Toole for CS 225 2011 - -// Randomized inclusion guards so that students can't hotswap the proxy -#ifndef PROXY_H -#define PROXY_H - -#include <math.h> -#include <signal.h> -#include <string.h> - -#include <iostream> -#include <functional> -#include <limits> -#include <map> -#include <string> -#include <vector> -#include <utility> - -#include "pipestream.h" -#include "monad_shared.h" -#include "mp_part.h" - -namespace proxy -{ - using namespace std; - using namespace monad_shared; - - class RunTests; - typedef bool (*output_check)(const std::string &, const std::string &); - - extern std::vector<unit_test_input> * global_tests; - typedef std::map<std::string, output_check> output_check_map; - extern output_check_map * global_output_checks; - - class add_unit_test - { - public: - add_unit_test(const char * name, unit_test_input::function func, - int32_t points_in_part, int32_t points_in_total, long timeout, - bool is_valgrind); - - private: - void lazy_init_global_tests(); - int32_t get_points(int32_t points_in_total, int32_t points_in_part); - }; - - class add_output_check - { - public: - add_output_check(const char * name, output_check func); - }; - - enum mode_t - { - SINGLE_TEST, - MP_PART_TESTS, - ALL_TESTS - }; - - - struct RunTimeEnvironment - { - public: - // Types - struct Options - { - bool verbose; - bool redirect_test_output; - bool valgrind; - - Options() - : verbose(false), - redirect_test_output(true), - valgrind(false) - { } - }; - - // Variables - public: - const size_t max_output_length; - const char * const single_test_passed_string; - const std::vector<unit_test_input> * const heap_tests; - const output_check_map * const output_checks; - const Options opts; - const mode_t mode; - const char * const test_arg; - - // Methods - public: - RunTimeEnvironment(std::vector<unit_test_input> *& init_tests, - output_check_map *& init_output_checks, - const Options & init_opts, const char * testname); - - bool is_timeout_signal(const util::Signal & s) - { - return s.number() == SIGPROF || s.number() == SIGALRM; - } - - void cleanup_globals(); - - private: - // Non-copyable - RunTimeEnvironment(const RunTimeEnvironment & other); - RunTimeEnvironment & operator=(RunTimeEnvironment & other); - }; - - class Failure - { - private: - const char * const myFile; - const size_t myLine; - const string myCause; - - public: - Failure(const char * file, size_t line, const string & cause) - : myFile(file), myLine(line), myCause(cause) { } - - string message() const - { - stringstream ss; - ss << myFile << ":" << myLine << ": " << myCause; - return ss.str(); - } - }; - - class RunTests - { - private: - RunTimeEnvironment & environment; - - public: - RunTests(RunTimeEnvironment & env); - int execute(); - private: - void process_args(int argc, char ** argv); - - protected: - int32_t execute_by_mode(); - int32_t run_single_test(const char * testname); - int32_t run_single_test(const unit_test_input & curr_test); - void handle_single_test_output(const std::string & output); - void output_single_test_passfail(const unit_test_result & curr_test); - - int32_t run_all_tests(); - int32_t get_sum_points(); - int32_t get_max_testname_length(); - int32_t get_max_points_length(); - void output_detailed_info_if_any_failed(const vector<unit_test_result> & results, int32_t score); - void output_detailed_tests_info(const vector<unit_test_result> & results, int32_t score); - - unit_test_result execute_test(const unit_test_input & test, bool enable_valgrind_call); - - private: - RunTests(const RunTests & other); - RunTests & operator=(const RunTests & other); - }; - - template <typename F> - int32_t fork_execute(F & executor); - - class test_execution - { - private: - util::pipestream fmsg_pipe; // For error messages - util::pipestream cout_pipe; // For stdout/stderr - util::pipestream nums_pipe; // for numbers: time, valgrind - const unit_test_input & test; - RunTimeEnvironment & environment; - bool do_valgrind; - util::pipestream checkstream; - string output; - - public: - test_execution(const unit_test_input & _test, RunTimeEnvironment & env, bool enable_valgrind_call); - void parent(); - void child(); - unit_test_result result(int8_t return_code); - unit_test_result result(const util::Signal & s); - - private: - void child_test(); - void child_valgrind(); - unit_test_result after_test_success(); - unit_test_result after_valgrind_success(int8_t return_code); - void start_timeout(); - long end_timeout(); - static bool prof_timeout_enabled(); - - private: - test_execution(const test_execution & other); - test_execution & operator=(const test_execution & other); - }; - - - const char * get_valgrind_string(int32_t flags); - int32_t get_valgrind_flags(bool test_failed); - int32_t bitflags(unsigned long a, unsigned long b = 0, unsigned long c = 0, - unsigned long d = 0, unsigned long e = 0); - bool bitflag(int32_t flags, int32_t num); - - const char * parse_options(int argc, const char * const * const argv, RunTimeEnvironment::Options & opts); - -} // namespace proxy - -using std::cout; -using std::cerr; -using std::endl; - -#define UNIT_TEST(func,pointsInPart,pointsInTotal,timeout) \ - namespace proxy_test { \ - void func(util::pipestream & ___monad_checkstream___); \ - proxy::add_unit_test \ - func##_adder(#func, func, pointsInPart, \ - pointsInTotal, timeout, false); \ - } \ - void proxy_test::func(util::pipestream & ___monad_checkstream___) - -#define VALGRIND_TEST(func,pointsInPart,pointsInTotal,timeout) \ - namespace proxy_test { \ - void func(util::pipestream & ___monad_checkstream___); \ - proxy::add_unit_test \ - func##_adder(#func, func, pointsInPart, \ - pointsInTotal, timeout, true); \ - } \ - void proxy_test::func(util::pipestream & ___monad_checkstream___) - -#define HELPER_TEST(func, ...) \ - namespace proxy_test { \ - void func(util::pipestream & ___monad_checkstream___, __VA_ARGS__); \ - } \ - void proxy_test::func(util::pipestream & ___monad_checkstream___, __VA_ARGS__) - -#define CALL_HELPER(func, ...) \ - do { \ - func(___monad_checkstream___, __VA_ARGS__); \ - } while (0) - -#define DECLARE_OUTPUT_CHECK(func) \ - bool ___monad_output_check_##func(const std::string & output, const std::string & expected); - -#define OUTPUT_CHECK(func) \ - bool ___monad_output_check_##func(const std::string & output, const std::string & expected); \ - proxy::add_output_check \ - ___monad_output_check_##func##_adder(#func, ___monad_output_check_##func); \ - bool ___monad_output_check_##func(const std::string & output, const std::string & expected) - -#define STRINGIFY1(p) #p -#define STR(p) STRINGIFY1(p) - -#define FAIL(error) throw proxy::Failure(__FILE__, __LINE__, (error)) - -#define PASS return; - -#define ASSERT(expr) \ - do { \ - if (!(expr)) \ - FAIL("Assertion (" #expr ") failed"); \ - } while (0) - -namespace proxy { -template <typename T, typename K> -inline std::string assert_equals_help(const T & expected, const K & actual, const char * expstr, const char * actstr) -{ - std::stringstream ss; - if (actual != expected) - { - ss << "[" << actstr << " => " << actual << "] != [" << expstr << " => " << expected << "]"; - return ss.str(); - } - return monad_shared::unit_test_result::pass_string; -} -} - -#define ASSERT_EQUALS(expected, actual) \ - do { \ - string errormsg = proxy::assert_equals_help(expected, actual, #expected, #actual); \ - if (errormsg != monad_shared::unit_test_result::pass_string) \ - FAIL(errormsg); \ - } while (0) - -namespace proxy { -template <typename S> -inline void assert_output_impl(util::pipestream & checkstream, output_check checkFunc, const char * checkFuncName, const S & str) -{ - if (checkFuncName == NULL) checkFunc("", ""); // Should never occur. Used to avoid unused variable warnings - checkstream << checkFuncName << str; -} -} - -#define ASSERT_OUTPUT(checkFunc, str) \ - proxy::assert_output_impl(___monad_checkstream___, ___monad_output_check_##checkFunc, #checkFunc, str) - -enum proxy_runtime_t -{ - CONSTANT_TIME = 0, - LOGN_TIME, - N_TIME, - NLOGN_TIME, -// NROOTN_TIME, - N2_TIME, - N3_TIME, - INFINITE_TIME, - TIME_COUNT -}; - -namespace proxy -{ - typedef double (*runtime_ratio_func)(size_t, size_t); - extern runtime_ratio_func runtime_ratio[TIME_COUNT]; - extern const char * runtime_str[TIME_COUNT]; - - struct TimeIterationsData - { - double timePerCall; - size_t iterations; - uint64_t totalTime; - }; - - template <typename Generator, typename Timer, typename Cleaner> TimeIterationsData timeIterationsImpl(Generator gen, Timer timeFunctor, Cleaner cleanupFunc, size_t input_size); - template <typename Generator, typename Timer, typename Cleaner> TimeIterationsData timeIterations (Generator gen, Timer timeFunctor, Cleaner cleanupFunc, size_t input_size); - template <typename GenResult, typename GenArg, typename Timer, typename Cleaner> TimeIterationsData timeIterations (GenResult (*gen)(GenArg), Timer timeFunctor, Cleaner cleanupFunc, size_t input_size); - - template <typename Generator, typename Timer, typename Cleaner> - bool assert_time_impl(Generator gen, Timer functor, Cleaner cleanupFunc, proxy_runtime_t expectedTime, size_t size1 = 100, size_t size2 = 400); - - struct nop - { - template <typename T> - void operator()(const T & t) { } - }; -} - -#define ASSERT_TIME3(gen, functor, expectedTime) \ - do { \ - if (proxy::assert_time_impl(gen, functor, proxy::nop(), expectedTime)) \ - FAIL(string("Runtime was larger than ") + proxy::runtime_str[expectedTime]); \ - } while(0) - -#define ASSERT_TIME4(gen, functor, cleanupFunc, expectedTime) \ - do { \ - if (proxy::assert_time_impl(gen, functor, cleanupFunc, expectedTime)) \ - FAIL(string("Runtime was larger than ") + proxy::runtime_str[expectedTime]); \ - } while(0) - -#define ASSERT_TIME5(gen, functor, expectedTime, size1, size2) \ - do { \ - if (proxy::assert_time_impl(gen, functor, proxy::nop(), expectedTime, size1, size2)) \ - FAIL(string("Runtime was larger than ") + proxy::runtime_str[expectedTime]); \ - } while(0) - -#define ASSERT_TIME6(gen, functor, cleanupFunc, expectedTime, size1, size2) \ - do { \ - if (proxy::assert_time_impl(gen, functor, cleanupFunc, expectedTime, size1, size2)) \ - FAIL(string("Runtime was larger than ") + proxy::runtime_str[expectedTime]); \ - } while(0) - -// Crazy hack for overloading! -// Arg counting from: -// http://cplusplus.co.il/2010/07/17/variadic-macro-to-count-number-of-arguments/ -// Overloading tips: -// http://stackoverflow.com/questions/3046889/optional-parameters-with-c-macros -#define ASSERT_TIME_SEVENTH_ARG(a, b, c, d, e, f, g, ...) g - -#define ASSERT_TIME(...) \ - ASSERT_TIME_SEVENTH_ARG(__VA_ARGS__, ASSERT_TIME6, ASSERT_TIME5, ASSERT_TIME4, ASSERT_TIME3, 0, 0) (__VA_ARGS__) - -namespace proxy { - -template <typename Generator, typename Timer, typename Cleaner> -TimeIterationsData timeIterations(Generator gen, Timer timeFunctor, Cleaner cleanupFunc, size_t input_size) -{ - return timeIterationsImpl( - bind1st(mem_fun(&Generator::operator()), &gen), - timeFunctor, - cleanupFunc, - input_size); -} - -template <typename GenResult, typename GenArg, typename Timer, typename Cleaner> -TimeIterationsData timeIterations(GenResult (*gen)(GenArg), Timer timeFunctor, Cleaner cleanupFunc, size_t input_size) -{ - return timeIterationsImpl(ptr_fun(gen), timeFunctor, cleanupFunc, input_size); -} - -template <typename Generator, typename Timer, typename Cleaner> -TimeIterationsData timeIterationsImpl(Generator gen, Timer timeFunctor, Cleaner cleanupFunc, size_t input_size) -{ - const uint64_t min_time = 1000000; // in microseconds - const size_t max_gen_iterations = 1000000; - std::vector<typename Generator::result_type *> inputs; - inputs.reserve(2000); // arbitrary, guess at how big it will be - - // Using pointers here allows us to avoid copying if the compiler supports copy elision - // Since we're intentionally using large inputs, this could potentially have a significant effect on speed - // We're also going to do something else weird here. Instead of generating a fixed number of inputs, we're - // going to generate inputs for a fixed time. - size_t max_iterations = 0; - for (uint64_t genstart = util::process_clock(); max_iterations < max_gen_iterations && util::process_clock() - genstart < min_time; max_iterations++) - inputs.push_back(new typename Generator::result_type(gen(input_size))); - - typename Generator::result_type warmup_temp = gen(1); - timeFunctor(warmup_temp); // Warm up time functor (i.e. initialize statics) - - size_t succeeded_iterations; - uint64_t starttime = util::process_clock(); - for (succeeded_iterations = 0; succeeded_iterations < max_iterations && util::process_clock() - starttime < min_time;) - for (uint32_t i = 0; i < 10 && succeeded_iterations < max_iterations; i++, succeeded_iterations++) - timeFunctor(*inputs[succeeded_iterations]); - uint64_t endtime = util::process_clock(); - - for (size_t i = 0; i < max_iterations; i++) - { - cleanupFunc(*inputs[i]); - delete inputs[i]; - } - cleanupFunc(warmup_temp); - - TimeIterationsData result; - result.timePerCall = static_cast<double>(endtime - starttime) / succeeded_iterations; - result.iterations = succeeded_iterations; - result.totalTime = endtime - starttime; - return result; -} - -inline void timeIterationsOutput(size_t size, const TimeIterationsData & data) -{ - std::cout << "Input size " << size << ": " - << data.iterations << " iterations in " << data.totalTime/1000 << " ms " - << "for an average of " << data.timePerCall << " us per call" << endl; -} - -template <typename Generator, typename Timer, typename Cleaner> -bool assert_time_impl(Generator gen, Timer functor, Cleaner cleanupMem, proxy_runtime_t expectedTime, size_t size1, size_t size2) -{ - TimeIterationsData diff0 = timeIterations(gen, functor, cleanupMem, 1); - TimeIterationsData diff1 = timeIterations(gen, functor, cleanupMem, size1); - TimeIterationsData diff2 = timeIterations(gen, functor, cleanupMem, size2); - timeIterationsOutput( 1, diff0); - timeIterationsOutput(size1, diff1); - timeIterationsOutput(size2, diff2); - double ratio = (diff2.timePerCall - diff0.timePerCall) / (diff1.timePerCall - diff0.timePerCall); - - double expected_ratio = proxy::runtime_ratio[expectedTime](size1, size2); - double toohigh_ratio = proxy::runtime_ratio[expectedTime + 1](size1, size2); - double diffFromExpected = fabs(ratio - expected_ratio); - double diffFromWrong = fabs(ratio - toohigh_ratio); - - std::cout << "Actual ratio: " << ratio << std::endl; - std::cout << "Expected ratio: " << expected_ratio << std::endl; - std::cout << "Wrong/high ratio: " << toohigh_ratio << std::endl; - std::cout << "Diff from expected: " << diffFromExpected << std::endl; - std::cout << "Diff from wrong: " << diffFromWrong << std::endl; - -#if 0 // This does not seem to be important. A sample of two iterations seems to work. - const size_t min_iters = 100; - if (diff0.iterations < min_iters || diff1.iterations < min_iters || diff2.iterations < min_iters) - { - std::cout << "Too few iterations: Code was too slow to be able to judge runtime accurately" << std::endl; - return true; - } -#endif - - return (diffFromWrong < diffFromExpected); -} - -inline int32_t bitflags(unsigned long a, unsigned long b, unsigned long c, - unsigned long d, unsigned long e) -{ - return ((int)(a != 0)) | (((int)(b != 0)) << 1) | - (((int)(c != 0)) << 2) | (((int)(d != 0)) << 3) | - (((int)(e != 0)) << 4) ; -} - -inline bool bitflag(int32_t flags, int32_t num) -{ - return (flags & (1 << num)) != 0; -} - -} - -DECLARE_OUTPUT_CHECK(equals); -DECLARE_OUTPUT_CHECK(contains); -DECLARE_OUTPUT_CHECK(not_contains); - -#endif diff --git a/quotes.txt b/quotes.txt deleted file mode 100644 index 68589e4..0000000 --- a/quotes.txt +++ /dev/null @@ -1,58 +0,0 @@ -"That's legit as shit." ~ Rick Barber -"The cheating sheet is key to success in CS 412 course." ~ CS 412 TA -"Your job is not just what you're doing; it should be preparing you for what you want to do." ~ Michael Lopp -"One day I will shoot you with this bullet. Can you still say that you love me?" ~ Re-l Mayer -"I didn't say I wanted to die in a blender! I said I wanted to be in a blender!" ~ Kyle Johnson -"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." ~ Edsger Dijkstra -"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Code for readability." ~ John Woods -"The primary purpose of the DATA statement is to give names to constants; instead of referring to pi as 3.141592653589793 at every appearance, the variable PI can be given that value with a DATA statement and used instead of the longer form of the constant. This also simplifies modifying the program, should the value of pi change." ~ FORTRAN manual for Xerox computers -"Any sufficiently advanced bug is indistinguishable from a feature." ~ Rich Kulawiec -"Worry loudly now or scream louder later." ~ Michael Lopp -"If you think you can do it all, you're thinking too small." ~ Michael Lopp -"When you say 'You suck', I think 'I win'." ~ Michael Lopp -"Honestly, if you don't fit in, then you're probably doing the right thing." ~ LIGHTS -"It should be noted that no ethically-trained software engineer would ever consent to write a DestroyBaghdad procedure. Basic professional ethics would instead require him to write a DestroyCity procedure, to which Baghdad could be given as a parameter." ~ Nathaniel Borenstein -"Simplicity and elegance are unpopular because thy require hard work and discipline to achieve and education to be appreciated." ~ Edsger Dijkstra -"I love deadlines. I like the whooshing sound they make as they fly by." ~ Douglas Adams -"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." ~ Brian Kernighan -"The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time." ~ Tom Cargill -"It always takes longer than you expect, even when you take into account Hofstadter's Law." ~ Hofstadter's Law -"The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents." ~ Nathaniel Borenstein -"Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away." ~ Antoine de Saint-Exupery -"Even if by chance this world should end tomorrow, if it's together with you, would 'I'm okay with that too' be the cool attitude you'd take?" ~ Makino Yui -"I just don't trust easily, and for good reasons... which are my own." ~ Carth Onasi -"You think the sky is like a big big plate." ~ Prof. Jiawei Han -"You look at their elbows, they actually have many good theoretical elbows." ~ Prof. Jiawei Han -"If you don't hand in the next homework, you might miss some points" ~ Prof. Jiawei Han -"I would build pyramids, if I were Pharoah" ~ Kyle Johnson -"Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves." ~ Alan Kay -"Microsoft has a new version out, Windows XP, which according to everybody is the 'most reliable Windows ever.' To me, this is like saying that asparagus is 'the most articulate vegetable ever.'" ~ Dave Barry -"The most amazing achievement of the computer software industry is its continuing cancellation of the steady and staggering gains made by the computer hardware industry." ~ Henry Petroski -"There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies." ~ C.A.R. Hoare -"There's an old story about the person who wished his computer were as easy to use as his telephone. That wish has come true, since I no longer know how to use my telephone." ~ Bjarne Stroustrup -"The trouble with programmers is that you can never tell what a programmer is doing until it's too late." ~ Seymour Cray -"Measuring programming progress by lines of code is like measuring aircraft building progress by weight." ~ Bill Gates -"First, solve the problem. Then, write the code." ~ John Johnson -"Optimism is an occupational hazard of programming; feedback is the treatment." ~ Kent Beck -"To iterate is human, to recurse divine." ~ L. Peter Deutsch -"Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration." ~ Stan Kelly-Bootle -"I think Microsoft named .Net so it wouldn't show up in a Unix directory listing." ~ Oktal -"C++ : Where friends have access to your private members." ~ Gavin Russell Baker -"Java is, in many ways, C++–." ~ Michael Feldman -"If debugging is the process of removing bugs, then programming must be the process of putting them in." ~ Edsger W. Dijkstra -"A computer lets you make more mistakes faster than any invention in human history–with the possible exceptions of handguns and tequila." ~ Mitch Radcliffe -"A computer will do what you tell it to do, but that may be much different from what you had in mind" ~ Joseph Weizenbaum -"Computers are like Old Testament gods; lots of rules and no mercy." ~ Joseph Campbell -"Programs must be written for people to read, and only incidentally for machines to execute." ~ Abelson and Sussman -"If you just rely on one model, you tend to amputate reality to make it fit your model." ~ David Brooks -"Don't worry about people stealing your ideas. If your ideas are any good, you'll have to ram them down people's throats." ~ Howard H. Aiken -"Eighty percent of success is showing up." ~ Woody Allen -"If you're not failing every now and again, it's a sign you're not doing anything very innovative." ~ Woody Allen -"We are what we repeatedly do. Excellence, then, is not an act, but a habit." ~ Aristotle -"The most exciting phrase to hear in science - the one that heralds new discoveries - is not 'Eureka!' but 'That's funny....'" ~ Isaac Asimov -"On two occasions, I have been asked [by members of Parliament], 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able to rightly apprehend the kind of confusion of ideas that could provoke such a question." ~ Charles Babbage -"The cheapest, fastest, and most reliable components of a computer system are those that aren't there." ~ Gordon Bell -"More than the act of testing, the act of designing tests is one of the best bug preventers known. The thinking that must be done to create a useful test can discover and eliminate bugs before they are coded - indeed, test-design thinking can discover and eliminate bugs at every stage in the creation of software, from conception to specification, to design, coding and the rest." ~ Boris Bezier -"We don't have time to stop for gas, we're already late." ~ Mike Cleron -"I hear and I forget; I see and I remember; I do and I understand." ~ Confucius -"Doing more things faster is no substitute for doing the right things." ~ Stephen R. Covey diff --git a/random.h b/random.h deleted file mode 100644 index be927fd..0000000 --- a/random.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef UTIL_RANDOM_H -#define UTIL_RANDOM_H - -#include <stdint.h> -#include <sys/time.h> -#include <time.h> - -// Taken from -// http://software.intel.com/en-us/articles/fast-random-number-generator-on-the-intel-pentiumr-4-processor/ - -namespace util -{ - -namespace internal -{ - -inline uint32_t time_seed() -{ - timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec ^ tv.tv_usec; -} - -inline int_fast16_t rand(uint32_t setseed) -{ - static uint32_t mySeed = (uint32_t)(-1); - if (setseed != (uint32_t)(-2)) - mySeed = setseed; - if (mySeed == (uint32_t)(-1)) - mySeed = time_seed(); - mySeed = 214013 * mySeed + 2531011; - return (mySeed >> 16) & 0x7FFF; -} - -} - -inline int_fast16_t urand() -{ - return internal::rand(-2); -} - -inline int_fast16_t urandn(int32_t n) -{ - return urand() % n; -} - -inline void usrand(uint64_t seed) -{ - internal::rand(seed); -} - -class Random -{ - private: - static uint32_t auto_seed(uint32_t setSeed); - uint32_t mySeed; - - public: - Random(); - Random(uint64_t seed); - - int_fast16_t rand(); - int_fast16_t rand(int32_t n); - int_fast16_t operator()(); - int_fast16_t operator()(int32_t n); - void srand(uint64_t seed); -}; - -inline uint32_t Random::auto_seed(uint32_t setSeed) -{ - static uint32_t internalSeed = 0; - if (setSeed == 0) - return internalSeed; - - uint32_t result = internalSeed; - internalSeed = setSeed; - return result; -} - -inline Random::Random() -{ - if (auto_seed(0) == 0) - auto_seed(internal::time_seed()); - mySeed = auto_seed(0); - auto_seed((rand() << 16) ^ (rand()) ^ internal::time_seed()); -} - -inline Random::Random(uint64_t seed) - : mySeed(seed) { } - -inline void Random::srand(uint64_t seed) -{ - mySeed = seed; -} - -inline int_fast16_t Random::rand() -{ - mySeed = 214013 * mySeed + 2531011; - return (mySeed >> 16) & 0x7FFF; -} - -inline int_fast16_t Random::rand(int32_t n) -{ - return rand() % n; -} - -inline int_fast16_t Random::operator()() -{ - return rand(); -} - -inline int_fast16_t Random::operator()(int32_t n) -{ - return rand(n); -} - -} // namespace util - -#endif // UTIL_RANDOM_H diff --git a/update.sh b/update.sh index 55391d1..747f6c9 100755 --- a/update.sh +++ b/update.sh @@ -1,38 +1,32 @@ #!/bin/bash # Clean monad_dev -cd ../monad_dev -make clean -make -cd ../monad +mkdir source # Monad Binary cp ../monad_dev/monad . -cp ../monad_dev/ccmonad . -cp ../monad_dev/.monadid . -cp ../monad_dev/valgrind.h . -cp ../monad_dev/memcheck.h . -cp ../monad_dev/Makefile.proxy . -cp ../monad_dev/config.ini . -cp ../monad_dev/memcheck.h . -cp ../monad_dev/monad_shared.cpp . -cp ../monad_dev/monad_shared.h . -cp ../monad_dev/pipestream.cpp . -cp ../monad_dev/pipestream.h . -cp ../monad_dev/proxy.cpp . -cp ../monad_dev/proxy.h . -cp ../monad_dev/util.cpp . -cp ../monad_dev/util.h . -cp ../monad_dev/valgrind.h . +cp ../monad_dev/source/memcheck.h . +cp ../monad_dev/source/Makefile.proxy . +cp ../monad_dev/source/config.ini . +cp ../monad_dev/source/memcheck.h . +cp ../monad_dev/source/monad_shared.cpp . +cp ../monad_dev/source/monad_shared.h . +cp ../monad_dev/source/pipestream.cpp . +cp ../monad_dev/source/pipestream.h . +cp ../monad_dev/source/proxy.cpp . +cp ../monad_dev/source/proxy.h . +cp ../monad_dev/source/util.cpp . +cp ../monad_dev/source/util.h . +cp ../monad_dev/source/valgrind.h . # Monad Source -cp ../monad_dev/Makefile . -cp ../monad_dev/LICENSE.txt . -cp ../monad_dev/monad.h . -cp ../monad_dev/monad.cpp . -cp ../monad_dev/quotes.txt . -cp ../monad_dev/random.h . -cp ../monad_dev/README.txt . -cp ../monad_dev/README_config.txt . -cp ../monad_dev/README_tests.txt . -cp ../monad_dev/help.cpp . -cp ../monad_dev/ccmonad.cpp . +cp ../monad_dev/source/Makefile . +cp ../monad_dev/source/LICENSE.txt . +cp ../monad_dev/source/monad.h . +cp ../monad_dev/source/monad.cpp . +cp ../monad_dev/source/quotes.txt . +cp ../monad_dev/source/random.h . +cp ../monad_dev/source/README.txt . +cp ../monad_dev/source/README_config.txt . +cp ../monad_dev/source/README_tests.txt . +cp ../monad_dev/source/help.cpp . +cp ../monad_dev/source/ccmonad.cpp . diff --git a/util.cpp b/util.cpp deleted file mode 100644 index c7887dd..0000000 --- a/util.cpp +++ /dev/null @@ -1,1268 +0,0 @@ -// CS 225 util.h -// Created Spring 2011 by Jack Toole - -#include <ctype.h> -#include <dirent.h> -#include <errno.h> -#include <fcntl.h> -#include <signal.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <unistd.h> -#include <iostream> -#include "util.h" - -extern char ** environ; // man 7 environ - -namespace util -{ - -namespace internal -{ -const char * error_prefix = ""; - -template<typename StrType> -void exit_if_error_output(const char * file, int32_t line, StrType message) -{ - if (util::internal::error_prefix != NULL) - cerr << util::internal::error_prefix; - cerr << file << ":" << line << ": " << message; - if (errno != 0) - cerr << ": " << strerror(errno); - cerr << endl; - exit(-1); -} - -} - -void SET_ERROR_MESSAGE(const char * message) -{ - internal::error_prefix = message; -} - -namespace internal -{ -namespace exec -{ - -char * allocateCstr(const string & str) -{ - char * cstr = new char[str.size() + 1]; - str.copy(cstr, str.size()); - cstr[str.size()] = '\0'; - return cstr; -} - -pair<int, int> getFdsFromStream(const ostream * stream) -{ - int redirect_fd; - int outpipe_fd = -1; - - if (stream == NULL) - redirect_fd = -1; - else if (stream == &cout || stream == &cerr) // we don't handle cerr right now; it is just left unpiped - redirect_fd = STDOUT_FILENO; - else - { - int pipe_fds[2]; - EXIT_IF_ERROR(pipe(pipe_fds) != 0); - redirect_fd = pipe_fds[1]; - outpipe_fd = pipe_fds[0]; - } - - return make_pair(redirect_fd, outpipe_fd); -} - -struct exec_timers -{ - struct itimerval remaining_real; - struct itimerval remaining_virtual; - struct itimerval remaining_prof; - bool supports_virtual; - bool supports_prof; - exec_timers() : supports_virtual(true), supports_prof(true) { } -}; - -exec_timers get_exec_timers() -{ - exec_timers result; - - EXIT_IF_ERROR(getitimer(ITIMER_REAL, &result.remaining_real)); - - if (getitimer(ITIMER_VIRTUAL, &result.remaining_virtual) != 0) - { - if (errno == EINVAL) - { - result.supports_virtual = false; - errno = 0; - } - else - exit_if_error_output(__FILE__, __LINE__, "getitimer(ITIMER_VIRTUAL) failed"); - } - - if (getitimer(ITIMER_PROF, &result.remaining_prof) != 0) - { - if (errno == EINVAL) - { - result.supports_prof = false; - errno = 0; - } - else - exit_if_error_output(__FILE__, __LINE__, "getitimer(ITIMER_PROF) failed"); - } - - return result; -} - -void set_exec_timers(const exec_timers & timers) -{ - EXIT_IF_ERROR(setitimer(ITIMER_REAL, &timers.remaining_real, NULL)); - if (timers.supports_virtual) EXIT_IF_ERROR(setitimer(ITIMER_VIRTUAL, &timers.remaining_virtual, NULL)); - if (timers.supports_prof) EXIT_IF_ERROR(setitimer(ITIMER_PROF, &timers.remaining_prof, NULL)); -} - -void redirect_to_fd(const int redirect_fd) -{ - if (redirect_fd == -1) - { - int devnull_fd = open("/dev/null", O_WRONLY | O_NONBLOCK); - close(STDOUT_FILENO); - close(STDERR_FILENO); - dup2(devnull_fd, STDOUT_FILENO); - dup2(devnull_fd, STDERR_FILENO); - close(devnull_fd); - } - else if (redirect_fd != STDOUT_FILENO) - { - close(STDOUT_FILENO); - close(STDERR_FILENO); - dup2(redirect_fd, STDOUT_FILENO); - dup2(redirect_fd, STDERR_FILENO); - close(redirect_fd); - } -} - -char ** cstr_array_from_vector_string(const string & command, const vector<string> & args) -{ - // TODO (toole1): check this doesn't cause a memleak - char ** args_cstr = new char*[args.size() + 2]; - args_cstr[0] = allocateCstr(command); - for (size_t i = 0; i < args.size(); i++) - args_cstr[i + 1] = allocateCstr(args[i]); - args_cstr[args.size() + 1] = NULL; - return args_cstr; -} - -} // namespace exec -} // namespace internal - -// heavily refactored, but originally from: -// http://stackoverflow.com/questions/2180079/how-can-i-copy-a-file-on-unix-using-c -int8_t exec(const string & command, const vector<string> & args, ostream * output) -{ - using namespace internal; - using namespace internal::exec; - - pair<int, int> fds = getFdsFromStream(output); - int redirect_fd = fds.first; - int outpipe_fd = fds.second; - - exec_timers timers = get_exec_timers(); - - pid_t pid = fork(); - EXIT_IF_ERROR(pid < 0); - if (pid == 0) - { - set_exec_timers(timers); - redirect_to_fd(redirect_fd); - if (outpipe_fd != -1) - close(outpipe_fd); - - // Sanitize environment - char path[] = "PATH=/bin/:/usr/bin:/usr/local/bin"; - // Turn off glibc errors default write-to-terminal behaviour, because - // it does not get caught by stderr. This instead results in an abort. - char redirect_glibc[] = "LIBC_FATAL_STDERR_=1"; - char * newenv[] = { path, redirect_glibc, NULL }; - environ = newenv; - - char ** args_cstr = cstr_array_from_vector_string(command, args); - - // Swap out child process image with the command, searching - // in the specified path - execvp(command.c_str(), args_cstr); - - // An error occured - cerr << "exec(" << '\"' << command << '\"'; - for (size_t i = 0; i < args.size(); i++) - cerr << ", \"" << args[i] << "\""; - cerr << ") failed: " << strerror(errno) << endl; - exit(-1); - } - else - { - // Take the output of the pipe and put it into the *output stream - if (outpipe_fd != -1) - { - EXIT_IF_ERROR(output == NULL); - close(redirect_fd); - - vector<char> buffer(1024); - ssize_t char_read_count; - do - { - errno = 0; - char_read_count = ::read(outpipe_fd, &buffer[0], buffer.size() - 1); - - if (char_read_count < 0 && errno == EINTR) continue; - EXIT_IF_ERROR(char_read_count < 0); - EXIT_IF_ERROR(static_cast<size_t>(char_read_count) + 1 > buffer.size()); - - buffer[char_read_count] = '\0'; - *output << &buffer[0]; - - } while (char_read_count > 0); - } - - int childExitStatus; - /* parent - wait for child - this has all error handling, you - * could just call wait() as long as you are only expecting to - * have one child process at a time. - */ - pid_t ws = waitpid( pid, &childExitStatus, 0); - EXIT_IF_ERROR(ws == -1); - - if (WIFEXITED(childExitStatus)) /* exit code in childExitStatus */ - { - int8_t status = WEXITSTATUS(childExitStatus); /* zero is normal exit */ - /* handle non-zero as you wish */ - return status; - } - else if (WIFSIGNALED(childExitStatus)) /* killed */ - { - // No idea why I'm doing this anymore... if it segfaults, you do too?? - kill(getpid(), WTERMSIG(childExitStatus)); - return -1; - } - else if (WIFSTOPPED(childExitStatus)) /* stopped */ - { - //cout << "exec error: " << __LINE__ << endl; - return -1; - } - else - EXIT_IF_ERROR(true); - exit(-1); - } -} - -// TODO (toole1) this is a total hack, should use execvp like exec() below -// originally from: -// http://stackoverflow.com/questions/2180079/how-can-i-copy-a-file-on-unix-using-c -int8_t exec(int redirect_fd, const string & command, const vector<string> & args) -{ - using namespace internal::exec; - - // For debugging: -#if 0 - cerr << "exec(" << '\"' << command << '\"'; - for (size_t i = 0; i < args.size(); i++) - cerr << ", \"" << args[i] << "\""; - cerr << ")" << endl; -#endif - - // avoid self destruction errors from closing then trying to duplicate output - // you can't redirect to what's already there - if (redirect_fd == STDOUT_FILENO || redirect_fd == STDERR_FILENO) - redirect_fd = STDOUT_FILENO; - - // Save timer values :) - // These are preserved across the parent, but not inherited by the child - // let's change that - struct itimerval remaining_real; - struct itimerval remaining_virtual; - struct itimerval remaining_prof; - bool supports_virtual = true; - bool supports_prof = true; - EXIT_IF_ERROR(getitimer(ITIMER_REAL, &remaining_real)); - if (getitimer(ITIMER_VIRTUAL, &remaining_virtual) != 0) - { - if (errno == EINVAL) - { - supports_virtual = false; - errno = 0; - } - else - internal::exit_if_error_output(__FILE__, __LINE__, "getitimer(ITIMER_VIRTUAL) failed"); - } - if (getitimer(ITIMER_PROF, &remaining_prof) != 0) - { - if (errno == EINVAL) - { - supports_prof = false; - errno = 0; - } - else - internal::exit_if_error_output(__FILE__, __LINE__, "getitimer(ITIMER_PROF) failed"); - } - - pid_t pid = fork(); - - if (pid == 0) /* child */ - { - - // Restore timers - EXIT_IF_ERROR(setitimer(ITIMER_REAL, &remaining_real, NULL)); - if (supports_virtual) EXIT_IF_ERROR(setitimer(ITIMER_VIRTUAL, &remaining_virtual, NULL)); - if (supports_prof) EXIT_IF_ERROR(setitimer(ITIMER_PROF, &remaining_prof, NULL)); - - if (redirect_fd == -1) - { - int devnull_fd = open("/dev/null", O_WRONLY | O_NONBLOCK); - close(STDOUT_FILENO); - close(STDERR_FILENO); - dup2(devnull_fd, STDOUT_FILENO); - dup2(devnull_fd, STDERR_FILENO); - close(devnull_fd); - } - else if (redirect_fd != STDOUT_FILENO) - { - close(STDOUT_FILENO); - close(STDERR_FILENO); - dup2(redirect_fd, STDOUT_FILENO); - dup2(redirect_fd, STDERR_FILENO); - } - - // Sanitize the environment -#if 1 //!! hack! - char path[] = "PATH=/bin/:/usr/bin:/usr/local/bin"; - // Turn off glibc errors default write-to-terminal behaviour, because - // it does not get caught by stderr. This instead results in an abort. - char redirect_glibc[] = "LIBC_FATAL_STDERR_=1"; - char * newenv[] = { path, redirect_glibc, NULL }; - //char * newenv[] = { path, NULL }; - environ = newenv; -#endif - - // TODO (toole1): check this doesn't cause a memleak - char ** args_cstr = new char*[args.size() + 2]; - args_cstr[0] = allocateCstr(command); - for (size_t i = 0; i < args.size(); i++) - args_cstr[i + 1] = allocateCstr(args[i]); - args_cstr[args.size() + 1] = NULL; - - // Swap out child process image with the command, searching - // in the specified path - execvp(command.c_str(), args_cstr); - - // An error occured - cerr << "exec(" << '\"' << command << '\"'; - for (size_t i = 0; i < args.size(); i++) - cerr << ", \"" << args[i] << "\""; - cerr << ") failed: " << strerror(errno) << endl; - exit(-1); - } - else if (pid < 0) - { - /* error - couldn't start process - you decide how to handle */ - return -1; - } - else - { - int childExitStatus; - /* parent - wait for child - this has all error handling, you - * could just call wait() as long as you are only expecting to - * have one child process at a time. - */ - pid_t ws = waitpid( pid, &childExitStatus, 0); - if (ws == -1) - { /* error - handle as you wish */ - //cout << "exec error: " << __LINE__ << endl; - return -1; - } - - if (WIFEXITED(childExitStatus)) /* exit code in childExitStatus */ - { - int8_t status = WEXITSTATUS(childExitStatus); /* zero is normal exit */ - /* handle non-zero as you wish */ - return status; - } - else if (WIFSIGNALED(childExitStatus)) /* killed */ - { - kill(getpid(), WTERMSIG(childExitStatus)); - return -1; - } - else if (WIFSTOPPED(childExitStatus)) /* stopped */ - { - //cout << "exec error: " << __LINE__ << endl; - return -1; - } - else - return -1; - } -} - - -// originally from stackoverflow.com user plinth -// http://stackoverflow.com/questions/2180079/how-can-i-copy-a-file-on-unix-using-c -// Modified by Jack Toole -int8_t exec(int redirect_fd, const char * command, - const char * arg1, - const char * arg2, - const char * arg3, - const char * arg4, - const char * arg5, - const char * arg6) -{ - int childExitStatus; - pid_t pid; - - const char * args[] = {arg1, arg2, arg3, arg4, arg5, arg6}; - const size_t args_count = (sizeof args) / (sizeof args[0]); - - // shift all nulls to end - size_t first_null = 0; - for (size_t i = 0; i < args_count; i++) - if (args[i] != NULL) - swap(args[i], args[first_null++]); - - // For debugging: -#if 0 - cerr << "exec(" << '\"' << command << '\"'; - for (size_t i = 0; i < args_count; i++) - if (args[i] != NULL) cerr << ", \"" << args[i] << "\""; - cerr << ")" << endl; -#endif - - // avoid self destruction errors from closing then trying to duplicate output - // you can't redirect to what's already there - if (redirect_fd == STDOUT_FILENO || redirect_fd == STDERR_FILENO) - redirect_fd = STDOUT_FILENO; - - // Save timer values :) - // These are preserved across the parent, but not inherited by the child - // let's change that - struct itimerval remaining_real; - struct itimerval remaining_virtual; - struct itimerval remaining_prof; - bool supports_virtual = true; - bool supports_prof = true; - EXIT_IF_ERROR(getitimer(ITIMER_REAL, &remaining_real)); - if (getitimer(ITIMER_VIRTUAL, &remaining_virtual) != 0) - { - if (errno == EINVAL) - { - supports_virtual = false; - errno = 0; - } - else - internal::exit_if_error_output(__FILE__, __LINE__, "getitimer(ITIMER_VIRTUAL) failed"); - } - if (getitimer(ITIMER_PROF, &remaining_prof) != 0) - { - if (errno == EINVAL) - { - supports_prof = false; - errno = 0; - } - else - internal::exit_if_error_output(__FILE__, __LINE__, "getitimer(ITIMER_PROF) failed"); - } - - pid = fork(); - - if (pid == 0) /* child */ - { - - // Restore timers - EXIT_IF_ERROR(setitimer(ITIMER_REAL, &remaining_real, NULL)); - if (supports_virtual) EXIT_IF_ERROR(setitimer(ITIMER_VIRTUAL, &remaining_virtual, NULL)); - if (supports_prof) EXIT_IF_ERROR(setitimer(ITIMER_PROF, &remaining_prof, NULL)); - - if (redirect_fd == -1) - { - int devnull_fd = open("/dev/null", O_WRONLY | O_NONBLOCK); - close(STDOUT_FILENO); - close(STDERR_FILENO); - dup2(devnull_fd, STDOUT_FILENO); - dup2(devnull_fd, STDERR_FILENO); - close(devnull_fd); - } - else if (redirect_fd != STDOUT_FILENO) - { - close(STDOUT_FILENO); - close(STDERR_FILENO); - dup2(redirect_fd, STDOUT_FILENO); - dup2(redirect_fd, STDERR_FILENO); - } - - // Sanitize the environment -#if 1 //!! hack! - char path[] = "PATH=/bin/:/usr/bin:/usr/local/bin"; - // Turn off glibc errors default write-to-terminal behaviour, because - // it does not get caught by stderr. This instead results in an abort. - char redirect_glibc[] = "LIBC_FATAL_STDERR_=1"; - char * newenv[] = { path, redirect_glibc, NULL }; - //char * newenv[] = { path, NULL }; - environ = newenv; -#endif - - // Swap out child process image with the command, searching - // in the specified path - execlp(command, command, args[0], args[1], args[2], args[3], args[4], args[5], NULL); - - // An error occured - cerr << "exec(" << '\"' << command << '\"'; - for (size_t i = 0; i < args_count; i++) - if (args[i] != NULL) cerr << ", \"" << args[i] << "\""; - cerr << ") failed: " << strerror(errno) << endl; - exit(-1); - } - else if (pid < 0) - { - /* error - couldn't start process - you decide how to handle */ - return -1; - } - else - { - /* parent - wait for child - this has all error handling, you - * could just call wait() as long as you are only expecting to - * have one child process at a time. - */ - pid_t ws = waitpid( pid, &childExitStatus, 0); - if (ws == -1) - { /* error - handle as you wish */ - //cout << "exec error: " << __LINE__ << endl; - return -1; - } - - if (WIFEXITED(childExitStatus)) /* exit code in childExitStatus */ - { - int8_t status = WEXITSTATUS(childExitStatus); /* zero is normal exit */ - /* handle non-zero as you wish */ - return status; - } - else if (WIFSIGNALED(childExitStatus)) /* killed */ - { - kill(getpid(), WTERMSIG(childExitStatus)); - return -1; - } - else if (WIFSTOPPED(childExitStatus)) /* stopped */ - { - //cout << "exec error: " << __LINE__ << endl; - return -1; - } - else - return -1; - } -} - -const char * Signal::what() const -{ - const char * desc = strsignal(signum); - return (desc == NULL) ? "Unknown Signal" : desc; -} - - -int chdir(const string & dir) -{ - return ::chdir(dir.c_str()); -} - -void assertExists(const string & path, int exit_code /* = -1 */) -{ - if (!exists(path)) - { - cerr << "Error: " << path << " does not exist." << endl; - exit(exit_code); - } -} - -bool exists(const string & path) -{ - // Try stat-ing it - struct stat st; - if (stat(path.c_str(), &st) != 0) return false; - // Check for read permission - if ((st.st_mode & S_IRUSR) == 0) return false; - - // Check for correct file/directory nature - if (path[path.length()-1] != '/') return S_ISREG(st.st_mode); - - // Otherwise we want a directory - if ((st.st_mode & S_IXUSR) == 0) return false; - return S_ISDIR(st.st_mode); -} - - -mode_t permissions(const string & path) -{ - // Try stat-ing it - struct stat st; - if (stat(path.c_str(), &st) != 0) return -1; - // Check for read permission - if ((st.st_mode & S_IRUSR) == 0) return -1; - - return (st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO)); -} - - -void forceRemoveDir(string dir) -{ - size_t len = dir.length(); - if (dir[len-1] == '/') dir[len-1] = '\0'; - EXIT_IF_ERROR(exec("rm","-rf",dir.c_str()) != 0); - if (dir[len-1] == '\0') dir[len-1] = '/'; -} - - -string getcwdstr() -{ - int len = 256; - char * buffer = new char[len]; - - char * ret = getcwd(&buffer[0], len - 1); - while (ret == NULL && errno == ERANGE) - { - len *= 2; - - delete buffer; - buffer = new char[len]; - - ret = getcwd(&buffer[0], len - 1); - } - - EXIT_IF_ERROR(ret == NULL); - - string cwdstr(buffer); - delete buffer; - - return cwdstr; -} - - -void copyFile(const string & source, const string & dest) -{ - assertExists(source); - vector<string> folders = tokenize(dest, '/'); - string currdir = ""; - for (size_t i = 0; i < folders.size() - 1; i++) - { - currdir += folders[i] + '/'; - if (!exists(currdir)) - exec("mkdir", currdir.c_str()); - } - exec("cp", source.c_str(), dest.c_str()); -} - -void copyFiles(const string & sourceFolder, const string & destFolder, const vector<string> & files) -{ - assertExists(destFolder); - for (size_t i = 0; i < files.size(); i++) - { - string sourceFile = sourceFolder + files[i]; - assertExists(sourceFile); - copyFile(sourceFile, destFolder); - } -} - - -void protectFiles(const string & folder, const vector<string> & files) -{ -#if 0 // (debug) - for (size_t i = 0; i < files.size(); i++) - { - string file = folder + files[i]; - assertExists(file); - - if (chmod(file.c_str(), S_IRUSR) != 0) - { - perror("chmod failed"); - exit(-1); - } - } -#endif -} - -void protectDir(const string & dir) -{ - // (debug) EXIT_IF_ERROR(exec("/bin/chmod", "-R", "ugoa-w", dir.c_str()) != 0); -} - -// Originally from Simon Biber -// http://bytes.com/topic/c/answers/545614-list-files-current-directory -vector<string> get_files_in_dir(const string & dir, bool concatdir /* = true */) -{ - EXIT_IF_ERROR(dir == "" || dir[dir.length()-1] != '/', "Directory name must end in a '/'"); - - vector<string> files; - DIR * dirp = opendir(dir.c_str()); - if (dirp == NULL) return files; - - struct dirent * ent = readdir(dirp); - while (ent != NULL) - { - string file = ent->d_name; - if (file != "." && file != "..") - files.push_back(concatdir ? dir + file : file); - ent = readdir(dirp); - } - - closedir(dirp); - return files; -} - -bool is_symlink(const string & file) -{ - // Try lstat-ing it - struct stat st; - if (lstat(file.c_str(), &st) != 0) return -1; - // Check for read permission - if ((st.st_mode & S_IRUSR) == 0) return false; - - // & with symlink bit - return (S_ISLNK(st.st_mode)) != 0; -} - -string get_symlink_target(const string & symlink) -{ - const size_t buf_size = 4096; - char buf[buf_size+1]; // TODO (toole1): hack-y value - ssize_t len = readlink(symlink.c_str(), buf, buf_size); - EXIT_IF_ERROR(len < 0 || static_cast<size_t>(len) == buf_size, "Error getting target of symlink " + symlink); - buf[len] = '\0'; - return string(buf); -} - -void linkDirs(const string & sourceFolder, const string & destFolder, const vector<string> & dirs) -{ - assertExists(destFolder); - for (size_t i = 0; i < dirs.size(); i++) - { - string source = sourceFolder + dirs[i]; - string target = destFolder + dirs[i]; - - // Check for redundant monad/ directory - // This allows the monad/ dir to be safely renamed - if (replaceFirst(source, "/../monad/","/")) - replaceFirst(target, "/monad/","/"); - - assertExists(destFolder + source + '/'); - - if (symlink(source.c_str(), target.c_str()) != 0) - { - cerr << "symlink failed: " << target << ": "; - perror(NULL); - exit(-1); - } - } -} - - -bool replaceFirst(string & str, const string & toreplace, const string & with) -{ - size_t i = str.find(toreplace); - if (i != string::npos) - { - str.replace(i,toreplace.length(),with); - return true; - } - return false; -} - -size_t replaceAll(string & str, const string & toreplace, const string & with) -{ - size_t i = str.find(toreplace); - size_t count = 0; - - while (i != string::npos) - { - str.replace(i,toreplace.length(),with); - i = str.find(toreplace, i + with.length()); - count++; - } - - return count; -} - -size_t replaceAllInternal(string & str, const string & toreplace, const string & with) -{ - size_t i = str.find(toreplace); - size_t count = 0; - - while ((i != string::npos) && (i != str.length() - toreplace.length())) - { - str.replace(i,toreplace.length(),with); - i = str.find(toreplace, i + with.length()); - count++; - } - - return count; -} - - -size_t findNthLast(const string & str, char c, size_t n) -{ - if (str.length() == 0) return string::npos; - size_t i = str.length() - 1; - - do - { - if (str[i] == c) n--; - if (n == 0) return i; - } while (i-- != 0); - - return string::npos; -} - - -string read_string_from_FILE(FILE * file, size_t max_length /* = -1 */) -{ - vector<char> v; - v.reserve(256); - - while (true) - { - int nextchar = fgetc(file); - if (nextchar == '\0' || nextchar == EOF) - break; - if (v.size() < max_length) - v.push_back(nextchar); - } - - if (v.size() == max_length) - { - v.push_back('.'); - v.push_back('.'); - v.push_back('.'); - } - - v.push_back('\0'); - - return string(&v[0]); -} - -void write_string_to_FILE(FILE * file, const char * str) -{ - fflush(file); - size_t i = 0; - do - { -// cout << (int)str[i] << ' '; - fputc(str[i], file); - - // We use a do-while because we want the \0 to be written to the stream - // for sending multiple strings - } while (str[i++] != 0); - -// cout << endl; - - fflush(file); -} - - - -/** -* -* -**/ - -string readFile(const string & filename) -{ - ifstream file; - file.open(filename.c_str()); - if (!file.good()) - return ""; - - stringbuf linebuf; - file.get(linebuf, '\0'); - linebuf.pubsync(); - return linebuf.str(); -} - - -void readConfig(const string & testsFolder, FileMap & map, const string & discriminator /* = "" */) -{ - string file; - if (testsFolder == "" || testsFolder[testsFolder.length()-1] == '/') - file = testsFolder + "config.ini"; - else - file = testsFolder; - readFileGeneric(file, &map, NULL, discriminator); -} - -void readFile(const string & file, vector<string> & lines) -{ - readFileGeneric(file, NULL, &lines); -} - -void readFileGeneric(const string & filename, FileMap * map, vector<string> * lines, const string & discriminator /* = "" */) -{ - ifstream infile; - istream * fileptr; - if (filename == "/dev/stdin") - fileptr = &cin; - else - { - fileptr = &infile; - infile.open(filename.c_str(), fstream::in); - } - istream & file = *fileptr; - - vector<string> * section = NULL; - if (map != NULL) section = &(*map)[""]; - else section = lines; - - while ((file.good() && file.peek() == '\n') || file.peek() == '\r') - file.get(); // get '\n' - - while (file.good()) - { - // Read a line - A lot of code, I know, right? - stringbuf linebuf; - file.get(linebuf); - while ((file.good() && file.peek() == '\n') || file.peek() == '\r') - file.get(); // get '\n' - linebuf.pubsync(); - string line = linebuf.str(); - int len = line.length(); - if (len == 0) continue; - - if (line[len-1] == '\r') - line.replace(--len,1,""); - - if (len == 0 || line[0] == ';') continue; // skip comments - - if (map != NULL) - { - // Update the section - if (line[0] == '[' && line[len-1] == ']') - { - section = &(*map)[line.substr(1, len - 2)]; - continue; - } - else if (line[0] == '[' || line[len-1] == ']') - { - cout << "config.ini: Format error: " << line << endl; - exit(-1); - } - } - - // Or add the line/file to the section - size_t delim_pos = line.find_first_of("?:"); - if (delim_pos == string::npos || map == NULL) - section->push_back(line); - else if ((line[delim_pos] == ':' && (delim_pos == 0 || discriminator == "")) || - line.compare(0, delim_pos, discriminator) == 0) - section->push_back(line.substr(delim_pos+1, line.size()-delim_pos-1)); - } - - if (filename != "/dev/stdin") - infile.close(); -} - - -OptionsParser::OptionsParser() -{ - valueMap[""] = true; - - valueMap["yes"] = true; - valueMap["no"] = false; - - valueMap["on"] = true; - valueMap["off"] = false; - - valueMap["true"] = true; - valueMap["false"] = false; - - valueMap["1"] = true; - valueMap["0"] = false; -} - -vector<string> OptionsParser::parse(int argc, const char * const * argv) -{ - vector<string> unprocessedArgs; - size_t out_arg_i = 0; - - for (int arg_i = 1; arg_i < argc; arg_i++) - { - string originalCaseArg = argv[arg_i]; - string currarg = toLower(originalCaseArg); - - if (currarg.compare(0, 2, "--") == 0) //long option - { - bool invert = (currarg.compare(2, 2, "no") == 0); - size_t name_i = (invert ? 4 : 2); - size_t equalspos = currarg.find_first_of("=-", name_i); - - string name = currarg.substr(name_i, equalspos - name_i); - string value = (equalspos >= currarg.length()) ? "" : currarg.substr(equalspos); - - optsMap_t::iterator option = optsMap.find(name); - if (option == optsMap.end()) - { - cerr << "Unknown option: " << currarg << endl; - exit(-1); - } - - valueMap_t::iterator valueIt = valueMap.find(value); - if (valueIt == valueMap.end()) - { - cerr << "Unknown value: " << currarg << endl; - exit(-1); - } - - *option->second = valueIt->second ^ invert; - } // "--" - - else if (currarg[0] == '-') //string of single char options - { - for (size_t c = 1; currarg[c] != '\0'; c++) - { - optsMap_t::iterator option = optsMap.find(string(1,currarg[c])); - if (option == optsMap.end()) - { - cerr << "Unknown option: -" << currarg[c] << endl; - exit(-1); - } - *option->second = true; - } - } - - else //positional argument - { - if (out_arg_i < args.size()) - *args[out_arg_i] = originalCaseArg; - else - unprocessedArgs.push_back(originalCaseArg); - out_arg_i++; - } - } - - return unprocessedArgs; -} - -char * processOptions(int argc, char ** argv, OptionsMap & opts, vector<string> & args) -{ - for (int arg_i = 1; arg_i < argc; arg_i++) - { - char * currarg = argv[arg_i]; - - if (strncmp(currarg, "--", 2) == 0) //long option - { - bool value, invert; - size_t string_i; - - if (strncasecmp(currarg+2, "no", 2) == 0) - { - invert = true; - string_i = 4; - } - else - { - invert = false; - string_i = 2; - } - - size_t equals_i = string_i; - while (currarg[equals_i] != '\0' && currarg[equals_i] != '=') - equals_i++; - if (currarg[equals_i] == '=') - currarg[equals_i++] = '\0'; - - OptionsMap::iterator option = opts.find(currarg+string_i); - - if (option == opts.end()) - { - cerr << "Unknown option: " << currarg << endl; - return currarg; - } - - char valuechar = tolower(currarg[equals_i]); - if (valuechar == 'o') valuechar = tolower(currarg[equals_i+1]) + 1; - switch (valuechar) - { - case '\0' : value = true; break; - case 'f'+1 : value = false; break; //off: see 'o' above - case 'n' : value = false; break; - case 'n'+1 : value = true; break; //on: contrast 'n': see 'o' above - case 't' : value = true; break; - case 'y' : value = true; break; - default: - cerr << "Unknown option value: " << currarg << endl; - return currarg; - } - - (*option).second = value ^ invert; - } // "--" - - else if (currarg[0] == '-') //string of single char options - { - for (size_t c = 1; currarg[c] != '\0'; c++) - { - OptionsMap::iterator option = opts.find(string(1,currarg[c])); - if (option == opts.end()) - { - cerr << "Unknown option: -" << currarg[c] << endl; - currarg[1] = currarg[c]; - currarg[2] = '\0'; - return currarg; - } - (*option).second = true; - } - } - - else //positional argument - args.push_back(currarg); - } - - return NULL; -} - - - -void makeLower(string & str) -{ - for (size_t i = 0; i < str.length(); i++) - { - str[i] = tolower(str[i]); - } -} - -string toLower(const string & str) -{ - string s(str); - makeLower(s); - return s; -} - - - -/** -* A wrapper function which writes a buffer to a file. -**/ -ssize_t writeBytesToFile(signed int fileDescriptor, const char * buffer, unsigned int bufferLength) { - return writen(fileDescriptor, buffer, bufferLength); -} - - -// From Steven's Unix Net Programming -// http://www.kohala.com/start/ -/* Write "n" bytes to a descriptor. */ -ssize_t writen(int fd, const void *vptr, size_t n) -{ - size_t nleft; - ssize_t nwritten; - const int8_t * ptr; - - ptr = static_cast<const int8_t*>(vptr); - nleft = n; - while (nleft > 0) { - if ( (nwritten = ::write(fd, ptr, nleft)) <= 0) { - if (errno == EINTR) - nwritten = 0; /* and call write() again */ - else - return -1; /* error */ - } - - nleft -= nwritten; - ptr += nwritten; - } - return n; -} - - - - -// From Steven's Unix Net Programming -// http://www.kohala.com/start/ -/* Read "n" bytes from a descriptor. */ -ssize_t readn(int fd, void *vptr, size_t n) -{ - size_t nleft; - ssize_t nread; - int8_t * ptr; - - ptr = static_cast<int8_t*>(vptr); - nleft = n; - while (nleft > 0) { - if ( (nread = ::read(fd, ptr, nleft)) < 0) { - if (errno == EINTR) - nread = 0; /* and call read() again */ - else - return -1; - } - else if (nread == 0) - break; /* EOF */ - - nleft -= nread; - ptr += nread; - } - return n - nleft; /* return >= 0 */ -} - - -void rename_main(const string & file, const string & newname) -{ - if (newname[0] != '_') - { - cerr << "INTERNAL ERROR: " __FILE__ << ":" << __LINE__ - << "newname argument to rename_main must begin with an underscore to ensure replacement safety" << endl; - exit(-2); - } - assertExists(file); - exec( "sed", "-i", "-e", - ( "s/int[\\r\\n \\t][\\r\\n \\t]*main(.*)/int " + newname + - "(int argc, char ** argv)/" ).c_str(), - file.c_str() ); -} - -vector<string> tokenize(const string & str, char delim) -{ - vector<string> args; - - size_t start = 0; - size_t end; - for (end = str.find(delim); end != string::npos; end = str.find(delim, start)) - { - args.push_back(str.substr(start, end - start)); - start = end+1; - } - args.push_back(str.substr(start, str.size() - start)); - - return args; -} - -vector<string> tokenize(const string & str, const string & delims) -{ - vector<string> args; - - size_t start = 0; - while (start < str.length() && delims.find(str[start]) != string::npos) start++; - size_t end; - for (end = str.find_first_of(delims); end != string::npos; end = str.find_first_of(delims, start)) - { - args.push_back(str.substr(start, end - start)); - start = end+1; - while (start < str.length() && delims.find(str[start]) != string::npos) start++; - } - if (start < str.length()) - args.push_back(str.substr(start, str.length() - start)); - - return args; -} - -namespace colorize -{ -const char * BLACK = "\033[39m"; -const char * GREEN = "\033[32m"; -const char * RED = "\033[31m"; -const bool is_color_enabled = isatty(STDOUT_FILENO); - - -} - -} // namespace util - diff --git a/util.h b/util.h deleted file mode 100644 index 9da2b72..0000000 --- a/util.h +++ /dev/null @@ -1,403 +0,0 @@ -/* CS 225 Util Library - * - * @author Jack Toole - */ - -#ifndef UTIL_H -#define UTIL_H - -#define __STDC_LIMIT_MACROS - -#include <errno.h> -#include <limits.h> -#include <stdio.h> -#include <stdint.h> -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/types.h> -#include <time.h> -#include <unistd.h> -#include <fstream> -#include <iostream> -#include <map> -#include <sstream> -#include <string> -#include <vector> - -namespace util -{ -using namespace std; - -namespace internal -{ -extern const char * error_prefix; -} - -/************************************************************************/ -/* Comparator for case-insensitive comparison in STL assos. containers */ -/* From Abhay: */ -/* http://stackoverflow.com/questions/1801892/making-mapfind-operation-case-insensitive */ -/************************************************************************/ -struct ci_less : std::binary_function<std::string, std::string, bool> -{ - // case-independent (ci) compare_less binary function - struct nocase_compare : public std::binary_function<unsigned char,unsigned char,bool> - { - bool operator() (const unsigned char& c1, const unsigned char& c2) const - { - return tolower (c1) < tolower (c2); - } - }; - bool operator() (const std::string & s1, const std::string & s2) const - { - return std::lexicographical_compare - (s1.begin (), s1.end (), // source range - s2.begin (), s2.end (), // dest range - nocase_compare ()); // comparison - } -}; - -// http://stackoverflow.com/questions/5300602/template-return-type-with-default-value -template <typename T> -struct Initializer -{ - T value; - Initializer() - :value() // ====> default construction, works for classes _and_ built-in - { } -}; - -class Signal -{ - private: - const int signum; - public: - Signal(int signal_number) : signum(signal_number) { } - int number() const { return signum; } - const char * what() const; -}; - - - -/** -* Here we create a useful and easily understanable alias for the map. -**/ -typedef map<string, vector<string>, ci_less> FileMap; -typedef map<string, bool, ci_less> OptionsMap; - -class OptionsParser -{ - private: - typedef map<string, bool*> optsMap_t; - typedef map<string, bool> valueMap_t; - valueMap_t valueMap; // not static to prevent still reachable memory - - optsMap_t optsMap; - vector<string *> args; - - public: - OptionsParser(); - void addOption(const string & name, bool & setValue) { optsMap[name] = &setValue; } - void addArg(string & setValue) { args.push_back(&setValue); } - vector<string> parse(int argc, const char * const * argv); -}; - -// EXEC() -int8_t exec(int redirect_fd, const char * command, - const char * arg1 = NULL, - const char * arg2 = NULL, - const char * arg3 = NULL, - const char * arg4 = NULL, - const char * arg5 = NULL, - const char * arg6 = NULL); - -inline -int8_t exec(const char * command, - const char * arg1 = NULL, - const char * arg2 = NULL, - const char * arg3 = NULL, - const char * arg4 = NULL, - const char * arg5 = NULL, - const char * arg6 = NULL) -{ return exec(STDOUT_FILENO, command, arg1, arg2, arg3, arg4, arg5, arg6); } - -inline int8_t exec(const string & command) { return exec(command.c_str()); } -inline int8_t exec(const string & command, const string & arg1) { return exec(command.c_str(), arg1.c_str()); } -inline int8_t exec(const string & command, const string & arg1, const string & arg2) { return exec(command.c_str(), arg1.c_str(), arg2.c_str()); } -inline int8_t exec(const string & command, const string & arg1, const string & arg2, const string & arg3) { return exec(command.c_str(), arg1.c_str(), arg2.c_str(), arg3.c_str()); } -inline int8_t exec(const string & command, const string & arg1, const string & arg2, const string & arg3, const string & arg4) { return exec(command.c_str(), arg1.c_str(), arg2.c_str(), arg3.c_str(), arg4.c_str()); } -inline int8_t exec(const string & command, const string & arg1, const string & arg2, const string & arg3, const string & arg4, const string & arg5) { return exec(command.c_str(), arg1.c_str(), arg2.c_str(), arg3.c_str(), arg4.c_str(), arg5.c_str()); } -inline int8_t exec(const string & command, const string & arg1, const string & arg2, const string & arg3, const string & arg4, const string & arg5, const string & arg6) { return exec(command.c_str(), arg1.c_str(), arg2.c_str(), arg3.c_str(), arg4.c_str(), arg5.c_str(), arg6.c_str()); } -inline int8_t exec(int redirect_fd, const string & command) { return exec(redirect_fd, command.c_str()); } -inline int8_t exec(int redirect_fd, const string & command, const string & arg1) { return exec(redirect_fd, command.c_str(), arg1.c_str()); } -inline int8_t exec(int redirect_fd, const string & command, const string & arg1, const string & arg2) { return exec(redirect_fd, command.c_str(), arg1.c_str(), arg2.c_str()); } -inline int8_t exec(int redirect_fd, const string & command, const string & arg1, const string & arg2, const string & arg3) { return exec(redirect_fd, command.c_str(), arg1.c_str(), arg2.c_str(), arg3.c_str()); } -inline int8_t exec(int redirect_fd, const string & command, const string & arg1, const string & arg2, const string & arg3, const string & arg4) { return exec(redirect_fd, command.c_str(), arg1.c_str(), arg2.c_str(), arg3.c_str(), arg4.c_str()); } -inline int8_t exec(int redirect_fd, const string & command, const string & arg1, const string & arg2, const string & arg3, const string & arg4, const string & arg5) { return exec(redirect_fd, command.c_str(), arg1.c_str(), arg2.c_str(), arg3.c_str(), arg4.c_str(), arg5.c_str()); } -inline int8_t exec(int redirect_fd, const string & command, const string & arg1, const string & arg2, const string & arg3, const string & arg4, const string & arg5, const string & arg6) { return exec(redirect_fd, command.c_str(), arg1.c_str(), arg2.c_str(), arg3.c_str(), arg4.c_str(), arg5.c_str(), arg6.c_str()); } -int8_t exec(int redirect_fd, const string & command, const vector<string> & args); -int8_t exec(const string & command, const vector<string> & args, ostream * output); -inline int8_t exec(const string & command, const vector<string> & args) { return exec(command, args, &std::cout); } - -// FILESYSTEM FUNCTIONS -void assertExists(const string & path, int exit_code = -1); -bool exists(const string & path); -mode_t permissions(const string & path); -void forceRemoveDir(string dir); -string getcwdstr(); - -int chdir(const string & dir); -void copyFile(const string & source, const string & dest); -void copyFiles(const string & sourceFolder, const string & destFolder, const vector<string> & files); -void protectFiles(const string & folder, const vector<string> & files); -void protectDir(const string & dir); -void linkDirs(const string & sourceFolder, const string & destFolder, const vector<string> & dirs); -vector<string> get_files_in_dir(const string & dir, bool concatdir = true); -bool is_symlink(const string & file); -string get_symlink_target(const string & symlink); - -// STRING REPLACEMENT -bool replaceFirst(string & str, const string & toreplace, const string & with); -size_t replaceAll (string & str, const string & toreplace, const string & with); -size_t replaceAllInternal(string & str, const string & toreplace, const string & with); -size_t findNthLast(const string & str, char c, size_t n); -vector<string> tokenize(const string & str, char delim); -vector<string> tokenize(const string & str, const string & delims); - - -// IO OPERATIONS -string read_string_from_FILE(FILE * file, size_t max_length = -1); -void write_string_to_FILE(FILE * file, const char * str); -ssize_t writeBytesToFile(signed int fileDescriptor, const char * buffer, unsigned int bufferLength); -ssize_t writen(int fd, const void *vptr, size_t n); -ssize_t write(int fd, const string & str); -ssize_t write(int fd, int val); -ssize_t write(int fd, long val); -ssize_t readn(int fd, void *vptr, size_t n); -ssize_t read(int fd, int & val); -ssize_t read(int fd, long & val); - - -// STRING TYPE OPERATIONS -uint32_t intlen(uint32_t a); -void makeLower(string & str); -string toLower(const string & str); - -// String concatenation -template <typename T> -string to_string(const T & value); -template <typename T> -T from_string(const string & s); -template <typename T, typename F> -T lexical_cast(const F & from); -string operator+(const string & lhs, const string & rhs); // These 5 functions are to disambiguate -string operator+(const string & lhs, const char * rhs); // operator+ so that the following -string operator+(const string & lhs, char rhs); // templates may exist -string operator+(const char * lhs, const string & rhs); -string operator+(char lhs, const string & rhs); -template <typename T> -string & operator+=(string & str, const T & value); -template <typename T> -string operator+(const string & str, const T & value); - - -// CLOCK / TIMING -uint64_t process_clock(); -uint64_t system_clock(); - -// CONFIGURATION -void readConfig(const string & testsFolder, FileMap & map, const string & discriminator = ""); -void readFile(const string & file, vector<string> & lines); -string readFile(const string & filename); -void readFileGeneric(const string & file, FileMap * map, vector<string> * lines, const string & discriminator = ""); -char * processOptions(int argc, char ** argv, OptionsMap & opts, vector<string> & args); - - -// AUTOGRADER - - -// STUDENT CODE COMPILATION FUNCTIONS -void rename_main(const string & file, const string & newname); - - -// MACROS -void SET_ERROR_MESSAGE(const char * message); - -#define STRINGIFY1(p) #p -#define STR(p) STRINGIFY1(p) - -namespace internal -{ -template<typename StrType> -void exit_if_error_output(const char * file, int32_t line, StrType message); -} - -#define EXIT_IF_ERROR2(statement_check, message) \ - do { \ - errno = 0; \ - if ((statement_check) || errno != 0) \ - util::internal::exit_if_error_output(__FILE__, __LINE__, message); \ - } while (0) - -#define EXIT_IF_ERROR1(statement_check) \ - EXIT_IF_ERROR2(statement_check, #statement_check) - -// Crazy hack for overloading! -// Arg counting from: -// http://cplusplus.co.il/2010/07/17/variadic-macro-to-count-number-of-arguments/ -// Overloading tips: -// http://stackoverflow.com/questions/3046889/optional-parameters-with-c-macros -#define EXIT_IF_ERROR_THIRD_ARG(a, b, c, ...) c - -#define EXIT_IF_ERROR(...) \ - EXIT_IF_ERROR_THIRD_ARG(__VA_ARGS__, \ - EXIT_IF_ERROR2, \ - EXIT_IF_ERROR1, 0) (__VA_ARGS__) - -// Colorization -namespace colorize -{ - extern const char * BLACK; - extern const char * GREEN; - extern const char * RED; - - extern const bool is_color_enabled; - - inline string make_color(const char * color, const string & str) - { - return (is_color_enabled ? color + str + BLACK : str); - } -} // namespace colorize - - -// INLINE IMPLEMENTATIONS -// Originally by radu -// http://notfaq.wordpress.com/2006/08/30/c-convert-int-to-string/ -template <typename T> -inline string to_string(const T & value) -{ - stringstream ss; - ss << value; - return ss.str(); -} - -// http://stackoverflow.com/questions/5017001/like-atoi-but-to-float -template <typename T> -inline T from_string(const string & s) -{ - stringstream ss(s); - T value; - ss >> value; - return value; -} - -template <typename T, typename F> -inline T lexical_cast(const F & from) -{ - Initializer<T> to; - stringstream ss; - if (!(ss << from)) - { - cerr << "ERROR: Could not convert types" << endl; - return to.value; - } - if (!(ss >> to.value)) - { - cerr << "ERROR: Could not convert types" << endl; - return to.value; - } - return to.value; // TODO (toole1): Not sure if this forces a copy -} - -inline uint32_t intlen(uint32_t a) -{ - uint32_t len = 1; - a /= 10; - - while (a != 0) - { - a = a/10; - len++; - } - return len; -} - -inline ssize_t write(int fd, const string & str) -{ - return writen(fd, str.c_str(), str.length()+1); -} - -inline ssize_t write(int fd, int val) -{ - return writen(fd, &val, sizeof val); -} - -inline ssize_t write(int fd, long val) -{ - return writen(fd, &val, sizeof val); -} - -inline ssize_t read(int fd, int & val) -{ - return readn(fd, &val, sizeof val); -} - -inline ssize_t read(int fd, long & val) -{ - return readn(fd, &val, sizeof val); -} - -template <typename T, typename C, typename BinaryOp> -T accumulate(const C & collect, BinaryOp op, T init) -{ - typename C::const_iterator it = collect.begin(); - typename C::const_iterator end = collect.end(); - while (it != end) - init = init + *it++; - return init; -} - -inline string operator+(const string & lhs, const string & rhs) { return std::operator+(lhs, rhs); } -inline string operator+(const string & lhs, const char * rhs) { return std::operator+(lhs, rhs); } -inline string operator+(const string & lhs, char rhs) { return std::operator+(lhs, rhs); } -inline string operator+(char lhs, const string & rhs) { return std::operator+(lhs, rhs); } -inline string operator+(const char * lhs, const string & rhs) { return std::operator+(lhs, rhs); } - -template <typename T> -inline std::string & operator+=(std::string & str, const T & value) -{ - str += util::to_string(value); - return str; -} - -template <typename T> -inline std::string operator+(const std::string & str, const T & value) -{ - std::stringstream ss; - ss << str << value; - return ss.str(); -} - -inline uint64_t process_clock() -{ -#ifdef CLOCK_PROCESS_CPUTIME_ID - timespec ts; - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); - return ts.tv_sec * 1000000 + (ts.tv_nsec + 500) / 1000; -#else - return clock(); -#endif -} - -inline uint64_t system_clock() -{ - timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec * 1000000 + tv.tv_usec; -} - -} // namespace util - -#endif // UTIL_H diff --git a/valgrind.h b/valgrind.h deleted file mode 100644 index 3e66a95..0000000 --- a/valgrind.h +++ /dev/null @@ -1,4792 +0,0 @@ -/* -*- c -*- - ---------------------------------------------------------------- - - Notice that the following BSD-style license applies to this one - file (valgrind.h) only. The rest of Valgrind is licensed under the - terms of the GNU General Public License, version 2, unless - otherwise indicated. See the COPYING file in the source - distribution for details. - - ---------------------------------------------------------------- - - This file is part of Valgrind, a dynamic binary instrumentation - framework. - - Copyright (C) 2000-2010 Julian Seward. All rights reserved. - - redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ---------------------------------------------------------------- - - Notice that the above BSD-style license applies to this one file - (valgrind.h) only. The entire rest of Valgrind is licensed under - the terms of the GNU General Public License, version 2. See the - COPYING file in the source distribution for details. - - ---------------------------------------------------------------- -*/ - - -/* This file is for inclusion into client (your!) code. - - You can use these macros to manipulate and query Valgrind's - execution inside your own programs. - - The resulting executables will still run without Valgrind, just a - little bit more slowly than they otherwise would, but otherwise - unchanged. When not running on valgrind, each client request - consumes very few (eg. 7) instructions, so the resulting performance - loss is negligible unless you plan to execute client requests - millions of times per second. Nevertheless, if that is still a - problem, you can compile with the NVALGRIND symbol defined (gcc - -DNVALGRIND) so that client requests are not even compiled in. */ - -#ifndef __VALGRIND_H -#define __VALGRIND_H - - -/* ------------------------------------------------------------------ */ -/* VERSION NUMBER OF VALGRIND */ -/* ------------------------------------------------------------------ */ - -/* Specify Valgrind's version number, so that user code can - conditionally compile based on our version number. Note that these - were introduced at version 3.6 and so do not exist in version 3.5 - or earlier. The recommended way to use them to check for "version - X.Y or later" is (eg) - -#if defined(__VALGRIND_MAJOR__) && defined(__VALGRIND_MINOR__) \ - && (__VALGRIND_MAJOR__ > 3 \ - || (__VALGRIND_MAJOR__ == 3 && __VALGRIND_MINOR__ >= 6)) -*/ -#define __VALGRIND_MAJOR__ 3 -#define __VALGRIND_MINOR__ 6 - - -#include <stdarg.h> - -/* Nb: this file might be included in a file compiled with -ansi. So - we can't use C++ style "//" comments nor the "asm" keyword (instead - use "__asm__"). */ - -/* Derive some tags indicating what the target platform is. Note - that in this file we're using the compiler's CPP symbols for - identifying architectures, which are different to the ones we use - within the rest of Valgrind. Note, __powerpc__ is active for both - 32 and 64-bit PPC, whereas __powerpc64__ is only active for the - latter (on Linux, that is). - - Misc note: how to find out what's predefined in gcc by default: - gcc -Wp,-dM somefile.c -*/ -#undef PLAT_ppc64_aix5 -#undef PLAT_ppc32_aix5 -#undef PLAT_x86_darwin -#undef PLAT_amd64_darwin -#undef PLAT_x86_win32 -#undef PLAT_x86_linux -#undef PLAT_amd64_linux -#undef PLAT_ppc32_linux -#undef PLAT_ppc64_linux -#undef PLAT_arm_linux - -#if defined(_AIX) && defined(__64BIT__) -# define PLAT_ppc64_aix5 1 -#elif defined(_AIX) && !defined(__64BIT__) -# define PLAT_ppc32_aix5 1 -#elif defined(__APPLE__) && defined(__i386__) -# define PLAT_x86_darwin 1 -#elif defined(__APPLE__) && defined(__x86_64__) -# define PLAT_amd64_darwin 1 -#elif defined(__MINGW32__) || defined(__CYGWIN32__) || defined(_WIN32) && defined(_M_IX86) -# define PLAT_x86_win32 1 -#elif defined(__linux__) && defined(__i386__) -# define PLAT_x86_linux 1 -#elif defined(__linux__) && defined(__x86_64__) -# define PLAT_amd64_linux 1 -#elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__) -# define PLAT_ppc32_linux 1 -#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) -# define PLAT_ppc64_linux 1 -#elif defined(__linux__) && defined(__arm__) -# define PLAT_arm_linux 1 -#else -/* If we're not compiling for our target platform, don't generate - any inline asms. */ -# if !defined(NVALGRIND) -# define NVALGRIND 1 -# endif -#endif - - -/* ------------------------------------------------------------------ */ -/* ARCHITECTURE SPECIFICS for SPECIAL INSTRUCTIONS. There is nothing */ -/* in here of use to end-users -- skip to the next section. */ -/* ------------------------------------------------------------------ */ - -#if defined(NVALGRIND) - -/* Define NVALGRIND to completely remove the Valgrind magic sequence - from the compiled code (analogous to NDEBUG's effects on - assert()) */ -#define VALGRIND_DO_CLIENT_REQUEST( \ - _zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - { \ - (_zzq_rlval) = (_zzq_default); \ - } - -#else /* ! NVALGRIND */ - -/* The following defines the magic code sequences which the JITter - spots and handles magically. Don't look too closely at them as - they will rot your brain. - - The assembly code sequences for all architectures is in this one - file. This is because this file must be stand-alone, and we don't - want to have multiple files. - - For VALGRIND_DO_CLIENT_REQUEST, we must ensure that the default - value gets put in the return slot, so that everything works when - this is executed not under Valgrind. Args are passed in a memory - block, and so there's no intrinsic limit to the number that could - be passed, but it's currently five. - - The macro args are: - _zzq_rlval result lvalue - _zzq_default default value (result returned when running on real CPU) - _zzq_request request code - _zzq_arg1..5 request params - - The other two macros are used to support function wrapping, and are - a lot simpler. VALGRIND_GET_NR_CONTEXT returns the value of the - guest's NRADDR pseudo-register and whatever other information is - needed to safely run the call original from the wrapper: on - ppc64-linux, the R2 value at the divert point is also needed. This - information is abstracted into a user-visible type, OrigFn. - - VALGRIND_CALL_NOREDIR_* behaves the same as the following on the - guest, but guarantees that the branch instruction will not be - redirected: x86: call *%eax, amd64: call *%rax, ppc32/ppc64: - branch-and-link-to-r11. VALGRIND_CALL_NOREDIR is just text, not a - complete inline asm, since it needs to be combined with more magic - inline asm stuff to be useful. -*/ - -/* ------------------------- x86-{linux,darwin} ---------------- */ - -#if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \ - || (defined(PLAT_x86_win32) && defined(__GNUC__)) - -typedef - struct { - unsigned int nraddr; /* where's the code? */ - } - OrigFn; - -#define __SPECIAL_INSTRUCTION_PREAMBLE \ - "roll $3, %%edi ; roll $13, %%edi\n\t" \ - "roll $29, %%edi ; roll $19, %%edi\n\t" - -#define VALGRIND_DO_CLIENT_REQUEST( \ - _zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - { volatile unsigned int _zzq_args[6]; \ - volatile unsigned int _zzq_result; \ - _zzq_args[0] = (unsigned int)(_zzq_request); \ - _zzq_args[1] = (unsigned int)(_zzq_arg1); \ - _zzq_args[2] = (unsigned int)(_zzq_arg2); \ - _zzq_args[3] = (unsigned int)(_zzq_arg3); \ - _zzq_args[4] = (unsigned int)(_zzq_arg4); \ - _zzq_args[5] = (unsigned int)(_zzq_arg5); \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %EDX = client_request ( %EAX ) */ \ - "xchgl %%ebx,%%ebx" \ - : "=d" (_zzq_result) \ - : "a" (&_zzq_args[0]), "0" (_zzq_default) \ - : "cc", "memory" \ - ); \ - _zzq_rlval = _zzq_result; \ - } - -#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ - { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ - volatile unsigned int __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %EAX = guest_NRADDR */ \ - "xchgl %%ecx,%%ecx" \ - : "=a" (__addr) \ - : \ - : "cc", "memory" \ - ); \ - _zzq_orig->nraddr = __addr; \ - } - -#define VALGRIND_CALL_NOREDIR_EAX \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* call-noredir *%EAX */ \ - "xchgl %%edx,%%edx\n\t" -#endif /* PLAT_x86_linux || PLAT_x86_darwin || (PLAT_x86_win32 && __GNUC__) */ - -/* ------------------------- x86-Win32 ------------------------- */ - -#if defined(PLAT_x86_win32) && !defined(__GNUC__) - -typedef - struct { - unsigned int nraddr; /* where's the code? */ - } - OrigFn; - -#if defined(_MSC_VER) - -#define __SPECIAL_INSTRUCTION_PREAMBLE \ - __asm rol edi, 3 __asm rol edi, 13 \ - __asm rol edi, 29 __asm rol edi, 19 - -#define VALGRIND_DO_CLIENT_REQUEST( \ - _zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - { volatile uintptr_t _zzq_args[6]; \ - volatile unsigned int _zzq_result; \ - _zzq_args[0] = (uintptr_t)(_zzq_request); \ - _zzq_args[1] = (uintptr_t)(_zzq_arg1); \ - _zzq_args[2] = (uintptr_t)(_zzq_arg2); \ - _zzq_args[3] = (uintptr_t)(_zzq_arg3); \ - _zzq_args[4] = (uintptr_t)(_zzq_arg4); \ - _zzq_args[5] = (uintptr_t)(_zzq_arg5); \ - __asm { __asm lea eax, _zzq_args __asm mov edx, _zzq_default \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* %EDX = client_request ( %EAX ) */ \ - __asm xchg ebx,ebx \ - __asm mov _zzq_result, edx \ - } \ - _zzq_rlval = _zzq_result; \ - } - -#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ - { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ - volatile unsigned int __addr; \ - __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ - /* %EAX = guest_NRADDR */ \ - __asm xchg ecx,ecx \ - __asm mov __addr, eax \ - } \ - _zzq_orig->nraddr = __addr; \ - } - -#define VALGRIND_CALL_NOREDIR_EAX ERROR - -#else -#error Unsupported compiler. -#endif - -#endif /* PLAT_x86_win32 */ - -/* ------------------------ amd64-{linux,darwin} --------------- */ - -#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) - -typedef - struct { - unsigned long long int nraddr; /* where's the code? */ - } - OrigFn; - -#define __SPECIAL_INSTRUCTION_PREAMBLE \ - "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \ - "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" - -#define VALGRIND_DO_CLIENT_REQUEST( \ - _zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - { volatile unsigned long long int _zzq_args[6]; \ - volatile unsigned long long int _zzq_result; \ - _zzq_args[0] = (unsigned long long int)(_zzq_request); \ - _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ - _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ - _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ - _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ - _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %RDX = client_request ( %RAX ) */ \ - "xchgq %%rbx,%%rbx" \ - : "=d" (_zzq_result) \ - : "a" (&_zzq_args[0]), "0" (_zzq_default) \ - : "cc", "memory" \ - ); \ - _zzq_rlval = _zzq_result; \ - } - -#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ - { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ - volatile unsigned long long int __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %RAX = guest_NRADDR */ \ - "xchgq %%rcx,%%rcx" \ - : "=a" (__addr) \ - : \ - : "cc", "memory" \ - ); \ - _zzq_orig->nraddr = __addr; \ - } - -#define VALGRIND_CALL_NOREDIR_RAX \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* call-noredir *%RAX */ \ - "xchgq %%rdx,%%rdx\n\t" -#endif /* PLAT_amd64_linux || PLAT_amd64_darwin */ - -/* ------------------------ ppc32-linux ------------------------ */ - -#if defined(PLAT_ppc32_linux) - -typedef - struct { - unsigned int nraddr; /* where's the code? */ - } - OrigFn; - -#define __SPECIAL_INSTRUCTION_PREAMBLE \ - "rlwinm 0,0,3,0,0 ; rlwinm 0,0,13,0,0\n\t" \ - "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t" - -#define VALGRIND_DO_CLIENT_REQUEST( \ - _zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - \ - { unsigned int _zzq_args[6]; \ - unsigned int _zzq_result; \ - unsigned int* _zzq_ptr; \ - _zzq_args[0] = (unsigned int)(_zzq_request); \ - _zzq_args[1] = (unsigned int)(_zzq_arg1); \ - _zzq_args[2] = (unsigned int)(_zzq_arg2); \ - _zzq_args[3] = (unsigned int)(_zzq_arg3); \ - _zzq_args[4] = (unsigned int)(_zzq_arg4); \ - _zzq_args[5] = (unsigned int)(_zzq_arg5); \ - _zzq_ptr = _zzq_args; \ - __asm__ volatile("mr 3,%1\n\t" /*default*/ \ - "mr 4,%2\n\t" /*ptr*/ \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = client_request ( %R4 ) */ \ - "or 1,1,1\n\t" \ - "mr %0,3" /*result*/ \ - : "=b" (_zzq_result) \ - : "b" (_zzq_default), "b" (_zzq_ptr) \ - : "cc", "memory", "r3", "r4"); \ - _zzq_rlval = _zzq_result; \ - } - -#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ - { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ - unsigned int __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = guest_NRADDR */ \ - "or 2,2,2\n\t" \ - "mr %0,3" \ - : "=b" (__addr) \ - : \ - : "cc", "memory", "r3" \ - ); \ - _zzq_orig->nraddr = __addr; \ - } - -#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* branch-and-link-to-noredir *%R11 */ \ - "or 3,3,3\n\t" -#endif /* PLAT_ppc32_linux */ - -/* ------------------------ ppc64-linux ------------------------ */ - -#if defined(PLAT_ppc64_linux) - -typedef - struct { - unsigned long long int nraddr; /* where's the code? */ - unsigned long long int r2; /* what tocptr do we need? */ - } - OrigFn; - -#define __SPECIAL_INSTRUCTION_PREAMBLE \ - "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ - "rotldi 0,0,61 ; rotldi 0,0,51\n\t" - -#define VALGRIND_DO_CLIENT_REQUEST( \ - _zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - \ - { unsigned long long int _zzq_args[6]; \ - register unsigned long long int _zzq_result __asm__("r3"); \ - register unsigned long long int* _zzq_ptr __asm__("r4"); \ - _zzq_args[0] = (unsigned long long int)(_zzq_request); \ - _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ - _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ - _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ - _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ - _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ - _zzq_ptr = _zzq_args; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = client_request ( %R4 ) */ \ - "or 1,1,1" \ - : "=r" (_zzq_result) \ - : "0" (_zzq_default), "r" (_zzq_ptr) \ - : "cc", "memory"); \ - _zzq_rlval = _zzq_result; \ - } - -#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ - { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ - register unsigned long long int __addr __asm__("r3"); \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = guest_NRADDR */ \ - "or 2,2,2" \ - : "=r" (__addr) \ - : \ - : "cc", "memory" \ - ); \ - _zzq_orig->nraddr = __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = guest_NRADDR_GPR2 */ \ - "or 4,4,4" \ - : "=r" (__addr) \ - : \ - : "cc", "memory" \ - ); \ - _zzq_orig->r2 = __addr; \ - } - -#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* branch-and-link-to-noredir *%R11 */ \ - "or 3,3,3\n\t" - -#endif /* PLAT_ppc64_linux */ - -/* ------------------------- arm-linux ------------------------- */ - -#if defined(PLAT_arm_linux) - -typedef - struct { - unsigned int nraddr; /* where's the code? */ - } - OrigFn; - -#define __SPECIAL_INSTRUCTION_PREAMBLE \ - "mov r12, r12, ror #3 ; mov r12, r12, ror #13 \n\t" \ - "mov r12, r12, ror #29 ; mov r12, r12, ror #19 \n\t" - -#define VALGRIND_DO_CLIENT_REQUEST( \ - _zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - \ - { volatile unsigned int _zzq_args[6]; \ - volatile unsigned int _zzq_result; \ - _zzq_args[0] = (unsigned int)(_zzq_request); \ - _zzq_args[1] = (unsigned int)(_zzq_arg1); \ - _zzq_args[2] = (unsigned int)(_zzq_arg2); \ - _zzq_args[3] = (unsigned int)(_zzq_arg3); \ - _zzq_args[4] = (unsigned int)(_zzq_arg4); \ - _zzq_args[5] = (unsigned int)(_zzq_arg5); \ - __asm__ volatile("mov r3, %1\n\t" /*default*/ \ - "mov r4, %2\n\t" /*ptr*/ \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* R3 = client_request ( R4 ) */ \ - "orr r10, r10, r10\n\t" \ - "mov %0, r3" /*result*/ \ - : "=r" (_zzq_result) \ - : "r" (_zzq_default), "r" (&_zzq_args[0]) \ - : "cc","memory", "r3", "r4"); \ - _zzq_rlval = _zzq_result; \ - } - -#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ - { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ - unsigned int __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* R3 = guest_NRADDR */ \ - "orr r11, r11, r11\n\t" \ - "mov %0, r3" \ - : "=r" (__addr) \ - : \ - : "cc", "memory", "r3" \ - ); \ - _zzq_orig->nraddr = __addr; \ - } - -#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* branch-and-link-to-noredir *%R4 */ \ - "orr r12, r12, r12\n\t" - -#endif /* PLAT_arm_linux */ - -/* ------------------------ ppc32-aix5 ------------------------- */ - -#if defined(PLAT_ppc32_aix5) - -typedef - struct { - unsigned int nraddr; /* where's the code? */ - unsigned int r2; /* what tocptr do we need? */ - } - OrigFn; - -#define __SPECIAL_INSTRUCTION_PREAMBLE \ - "rlwinm 0,0,3,0,0 ; rlwinm 0,0,13,0,0\n\t" \ - "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t" - -#define VALGRIND_DO_CLIENT_REQUEST( \ - _zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - \ - { unsigned int _zzq_args[7]; \ - register unsigned int _zzq_result; \ - register unsigned int* _zzq_ptr; \ - _zzq_args[0] = (unsigned int)(_zzq_request); \ - _zzq_args[1] = (unsigned int)(_zzq_arg1); \ - _zzq_args[2] = (unsigned int)(_zzq_arg2); \ - _zzq_args[3] = (unsigned int)(_zzq_arg3); \ - _zzq_args[4] = (unsigned int)(_zzq_arg4); \ - _zzq_args[5] = (unsigned int)(_zzq_arg5); \ - _zzq_args[6] = (unsigned int)(_zzq_default); \ - _zzq_ptr = _zzq_args; \ - __asm__ volatile("mr 4,%1\n\t" \ - "lwz 3, 24(4)\n\t" \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = client_request ( %R4 ) */ \ - "or 1,1,1\n\t" \ - "mr %0,3" \ - : "=b" (_zzq_result) \ - : "b" (_zzq_ptr) \ - : "r3", "r4", "cc", "memory"); \ - _zzq_rlval = _zzq_result; \ - } - -#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ - { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ - register unsigned int __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = guest_NRADDR */ \ - "or 2,2,2\n\t" \ - "mr %0,3" \ - : "=b" (__addr) \ - : \ - : "r3", "cc", "memory" \ - ); \ - _zzq_orig->nraddr = __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = guest_NRADDR_GPR2 */ \ - "or 4,4,4\n\t" \ - "mr %0,3" \ - : "=b" (__addr) \ - : \ - : "r3", "cc", "memory" \ - ); \ - _zzq_orig->r2 = __addr; \ - } - -#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* branch-and-link-to-noredir *%R11 */ \ - "or 3,3,3\n\t" - -#endif /* PLAT_ppc32_aix5 */ - -/* ------------------------ ppc64-aix5 ------------------------- */ - -#if defined(PLAT_ppc64_aix5) - -typedef - struct { - unsigned long long int nraddr; /* where's the code? */ - unsigned long long int r2; /* what tocptr do we need? */ - } - OrigFn; - -#define __SPECIAL_INSTRUCTION_PREAMBLE \ - "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ - "rotldi 0,0,61 ; rotldi 0,0,51\n\t" - -#define VALGRIND_DO_CLIENT_REQUEST( \ - _zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - \ - { unsigned long long int _zzq_args[7]; \ - register unsigned long long int _zzq_result; \ - register unsigned long long int* _zzq_ptr; \ - _zzq_args[0] = (unsigned int long long)(_zzq_request); \ - _zzq_args[1] = (unsigned int long long)(_zzq_arg1); \ - _zzq_args[2] = (unsigned int long long)(_zzq_arg2); \ - _zzq_args[3] = (unsigned int long long)(_zzq_arg3); \ - _zzq_args[4] = (unsigned int long long)(_zzq_arg4); \ - _zzq_args[5] = (unsigned int long long)(_zzq_arg5); \ - _zzq_args[6] = (unsigned int long long)(_zzq_default); \ - _zzq_ptr = _zzq_args; \ - __asm__ volatile("mr 4,%1\n\t" \ - "ld 3, 48(4)\n\t" \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = client_request ( %R4 ) */ \ - "or 1,1,1\n\t" \ - "mr %0,3" \ - : "=b" (_zzq_result) \ - : "b" (_zzq_ptr) \ - : "r3", "r4", "cc", "memory"); \ - _zzq_rlval = _zzq_result; \ - } - -#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ - { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ - register unsigned long long int __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = guest_NRADDR */ \ - "or 2,2,2\n\t" \ - "mr %0,3" \ - : "=b" (__addr) \ - : \ - : "r3", "cc", "memory" \ - ); \ - _zzq_orig->nraddr = __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* %R3 = guest_NRADDR_GPR2 */ \ - "or 4,4,4\n\t" \ - "mr %0,3" \ - : "=b" (__addr) \ - : \ - : "r3", "cc", "memory" \ - ); \ - _zzq_orig->r2 = __addr; \ - } - -#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* branch-and-link-to-noredir *%R11 */ \ - "or 3,3,3\n\t" - -#endif /* PLAT_ppc64_aix5 */ - -/* Insert assembly code for other platforms here... */ - -#endif /* NVALGRIND */ - - -/* ------------------------------------------------------------------ */ -/* PLATFORM SPECIFICS for FUNCTION WRAPPING. This is all very */ -/* ugly. It's the least-worst tradeoff I can think of. */ -/* ------------------------------------------------------------------ */ - -/* This section defines magic (a.k.a appalling-hack) macros for doing - guaranteed-no-redirection macros, so as to get from function - wrappers to the functions they are wrapping. The whole point is to - construct standard call sequences, but to do the call itself with a - special no-redirect call pseudo-instruction that the JIT - understands and handles specially. This section is long and - repetitious, and I can't see a way to make it shorter. - - The naming scheme is as follows: - - CALL_FN_{W,v}_{v,W,WW,WWW,WWWW,5W,6W,7W,etc} - - 'W' stands for "word" and 'v' for "void". Hence there are - different macros for calling arity 0, 1, 2, 3, 4, etc, functions, - and for each, the possibility of returning a word-typed result, or - no result. -*/ - -/* Use these to write the name of your wrapper. NOTE: duplicates - VG_WRAP_FUNCTION_Z{U,Z} in pub_tool_redir.h. */ - -/* Use an extra level of macroisation so as to ensure the soname/fnname - args are fully macro-expanded before pasting them together. */ -#define VG_CONCAT4(_aa,_bb,_cc,_dd) _aa##_bb##_cc##_dd - -#define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) \ - VG_CONCAT4(_vgwZU_,soname,_,fnname) - -#define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \ - VG_CONCAT4(_vgwZZ_,soname,_,fnname) - -/* Use this macro from within a wrapper function to collect the - context (address and possibly other info) of the original function. - Once you have that you can then use it in one of the CALL_FN_ - macros. The type of the argument _lval is OrigFn. */ -#define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval) - -/* Derivatives of the main macros below, for calling functions - returning void. */ - -#define CALL_FN_v_v(fnptr) \ - do { volatile unsigned long _junk; \ - CALL_FN_W_v(_junk,fnptr); } while (0) - -#define CALL_FN_v_W(fnptr, arg1) \ - do { volatile unsigned long _junk; \ - CALL_FN_W_W(_junk,fnptr,arg1); } while (0) - -#define CALL_FN_v_WW(fnptr, arg1,arg2) \ - do { volatile unsigned long _junk; \ - CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0) - -#define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \ - do { volatile unsigned long _junk; \ - CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0) - -#define CALL_FN_v_WWWW(fnptr, arg1,arg2,arg3,arg4) \ - do { volatile unsigned long _junk; \ - CALL_FN_W_WWWW(_junk,fnptr,arg1,arg2,arg3,arg4); } while (0) - -#define CALL_FN_v_5W(fnptr, arg1,arg2,arg3,arg4,arg5) \ - do { volatile unsigned long _junk; \ - CALL_FN_W_5W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5); } while (0) - -#define CALL_FN_v_6W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6) \ - do { volatile unsigned long _junk; \ - CALL_FN_W_6W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6); } while (0) - -#define CALL_FN_v_7W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6,arg7) \ - do { volatile unsigned long _junk; \ - CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0) - -/* ------------------------- x86-{linux,darwin} ---------------- */ - -#if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) - -/* These regs are trashed by the hidden call. No need to mention eax - as gcc can already see that, plus causes gcc to bomb. */ -#define __CALLER_SAVED_REGS /*"eax"*/ "ecx", "edx" - -/* These CALL_FN_ macros assume that on x86-linux, sizeof(unsigned - long) == 4. */ - -#define CALL_FN_W_v(lval, orig) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[1]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - __asm__ volatile( \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_W(lval, orig, arg1) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[2]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - __asm__ volatile( \ - "subl $12, %%esp\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $16, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - __asm__ volatile( \ - "subl $8, %%esp\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $16, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[4]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - __asm__ volatile( \ - "subl $4, %%esp\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $16, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[5]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - __asm__ volatile( \ - "pushl 16(%%eax)\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $16, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[6]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - __asm__ volatile( \ - "subl $12, %%esp\n\t" \ - "pushl 20(%%eax)\n\t" \ - "pushl 16(%%eax)\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $32, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[7]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - __asm__ volatile( \ - "subl $8, %%esp\n\t" \ - "pushl 24(%%eax)\n\t" \ - "pushl 20(%%eax)\n\t" \ - "pushl 16(%%eax)\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $32, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[8]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - __asm__ volatile( \ - "subl $4, %%esp\n\t" \ - "pushl 28(%%eax)\n\t" \ - "pushl 24(%%eax)\n\t" \ - "pushl 20(%%eax)\n\t" \ - "pushl 16(%%eax)\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $32, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[9]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - __asm__ volatile( \ - "pushl 32(%%eax)\n\t" \ - "pushl 28(%%eax)\n\t" \ - "pushl 24(%%eax)\n\t" \ - "pushl 20(%%eax)\n\t" \ - "pushl 16(%%eax)\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $32, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[10]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - __asm__ volatile( \ - "subl $12, %%esp\n\t" \ - "pushl 36(%%eax)\n\t" \ - "pushl 32(%%eax)\n\t" \ - "pushl 28(%%eax)\n\t" \ - "pushl 24(%%eax)\n\t" \ - "pushl 20(%%eax)\n\t" \ - "pushl 16(%%eax)\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $48, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[11]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - __asm__ volatile( \ - "subl $8, %%esp\n\t" \ - "pushl 40(%%eax)\n\t" \ - "pushl 36(%%eax)\n\t" \ - "pushl 32(%%eax)\n\t" \ - "pushl 28(%%eax)\n\t" \ - "pushl 24(%%eax)\n\t" \ - "pushl 20(%%eax)\n\t" \ - "pushl 16(%%eax)\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $48, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ - arg6,arg7,arg8,arg9,arg10, \ - arg11) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[12]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - _argvec[11] = (unsigned long)(arg11); \ - __asm__ volatile( \ - "subl $4, %%esp\n\t" \ - "pushl 44(%%eax)\n\t" \ - "pushl 40(%%eax)\n\t" \ - "pushl 36(%%eax)\n\t" \ - "pushl 32(%%eax)\n\t" \ - "pushl 28(%%eax)\n\t" \ - "pushl 24(%%eax)\n\t" \ - "pushl 20(%%eax)\n\t" \ - "pushl 16(%%eax)\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $48, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ - arg6,arg7,arg8,arg9,arg10, \ - arg11,arg12) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[13]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - _argvec[11] = (unsigned long)(arg11); \ - _argvec[12] = (unsigned long)(arg12); \ - __asm__ volatile( \ - "pushl 48(%%eax)\n\t" \ - "pushl 44(%%eax)\n\t" \ - "pushl 40(%%eax)\n\t" \ - "pushl 36(%%eax)\n\t" \ - "pushl 32(%%eax)\n\t" \ - "pushl 28(%%eax)\n\t" \ - "pushl 24(%%eax)\n\t" \ - "pushl 20(%%eax)\n\t" \ - "pushl 16(%%eax)\n\t" \ - "pushl 12(%%eax)\n\t" \ - "pushl 8(%%eax)\n\t" \ - "pushl 4(%%eax)\n\t" \ - "movl (%%eax), %%eax\n\t" /* target->%eax */ \ - VALGRIND_CALL_NOREDIR_EAX \ - "addl $48, %%esp\n" \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#endif /* PLAT_x86_linux || PLAT_x86_darwin */ - -/* ------------------------ amd64-{linux,darwin} --------------- */ - -#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) - -/* ARGREGS: rdi rsi rdx rcx r8 r9 (the rest on stack in R-to-L order) */ - -/* These regs are trashed by the hidden call. */ -#define __CALLER_SAVED_REGS /*"rax",*/ "rcx", "rdx", "rsi", \ - "rdi", "r8", "r9", "r10", "r11" - -/* This is all pretty complex. It's so as to make stack unwinding - work reliably. See bug 243270. The basic problem is the sub and - add of 128 of %rsp in all of the following macros. If gcc believes - the CFA is in %rsp, then unwinding may fail, because what's at the - CFA is not what gcc "expected" when it constructs the CFIs for the - places where the macros are instantiated. - - But we can't just add a CFI annotation to increase the CFA offset - by 128, to match the sub of 128 from %rsp, because we don't know - whether gcc has chosen %rsp as the CFA at that point, or whether it - has chosen some other register (eg, %rbp). In the latter case, - adding a CFI annotation to change the CFA offset is simply wrong. - - So the solution is to get hold of the CFA using - __builtin_dwarf_cfa(), put it in a known register, and add a - CFI annotation to say what the register is. We choose %rbp for - this (perhaps perversely), because: - - (1) %rbp is already subject to unwinding. If a new register was - chosen then the unwinder would have to unwind it in all stack - traces, which is expensive, and - - (2) %rbp is already subject to precise exception updates in the - JIT. If a new register was chosen, we'd have to have precise - exceptions for it too, which reduces performance of the - generated code. - - However .. one extra complication. We can't just whack the result - of __builtin_dwarf_cfa() into %rbp and then add %rbp to the - list of trashed registers at the end of the inline assembly - fragments; gcc won't allow %rbp to appear in that list. Hence - instead we need to stash %rbp in %r15 for the duration of the asm, - and say that %r15 is trashed instead. gcc seems happy to go with - that. - - Oh .. and this all needs to be conditionalised so that it is - unchanged from before this commit, when compiled with older gccs - that don't support __builtin_dwarf_cfa. Furthermore, since - this header file is freestanding, it has to be independent of - config.h, and so the following conditionalisation cannot depend on - configure time checks. - - Although it's not clear from - 'defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM)', - this expression excludes Darwin. - .cfi directives in Darwin assembly appear to be completely - different and I haven't investigated how they work. - - For even more entertainment value, note we have to use the - completely undocumented __builtin_dwarf_cfa(), which appears to - really compute the CFA, whereas __builtin_frame_address(0) claims - to but actually doesn't. See - https://bugs.kde.org/show_bug.cgi?id=243270#c47 -*/ -#if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) -# define __FRAME_POINTER \ - ,"r"(__builtin_dwarf_cfa()) -# define VALGRIND_CFI_PROLOGUE \ - "movq %%rbp, %%r15\n\t" \ - "movq %2, %%rbp\n\t" \ - ".cfi_remember_state\n\t" \ - ".cfi_def_cfa rbp, 0\n\t" -# define VALGRIND_CFI_EPILOGUE \ - "movq %%r15, %%rbp\n\t" \ - ".cfi_restore_state\n\t" -#else -# define __FRAME_POINTER -# define VALGRIND_CFI_PROLOGUE -# define VALGRIND_CFI_EPILOGUE -#endif - - -/* These CALL_FN_ macros assume that on amd64-linux, sizeof(unsigned - long) == 8. */ - -/* NB 9 Sept 07. There is a nasty kludge here in all these CALL_FN_ - macros. In order not to trash the stack redzone, we need to drop - %rsp by 128 before the hidden call, and restore afterwards. The - nastyness is that it is only by luck that the stack still appears - to be unwindable during the hidden call - since then the behaviour - of any routine using this macro does not match what the CFI data - says. Sigh. - - Why is this important? Imagine that a wrapper has a stack - allocated local, and passes to the hidden call, a pointer to it. - Because gcc does not know about the hidden call, it may allocate - that local in the redzone. Unfortunately the hidden call may then - trash it before it comes to use it. So we must step clear of the - redzone, for the duration of the hidden call, to make it safe. - - Probably the same problem afflicts the other redzone-style ABIs too - (ppc64-linux, ppc32-aix5, ppc64-aix5); but for those, the stack is - self describing (none of this CFI nonsense) so at least messing - with the stack pointer doesn't give a danger of non-unwindable - stack. */ - -#define CALL_FN_W_v(lval, orig) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[1]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_W(lval, orig, arg1) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[2]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[4]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[5]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "movq 32(%%rax), %%rcx\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[6]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "movq 40(%%rax), %%r8\n\t" \ - "movq 32(%%rax), %%rcx\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[7]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "movq 48(%%rax), %%r9\n\t" \ - "movq 40(%%rax), %%r8\n\t" \ - "movq 32(%%rax), %%rcx\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[8]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $136,%%rsp\n\t" \ - "pushq 56(%%rax)\n\t" \ - "movq 48(%%rax), %%r9\n\t" \ - "movq 40(%%rax), %%r8\n\t" \ - "movq 32(%%rax), %%rcx\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $8, %%rsp\n" \ - "addq $136,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[9]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "pushq 64(%%rax)\n\t" \ - "pushq 56(%%rax)\n\t" \ - "movq 48(%%rax), %%r9\n\t" \ - "movq 40(%%rax), %%r8\n\t" \ - "movq 32(%%rax), %%rcx\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $16, %%rsp\n" \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[10]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $136,%%rsp\n\t" \ - "pushq 72(%%rax)\n\t" \ - "pushq 64(%%rax)\n\t" \ - "pushq 56(%%rax)\n\t" \ - "movq 48(%%rax), %%r9\n\t" \ - "movq 40(%%rax), %%r8\n\t" \ - "movq 32(%%rax), %%rcx\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $24, %%rsp\n" \ - "addq $136,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[11]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "pushq 80(%%rax)\n\t" \ - "pushq 72(%%rax)\n\t" \ - "pushq 64(%%rax)\n\t" \ - "pushq 56(%%rax)\n\t" \ - "movq 48(%%rax), %%r9\n\t" \ - "movq 40(%%rax), %%r8\n\t" \ - "movq 32(%%rax), %%rcx\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $32, %%rsp\n" \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[12]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - _argvec[11] = (unsigned long)(arg11); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $136,%%rsp\n\t" \ - "pushq 88(%%rax)\n\t" \ - "pushq 80(%%rax)\n\t" \ - "pushq 72(%%rax)\n\t" \ - "pushq 64(%%rax)\n\t" \ - "pushq 56(%%rax)\n\t" \ - "movq 48(%%rax), %%r9\n\t" \ - "movq 40(%%rax), %%r8\n\t" \ - "movq 32(%%rax), %%rcx\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $40, %%rsp\n" \ - "addq $136,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11,arg12) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[13]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - _argvec[11] = (unsigned long)(arg11); \ - _argvec[12] = (unsigned long)(arg12); \ - __asm__ volatile( \ - VALGRIND_CFI_PROLOGUE \ - "subq $128,%%rsp\n\t" \ - "pushq 96(%%rax)\n\t" \ - "pushq 88(%%rax)\n\t" \ - "pushq 80(%%rax)\n\t" \ - "pushq 72(%%rax)\n\t" \ - "pushq 64(%%rax)\n\t" \ - "pushq 56(%%rax)\n\t" \ - "movq 48(%%rax), %%r9\n\t" \ - "movq 40(%%rax), %%r8\n\t" \ - "movq 32(%%rax), %%rcx\n\t" \ - "movq 24(%%rax), %%rdx\n\t" \ - "movq 16(%%rax), %%rsi\n\t" \ - "movq 8(%%rax), %%rdi\n\t" \ - "movq (%%rax), %%rax\n\t" /* target->%rax */ \ - VALGRIND_CALL_NOREDIR_RAX \ - "addq $48, %%rsp\n" \ - "addq $128,%%rsp\n\t" \ - VALGRIND_CFI_EPILOGUE \ - : /*out*/ "=a" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r15" \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#endif /* PLAT_amd64_linux || PLAT_amd64_darwin */ - -/* ------------------------ ppc32-linux ------------------------ */ - -#if defined(PLAT_ppc32_linux) - -/* This is useful for finding out about the on-stack stuff: - - extern int f9 ( int,int,int,int,int,int,int,int,int ); - extern int f10 ( int,int,int,int,int,int,int,int,int,int ); - extern int f11 ( int,int,int,int,int,int,int,int,int,int,int ); - extern int f12 ( int,int,int,int,int,int,int,int,int,int,int,int ); - - int g9 ( void ) { - return f9(11,22,33,44,55,66,77,88,99); - } - int g10 ( void ) { - return f10(11,22,33,44,55,66,77,88,99,110); - } - int g11 ( void ) { - return f11(11,22,33,44,55,66,77,88,99,110,121); - } - int g12 ( void ) { - return f12(11,22,33,44,55,66,77,88,99,110,121,132); - } -*/ - -/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ - -/* These regs are trashed by the hidden call. */ -#define __CALLER_SAVED_REGS \ - "lr", "ctr", "xer", \ - "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ - "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ - "r11", "r12", "r13" - -/* These CALL_FN_ macros assume that on ppc32-linux, - sizeof(unsigned long) == 4. */ - -#define CALL_FN_W_v(lval, orig) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[1]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_W(lval, orig, arg1) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[2]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[4]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[5]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - _argvec[4] = (unsigned long)arg4; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 6,16(11)\n\t" /* arg4->r6 */ \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[6]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - _argvec[4] = (unsigned long)arg4; \ - _argvec[5] = (unsigned long)arg5; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 6,16(11)\n\t" /* arg4->r6 */ \ - "lwz 7,20(11)\n\t" \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[7]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - _argvec[4] = (unsigned long)arg4; \ - _argvec[5] = (unsigned long)arg5; \ - _argvec[6] = (unsigned long)arg6; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 6,16(11)\n\t" /* arg4->r6 */ \ - "lwz 7,20(11)\n\t" \ - "lwz 8,24(11)\n\t" \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[8]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - _argvec[4] = (unsigned long)arg4; \ - _argvec[5] = (unsigned long)arg5; \ - _argvec[6] = (unsigned long)arg6; \ - _argvec[7] = (unsigned long)arg7; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 6,16(11)\n\t" /* arg4->r6 */ \ - "lwz 7,20(11)\n\t" \ - "lwz 8,24(11)\n\t" \ - "lwz 9,28(11)\n\t" \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[9]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - _argvec[4] = (unsigned long)arg4; \ - _argvec[5] = (unsigned long)arg5; \ - _argvec[6] = (unsigned long)arg6; \ - _argvec[7] = (unsigned long)arg7; \ - _argvec[8] = (unsigned long)arg8; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 6,16(11)\n\t" /* arg4->r6 */ \ - "lwz 7,20(11)\n\t" \ - "lwz 8,24(11)\n\t" \ - "lwz 9,28(11)\n\t" \ - "lwz 10,32(11)\n\t" /* arg8->r10 */ \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[10]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - _argvec[4] = (unsigned long)arg4; \ - _argvec[5] = (unsigned long)arg5; \ - _argvec[6] = (unsigned long)arg6; \ - _argvec[7] = (unsigned long)arg7; \ - _argvec[8] = (unsigned long)arg8; \ - _argvec[9] = (unsigned long)arg9; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "addi 1,1,-16\n\t" \ - /* arg9 */ \ - "lwz 3,36(11)\n\t" \ - "stw 3,8(1)\n\t" \ - /* args1-8 */ \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 6,16(11)\n\t" /* arg4->r6 */ \ - "lwz 7,20(11)\n\t" \ - "lwz 8,24(11)\n\t" \ - "lwz 9,28(11)\n\t" \ - "lwz 10,32(11)\n\t" /* arg8->r10 */ \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "addi 1,1,16\n\t" \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[11]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - _argvec[4] = (unsigned long)arg4; \ - _argvec[5] = (unsigned long)arg5; \ - _argvec[6] = (unsigned long)arg6; \ - _argvec[7] = (unsigned long)arg7; \ - _argvec[8] = (unsigned long)arg8; \ - _argvec[9] = (unsigned long)arg9; \ - _argvec[10] = (unsigned long)arg10; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "addi 1,1,-16\n\t" \ - /* arg10 */ \ - "lwz 3,40(11)\n\t" \ - "stw 3,12(1)\n\t" \ - /* arg9 */ \ - "lwz 3,36(11)\n\t" \ - "stw 3,8(1)\n\t" \ - /* args1-8 */ \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 6,16(11)\n\t" /* arg4->r6 */ \ - "lwz 7,20(11)\n\t" \ - "lwz 8,24(11)\n\t" \ - "lwz 9,28(11)\n\t" \ - "lwz 10,32(11)\n\t" /* arg8->r10 */ \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "addi 1,1,16\n\t" \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[12]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - _argvec[4] = (unsigned long)arg4; \ - _argvec[5] = (unsigned long)arg5; \ - _argvec[6] = (unsigned long)arg6; \ - _argvec[7] = (unsigned long)arg7; \ - _argvec[8] = (unsigned long)arg8; \ - _argvec[9] = (unsigned long)arg9; \ - _argvec[10] = (unsigned long)arg10; \ - _argvec[11] = (unsigned long)arg11; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "addi 1,1,-32\n\t" \ - /* arg11 */ \ - "lwz 3,44(11)\n\t" \ - "stw 3,16(1)\n\t" \ - /* arg10 */ \ - "lwz 3,40(11)\n\t" \ - "stw 3,12(1)\n\t" \ - /* arg9 */ \ - "lwz 3,36(11)\n\t" \ - "stw 3,8(1)\n\t" \ - /* args1-8 */ \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 6,16(11)\n\t" /* arg4->r6 */ \ - "lwz 7,20(11)\n\t" \ - "lwz 8,24(11)\n\t" \ - "lwz 9,28(11)\n\t" \ - "lwz 10,32(11)\n\t" /* arg8->r10 */ \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "addi 1,1,32\n\t" \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11,arg12) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[13]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)arg1; \ - _argvec[2] = (unsigned long)arg2; \ - _argvec[3] = (unsigned long)arg3; \ - _argvec[4] = (unsigned long)arg4; \ - _argvec[5] = (unsigned long)arg5; \ - _argvec[6] = (unsigned long)arg6; \ - _argvec[7] = (unsigned long)arg7; \ - _argvec[8] = (unsigned long)arg8; \ - _argvec[9] = (unsigned long)arg9; \ - _argvec[10] = (unsigned long)arg10; \ - _argvec[11] = (unsigned long)arg11; \ - _argvec[12] = (unsigned long)arg12; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "addi 1,1,-32\n\t" \ - /* arg12 */ \ - "lwz 3,48(11)\n\t" \ - "stw 3,20(1)\n\t" \ - /* arg11 */ \ - "lwz 3,44(11)\n\t" \ - "stw 3,16(1)\n\t" \ - /* arg10 */ \ - "lwz 3,40(11)\n\t" \ - "stw 3,12(1)\n\t" \ - /* arg9 */ \ - "lwz 3,36(11)\n\t" \ - "stw 3,8(1)\n\t" \ - /* args1-8 */ \ - "lwz 3,4(11)\n\t" /* arg1->r3 */ \ - "lwz 4,8(11)\n\t" \ - "lwz 5,12(11)\n\t" \ - "lwz 6,16(11)\n\t" /* arg4->r6 */ \ - "lwz 7,20(11)\n\t" \ - "lwz 8,24(11)\n\t" \ - "lwz 9,28(11)\n\t" \ - "lwz 10,32(11)\n\t" /* arg8->r10 */ \ - "lwz 11,0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "addi 1,1,32\n\t" \ - "mr %0,3" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#endif /* PLAT_ppc32_linux */ - -/* ------------------------ ppc64-linux ------------------------ */ - -#if defined(PLAT_ppc64_linux) - -/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ - -/* These regs are trashed by the hidden call. */ -#define __CALLER_SAVED_REGS \ - "lr", "ctr", "xer", \ - "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ - "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ - "r11", "r12", "r13" - -/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned - long) == 8. */ - -#define CALL_FN_W_v(lval, orig) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+0]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)" /* restore tocptr */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_W(lval, orig, arg1) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+1]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)" /* restore tocptr */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+2]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)" /* restore tocptr */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+3]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)" /* restore tocptr */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+4]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)" /* restore tocptr */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+5]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)" /* restore tocptr */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+6]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)" /* restore tocptr */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+7]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)" /* restore tocptr */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+8]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)" /* restore tocptr */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+9]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "addi 1,1,-128\n\t" /* expand stack frame */ \ - /* arg9 */ \ - "ld 3,72(11)\n\t" \ - "std 3,112(1)\n\t" \ - /* args1-8 */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - "addi 1,1,128" /* restore frame */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+10]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - _argvec[2+10] = (unsigned long)arg10; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "addi 1,1,-128\n\t" /* expand stack frame */ \ - /* arg10 */ \ - "ld 3,80(11)\n\t" \ - "std 3,120(1)\n\t" \ - /* arg9 */ \ - "ld 3,72(11)\n\t" \ - "std 3,112(1)\n\t" \ - /* args1-8 */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - "addi 1,1,128" /* restore frame */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+11]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - _argvec[2+10] = (unsigned long)arg10; \ - _argvec[2+11] = (unsigned long)arg11; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "addi 1,1,-144\n\t" /* expand stack frame */ \ - /* arg11 */ \ - "ld 3,88(11)\n\t" \ - "std 3,128(1)\n\t" \ - /* arg10 */ \ - "ld 3,80(11)\n\t" \ - "std 3,120(1)\n\t" \ - /* arg9 */ \ - "ld 3,72(11)\n\t" \ - "std 3,112(1)\n\t" \ - /* args1-8 */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - "addi 1,1,144" /* restore frame */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11,arg12) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+12]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - _argvec[2+10] = (unsigned long)arg10; \ - _argvec[2+11] = (unsigned long)arg11; \ - _argvec[2+12] = (unsigned long)arg12; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "addi 1,1,-144\n\t" /* expand stack frame */ \ - /* arg12 */ \ - "ld 3,96(11)\n\t" \ - "std 3,136(1)\n\t" \ - /* arg11 */ \ - "ld 3,88(11)\n\t" \ - "std 3,128(1)\n\t" \ - /* arg10 */ \ - "ld 3,80(11)\n\t" \ - "std 3,120(1)\n\t" \ - /* arg9 */ \ - "ld 3,72(11)\n\t" \ - "std 3,112(1)\n\t" \ - /* args1-8 */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - "addi 1,1,144" /* restore frame */ \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#endif /* PLAT_ppc64_linux */ - -/* ------------------------- arm-linux ------------------------- */ - -#if defined(PLAT_arm_linux) - -/* These regs are trashed by the hidden call. */ -#define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4","r14" - -/* These CALL_FN_ macros assume that on arm-linux, sizeof(unsigned - long) == 4. */ - -#define CALL_FN_W_v(lval, orig) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[1]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - __asm__ volatile( \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "mov %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_W(lval, orig, arg1) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[2]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - __asm__ volatile( \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "mov %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - __asm__ volatile( \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "mov %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[4]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - __asm__ volatile( \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "mov %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[5]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - __asm__ volatile( \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r3, [%1, #16] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "mov %0, r0" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[6]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - __asm__ volatile( \ - "ldr r0, [%1, #20] \n\t" \ - "push {r0} \n\t" \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r3, [%1, #16] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "add sp, sp, #4 \n\t" \ - "mov %0, r0" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[7]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - __asm__ volatile( \ - "ldr r0, [%1, #20] \n\t" \ - "ldr r1, [%1, #24] \n\t" \ - "push {r0, r1} \n\t" \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r3, [%1, #16] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "add sp, sp, #8 \n\t" \ - "mov %0, r0" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[8]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - __asm__ volatile( \ - "ldr r0, [%1, #20] \n\t" \ - "ldr r1, [%1, #24] \n\t" \ - "ldr r2, [%1, #28] \n\t" \ - "push {r0, r1, r2} \n\t" \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r3, [%1, #16] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "add sp, sp, #12 \n\t" \ - "mov %0, r0" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[9]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - __asm__ volatile( \ - "ldr r0, [%1, #20] \n\t" \ - "ldr r1, [%1, #24] \n\t" \ - "ldr r2, [%1, #28] \n\t" \ - "ldr r3, [%1, #32] \n\t" \ - "push {r0, r1, r2, r3} \n\t" \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r3, [%1, #16] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "add sp, sp, #16 \n\t" \ - "mov %0, r0" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[10]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - __asm__ volatile( \ - "ldr r0, [%1, #20] \n\t" \ - "ldr r1, [%1, #24] \n\t" \ - "ldr r2, [%1, #28] \n\t" \ - "ldr r3, [%1, #32] \n\t" \ - "ldr r4, [%1, #36] \n\t" \ - "push {r0, r1, r2, r3, r4} \n\t" \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r3, [%1, #16] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "add sp, sp, #20 \n\t" \ - "mov %0, r0" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[11]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - __asm__ volatile( \ - "ldr r0, [%1, #40] \n\t" \ - "push {r0} \n\t" \ - "ldr r0, [%1, #20] \n\t" \ - "ldr r1, [%1, #24] \n\t" \ - "ldr r2, [%1, #28] \n\t" \ - "ldr r3, [%1, #32] \n\t" \ - "ldr r4, [%1, #36] \n\t" \ - "push {r0, r1, r2, r3, r4} \n\t" \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r3, [%1, #16] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "add sp, sp, #24 \n\t" \ - "mov %0, r0" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ - arg6,arg7,arg8,arg9,arg10, \ - arg11) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[12]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - _argvec[11] = (unsigned long)(arg11); \ - __asm__ volatile( \ - "ldr r0, [%1, #40] \n\t" \ - "ldr r1, [%1, #44] \n\t" \ - "push {r0, r1} \n\t" \ - "ldr r0, [%1, #20] \n\t" \ - "ldr r1, [%1, #24] \n\t" \ - "ldr r2, [%1, #28] \n\t" \ - "ldr r3, [%1, #32] \n\t" \ - "ldr r4, [%1, #36] \n\t" \ - "push {r0, r1, r2, r3, r4} \n\t" \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r3, [%1, #16] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "add sp, sp, #28 \n\t" \ - "mov %0, r0" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory",__CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ - arg6,arg7,arg8,arg9,arg10, \ - arg11,arg12) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[13]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - _argvec[11] = (unsigned long)(arg11); \ - _argvec[12] = (unsigned long)(arg12); \ - __asm__ volatile( \ - "ldr r0, [%1, #40] \n\t" \ - "ldr r1, [%1, #44] \n\t" \ - "ldr r2, [%1, #48] \n\t" \ - "push {r0, r1, r2} \n\t" \ - "ldr r0, [%1, #20] \n\t" \ - "ldr r1, [%1, #24] \n\t" \ - "ldr r2, [%1, #28] \n\t" \ - "ldr r3, [%1, #32] \n\t" \ - "ldr r4, [%1, #36] \n\t" \ - "push {r0, r1, r2, r3, r4} \n\t" \ - "ldr r0, [%1, #4] \n\t" \ - "ldr r1, [%1, #8] \n\t" \ - "ldr r2, [%1, #12] \n\t" \ - "ldr r3, [%1, #16] \n\t" \ - "ldr r4, [%1] \n\t" /* target->r4 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ - "add sp, sp, #32 \n\t" \ - "mov %0, r0" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "0" (&_argvec[0]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#endif /* PLAT_arm_linux */ - -/* ------------------------ ppc32-aix5 ------------------------- */ - -#if defined(PLAT_ppc32_aix5) - -/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ - -/* These regs are trashed by the hidden call. */ -#define __CALLER_SAVED_REGS \ - "lr", "ctr", "xer", \ - "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ - "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ - "r11", "r12", "r13" - -/* Expand the stack frame, copying enough info that unwinding - still works. Trashes r3. */ - -#define VG_EXPAND_FRAME_BY_trashes_r3(_n_fr) \ - "addi 1,1,-" #_n_fr "\n\t" \ - "lwz 3," #_n_fr "(1)\n\t" \ - "stw 3,0(1)\n\t" - -#define VG_CONTRACT_FRAME_BY(_n_fr) \ - "addi 1,1," #_n_fr "\n\t" - -/* These CALL_FN_ macros assume that on ppc32-aix5, sizeof(unsigned - long) == 4. */ - -#define CALL_FN_W_v(lval, orig) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+0]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_W(lval, orig, arg1) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+1]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+2]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+3]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+4]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+5]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ - "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+6]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ - "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ - "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+7]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ - "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ - "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ - "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+8]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ - "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ - "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ - "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ - "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+9]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - VG_EXPAND_FRAME_BY_trashes_r3(64) \ - /* arg9 */ \ - "lwz 3,36(11)\n\t" \ - "stw 3,56(1)\n\t" \ - /* args1-8 */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ - "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ - "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ - "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ - "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(64) \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+10]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - _argvec[2+10] = (unsigned long)arg10; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - VG_EXPAND_FRAME_BY_trashes_r3(64) \ - /* arg10 */ \ - "lwz 3,40(11)\n\t" \ - "stw 3,60(1)\n\t" \ - /* arg9 */ \ - "lwz 3,36(11)\n\t" \ - "stw 3,56(1)\n\t" \ - /* args1-8 */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ - "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ - "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ - "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ - "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(64) \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+11]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - _argvec[2+10] = (unsigned long)arg10; \ - _argvec[2+11] = (unsigned long)arg11; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - VG_EXPAND_FRAME_BY_trashes_r3(72) \ - /* arg11 */ \ - "lwz 3,44(11)\n\t" \ - "stw 3,64(1)\n\t" \ - /* arg10 */ \ - "lwz 3,40(11)\n\t" \ - "stw 3,60(1)\n\t" \ - /* arg9 */ \ - "lwz 3,36(11)\n\t" \ - "stw 3,56(1)\n\t" \ - /* args1-8 */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ - "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ - "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ - "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ - "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(72) \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11,arg12) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+12]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - _argvec[2+10] = (unsigned long)arg10; \ - _argvec[2+11] = (unsigned long)arg11; \ - _argvec[2+12] = (unsigned long)arg12; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "stw 2,-8(11)\n\t" /* save tocptr */ \ - "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ - VG_EXPAND_FRAME_BY_trashes_r3(72) \ - /* arg12 */ \ - "lwz 3,48(11)\n\t" \ - "stw 3,68(1)\n\t" \ - /* arg11 */ \ - "lwz 3,44(11)\n\t" \ - "stw 3,64(1)\n\t" \ - /* arg10 */ \ - "lwz 3,40(11)\n\t" \ - "stw 3,60(1)\n\t" \ - /* arg9 */ \ - "lwz 3,36(11)\n\t" \ - "stw 3,56(1)\n\t" \ - /* args1-8 */ \ - "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ - "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ - "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ - "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ - "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ - "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ - "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ - "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ - "lwz 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "lwz 2,-8(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(72) \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#endif /* PLAT_ppc32_aix5 */ - -/* ------------------------ ppc64-aix5 ------------------------- */ - -#if defined(PLAT_ppc64_aix5) - -/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ - -/* These regs are trashed by the hidden call. */ -#define __CALLER_SAVED_REGS \ - "lr", "ctr", "xer", \ - "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ - "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ - "r11", "r12", "r13" - -/* Expand the stack frame, copying enough info that unwinding - still works. Trashes r3. */ - -#define VG_EXPAND_FRAME_BY_trashes_r3(_n_fr) \ - "addi 1,1,-" #_n_fr "\n\t" \ - "ld 3," #_n_fr "(1)\n\t" \ - "std 3,0(1)\n\t" - -#define VG_CONTRACT_FRAME_BY(_n_fr) \ - "addi 1,1," #_n_fr "\n\t" - -/* These CALL_FN_ macros assume that on ppc64-aix5, sizeof(unsigned - long) == 8. */ - -#define CALL_FN_W_v(lval, orig) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+0]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_W(lval, orig, arg1) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+1]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+2]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+3]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+4]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+5]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+6]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+7]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+8]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+9]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - VG_EXPAND_FRAME_BY_trashes_r3(128) \ - /* arg9 */ \ - "ld 3,72(11)\n\t" \ - "std 3,112(1)\n\t" \ - /* args1-8 */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(128) \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+10]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - _argvec[2+10] = (unsigned long)arg10; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - VG_EXPAND_FRAME_BY_trashes_r3(128) \ - /* arg10 */ \ - "ld 3,80(11)\n\t" \ - "std 3,120(1)\n\t" \ - /* arg9 */ \ - "ld 3,72(11)\n\t" \ - "std 3,112(1)\n\t" \ - /* args1-8 */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(128) \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+11]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - _argvec[2+10] = (unsigned long)arg10; \ - _argvec[2+11] = (unsigned long)arg11; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - VG_EXPAND_FRAME_BY_trashes_r3(144) \ - /* arg11 */ \ - "ld 3,88(11)\n\t" \ - "std 3,128(1)\n\t" \ - /* arg10 */ \ - "ld 3,80(11)\n\t" \ - "std 3,120(1)\n\t" \ - /* arg9 */ \ - "ld 3,72(11)\n\t" \ - "std 3,112(1)\n\t" \ - /* args1-8 */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(144) \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10,arg11,arg12) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3+12]; \ - volatile unsigned long _res; \ - /* _argvec[0] holds current r2 across the call */ \ - _argvec[1] = (unsigned long)_orig.r2; \ - _argvec[2] = (unsigned long)_orig.nraddr; \ - _argvec[2+1] = (unsigned long)arg1; \ - _argvec[2+2] = (unsigned long)arg2; \ - _argvec[2+3] = (unsigned long)arg3; \ - _argvec[2+4] = (unsigned long)arg4; \ - _argvec[2+5] = (unsigned long)arg5; \ - _argvec[2+6] = (unsigned long)arg6; \ - _argvec[2+7] = (unsigned long)arg7; \ - _argvec[2+8] = (unsigned long)arg8; \ - _argvec[2+9] = (unsigned long)arg9; \ - _argvec[2+10] = (unsigned long)arg10; \ - _argvec[2+11] = (unsigned long)arg11; \ - _argvec[2+12] = (unsigned long)arg12; \ - __asm__ volatile( \ - "mr 11,%1\n\t" \ - VG_EXPAND_FRAME_BY_trashes_r3(512) \ - "std 2,-16(11)\n\t" /* save tocptr */ \ - "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ - VG_EXPAND_FRAME_BY_trashes_r3(144) \ - /* arg12 */ \ - "ld 3,96(11)\n\t" \ - "std 3,136(1)\n\t" \ - /* arg11 */ \ - "ld 3,88(11)\n\t" \ - "std 3,128(1)\n\t" \ - /* arg10 */ \ - "ld 3,80(11)\n\t" \ - "std 3,120(1)\n\t" \ - /* arg9 */ \ - "ld 3,72(11)\n\t" \ - "std 3,112(1)\n\t" \ - /* args1-8 */ \ - "ld 3, 8(11)\n\t" /* arg1->r3 */ \ - "ld 4, 16(11)\n\t" /* arg2->r4 */ \ - "ld 5, 24(11)\n\t" /* arg3->r5 */ \ - "ld 6, 32(11)\n\t" /* arg4->r6 */ \ - "ld 7, 40(11)\n\t" /* arg5->r7 */ \ - "ld 8, 48(11)\n\t" /* arg6->r8 */ \ - "ld 9, 56(11)\n\t" /* arg7->r9 */ \ - "ld 10, 64(11)\n\t" /* arg8->r10 */ \ - "ld 11, 0(11)\n\t" /* target->r11 */ \ - VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ - "mr 11,%1\n\t" \ - "mr %0,3\n\t" \ - "ld 2,-16(11)\n\t" /* restore tocptr */ \ - VG_CONTRACT_FRAME_BY(144) \ - VG_CONTRACT_FRAME_BY(512) \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[2]) \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ - ); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#endif /* PLAT_ppc64_aix5 */ - - -/* ------------------------------------------------------------------ */ -/* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS. */ -/* */ -/* ------------------------------------------------------------------ */ - -/* Some request codes. There are many more of these, but most are not - exposed to end-user view. These are the public ones, all of the - form 0x1000 + small_number. - - Core ones are in the range 0x00000000--0x0000ffff. The non-public - ones start at 0x2000. -*/ - -/* These macros are used by tools -- they must be public, but don't - embed them into other programs. */ -#define VG_USERREQ_TOOL_BASE(a,b) \ - ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16)) -#define VG_IS_TOOL_USERREQ(a, b, v) \ - (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000)) - -/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !! - This enum comprises an ABI exported by Valgrind to programs - which use client requests. DO NOT CHANGE THE ORDER OF THESE - ENTRIES, NOR DELETE ANY -- add new ones at the end. */ -typedef - enum { VG_USERREQ__RUNNING_ON_VALGRIND = 0x1001, - VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002, - - /* These allow any function to be called from the simulated - CPU but run on the real CPU. Nb: the first arg passed to - the function is always the ThreadId of the running - thread! So CLIENT_CALL0 actually requires a 1 arg - function, etc. */ - VG_USERREQ__CLIENT_CALL0 = 0x1101, - VG_USERREQ__CLIENT_CALL1 = 0x1102, - VG_USERREQ__CLIENT_CALL2 = 0x1103, - VG_USERREQ__CLIENT_CALL3 = 0x1104, - - /* Can be useful in regression testing suites -- eg. can - send Valgrind's output to /dev/null and still count - errors. */ - VG_USERREQ__COUNT_ERRORS = 0x1201, - - /* These are useful and can be interpreted by any tool that - tracks malloc() et al, by using vg_replace_malloc.c. */ - VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301, - VG_USERREQ__FREELIKE_BLOCK = 0x1302, - /* Memory pool support. */ - VG_USERREQ__CREATE_MEMPOOL = 0x1303, - VG_USERREQ__DESTROY_MEMPOOL = 0x1304, - VG_USERREQ__MEMPOOL_ALLOC = 0x1305, - VG_USERREQ__MEMPOOL_FREE = 0x1306, - VG_USERREQ__MEMPOOL_TRIM = 0x1307, - VG_USERREQ__MOVE_MEMPOOL = 0x1308, - VG_USERREQ__MEMPOOL_CHANGE = 0x1309, - VG_USERREQ__MEMPOOL_EXISTS = 0x130a, - - /* Allow printfs to valgrind log. */ - /* The first two pass the va_list argument by value, which - assumes it is the same size as or smaller than a UWord, - which generally isn't the case. Hence are deprecated. - The second two pass the vargs by reference and so are - immune to this problem. */ - /* both :: char* fmt, va_list vargs (DEPRECATED) */ - VG_USERREQ__PRINTF = 0x1401, - VG_USERREQ__PRINTF_BACKTRACE = 0x1402, - /* both :: char* fmt, va_list* vargs */ - VG_USERREQ__PRINTF_VALIST_BY_REF = 0x1403, - VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF = 0x1404, - - /* Stack support. */ - VG_USERREQ__STACK_REGISTER = 0x1501, - VG_USERREQ__STACK_DEREGISTER = 0x1502, - VG_USERREQ__STACK_CHANGE = 0x1503, - - /* Wine support */ - VG_USERREQ__LOAD_PDB_DEBUGINFO = 0x1601, - - /* Querying of debug info. */ - VG_USERREQ__MAP_IP_TO_SRCLOC = 0x1701 - } Vg_ClientRequest; - -#if !defined(__GNUC__) -# define __extension__ /* */ -#endif - - -/* - * VALGRIND_DO_CLIENT_REQUEST_EXPR(): a C expression that invokes a Valgrind - * client request and whose value equals the client request result. - */ - -#if defined(NVALGRIND) - -#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ - _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - (_zzq_default) - -#else /*defined(NVALGRIND)*/ - -#if defined(_MSC_VER) - -#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ - _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - (vg_VALGRIND_DO_CLIENT_REQUEST_EXPR((uintptr_t)(_zzq_default), \ - (_zzq_request), (uintptr_t)(_zzq_arg1), (uintptr_t)(_zzq_arg2), \ - (uintptr_t)(_zzq_arg3), (uintptr_t)(_zzq_arg4), \ - (uintptr_t)(_zzq_arg5))) - -static __inline unsigned -vg_VALGRIND_DO_CLIENT_REQUEST_EXPR(uintptr_t _zzq_default, - unsigned _zzq_request, uintptr_t _zzq_arg1, - uintptr_t _zzq_arg2, uintptr_t _zzq_arg3, - uintptr_t _zzq_arg4, uintptr_t _zzq_arg5) -{ - unsigned _zzq_rlval; - VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval, _zzq_default, _zzq_request, - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5); - return _zzq_rlval; -} - -#else /*defined(_MSC_VER)*/ - -#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ - _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - (__extension__({unsigned int _zzq_rlval; \ - VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval, _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - _zzq_rlval; \ - })) - -#endif /*defined(_MSC_VER)*/ - -#endif /*defined(NVALGRIND)*/ - - -/* Returns the number of Valgrinds this code is running under. That - is, 0 if running natively, 1 if running under Valgrind, 2 if - running under Valgrind which is running under another Valgrind, - etc. */ -#define RUNNING_ON_VALGRIND \ - VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* if not */, \ - VG_USERREQ__RUNNING_ON_VALGRIND, \ - 0, 0, 0, 0, 0) \ - - -/* Discard translation of code in the range [_qzz_addr .. _qzz_addr + - _qzz_len - 1]. Useful if you are debugging a JITter or some such, - since it provides a way to make sure valgrind will retranslate the - invalidated area. Returns no value. */ -#define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__DISCARD_TRANSLATIONS, \ - _qzz_addr, _qzz_len, 0, 0, 0); \ - } - - -/* These requests are for getting Valgrind itself to print something. - Possibly with a backtrace. This is a really ugly hack. The return value - is the number of characters printed, excluding the "**<pid>** " part at the - start and the backtrace (if present). */ - -#if defined(NVALGRIND) - -# define VALGRIND_PRINTF(...) -# define VALGRIND_PRINTF_BACKTRACE(...) - -#else /* NVALGRIND */ - -#if !defined(_MSC_VER) -/* Modern GCC will optimize the static routine out if unused, - and unused attribute will shut down warnings about it. */ -static int VALGRIND_PRINTF(const char *format, ...) - __attribute__((format(__printf__, 1, 2), __unused__)); -#endif -static int -#if defined(_MSC_VER) -__inline -#endif -VALGRIND_PRINTF(const char *format, ...) -{ - unsigned long _qzz_res; - va_list vargs; - va_start(vargs, format); -#if defined(_MSC_VER) - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, - VG_USERREQ__PRINTF_VALIST_BY_REF, - (uintptr_t)format, - (uintptr_t)&vargs, - 0, 0, 0); -#else - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, - VG_USERREQ__PRINTF_VALIST_BY_REF, - (unsigned long)format, - (unsigned long)&vargs, - 0, 0, 0); -#endif - va_end(vargs); - return (int)_qzz_res; -} - -#if !defined(_MSC_VER) -static int VALGRIND_PRINTF_BACKTRACE(const char *format, ...) - __attribute__((format(__printf__, 1, 2), __unused__)); -#endif -static int -#if defined(_MSC_VER) -__inline -#endif -VALGRIND_PRINTF_BACKTRACE(const char *format, ...) -{ - unsigned long _qzz_res; - va_list vargs; - va_start(vargs, format); -#if defined(_MSC_VER) - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, - VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF, - (uintptr_t)format, - (uintptr_t)&vargs, - 0, 0, 0); -#else - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, - VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF, - (unsigned long)format, - (unsigned long)&vargs, - 0, 0, 0); -#endif - va_end(vargs); - return (int)_qzz_res; -} - -#endif /* NVALGRIND */ - - -/* These requests allow control to move from the simulated CPU to the - real CPU, calling an arbitary function. - - Note that the current ThreadId is inserted as the first argument. - So this call: - - VALGRIND_NON_SIMD_CALL2(f, arg1, arg2) - - requires f to have this signature: - - Word f(Word tid, Word arg1, Word arg2) - - where "Word" is a word-sized type. - - Note that these client requests are not entirely reliable. For example, - if you call a function with them that subsequently calls printf(), - there's a high chance Valgrind will crash. Generally, your prospects of - these working are made higher if the called function does not refer to - any global variables, and does not refer to any libc or other functions - (printf et al). Any kind of entanglement with libc or dynamic linking is - likely to have a bad outcome, for tricky reasons which we've grappled - with a lot in the past. -*/ -#define VALGRIND_NON_SIMD_CALL0(_qyy_fn) \ - __extension__ \ - ({unsigned long _qyy_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ - VG_USERREQ__CLIENT_CALL0, \ - _qyy_fn, \ - 0, 0, 0, 0); \ - _qyy_res; \ - }) - -#define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1) \ - __extension__ \ - ({unsigned long _qyy_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ - VG_USERREQ__CLIENT_CALL1, \ - _qyy_fn, \ - _qyy_arg1, 0, 0, 0); \ - _qyy_res; \ - }) - -#define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2) \ - __extension__ \ - ({unsigned long _qyy_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ - VG_USERREQ__CLIENT_CALL2, \ - _qyy_fn, \ - _qyy_arg1, _qyy_arg2, 0, 0); \ - _qyy_res; \ - }) - -#define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \ - __extension__ \ - ({unsigned long _qyy_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ - VG_USERREQ__CLIENT_CALL3, \ - _qyy_fn, \ - _qyy_arg1, _qyy_arg2, \ - _qyy_arg3, 0); \ - _qyy_res; \ - }) - - -/* Counts the number of errors that have been recorded by a tool. Nb: - the tool must record the errors with VG_(maybe_record_error)() or - VG_(unique_error)() for them to be counted. */ -#define VALGRIND_COUNT_ERRORS \ - __extension__ \ - ({unsigned int _qyy_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ - VG_USERREQ__COUNT_ERRORS, \ - 0, 0, 0, 0, 0); \ - _qyy_res; \ - }) - -/* Several Valgrind tools (Memcheck, Massif, Helgrind, DRD) rely on knowing - when heap blocks are allocated in order to give accurate results. This - happens automatically for the standard allocator functions such as - malloc(), calloc(), realloc(), memalign(), new, new[], free(), delete, - delete[], etc. - - But if your program uses a custom allocator, this doesn't automatically - happen, and Valgrind will not do as well. For example, if you allocate - superblocks with mmap() and then allocates chunks of the superblocks, all - Valgrind's observations will be at the mmap() level and it won't know that - the chunks should be considered separate entities. In Memcheck's case, - that means you probably won't get heap block overrun detection (because - there won't be redzones marked as unaddressable) and you definitely won't - get any leak detection. - - The following client requests allow a custom allocator to be annotated so - that it can be handled accurately by Valgrind. - - VALGRIND_MALLOCLIKE_BLOCK marks a region of memory as having been allocated - by a malloc()-like function. For Memcheck (an illustrative case), this - does two things: - - - It records that the block has been allocated. This means any addresses - within the block mentioned in error messages will be - identified as belonging to the block. It also means that if the block - isn't freed it will be detected by the leak checker. - - - It marks the block as being addressable and undefined (if 'is_zeroed' is - not set), or addressable and defined (if 'is_zeroed' is set). This - controls how accesses to the block by the program are handled. - - 'addr' is the start of the usable block (ie. after any - redzone), 'sizeB' is its size. 'rzB' is the redzone size if the allocator - can apply redzones -- these are blocks of padding at the start and end of - each block. Adding redzones is recommended as it makes it much more likely - Valgrind will spot block overruns. `is_zeroed' indicates if the memory is - zeroed (or filled with another predictable value), as is the case for - calloc(). - - VALGRIND_MALLOCLIKE_BLOCK should be put immediately after the point where a - heap block -- that will be used by the client program -- is allocated. - It's best to put it at the outermost level of the allocator if possible; - for example, if you have a function my_alloc() which calls - internal_alloc(), and the client request is put inside internal_alloc(), - stack traces relating to the heap block will contain entries for both - my_alloc() and internal_alloc(), which is probably not what you want. - - For Memcheck users: if you use VALGRIND_MALLOCLIKE_BLOCK to carve out - custom blocks from within a heap block, B, that has been allocated with - malloc/calloc/new/etc, then block B will be *ignored* during leak-checking - -- the custom blocks will take precedence. - - VALGRIND_FREELIKE_BLOCK is the partner to VALGRIND_MALLOCLIKE_BLOCK. For - Memcheck, it does two things: - - - It records that the block has been deallocated. This assumes that the - block was annotated as having been allocated via - VALGRIND_MALLOCLIKE_BLOCK. Otherwise, an error will be issued. - - - It marks the block as being unaddressable. - - VALGRIND_FREELIKE_BLOCK should be put immediately after the point where a - heap block is deallocated. - - In many cases, these two client requests will not be enough to get your - allocator working well with Memcheck. More specifically, if your allocator - writes to freed blocks in any way then a VALGRIND_MAKE_MEM_UNDEFINED call - will be necessary to mark the memory as addressable just before the zeroing - occurs, otherwise you'll get a lot of invalid write errors. For example, - you'll need to do this if your allocator recycles freed blocks, but it - zeroes them before handing them back out (via VALGRIND_MALLOCLIKE_BLOCK). - Alternatively, if your allocator reuses freed blocks for allocator-internal - data structures, VALGRIND_MAKE_MEM_UNDEFINED calls will also be necessary. - - Really, what's happening is a blurring of the lines between the client - program and the allocator... after VALGRIND_FREELIKE_BLOCK is called, the - memory should be considered unaddressable to the client program, but the - allocator knows more than the rest of the client program and so may be able - to safely access it. Extra client requests are necessary for Valgrind to - understand the distinction between the allocator and the rest of the - program. - - Note: there is currently no VALGRIND_REALLOCLIKE_BLOCK client request; it - has to be emulated with MALLOCLIKE/FREELIKE and memory copying. - - Ignored if addr == 0. -*/ -#define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__MALLOCLIKE_BLOCK, \ - addr, sizeB, rzB, is_zeroed, 0); \ - } - -/* See the comment for VALGRIND_MALLOCLIKE_BLOCK for details. - Ignored if addr == 0. -*/ -#define VALGRIND_FREELIKE_BLOCK(addr, rzB) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__FREELIKE_BLOCK, \ - addr, rzB, 0, 0, 0); \ - } - -/* Create a memory pool. */ -#define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__CREATE_MEMPOOL, \ - pool, rzB, is_zeroed, 0, 0); \ - } - -/* Destroy a memory pool. */ -#define VALGRIND_DESTROY_MEMPOOL(pool) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__DESTROY_MEMPOOL, \ - pool, 0, 0, 0, 0); \ - } - -/* Associate a piece of memory with a memory pool. */ -#define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__MEMPOOL_ALLOC, \ - pool, addr, size, 0, 0); \ - } - -/* Disassociate a piece of memory from a memory pool. */ -#define VALGRIND_MEMPOOL_FREE(pool, addr) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__MEMPOOL_FREE, \ - pool, addr, 0, 0, 0); \ - } - -/* Disassociate any pieces outside a particular range. */ -#define VALGRIND_MEMPOOL_TRIM(pool, addr, size) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__MEMPOOL_TRIM, \ - pool, addr, size, 0, 0); \ - } - -/* Resize and/or move a piece associated with a memory pool. */ -#define VALGRIND_MOVE_MEMPOOL(poolA, poolB) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__MOVE_MEMPOOL, \ - poolA, poolB, 0, 0, 0); \ - } - -/* Resize and/or move a piece associated with a memory pool. */ -#define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__MEMPOOL_CHANGE, \ - pool, addrA, addrB, size, 0); \ - } - -/* Return 1 if a mempool exists, else 0. */ -#define VALGRIND_MEMPOOL_EXISTS(pool) \ - __extension__ \ - ({unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__MEMPOOL_EXISTS, \ - pool, 0, 0, 0, 0); \ - _qzz_res; \ - }) - -/* Mark a piece of memory as being a stack. Returns a stack id. */ -#define VALGRIND_STACK_REGISTER(start, end) \ - __extension__ \ - ({unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__STACK_REGISTER, \ - start, end, 0, 0, 0); \ - _qzz_res; \ - }) - -/* Unmark the piece of memory associated with a stack id as being a - stack. */ -#define VALGRIND_STACK_DEREGISTER(id) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__STACK_DEREGISTER, \ - id, 0, 0, 0, 0); \ - } - -/* Change the start and end address of the stack id. */ -#define VALGRIND_STACK_CHANGE(id, start, end) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__STACK_CHANGE, \ - id, start, end, 0, 0); \ - } - -/* Load PDB debug info for Wine PE image_map. */ -#define VALGRIND_LOAD_PDB_DEBUGINFO(fd, ptr, total_size, delta) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__LOAD_PDB_DEBUGINFO, \ - fd, ptr, total_size, delta, 0); \ - } - -/* Map a code address to a source file name and line number. buf64 - must point to a 64-byte buffer in the caller's address space. The - result will be dumped in there and is guaranteed to be zero - terminated. If no info is found, the first byte is set to zero. */ -#define VALGRIND_MAP_IP_TO_SRCLOC(addr, buf64) \ - {unsigned int _qzz_res; \ - VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__MAP_IP_TO_SRCLOC, \ - addr, buf64, 0, 0, 0); \ - } - - -#undef PLAT_x86_linux -#undef PLAT_amd64_linux -#undef PLAT_ppc32_linux -#undef PLAT_ppc64_linux -#undef PLAT_arm_linux -#undef PLAT_ppc32_aix5 -#undef PLAT_ppc64_aix5 - -#endif /* __VALGRIND_H */ -- GitLab