PR 12569
* expr.c (operand): Correct passing of "mode" to expr. * read.c (do_org): Allow expr_section. (get_known_segmented_expression): Don't assert anything about the segment.
This commit is contained in:
parent
29703da4b1
commit
259af69e77
3 changed files with 17 additions and 11 deletions
|
@ -1,3 +1,11 @@
|
|||
2011-03-17 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 12569
|
||||
* expr.c (operand): Correct passing of "mode" to expr.
|
||||
* read.c (do_org): Allow expr_section.
|
||||
(get_known_segmented_expression): Don't assert anything about the
|
||||
segment.
|
||||
|
||||
2011-03-16 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* as.c (show_usage): Add --size-check=.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* expr.c -operands, expressions-
|
||||
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
|
@ -959,10 +959,7 @@ operand (expressionS *expressionP, enum expr_mode mode)
|
|||
#endif
|
||||
case '(':
|
||||
/* Didn't begin with digit & not a name. */
|
||||
if (mode != expr_defer)
|
||||
segment = expression (expressionP);
|
||||
else
|
||||
segment = deferred_expression (expressionP);
|
||||
segment = expr (0, expressionP, mode);
|
||||
/* expression () will pass trailing whitespace. */
|
||||
if ((c == '(' && *input_line_pointer != ')')
|
||||
|| (c == '[' && *input_line_pointer != ']'))
|
||||
|
|
13
gas/read.c
13
gas/read.c
|
@ -1,7 +1,7 @@
|
|||
/* read.c - read a source file -
|
||||
Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||
2010 Free Software Foundation, Inc.
|
||||
2010, 2011 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
|
||||
|
@ -2653,7 +2653,9 @@ s_mri (int ignore ATTRIBUTE_UNUSED)
|
|||
static void
|
||||
do_org (segT segment, expressionS *exp, int fill)
|
||||
{
|
||||
if (segment != now_seg && segment != absolute_section)
|
||||
if (segment != now_seg
|
||||
&& segment != absolute_section
|
||||
&& segment != expr_section)
|
||||
as_bad (_("invalid segment \"%s\""), segment_name (segment));
|
||||
|
||||
if (now_seg == absolute_section)
|
||||
|
@ -5416,9 +5418,9 @@ get_segmented_expression (expressionS *expP)
|
|||
static segT
|
||||
get_known_segmented_expression (expressionS *expP)
|
||||
{
|
||||
segT retval;
|
||||
segT retval = get_segmented_expression (expP);
|
||||
|
||||
if ((retval = get_segmented_expression (expP)) == undefined_section)
|
||||
if (retval == undefined_section)
|
||||
{
|
||||
/* There is no easy way to extract the undefined symbol from the
|
||||
expression. */
|
||||
|
@ -5432,8 +5434,7 @@ get_known_segmented_expression (expressionS *expP)
|
|||
expP->X_op = O_constant;
|
||||
expP->X_add_number = 0;
|
||||
}
|
||||
know (retval == absolute_section || SEG_NORMAL (retval));
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
char /* Return terminator. */
|
||||
|
|
Loading…
Reference in a new issue