@ -483,7 +483,8 @@ void ABSL_ATTRIBUTE_NOINLINE TestWithPCInsideInlineFunction() {
}
}
}
}
# if defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target)
# if defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target) && \
( ( __ARM_ARCH > = 7 ) | | ! defined ( __ARM_PCS_VFP ) )
// Test that we correctly identify bounds of Thumb functions on ARM.
// Test that we correctly identify bounds of Thumb functions on ARM.
//
//
// Thumb functions have the lowest-order bit set in their addresses in the ELF
// Thumb functions have the lowest-order bit set in their addresses in the ELF
@ -502,6 +503,10 @@ void ABSL_ATTRIBUTE_NOINLINE TestWithPCInsideInlineFunction() {
// bit in the Thumb function's entry point. It will correctly compute the end of
// bit in the Thumb function's entry point. It will correctly compute the end of
// the Thumb function, it will find no overlap between the Thumb and ARM
// the Thumb function, it will find no overlap between the Thumb and ARM
// functions, and it will return the name of the ARM function.
// functions, and it will return the name of the ARM function.
//
// Unfortunately we cannot perform this test on armv6 or lower systems that use
// the hard float ABI because gcc refuses to compile thumb functions on such
// systems with a "sorry, unimplemented: Thumb-1 hard-float VFP ABI" error.
__attribute__ ( ( target ( " thumb " ) ) ) int ArmThumbOverlapThumb ( int x ) {
__attribute__ ( ( target ( " thumb " ) ) ) int ArmThumbOverlapThumb ( int x ) {
return x * x * x ;
return x * x * x ;
@ -521,7 +526,8 @@ void ABSL_ATTRIBUTE_NOINLINE TestArmThumbOverlap() {
# endif
# endif
}
}
# endif // defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target)
# endif // defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target) && ((__ARM_ARCH >= 7)
// || !defined(__ARM_PCS_VFP))
# elif defined(_WIN32)
# elif defined(_WIN32)
# if !defined(ABSL_CONSUME_DLL)
# if !defined(ABSL_CONSUME_DLL)
@ -596,7 +602,8 @@ int main(int argc, char **argv) {
TestWithPCInsideInlineFunction ( ) ;
TestWithPCInsideInlineFunction ( ) ;
TestWithPCInsideNonInlineFunction ( ) ;
TestWithPCInsideNonInlineFunction ( ) ;
TestWithReturnAddress ( ) ;
TestWithReturnAddress ( ) ;
# if defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target)
# if defined(__arm__) && ABSL_HAVE_ATTRIBUTE(target) && \
( ( __ARM_ARCH > = 7 ) | | ! defined ( __ARM_PCS_VFP ) )
TestArmThumbOverlap ( ) ;
TestArmThumbOverlap ( ) ;
# endif
# endif
# endif
# endif