From 3ce3a066e18b52c1b7c8da841e0416ecf687e1e5 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 18 Aug 2014 17:34:03 +0100 Subject: [PATCH] This fixes the processing of BFD_RELOC_RL78_DIFF fixups when the size is less than 4. This affects DWARF debug info generation in particular. * config/tc-rl78.c (md_apply_fix): Correct handling of small sized RELOC_RL78_DIFF fixups. --- gas/ChangeLog | 5 +++++ gas/config/tc-rl78.c | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 909b4f4..b51d7d6 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2014-08-18 Nick Clifton + + * config/tc-rl78.c (md_apply_fix): Correct handling of small sized + RELOC_RL78_DIFF fixups. + 2014-08-18 Alan Modra * read.c (parse_mri_cons): Warning fix. diff --git a/gas/config/tc-rl78.c b/gas/config/tc-rl78.c index f2382b7..1627c61 100644 --- a/gas/config/tc-rl78.c +++ b/gas/config/tc-rl78.c @@ -1361,13 +1361,22 @@ md_apply_fix (struct fix * f ATTRIBUTE_UNUSED, break; case BFD_RELOC_32: - case BFD_RELOC_RL78_DIFF: op[0] = val; op[1] = val >> 8; op[2] = val >> 16; op[3] = val >> 24; break; + case BFD_RELOC_RL78_DIFF: + op[0] = val; + if (f->fx_size > 1) + op[1] = val >> 8; + if (f->fx_size > 2) + op[2] = val >> 16; + if (f->fx_size > 3) + op[3] = val >> 24; + break; + case BFD_RELOC_RL78_HI8: val = val >> 16; op[0] = val; -- 2.7.4