This commit was generated by cvs2svn to compensate for changes in r56944,

which included commits to RCS files with non-trunk default branches.
This commit is contained in:
obrien 2000-02-02 03:10:44 +00:00
commit b245475121

View File

@ -261,17 +261,52 @@ check_eh_frame (exp, pnbytes)
expressionS *exp; expressionS *exp;
unsigned int *pnbytes; unsigned int *pnbytes;
{ {
static int saw_size;
static symbolS *size_end_sym;
static int saw_advance_loc4; static int saw_advance_loc4;
static fragS *loc4_frag; static fragS *loc4_frag;
static int loc4_fix; static int loc4_fix;
if (saw_size
&& S_IS_DEFINED (size_end_sym))
{
/* We have come to the end of the CIE or FDE. See below where
we set saw_size. We must check this first because we may now
be looking at the next size. */
saw_size = 0;
saw_advance_loc4 = 0;
}
if (flag_traditional_format) if (flag_traditional_format)
{ {
/* Don't optimize. */ /* Don't optimize. */
} }
else if (strcmp (segment_name (now_seg), ".eh_frame") != 0) else if (strcmp (segment_name (now_seg), ".eh_frame") != 0)
saw_advance_loc4 = 0; {
else if (*pnbytes == 1 saw_size = 0;
saw_advance_loc4 = 0;
}
else if (! saw_size
&& *pnbytes == 4)
{
/* This might be the size of the CIE or FDE. We want to know
the size so that we don't accidentally optimize across an FDE
boundary. We recognize the size in one of two forms: a
symbol which will later be defined as a difference, or a
subtraction of two symbols. Either way, we can tell when we
are at the end of the FDE because the symbol becomes defined
(in the case of a subtraction, the end symbol, from which the
start symbol is being subtracted). Other ways of describing
the size will not be optimized. */
if ((exp->X_op == O_symbol || exp->X_op == O_subtract)
&& ! S_IS_DEFINED (exp->X_add_symbol))
{
saw_size = 1;
size_end_sym = exp->X_add_symbol;
}
}
else if (saw_size
&& *pnbytes == 1
&& exp->X_op == O_constant && exp->X_op == O_constant
&& exp->X_add_number == DW_CFA_advance_loc4) && exp->X_add_number == DW_CFA_advance_loc4)
{ {