gas md_apply_fix bad casts
Alan Modra
amodra@gmail.com
Tue Jun 10 22:25:51 GMT 2025
ns32k and z8k cast a valueT pointer to a long pointer when loading
md_apply_fix's value. That's quite wrong if the types have different
sizes, as they may eg. on a 32-bit host with 64-bit bfd support.
sparc also loads the value via a cast pointer, but at least in that
case the cast is to the same size pointer. None of these casts are
needed. Get rid of them.
diff --git a/gas/config/tc-ns32k.c b/gas/config/tc-ns32k.c
index ad2c1f4d09c..13907f26ad3 100644
--- a/gas/config/tc-ns32k.c
+++ b/gas/config/tc-ns32k.c
@@ -1966,7 +1966,7 @@ md_fix_pcrel_adjust (fixS *fixP)
void
md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
{
- long val = * (long *) valP;
+ long val = *valP;
char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
if (fix_bit_fixP (fixP))
diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c
index 358042cb36a..6db848181e1 100644
--- a/gas/config/tc-sparc.c
+++ b/gas/config/tc-sparc.c
@@ -3460,7 +3460,7 @@ void
md_apply_fix (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
{
char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
- offsetT val = * (offsetT *) valP;
+ offsetT val = *valP;
long insn;
gas_assert (fixP->fx_r_type < BFD_RELOC_UNUSED);
diff --git a/gas/config/tc-z8k.c b/gas/config/tc-z8k.c
index aa8fc5f92ae..9947fe1e1fc 100644
--- a/gas/config/tc-z8k.c
+++ b/gas/config/tc-z8k.c
@@ -1407,7 +1407,7 @@ md_section_align (segT seg, valueT size)
void
md_apply_fix (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
{
- long val = * (long *) valP;
+ offsetT val = *valP;
char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
switch (fixP->fx_r_type)
--
Alan Modra
More information about the Binutils
mailing list