PING^3: [PATCH 1/2] Add ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA to x86
H.J. Lu
hjl.tools@gmail.com
Sun Mar 29 16:34:00 GMT 2015
On Wed, Mar 25, 2015 at 4:33 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, Mar 18, 2015 at 7:43 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Wed, Mar 11, 2015 at 10:24 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>> On Thu, Mar 5, 2015 at 4:19 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
>>>> With copy relocation, address of protected data defined in the shared
>>>> library may be external. When there is a relocation against the
>>>> protected data symbol within the shared library, we need to check if we
>>>> should skip the definition in the executable copied from the protected
>>>> data. This patch adds ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA and defines
>>>> it for x86. If ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA isn't 0, do_lookup_x
>>>> will skip the data definition in the executable from copy reloc.
>>>>
>>>> I only defined DL_EXTERN_PROTECTED_DATA for x86. Other targets can
>>>> define DL_EXTERN_PROTECTED_DATA and update elf_machine_type_class to
>>>> support copy relocation on protected data.
>>>>
>>>> I will submit a testcase in a separate email.
>>>>
>>>> Tested on x86-32 and x86-64. OK for master?
>>>>
>>>> Thanks.
>>>>
>>>> H.J.
>>>> ---
>>>> [BZ #17711]
>>>> * elf/dl-lookup.c (do_lookup_x): When UNDEF_MAP is NULL, which
>>>> indicates it is called from do_lookup_x on relocation against
>>>> protected data, skip the data definion in the executable from
>>>> copy reloc.
>>>> (_dl_lookup_symbol_x): Pass ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA,
>>>> instead of ELF_RTYPE_CLASS_PLT, to do_lookup_x for
>>>> EXTERN_PROTECTED_DATA relocation against STT_OBJECT symbol.
>>>> * sysdeps/generic/ldsodefs.h * (ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA):
>>>> New. Defined to 4 if DL_EXTERN_PROTECTED_DATA is defined,
>>>> otherwise to 0.
>>>> * sysdeps/i386/dl-lookupcfg.h (DL_EXTERN_PROTECTED_DATA): New.
>>>> * sysdeps/i386/dl-machine.h (elf_machine_type_class): Set class
>>>> to ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA for R_386_GLOB_DAT.
>>>> * sysdeps/x86_64/dl-lookupcfg.h (DL_EXTERN_PROTECTED_DATA): New.
>>>> * sysdeps/x86_64/dl-machine.h (elf_machine_type_class): Set class
>>>> to ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA for R_X86_64_GLOB_DAT.
>>>
>>> PING.
>>
>> PING.
>>
>
> Any comments, objections? The patch is at
>
> https://sourceware.org/ml/libc-alpha/2015-03/msg00230.html
>
GCC bug has been fixed for GCC 5. I will check in this patch
on Tuesday, March 31.
--
H.J.
More information about the Libc-alpha
mailing list