From 1e0f6894c8c433b30be3220ca476118fc2f34eff Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 29 Sep 2010 06:48:30 +0000 Subject: [PATCH] * expr.c (expr): Correct returned segment value. --- gas/ChangeLog | 8 ++++++-- gas/expr.c | 27 +++++++++++++++++++-------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 4511ea33a4d..62a974b5705 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,7 @@ +2010-09-29 Alan Modra + + * expr.c (expr): Correct returned segment value. + 2010-09-27 Ralf Wildenhues * configure: Regenerate. @@ -57,7 +61,7 @@ (arm_ext_m): Add support for OS extension. (arm_ext_os): New variable. (do_t_swi): In v6-M ensure we have the OS extension. - (arm_cpus): The cortex-m1 and cortex-m0 options have the OS + (arm_cpus): The cortex-m1 and cortex-m0 options have the OS extension by default. (arm_archs): Add armv6s-m. (arm_extensions): Add 'os' extension. @@ -98,7 +102,7 @@ (arm_option_cpu_table): Rename... (arm_option_fpu_table): ...to this. (arm_fpus): Change type. - (arm_parse_extension): Enforce alphabetical order. Allow + (arm_parse_extension): Enforce alphabetical order. Allow extensions to be removed. (arm_parse_arch): Allow extensions to be specified with -march. (s_arm_arch_extension): Add. diff --git a/gas/expr.c b/gas/expr.c index 53952b56fa1..f050b17ccb2 100644 --- a/gas/expr.c +++ b/gas/expr.c @@ -1969,16 +1969,27 @@ expr (int rankarg, /* Larger # is higher rank. */ if (retval != rightseg) { - if (! SEG_NORMAL (retval)) - { - if (retval != undefined_section || SEG_NORMAL (rightseg)) - retval = rightseg; - } - else if (SEG_NORMAL (rightseg) + if (retval == undefined_section) + ; + else if (rightseg == undefined_section) + retval = rightseg; + else if (retval == expr_section) + ; + else if (rightseg == expr_section) + retval = rightseg; + else if (retval == reg_section) + ; + else if (rightseg == reg_section) + retval = rightseg; + else if (rightseg == absolute_section) + ; + else if (retval == absolute_section) + retval = rightseg; #ifdef DIFF_EXPR_OK - && op_left != O_subtract + else if (op_left == O_subtract) + ; #endif - ) + else as_bad (_("operation combines symbols in different segments")); } -- 2.30.2