[PATCH] arm: Remove unused ldr _dl_start_user
Sam James
sam@gentoo.org
Mon Feb 5 18:19:45 GMT 2024
Adhemerval Zanella Netto <adhemerval.zanella@linaro.org> writes:
> On 05/02/24 14:13, Sam James wrote:
>>
>> Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:
>>
>>> The commit 49d877a80b29d3002887b084eec6676d9f5fec18 (arm: Remove
>>> _dl_skip_args usage) removed the _SKIP_ARGS literal, which was
>>> previously loader to r4 on loader _start. However, the cleanup did not
>>> remove the following 'ldr r4, [sl, r4]' on _dl_start_user, used to check
>>> to skip the arguments after ld self-relocations.
>>>
>>> In my testing, the kernel initially set r4 to 0, which makes the
>>> ldr instruction just read the _GLOBAL_OFFSET_TABLE_. However, since r4
>>> is a caller-saved register; a different runtime might not zero
>>> initialize it and thus trigger an invalid memory access.
>>
>> Tag the bug?
>>
>> Also, I feel like the title perhaps makes the change sound more cosmetic
>> than it is.
>
> Right, I will change to 'arm: Remove wrong ldr _dl_start_user (BZ 31339)'
wfm, thanks!
>
>>
>>>
>>> Checked on arm-linux-gnu.
>>>
>>> Reported-by: Adrian Ratiu <adrian.ratiu@collabora.com>
>>> ---
>>> sysdeps/arm/dl-machine.h | 1 -
>>> 1 file changed, 1 deletion(-)
>>>
>>> diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
>>> index b857bbc868..dd1a0f6b6e 100644
>>> --- a/sysdeps/arm/dl-machine.h
>>> +++ b/sysdeps/arm/dl-machine.h
>>> @@ -139,7 +139,6 @@ _start:\n\
>>> _dl_start_user:\n\
>>> adr r6, .L_GET_GOT\n\
>>> add sl, sl, r6\n\
>>> - ldr r4, [sl, r4]\n\
>>> @ save the entry point in another register\n\
>>> mov r6, r0\n\
>>> @ get the original arg count\n\
>>
More information about the Libc-alpha
mailing list