From 9e6619e285873fe1cb002da4bb7749be40a5627c Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 20 Apr 2011 07:17:01 +0000 Subject: [PATCH] * 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. --- bfd/ChangeLog | 4 ++++ bfd/elflink.c | 7 +++++-- bfd/libbfd.c | 6 +++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index afa1cf269d8..5a15a6c2833 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,9 @@ 2011-04-20 Alan Modra + * 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. * elflink.c (elf_link_add_object_symbols): Delete redundant code. diff --git a/bfd/elflink.c b/bfd/elflink.c index 3c95b572151..3a4d22c4cf8 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -6537,10 +6537,13 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) } else { - unsigned long int maskwords, maskbitslog2; + unsigned long int maskwords, maskbitslog2, x; 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) maskbitslog2 = 5; else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms) diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 4e5813aaf76..cec13d95132 100644 --- a/bfd/libbfd.c +++ b/bfd/libbfd.c @@ -979,8 +979,12 @@ bfd_log2 (bfd_vma x) { unsigned int result = 0; - while ((x = (x >> 1)) != 0) + if (x <= 1) + return result; + --x; + do ++result; + while ((x >>= 1) != 0); return result; } -- 2.30.2