diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2009-09-19 08:06:11 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2009-09-19 08:06:11 +0000 |
commit | 18e04883d03f67a6b9ec701089494d92841b92fd (patch) | |
tree | 144531f36fa1eb2069710f3759c9ed5ed201b499 /bfd/elf-bfd.h | |
parent | 8179e7399121c25d5e046368d223c3b44c32716a (diff) | |
download | gdb-18e04883d03f67a6b9ec701089494d92841b92fd.zip gdb-18e04883d03f67a6b9ec701089494d92841b92fd.tar.gz gdb-18e04883d03f67a6b9ec701089494d92841b92fd.tar.bz2 |
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.h | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 82c7c77..3f2d528 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; |