[PATCH] tile: Fix up corner cases with signed relocations

Chris Metcalf cmetcalf@tilera.com
Fri Sep 5 20:38:00 GMT 2014


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?

-- 
Chris Metcalf, Tilera Corp.
http://www.tilera.com



More information about the Libc-alpha mailing list