From: Pitchumani Sivanupandi <pitchumani.s@atmel.com>
To: <gdb-patches@sourceware.org>
Cc: <lgustavo@codesourcery.com>, <chertykov@gmail.com>,
<troth@openavr.org>, <palves@redhat.com>
Subject: [patch, avr] Fix argument passing for call
Date: Tue, 01 Mar 2016 11:09:00 -0000 [thread overview]
Message-ID: <20160301110937.GA3892@CHELT0346> (raw)
[-- Attachment #1: Type: text/plain, Size: 1016 bytes --]
When calling function with argument of size more than 8 bytes fails with
an error "That operation is not available on integers of more than 8 bytes.".
avr-gdb considers only 8 bytes (sizeof(long long)) in case of passing the
argument in registers. When the argument is of size more than 8 byte
then the utility function to extract bytes failed with the above error.
Attached a patch fix this issue. This patch includes the fix discussed
here: https://sourceware.org/ml/gdb-patches/2016-02/msg00884.html
(Both fixes are in same function and the earlier is not committed)
Ran the tests for avr-gdb with internal simulators. No new regressions.
If ok, could someone commit please? I do not have commit access.
Regards,
Pitchumani
gdb/ChangeLog
2016-03-01 Pitchumani Sivanupandi<pitchumani.s@atmel.com>
* avr-tdep.c (AVR_LAST_ARG_REGNUM): Define.
(avr_push_dummy_call): Correct last needed argument register.
Write MSB of argument into register and subsequent bytes into
other registers in decreasing order.
[-- Attachment #2: fix-argument-passing.patch --]
[-- Type: text/plain, Size: 1901 bytes --]
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index 597cfb4..088fe51 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -111,6 +111,7 @@ enum
AVR_ARG1_REGNUM = 24, /* Single byte argument */
AVR_ARGN_REGNUM = 25, /* Multi byte argments */
+ AVR_LAST_ARG_REGNUM = 8, /* Last argument register */
AVR_RET1_REGNUM = 24, /* Single byte return value */
AVR_RETN_REGNUM = 25, /* Multi byte return value */
@@ -1298,23 +1299,24 @@ avr_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
const bfd_byte *contents = value_contents (arg);
int len = TYPE_LENGTH (type);
- /* Calculate the potential last register needed. */
- last_regnum = regnum - (len + (len & 1));
+ /* Calculate the potential last register needed.
+ E.g. For length 2, registers regnum and regnum-1 (say 25 and 24)
+ shall be used. So, last needed register will be regnum-1(24). */
+ last_regnum = regnum - (len + (len & 1)) + 1;
/* If there are registers available, use them. Once we start putting
stuff on the stack, all subsequent args go on stack. */
- if ((si == NULL) && (last_regnum >= 8))
+ if ((si == NULL) && (last_regnum >= AVR_LAST_ARG_REGNUM))
{
- ULONGEST val;
-
/* Skip a register for odd length args. */
if (len & 1)
regnum--;
- val = extract_unsigned_integer (contents, len, byte_order);
+ /* Write MSB of argument into register and subsequent bytes in
+ decreasing register numbers. */
for (j = 0; j < len; j++)
regcache_cooked_write_unsigned
- (regcache, regnum--, val >> (8 * (len - j - 1)));
+ (regcache, regnum--, contents[len - j - 1]);
}
/* No registers available, push the args onto the stack. */
else
next reply other threads:[~2016-03-01 11:09 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-01 11:09 Pitchumani Sivanupandi [this message]
2016-03-05 12:21 ` Denis Chertykov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160301110937.GA3892@CHELT0346 \
--to=pitchumani.s@atmel.com \
--cc=chertykov@gmail.com \
--cc=gdb-patches@sourceware.org \
--cc=lgustavo@codesourcery.com \
--cc=palves@redhat.com \
--cc=troth@openavr.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox