[PATCH v2] MIPS support for GNU hash

Mihailo Stojanović mihailo.stojanovic@rt-rk.com
Tue Jul 23 13:11:00 GMT 2019


Hello,

>>    The corresponding binutils patch can be found here:
>> https://sourceware.org/ml/binutils/2019-07/msg00098.html
> If I understood correctly this patch has not been pushed upstream, neither
> in fact actually reviewed.  My understanding is we require upstream support
> for either kernel or toolchain features before including it on glibc, although
> not sure about this specific feature where it really tied with binutils
> support.
>
> Carlos, do you think we should wait for binutils?
Binutils patch hasn't been pushed upstream, but it was reviewed in [1].
We are currently waiting on FSF to process the binutils assignment for
RT-RK [2].
>> @@ -955,6 +955,12 @@ _dl_setup_hash (struct link_map *map)
>>         map->l_gnu_buckets = hash32;
>>         hash32 += map->l_nbuckets;
>>         map->l_gnu_chain_zero = hash32 - symbias;
>> +
>> +      /* Initialize MIPS xhash translation table.  */
>> +#ifdef ELF_MACHINE_XHASH_SETUP
>> +      ELF_MACHINE_XHASH_SETUP (hash32, symbias, map)
>> +#endif
>> +
>>         return;
>>       }
>>   
> I think it is better we move away from ifdef such kind of logic where possible
> and just define ELF_MACHINE_XHASH_SETUP in the generic as an empty macro.
Acknowledged. Defined as an empty macro in the newly submitted
patch [3].
>> diff --git a/sysdeps/mips/linkmap.h b/sysdeps/mips/linkmap.h
>> index 1fb9678..1e640c3 100644
>> --- a/sysdeps/mips/linkmap.h
>> +++ b/sysdeps/mips/linkmap.h
>> @@ -3,4 +3,5 @@ struct link_map_machine
>>       ElfW(Addr) plt; /* Address of .plt */
>>       ElfW(Word) fpabi; /* FP ABI of the object */
>>       unsigned int odd_spreg; /* Does the object require odd_spreg support? */
>> +    const Elf32_Word *mips_xlat_zero; /* .MIPS.xhash */
>>     };
>> diff --git a/sysdeps/unix/sysv/linux/mips/ldsodefs.h b/sysdeps/unix/sysv/linux/mips/ldsodefs.h
>> index 8dde855..ce7b2f9 100644
>> --- a/sysdeps/unix/sysv/linux/mips/ldsodefs.h
>> +++ b/sysdeps/unix/sysv/linux/mips/ldsodefs.h
>> @@ -34,7 +34,7 @@ extern void _dl_static_init (struct link_map *map);
>>   #undef VALID_ELF_ABIVERSION
>>   #define VALID_ELF_ABIVERSION(osabi,ver)			\
>>     (ver == 0						\
>> -   || (osabi == ELFOSABI_SYSV && ver < 4)		\
>> +   || (osabi == ELFOSABI_SYSV && ver < 6)		\
>>      || (osabi == ELFOSABI_GNU && ver < LIBC_ABI_MAX))
>>   
>>   #endif /* ldsodefs.h */
> I presume the version 6 is to make room for the PT_GNU_STACK.

Actually, the jump from 4 to 5 should have happened when support
for absolute symbols was added to binutils [4], but it didn't, so I had
to address that here.

Cheers,
Mihailo

[1] https://sourceware.org/ml/binutils/2019-07/msg00055.html
[2] https://sourceware.org/ml/binutils/2019-07/msg00215.html
[3] https://sourceware.org/ml/libc-alpha/2019-07/msg00526.html
[4] 
https://github.com/bminor/binutils-gdb/blob/bfa2a36d94d124eb7b54fd271a543047579b47ee/bfd/elfxx-mips.c#L16606



More information about the Libc-alpha mailing list