* libbfd.c (bfd_log2): Do return rounded up value.

* elflink.c (bfd_elf_size_dynsym_hash_dynstr): Replace bfd_log2
	call with expanded old round down version of the function.
This commit is contained in:
Alan Modra
2011-04-20 07:17:01 +00:00
parent 595213d440
commit 9e6619e285
3 changed files with 14 additions and 3 deletions

View File

@ -1,5 +1,9 @@
2011-04-20 Alan Modra <amodra@gmail.com> 2011-04-20 Alan Modra <amodra@gmail.com>
* libbfd.c (bfd_log2): Do return rounded up value.
* elflink.c (bfd_elf_size_dynsym_hash_dynstr): Replace bfd_log2
call with expanded old round down version of the function.
* archive.c (_bfd_get_elt_at_filepos): Don't release n_nfd. * archive.c (_bfd_get_elt_at_filepos): Don't release n_nfd.
* elflink.c (elf_link_add_object_symbols): Delete redundant code. * elflink.c (elf_link_add_object_symbols): Delete redundant code.

View File

@ -6537,10 +6537,13 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
} }
else else
{ {
unsigned long int maskwords, maskbitslog2; unsigned long int maskwords, maskbitslog2, x;
BFD_ASSERT (cinfo.min_dynindx != -1); BFD_ASSERT (cinfo.min_dynindx != -1);
maskbitslog2 = bfd_log2 (cinfo.nsyms) + 1; x = cinfo.nsyms;
maskbitslog2 = 1;
while ((x >>= 1) != 0)
++maskbitslog2;
if (maskbitslog2 < 3) if (maskbitslog2 < 3)
maskbitslog2 = 5; maskbitslog2 = 5;
else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms) else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms)

View File

@ -979,8 +979,12 @@ bfd_log2 (bfd_vma x)
{ {
unsigned int result = 0; unsigned int result = 0;
while ((x = (x >> 1)) != 0) if (x <= 1)
return result;
--x;
do
++result; ++result;
while ((x >>= 1) != 0);
return result; return result;
} }