From 1e5c0baa8cd59f651985ac3a7b41ab2ecbe90b5e Mon Sep 17 00:00:00 2001 From: Miguel Date: Thu, 11 Oct 2018 12:33:38 +0200 Subject: c++ global constructors calling from crt --- userspace/cpp/Makefile | 13 ++++--------- userspace/cpp/prep.cpp | 8 -------- userspace/cpp/testcpp.cpp | 48 +++++++++++++++++++++++++++++++++-------------- 3 files changed, 38 insertions(+), 31 deletions(-) delete mode 100644 userspace/cpp/prep.cpp (limited to 'userspace/cpp') diff --git a/userspace/cpp/Makefile b/userspace/cpp/Makefile index 9f4b314..e61438a 100644 --- a/userspace/cpp/Makefile +++ b/userspace/cpp/Makefile @@ -1,15 +1,10 @@ CXX=i686-foolos-g++ -CFLAGS= -CFLAGS+=-O0 -CFLAGS+=-gstabs +CXXFLAGS= +CXXFLAGS+=-O0 +CXXFLAGS+=-gstabs -LDLIBS+=-lgcc - -ASFLAGS= -ASFLAGS+=-gstabs - -testcpp: prep.cpp +testcpp: clean: rm -f testcpp diff --git a/userspace/cpp/prep.cpp b/userspace/cpp/prep.cpp deleted file mode 100644 index a09adbe..0000000 --- a/userspace/cpp/prep.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include - -void prep() -{ -_REENT_INIT_PTR(_impure_ptr); -} - diff --git a/userspace/cpp/testcpp.cpp b/userspace/cpp/testcpp.cpp index 53e3a3b..8ed7d55 100644 --- a/userspace/cpp/testcpp.cpp +++ b/userspace/cpp/testcpp.cpp @@ -3,31 +3,51 @@ #include #include -void prep(); -void myinit(); +struct test +{ + int i; + test(int ii):i(ii) { printf("test:ctor %i\n",i); } + ~test() { printf("test:dtor %i\n",i ); } +}; + +test t1(1); // global constructor should get called and desctructed on exit from our crt0 + +int somefunc() +{ + test t2(2); +} int main() { - prep(); - myinit(); - int myints[] = {32,71,12,45,26,80,53,33}; - std::vector myvector (myints, myints+8); // 32 71 12 45 26 80 53 33 + printf(" --- testing ctors & dtors ---\n"); - // using default comparison (operator <): - std::sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33 + somefunc(); + test t3(3); - for (std::vector::iterator it=myvector.begin(); it!=myvector.end(); ++it) - printf("%i\n",*it); - printf("hello\n"); -// printf("reent struct size: %d bytes\n",sizeof(struct _reent)); - // printf("reent pointer : 0x%08x\n",_impure_ptr); - //printf("reent pointer : 0x%08x\n",_impure_ptr); std::cout << "bye bye" << std::endl; + + /* + + int myints[] = {32,71,12,45,26,80,53,33}; + + std::vector myvector (myints, myints+8); // 32 71 12 45 26 80 53 33 + std::sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33 + + for (std::vector::iterator it=myvector.begin(); it!=myvector.end(); ++it) + printf("%i\n",*it); + + printf("hello\n"); printf("hello\n"); + */ + printf("-- fin -- \n"); + } +// printf("reent struct size: %d bytes\n",sizeof(struct _reent)); + // printf("reent pointer : 0x%08x\n",_impure_ptr); + //printf("reent pointer : 0x%08x\n",_impure_ptr); // constructing vectors /* #include -- cgit v1.2.3