* 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 6915959..cfc14d3 100644 (file)
@@ -1,5 +1,10 @@
 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
        variable warning.
 
index d42d94b..080bed0 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;