From: Joel Brobecker <brobecker@adacore.com>
To: gdb-patches@sourceware.org
Subject: [RFA/sparc64] internal-error printing return value (Ada array)
Date: Sat, 11 Nov 2006 00:26:00 -0000 [thread overview]
Message-ID: <20061111002614.GD3746@adacore.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 2382 bytes --]
Hello,
When working on GDB for sparc64-sun-solaris, I noticed that GDB
reports an internal error when trying to print the return value
of a function returning an Ada (fixed-size) array. I noticed this
in gdb.ada/array_return.exp:
FAIL: gdb.ada/array_return.exp: value printed by finish of Create_Small
FAIL: gdb.ada/array_return.exp: value printed by finish of Create_Large
Here is what happens. First the transcript:
(gdb) b pck.adb:5
Breakpoint 1 at 0x100009e84: file pck.adb, line 5.
(gdb) run
Starting program: /[...]/p
Breakpoint 1, pck.create_small () at pck.adb:5
5 return (others => 1);
(gdb) fin
Run till exit from #0 pck.create_small () at pck.adb:5
0x0000000100009fd0 in p () at p.adb:7
7 Small := Create_Small;
sparc64-tdep.c:1092: internal-error: sparc64_extract_return_value: Assertion `sp
arc64_integral_or_pointer_p (type)' failed.
The type in question is a TYPE_CODE_ARRAY. It seems that this case
is not handled yet by the function that extracts the return value:
sparc64-tdep.c:sparc64_extract_return_value
I am not sure yet whether this case is specific to Ada or if we can
reproduce the same with C, I will double-check. In any case, these
array objects are returned the same way as struct objects: Up to 32 bytes,
they are passed by register, otherwise %o0 contains the address of the
returned object.
I think the best fix for this is to update sparc64_structure_or_union_p
to accept arrays of 32 bytes or less. The name would become slightly
misleading for its actual implementation, and I wouldn't mind changing
it if felt necessary.
I don't know if the same issue applies to 32bit GDB or not. I tried,
but "fin" doesn't stop at the function return, so I never get the
returned value printed by GDB. I'll have a look at this another time.
I also noticed that the same problem happens for arrays larger than
32bytes. In fact, this is not specific to arrays, but to structures
as well. Support for structures larger than 32 bytes seems to be
missing. I can add that too, but let's make this another patch.
2006-11-10 Joel Brobecker <brobecker@adacore.com>
* sparc64-tdep.c (sparc64_structure_or_union_p): Accept array
types if the type length is 32 bytes or less.
Fixes the two FAILs above, no regression.
OK to apply?
Thanks,
--
Joel
[-- Attachment #2: sparc64-tdep.c.diff --]
[-- Type: text/plain, Size: 602 bytes --]
Index: sparc64-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sparc64-tdep.c,v
retrieving revision 1.27
diff -u -p -r1.27 sparc64-tdep.c
--- sparc64-tdep.c 22 Aug 2006 20:57:56 -0000 1.27
+++ sparc64-tdep.c 11 Nov 2006 00:24:36 -0000
@@ -114,6 +114,9 @@ sparc64_structure_or_union_p (const stru
case TYPE_CODE_STRUCT:
case TYPE_CODE_UNION:
return 1;
+ case TYPE_CODE_ARRAY:
+ /* Arrays of up to 32 bytes are returned the same way as record. */
+ return (TYPE_LENGTH (type) <= 32);
default:
break;
}
next reply other threads:[~2006-11-11 0:26 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-11 0:26 Joel Brobecker [this message]
2006-11-11 17:47 ` Mark Kettenis
2006-11-12 0:22 ` Joel Brobecker
2006-11-12 20:49 ` Mark Kettenis
2006-11-12 21:55 ` Joel Brobecker
2006-11-13 21:26 ` Mark Kettenis
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=20061111002614.GD3746@adacore.com \
--to=brobecker@adacore.com \
--cc=gdb-patches@sourceware.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