|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* 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. |
|
|
|
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) |
|
|
|
augmentation_size += 1 + encoding_size (cie->per_encoding); |
|
|
|
out_uleb128 (augmentation_size); /* Augmentation size. */ |
|
|
|
} |
|
|
|
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) |
|
|
|
|
|
|
|
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) |
|
|
|
{ |
|
|
|
#if CFI_DIFF_EXPR_OK |
|
|
|
exp.X_op = O_subtract; |
|
|
|
exp.X_op_symbol = symbol_temp_new_now (); |
|
|
|
emit_expr (&exp, size); |
|
|
|
exp.X_op = O_subtract; |
|
|
|
exp.X_op_symbol = symbol_temp_new_now (); |
|
|
|
emit_expr (&exp, size); |
|
|
|
#elif defined (tc_cfi_emit_pcrel_expr) |
|
|
|
tc_cfi_emit_pcrel_expr (&exp, size); |
|
|
|
tc_cfi_emit_pcrel_expr (&exp, size); |
|
|
|
#else |
|
|
|
abort (); |
|
|
|
abort (); |
|
|
|
#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) |
|
|
|
{ |
|
|
|
|