From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7873) id 01E023858D32; Tue, 26 Jul 2022 14:19:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 01E023858D32 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Tiezhu Yang To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdb: LoongArch: Fix code style issues X-Act-Checkin: binutils-gdb X-Git-Author: Tiezhu Yang X-Git-Refname: refs/heads/master X-Git-Oldrev: 91896b4d6a7d312e850094eaaa5b965a9e3dc39b X-Git-Newrev: 4a75d7c5384a2c1cbaa0f341d844713d9ae475d6 Message-Id: <20220726141935.01E023858D32@sourceware.org> Date: Tue, 26 Jul 2022 14:19:35 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Jul 2022 14:19:35 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D4a75d7c5384a= 2c1cbaa0f341d844713d9ae475d6 commit 4a75d7c5384a2c1cbaa0f341d844713d9ae475d6 Author: Tiezhu Yang Date: Sat Jul 16 19:05:39 2022 +0800 gdb: LoongArch: Fix code style issues =20 Fix some code style issues suggested by Tom Tromey and Andrew Burgess, thank you. =20 (1) Put an introductory comment to explain the purpose for some functio= ns. =20 (2) Modify the the attribute code to make it portable. =20 (3) Remove globals and pass pointers to locals. =20 (4) Remove "*" in the subsequent comment lines. =20 (5) Put two spaces before "{" and "}". =20 Signed-off-by: Tiezhu Yang Diff: --- gdb/loongarch-tdep.c | 351 ++++++++++++++++++++++++++++-------------------= ---- 1 file changed, 190 insertions(+), 161 deletions(-) diff --git a/gdb/loongarch-tdep.c b/gdb/loongarch-tdep.c index 5711e6f05d7..3fb7774d8af 100644 --- a/gdb/loongarch-tdep.c +++ b/gdb/loongarch-tdep.c @@ -159,10 +159,10 @@ loongarch_scan_prologue (struct gdbarch *gdbarch, COR= E_ADDR start_pc, else if ((insn & 0xffc00000) =3D=3D 0x03800000) /* ori rd,rj,si12 */ { if (reg_used[rj]) - { - reg_value[rd] =3D reg_value[rj] | (si12 & 0xfff); - reg_used[rd] =3D 1; - } + { + reg_value[rd] =3D reg_value[rj] | (si12 & 0xfff); + reg_used[rd] =3D 1; + } } else if ((insn & 0xffff8000) =3D=3D 0x00108000 /* add.d sp,sp,rk */ && rd =3D=3D sp && rj =3D=3D sp) @@ -452,6 +452,15 @@ static const struct frame_unwind loongarch_frame_unwin= d =3D { /*.prev_arch =3D*/nullptr, }; =20 +/* Write the contents of buffer VAL into the general-purpose argument + register defined by GAR in REGCACHE. GAR indicates the available + general-purpose argument registers which should be a value in the + range 1 to 8 (LOONGARCH_ARG_REGNUM), which correspond to registers + a7 and a0 respectively, that is to say, regnum is a7 if GAR is 1, + regnum is a6 if GAR is 2, regnum is a5 if GAR is 3, regnum is a4 + if GAR is 4, regnum is a3 if GAR is 5, regnum is a2 if GAR is 6, + regnum is a1 if GAR is 7, regnum is a0 if GAR is 8. */ + static void pass_in_gar (struct regcache *regcache, unsigned int gar, const gdb_byte *= val) { @@ -459,6 +468,15 @@ pass_in_gar (struct regcache *regcache, unsigned int g= ar, const gdb_byte *val) regcache->cooked_write (regnum, val); } =20 +/* Write the contents of buffer VAL into the floating-point argument + register defined by FAR in REGCACHE. FAR indicates the available + floating-point argument registers which should be a value in the + range 1 to 8 (LOONGARCH_ARG_REGNUM), which correspond to registers + f7 and f0 respectively, that is to say, regnum is f7 if FAR is 1, + regnum is f6 if FAR is 2, regnum is f5 if FAR is 3, regnum is f4 + if FAR is 4, regnum is f3 if FAR is 5, regnum is f2 if FAR is 6, + regnum is f1 if FAR is 7, regnum is f0 if FAR is 8. */ + static void pass_in_far (struct regcache *regcache, unsigned int far, const gdb_byte *= val) { @@ -466,29 +484,30 @@ pass_in_far (struct regcache *regcache, unsigned int = far, const gdb_byte *val) regcache->cooked_write (regnum, val); } =20 -static __attribute__((aligned(16))) gdb_byte buf[1024] =3D { 0 }; -static gdb_byte *addr =3D buf; +/* Pass a value on the stack. */ =20 static void -pass_on_stack (struct regcache *regcache, const gdb_byte *val, size_t len,= int align) +pass_on_stack (struct regcache *regcache, const gdb_byte *val, + size_t len, int align, gdb_byte **addr) { align =3D align_up (align, 8); if (align > 16) align =3D 16; =20 - CORE_ADDR align_addr =3D (CORE_ADDR) addr; + CORE_ADDR align_addr =3D (CORE_ADDR) (*addr); align_addr =3D align_up (align_addr, align); - addr =3D (gdb_byte *) align_addr; - memcpy (addr, val, len); - addr +=3D len; + *addr =3D (gdb_byte *) align_addr; + memcpy (*addr, val, len); + *addr +=3D len; } =20 -static unsigned int fixed_point_members =3D 0; -static unsigned int floating_point_members =3D 0; -static bool first_member_is_fixed_point =3D false; +/* Compute the numbers of struct member. */ =20 static void -compute_struct_member (struct type *type) +compute_struct_member (struct type *type, + unsigned int *fixed_point_members, + unsigned int *floating_point_members, + bool *first_member_is_fixed_point) { for (int i =3D 0; i < type->num_fields (); i++) { @@ -501,17 +520,20 @@ compute_struct_member (struct type *type) || field_type->code () =3D=3D TYPE_CODE_ENUM || field_type->code () =3D=3D TYPE_CODE_PTR) { - fixed_point_members++; + (*fixed_point_members)++; =20 - if (floating_point_members =3D=3D 0) - first_member_is_fixed_point =3D true; + if (*floating_point_members =3D=3D 0) + *first_member_is_fixed_point =3D true; } else if (field_type->code () =3D=3D TYPE_CODE_FLT) - floating_point_members++; + (*floating_point_members)++; else if (field_type->code () =3D=3D TYPE_CODE_STRUCT) - compute_struct_member (field_type); + compute_struct_member (field_type, + fixed_point_members, + floating_point_members, + first_member_is_fixed_point); else if (field_type->code () =3D=3D TYPE_CODE_COMPLEX) - floating_point_members +=3D 2; + (*floating_point_members) +=3D 2; } } =20 @@ -531,11 +553,15 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, int regsize =3D register_size (gdbarch, 0); unsigned int gar =3D LOONGARCH_ARG_REGNUM; unsigned int far =3D LOONGARCH_ARG_REGNUM; + unsigned int fixed_point_members; + unsigned int floating_point_members; + bool first_member_is_fixed_point; + gdb_byte buf[1024] =3D { 0 }; + gdb_byte *addr =3D buf; =20 if (return_method !=3D return_method_normal) pass_in_gar (regcache, gar--, (gdb_byte *) &struct_addr); =20 - addr =3D buf; for (int i =3D 0; i < nargs; i++) { struct value *arg =3D args[i]; @@ -555,17 +581,17 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, case TYPE_CODE_PTR: { /* integer or pointer type is passed in GAR. - * If no GAR is available, it's passed on the stack. - * When passed in registers or on the stack, - * the unsigned integer scalars are zero-extended to GRLEN bits, - * and the signed integer scalars are sign-extended. */ + If no GAR is available, it's passed on the stack. + When passed in registers or on the stack, + the unsigned integer scalars are zero-extended to GRLEN bits, + and the signed integer scalars are sign-extended. */ if (type->is_unsigned ()) { ULONGEST data =3D extract_unsigned_integer (val, len, BFD_EN= DIAN_LITTLE); if (gar > 0) pass_in_gar (regcache, gar--, (gdb_byte *) &data); else - pass_on_stack (regcache, (gdb_byte *) &data, len, align); + pass_on_stack (regcache, (gdb_byte *) &data, len, align, &addr); } else { @@ -573,7 +599,7 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, if (gar > 0) pass_in_gar (regcache, gar--, (gdb_byte *) &data); else - pass_on_stack (regcache, (gdb_byte *) &data, len, align); + pass_on_stack (regcache, (gdb_byte *) &data, len, align, &addr); } } break; @@ -581,12 +607,12 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, if (len =3D=3D 2 * regsize) { /* long double type is passed in a pair of GAR, - * with the low-order GRLEN bits in the lower-numbered register - * and the high-order GRLEN bits in the higher-numbered register. - * If exactly one register is available, - * the low-order GRLEN bits are passed in the register - * and the high-order GRLEN bits are passed on the stack. - * If no GAR is available, it's passed on the stack. */ + with the low-order GRLEN bits in the lower-numbered register + and the high-order GRLEN bits in the higher-numbered register. + If exactly one register is available, + the low-order GRLEN bits are passed in the register + and the high-order GRLEN bits are passed on the stack. + If no GAR is available, it's passed on the stack. */ if (gar >=3D 2) { pass_in_gar (regcache, gar--, val); @@ -595,24 +621,24 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (gar =3D=3D 1) { pass_in_gar (regcache, gar--, val); - pass_on_stack (regcache, val + regsize, len - regsize, align); + pass_on_stack (regcache, val + regsize, len - regsize, align, &addr); } else { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } else { /* The other floating-point type is passed in FAR. - * If no FAR is available, it's passed in GAR. - * If no GAR is available, it's passed on the stack. */ + If no FAR is available, it's passed in GAR. + If no GAR is available, it's passed on the stack. */ if (far > 0) pass_in_far (regcache, far--, val); else if (gar > 0) pass_in_gar (regcache, gar--, val); else - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } break; case TYPE_CODE_STRUCT: @@ -620,7 +646,10 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, fixed_point_members =3D 0; floating_point_members =3D 0; first_member_is_fixed_point =3D false; - compute_struct_member (type); + compute_struct_member (type, + &fixed_point_members, + &floating_point_members, + &first_member_is_fixed_point); =20 if (len > 0 && len <=3D regsize) { @@ -628,20 +657,20 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, if (fixed_point_members > 0 && floating_point_members =3D=3D 0) { /* If there is an available GAR, - * the structure is passed through the GAR by value passing; - * If no GAR is available, it's passed on the stack. */ + the structure is passed through the GAR by value passing; + If no GAR is available, it's passed on the stack. */ if (gar > 0) pass_in_gar (regcache, gar--, val); else - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } /* The structure has only floating-point members. */ else if (fixed_point_members =3D=3D 0 && floating_point_members > 0) { - /* One floating-point member. - * The argument is passed in a FAR. - * If no FAR is available, the value is passed in a GAR. - * if no GAR is available, the value is passed on the stack. */ + /* The structure has one floating-point member. + The argument is passed in a FAR. + If no FAR is available, the value is passed in a GAR. + if no GAR is available, the value is passed on the stack. */ if (floating_point_members =3D=3D 1) { if (far > 0) @@ -649,14 +678,14 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (gar > 0) pass_in_gar (regcache, gar--, val); else - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } - /* Two floating-point members. - * The argument is passed in a pair of available FAR, - * with the low-order float member bits in the lower-numbered FAR - * and the high-order float member bits in the higher-numbered FAR. - * If the number of available FAR is less than 2, it's passed in a G= AR, - * and passed on the stack if no GAR is available. */ + /* The structure has two floating-point members. + The argument is passed in a pair of available FAR, + with the low-order float member bits in the lower-numbered FAR + and the high-order float member bits in the higher-numbered FAR. + If the number of available FAR is less than 2, it's passed in a G= AR, + and passed on the stack if no GAR is available. */ else if (floating_point_members =3D=3D 2) { if (far >=3D 2) @@ -670,29 +699,29 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, } else { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } } /* The structure has both fixed-point and floating-point members. */ else if (fixed_point_members > 0 && floating_point_members > 0) { - /* One float member and multiple fixed-point members. - * If there are available GAR, the structure is passed in a GAR, - * and passed on the stack if no GAR is available. */ + /* The structure has one float member and multiple fixed-point membe= rs. + If there are available GAR, the structure is passed in a GAR, + and passed on the stack if no GAR is available. */ if (floating_point_members =3D=3D 1 && fixed_point_members > 1) { if (gar > 0) pass_in_gar (regcache, gar--, val); else - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } - /* One float member and only one fixed-point member. - * If one FAR and one GAR are available, - * the floating-point member of the structure is passed in the FAR, - * and the fixed-point member of the structure is passed in the GAR. - * If no floating-point register but one GAR is available, it's pass= ed in GAR; - * If no GAR is available, it's passed on the stack. */ + /* The structure has one float member and one fixed-point member. + If one FAR and one GAR are available, + the floating-point member of the structure is passed in the FAR, + and the fixed-point member of the structure is passed in the GAR. + If no floating-point register but one GAR is available, it's pass= ed in GAR; + If no GAR is available, it's passed on the stack. */ else if (floating_point_members =3D=3D 1 && fixed_point_members =3D= =3D 1) { if (far > 0 && gar > 0) @@ -713,23 +742,23 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, if (gar > 0) pass_in_gar (regcache, gar--, val); else - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } } } else if (len > regsize && len <=3D 2 * regsize) { - /* Only fixed-point members. */ + /* The structure has only fixed-point members. */ if (fixed_point_members > 0 && floating_point_members =3D=3D 0) { /* The argument is passed in a pair of available GAR, - * with the low-order bits in the lower-numbered GAR - * and the high-order bits in the higher-numbered GAR. - * If only one GAR is available, - * the low-order bits are in the GAR - * and the high-order bits are on the stack, - * and passed on the stack if no GAR is available. */ + with the low-order bits in the lower-numbered GAR + and the high-order bits in the higher-numbered GAR. + If only one GAR is available, + the low-order bits are in the GAR + and the high-order bits are on the stack, + and passed on the stack if no GAR is available. */ if (gar >=3D 2) { pass_in_gar (regcache, gar--, val); @@ -738,26 +767,26 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (gar =3D=3D 1) { pass_in_gar (regcache, gar--, val); - pass_on_stack (regcache, val + regsize, len - regsize, align); + pass_on_stack (regcache, val + regsize, len - regsize, align, &addr); } else { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } - /* Only floating-point members. */ + /* The structure has only floating-point members. */ else if (fixed_point_members =3D=3D 0 && floating_point_members > 0) { /* The structure has one long double member - * or one double member and two adjacent float members - * or 3-4 float members. - * The argument is passed in a pair of available GAR, - * with the low-order bits in the lower-numbered GAR - * and the high-order bits in the higher-numbered GAR. - * If only one GAR is available, - * the low-order bits are in the GAR - * and the high-order bits are on the stack, - * and passed on the stack if no GAR is available. */ + or one double member and two adjacent float members + or 3-4 float members. + The argument is passed in a pair of available GAR, + with the low-order bits in the lower-numbered GAR + and the high-order bits in the higher-numbered GAR. + If only one GAR is available, + the low-order bits are in the GAR + and the high-order bits are on the stack, + and passed on the stack if no GAR is available. */ if ((len =3D=3D 16 && floating_point_members =3D=3D 1) || (len =3D=3D 16 && floating_point_members =3D=3D 3) || (len =3D=3D 12 && floating_point_members =3D=3D 3) @@ -771,26 +800,26 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (gar =3D=3D 1) { pass_in_gar (regcache, gar--, val); - pass_on_stack (regcache, val + regsize, len - regsize, align); + pass_on_stack (regcache, val + regsize, len - regsize, align, &addr= ); } else { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } - /* The structure with two double members - * is passed in a pair of available FAR, - * with the low-order bits in the lower-numbered FAR - * and the high-order bits in the higher-numbered FAR. - * If no a pair of available FAR, - * it's passed in a pair of available GAR, - * with the low-order bits in the lower-numbered GAR - * and the high-order bits in the higher-numbered GAR. - * If only one GAR is available, - * the low-order bits are in the GAR - * and the high-order bits are on stack, - * and passed on the stack if no GAR is available. - * A structure with one double member and one float member is same. = */ + /* The structure has two double members + or one double member and one float member. + The argument is passed in a pair of available FAR, + with the low-order bits in the lower-numbered FAR + and the high-order bits in the higher-numbered FAR. + If no a pair of available FAR, + it's passed in a pair of available GAR, + with the low-order bits in the lower-numbered GAR + and the high-order bits in the higher-numbered GAR. + If only one GAR is available, + the low-order bits are in the GAR + and the high-order bits are on stack, + and passed on the stack if no GAR is available. */ else if ((len =3D=3D 16 && floating_point_members =3D=3D 2) || (len =3D=3D 12 && floating_point_members =3D=3D 2)) { @@ -807,29 +836,29 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (gar =3D=3D 1) { pass_in_gar (regcache, gar--, val); - pass_on_stack (regcache, val + regsize, len - regsize, align); + pass_on_stack (regcache, val + regsize, len - regsize, align, &addr= ); } else { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } } - /* Both fixed-point and floating-point members. */ + /* The structure has both fixed-point and floating-point members. */ else if (fixed_point_members > 0 && floating_point_members > 0) { - /* The structure has one floating-point member and only one fixed-po= int member. */ + /* The structure has one floating-point member and one fixed-point m= ember. */ if (floating_point_members =3D=3D 1 && fixed_point_members =3D=3D 1) { /* If one FAR and one GAR are available, - * the floating-point member of the structure is passed in the FAR, - * and the fixed-point member of the structure is passed in the GAR; - * If no floating-point registers but two GARs are available, - * it's passed in the two GARs; - * If only one GAR is available, - * the low-order bits are in the GAR - * and the high-order bits are on the stack; - * And it's passed on the stack if no GAR is available. */ + the floating-point member of the structure is passed in the FAR, + and the fixed-point member of the structure is passed in the GAR; + If no floating-point registers but two GARs are available, + it's passed in the two GARs; + If only one GAR is available, + the low-order bits are in the GAR + and the high-order bits are on the stack; + And it's passed on the stack if no GAR is available. */ if (far > 0 && gar > 0) { if (first_member_is_fixed_point =3D=3D false) @@ -851,22 +880,22 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (far =3D=3D 0 && gar =3D=3D 1) { pass_in_gar (regcache, gar--, val); - pass_on_stack (regcache, val + regsize, len - regsize, align); + pass_on_stack (regcache, val + regsize, len - regsize, align, &addr= ); } else if (far =3D=3D 0 && gar =3D=3D 0) { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } else { /* The argument is passed in a pair of available GAR, - * with the low-order bits in the lower-numbered GAR - * and the high-order bits in the higher-numbered GAR. - * If only one GAR is available, - * the low-order bits are in the GAR - * and the high-order bits are on the stack, - * and passed on the stack if no GAR is available. */ + with the low-order bits in the lower-numbered GAR + and the high-order bits in the higher-numbered GAR. + If only one GAR is available, + the low-order bits are in the GAR + and the high-order bits are on the stack, + and passed on the stack if no GAR is available. */ if (gar >=3D 2) { pass_in_gar (regcache, gar--, val); @@ -875,11 +904,11 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (gar =3D=3D 1) { pass_in_gar (regcache, gar--, val); - pass_on_stack (regcache, val + regsize, len - regsize, align); + pass_on_stack (regcache, val + regsize, len - regsize, align, &addr= ); } else { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } } @@ -887,15 +916,15 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (len > 2 * regsize) { /* It's passed by reference and are replaced in the argument list= with the address. - * If there is an available GAR, the reference is passed in the GAR, - * and passed on the stack if no GAR is available. */ + If there is an available GAR, the reference is passed in the GAR, + and passed on the stack if no GAR is available. */ sp =3D align_down (sp - len, 16); write_memory (sp, val, len); =20 if (gar > 0) pass_in_gar (regcache, gar--, (const gdb_byte *) &sp); else - pass_on_stack (regcache, (const gdb_byte*) &sp, len, regsize); + pass_on_stack (regcache, (const gdb_byte*) &sp, len, regsize, &addr); } } break; @@ -904,21 +933,21 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, if (len > 0 && len <=3D regsize) { /* The argument is passed in a GAR, - * or on the stack by value if no GAR is available. */ + or on the stack by value if no GAR is available. */ if (gar > 0) pass_in_gar (regcache, gar--, val); else - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } else if (len > regsize && len <=3D 2 * regsize) { /* The argument is passed in a pair of available GAR, - * with the low-order bits in the lower-numbered GAR - * and the high-order bits in the higher-numbered GAR. - * If only one GAR is available, - * the low-order bits are in the GAR - * and the high-order bits are on the stack. - * The arguments are passed on the stack when no GAR is available. = */ + with the low-order bits in the lower-numbered GAR + and the high-order bits in the higher-numbered GAR. + If only one GAR is available, + the low-order bits are in the GAR + and the high-order bits are on the stack. + The arguments are passed on the stack when no GAR is available. */ if (gar >=3D 2) { pass_in_gar (regcache, gar--, val); @@ -927,25 +956,25 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (gar =3D=3D 1) { pass_in_gar (regcache, gar--, val); - pass_on_stack (regcache, val + regsize, len - regsize, align); + pass_on_stack (regcache, val + regsize, len - regsize, align, &addr); } else { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } else if (len > 2 * regsize) { /* It's passed by reference and are replaced in the argument list w= ith the address. - * If there is an available GAR, the reference is passed in the GAR, - * and passed on the stack if no GAR is available. */ + If there is an available GAR, the reference is passed in the GAR, + and passed on the stack if no GAR is available. */ sp =3D align_down (sp - len, 16); write_memory (sp, val, len); =20 if (gar > 0) pass_in_gar (regcache, gar--, (const gdb_byte *) &sp); else - pass_on_stack (regcache, (const gdb_byte*) &sp, len, regsize); + pass_on_stack (regcache, (const gdb_byte*) &sp, len, regsize, &addr); } break; case TYPE_CODE_COMPLEX: @@ -956,11 +985,11 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, if (target_len < regsize) { /* The complex with two float members - * is passed in a pair of available FAR, - * with the low-order float member bits in the lower-numbered FAR - * and the high-order float member bits in the higher-numbered FAR. - * If the number of available FAR is less than 2, it's passed in a GAR, - * and passed on the stack if no GAR is available. */ + is passed in a pair of available FAR, + with the low-order float member bits in the lower-numbered FAR + and the high-order float member bits in the higher-numbered FAR. + If the number of available FAR is less than 2, it's passed in a GAR, + and passed on the stack if no GAR is available. */ if (far >=3D 2) { pass_in_far (regcache, far--, val); @@ -972,23 +1001,23 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, } else { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } else if (target_len =3D=3D regsize) { /* The complex with two double members - * is passed in a pair of available FAR, - * with the low-order bits in the lower-numbered FAR - * and the high-order bits in the higher-numbered FAR. - * If no a pair of available FAR, - * it's passed in a pair of available GAR, - * with the low-order bits in the lower-numbered GAR - * and the high-order bits in the higher-numbered GAR. - * If only one GAR is available, - * the low-order bits are in the GAR - * and the high-order bits are on stack, - * and passed on the stack if no GAR is available. */ + is passed in a pair of available FAR, + with the low-order bits in the lower-numbered FAR + and the high-order bits in the higher-numbered FAR. + If no a pair of available FAR, + it's passed in a pair of available GAR, + with the low-order bits in the lower-numbered GAR + and the high-order bits in the higher-numbered GAR. + If only one GAR is available, + the low-order bits are in the GAR + and the high-order bits are on stack, + and passed on the stack if no GAR is available. */ { if (far >=3D 2) { @@ -1003,27 +1032,27 @@ loongarch_push_dummy_call (struct gdbarch *gdbarch, else if (gar =3D=3D 1) { pass_in_gar (regcache, gar--, val); - pass_on_stack (regcache, val + align, len - align, align); + pass_on_stack (regcache, val + align, len - align, align, &addr); } else { - pass_on_stack (regcache, val, len, align); + pass_on_stack (regcache, val, len, align, &addr); } } } else if (target_len =3D=3D 2 * regsize) { /* The complex with two long double members - * is passed by reference and are replaced in the argument list with the= address. - * If there is an available GAR, the reference is passed in the G= AR, - * and passed on the stack if no GAR is available. */ + is passed by reference and are replaced in the argument list with the= address. + If there is an available GAR, the reference is passed in the GAR, + and passed on the stack if no GAR is available. */ sp =3D align_down (sp - len, 16); write_memory (sp, val, len); =20 if (gar > 0) pass_in_gar (regcache, gar--, (const gdb_byte *) &sp); else - pass_on_stack (regcache, (const gdb_byte*) &sp, regsize, regsize); + pass_on_stack (regcache, (const gdb_byte*) &sp, regsize, regsize, &add= r); } } break;