elf32-arc.c: Don't cast between function pointer and void pointer

Casts should be avoided if at all possible, and in particular the C
standard doesn't promise that function pointers can be cast to void*
or vice-versa.  It is only mentioned under J.5 Common extensions,
saying "The following extensions are widely used in many systems, but
are not portable to all implementations."

	* elf32-arc.c (replace_func): Correct return type.
	(get_replace_function): Use a replace_func function pointer rather
	than void*.  Update associated ARC_RELOC_HOWTO define.
This commit is contained in:
Alan Modra 2020-10-16 10:15:57 +10:30
parent fd63a770b7
commit e7f2f959e3
2 changed files with 10 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2020-10-16 Alan Modra <amodra@gmail.com>
* elf32-arc.c (replace_func): Correct return type.
(get_replace_function): Use a replace_func function pointer rather
than void*. Update associated ARC_RELOC_HOWTO define.
2020-10-16 Alan Modra <amodra@gmail.com>
* elf32-cr16.c: Formatting.

View File

@ -391,17 +391,17 @@ static const struct arc_reloc_map arc_reloc_map[] =
#undef ARC_RELOC_HOWTO
typedef ATTRIBUTE_UNUSED bfd_vma (*replace_func) (unsigned, int ATTRIBUTE_UNUSED);
typedef ATTRIBUTE_UNUSED unsigned (*replace_func) (unsigned, int ATTRIBUTE_UNUSED);
#define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \
case TYPE: \
func = (void *) RELOC_FUNCTION; \
func = RELOC_FUNCTION; \
break;
static replace_func
get_replace_function (bfd *abfd, unsigned int r_type)
{
void *func = NULL;
replace_func func = NULL;
switch (r_type)
{
@ -411,7 +411,7 @@ get_replace_function (bfd *abfd, unsigned int r_type)
if (func == replace_bits24 && bfd_big_endian (abfd))
func = replace_bits24_be;
return (replace_func) func;
return func;
}
#undef ARC_RELOC_HOWTO