1/* Target-dependent code for PowerPC systems using the SVR4 ABI
2   for GDB, the GNU debugger.
3
4   Copyright (C) 2000-2020 Free Software Foundation, Inc.
5
6   This file is part of GDB.
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 3 of the License, or
11   (at your option) any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21#include "defs.h"
22#include "gdbcore.h"
23#include "inferior.h"
24#include "regcache.h"
25#include "value.h"
26#include "ppc-tdep.h"
27#include "target.h"
28#include "objfiles.h"
29#include "infcall.h"
30#include "dwarf2.h"
31#include "target-float.h"
32#include <algorithm>
33
34
35/* Check whether FTPYE is a (pointer to) function type that should use
36   the OpenCL vector ABI.  */
37
38static int
39ppc_sysv_use_opencl_abi (struct type *ftype)
40{
41  ftype = check_typedef (ftype);
42
43  if (ftype->code () == TYPE_CODE_PTR)
44    ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
45
46  return (ftype->code () == TYPE_CODE_FUNC
47	  && TYPE_CALLING_CONVENTION (ftype) == DW_CC_GDB_IBM_OpenCL);
48}
49
50/* Pass the arguments in either registers, or in the stack.  Using the
51   ppc sysv ABI, the first eight words of the argument list (that might
52   be less than eight parameters if some parameters occupy more than one
53   word) are passed in r3..r10 registers.  float and double parameters are
54   passed in fpr's, in addition to that.  Rest of the parameters if any
55   are passed in user stack.
56
57   If the function is returning a structure, then the return address is passed
58   in r3, then the first 7 words of the parameters can be passed in registers,
59   starting from r4.  */
60
61CORE_ADDR
62ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
63			      struct regcache *regcache, CORE_ADDR bp_addr,
64			      int nargs, struct value **args, CORE_ADDR sp,
65			      function_call_return_method return_method,
66			      CORE_ADDR struct_addr)
67{
68  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
69  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
70  int opencl_abi = ppc_sysv_use_opencl_abi (value_type (function));
71  ULONGEST saved_sp;
72  int argspace = 0;		/* 0 is an initial wrong guess.  */
73  int write_pass;
74
75  gdb_assert (tdep->wordsize == 4);
76
77  regcache_cooked_read_unsigned (regcache, gdbarch_sp_regnum (gdbarch),
78				 &saved_sp);
79
80  /* Go through the argument list twice.
81
82     Pass 1: Figure out how much new stack space is required for
83     arguments and pushed values.  Unlike the PowerOpen ABI, the SysV
84     ABI doesn't reserve any extra space for parameters which are put
85     in registers, but does always push structures and then pass their
86     address.
87
88     Pass 2: Replay the same computation but this time also write the
89     values out to the target.  */
90
91  for (write_pass = 0; write_pass < 2; write_pass++)
92    {
93      int argno;
94      /* Next available floating point register for float and double
95         arguments.  */
96      int freg = 1;
97      /* Next available general register for non-float, non-vector
98         arguments.  */
99      int greg = 3;
100      /* Next available vector register for vector arguments.  */
101      int vreg = 2;
102      /* Arguments start above the "LR save word" and "Back chain".  */
103      int argoffset = 2 * tdep->wordsize;
104      /* Structures start after the arguments.  */
105      int structoffset = argoffset + argspace;
106
107      /* If the function is returning a `struct', then the first word
108         (which will be passed in r3) is used for struct return
109         address.  In that case we should advance one word and start
110         from r4 register to copy parameters.  */
111      if (return_method == return_method_struct)
112	{
113	  if (write_pass)
114	    regcache_cooked_write_signed (regcache,
115					  tdep->ppc_gp0_regnum + greg,
116					  struct_addr);
117	  greg++;
118	}
119
120      for (argno = 0; argno < nargs; argno++)
121	{
122	  struct value *arg = args[argno];
123	  struct type *type = check_typedef (value_type (arg));
124	  int len = TYPE_LENGTH (type);
125	  const bfd_byte *val = value_contents (arg);
126
127	  if (type->code () == TYPE_CODE_FLT && len <= 8
128	      && !tdep->soft_float)
129	    {
130	      /* Floating point value converted to "double" then
131	         passed in an FP register, when the registers run out,
132	         8 byte aligned stack is used.  */
133	      if (freg <= 8)
134		{
135		  if (write_pass)
136		    {
137		      /* Always store the floating point value using
138		         the register's floating-point format.  */
139		      gdb_byte regval[PPC_MAX_REGISTER_SIZE];
140		      struct type *regtype
141			= register_type (gdbarch, tdep->ppc_fp0_regnum + freg);
142		      target_float_convert (val, type, regval, regtype);
143		      regcache->cooked_write (tdep->ppc_fp0_regnum + freg,
144					      regval);
145		    }
146		  freg++;
147		}
148	      else
149		{
150		  /* The SysV ABI tells us to convert floats to
151		     doubles before writing them to an 8 byte aligned
152		     stack location.  Unfortunately GCC does not do
153		     that, and stores floats into 4 byte aligned
154		     locations without converting them to doubles.
155		     Since there is no know compiler that actually
156		     follows the ABI here, we implement the GCC
157		     convention.  */
158
159		  /* Align to 4 bytes or 8 bytes depending on the type of
160		     the argument (float or double).  */
161		  argoffset = align_up (argoffset, len);
162		  if (write_pass)
163		      write_memory (sp + argoffset, val, len);
164		  argoffset += len;
165		}
166	    }
167	  else if (type->code () == TYPE_CODE_FLT
168		   && len == 16
169		   && !tdep->soft_float
170		   && (gdbarch_long_double_format (gdbarch)
171		       == floatformats_ibm_long_double))
172	    {
173	      /* IBM long double passed in two FP registers if
174		 available, otherwise 8-byte aligned stack.  */
175	      if (freg <= 7)
176		{
177		  if (write_pass)
178		    {
179		      regcache->cooked_write (tdep->ppc_fp0_regnum + freg, val);
180		      regcache->cooked_write (tdep->ppc_fp0_regnum + freg + 1,
181					      val + 8);
182		    }
183		  freg += 2;
184		}
185	      else
186		{
187		  argoffset = align_up (argoffset, 8);
188		  if (write_pass)
189		    write_memory (sp + argoffset, val, len);
190		  argoffset += 16;
191		}
192	    }
193	  else if (len == 8
194		   && (type->code () == TYPE_CODE_INT	/* long long */
195		       || type->code () == TYPE_CODE_FLT	/* double */
196		       || (type->code () == TYPE_CODE_DECFLOAT
197			   && tdep->soft_float)))
198	    {
199	      /* "long long" or soft-float "double" or "_Decimal64"
200	         passed in an odd/even register pair with the low
201	         addressed word in the odd register and the high
202	         addressed word in the even register, or when the
203	         registers run out an 8 byte aligned stack
204	         location.  */
205	      if (greg > 9)
206		{
207		  /* Just in case GREG was 10.  */
208		  greg = 11;
209		  argoffset = align_up (argoffset, 8);
210		  if (write_pass)
211		    write_memory (sp + argoffset, val, len);
212		  argoffset += 8;
213		}
214	      else
215		{
216		  /* Must start on an odd register - r3/r4 etc.  */
217		  if ((greg & 1) == 0)
218		    greg++;
219		  if (write_pass)
220		    {
221		      regcache->cooked_write (tdep->ppc_gp0_regnum + greg + 0,
222					      val + 0);
223		      regcache->cooked_write (tdep->ppc_gp0_regnum + greg + 1,
224					      val + 4);
225		    }
226		  greg += 2;
227		}
228	    }
229	  else if (len == 16
230		   && ((type->code () == TYPE_CODE_FLT
231			&& (gdbarch_long_double_format (gdbarch)
232			    == floatformats_ibm_long_double))
233		       || (type->code () == TYPE_CODE_DECFLOAT
234			   && tdep->soft_float)))
235	    {
236	      /* Soft-float IBM long double or _Decimal128 passed in
237		 four consecutive registers, or on the stack.  The
238		 registers are not necessarily odd/even pairs.  */
239	      if (greg > 7)
240		{
241		  greg = 11;
242		  argoffset = align_up (argoffset, 8);
243		  if (write_pass)
244		    write_memory (sp + argoffset, val, len);
245		  argoffset += 16;
246		}
247	      else
248		{
249		  if (write_pass)
250		    {
251		      regcache->cooked_write (tdep->ppc_gp0_regnum + greg + 0,
252					      val + 0);
253		      regcache->cooked_write (tdep->ppc_gp0_regnum + greg + 1,
254					      val + 4);
255		      regcache->cooked_write (tdep->ppc_gp0_regnum + greg + 2,
256					      val + 8);
257		      regcache->cooked_write (tdep->ppc_gp0_regnum + greg + 3,
258					      val + 12);
259		    }
260		  greg += 4;
261		}
262	    }
263	  else if (type->code () == TYPE_CODE_DECFLOAT && len <= 8
264		   && !tdep->soft_float)
265	    {
266	      /* 32-bit and 64-bit decimal floats go in f1 .. f8.  They can
267	         end up in memory.  */
268
269	      if (freg <= 8)
270		{
271		  if (write_pass)
272		    {
273		      gdb_byte regval[PPC_MAX_REGISTER_SIZE];
274		      const gdb_byte *p;
275
276		      /* 32-bit decimal floats are right aligned in the
277			 doubleword.  */
278		      if (TYPE_LENGTH (type) == 4)
279		      {
280			memcpy (regval + 4, val, 4);
281			p = regval;
282		      }
283		      else
284			p = val;
285
286		      regcache->cooked_write (tdep->ppc_fp0_regnum + freg, p);
287		    }
288
289		  freg++;
290		}
291	      else
292		{
293		  argoffset = align_up (argoffset, len);
294
295		  if (write_pass)
296		    /* Write value in the stack's parameter save area.  */
297		    write_memory (sp + argoffset, val, len);
298
299		  argoffset += len;
300		}
301	    }
302	  else if (type->code () == TYPE_CODE_DECFLOAT && len == 16
303		   && !tdep->soft_float)
304	    {
305	      /* 128-bit decimal floats go in f2 .. f7, always in even/odd
306		 pairs.  They can end up in memory, using two doublewords.  */
307
308	      if (freg <= 6)
309		{
310		  /* Make sure freg is even.  */
311		  freg += freg & 1;
312
313		  if (write_pass)
314		    {
315		      regcache->cooked_write (tdep->ppc_fp0_regnum + freg, val);
316		      regcache->cooked_write (tdep->ppc_fp0_regnum + freg + 1,
317					      val + 8);
318		    }
319		}
320	      else
321		{
322		  argoffset = align_up (argoffset, 8);
323
324		  if (write_pass)
325		    write_memory (sp + argoffset, val, 16);
326
327		  argoffset += 16;
328		}
329
330	      /* If a 128-bit decimal float goes to the stack because only f7
331	         and f8 are free (thus there's no even/odd register pair
332		 available), these registers should be marked as occupied.
333		 Hence we increase freg even when writing to memory.  */
334	      freg += 2;
335	    }
336	  else if (len < 16
337		   && type->code () == TYPE_CODE_ARRAY
338		   && TYPE_VECTOR (type)
339		   && opencl_abi)
340	    {
341	      /* OpenCL vectors shorter than 16 bytes are passed as if
342		 a series of independent scalars.  */
343	      struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type));
344	      int i, nelt = TYPE_LENGTH (type) / TYPE_LENGTH (eltype);
345
346	      for (i = 0; i < nelt; i++)
347		{
348		  const gdb_byte *elval = val + i * TYPE_LENGTH (eltype);
349
350		  if (eltype->code () == TYPE_CODE_FLT && !tdep->soft_float)
351		    {
352		      if (freg <= 8)
353			{
354			  if (write_pass)
355			    {
356			      int regnum = tdep->ppc_fp0_regnum + freg;
357			      gdb_byte regval[PPC_MAX_REGISTER_SIZE];
358			      struct type *regtype
359				= register_type (gdbarch, regnum);
360			      target_float_convert (elval, eltype,
361						    regval, regtype);
362			      regcache->cooked_write (regnum, regval);
363			    }
364			  freg++;
365			}
366		      else
367			{
368			  argoffset = align_up (argoffset, len);
369			  if (write_pass)
370			    write_memory (sp + argoffset, val, len);
371			  argoffset += len;
372			}
373		    }
374		  else if (TYPE_LENGTH (eltype) == 8)
375		    {
376		      if (greg > 9)
377			{
378			  /* Just in case GREG was 10.  */
379			  greg = 11;
380			  argoffset = align_up (argoffset, 8);
381			  if (write_pass)
382			    write_memory (sp + argoffset, elval,
383					  TYPE_LENGTH (eltype));
384			  argoffset += 8;
385			}
386		      else
387			{
388			  /* Must start on an odd register - r3/r4 etc.  */
389			  if ((greg & 1) == 0)
390			    greg++;
391			  if (write_pass)
392			    {
393			      int regnum = tdep->ppc_gp0_regnum + greg;
394			      regcache->cooked_write (regnum + 0, elval + 0);
395			      regcache->cooked_write (regnum + 1, elval + 4);
396			    }
397			  greg += 2;
398			}
399		    }
400		  else
401		    {
402		      gdb_byte word[PPC_MAX_REGISTER_SIZE];
403		      store_unsigned_integer (word, tdep->wordsize, byte_order,
404					      unpack_long (eltype, elval));
405
406		      if (greg <= 10)
407			{
408			  if (write_pass)
409			    regcache->cooked_write (tdep->ppc_gp0_regnum + greg,
410						    word);
411			  greg++;
412			}
413		      else
414			{
415			  argoffset = align_up (argoffset, tdep->wordsize);
416			  if (write_pass)
417			    write_memory (sp + argoffset, word, tdep->wordsize);
418			  argoffset += tdep->wordsize;
419			}
420		    }
421		}
422	    }
423	  else if (len >= 16
424		   && type->code () == TYPE_CODE_ARRAY
425		   && TYPE_VECTOR (type)
426		   && opencl_abi)
427	    {
428	      /* OpenCL vectors 16 bytes or longer are passed as if
429		 a series of AltiVec vectors.  */
430	      int i;
431
432	      for (i = 0; i < len / 16; i++)
433		{
434		  const gdb_byte *elval = val + i * 16;
435
436		  if (vreg <= 13)
437		    {
438		      if (write_pass)
439			regcache->cooked_write (tdep->ppc_vr0_regnum + vreg,
440						elval);
441		      vreg++;
442		    }
443		  else
444		    {
445		      argoffset = align_up (argoffset, 16);
446		      if (write_pass)
447			write_memory (sp + argoffset, elval, 16);
448		      argoffset += 16;
449		    }
450		}
451	    }
452	  else if (len == 16
453		   && type->code () == TYPE_CODE_ARRAY
454		   && TYPE_VECTOR (type)
455		   && tdep->vector_abi == POWERPC_VEC_ALTIVEC)
456	    {
457	      /* Vector parameter passed in an Altivec register, or
458	         when that runs out, 16 byte aligned stack location.  */
459	      if (vreg <= 13)
460		{
461		  if (write_pass)
462		    regcache->cooked_write (tdep->ppc_vr0_regnum + vreg, val);
463		  vreg++;
464		}
465	      else
466		{
467		  argoffset = align_up (argoffset, 16);
468		  if (write_pass)
469		    write_memory (sp + argoffset, val, 16);
470		  argoffset += 16;
471		}
472	    }
473	  else if (len == 8
474		   && type->code () == TYPE_CODE_ARRAY
475		   && TYPE_VECTOR (type)
476		   && tdep->vector_abi == POWERPC_VEC_SPE)
477	    {
478	      /* Vector parameter passed in an e500 register, or when
479	         that runs out, 8 byte aligned stack location.  Note
480	         that since e500 vector and general purpose registers
481	         both map onto the same underlying register set, a
482	         "greg" and not a "vreg" is consumed here.  A cooked
483	         write stores the value in the correct locations
484	         within the raw register cache.  */
485	      if (greg <= 10)
486		{
487		  if (write_pass)
488		    regcache->cooked_write (tdep->ppc_ev0_regnum + greg, val);
489		  greg++;
490		}
491	      else
492		{
493		  argoffset = align_up (argoffset, 8);
494		  if (write_pass)
495		    write_memory (sp + argoffset, val, 8);
496		  argoffset += 8;
497		}
498	    }
499	  else
500	    {
501	      /* Reduce the parameter down to something that fits in a
502	         "word".  */
503	      gdb_byte word[PPC_MAX_REGISTER_SIZE];
504	      memset (word, 0, PPC_MAX_REGISTER_SIZE);
505	      if (len > tdep->wordsize
506		  || type->code () == TYPE_CODE_STRUCT
507		  || type->code () == TYPE_CODE_UNION)
508		{
509		  /* Structs and large values are put in an
510		     aligned stack slot ...  */
511		  if (type->code () == TYPE_CODE_ARRAY
512		      && TYPE_VECTOR (type)
513		      && len >= 16)
514		    structoffset = align_up (structoffset, 16);
515		  else
516		    structoffset = align_up (structoffset, 8);
517
518		  if (write_pass)
519		    write_memory (sp + structoffset, val, len);
520		  /* ... and then a "word" pointing to that address is
521		     passed as the parameter.  */
522		  store_unsigned_integer (word, tdep->wordsize, byte_order,
523					  sp + structoffset);
524		  structoffset += len;
525		}
526	      else if (type->code () == TYPE_CODE_INT)
527		/* Sign or zero extend the "int" into a "word".  */
528		store_unsigned_integer (word, tdep->wordsize, byte_order,
529					unpack_long (type, val));
530	      else
531		/* Always goes in the low address.  */
532		memcpy (word, val, len);
533	      /* Store that "word" in a register, or on the stack.
534	         The words have "4" byte alignment.  */
535	      if (greg <= 10)
536		{
537		  if (write_pass)
538		    regcache->cooked_write (tdep->ppc_gp0_regnum + greg, word);
539		  greg++;
540		}
541	      else
542		{
543		  argoffset = align_up (argoffset, tdep->wordsize);
544		  if (write_pass)
545		    write_memory (sp + argoffset, word, tdep->wordsize);
546		  argoffset += tdep->wordsize;
547		}
548	    }
549	}
550
551      /* Compute the actual stack space requirements.  */
552      if (!write_pass)
553	{
554	  /* Remember the amount of space needed by the arguments.  */
555	  argspace = argoffset;
556	  /* Allocate space for both the arguments and the structures.  */
557	  sp -= (argoffset + structoffset);
558	  /* Ensure that the stack is still 16 byte aligned.  */
559	  sp = align_down (sp, 16);
560	}
561
562      /* The psABI says that "A caller of a function that takes a
563	 variable argument list shall set condition register bit 6 to
564	 1 if it passes one or more arguments in the floating-point
565	 registers.  It is strongly recommended that the caller set the
566	 bit to 0 otherwise..."  Doing this for normal functions too
567	 shouldn't hurt.  */
568      if (write_pass)
569	{
570	  ULONGEST cr;
571
572	  regcache_cooked_read_unsigned (regcache, tdep->ppc_cr_regnum, &cr);
573	  if (freg > 1)
574	    cr |= 0x02000000;
575	  else
576	    cr &= ~0x02000000;
577	  regcache_cooked_write_unsigned (regcache, tdep->ppc_cr_regnum, cr);
578	}
579    }
580
581  /* Update %sp.   */
582  regcache_cooked_write_signed (regcache, gdbarch_sp_regnum (gdbarch), sp);
583
584  /* Write the backchain (it occupies WORDSIZED bytes).  */
585  write_memory_signed_integer (sp, tdep->wordsize, byte_order, saved_sp);
586
587  /* Point the inferior function call's return address at the dummy's
588     breakpoint.  */
589  regcache_cooked_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);
590
591  return sp;
592}
593
594/* Handle the return-value conventions for Decimal Floating Point values.  */
595static enum return_value_convention
596get_decimal_float_return_value (struct gdbarch *gdbarch, struct type *valtype,
597				struct regcache *regcache, gdb_byte *readbuf,
598				const gdb_byte *writebuf)
599{
600  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
601
602  gdb_assert (valtype->code () == TYPE_CODE_DECFLOAT);
603
604  /* 32-bit and 64-bit decimal floats in f1.  */
605  if (TYPE_LENGTH (valtype) <= 8)
606    {
607      if (writebuf != NULL)
608	{
609	  gdb_byte regval[PPC_MAX_REGISTER_SIZE];
610	  const gdb_byte *p;
611
612	  /* 32-bit decimal float is right aligned in the doubleword.  */
613	  if (TYPE_LENGTH (valtype) == 4)
614	    {
615	      memcpy (regval + 4, writebuf, 4);
616	      p = regval;
617	    }
618	  else
619	    p = writebuf;
620
621	  regcache->cooked_write (tdep->ppc_fp0_regnum + 1, p);
622	}
623      if (readbuf != NULL)
624	{
625	  regcache->cooked_read (tdep->ppc_fp0_regnum + 1, readbuf);
626
627	  /* Left align 32-bit decimal float.  */
628	  if (TYPE_LENGTH (valtype) == 4)
629	    memcpy (readbuf, readbuf + 4, 4);
630	}
631    }
632  /* 128-bit decimal floats in f2,f3.  */
633  else if (TYPE_LENGTH (valtype) == 16)
634    {
635      if (writebuf != NULL || readbuf != NULL)
636	{
637	  int i;
638
639	  for (i = 0; i < 2; i++)
640	    {
641	      if (writebuf != NULL)
642		regcache->cooked_write (tdep->ppc_fp0_regnum + 2 + i,
643					writebuf + i * 8);
644	      if (readbuf != NULL)
645		regcache->cooked_read (tdep->ppc_fp0_regnum + 2 + i,
646				       readbuf + i * 8);
647	    }
648	}
649    }
650  else
651    /* Can't happen.  */
652    internal_error (__FILE__, __LINE__, _("Unknown decimal float size."));
653
654  return RETURN_VALUE_REGISTER_CONVENTION;
655}
656
657/* Handle the return-value conventions specified by the SysV 32-bit
658   PowerPC ABI (including all the supplements):
659
660   no floating-point: floating-point values returned using 32-bit
661   general-purpose registers.
662
663   Altivec: 128-bit vectors returned using vector registers.
664
665   e500: 64-bit vectors returned using the full full 64 bit EV
666   register, floating-point values returned using 32-bit
667   general-purpose registers.
668
669   GCC (broken): Small struct values right (instead of left) aligned
670   when returned in general-purpose registers.  */
671
672static enum return_value_convention
673do_ppc_sysv_return_value (struct gdbarch *gdbarch, struct type *func_type,
674			  struct type *type, struct regcache *regcache,
675			  gdb_byte *readbuf, const gdb_byte *writebuf,
676			  int broken_gcc)
677{
678  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
679  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
680  int opencl_abi = func_type? ppc_sysv_use_opencl_abi (func_type) : 0;
681
682  gdb_assert (tdep->wordsize == 4);
683
684  if (type->code () == TYPE_CODE_FLT
685      && TYPE_LENGTH (type) <= 8
686      && !tdep->soft_float)
687    {
688      if (readbuf)
689	{
690	  /* Floats and doubles stored in "f1".  Convert the value to
691	     the required type.  */
692	  gdb_byte regval[PPC_MAX_REGISTER_SIZE];
693	  struct type *regtype = register_type (gdbarch,
694                                                tdep->ppc_fp0_regnum + 1);
695	  regcache->cooked_read (tdep->ppc_fp0_regnum + 1, regval);
696	  target_float_convert (regval, regtype, readbuf, type);
697	}
698      if (writebuf)
699	{
700	  /* Floats and doubles stored in "f1".  Convert the value to
701	     the register's "double" type.  */
702	  gdb_byte regval[PPC_MAX_REGISTER_SIZE];
703	  struct type *regtype = register_type (gdbarch, tdep->ppc_fp0_regnum);
704	  target_float_convert (writebuf, type, regval, regtype);
705	  regcache->cooked_write (tdep->ppc_fp0_regnum + 1, regval);
706	}
707      return RETURN_VALUE_REGISTER_CONVENTION;
708    }
709  if (type->code () == TYPE_CODE_FLT
710      && TYPE_LENGTH (type) == 16
711      && !tdep->soft_float
712      && (gdbarch_long_double_format (gdbarch)
713	  == floatformats_ibm_long_double))
714    {
715      /* IBM long double stored in f1 and f2.  */
716      if (readbuf)
717	{
718	  regcache->cooked_read (tdep->ppc_fp0_regnum + 1, readbuf);
719	  regcache->cooked_read (tdep->ppc_fp0_regnum + 2, readbuf + 8);
720	}
721      if (writebuf)
722	{
723	  regcache->cooked_write (tdep->ppc_fp0_regnum + 1, writebuf);
724	  regcache->cooked_write (tdep->ppc_fp0_regnum + 2, writebuf + 8);
725	}
726      return RETURN_VALUE_REGISTER_CONVENTION;
727    }
728  if (TYPE_LENGTH (type) == 16
729      && ((type->code () == TYPE_CODE_FLT
730	   && (gdbarch_long_double_format (gdbarch)
731	       == floatformats_ibm_long_double))
732	  || (type->code () == TYPE_CODE_DECFLOAT && tdep->soft_float)))
733    {
734      /* Soft-float IBM long double or _Decimal128 stored in r3, r4,
735	 r5, r6.  */
736      if (readbuf)
737	{
738	  regcache->cooked_read (tdep->ppc_gp0_regnum + 3, readbuf);
739	  regcache->cooked_read (tdep->ppc_gp0_regnum + 4, readbuf + 4);
740	  regcache->cooked_read (tdep->ppc_gp0_regnum + 5, readbuf + 8);
741	  regcache->cooked_read (tdep->ppc_gp0_regnum + 6, readbuf + 12);
742	}
743      if (writebuf)
744	{
745	  regcache->cooked_write (tdep->ppc_gp0_regnum + 3, writebuf);
746	  regcache->cooked_write (tdep->ppc_gp0_regnum + 4, writebuf + 4);
747	  regcache->cooked_write (tdep->ppc_gp0_regnum + 5, writebuf + 8);
748	  regcache->cooked_write (tdep->ppc_gp0_regnum + 6, writebuf + 12);
749	}
750      return RETURN_VALUE_REGISTER_CONVENTION;
751    }
752  if ((type->code () == TYPE_CODE_INT && TYPE_LENGTH (type) == 8)
753      || (type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8)
754      || (type->code () == TYPE_CODE_DECFLOAT && TYPE_LENGTH (type) == 8
755	  && tdep->soft_float))
756    {
757      if (readbuf)
758	{
759	  /* A long long, double or _Decimal64 stored in the 32 bit
760	     r3/r4.  */
761	  regcache->cooked_read (tdep->ppc_gp0_regnum + 3, readbuf + 0);
762	  regcache->cooked_read (tdep->ppc_gp0_regnum + 4, readbuf + 4);
763	}
764      if (writebuf)
765	{
766	  /* A long long, double or _Decimal64 stored in the 32 bit
767	     r3/r4.  */
768	  regcache->cooked_write (tdep->ppc_gp0_regnum + 3, writebuf + 0);
769	  regcache->cooked_write (tdep->ppc_gp0_regnum + 4, writebuf + 4);
770	}
771      return RETURN_VALUE_REGISTER_CONVENTION;
772    }
773  if (type->code () == TYPE_CODE_DECFLOAT && !tdep->soft_float)
774    return get_decimal_float_return_value (gdbarch, type, regcache, readbuf,
775					   writebuf);
776  else if ((type->code () == TYPE_CODE_INT
777	    || type->code () == TYPE_CODE_CHAR
778	    || type->code () == TYPE_CODE_BOOL
779	    || type->code () == TYPE_CODE_PTR
780	    || TYPE_IS_REFERENCE (type)
781	    || type->code () == TYPE_CODE_ENUM)
782	   && TYPE_LENGTH (type) <= tdep->wordsize)
783    {
784      if (readbuf)
785	{
786	  /* Some sort of integer stored in r3.  Since TYPE isn't
787	     bigger than the register, sign extension isn't a problem
788	     - just do everything unsigned.  */
789	  ULONGEST regval;
790	  regcache_cooked_read_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
791					 &regval);
792	  store_unsigned_integer (readbuf, TYPE_LENGTH (type), byte_order,
793				  regval);
794	}
795      if (writebuf)
796	{
797	  /* Some sort of integer stored in r3.  Use unpack_long since
798	     that should handle any required sign extension.  */
799	  regcache_cooked_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
800					  unpack_long (type, writebuf));
801	}
802      return RETURN_VALUE_REGISTER_CONVENTION;
803    }
804  /* OpenCL vectors < 16 bytes are returned as distinct
805     scalars in f1..f2 or r3..r10.  */
806  if (type->code () == TYPE_CODE_ARRAY
807      && TYPE_VECTOR (type)
808      && TYPE_LENGTH (type) < 16
809      && opencl_abi)
810    {
811      struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type));
812      int i, nelt = TYPE_LENGTH (type) / TYPE_LENGTH (eltype);
813
814      for (i = 0; i < nelt; i++)
815	{
816	  int offset = i * TYPE_LENGTH (eltype);
817
818	  if (eltype->code () == TYPE_CODE_FLT)
819	    {
820	      int regnum = tdep->ppc_fp0_regnum + 1 + i;
821	      gdb_byte regval[PPC_MAX_REGISTER_SIZE];
822	      struct type *regtype = register_type (gdbarch, regnum);
823
824	      if (writebuf != NULL)
825		{
826		  target_float_convert (writebuf + offset, eltype,
827					regval, regtype);
828		  regcache->cooked_write (regnum, regval);
829		}
830	      if (readbuf != NULL)
831		{
832		  regcache->cooked_read (regnum, regval);
833		  target_float_convert (regval, regtype,
834					readbuf + offset, eltype);
835		}
836	    }
837	  else
838	    {
839	      int regnum = tdep->ppc_gp0_regnum + 3 + i;
840	      ULONGEST regval;
841
842	      if (writebuf != NULL)
843		{
844		  regval = unpack_long (eltype, writebuf + offset);
845		  regcache_cooked_write_unsigned (regcache, regnum, regval);
846		}
847	      if (readbuf != NULL)
848		{
849		  regcache_cooked_read_unsigned (regcache, regnum, &regval);
850		  store_unsigned_integer (readbuf + offset,
851					  TYPE_LENGTH (eltype), byte_order,
852					  regval);
853		}
854	    }
855	}
856
857      return RETURN_VALUE_REGISTER_CONVENTION;
858    }
859  /* OpenCL vectors >= 16 bytes are returned in v2..v9.  */
860  if (type->code () == TYPE_CODE_ARRAY
861      && TYPE_VECTOR (type)
862      && TYPE_LENGTH (type) >= 16
863      && opencl_abi)
864    {
865      int n_regs = TYPE_LENGTH (type) / 16;
866      int i;
867
868      for (i = 0; i < n_regs; i++)
869	{
870	  int offset = i * 16;
871	  int regnum = tdep->ppc_vr0_regnum + 2 + i;
872
873	  if (writebuf != NULL)
874	    regcache->cooked_write (regnum, writebuf + offset);
875	  if (readbuf != NULL)
876	    regcache->cooked_read (regnum, readbuf + offset);
877	}
878
879      return RETURN_VALUE_REGISTER_CONVENTION;
880    }
881  if (TYPE_LENGTH (type) == 16
882      && type->code () == TYPE_CODE_ARRAY
883      && TYPE_VECTOR (type)
884      && tdep->vector_abi == POWERPC_VEC_ALTIVEC)
885    {
886      if (readbuf)
887	{
888	  /* Altivec places the return value in "v2".  */
889	  regcache->cooked_read (tdep->ppc_vr0_regnum + 2, readbuf);
890	}
891      if (writebuf)
892	{
893	  /* Altivec places the return value in "v2".  */
894	  regcache->cooked_write (tdep->ppc_vr0_regnum + 2, writebuf);
895	}
896      return RETURN_VALUE_REGISTER_CONVENTION;
897    }
898  if (TYPE_LENGTH (type) == 16
899      && type->code () == TYPE_CODE_ARRAY
900      && TYPE_VECTOR (type)
901      && tdep->vector_abi == POWERPC_VEC_GENERIC)
902    {
903      /* GCC -maltivec -mabi=no-altivec returns vectors in r3/r4/r5/r6.
904	 GCC without AltiVec returns them in memory, but it warns about
905	 ABI risks in that case; we don't try to support it.  */
906      if (readbuf)
907	{
908	  regcache->cooked_read (tdep->ppc_gp0_regnum + 3, readbuf + 0);
909	  regcache->cooked_read (tdep->ppc_gp0_regnum + 4, readbuf + 4);
910	  regcache->cooked_read (tdep->ppc_gp0_regnum + 5, readbuf + 8);
911	  regcache->cooked_read (tdep->ppc_gp0_regnum + 6, readbuf + 12);
912	}
913      if (writebuf)
914	{
915	  regcache->cooked_write (tdep->ppc_gp0_regnum + 3, writebuf + 0);
916	  regcache->cooked_write (tdep->ppc_gp0_regnum + 4, writebuf + 4);
917	  regcache->cooked_write (tdep->ppc_gp0_regnum + 5, writebuf + 8);
918	  regcache->cooked_write (tdep->ppc_gp0_regnum + 6, writebuf + 12);
919	}
920      return RETURN_VALUE_REGISTER_CONVENTION;
921    }
922  if (TYPE_LENGTH (type) == 8
923      && type->code () == TYPE_CODE_ARRAY
924      && TYPE_VECTOR (type)
925      && tdep->vector_abi == POWERPC_VEC_SPE)
926    {
927      /* The e500 ABI places return values for the 64-bit DSP types
928	 (__ev64_opaque__) in r3.  However, in GDB-speak, ev3
929	 corresponds to the entire r3 value for e500, whereas GDB's r3
930	 only corresponds to the least significant 32-bits.  So place
931	 the 64-bit DSP type's value in ev3.  */
932      if (readbuf)
933	regcache->cooked_read (tdep->ppc_ev0_regnum + 3, readbuf);
934      if (writebuf)
935	regcache->cooked_write (tdep->ppc_ev0_regnum + 3, writebuf);
936      return RETURN_VALUE_REGISTER_CONVENTION;
937    }
938  if (broken_gcc && TYPE_LENGTH (type) <= 8)
939    {
940      /* GCC screwed up for structures or unions whose size is less
941	 than or equal to 8 bytes..  Instead of left-aligning, it
942	 right-aligns the data into the buffer formed by r3, r4.  */
943      gdb_byte regvals[PPC_MAX_REGISTER_SIZE * 2];
944      int len = TYPE_LENGTH (type);
945      int offset = (2 * tdep->wordsize - len) % tdep->wordsize;
946
947      if (readbuf)
948	{
949	  regcache->cooked_read (tdep->ppc_gp0_regnum + 3,
950				 regvals + 0 * tdep->wordsize);
951	  if (len > tdep->wordsize)
952	    regcache->cooked_read (tdep->ppc_gp0_regnum + 4,
953				   regvals + 1 * tdep->wordsize);
954	  memcpy (readbuf, regvals + offset, len);
955	}
956      if (writebuf)
957	{
958	  memset (regvals, 0, sizeof regvals);
959	  memcpy (regvals + offset, writebuf, len);
960	  regcache->cooked_write (tdep->ppc_gp0_regnum + 3,
961				  regvals + 0 * tdep->wordsize);
962	  if (len > tdep->wordsize)
963	    regcache->cooked_write (tdep->ppc_gp0_regnum + 4,
964				    regvals + 1 * tdep->wordsize);
965	}
966
967      return RETURN_VALUE_REGISTER_CONVENTION;
968    }
969  if (TYPE_LENGTH (type) <= 8)
970    {
971      if (readbuf)
972	{
973	  /* This matches SVr4 PPC, it does not match GCC.  */
974	  /* The value is right-padded to 8 bytes and then loaded, as
975	     two "words", into r3/r4.  */
976	  gdb_byte regvals[PPC_MAX_REGISTER_SIZE * 2];
977	  regcache->cooked_read (tdep->ppc_gp0_regnum + 3,
978				 regvals + 0 * tdep->wordsize);
979	  if (TYPE_LENGTH (type) > tdep->wordsize)
980	    regcache->cooked_read (tdep->ppc_gp0_regnum + 4,
981				   regvals + 1 * tdep->wordsize);
982	  memcpy (readbuf, regvals, TYPE_LENGTH (type));
983	}
984      if (writebuf)
985	{
986	  /* This matches SVr4 PPC, it does not match GCC.  */
987	  /* The value is padded out to 8 bytes and then loaded, as
988	     two "words" into r3/r4.  */
989	  gdb_byte regvals[PPC_MAX_REGISTER_SIZE * 2];
990	  memset (regvals, 0, sizeof regvals);
991	  memcpy (regvals, writebuf, TYPE_LENGTH (type));
992	  regcache->cooked_write (tdep->ppc_gp0_regnum + 3,
993				  regvals + 0 * tdep->wordsize);
994	  if (TYPE_LENGTH (type) > tdep->wordsize)
995	    regcache->cooked_write (tdep->ppc_gp0_regnum + 4,
996				    regvals + 1 * tdep->wordsize);
997	}
998      return RETURN_VALUE_REGISTER_CONVENTION;
999    }
1000  return RETURN_VALUE_STRUCT_CONVENTION;
1001}
1002
1003enum return_value_convention
1004ppc_sysv_abi_return_value (struct gdbarch *gdbarch, struct value *function,
1005			   struct type *valtype, struct regcache *regcache,
1006			   gdb_byte *readbuf, const gdb_byte *writebuf)
1007{
1008  return do_ppc_sysv_return_value (gdbarch,
1009				   function ? value_type (function) : NULL,
1010				   valtype, regcache, readbuf, writebuf, 0);
1011}
1012
1013enum return_value_convention
1014ppc_sysv_abi_broken_return_value (struct gdbarch *gdbarch,
1015				  struct value *function,
1016				  struct type *valtype,
1017				  struct regcache *regcache,
1018				  gdb_byte *readbuf, const gdb_byte *writebuf)
1019{
1020  return do_ppc_sysv_return_value (gdbarch,
1021				   function ? value_type (function) : NULL,
1022				   valtype, regcache, readbuf, writebuf, 1);
1023}
1024
1025/* The helper function for 64-bit SYSV push_dummy_call.  Converts the
1026   function's code address back into the function's descriptor
1027   address.
1028
1029   Find a value for the TOC register.  Every symbol should have both
1030   ".FN" and "FN" in the minimal symbol table.  "FN" points at the
1031   FN's descriptor, while ".FN" points at the entry point (which
1032   matches FUNC_ADDR).  Need to reverse from FUNC_ADDR back to the
1033   FN's descriptor address (while at the same time being careful to
1034   find "FN" in the same object file as ".FN").  */
1035
1036static int
1037convert_code_addr_to_desc_addr (CORE_ADDR code_addr, CORE_ADDR *desc_addr)
1038{
1039  struct obj_section *dot_fn_section;
1040  struct bound_minimal_symbol dot_fn;
1041  struct bound_minimal_symbol fn;
1042
1043  /* Find the minimal symbol that corresponds to CODE_ADDR (should
1044     have a name of the form ".FN").  */
1045  dot_fn = lookup_minimal_symbol_by_pc (code_addr);
1046  if (dot_fn.minsym == NULL || dot_fn.minsym->linkage_name ()[0] != '.')
1047    return 0;
1048  /* Get the section that contains CODE_ADDR.  Need this for the
1049     "objfile" that it contains.  */
1050  dot_fn_section = find_pc_section (code_addr);
1051  if (dot_fn_section == NULL || dot_fn_section->objfile == NULL)
1052    return 0;
1053  /* Now find the corresponding "FN" (dropping ".") minimal symbol's
1054     address.  Only look for the minimal symbol in ".FN"'s object file
1055     - avoids problems when two object files (i.e., shared libraries)
1056     contain a minimal symbol with the same name.  */
1057  fn = lookup_minimal_symbol (dot_fn.minsym->linkage_name () + 1, NULL,
1058			      dot_fn_section->objfile);
1059  if (fn.minsym == NULL)
1060    return 0;
1061  /* Found a descriptor.  */
1062  (*desc_addr) = BMSYMBOL_VALUE_ADDRESS (fn);
1063  return 1;
1064}
1065
1066/* Walk down the type tree of TYPE counting consecutive base elements.
1067   If *FIELD_TYPE is NULL, then set it to the first valid floating point
1068   or vector type.  If a non-floating point or vector type is found, or
1069   if a floating point or vector type that doesn't match a non-NULL
1070   *FIELD_TYPE is found, then return -1, otherwise return the count in the
1071   sub-tree.  */
1072
1073static LONGEST
1074ppc64_aggregate_candidate (struct type *type,
1075			   struct type **field_type)
1076{
1077  type = check_typedef (type);
1078
1079  switch (type->code ())
1080    {
1081    case TYPE_CODE_FLT:
1082    case TYPE_CODE_DECFLOAT:
1083      if (!*field_type)
1084	*field_type = type;
1085      if ((*field_type)->code () == type->code ()
1086	  && TYPE_LENGTH (*field_type) == TYPE_LENGTH (type))
1087	return 1;
1088      break;
1089
1090    case TYPE_CODE_COMPLEX:
1091      type = TYPE_TARGET_TYPE (type);
1092      if (type->code () == TYPE_CODE_FLT
1093	  || type->code () == TYPE_CODE_DECFLOAT)
1094	{
1095	  if (!*field_type)
1096	    *field_type = type;
1097	  if ((*field_type)->code () == type->code ()
1098	      && TYPE_LENGTH (*field_type) == TYPE_LENGTH (type))
1099	    return 2;
1100	}
1101      break;
1102
1103    case TYPE_CODE_ARRAY:
1104      if (TYPE_VECTOR (type))
1105	{
1106	  if (!*field_type)
1107	    *field_type = type;
1108	  if ((*field_type)->code () == type->code ()
1109	      && TYPE_LENGTH (*field_type) == TYPE_LENGTH (type))
1110	    return 1;
1111	}
1112      else
1113	{
1114	  LONGEST count, low_bound, high_bound;
1115
1116	  count = ppc64_aggregate_candidate
1117		   (TYPE_TARGET_TYPE (type), field_type);
1118	  if (count == -1)
1119	    return -1;
1120
1121	  if (!get_array_bounds (type, &low_bound, &high_bound))
1122	    return -1;
1123	  count *= high_bound - low_bound;
1124
1125	  /* There must be no padding.  */
1126	  if (count == 0)
1127	    return TYPE_LENGTH (type) == 0 ? 0 : -1;
1128	  else if (TYPE_LENGTH (type) != count * TYPE_LENGTH (*field_type))
1129	    return -1;
1130
1131	  return count;
1132	}
1133      break;
1134
1135    case TYPE_CODE_STRUCT:
1136    case TYPE_CODE_UNION:
1137	{
1138	  LONGEST count = 0;
1139	  int i;
1140
1141	  for (i = 0; i < type->num_fields (); i++)
1142	    {
1143	      LONGEST sub_count;
1144
1145	      if (field_is_static (&type->field (i)))
1146		continue;
1147
1148	      sub_count = ppc64_aggregate_candidate
1149			   (type->field (i).type (), field_type);
1150	      if (sub_count == -1)
1151		return -1;
1152
1153	      if (type->code () == TYPE_CODE_STRUCT)
1154		count += sub_count;
1155	      else
1156		count = std::max (count, sub_count);
1157	    }
1158
1159	  /* There must be no padding.  */
1160	  if (count == 0)
1161	    return TYPE_LENGTH (type) == 0 ? 0 : -1;
1162	  else if (TYPE_LENGTH (type) != count * TYPE_LENGTH (*field_type))
1163	    return -1;
1164
1165	  return count;
1166	}
1167      break;
1168
1169    default:
1170      break;
1171    }
1172
1173  return -1;
1174}
1175
1176/* If an argument of type TYPE is a homogeneous float or vector aggregate
1177   that shall be passed in FP/vector registers according to the ELFv2 ABI,
1178   return the homogeneous element type in *ELT_TYPE and the number of
1179   elements in *N_ELTS, and return non-zero.  Otherwise, return zero.  */
1180
1181static int
1182ppc64_elfv2_abi_homogeneous_aggregate (struct type *type,
1183				       struct type **elt_type, int *n_elts)
1184{
1185  /* Complex types at the top level are treated separately.  However,
1186     complex types can be elements of homogeneous aggregates.  */
1187  if (type->code () == TYPE_CODE_STRUCT
1188      || type->code () == TYPE_CODE_UNION
1189      || (type->code () == TYPE_CODE_ARRAY && !TYPE_VECTOR (type)))
1190    {
1191      struct type *field_type = NULL;
1192      LONGEST field_count = ppc64_aggregate_candidate (type, &field_type);
1193
1194      if (field_count > 0)
1195	{
1196	  int n_regs = ((field_type->code () == TYPE_CODE_FLT
1197			 || field_type->code () == TYPE_CODE_DECFLOAT)?
1198			(TYPE_LENGTH (field_type) + 7) >> 3 : 1);
1199
1200	  /* The ELFv2 ABI allows homogeneous aggregates to occupy
1201	     up to 8 registers.  */
1202	  if (field_count * n_regs <= 8)
1203	    {
1204	      if (elt_type)
1205		*elt_type = field_type;
1206	      if (n_elts)
1207		*n_elts = (int) field_count;
1208	      /* Note that field_count is LONGEST since it may hold the size
1209		 of an array, while *n_elts is int since its value is bounded
1210		 by the number of registers used for argument passing.  The
1211		 cast cannot overflow due to the bounds checking above.  */
1212	      return 1;
1213	    }
1214	}
1215    }
1216
1217  return 0;
1218}
1219
1220/* Structure holding the next argument position.  */
1221struct ppc64_sysv_argpos
1222  {
1223    /* Register cache holding argument registers.  If this is NULL,
1224       we only simulate argument processing without actually updating
1225       any registers or memory.  */
1226    struct regcache *regcache;
1227    /* Next available general-purpose argument register.  */
1228    int greg;
1229    /* Next available floating-point argument register.  */
1230    int freg;
1231    /* Next available vector argument register.  */
1232    int vreg;
1233    /* The address, at which the next general purpose parameter
1234       (integer, struct, float, vector, ...) should be saved.  */
1235    CORE_ADDR gparam;
1236    /* The address, at which the next by-reference parameter
1237       (non-Altivec vector, variably-sized type) should be saved.  */
1238    CORE_ADDR refparam;
1239  };
1240
1241/* VAL is a value of length LEN.  Store it into the argument area on the
1242   stack and load it into the corresponding general-purpose registers
1243   required by the ABI, and update ARGPOS.
1244
1245   If ALIGN is nonzero, it specifies the minimum alignment required
1246   for the on-stack copy of the argument.  */
1247
1248static void
1249ppc64_sysv_abi_push_val (struct gdbarch *gdbarch,
1250			 const bfd_byte *val, int len, int align,
1251			 struct ppc64_sysv_argpos *argpos)
1252{
1253  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1254  int offset = 0;
1255
1256  /* Enforce alignment of stack location, if requested.  */
1257  if (align > tdep->wordsize)
1258    {
1259      CORE_ADDR aligned_gparam = align_up (argpos->gparam, align);
1260
1261      argpos->greg += (aligned_gparam - argpos->gparam) / tdep->wordsize;
1262      argpos->gparam = aligned_gparam;
1263    }
1264
1265  /* The ABI (version 1.9) specifies that values smaller than one
1266     doubleword are right-aligned and those larger are left-aligned.
1267     GCC versions before 3.4 implemented this incorrectly; see
1268     <http://gcc.gnu.org/gcc-3.4/powerpc-abi.html>.  */
1269  if (len < tdep->wordsize
1270      && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1271    offset = tdep->wordsize - len;
1272
1273  if (argpos->regcache)
1274    write_memory (argpos->gparam + offset, val, len);
1275  argpos->gparam = align_up (argpos->gparam + len, tdep->wordsize);
1276
1277  while (len >= tdep->wordsize)
1278    {
1279      if (argpos->regcache && argpos->greg <= 10)
1280	argpos->regcache->cooked_write (tdep->ppc_gp0_regnum + argpos->greg,
1281					val);
1282      argpos->greg++;
1283      len -= tdep->wordsize;
1284      val += tdep->wordsize;
1285    }
1286
1287  if (len > 0)
1288    {
1289      if (argpos->regcache && argpos->greg <= 10)
1290	argpos->regcache->cooked_write_part
1291	  (tdep->ppc_gp0_regnum + argpos->greg, offset, len, val);
1292      argpos->greg++;
1293    }
1294}
1295
1296/* The same as ppc64_sysv_abi_push_val, but using a single-word integer
1297   value VAL as argument.  */
1298
1299static void
1300ppc64_sysv_abi_push_integer (struct gdbarch *gdbarch, ULONGEST val,
1301			     struct ppc64_sysv_argpos *argpos)
1302{
1303  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1304  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1305  gdb_byte buf[PPC_MAX_REGISTER_SIZE];
1306
1307  if (argpos->regcache)
1308    store_unsigned_integer (buf, tdep->wordsize, byte_order, val);
1309  ppc64_sysv_abi_push_val (gdbarch, buf, tdep->wordsize, 0, argpos);
1310}
1311
1312/* VAL is a value of TYPE, a (binary or decimal) floating-point type.
1313   Load it into a floating-point register if required by the ABI,
1314   and update ARGPOS.  */
1315
1316static void
1317ppc64_sysv_abi_push_freg (struct gdbarch *gdbarch,
1318			  struct type *type, const bfd_byte *val,
1319			  struct ppc64_sysv_argpos *argpos)
1320{
1321  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1322  if (tdep->soft_float)
1323    return;
1324
1325  if (TYPE_LENGTH (type) <= 8
1326      && type->code () == TYPE_CODE_FLT)
1327    {
1328      /* Floats and doubles go in f1 .. f13.  32-bit floats are converted
1329 	 to double first.  */
1330      if (argpos->regcache && argpos->freg <= 13)
1331	{
1332	  int regnum = tdep->ppc_fp0_regnum + argpos->freg;
1333	  struct type *regtype = register_type (gdbarch, regnum);
1334	  gdb_byte regval[PPC_MAX_REGISTER_SIZE];
1335
1336	  target_float_convert (val, type, regval, regtype);
1337	  argpos->regcache->cooked_write (regnum, regval);
1338	}
1339
1340      argpos->freg++;
1341    }
1342  else if (TYPE_LENGTH (type) <= 8
1343	   && type->code () == TYPE_CODE_DECFLOAT)
1344    {
1345      /* Floats and doubles go in f1 .. f13.  32-bit decimal floats are
1346	 placed in the least significant word.  */
1347      if (argpos->regcache && argpos->freg <= 13)
1348	{
1349	  int regnum = tdep->ppc_fp0_regnum + argpos->freg;
1350	  int offset = 0;
1351
1352	  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1353	    offset = 8 - TYPE_LENGTH (type);
1354
1355	  argpos->regcache->cooked_write_part (regnum, offset,
1356					       TYPE_LENGTH (type), val);
1357	}
1358
1359      argpos->freg++;
1360    }
1361  else if (TYPE_LENGTH (type) == 16
1362	   && type->code () == TYPE_CODE_FLT
1363	   && (gdbarch_long_double_format (gdbarch)
1364	       == floatformats_ibm_long_double))
1365    {
1366      /* IBM long double stored in two consecutive FPRs.  */
1367      if (argpos->regcache && argpos->freg <= 13)
1368	{
1369	  int regnum = tdep->ppc_fp0_regnum + argpos->freg;
1370
1371	  argpos->regcache->cooked_write (regnum, val);
1372	  if (argpos->freg <= 12)
1373	    argpos->regcache->cooked_write (regnum + 1, val + 8);
1374	}
1375
1376      argpos->freg += 2;
1377    }
1378  else if (TYPE_LENGTH (type) == 16
1379	   && type->code () == TYPE_CODE_DECFLOAT)
1380    {
1381      /* 128-bit decimal floating-point values are stored in and even/odd
1382	 pair of FPRs, with the even FPR holding the most significant half.  */
1383      argpos->freg += argpos->freg & 1;
1384
1385      if (argpos->regcache && argpos->freg <= 12)
1386	{
1387	  int regnum = tdep->ppc_fp0_regnum + argpos->freg;
1388	  int lopart = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 8 : 0;
1389	  int hipart = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
1390
1391	  argpos->regcache->cooked_write (regnum, val + hipart);
1392	  argpos->regcache->cooked_write (regnum + 1, val + lopart);
1393	}
1394
1395      argpos->freg += 2;
1396    }
1397}
1398
1399/* VAL is a value of AltiVec vector type.  Load it into a vector register
1400   if required by the ABI, and update ARGPOS.  */
1401
1402static void
1403ppc64_sysv_abi_push_vreg (struct gdbarch *gdbarch, const bfd_byte *val,
1404			  struct ppc64_sysv_argpos *argpos)
1405{
1406  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1407
1408  if (argpos->regcache && argpos->vreg <= 13)
1409    argpos->regcache->cooked_write (tdep->ppc_vr0_regnum + argpos->vreg, val);
1410
1411  argpos->vreg++;
1412}
1413
1414/* VAL is a value of TYPE.  Load it into memory and/or registers
1415   as required by the ABI, and update ARGPOS.  */
1416
1417static void
1418ppc64_sysv_abi_push_param (struct gdbarch *gdbarch,
1419			   struct type *type, const bfd_byte *val,
1420			   struct ppc64_sysv_argpos *argpos)
1421{
1422  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1423
1424  if (type->code () == TYPE_CODE_FLT
1425      || type->code () == TYPE_CODE_DECFLOAT)
1426    {
1427      /* Floating-point scalars are passed in floating-point registers.  */
1428      ppc64_sysv_abi_push_val (gdbarch, val, TYPE_LENGTH (type), 0, argpos);
1429      ppc64_sysv_abi_push_freg (gdbarch, type, val, argpos);
1430    }
1431  else if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)
1432	   && tdep->vector_abi == POWERPC_VEC_ALTIVEC
1433	   && TYPE_LENGTH (type) == 16)
1434    {
1435      /* AltiVec vectors are passed aligned, and in vector registers.  */
1436      ppc64_sysv_abi_push_val (gdbarch, val, TYPE_LENGTH (type), 16, argpos);
1437      ppc64_sysv_abi_push_vreg (gdbarch, val, argpos);
1438    }
1439  else if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)
1440	   && TYPE_LENGTH (type) >= 16)
1441    {
1442      /* Non-Altivec vectors are passed by reference.  */
1443
1444      /* Copy value onto the stack ...  */
1445      CORE_ADDR addr = align_up (argpos->refparam, 16);
1446      if (argpos->regcache)
1447	write_memory (addr, val, TYPE_LENGTH (type));
1448      argpos->refparam = align_up (addr + TYPE_LENGTH (type), tdep->wordsize);
1449
1450      /* ... and pass a pointer to the copy as parameter.  */
1451      ppc64_sysv_abi_push_integer (gdbarch, addr, argpos);
1452    }
1453  else if ((type->code () == TYPE_CODE_INT
1454	    || type->code () == TYPE_CODE_ENUM
1455	    || type->code () == TYPE_CODE_BOOL
1456	    || type->code () == TYPE_CODE_CHAR
1457	    || type->code () == TYPE_CODE_PTR
1458	    || TYPE_IS_REFERENCE (type))
1459	   && TYPE_LENGTH (type) <= tdep->wordsize)
1460    {
1461      ULONGEST word = 0;
1462
1463      if (argpos->regcache)
1464	{
1465	  /* Sign extend the value, then store it unsigned.  */
1466	  word = unpack_long (type, val);
1467
1468	  /* Convert any function code addresses into descriptors.  */
1469	  if (tdep->elf_abi == POWERPC_ELF_V1
1470	      && (type->code () == TYPE_CODE_PTR
1471		  || type->code () == TYPE_CODE_REF))
1472	    {
1473	      struct type *target_type
1474		= check_typedef (TYPE_TARGET_TYPE (type));
1475
1476	      if (target_type->code () == TYPE_CODE_FUNC
1477		  || target_type->code () == TYPE_CODE_METHOD)
1478		{
1479		  CORE_ADDR desc = word;
1480
1481		  convert_code_addr_to_desc_addr (word, &desc);
1482		  word = desc;
1483		}
1484	    }
1485	}
1486
1487      ppc64_sysv_abi_push_integer (gdbarch, word, argpos);
1488    }
1489  else
1490    {
1491      ppc64_sysv_abi_push_val (gdbarch, val, TYPE_LENGTH (type), 0, argpos);
1492
1493      /* The ABI (version 1.9) specifies that structs containing a
1494	 single floating-point value, at any level of nesting of
1495	 single-member structs, are passed in floating-point registers.  */
1496      if (type->code () == TYPE_CODE_STRUCT
1497	  && type->num_fields () == 1)
1498	{
1499	  while (type->code () == TYPE_CODE_STRUCT
1500		 && type->num_fields () == 1)
1501	    type = check_typedef (type->field (0).type ());
1502
1503	  if (type->code () == TYPE_CODE_FLT)
1504	    ppc64_sysv_abi_push_freg (gdbarch, type, val, argpos);
1505	}
1506
1507      /* In the ELFv2 ABI, homogeneous floating-point or vector
1508	 aggregates are passed in a series of registers.  */
1509      if (tdep->elf_abi == POWERPC_ELF_V2)
1510	{
1511	  struct type *eltype;
1512	  int i, nelt;
1513
1514	  if (ppc64_elfv2_abi_homogeneous_aggregate (type, &eltype, &nelt))
1515	    for (i = 0; i < nelt; i++)
1516	      {
1517		const gdb_byte *elval = val + i * TYPE_LENGTH (eltype);
1518
1519		if (eltype->code () == TYPE_CODE_FLT
1520		    || eltype->code () == TYPE_CODE_DECFLOAT)
1521		  ppc64_sysv_abi_push_freg (gdbarch, eltype, elval, argpos);
1522		else if (eltype->code () == TYPE_CODE_ARRAY
1523			 && TYPE_VECTOR (eltype)
1524			 && tdep->vector_abi == POWERPC_VEC_ALTIVEC
1525			 && TYPE_LENGTH (eltype) == 16)
1526		  ppc64_sysv_abi_push_vreg (gdbarch, elval, argpos);
1527	      }
1528	}
1529    }
1530}
1531
1532/* Pass the arguments in either registers, or in the stack.  Using the
1533   ppc 64 bit SysV ABI.
1534
1535   This implements a dumbed down version of the ABI.  It always writes
1536   values to memory, GPR and FPR, even when not necessary.  Doing this
1537   greatly simplifies the logic.  */
1538
1539CORE_ADDR
1540ppc64_sysv_abi_push_dummy_call (struct gdbarch *gdbarch,
1541				struct value *function,
1542				struct regcache *regcache, CORE_ADDR bp_addr,
1543				int nargs, struct value **args, CORE_ADDR sp,
1544				function_call_return_method return_method,
1545				CORE_ADDR struct_addr)
1546{
1547  CORE_ADDR func_addr = find_function_addr (function, NULL);
1548  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1549  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1550  int opencl_abi = ppc_sysv_use_opencl_abi (value_type (function));
1551  ULONGEST back_chain;
1552  /* See for-loop comment below.  */
1553  int write_pass;
1554  /* Size of the by-reference parameter copy region, the final value is
1555     computed in the for-loop below.  */
1556  LONGEST refparam_size = 0;
1557  /* Size of the general parameter region, the final value is computed
1558     in the for-loop below.  */
1559  LONGEST gparam_size = 0;
1560  /* Kevin writes ... I don't mind seeing tdep->wordsize used in the
1561     calls to align_up(), align_down(), etc. because this makes it
1562     easier to reuse this code (in a copy/paste sense) in the future,
1563     but it is a 64-bit ABI and asserting that the wordsize is 8 bytes
1564     at some point makes it easier to verify that this function is
1565     correct without having to do a non-local analysis to figure out
1566     the possible values of tdep->wordsize.  */
1567  gdb_assert (tdep->wordsize == 8);
1568
1569  /* This function exists to support a calling convention that
1570     requires floating-point registers.  It shouldn't be used on
1571     processors that lack them.  */
1572  gdb_assert (ppc_floating_point_unit_p (gdbarch));
1573
1574  /* By this stage in the proceedings, SP has been decremented by "red
1575     zone size" + "struct return size".  Fetch the stack-pointer from
1576     before this and use that as the BACK_CHAIN.  */
1577  regcache_cooked_read_unsigned (regcache, gdbarch_sp_regnum (gdbarch),
1578				 &back_chain);
1579
1580  /* Go through the argument list twice.
1581
1582     Pass 1: Compute the function call's stack space and register
1583     requirements.
1584
1585     Pass 2: Replay the same computation but this time also write the
1586     values out to the target.  */
1587
1588  for (write_pass = 0; write_pass < 2; write_pass++)
1589    {
1590      int argno;
1591
1592      struct ppc64_sysv_argpos argpos;
1593      argpos.greg = 3;
1594      argpos.freg = 1;
1595      argpos.vreg = 2;
1596
1597      if (!write_pass)
1598	{
1599	  /* During the first pass, GPARAM and REFPARAM are more like
1600	     offsets (start address zero) than addresses.  That way
1601	     they accumulate the total stack space each region
1602	     requires.  */
1603	  argpos.regcache = NULL;
1604	  argpos.gparam = 0;
1605	  argpos.refparam = 0;
1606	}
1607      else
1608	{
1609	  /* Decrement the stack pointer making space for the Altivec
1610	     and general on-stack parameters.  Set refparam and gparam
1611	     to their corresponding regions.  */
1612	  argpos.regcache = regcache;
1613	  argpos.refparam = align_down (sp - refparam_size, 16);
1614	  argpos.gparam = align_down (argpos.refparam - gparam_size, 16);
1615	  /* Add in space for the TOC, link editor double word (v1 only),
1616	     compiler double word (v1 only), LR save area, CR save area,
1617	     and backchain.  */
1618	  if (tdep->elf_abi == POWERPC_ELF_V1)
1619	    sp = align_down (argpos.gparam - 48, 16);
1620	  else
1621	    sp = align_down (argpos.gparam - 32, 16);
1622	}
1623
1624      /* If the function is returning a `struct', then there is an
1625         extra hidden parameter (which will be passed in r3)
1626         containing the address of that struct..  In that case we
1627         should advance one word and start from r4 register to copy
1628         parameters.  This also consumes one on-stack parameter slot.  */
1629      if (return_method == return_method_struct)
1630	ppc64_sysv_abi_push_integer (gdbarch, struct_addr, &argpos);
1631
1632      for (argno = 0; argno < nargs; argno++)
1633	{
1634	  struct value *arg = args[argno];
1635	  struct type *type = check_typedef (value_type (arg));
1636	  const bfd_byte *val = value_contents (arg);
1637
1638	  if (type->code () == TYPE_CODE_COMPLEX)
1639	    {
1640	      /* Complex types are passed as if two independent scalars.  */
1641	      struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type));
1642
1643	      ppc64_sysv_abi_push_param (gdbarch, eltype, val, &argpos);
1644	      ppc64_sysv_abi_push_param (gdbarch, eltype,
1645				 	 val + TYPE_LENGTH (eltype), &argpos);
1646	    }
1647	  else if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)
1648		   && opencl_abi)
1649	    {
1650	      /* OpenCL vectors shorter than 16 bytes are passed as if
1651		 a series of independent scalars; OpenCL vectors 16 bytes
1652		 or longer are passed as if a series of AltiVec vectors.  */
1653	      struct type *eltype;
1654	      int i, nelt;
1655
1656	      if (TYPE_LENGTH (type) < 16)
1657		eltype = check_typedef (TYPE_TARGET_TYPE (type));
1658	      else
1659		eltype = register_type (gdbarch, tdep->ppc_vr0_regnum);
1660
1661	      nelt = TYPE_LENGTH (type) / TYPE_LENGTH (eltype);
1662	      for (i = 0; i < nelt; i++)
1663		{
1664		  const gdb_byte *elval = val + i * TYPE_LENGTH (eltype);
1665
1666		  ppc64_sysv_abi_push_param (gdbarch, eltype, elval, &argpos);
1667		}
1668	    }
1669	  else
1670	    {
1671	      /* All other types are passed as single arguments.  */
1672	      ppc64_sysv_abi_push_param (gdbarch, type, val, &argpos);
1673	    }
1674	}
1675
1676      if (!write_pass)
1677	{
1678	  /* Save the true region sizes ready for the second pass.  */
1679	  refparam_size = argpos.refparam;
1680	  /* Make certain that the general parameter save area is at
1681	     least the minimum 8 registers (or doublewords) in size.  */
1682	  if (argpos.greg < 8)
1683	    gparam_size = 8 * tdep->wordsize;
1684	  else
1685	    gparam_size = argpos.gparam;
1686	}
1687    }
1688
1689  /* Update %sp.   */
1690  regcache_cooked_write_signed (regcache, gdbarch_sp_regnum (gdbarch), sp);
1691
1692  /* Write the backchain (it occupies WORDSIZED bytes).  */
1693  write_memory_signed_integer (sp, tdep->wordsize, byte_order, back_chain);
1694
1695  /* Point the inferior function call's return address at the dummy's
1696     breakpoint.  */
1697  regcache_cooked_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);
1698
1699  /* In the ELFv1 ABI, use the func_addr to find the descriptor, and use
1700     that to find the TOC.  If we're calling via a function pointer,
1701     the pointer itself identifies the descriptor.  */
1702  if (tdep->elf_abi == POWERPC_ELF_V1)
1703    {
1704      struct type *ftype = check_typedef (value_type (function));
1705      CORE_ADDR desc_addr = value_as_address (function);
1706
1707      if (ftype->code () == TYPE_CODE_PTR
1708	  || convert_code_addr_to_desc_addr (func_addr, &desc_addr))
1709	{
1710	  /* The TOC is the second double word in the descriptor.  */
1711	  CORE_ADDR toc =
1712	    read_memory_unsigned_integer (desc_addr + tdep->wordsize,
1713					  tdep->wordsize, byte_order);
1714
1715	  regcache_cooked_write_unsigned (regcache,
1716					  tdep->ppc_gp0_regnum + 2, toc);
1717	}
1718    }
1719
1720  /* In the ELFv2 ABI, we need to pass the target address in r12 since
1721     we may be calling a global entry point.  */
1722  if (tdep->elf_abi == POWERPC_ELF_V2)
1723    regcache_cooked_write_unsigned (regcache,
1724				    tdep->ppc_gp0_regnum + 12, func_addr);
1725
1726  return sp;
1727}
1728
1729/* Subroutine of ppc64_sysv_abi_return_value that handles "base" types:
1730   integer, floating-point, and AltiVec vector types.
1731
1732   This routine also handles components of aggregate return types;
1733   INDEX describes which part of the aggregate is to be handled.
1734
1735   Returns true if VALTYPE is some such base type that could be handled,
1736   false otherwise.  */
1737static int
1738ppc64_sysv_abi_return_value_base (struct gdbarch *gdbarch, struct type *valtype,
1739				  struct regcache *regcache, gdb_byte *readbuf,
1740				  const gdb_byte *writebuf, int index)
1741{
1742  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1743
1744  /* Integers live in GPRs starting at r3.  */
1745  if ((valtype->code () == TYPE_CODE_INT
1746       || valtype->code () == TYPE_CODE_ENUM
1747       || valtype->code () == TYPE_CODE_CHAR
1748       || valtype->code () == TYPE_CODE_BOOL)
1749      && TYPE_LENGTH (valtype) <= 8)
1750    {
1751      int regnum = tdep->ppc_gp0_regnum + 3 + index;
1752
1753      if (writebuf != NULL)
1754	{
1755	  /* Be careful to sign extend the value.  */
1756	  regcache_cooked_write_unsigned (regcache, regnum,
1757					  unpack_long (valtype, writebuf));
1758	}
1759      if (readbuf != NULL)
1760	{
1761	  /* Extract the integer from GPR.  Since this is truncating the
1762	     value, there isn't a sign extension problem.  */
1763	  ULONGEST regval;
1764
1765	  regcache_cooked_read_unsigned (regcache, regnum, &regval);
1766	  store_unsigned_integer (readbuf, TYPE_LENGTH (valtype),
1767				  gdbarch_byte_order (gdbarch), regval);
1768	}
1769      return 1;
1770    }
1771
1772  /* Floats and doubles go in f1 .. f13.  32-bit floats are converted
1773     to double first.  */
1774  if (TYPE_LENGTH (valtype) <= 8
1775      && valtype->code () == TYPE_CODE_FLT)
1776    {
1777      int regnum = tdep->ppc_fp0_regnum + 1 + index;
1778      struct type *regtype = register_type (gdbarch, regnum);
1779      gdb_byte regval[PPC_MAX_REGISTER_SIZE];
1780
1781      if (writebuf != NULL)
1782	{
1783	  target_float_convert (writebuf, valtype, regval, regtype);
1784	  regcache->cooked_write (regnum, regval);
1785	}
1786      if (readbuf != NULL)
1787	{
1788	  regcache->cooked_read (regnum, regval);
1789	  target_float_convert (regval, regtype, readbuf, valtype);
1790	}
1791      return 1;
1792    }
1793
1794  /* Floats and doubles go in f1 .. f13.  32-bit decimal floats are
1795     placed in the least significant word.  */
1796  if (TYPE_LENGTH (valtype) <= 8
1797      && valtype->code () == TYPE_CODE_DECFLOAT)
1798    {
1799      int regnum = tdep->ppc_fp0_regnum + 1 + index;
1800      int offset = 0;
1801
1802      if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1803	offset = 8 - TYPE_LENGTH (valtype);
1804
1805      if (writebuf != NULL)
1806	regcache->cooked_write_part (regnum, offset, TYPE_LENGTH (valtype),
1807				     writebuf);
1808      if (readbuf != NULL)
1809	regcache->cooked_read_part (regnum, offset, TYPE_LENGTH (valtype),
1810				    readbuf);
1811      return 1;
1812    }
1813
1814  /* IBM long double stored in two consecutive FPRs.  */
1815  if (TYPE_LENGTH (valtype) == 16
1816      && valtype->code () == TYPE_CODE_FLT
1817      && (gdbarch_long_double_format (gdbarch)
1818	  == floatformats_ibm_long_double))
1819    {
1820      int regnum = tdep->ppc_fp0_regnum + 1 + 2 * index;
1821
1822      if (writebuf != NULL)
1823	{
1824	  regcache->cooked_write (regnum, writebuf);
1825	  regcache->cooked_write (regnum + 1, writebuf + 8);
1826	}
1827      if (readbuf != NULL)
1828	{
1829	  regcache->cooked_read (regnum, readbuf);
1830	  regcache->cooked_read (regnum + 1, readbuf + 8);
1831	}
1832      return 1;
1833    }
1834
1835  /* 128-bit decimal floating-point values are stored in an even/odd
1836     pair of FPRs, with the even FPR holding the most significant half.  */
1837  if (TYPE_LENGTH (valtype) == 16
1838      && valtype->code () == TYPE_CODE_DECFLOAT)
1839    {
1840      int regnum = tdep->ppc_fp0_regnum + 2 + 2 * index;
1841      int lopart = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 8 : 0;
1842      int hipart = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 0 : 8;
1843
1844      if (writebuf != NULL)
1845	{
1846	  regcache->cooked_write (regnum, writebuf + hipart);
1847	  regcache->cooked_write (regnum + 1, writebuf + lopart);
1848	}
1849      if (readbuf != NULL)
1850	{
1851	  regcache->cooked_read (regnum, readbuf + hipart);
1852	  regcache->cooked_read (regnum + 1, readbuf + lopart);
1853	}
1854      return 1;
1855    }
1856
1857  /* AltiVec vectors are returned in VRs starting at v2.  */
1858  if (TYPE_LENGTH (valtype) == 16
1859      && valtype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype)
1860      && tdep->vector_abi == POWERPC_VEC_ALTIVEC)
1861    {
1862      int regnum = tdep->ppc_vr0_regnum + 2 + index;
1863
1864      if (writebuf != NULL)
1865	regcache->cooked_write (regnum, writebuf);
1866      if (readbuf != NULL)
1867	regcache->cooked_read (regnum, readbuf);
1868      return 1;
1869    }
1870
1871  /* Short vectors are returned in GPRs starting at r3.  */
1872  if (TYPE_LENGTH (valtype) <= 8
1873      && valtype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype))
1874    {
1875      int regnum = tdep->ppc_gp0_regnum + 3 + index;
1876      int offset = 0;
1877
1878      if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1879	offset = 8 - TYPE_LENGTH (valtype);
1880
1881      if (writebuf != NULL)
1882	regcache->cooked_write_part (regnum, offset, TYPE_LENGTH (valtype),
1883				     writebuf);
1884      if (readbuf != NULL)
1885	regcache->cooked_read_part (regnum, offset, TYPE_LENGTH (valtype),
1886				    readbuf);
1887      return 1;
1888    }
1889
1890  return 0;
1891}
1892
1893/* The 64 bit ABI return value convention.
1894
1895   Return non-zero if the return-value is stored in a register, return
1896   0 if the return-value is instead stored on the stack (a.k.a.,
1897   struct return convention).
1898
1899   For a return-value stored in a register: when WRITEBUF is non-NULL,
1900   copy the buffer to the corresponding register return-value location
1901   location; when READBUF is non-NULL, fill the buffer from the
1902   corresponding register return-value location.  */
1903enum return_value_convention
1904ppc64_sysv_abi_return_value (struct gdbarch *gdbarch, struct value *function,
1905			     struct type *valtype, struct regcache *regcache,
1906			     gdb_byte *readbuf, const gdb_byte *writebuf)
1907{
1908  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1909  struct type *func_type = function ? value_type (function) : NULL;
1910  int opencl_abi = func_type? ppc_sysv_use_opencl_abi (func_type) : 0;
1911  struct type *eltype;
1912  int nelt, ok;
1913
1914  /* This function exists to support a calling convention that
1915     requires floating-point registers.  It shouldn't be used on
1916     processors that lack them.  */
1917  gdb_assert (ppc_floating_point_unit_p (gdbarch));
1918
1919  /* Complex types are returned as if two independent scalars.  */
1920  if (valtype->code () == TYPE_CODE_COMPLEX)
1921    {
1922      eltype = check_typedef (TYPE_TARGET_TYPE (valtype));
1923
1924      for (int i = 0; i < 2; i++)
1925	{
1926	  ok = ppc64_sysv_abi_return_value_base (gdbarch, eltype, regcache,
1927						 readbuf, writebuf, i);
1928	  gdb_assert (ok);
1929
1930	  if (readbuf)
1931	    readbuf += TYPE_LENGTH (eltype);
1932	  if (writebuf)
1933	    writebuf += TYPE_LENGTH (eltype);
1934	}
1935      return RETURN_VALUE_REGISTER_CONVENTION;
1936    }
1937
1938  /* OpenCL vectors shorter than 16 bytes are returned as if
1939     a series of independent scalars; OpenCL vectors 16 bytes
1940     or longer are returned as if a series of AltiVec vectors.  */
1941  if (valtype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype)
1942      && opencl_abi)
1943    {
1944      if (TYPE_LENGTH (valtype) < 16)
1945	eltype = check_typedef (TYPE_TARGET_TYPE (valtype));
1946      else
1947	eltype = register_type (gdbarch, tdep->ppc_vr0_regnum);
1948
1949      nelt = TYPE_LENGTH (valtype) / TYPE_LENGTH (eltype);
1950      for (int i = 0; i < nelt; i++)
1951	{
1952	  ok = ppc64_sysv_abi_return_value_base (gdbarch, eltype, regcache,
1953						 readbuf, writebuf, i);
1954	  gdb_assert (ok);
1955
1956	  if (readbuf)
1957	    readbuf += TYPE_LENGTH (eltype);
1958	  if (writebuf)
1959	    writebuf += TYPE_LENGTH (eltype);
1960	}
1961      return RETURN_VALUE_REGISTER_CONVENTION;
1962    }
1963
1964  /* All pointers live in r3.  */
1965  if (valtype->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (valtype))
1966    {
1967      int regnum = tdep->ppc_gp0_regnum + 3;
1968
1969      if (writebuf != NULL)
1970	regcache->cooked_write (regnum, writebuf);
1971      if (readbuf != NULL)
1972	regcache->cooked_read (regnum, readbuf);
1973      return RETURN_VALUE_REGISTER_CONVENTION;
1974    }
1975
1976  /* Small character arrays are returned, right justified, in r3.  */
1977  if (valtype->code () == TYPE_CODE_ARRAY
1978      && !TYPE_VECTOR (valtype)
1979      && TYPE_LENGTH (valtype) <= 8
1980      && TYPE_TARGET_TYPE (valtype)->code () == TYPE_CODE_INT
1981      && TYPE_LENGTH (TYPE_TARGET_TYPE (valtype)) == 1)
1982    {
1983      int regnum = tdep->ppc_gp0_regnum + 3;
1984      int offset = (register_size (gdbarch, regnum) - TYPE_LENGTH (valtype));
1985
1986      if (writebuf != NULL)
1987	regcache->cooked_write_part (regnum, offset, TYPE_LENGTH (valtype),
1988				     writebuf);
1989      if (readbuf != NULL)
1990	regcache->cooked_read_part (regnum, offset, TYPE_LENGTH (valtype),
1991				    readbuf);
1992      return RETURN_VALUE_REGISTER_CONVENTION;
1993    }
1994
1995  /* In the ELFv2 ABI, homogeneous floating-point or vector
1996     aggregates are returned in registers.  */
1997  if (tdep->elf_abi == POWERPC_ELF_V2
1998      && ppc64_elfv2_abi_homogeneous_aggregate (valtype, &eltype, &nelt)
1999      && (eltype->code () == TYPE_CODE_FLT
2000	  || eltype->code () == TYPE_CODE_DECFLOAT
2001	  || (eltype->code () == TYPE_CODE_ARRAY
2002	      && TYPE_VECTOR (eltype)
2003	      && tdep->vector_abi == POWERPC_VEC_ALTIVEC
2004	      && TYPE_LENGTH (eltype) == 16)))
2005    {
2006      for (int i = 0; i < nelt; i++)
2007	{
2008	  ok = ppc64_sysv_abi_return_value_base (gdbarch, eltype, regcache,
2009						 readbuf, writebuf, i);
2010	  gdb_assert (ok);
2011
2012	  if (readbuf)
2013	    readbuf += TYPE_LENGTH (eltype);
2014	  if (writebuf)
2015	    writebuf += TYPE_LENGTH (eltype);
2016	}
2017
2018      return RETURN_VALUE_REGISTER_CONVENTION;
2019    }
2020
2021  /* In the ELFv2 ABI, aggregate types of up to 16 bytes are
2022     returned in registers r3:r4.  */
2023  if (tdep->elf_abi == POWERPC_ELF_V2
2024      && TYPE_LENGTH (valtype) <= 16
2025      && (valtype->code () == TYPE_CODE_STRUCT
2026	  || valtype->code () == TYPE_CODE_UNION
2027	  || (valtype->code () == TYPE_CODE_ARRAY
2028	      && !TYPE_VECTOR (valtype))))
2029    {
2030      int n_regs = ((TYPE_LENGTH (valtype) + tdep->wordsize - 1)
2031		    / tdep->wordsize);
2032
2033      for (int i = 0; i < n_regs; i++)
2034	{
2035	  gdb_byte regval[PPC_MAX_REGISTER_SIZE];
2036	  int regnum = tdep->ppc_gp0_regnum + 3 + i;
2037	  int offset = i * tdep->wordsize;
2038	  int len = TYPE_LENGTH (valtype) - offset;
2039
2040	  if (len > tdep->wordsize)
2041	    len = tdep->wordsize;
2042
2043	  if (writebuf != NULL)
2044	    {
2045	      memset (regval, 0, sizeof regval);
2046	      if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
2047		  && offset == 0)
2048		memcpy (regval + tdep->wordsize - len, writebuf, len);
2049	      else
2050		memcpy (regval, writebuf + offset, len);
2051	      regcache->cooked_write (regnum, regval);
2052	    }
2053	  if (readbuf != NULL)
2054	    {
2055	      regcache->cooked_read (regnum, regval);
2056	      if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
2057		  && offset == 0)
2058		memcpy (readbuf, regval + tdep->wordsize - len, len);
2059	      else
2060		memcpy (readbuf + offset, regval, len);
2061	    }
2062	}
2063      return RETURN_VALUE_REGISTER_CONVENTION;
2064    }
2065
2066  /* Handle plain base types.  */
2067  if (ppc64_sysv_abi_return_value_base (gdbarch, valtype, regcache,
2068					readbuf, writebuf, 0))
2069    return RETURN_VALUE_REGISTER_CONVENTION;
2070
2071  return RETURN_VALUE_STRUCT_CONVENTION;
2072}
2073
2074