* spu-tdep.c (spu_return_value): Fix handling of
authorUlrich Weigand <uweigand@de.ibm.com>
Wed, 16 Nov 2011 18:30:09 +0000 (18:30 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Wed, 16 Nov 2011 18:30:09 +0000 (18:30 +0000)
TYPE_CALLING_CONVENTION annotation.

gdb/ChangeLog
gdb/spu-tdep.c

index 6915959a7bb30b205c9c525f46b289123ab476be..cfc14d38dcf06565ee71a1ed954c10eb4954897c 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-16  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * spu-tdep.c (spu_return_value): Fix handling of
+       TYPE_CALLING_CONVENTION annotation.
+
 2011-11-16  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * skip.c (skip_function_command): Work around uninitialized
index d42d94b1e9cf3b348e61bfba89207a8f688a58b0..080bed0cf3b29ca17a8041c89a60041d8fa37daf 100644 (file)
@@ -1458,11 +1458,19 @@ spu_return_value (struct gdbarch *gdbarch, struct type *func_type,
   enum return_value_convention rvc;
   int opencl_vector = 0;
 
-  if (func_type
-      && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GDB_IBM_OpenCL
-      && TYPE_CODE (type) == TYPE_CODE_ARRAY
-      && TYPE_VECTOR (type))
-    opencl_vector = 1;
+  if (func_type)
+    {
+      func_type = check_typedef (func_type);
+
+      if (TYPE_CODE (func_type) == TYPE_CODE_PTR)
+       func_type = check_typedef (TYPE_TARGET_TYPE (func_type));
+
+      if (TYPE_CODE (func_type) == TYPE_CODE_FUNC
+         && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GDB_IBM_OpenCL
+         && TYPE_CODE (type) == TYPE_CODE_ARRAY
+         && TYPE_VECTOR (type))
+       opencl_vector = 1;
+    }
 
   if (TYPE_LENGTH (type) <= (SPU_ARGN_REGNUM - SPU_ARG1_REGNUM + 1) * 16)
     rvc = RETURN_VALUE_REGISTER_CONVENTION;