[PATCH v2 5/5] Linux: Consolidate auxiliary vector parsing

Florian Weimer fweimer@redhat.com
Tue Feb 8 20:34:43 GMT 2022


* Adhemerval Zanella:

>> diff --git a/sysdeps/unix/sysv/linux/dl-parse_auxv.h b/sysdeps/unix/sysv/linux/dl-parse_auxv.h
>> new file mode 100644
>> index 0000000000..f450c6c5ce
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/dl-parse_auxv.h

>> +typedef ElfW(Addr) dl_parse_auxv_t[AT_MINSIGSTKSZ + 1];
>> +
>> +/* Copy the auxiliary vector into AUX_VALUES and set up GLRO
>> +   variables.  */
>> +static inline
>> +void _dl_parse_auxv (ElfW(auxv_t) *av, dl_parse_auxv_t auxv_values)
>> +{
>> +  auxv_values[AT_ENTRY] =  (ElfW(Addr)) ENTRY_POINT;
>
> Extra whitespace.

Fxied.

>> +  auxv_values[AT_PAGESZ] = EXEC_PAGESIZE;
>> +  auxv_values[AT_FPUCW] = _FPU_DEFAULT;
>> +
>> +  /* NB: Default to a constant CONSTANT_MINSIGSTKSZ.  */
>> +  _Static_assert (__builtin_constant_p (CONSTANT_MINSIGSTKSZ),
>> +                  "CONSTANT_MINSIGSTKSZ is constant");
>
> Shouldn't it warn that CONSTANT_MINSIGSTKSZ is not a constant?

Sorry, would please rephrase?  Should I change this to
""CONSTANT_MINSIGSTKSZ is not constant"?

>> +  auxv_values[AT_MINSIGSTKSZ] = CONSTANT_MINSIGSTKSZ;
>> +
>> +  for (; av->a_type != AT_NULL; av++)
>> +    if (av->a_type <= AT_MINSIGSTKSZ)
>> +      auxv_values[av->a_type] = av->a_un.a_val;
>> +
>> +  GLRO(dl_pagesize) = auxv_values[AT_PAGESZ];
>> +  __libc_enable_secure = auxv_values[AT_SECURE];
>> +  GLRO(dl_platform) = (void *) auxv_values[AT_PLATFORM];
>> +  GLRO(dl_hwcap) = auxv_values[AT_HWCAP];
>> +  GLRO(dl_hwcap2) = auxv_values[AT_HWCAP2];
>> +  GLRO(dl_clktck) = auxv_values[AT_CLKTCK];
>> +  GLRO(dl_fpu_control) = auxv_values[AT_FPUCW];
>> +  _dl_random = (void *) auxv_values[AT_RANDOM];
>> +  GLRO(dl_minsigstacksize) = auxv_values[AT_MINSIGSTKSZ];
>> +  GLRO(dl_sysinfo_dso) = (void *) auxv_values[AT_SYSINFO_EHDR];
>> +#ifdef NEED_DL_SYSINFO
>
> I think you can now assume NEED_DL_SYSINFO is always defined.

NEED_DL_SYSINFO is only defined by i386 and ia64, only
NEED_DL_SYSINFO_DSO is always defined on Linux.

Thanks,
Florian



More information about the Libc-alpha mailing list