[PATCH] gas: Update fr_literal access in frag for GCC 10
H.J. Lu
hjl.tools@gmail.com
Sun May 24 16:08:51 GMT 2020
When access fr_literal in
struct frag {
...
/* Data begins here. */
char fr_literal[1];
};
with
char *buf = fragp->fr_fix + fragp->fr_literal;
GCC 10 gave
gas/config/tc-csky.c: In function ‘md_convert_frag’:
gas/config/tc-csky.c:4507:9: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
4507 | buf[1] = BYTE_1 (CSKYV1_INST_SUBI | (7 << 4));
| ^
Change
char *buf = fragp->fr_fix + fragp->fr_literal;
to
char *buf = fragp->fr_fix + &fragp->fr_literal[0];
to silence GCC 10 warning.
* config/tc-csky.c (md_convert_frag): Replace fragp->fr_literal
with &fragp->fr_literal[0].
* config/tc-microblaze.c (md_apply_fix): Likewise.
* config/tc-sh.c (md_convert_frag): Likewise.
---
gas/config/tc-csky.c | 2 +-
gas/config/tc-microblaze.c | 2 +-
gas/config/tc-sh.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/gas/config/tc-csky.c b/gas/config/tc-csky.c
index 83fca2af73..be54afbd67 100644
--- a/gas/config/tc-csky.c
+++ b/gas/config/tc-csky.c
@@ -4196,7 +4196,7 @@ void
md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
{
offsetT disp;
- char *buf = fragp->fr_fix + fragp->fr_literal;
+ char *buf = fragp->fr_fix + &fragp->fr_literal[0];
gas_assert (fragp->fr_symbol);
if (IS_EXTERNAL_SYM (fragp->fr_symbol, asec))
diff --git a/gas/config/tc-microblaze.c b/gas/config/tc-microblaze.c
index 24ea358244..ae5d36dc9c 100644
--- a/gas/config/tc-microblaze.c
+++ b/gas/config/tc-microblaze.c
@@ -1983,7 +1983,7 @@ md_apply_fix (fixS * fixP,
valueT * valp,
segT segment)
{
- char * buf = fixP->fx_where + fixP->fx_frag->fr_literal;
+ char * buf = fixP->fx_where + &fixP->fx_frag->fr_literal[0];
const char * file = fixP->fx_file ? fixP->fx_file : _("unknown");
const char * symname;
/* Note: use offsetT because it is signed, valueT is unsigned. */
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c
index d06cc5e9b8..42f7417c6e 100644
--- a/gas/config/tc-sh.c
+++ b/gas/config/tc-sh.c
@@ -3081,7 +3081,7 @@ md_convert_frag (bfd *headers ATTRIBUTE_UNUSED, segT seg, fragS *fragP)
differently from ones without delay slots. */
{
unsigned char *buffer =
- (unsigned char *) (fragP->fr_fix + fragP->fr_literal);
+ (unsigned char *) (fragP->fr_fix + &fragP->fr_literal[0]);
int highbyte = target_big_endian ? 0 : 1;
int lowbyte = target_big_endian ? 1 : 0;
int delay = fragP->fr_subtype == C (COND_JUMP_DELAY, COND12);
--
2.26.2
More information about the Binutils
mailing list