diff options
-rw-r--r-- | backends/ChangeLog | 6 | ||||
-rw-r--r-- | backends/Makefile.am | 2 | ||||
-rw-r--r-- | backends/sparc_attrs.c | 75 | ||||
-rw-r--r-- | backends/sparc_init.c | 1 |
4 files changed, 83 insertions, 1 deletions
diff --git a/backends/ChangeLog b/backends/ChangeLog index 60c6b72f..791b9db9 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 21d7bd24..cefe5ebb 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 00000000..e95b577b --- /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 229a9b08..f8a7cfbd 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; } |