[PATCH] tile: Fix up corner cases with signed relocations
Andreas Schwab
schwab@linux-m68k.org
Fri Sep 5 21:40:00 GMT 2014
Chris Metcalf <cmetcalf@tilera.com> writes:
> On 9/5/2014 4:33 PM, Andreas Schwab wrote:
>> 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.
>
> The shift is always a non-negative value less than __WORDSIZE here, by intention. Are you seeing something I'm missing?
I'm talking about the value, not the shift amount.
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."
More information about the Libc-alpha
mailing list