2010-03-15 Thomas Schwinge <thomas@codesourcery.com>

* dw2gencfi.c (output_cie): Make it more explicit which code paths
	belong to .eh_frame only.
This commit is contained in:
Thomas Schwinge
2010-03-15 15:08:02 +00:00
parent b672b05737
commit 4e4e1355e7
2 changed files with 24 additions and 17 deletions

View File

@ -1,3 +1,8 @@
2010-03-15 Thomas Schwinge <thomas@codesourcery.com>
* dw2gencfi.c (output_cie): Make it more explicit which code paths
belong to .eh_frame only.
2010-03-13 Segher Boessenkool <segher@kernel.crashing.org> 2010-03-13 Segher Boessenkool <segher@kernel.crashing.org>
* config/tc-v850.c (v850_insert_operand): Handle out-of-range * config/tc-v850.c (v850_insert_operand): Handle out-of-range

View File

@ -1,5 +1,5 @@
/* dw2gencfi.c - Support for generating Dwarf2 CFI information. /* dw2gencfi.c - Support for generating Dwarf2 CFI information.
Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Michal Ludvig <mludvig@suse.cz> Contributed by Michal Ludvig <mludvig@suse.cz>
@ -1319,29 +1319,31 @@ output_cie (struct cie_entry *cie, bfd_boolean eh_frame, int align)
if (cie->per_encoding != DW_EH_PE_omit) if (cie->per_encoding != DW_EH_PE_omit)
augmentation_size += 1 + encoding_size (cie->per_encoding); augmentation_size += 1 + encoding_size (cie->per_encoding);
out_uleb128 (augmentation_size); /* Augmentation size. */ out_uleb128 (augmentation_size); /* Augmentation size. */
}
if (cie->per_encoding != DW_EH_PE_omit) if (cie->per_encoding != DW_EH_PE_omit)
{
offsetT size = encoding_size (cie->per_encoding);
out_one (cie->per_encoding);
exp = cie->personality;
if ((cie->per_encoding & 0x70) == DW_EH_PE_pcrel)
{ {
offsetT size = encoding_size (cie->per_encoding);
out_one (cie->per_encoding);
exp = cie->personality;
if ((cie->per_encoding & 0x70) == DW_EH_PE_pcrel)
{
#if CFI_DIFF_EXPR_OK #if CFI_DIFF_EXPR_OK
exp.X_op = O_subtract; exp.X_op = O_subtract;
exp.X_op_symbol = symbol_temp_new_now (); exp.X_op_symbol = symbol_temp_new_now ();
emit_expr (&exp, size); emit_expr (&exp, size);
#elif defined (tc_cfi_emit_pcrel_expr) #elif defined (tc_cfi_emit_pcrel_expr)
tc_cfi_emit_pcrel_expr (&exp, size); tc_cfi_emit_pcrel_expr (&exp, size);
#else #else
abort (); abort ();
#endif #endif
}
else
emit_expr (&exp, size);
} }
else
emit_expr (&exp, size); if (cie->lsda_encoding != DW_EH_PE_omit)
out_one (cie->lsda_encoding);
} }
if (cie->lsda_encoding != DW_EH_PE_omit)
out_one (cie->lsda_encoding);
switch (DWARF2_FDE_RELOC_SIZE) switch (DWARF2_FDE_RELOC_SIZE)
{ {