[PATCH] mips: fix elf/tst-dlmopen4
Carlos O'Donell
carlos@redhat.com
Fri Jan 28 20:49:00 GMT 2022
On 1/28/22 15:41, H.J. Lu wrote:
> On Fri, Jan 28, 2022 at 11:04 AM Carlos O'Donell via Libc-alpha
> <libc-alpha@sourceware.org> wrote:
>>
>> On 1/28/22 13:54, Xi Ruoyao via Libc-alpha wrote:
>>> MIPS uses DT_MIPS_RLD_MAP and DT_MIPS_RLD_MAP_REL instead of DT_DEBUG,
>>> to provide access to r_debug.
>>
>> This looks correct to me. OK for glibc 2.35.
>>
>> I'm going to push this today if there are no other objections.
>>
>> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
>>
>>> ---
>>> elf/tst-dlmopen4.c | 29 +++++++++++++++++++----------
>>> 1 file changed, 19 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/elf/tst-dlmopen4.c b/elf/tst-dlmopen4.c
>>> index d8bcf7e9d5..de67a30a4b 100644
>>> --- a/elf/tst-dlmopen4.c
>>> +++ b/elf/tst-dlmopen4.c
>>> @@ -25,17 +25,26 @@
>>> #include <support/check.h>
>>> #include <support/test-driver.h>
>>>
>>> -#ifndef ELF_MACHINE_GET_R_DEBUG
>>> -# define ELF_MACHINE_GET_R_DEBUG(d) \
>>> - (__extension__ ({ \
>>> - struct r_debug_extended *debug; \
>>> - if ((d)->d_tag == DT_DEBUG) \
>>> - debug = (struct r_debug_extended *) (d)->d_un.d_ptr; \
>>> - else \
>>> - debug = NULL; \
>>> - debug; }))
>>> +static struct r_debug_extended *
>>> +elf_get_r_debug (ElfW(Dyn) *d)
>>> +{
>>> +#ifdef __mips__
>
> Shouldn't MIPS simply define a proper ELF_MACHINE_GET_R_DEBUG?
> It can be done with a header file.
The only use of ELF_MACHINE_GET_R_DEBUG is in the test, and the static function
is easier to read, edit, and debug, all of which is better for a test?
>>> + if (d->d_tag == DT_MIPS_RLD_MAP_REL)
>>> + {
>>> + char *ptr = (char *) d;
>>> + ptr += d->d_un.d_val;
>>> + return *(struct r_debug_extended **) ptr;
>>> + }
>>> + else if (d->d_tag == DT_MIPS_RLD_MAP)
>>> + return *(struct r_debug_extended **) d->d_un.d_ptr;
>>
>> OK. Matches the logic in sysdeps/mips/dl-debug.h
>>
>>> +#else
>>> + if (d->d_tag == DT_DEBUG)
>>> + return (struct r_debug_extended *) d->d_un.d_ptr;
>>
>> OK.
>>
>>> #endif
>>>
>>> + return NULL;
>>
>> OK.
>>
>>> +}
>>> +
>>> static int
>>> do_test (void)
>>> {
>>> @@ -44,7 +53,7 @@ do_test (void)
>>>
>>> for (d = _DYNAMIC; d->d_tag != DT_NULL; ++d)
>>> {
>>> - debug = ELF_MACHINE_GET_R_DEBUG (d);
>>> + debug = elf_get_r_debug (d);
>>
>> OK.
>>
>>> if (debug != NULL)
>>> break;
>>> }
>>
>>
>> --
>> Cheers,
>> Carlos.
>>
>
>
--
Cheers,
Carlos.
More information about the Libc-alpha
mailing list