From: Jose E. Marchesi Date: Tue, 6 Oct 2015 14:20:40 +0000 (+0200) Subject: sparc: support for the check_object_attribute ebl hook. X-Git-Tag: elfutils-0.164~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0e3ce39c8f154cb7df7f3a9bf29d347fe9cca036;p=thirdparty%2Felfutils.git 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 --- diff --git a/backends/ChangeLog b/backends/ChangeLog index 60c6b72ff..791b9db90 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,9 @@ +2015-10-06 Jose E. Marchesi + + * 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 * sparc_init.c (RELOC_TYPE_ID): Defined. diff --git a/backends/Makefile.am b/backends/Makefile.am index 21d7bd24d..cefe5ebb9 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 000000000..e95b577b4 --- /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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + +#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 229a9b086..f8a7cfbdb 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; }