Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -750,12 +750,18 @@ AC_SUBST(OFPROCESS_M, "OFProcess.m") AC_DEFINE(OF_HAVE_PROCESSES, 1, [Whether we have processes]) ]) AC_DEFUN([CHECK_BUILTIN_RETURN_ADDRESS], [ - AC_MSG_CHECKING(for __builtin_return_address) - AC_TRY_LINK([], [ + AC_MSG_CHECKING(for working __builtin_return_address) + AC_TRY_LINK([ + #if defined(__ppc__) || defined(__PPC__) + /* __builtin_return_address() is known to work correctly */ + #else + # error + #endif + ], [ __builtin_return_address(1); ], [ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_BUILTIN_RETURN_ADDRESS, 1, [Whether we have __builtin_return_address]) Index: src/exceptions/OFException.m ================================================================== --- src/exceptions/OFException.m +++ src/exceptions/OFException.m @@ -54,11 +54,11 @@ self = [super init]; _inClass = class; #if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) _backtraceSize = backtrace(_backtrace, 32); -#elif defined(HAVE_BUILTIN_RETURN_ADDRESS) && defined(__ppc__) +#elif defined(HAVE_BUILTIN_RETURN_ADDRESS) /* * We can't use a loop here, as __builtin_return_address() and * __builtin_frame_address() only allow a constant as parameter. */ # define GET_FRAME(i) \ @@ -144,11 +144,11 @@ objc_autoreleasePoolPop(pool); [backtrace makeImmutable]; return backtrace; -#elif defined(HAVE_BUILTIN_RETURN_ADDRESS) && defined(__ppc__) +#elif defined(HAVE_BUILTIN_RETURN_ADDRESS) OFMutableArray *backtrace = [OFMutableArray array]; void *pool = objc_autoreleasePoolPush(); uint_fast8_t i; for (i = 0; i < 32 && _backtrace[i] != NULL; i++) {