aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf-eh-frame.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2003-10-16 21:04:04 +0000
committerH.J. Lu <hjl.tools@gmail.com>2003-10-16 21:04:04 +0000
commit9da84788daafe295573bb29bb85616086abc0c2c (patch)
treece1e5f3ac6a9e2c42f1207d1648a7b1ffeb6980a /bfd/elf-eh-frame.c
parent506fb3678493f7f3028e1364dfcf7b8b8f2ed4d8 (diff)
downloadgdb-9da84788daafe295573bb29bb85616086abc0c2c.zip
gdb-9da84788daafe295573bb29bb85616086abc0c2c.tar.gz
gdb-9da84788daafe295573bb29bb85616086abc0c2c.tar.bz2
2003-10-16 H.J. Lu <hongjiu.lu@intel.com>
* elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't use the last CIE from a different section. (_bfd_elf_write_section_eh_frame): Don't pad beyond the raw size of the output section.
Diffstat (limited to 'bfd/elf-eh-frame.c')
-rw-r--r--bfd/elf-eh-frame.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c
index c2f6b96..28e0b55 100644
--- a/bfd/elf-eh-frame.c
+++ b/bfd/elf-eh-frame.c
@@ -372,6 +372,9 @@ _bfd_elf_discard_section_eh_frame
all FDEs. Also, it can be removed if we have removed
all FDEs using it. */
if ((!info->relocatable
+ && hdr_info->last_cie_sec
+ && (sec->output_section
+ == hdr_info->last_cie_sec->output_section)
&& cie_compare (&cie, &hdr_info->last_cie) == 0)
|| cie_usage_count == 0)
{
@@ -1031,7 +1034,11 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
unsigned int alignment = 1 << sec->alignment_power;
unsigned int pad = sec->_cooked_size % alignment;
- if (pad)
+ /* Don't pad beyond the raw size of the output section. It
+ can happen at the last input section. */
+ if (pad
+ && ((sec->output_offset + sec->_cooked_size + pad)
+ <= sec->output_section->_raw_size))
{
/* Find the last CIE/FDE. */
for (i = sec_info->count - 1; i > 0; i--)