From eb5d22bac52ddf9c749c65c4424aa0e4566f7d18 Mon Sep 17 00:00:00 2001 From: Wolfgang Thaller Date: Mon, 29 Sep 2014 21:42:27 +0200 Subject: [PATCH] add test program for global constructors/destructors --- TestApps/CMakeLists.txt | 11 +++++++ TestApps/InitTest.cc | 63 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 TestApps/InitTest.cc diff --git a/TestApps/CMakeLists.txt b/TestApps/CMakeLists.txt index 7a43a405ae..a65cc4f3a1 100644 --- a/TestApps/CMakeLists.txt +++ b/TestApps/CMakeLists.txt @@ -29,6 +29,17 @@ add_custom_command( DEPENDS ExceptionTest) add_custom_target(ExceptionTestAPPL ALL DEPENDS ExceptionTest.bin) +add_executable(InitTest + InitTest.cc + ) + +target_link_libraries(InitTest RetroConsole retrocrt) +add_custom_command( + OUTPUT InitTest.bin + COMMAND ${MAKE_APPL} -b -c InitTest -o InitTest + DEPENDS InitTest) +add_custom_target(InitTestAPPL ALL DEPENDS InitTest.bin) + enable_language(ASM) add_executable(AsmTest diff --git a/TestApps/InitTest.cc b/TestApps/InitTest.cc new file mode 100644 index 0000000000..64e606862f --- /dev/null +++ b/TestApps/InitTest.cc @@ -0,0 +1,63 @@ +/* + Copyright 2012 Wolfgang Thaller. + + This file is part of Retro68. + + Retro68 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Retro68 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Retro68. If not, see . +*/ + +#include +#include +#include + +class Foo +{ +public: + Foo() + { + printf("Foo::Foo() was called.\n"); + } + ~Foo() + { + printf("Foo::~Foo() was called. (delaying 1 sec)\n"); + + long start = TickCount(); + while(TickCount() < start + 60) + ; + } + +}; + +Foo foo; + +__attribute__((constructor)) +void con() +{ + printf("con() called.\n"); +} +__attribute__((destructor)) +void des() +{ + printf("des() called. (delaying 1 sec)\n"); + long start = TickCount(); + while(TickCount() < start + 60) + ; +} + +int main(int argc, char** argv) +{ + printf("Entering main. Press Enter.\n"); + getchar(); + return 0; +}