On Tue, Jul 16, 2019 at 03:48:22PM +0200, Mark Wielaard wrote:
> > > > These attributes including cpu name and some other ISA related
> > > > descriptions.
> > > > Some thing like:
> > > > CSKY_ARCH_NAME: "ck810"
> > > > CSKY_CPU_NAME:  "ck810f"
> > > > CSKY_ISA_FLAG:  0x12345678
> > > > CSKY_ISA_EXT_FLAG:  5
> > > > They are not documented yet.
> > > > I'v ask the person who is responsible for these to update the ABI
> > > > documents, but I think it will take a quite long time for them to
> > > > do that. They are quite busy at present.
> > > 
> > > OK. If you can add that tweak to src/readelf.c and add an
> > > check_object_attribute hook that handles the above attributes that
> > > would be good.
> > > 
> > > Ideally you also add a testcase for tests/readelf-A.sh
> > > Some of those tests cheat and create the attributes by hand.
> > > But it would be nice if you could generate a small .o file with the
> > > latest toolchain to be used as testcase in some other tests.
> > 
> > I'm not sure about how to handle different data type here. It seems
> > only tag_name is required when data type is string, I could not
> > found how to handle int here.
> > The binary with csky.attribute currently can not be generate with
> > public
> > released toolchain, so I don't know how to add the testcase.
> 
> OK, lets add a testcase once this has gone upstream in the rest of the
> toolchain. Good point about the tag representing a string or number.
> But I think this is (accidentially) handled correctly already. See this
> comment in readelf.c (print_attributes):
> 
>    /* GNU style tags have either a uleb128 value,
>       when lowest bit is not set, or a string
>       when the lowest bit is set.
>       "compatibility" (32) is special.  It has
>       both a string and a uleb128 value.  For
>       non-gnu we assume 6 till 31 only take ints.
>       XXX see arm backend, do we need a separate
>       hook?  */
> 
> We probably need another hook one day, but it looks like csky follows
> this assumption (4 and 5 are strings, 6 and 7 are numbers).

Yes, csky follows this assumption, so it is handled correctly already.
 
> There is one bug in the implementation though. The vendor check is
> wrong, checks for "gnu", should obviously be "csky":
> 
> diff --git a/backends/csky_attrs.c b/backends/csky_attrs.c
> index 9b236f1c..177f0ba2 100644
> --- a/backends/csky_attrs.c
> +++ b/backends/csky_attrs.c
> @@ -43,7 +43,7 @@ csky_check_object_attribute (Ebl *ebl __attribute__ 
> ((unused)),
>                             const char **tag_name,
>                             const char **value_name __attribute__ ((unused)))
>  {
> -  if (!strcmp (vendor, "gnu"))
> +  if (!strcmp (vendor, "csky"))
>      switch (tag)
>        {
>        case 4:
> 
> > Tested on x86
> > ============================================================================
> > Testsuite summary for elfutils 0.176
> > ============================================================================
> > # TOTAL: 209
> > # PASS:  204
> > # SKIP:  5
> > # XFAIL: 0
> > # FAIL:  0
> > # XPASS: 0
> > # ERROR: 0
> > ============================================================================
> > 
> > Changes since v1:
> >   - Add the Signed-off-by line and the copyright
> > 
> > Changes since v2:
> >   - move changelog to corresponding entries
> >   - correct core dump registers size
> >   - remove unused fpu DWARF register
> > 
> > Changes since v3:
> >   - add testfilecsky.bz2 and hello_csky.ko.bz2
> >   - add csky_check_object_attribute
> > 
> > Mao Han (1):
> >   Add backend support for C-SKY
> 
> The new patch looks really good. Thanks. The addition of the testcases
> really helps showing things look good. I can make that one small fix
> s/gnu/csky/ in csky_attrs.c if you agree that is what was intended.
> Then I'll push it to master.

Yes, please. Thanks for your review and help improveing the patch.

> And after the next release we can add some more testcases and handle to
> register mappings more correctly.
OK.

Thanks,
Mao Han

Reply via email to