+2019-06-12 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * lib/gcc-dg.exp: Filter unsupported features in PRU's TI ABI mode.
+ * lib/target-utils.exp: Ditto.
+ * lib/target-supports.exp (check_effective_target_function_pointers,
+ check_effective_target_large_return_values): New.
+
2019-06-12 Dimitar Dimitrov <dimitar@dinux.eu>
* lib/gcc-dg.exp: Bail on region overflow for tiny targets.
return "::unsupported::memory full"
}
+ if { [string match "*error: function pointers not supported*" $text]
+ && ![check_effective_target_function_pointers] } {
+ # The format here is important. See dg.exp.
+ return "::unsupported::funcptr"
+ }
+ if { [string match "*error: large return values not supported*" $text]
+ && ![check_effective_target_large_return_values] } {
+ # The format here is important. See dg.exp.
+ return "::unsupported::large return values"
+ }
+
return $text
}
}]
}
+# Return 1 if target supports function pointers, 0 otherwise.
+
+proc check_effective_target_function_pointers { } {
+ if { [istarget pru-*-*] } {
+ return [check_no_compiler_messages func_ptr_avail assembly {
+ #ifdef __PRU_EABI_GNU__
+ #error unsupported
+ #endif
+ }]
+ }
+ return 1
+}
+
+# Return 1 if target supports arbitrarily large return values, 0 otherwise.
+
+proc check_effective_target_large_return_values { } {
+ if { [istarget pru-*-*] } {
+ return [check_no_compiler_messages large_return_values assembly {
+ #ifdef __PRU_EABI_GNU__
+ #error unsupported
+ #endif
+ }]
+ }
+ return 1
+}
+
# Return 1 if we support 24-bit or larger array and structure sizes
# using default options, 0 otherwise.
# This implies at least a 32-bit address space, as no targets have an address
[string match "*exceeds local store*" $output] } {
return "memory full"
}
+ if { [string match "*error: function pointers not supported*" $output]
+ && ![check_effective_target_function_pointers] } {
+ return "function pointers not supported"
+ }
+ if { [string match "*error: large return values not supported*" $output]
+ && ![check_effective_target_large_return_values] } {
+ return "large return values not supported"
+ }
return ""
}