This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] tile: Fix up corner cases with signed relocations
- From: Andreas Schwab <schwab at linux-m68k dot org>
- To: Chris Metcalf <cmetcalf at tilera dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Fri, 05 Sep 2014 22:33:19 +0200
- Subject: Re: [PATCH] tile: Fix up corner cases with signed relocations
- Authentication-results: sourceware.org; auth=none
- References: <201409051854 dot s85IsfM0024659 at gx-1 dot internal dot tilera dot com>
Chris Metcalf <cmetcalf@tilera.com> writes:
> @@ -686,13 +686,17 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
> tile_bundle_bits *p = (tile_bundle_bits *) reloc_addr;
> tile_bundle_bits bits = *p;
>
> -#define MUNGE(func) do { \
> +#define MUNGE_SIGNED(func, length) do { \
> bits = ((bits & ~create_##func (-1)) | create_##func (value)); \
> - if (get_##func (bits) != value) \
> + ElfW(Addr) result = (long) get_##func (bits) \
> + << (__WORDSIZE - length) >> (__WORDSIZE - length); \
Left shifting a negative value has undefined value.
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."