diff options
author | Ulrich Drepper <drepper@redhat.com> | 2008-01-22 06:34:31 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2008-01-22 06:34:31 +0000 |
commit | 8d358d95cc4b7389dec1962f6062af8e90ab93d9 (patch) | |
tree | c1b22fa9141d246e1f554bfba4a158537051dc73 /libdw | |
parent | a969d8e19470157be1b8b2e1a693ac7702bf4273 (diff) | |
download | elfutils-8d358d95cc4b7389dec1962f6062af8e90ab93d9.tar.gz |
Minor optimizations.
Diffstat (limited to 'libdw')
-rw-r--r-- | libdw/ChangeLog | 8 | ||||
-rw-r--r-- | libdw/dwarf_child.c | 8 | ||||
-rw-r--r-- | libdw/dwarf_getattrs.c | 8 | ||||
-rw-r--r-- | libdw/dwarf_getpubnames.c | 20 | ||||
-rw-r--r-- | libdw/dwarf_siblingof.c | 2 | ||||
-rw-r--r-- | libdw/dwarf_tag.c | 2 |
6 files changed, 26 insertions, 22 deletions
diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 0e092136..d344baef 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,11 @@ +2008-01-21 Ulrich Drepper <drepper@redhat.com> + + * dwarf_child.c: Minor optimizations. + * dwarf_getattrs.c: Likewise. + * dwarf_getpubnames.c: Likewise. + * dwarf_siblingof.c: Likewise. + * dwarf_tag.c: Likewise. + 2008-01-18 Ulrich Drepper <drepper@redhat.com> * dwarf_getsrclines.c (dwarf_getsrclines): Don't require exact match diff --git a/libdw/dwarf_child.c b/libdw/dwarf_child.c index 121cd191..0080cf9d 100644 --- a/libdw/dwarf_child.c +++ b/libdw/dwarf_child.c @@ -81,6 +81,7 @@ __libdw_find_attr (Dwarf_Die *die, unsigned int search_name, } if (unlikely (die->abbrev == DWARF_END_ABBREV)) { + invalid_dwarf: __libdw_seterrno (DWARF_E_INVALID_DWARF); return NULL; } @@ -95,10 +96,7 @@ __libdw_find_attr (Dwarf_Die *die, unsigned int search_name, { /* Are we still in bounds? This test needs to be refined. */ if (unlikely (attrp + 1 >= endp)) - { - __libdw_seterrno (DWARF_E_INVALID_DWARF); - return NULL; - } + goto invalid_dwarf; /* Get attribute name and form. @@ -166,7 +164,7 @@ dwarf_child (die, result) if (die->abbrev != DWARF_END_ABBREV && (die->abbrev == NULL || die->abbrev->has_children)) addr = __libdw_find_attr (die, INVALID, NULL, NULL); - if (die->abbrev == (Dwarf_Abbrev *) -1l) + if (unlikely (die->abbrev == (Dwarf_Abbrev *) -1l)) return -1; /* Make sure the DIE really has children. */ diff --git a/libdw/dwarf_getattrs.c b/libdw/dwarf_getattrs.c index 932c5cc1..42f25ca0 100644 --- a/libdw/dwarf_getattrs.c +++ b/libdw/dwarf_getattrs.c @@ -72,8 +72,9 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), /* Find the abbreviation. */ die->abbrev = __libdw_findabbrev (die->cu, u128); - if (die->abbrev == DWARF_END_ABBREV) + if (unlikely (die->abbrev == DWARF_END_ABBREV)) { + invalid_dwarf: __libdw_seterrno (DWARF_E_INVALID_DWARF); return -1l; } @@ -89,10 +90,7 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), if (unlikely (attrp >= ((unsigned char *) dbg->sectiondata[IDX_debug_abbrev]->d_buf + dbg->sectiondata[IDX_debug_abbrev]->d_size))) - { - __libdw_seterrno (DWARF_E_INVALID_DWARF); - return -1; - } + goto invalid_dwarf; /* Get attribute name and form. */ Dwarf_Attribute attr; diff --git a/libdw/dwarf_getpubnames.c b/libdw/dwarf_getpubnames.c index fcf6eca4..1b054e26 100644 --- a/libdw/dwarf_getpubnames.c +++ b/libdw/dwarf_getpubnames.c @@ -102,6 +102,7 @@ get_offsets (Dwarf *dbg) else if (unlikely (len >= DWARF3_LENGTH_MIN_ESCAPE_CODE && len <= DWARF3_LENGTH_MAX_ESCAPE_CODE)) { + invalid_dwarf: __libdw_seterrno (DWARF_E_INVALID_DWARF); goto err_return; } @@ -116,7 +117,7 @@ get_offsets (Dwarf *dbg) /* Read the version. It better be two for now. */ uint16_t version = read_2ubyte_unaligned (dbg, readp); - if (version != 2) + if (unlikely (version != 2)) { __libdw_seterrno (DWARF_E_INVALID_VERSION); goto err_return; @@ -129,13 +130,12 @@ get_offsets (Dwarf *dbg) mem[cnt].cu_offset = read_8ubyte_unaligned (dbg, readp + 2); /* Determine the size of the CU header. */ - if (dbg->sectiondata[IDX_debug_info] == NULL - || dbg->sectiondata[IDX_debug_info]->d_buf == NULL - || mem[cnt].cu_offset + 3 >= dbg->sectiondata[IDX_debug_info]->d_size) - { - __libdw_seterrno (DWARF_E_INVALID_DWARF); - goto err_return; - } + if (unlikely (dbg->sectiondata[IDX_debug_info] == NULL + || dbg->sectiondata[IDX_debug_info]->d_buf == NULL + || (mem[cnt].cu_offset + 3 + >= dbg->sectiondata[IDX_debug_info]->d_size))) + goto invalid_dwarf; + unsigned char *infop = ((unsigned char *) dbg->sectiondata[IDX_debug_info]->d_buf + mem[cnt].cu_offset); @@ -173,7 +173,7 @@ dwarf_getpubnames (dbg, callback, arg, offset) if (dbg == NULL) return -1l; - if (offset < 0) + if (unlikely (offset < 0)) { __libdw_seterrno (DWARF_E_INVALID_OFFSET); return -1l; @@ -187,7 +187,7 @@ dwarf_getpubnames (dbg, callback, arg, offset) return 0; /* If necessary read the set information. */ - if (dbg->pubnames_nsets == 0 && get_offsets (dbg) != 0) + if (dbg->pubnames_nsets == 0 && unlikely (get_offsets (dbg) != 0)) return -1l; /* Find the place where to start. */ diff --git a/libdw/dwarf_siblingof.c b/libdw/dwarf_siblingof.c index 7347013f..0d427175 100644 --- a/libdw/dwarf_siblingof.c +++ b/libdw/dwarf_siblingof.c @@ -98,7 +98,7 @@ dwarf_siblingof (die, result) { Dwarf_Off offset; sibattr.valp = addr; - if (__libdw_formref (&sibattr, &offset) != 0) + if (unlikely (__libdw_formref (&sibattr, &offset) != 0)) /* Something went wrong. */ return -1; diff --git a/libdw/dwarf_tag.c b/libdw/dwarf_tag.c index 5280ab24..15183d2d 100644 --- a/libdw/dwarf_tag.c +++ b/libdw/dwarf_tag.c @@ -106,7 +106,7 @@ dwarf_tag (die) die->abbrev = __libdw_findabbrev (die->cu, u128); } - if (die->abbrev == DWARF_END_ABBREV) + if (unlikely (die->abbrev == DWARF_END_ABBREV)) { __libdw_seterrno (DWARF_E_INVALID_DWARF); return DW_TAG_invalid; |