From patchwork Fri Nov 13 10:23:59 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 9659 Received: (qmail 79346 invoked by alias); 13 Nov 2015 10:24:08 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 79324 invoked by uid 89); 13 Nov 2015 10:24:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pa0-f47.google.com Received: from mail-pa0-f47.google.com (HELO mail-pa0-f47.google.com) (209.85.220.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 13 Nov 2015 10:24:05 +0000 Received: by padhx2 with SMTP id hx2so96580989pad.1 for ; Fri, 13 Nov 2015 02:24:04 -0800 (PST) X-Received: by 10.66.220.33 with SMTP id pt1mr31059018pac.71.1447410244144; Fri, 13 Nov 2015 02:24:04 -0800 (PST) Received: from E107787-LIN.cambridge.arm.com (gcc2-power8.osuosl.org. [140.211.9.43]) by smtp.gmail.com with ESMTPSA id cs5sm19603166pbc.15.2015.11.13.02.24.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 13 Nov 2015 02:24:03 -0800 (PST) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [PATCH] Pass value * instead of bfd_byte * to pass_* functions in aarch64-tdep.c Date: Fri, 13 Nov 2015 10:23:59 +0000 Message-Id: <1447410239-11723-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes This patch changes the last argument of functions pass_in_x_or_stack, pass_in_v_or_stack, pass_on_stack, and pass_in_x to type value *. Regression tested on aarch64-linux. gdb: 2015-11-13 Yao Qi * aarch64-tdep.c (pass_in_x_or_stack): Change argument type from bfd_byte * to value *. Caller updated. (pass_in_x): Likewise. (pass_in_v_or_stack): Likewise. (pass_on_stack): Likewise. --- gdb/aarch64-tdep.c | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 553a420..b025eba 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -989,12 +989,13 @@ struct aarch64_call_info static void pass_in_x (struct gdbarch *gdbarch, struct regcache *regcache, struct aarch64_call_info *info, struct type *type, - const bfd_byte *buf) + struct value *arg) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int len = TYPE_LENGTH (type); enum type_code typecode = TYPE_CODE (type); int regnum = AARCH64_X0_REGNUM + info->ngrn; + const bfd_byte *buf = value_contents (arg); info->argnum++; @@ -1059,8 +1060,9 @@ pass_in_v (struct gdbarch *gdbarch, static void pass_on_stack (struct aarch64_call_info *info, struct type *type, - const bfd_byte *buf) + struct value *arg) { + const bfd_byte *buf = value_contents (arg); int len = TYPE_LENGTH (type); int align; stack_item_t item; @@ -1108,7 +1110,7 @@ pass_on_stack (struct aarch64_call_info *info, struct type *type, static void pass_in_x_or_stack (struct gdbarch *gdbarch, struct regcache *regcache, struct aarch64_call_info *info, struct type *type, - const bfd_byte *buf) + struct value *arg) { int len = TYPE_LENGTH (type); int nregs = (len + X_REGISTER_SIZE - 1) / X_REGISTER_SIZE; @@ -1116,13 +1118,13 @@ pass_in_x_or_stack (struct gdbarch *gdbarch, struct regcache *regcache, /* PCS C.13 - Pass in registers if we have enough spare */ if (info->ngrn + nregs <= 8) { - pass_in_x (gdbarch, regcache, info, type, buf); + pass_in_x (gdbarch, regcache, info, type, arg); info->ngrn += nregs; } else { info->ngrn = 8; - pass_on_stack (info, type, buf); + pass_on_stack (info, type, arg); } } @@ -1134,10 +1136,10 @@ pass_in_v_or_stack (struct gdbarch *gdbarch, struct regcache *regcache, struct aarch64_call_info *info, struct type *type, - const bfd_byte *buf) + struct value *arg) { - if (!pass_in_v (gdbarch, regcache, info, buf)) - pass_on_stack (info, type, buf); + if (!pass_in_v (gdbarch, regcache, info, value_contents (arg))) + pass_on_stack (info, type, arg); } /* Implement the "push_dummy_call" gdbarch method. */ @@ -1251,8 +1253,7 @@ aarch64_push_dummy_call (struct gdbarch *gdbarch, struct value *function, arg_type = builtin_type (gdbarch)->builtin_int32; arg = value_cast (arg_type, arg); } - pass_in_x_or_stack (gdbarch, regcache, &info, arg_type, - value_contents (arg)); + pass_in_x_or_stack (gdbarch, regcache, &info, arg_type, arg); break; case TYPE_CODE_COMPLEX: @@ -1269,12 +1270,11 @@ aarch64_push_dummy_call (struct gdbarch *gdbarch, struct value *function, else { info.nsrn = 8; - pass_on_stack (&info, arg_type, value_contents (arg)); + pass_on_stack (&info, arg_type, arg); } break; case TYPE_CODE_FLT: - pass_in_v_or_stack (gdbarch, regcache, &info, arg_type, - value_contents (arg)); + pass_in_v_or_stack (gdbarch, regcache, &info, arg_type, arg); break; case TYPE_CODE_STRUCT: @@ -1299,14 +1299,14 @@ aarch64_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct type *field_type = check_typedef (value_type (field)); - pass_in_v_or_stack (gdbarch, regcache, &info, field_type, - value_contents (field)); + pass_in_v_or_stack (gdbarch, regcache, &info, + field_type, field); } } else { info.nsrn = 8; - pass_on_stack (&info, arg_type, value_contents (arg)); + pass_on_stack (&info, arg_type, arg); } } else if (len > 16) @@ -1323,18 +1323,15 @@ aarch64_push_dummy_call (struct gdbarch *gdbarch, struct value *function, /* Construct the indirection. */ arg_type = lookup_pointer_type (arg_type); arg = value_from_pointer (arg_type, sp); - pass_in_x_or_stack (gdbarch, regcache, &info, arg_type, - value_contents (arg)); + pass_in_x_or_stack (gdbarch, regcache, &info, arg_type, arg); } else /* PCS C.15 / C.18 multiple values pass. */ - pass_in_x_or_stack (gdbarch, regcache, &info, arg_type, - value_contents (arg)); + pass_in_x_or_stack (gdbarch, regcache, &info, arg_type, arg); break; default: - pass_in_x_or_stack (gdbarch, regcache, &info, arg_type, - value_contents (arg)); + pass_in_x_or_stack (gdbarch, regcache, &info, arg_type, arg); break; } }