bfd: Fix left shift of negative value.
This patch fixes all occurences of left-shifting negative constants in C code which is undefined by the C standard. bfd/ChangeLog: * elf64-ppc.c (ppc64_elf_size_stubs, ppc64_elf_build_stubs): Fix left shift of negative value. * libbfd.c (safe_read_leb128): Likewise. * dwarf2.c (place_sections): Likewise. * bfd-in.h (align_power): Likewise. * bfd-in2.h (align_power): Likewise.
This commit is contained in:
parent
a5eda10c78
commit
29f628db88
@ -1,3 +1,12 @@
|
||||
2015-11-09 Dominik Vogt <vogt@linux.vnet.ibm.com>
|
||||
|
||||
* elf64-ppc.c (ppc64_elf_size_stubs, ppc64_elf_build_stubs): Fix left
|
||||
shift of negative value.
|
||||
* libbfd.c (safe_read_leb128): Likewise.
|
||||
* dwarf2.c (place_sections): Likewise.
|
||||
* bfd-in.h (align_power): Likewise.
|
||||
* bfd-in2.h (align_power): Likewise.
|
||||
|
||||
2015-10-30 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/zh_CN.po: Updated (simplified) Chinese translation.
|
||||
|
@ -272,7 +272,7 @@ alent;
|
||||
/* Object and core file sections. */
|
||||
|
||||
#define align_power(addr, align) \
|
||||
(((addr) + ((bfd_vma) 1 << (align)) - 1) & ((bfd_vma) -1 << (align)))
|
||||
(((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align))))
|
||||
|
||||
typedef struct bfd_section *sec_ptr;
|
||||
|
||||
|
@ -279,7 +279,7 @@ alent;
|
||||
/* Object and core file sections. */
|
||||
|
||||
#define align_power(addr, align) \
|
||||
(((addr) + ((bfd_vma) 1 << (align)) - 1) & ((bfd_vma) -1 << (align)))
|
||||
(((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align))))
|
||||
|
||||
typedef struct bfd_section *sec_ptr;
|
||||
|
||||
|
@ -3354,8 +3354,8 @@ place_sections (bfd *orig_bfd, struct dwarf2_debug *stash)
|
||||
/* Align the new address to the current section
|
||||
alignment. */
|
||||
last_vma = ((last_vma
|
||||
+ ~((bfd_vma) -1 << sect->alignment_power))
|
||||
& ((bfd_vma) -1 << sect->alignment_power));
|
||||
+ ~(-((bfd_vma) 1 << sect->alignment_power)))
|
||||
& (-((bfd_vma) 1 << sect->alignment_power)));
|
||||
sect->vma = last_vma;
|
||||
last_vma += sz;
|
||||
}
|
||||
|
@ -12497,7 +12497,7 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
|
||||
if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
|
||||
stub_sec->size = ((stub_sec->size
|
||||
+ (1 << htab->params->plt_stub_align) - 1)
|
||||
& (-1 << htab->params->plt_stub_align));
|
||||
& -(1 << htab->params->plt_stub_align));
|
||||
|
||||
for (stub_sec = htab->params->stub_bfd->sections;
|
||||
stub_sec != NULL;
|
||||
@ -13021,7 +13021,7 @@ ppc64_elf_build_stubs (struct bfd_link_info *info,
|
||||
if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
|
||||
stub_sec->size = ((stub_sec->size
|
||||
+ (1 << htab->params->plt_stub_align) - 1)
|
||||
& (-1 << htab->params->plt_stub_align));
|
||||
& -(1 << htab->params->plt_stub_align));
|
||||
|
||||
for (stub_sec = htab->params->stub_bfd->sections;
|
||||
stub_sec != NULL;
|
||||
|
@ -1037,7 +1037,7 @@ safe_read_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
*length_return = num_read;
|
||||
|
||||
if (sign && (shift < 8 * sizeof (result)) && (byte & 0x40))
|
||||
result |= (bfd_vma) -1 << shift;
|
||||
result |= -((bfd_vma) 1 << shift);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user