From 18af0b39e6429361f1e3a93e63f045d5db1bed72 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 4 Jan 2005 10:20:36 +0000 Subject: [PATCH] (md_apply_fix3): Fix offset calculation for global label. --- gas/ChangeLog | 5 +++++ gas/config/tc-msp430.c | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index c4126897665..e7ad1ded668 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2005-01-04 Dmitry Diky + + * config/tc-msp430.c (md_apply_fix3): Fix offset calculation for + global label. + 2005-01-03 David Mosberger * config/tc-ia64.c (md): Add member "loc_directive_seen". diff --git a/gas/config/tc-msp430.c b/gas/config/tc-msp430.c index d836578104d..d7a20820928 100644 --- a/gas/config/tc-msp430.c +++ b/gas/config/tc-msp430.c @@ -1,6 +1,6 @@ /* tc-msp430.c -- Assembler code for the Texas Instruments MSP430 - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Dmitry Diky This file is part of GAS, the GNU Assembler. @@ -1851,7 +1851,19 @@ md_apply_fix3 (fixS * fixp, valueT * valuep, segT seg) if (fixp->fx_addsy && (s == seg || s == absolute_section)) { - value = S_GET_VALUE (fixp->fx_addsy) + *valuep; + /* FIXME: We can appear here only in case if we perform a pc + relative jump to the label which is i) global, ii) locally + defined or this is a jump to an absolute symbol. + If this is an absolute symbol -- everything is OK. + If this is a global label, we've got a symbol value defined + twice: + 1. S_GET_VALUE (fixp->fx_addsy) will contain a symbol offset + from this section start + 2. *valuep will contain the real offset from jump insn to the + label + So, the result of S_GET_VALUE (fixp->fx_addsy) + (* valuep); + will be incorrect. Therefore remove s_get_value. */ + value = /* S_GET_VALUE (fixp->fx_addsy) + */ * valuep; fixp->fx_done = 1; } else -- 2.30.2