public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
* Re: [PATCH 2/5] sparc: support for the check_object_attribute ebl hook.
@ 2015-10-06 14:20 Jose E. Marchesi
  0 siblings, 0 replies; 4+ messages in thread
From: Jose E. Marchesi @ 2015-10-06 14:20 UTC (permalink / raw)
  To: elfutils-devel

[-- Attachment #1: Type: text/plain, Size: 6544 bytes --]


    On Mon, Oct 05, 2015 at 05:36:31PM +0200, Jose E. Marchesi wrote:
    > This makes elfutils based utilities to be aware of the ELF attribute
    > tags defined in sparc targets.
    
    Are the hwcap values specified somewhere?
    If so it would be good to add an URL to the specification.

No, the hardware capabilities are not currently documented in the psABI
(this will change soon tho).

    > +bool
    > +sparc_check_object_attribute (Ebl *ebl __attribute__ ((unused)),
    > +			      const char *vendor, int tag, uint64_t value,
    > +			      const char **tag_name, const char **value_name)
    > +{
    > +  if (!strcmp (vendor, "gnu"))
    > +    switch (tag)
    > +      {
    > +      case 4:
    > +	*tag_name = "GNU_Sparc_HWCAPS";
    > +	static const char *hwcaps[32] =
    > +	  {
    > +	    "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2",
    > +	    "asi_blk_init", "fmaf", NULL, "vis3", "hpc", "random", "trans", "fjfmau",
    > +	    "ima", "asi_cache_sparing", "aes", "des", "kasumi", "camellia",
    > +	    "md5", "sha1", "sha256", "sha512", "mpmul", "mont", "pause",
    > +	    "cbcond", "crc32c", NULL, NULL
    > +	  };
    > +	if (value < 32 && hwcaps[value] != NULL)
    > +	  *value_name = hwcaps[value];
    > +	return true;
    > +
    > +      case 8:
    > +	*tag_name = "GNU_Sparc_HWCAPS2";
    > +	static const char *hwcaps2[32] =
    > +	  {
    > +	    "fjathplus", "vis3b", "adp", "sparc5", "mwait", "xmpmul",
    > +	    "xmont", "nsec", "fjathhpc", "fjdes", "fjaes"
    > +	  };
    > +	if (value < 32 && hwcaps2[value] != NULL)
    > +	  *value_name = hwcaps2[value];
    > +	return true;
    > +      }
    > +
    > +  return false;
    > +}
    
    I assume only values 0-31 are valid, even if there isn't currently any
    name specified. It would be slightly more efficient to only define the
    actually used values so we don't have these large empty arrays.

Only the values with names associated are valid.  In the amended patch
below the arrays are packed to not waste space.  Note however the
isolated NULL in the first array.  It corresponds to an unused bit in
AT_HWCAP.

commit 7ad347d264b280507caae3d8b8f171acf7a5c0a9
Author: Jose E. Marchesi <jose.marchesi@oracle.com>
Date:   Tue Oct 6 14:10:53 2015 +0200

    sparc: support for the check_object_attribute ebl hook.
    
    This makes elfutils based utilities to be aware of the ELF attribute
    tags defined in sparc targets.
    
    Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>

diff --git a/backends/ChangeLog b/backends/ChangeLog
index 60c6b72..791b9db 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-06  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* sparc_attrs.c: New file.
+	* Makefile.am (sparc_SRCS): Added sparc_attrs.c
+	* sparc_init.c (sparc_init): Hook sparc_check_object_attribute.
+
 2015-10-02  Jose E. Marchesi  <jose.marchesi@oracle.com>
 
 	* sparc_init.c (RELOC_TYPE_ID): Defined.
diff --git a/backends/Makefile.am b/backends/Makefile.am
index 21d7bd2..cefe5eb 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -84,7 +84,7 @@ libebl_aarch64_pic_a_SOURCES = $(aarch64_SRCS)
 am_libebl_aarch64_pic_a_OBJECTS = $(aarch64_SRCS:.c=.os)
 
 sparc_SRCS = sparc_init.c sparc_symbol.c sparc_regs.c sparc_retval.c \
-	     sparc_corenote.c sparc64_corenote.c sparc_auxv.c
+	     sparc_corenote.c sparc64_corenote.c sparc_auxv.c sparc_attrs.c
 libebl_sparc_pic_a_SOURCES = $(sparc_SRCS)
 am_libebl_sparc_pic_a_OBJECTS = $(sparc_SRCS:.c=.os)
 
diff --git a/backends/sparc_attrs.c b/backends/sparc_attrs.c
new file mode 100644
index 0000000..e95b577
--- /dev/null
+++ b/backends/sparc_attrs.c
@@ -0,0 +1,75 @@
+/* Object attribute tags for SPARC.
+   Copyright (C) 2015 Oracle, Inc.
+   This file is part of elfutils.
+
+   This file is free software; you can redistribute it and/or modify
+   it under the terms of either
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at
+       your option) any later version
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at
+       your option) any later version
+
+   or both in parallel, as here.
+
+   elfutils is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <dwarf.h>
+
+#define BACKEND sparc_
+#include "libebl_CPU.h"
+
+bool
+sparc_check_object_attribute (Ebl *ebl __attribute__ ((unused)),
+			      const char *vendor, int tag, uint64_t value,
+			      const char **tag_name, const char **value_name)
+{
+  if (!strcmp (vendor, "gnu"))
+    switch (tag)
+      {
+      case 4:
+	*tag_name = "GNU_Sparc_HWCAPS";
+	static const char *hwcaps[30] =
+	  {
+	    "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2",
+	    "asi_blk_init", "fmaf", NULL, "vis3", "hpc", "random", "trans", "fjfmau",
+	    "ima", "asi_cache_sparing", "aes", "des", "kasumi", "camellia",
+	    "md5", "sha1", "sha256", "sha512", "mpmul", "mont", "pause",
+	    "cbcond", "crc32c"
+	  };
+	if (value < 30 && hwcaps[value] != NULL)
+	  *value_name = hwcaps[value];
+	return true;
+
+      case 8:
+	*tag_name = "GNU_Sparc_HWCAPS2";
+	static const char *hwcaps2[11] =
+	  {
+	    "fjathplus", "vis3b", "adp", "sparc5", "mwait", "xmpmul",
+	    "xmont", "nsec", "fjathhpc", "fjdes", "fjaes"
+	  };
+	if (value < 11)
+	  *value_name = hwcaps2[value];
+	return true;
+      }
+
+  return false;
+}
+
diff --git a/backends/sparc_init.c b/backends/sparc_init.c
index 229a9b0..f8a7cfb 100644
--- a/backends/sparc_init.c
+++ b/backends/sparc_init.c
@@ -75,6 +75,7 @@ sparc_init (Elf *elf __attribute__ ((unused)),
   HOOK (eh, auxv_info);
   HOOK (eh, register_info);
   HOOK (eh, return_value_location);
+  HOOK (eh, check_object_attribute);
 
   return MODVERSION;
 }


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/5] sparc: support for the check_object_attribute ebl hook.
@ 2015-10-06 21:56 Mark Wielaard
  0 siblings, 0 replies; 4+ messages in thread
From: Mark Wielaard @ 2015-10-06 21:56 UTC (permalink / raw)
  To: elfutils-devel

[-- Attachment #1: Type: text/plain, Size: 356 bytes --]

On Tue, 2015-10-06 at 16:20 +0200, Jose E. Marchesi wrote:
> 
>     sparc: support for the check_object_attribute ebl hook.
>     
>     This makes elfutils based utilities to be aware of the ELF attribute
>     tags defined in sparc targets.
>     
>     Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>

Thanks, pushed to master.



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/5] sparc: support for the check_object_attribute ebl hook.
@ 2015-10-05 21:55 Mark Wielaard
  0 siblings, 0 replies; 4+ messages in thread
From: Mark Wielaard @ 2015-10-05 21:55 UTC (permalink / raw)
  To: elfutils-devel

[-- Attachment #1: Type: text/plain, Size: 1713 bytes --]

On Mon, Oct 05, 2015 at 05:36:31PM +0200, Jose E. Marchesi wrote:
> This makes elfutils based utilities to be aware of the ELF attribute
> tags defined in sparc targets.

Are the hwcap values specified somewhere?
If so it would be good to add an URL to the specification.

> +bool
> +sparc_check_object_attribute (Ebl *ebl __attribute__ ((unused)),
> +			      const char *vendor, int tag, uint64_t value,
> +			      const char **tag_name, const char **value_name)
> +{
> +  if (!strcmp (vendor, "gnu"))
> +    switch (tag)
> +      {
> +      case 4:
> +	*tag_name = "GNU_Sparc_HWCAPS";
> +	static const char *hwcaps[32] =
> +	  {
> +	    "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2",
> +	    "asi_blk_init", "fmaf", NULL, "vis3", "hpc", "random", "trans", "fjfmau",
> +	    "ima", "asi_cache_sparing", "aes", "des", "kasumi", "camellia",
> +	    "md5", "sha1", "sha256", "sha512", "mpmul", "mont", "pause",
> +	    "cbcond", "crc32c", NULL, NULL
> +	  };
> +	if (value < 32 && hwcaps[value] != NULL)
> +	  *value_name = hwcaps[value];
> +	return true;
> +
> +      case 8:
> +	*tag_name = "GNU_Sparc_HWCAPS2";
> +	static const char *hwcaps2[32] =
> +	  {
> +	    "fjathplus", "vis3b", "adp", "sparc5", "mwait", "xmpmul",
> +	    "xmont", "nsec", "fjathhpc", "fjdes", "fjaes"
> +	  };
> +	if (value < 32 && hwcaps2[value] != NULL)
> +	  *value_name = hwcaps2[value];
> +	return true;
> +      }
> +
> +  return false;
> +}

I assume only values 0-31 are valid, even if there isn't currently any
name specified. It would be slightly more efficient to only define the
actually used values so we don't have these large empty arrays.

Thanks,

Mark

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/5] sparc: support for the check_object_attribute ebl hook.
@ 2015-10-05 15:36 Jose E. Marchesi
  0 siblings, 0 replies; 4+ messages in thread
From: Jose E. Marchesi @ 2015-10-05 15:36 UTC (permalink / raw)
  To: elfutils-devel

[-- Attachment #1: Type: text/plain, Size: 4439 bytes --]

This makes elfutils based utilities to be aware of the ELF attribute
tags defined in sparc targets.

Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
---
 backends/ChangeLog     |  6 ++++
 backends/Makefile.am   |  2 +-
 backends/sparc_attrs.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++
 backends/sparc_init.c  |  1 +
 4 files changed, 83 insertions(+), 1 deletion(-)
 create mode 100644 backends/sparc_attrs.c

diff --git a/backends/ChangeLog b/backends/ChangeLog
index 9d98f35..b5e1940 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-02  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* sparc_attrs.c: New file.
+	* Makefile.am (sparc_SRCS): Added sparc_attrs.c
+	* sparc_init.c (sparc_init): Hook sparc_check_object_attribute.
+
 2015-09-22  Mark Wielaard  <mjw@redhat.com>
 
 	* arm_attrs.c: Remove old-style function definitions.
diff --git a/backends/Makefile.am b/backends/Makefile.am
index 21d7bd2..cefe5eb 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -84,7 +84,7 @@ libebl_aarch64_pic_a_SOURCES = $(aarch64_SRCS)
 am_libebl_aarch64_pic_a_OBJECTS = $(aarch64_SRCS:.c=.os)
 
 sparc_SRCS = sparc_init.c sparc_symbol.c sparc_regs.c sparc_retval.c \
-	     sparc_corenote.c sparc64_corenote.c sparc_auxv.c
+	     sparc_corenote.c sparc64_corenote.c sparc_auxv.c sparc_attrs.c
 libebl_sparc_pic_a_SOURCES = $(sparc_SRCS)
 am_libebl_sparc_pic_a_OBJECTS = $(sparc_SRCS:.c=.os)
 
diff --git a/backends/sparc_attrs.c b/backends/sparc_attrs.c
new file mode 100644
index 0000000..cf5086b
--- /dev/null
+++ b/backends/sparc_attrs.c
@@ -0,0 +1,75 @@
+/* Object attribute tags for SPARC.
+   Copyright (C) 2015 Oracle, Inc.
+   This file is part of elfutils.
+
+   This file is free software; you can redistribute it and/or modify
+   it under the terms of either
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at
+       your option) any later version
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at
+       your option) any later version
+
+   or both in parallel, as here.
+
+   elfutils is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <dwarf.h>
+
+#define BACKEND sparc_
+#include "libebl_CPU.h"
+
+bool
+sparc_check_object_attribute (Ebl *ebl __attribute__ ((unused)),
+			      const char *vendor, int tag, uint64_t value,
+			      const char **tag_name, const char **value_name)
+{
+  if (!strcmp (vendor, "gnu"))
+    switch (tag)
+      {
+      case 4:
+	*tag_name = "GNU_Sparc_HWCAPS";
+	static const char *hwcaps[32] =
+	  {
+	    "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2",
+	    "asi_blk_init", "fmaf", NULL, "vis3", "hpc", "random", "trans", "fjfmau",
+	    "ima", "asi_cache_sparing", "aes", "des", "kasumi", "camellia",
+	    "md5", "sha1", "sha256", "sha512", "mpmul", "mont", "pause",
+	    "cbcond", "crc32c", NULL, NULL
+	  };
+	if (value < 32 && hwcaps[value] != NULL)
+	  *value_name = hwcaps[value];
+	return true;
+
+      case 8:
+	*tag_name = "GNU_Sparc_HWCAPS2";
+	static const char *hwcaps2[32] =
+	  {
+	    "fjathplus", "vis3b", "adp", "sparc5", "mwait", "xmpmul",
+	    "xmont", "nsec", "fjathhpc", "fjdes", "fjaes"
+	  };
+	if (value < 32 && hwcaps2[value] != NULL)
+	  *value_name = hwcaps2[value];
+	return true;
+      }
+
+  return false;
+}
+
diff --git a/backends/sparc_init.c b/backends/sparc_init.c
index 18d7349..d3c2009 100644
--- a/backends/sparc_init.c
+++ b/backends/sparc_init.c
@@ -70,6 +70,7 @@ sparc_init (Elf *elf __attribute__ ((unused)),
   HOOK (eh, auxv_info);
   HOOK (eh, register_info);
   HOOK (eh, return_value_location);
+  HOOK (eh, check_object_attribute);
 
   return MODVERSION;
 }
-- 
2.3.4


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-10-06 21:56 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-06 14:20 [PATCH 2/5] sparc: support for the check_object_attribute ebl hook Jose E. Marchesi
  -- strict thread matches above, loose matches on Subject: below --
2015-10-06 21:56 Mark Wielaard
2015-10-05 21:55 Mark Wielaard
2015-10-05 15:36 Jose E. Marchesi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).