[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[committed] Factor out add_dummy_die
Hi,
Factor out new function add_dummy_die out of function read_debug_info.
Committed to trunk.
Thanks,
- Tom
Factor out add_dummy_die
2019-04-29 Tom de Vries <tdevries@suse.de>
* dwz.c (add_dummy_die): Factor out of ...
(read_debug_info): ... here.
---
dwz.c | 70 +++++++++++++++++++++++++++++++++----------------------------------
1 file changed, 35 insertions(+), 35 deletions(-)
diff --git a/dwz.c b/dwz.c
index 6743e1a..758f604 100644
--- a/dwz.c
+++ b/dwz.c
@@ -1689,6 +1689,39 @@ read_exprloc (DSO *dso, dw_die_ref die, unsigned char *ptr, size_t len,
return 0;
}
+/* Add dummy die in CU at OFFSET. */
+static inline void FORCE_INLINE
+add_dummy_die (dw_cu_ref cu, unsigned int offset)
+{
+ dw_die_ref ref;
+ struct dw_die ref_buf;
+ void **slot;
+
+ memset (&ref_buf, '\0', offsetof (struct dw_die, die_child));
+ ref_buf.die_offset = offset;
+ ref_buf.die_collapsed_child = 1;
+ ref_buf.die_referenced = 1;
+ ref_buf.die_intercu_referenced = 1;
+ if (off_htab == NULL)
+ {
+ ref = pool_alloc (dw_die, offsetof (struct dw_die, die_child));
+ memcpy (ref, &ref_buf, offsetof (struct dw_die, die_child));
+ off_htab_add_die (cu, ref);
+ return;
+ }
+
+ slot
+ = htab_find_slot_with_hash (off_htab, &ref_buf, ref_buf.die_offset, INSERT);
+ if (slot == NULL)
+ dwz_oom ();
+ if (*slot != NULL)
+ return;
+
+ ref = pool_alloc (dw_die, offsetof (struct dw_die, die_child));
+ memcpy (ref, &ref_buf, offsetof (struct dw_die, die_child));
+ *slot = (void *) ref;
+}
+
/* Structure recording a portion of .debug_loc section that will need
adjusting. */
struct debug_loc_adjust
@@ -4791,42 +4824,9 @@ read_debug_info (DSO *dso, int kind)
case DW_FORM_ref_addr:
if (unlikely (low_mem_phase1))
{
- dw_die_ref ref;
- struct dw_die ref_buf;
- void **slot;
-
- memset (&ref_buf, '\0',
- offsetof (struct dw_die, die_child));
- ref_buf.die_offset
+ unsigned int offset
= read_size (ptr, cu->cu_version == 2 ? ptr_size : 4);
- ref_buf.die_collapsed_child = 1;
- ref_buf.die_referenced = 1;
- ref_buf.die_intercu_referenced = 1;
- if (off_htab == NULL)
- {
- ref = pool_alloc (dw_die, offsetof (struct dw_die,
- die_child));
- memcpy (ref, &ref_buf,
- offsetof (struct dw_die, die_child));
- off_htab_add_die (cu, ref);
- }
- else
- {
- slot = htab_find_slot_with_hash (off_htab, &ref_buf,
- ref_buf.die_offset,
- INSERT);
- if (slot == NULL)
- dwz_oom ();
- if (*slot == NULL)
- {
- ref = pool_alloc (dw_die,
- offsetof (struct dw_die,
- die_child));
- memcpy (ref, &ref_buf,
- offsetof (struct dw_die, die_child));
- *slot = (void *) ref;
- }
- }
+ add_dummy_die (cu, offset);
}
ptr += cu->cu_version == 2 ? ptr_size : 4;
break;