check crash if using gnu gcc method; refs #1
This commit is contained in:
		@@ -88,29 +88,30 @@ namespace mrw {
 | 
				
			|||||||
//----------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------
 | 
				
			||||||
mrw::StackTrace::StackTrace() throw(std::bad_exception) {
 | 
					mrw::StackTrace::StackTrace() throw(std::bad_exception) {
 | 
				
			||||||
  // maximum trace level is limited here to 50, see below why
 | 
					  // maximum trace level is limited here to 50, see below why
 | 
				
			||||||
 #   if defined(__GNUG__)
 | 
					#   if defined(__GLIBC__)
 | 
				
			||||||
   {
 | 
					 | 
				
			||||||
 #   define PUSH(i)                                                       \
 | 
					 | 
				
			||||||
     (__builtin_frame_address(i)!=0 ?                                   \
 | 
					 | 
				
			||||||
      (_trace.push_back(__builtin_return_address(i)), true) : false)
 | 
					 | 
				
			||||||
     PUSH(0) && PUSH(1) && PUSH(2) && PUSH(3) && PUSH(4) && PUSH(5) &&
 | 
					 | 
				
			||||||
       PUSH(6) && PUSH(7) && PUSH(8) && PUSH(9) && PUSH(10) && PUSH(11) &&
 | 
					 | 
				
			||||||
       PUSH(12) && PUSH(13) && PUSH(14) && PUSH(15) && PUSH(16) && PUSH(17)
 | 
					 | 
				
			||||||
       && PUSH(18) && PUSH(19) && PUSH(20) && PUSH(21) && PUSH(22) &&
 | 
					 | 
				
			||||||
       PUSH(23) && PUSH(24) && PUSH(25) && PUSH(26) && PUSH(27) && PUSH(28)
 | 
					 | 
				
			||||||
       && PUSH(29) && PUSH(30) && PUSH(31) && PUSH(32) && PUSH(33) &&
 | 
					 | 
				
			||||||
       PUSH(34) && PUSH(35) && PUSH(36) && PUSH(37) && PUSH(38) && PUSH(39)
 | 
					 | 
				
			||||||
       && PUSH(40) && PUSH(41) && PUSH(42) && PUSH(43) && PUSH(44) &&
 | 
					 | 
				
			||||||
       PUSH(45) && PUSH(46) && PUSH(47) && PUSH(48) && PUSH(49);
 | 
					 | 
				
			||||||
 #     undef PUSH
 | 
					 | 
				
			||||||
   }
 | 
					 | 
				
			||||||
#   elif defined(__GLIBC__)
 | 
					 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    const int TRACE_LEVEL(50);
 | 
					    const int TRACE_LEVEL(50);
 | 
				
			||||||
    void* ba[TRACE_LEVEL];
 | 
					    void* ba[TRACE_LEVEL];
 | 
				
			||||||
    for (int n(backtrace(ba, TRACE_LEVEL)), i(0); i<n; ++i)
 | 
					    for (int n(backtrace(ba, TRACE_LEVEL)), i(0); i<n; ++i)
 | 
				
			||||||
      _trace.push_back(ba[i]);
 | 
					      _trace.push_back(ba[i]);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  // crash ...?
 | 
				
			||||||
 | 
					// #   elif defined(__GNUG__)
 | 
				
			||||||
 | 
					//   {
 | 
				
			||||||
 | 
					// #   define PUSH(i)                                                       \
 | 
				
			||||||
 | 
					//     (__builtin_frame_address(i)!=0 ?                                   \
 | 
				
			||||||
 | 
					//      (_trace.push_back(__builtin_return_address(i)), true) : false)
 | 
				
			||||||
 | 
					//     PUSH(0) && PUSH(1) && PUSH(2) && PUSH(3) && PUSH(4) && PUSH(5) &&
 | 
				
			||||||
 | 
					//       PUSH(6) && PUSH(7) && PUSH(8) && PUSH(9) && PUSH(10) && PUSH(11) &&
 | 
				
			||||||
 | 
					//       PUSH(12) && PUSH(13) && PUSH(14) && PUSH(15) && PUSH(16) && PUSH(17)
 | 
				
			||||||
 | 
					//       && PUSH(18) && PUSH(19) && PUSH(20) && PUSH(21) && PUSH(22) &&
 | 
				
			||||||
 | 
					//       PUSH(23) && PUSH(24) && PUSH(25) && PUSH(26) && PUSH(27) && PUSH(28)
 | 
				
			||||||
 | 
					//       && PUSH(29) && PUSH(30) && PUSH(31) && PUSH(32) && PUSH(33) &&
 | 
				
			||||||
 | 
					//       PUSH(34) && PUSH(35) && PUSH(36) && PUSH(37) && PUSH(38) && PUSH(39)
 | 
				
			||||||
 | 
					//       && PUSH(40) && PUSH(41) && PUSH(42) && PUSH(43) && PUSH(44) &&
 | 
				
			||||||
 | 
					//       PUSH(45) && PUSH(46) && PUSH(47) && PUSH(48) && PUSH(49);
 | 
				
			||||||
 | 
					// #     undef PUSH
 | 
				
			||||||
 | 
					//   }
 | 
				
			||||||
#   else
 | 
					#   else
 | 
				
			||||||
#     warning "You need GNU gcc or GNU glibc to be able to use mrw::StackTrace"
 | 
					#     warning "You need GNU gcc or GNU glibc to be able to use mrw::StackTrace"
 | 
				
			||||||
#   endif
 | 
					#   endif
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user