This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA/sparc64] internal-error printing return value (Ada array)


> > To decide what is the right fix, we need to investigate this a bit
> > further.
> > I suspect that Ada arrays arereally treated as structures where all
> > members
> > have the same type.
>
>  In Ada, arrays can take many forms, and as a result, you have
>  3 types of arrays:
>
>    . statically known arrays (where the array bounds are known at
>      compile time), are implemented using a memory buffer. This is
>      our case here.
>
>    . Then we have fat pointers: This is a structure that contains
>      two pointers, one to a structure containing the array bounds,
>      and one pointer to the memory buffer itself. We use that for
>      arrays whose bounds are not known at compile time.
>
>    . Lastly, we have thin pointers: This is a pointer to the second
>      field of a structure that resembles the fat pointer.
>
> > So the first question I have is whether these indeed
> > have "fields".
>
>  Is this question still relevant after the description above?
>  I am not sure I understand it.

Hmm, I gueass I should have asked how a gdb `struct type' looks for
these Ada arrays?  In particular, if main_type->nfields is set and
whether main_type->fields is set to something useful.

> > You should also check how small arrays are passed as arguments to a
> > function.
>
>  This is described by the Ada Reference Manual: Arrays are always
>  passed by reference. So a function taking a parameter of our static
>  array type will have the array passed by reference.  As a result,
>  the the array parameter will be a REF to a TYPE_CODE_ARRAY.

So there is no way to pass a TYPE_CODE_ARRAY directly?

> > Here the magic length will be 16 bytes instead of 32 bytes.
>
>  I don't understand this part. Why 16 bytes instead of 32?
>  If the total size of the array is 32 bytes, shouldn't the compiler
>  return it through %o0 - %o7?

The 16-byte limit is for passing structures as an argument to a function.
I presume this is because function arguments occupy 16-byte slots in the
ABI.

Mark


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]