summaryrefslogtreecommitdiff
path: root/bfd/elf-bfd.h
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2009-09-19 08:06:11 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2009-09-19 08:06:11 +0000
commit18e04883d03f67a6b9ec701089494d92841b92fd (patch)
tree144531f36fa1eb2069710f3759c9ed5ed201b499 /bfd/elf-bfd.h
parent8179e7399121c25d5e046368d223c3b44c32716a (diff)
downloadbinutils-gdb-18e04883d03f67a6b9ec701089494d92841b92fd.tar.gz
bfd/
* elf-bfd.h (eh_cie_fde): Add personality_offset and make_per_encoding_relative to the CIE structure. Add a padding field. * elf-eh-frame.c (_bfd_elf_eh_frame_section_offset): Use 0x70 rather than 0xf0 when masking out the base address encoding Record the offset of personality data from the start of the CIE. Remove a repeated elf_backend_can_make_relative_eh_frame check. (find_merged_cie): Take an info argument. If the personality binds locally, try converting an absolute personality into a local one. (_bfd_elf_discard_section_eh_frame): Use 0x70 rather than 0xf0 when masking out the base address encoding. Update the call to find_merged_cie. (_bfd_elf_eh_frame_section_offset): Discard relocations against the personality data if we are converting into PC-relative form. (_bfd_elf_write_section_eh_frame): Use 0x70 rather than 0xf0 when masking out the base address encoding. Handle make_per_encoding_relative. ld/testsuite/ * ld-mips-elf/eh-frame5.s, ld-mips-elf/eh-frame5.ld, ld-mips-elf/eh-frame5.d: New test. * ld-mips-elf/mips-elf.exp: Run it.
Diffstat (limited to 'bfd/elf-bfd.h')
-rw-r--r--bfd/elf-bfd.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 82c7c774d5f..3f2d52864b4 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -305,6 +305,10 @@ struct eh_cie_fde
asection *sec;
} u;
+ /* The offset of the personality data from the start of the CIE,
+ or 0 if the CIE doesn't have any. */
+ unsigned int personality_offset : 8;
+
/* True if we have marked relocations associated with this CIE. */
unsigned int gc_mark : 1;
@@ -312,8 +316,13 @@ struct eh_cie_fde
a PC-relative one. */
unsigned int make_lsda_relative : 1;
- /* True if the CIE contains personality data and if that data
- uses a PC-relative encoding. */
+ /* True if we have decided to turn an absolute personality
+ encoding into a PC-relative one. */
+ unsigned int make_per_encoding_relative : 1;
+
+ /* True if the CIE contains personality data and if that
+ data uses a PC-relative encoding. Always true when
+ make_per_encoding_relative is. */
unsigned int per_encoding_relative : 1;
/* True if we need to add an 'R' (FDE encoding) entry to the
@@ -322,6 +331,9 @@ struct eh_cie_fde
/* True if we have merged this CIE with another. */
unsigned int merged : 1;
+
+ /* Unused bits. */
+ unsigned int pad1 : 18;
} cie;
} u;
unsigned int reloc_index;