• Home
  • Raw
  • Download

Lines Matching +full:file +full:- +full:entry +full:- +full:cache

2    Copyright (C) 2009-2010 Red Hat, Inc.
3 This file is part of elfutils.
5 This file is free software; you can redistribute it and/or modify
34 #include "encoded-value.h"
45 if (cie1->offset < cie2->offset) in compare_cie()
46 return -1; in compare_cie()
47 if (cie1->offset > cie2->offset) in compare_cie()
54 intern_new_cie (Dwarf_CFI *cache, Dwarf_Off offset, const Dwarf_CIE *info) in intern_new_cie() argument
63 cie->offset = offset; in intern_new_cie()
64 cie->code_alignment_factor = info->code_alignment_factor; in intern_new_cie()
65 cie->data_alignment_factor = info->data_alignment_factor; in intern_new_cie()
66 cie->return_address_register = info->return_address_register; in intern_new_cie()
68 cie->fde_augmentation_data_size = 0; in intern_new_cie()
69 cie->sized_augmentation_data = false; in intern_new_cie()
70 cie->signal_frame = false; in intern_new_cie()
72 cie->fde_encoding = DW_EH_PE_absptr; in intern_new_cie()
73 cie->lsda_encoding = DW_EH_PE_omit; in intern_new_cie()
76 const uint8_t *data = info->augmentation_data; in intern_new_cie()
77 for (const char *ap = info->augmentation; *ap != '\0'; ++ap) in intern_new_cie()
83 cie->sized_augmentation_data = true; in intern_new_cie()
87 cie->signal_frame = true; in intern_new_cie()
91 cie->lsda_encoding = *data++; in intern_new_cie()
92 if (!cie->sized_augmentation_data) in intern_new_cie()
93 cie->fde_augmentation_data_size in intern_new_cie()
94 += encoded_value_size (&cache->data->d, cache->e_ident, in intern_new_cie()
95 cie->lsda_encoding, NULL); in intern_new_cie()
99 cie->fde_encoding = *data++; in intern_new_cie()
104 data += encoded_value_size (&cache->data->d, cache->e_ident, in intern_new_cie()
111 if (cie->sized_augmentation_data) in intern_new_cie()
118 if ((cie->fde_encoding & 0x0f) == DW_EH_PE_absptr) in intern_new_cie()
125 = cache->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; in intern_new_cie()
129 cie->fde_encoding |= DW_EH_PE_udata8; in intern_new_cie()
132 cie->fde_encoding |= DW_EH_PE_udata4; in intern_new_cie()
142 cie->initial_instructions = info->initial_instructions; in intern_new_cie()
143 cie->initial_instructions_end = info->initial_instructions_end; in intern_new_cie()
144 cie->initial_state = NULL; in intern_new_cie()
146 /* Add the new entry to the search tree. */ in intern_new_cie()
147 if (tsearch (cie, &cache->cie_tree, &compare_cie) == NULL) in intern_new_cie()
160 __libdw_find_cie (Dwarf_CFI *cache, Dwarf_Off offset) in __libdw_find_cie() argument
163 struct dwarf_cie **found = tfind (&cie_key, &cache->cie_tree, &compare_cie); in __libdw_find_cie()
169 Dwarf_CFI_Entry entry; in __libdw_find_cie() local
170 int result = INTUSE(dwarf_next_cfi) (cache->e_ident, in __libdw_find_cie()
171 &cache->data->d, CFI_IS_EH (cache), in __libdw_find_cie()
172 offset, &next_offset, &entry); in __libdw_find_cie()
173 if (result != 0 || entry.cie.CIE_id != DW_CIE_ID_64) in __libdw_find_cie()
180 if (cache->next_offset == offset) in __libdw_find_cie()
181 cache->next_offset = next_offset; in __libdw_find_cie()
183 return intern_new_cie (cache, offset, &entry.cie); in __libdw_find_cie()
189 __libdw_intern_cie (Dwarf_CFI *cache, Dwarf_Off offset, const Dwarf_CIE *info) in __libdw_intern_cie() argument
192 struct dwarf_cie **found = tfind (&cie_key, &cache->cie_tree, &compare_cie); in __libdw_intern_cie()
195 (void) intern_new_cie (cache, offset, info); in __libdw_intern_cie()