summaryrefslogtreecommitdiff
path: root/gas/ehopt.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2011-04-26 15:28:08 +0000
committerNick Clifton <nickc@redhat.com>2011-04-26 15:28:08 +0000
commit72b016b4ac0d7532a8f173fe3472e2e88ac49d45 (patch)
treee6d8dcd1c9cabcafcfe1713f55b366a2cbeefbec /gas/ehopt.c
parent4964e065b452a479b9ba0d636b28455c496ba9ab (diff)
downloadbinutils-gdb-72b016b4ac0d7532a8f173fe3472e2e88ac49d45.tar.gz
* dw2gencfi.c (dwcfi_seg_list): New struct.
(dwcfi_hash): New static hash variable. (get_debugseg_name): New. (alloc_debugseg_item): New. (make_debug_seg): New. (dwcfi_hash_insert): New. (dwcfi_hash_find): New. (dwcfi_hash_find_or_make): New. (cfi_insn_data): New member cur_seg. (cie_entry): Likewise. (fde_entry): New cseg and handled members. (alloc_fde_entry): Initialize cseg member. (alloc_cfi_insn_data): Initialize cur_seg member. (dot_cfi_sections): Compare for beginning of section names via strncmp. (get_cfi_seg): New. (cfi_finish): Treat link-once sections. (is_now_linkonce_segment): New local helper. (output_cie): Ignore cie entries not member of current segment. (output_fde): Likewise. (select_cie_for_fde): Likewise. (cfi_change_reg_numbers): Add new argument for current segment and ignore insn elements, if not part of current segment. * ehopt.c (get_cie_info): Use strncmp for section name matching. (heck_eh_frame): Likewise. * coffcode.h (sec_to_styp_flags): Allow linkonce for debugging sections. * scripttempl/pe.sc: Handle .eh_frame($|.)* sections. * scripttempl/pep.sc: Likewise. * ld-pe/pe.exp: Add cfi/cfi32 tests. * ld-pe/cfi.d: New. * ld-pe/cfi32.d: New. * ld-pe/cfia.s: New. * ld-pe/cfib.s: New.
Diffstat (limited to 'gas/ehopt.c')
-rw-r--r--gas/ehopt.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gas/ehopt.c b/gas/ehopt.c
index c09eb15b498..70e1a00f4e2 100644
--- a/gas/ehopt.c
+++ b/gas/ehopt.c
@@ -120,7 +120,7 @@ get_cie_info (struct cie_info *info)
/* First make sure that the CIE Identifier Tag is 0/-1. */
- if (strcmp (segment_name (now_seg), ".debug_frame") == 0)
+ if (strncmp (segment_name (now_seg), ".debug_frame", 12) == 0)
CIE_id = (char)0xff;
else
CIE_id = 0;
@@ -285,9 +285,10 @@ check_eh_frame (expressionS *exp, unsigned int *pnbytes)
#endif
/* Select the proper section data. */
- if (strcmp (segment_name (now_seg), ".eh_frame") == 0)
+ if (strncmp (segment_name (now_seg), ".eh_frame", 9) == 0
+ && segment_name (now_seg)[9] != '_')
d = &eh_frame_data;
- else if (strcmp (segment_name (now_seg), ".debug_frame") == 0)
+ else if (strncmp (segment_name (now_seg), ".debug_frame", 12) == 0)
d = &debug_frame_data;
else
return 0;