[binutils-gdb] gas md_apply_fix bad casts

Alan Modra amodra@sourceware.org
Tue Jun 10 22:27:33 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=44fce26c10eb598b5117665a1d36db1d1b14476f

commit 44fce26c10eb598b5117665a1d36db1d1b14476f
Author: Alan Modra <amodra@gmail.com>
Date:   Mon Jun 9 15:00:30 2025 +0930

    gas md_apply_fix bad casts
    
    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:
---
 gas/config/tc-ns32k.c | 2 +-
 gas/config/tc-sparc.c | 2 +-
 gas/config/tc-z8k.c   | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

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)


More information about the Binutils-cvs mailing list