• Paul Mundt's avatar
    binfmt_elf_fdpic: Magical stack pointer index, for NEW_AUX_ENT compat. · 9b14ec35
    Paul Mundt authored
    While implementing binfmt_elf_fdpic on SH it quickly became apparent
    that SH was the first platform to support both binfmt_elf_fdpic and
    binfmt_elf, as well as the only of the FDPIC platforms to make use of the
    auxvt.
    
    Currently binfmt_elf_fdpic uses a special version of NEW_AUX_ENT() where
    the first argument is the entry displacement after csp has been adjusted,
    being reset after each adjustment. As we have no ability to sort this out
    through the platform's ARCH_DLINFO, this index needs to be managed
    entirely in create_elf_fdpic_tables(). Presently none of the platforms
    that set their own auxvt entries are able to do so through their
    respective ARCH_DLINFOs when using binfmt_elf_fdpic.
    
    In addition to this, binfmt_elf_fdpic has been looking at
    DLINFO_ARCH_ITEMS for the number of architecture-specific entries in the
    auxvt. This is legacy cruft, and is not defined by any platforms in-tree,
    even those that make heavy use of the auxvt. AT_VECTOR_SIZE_ARCH is
    always available, and contains the number that is of interest here, so we
    switch to using that unconditionally as well.
    
    As this has direct bearing on how much stack is used, platforms that have
    configurable (or dynamically adjustable) NEW_AUX_ENT calls need to either
    make AT_VECTOR_SIZE_ARCH more fine-grained, or leave it as a worst-case
    and live with some lost stack space if those entries aren't pushed (some
    platforms may also need to purposely sacrifice some space here for
    alignment considerations, as noted in the code -- although not an issue
    for any FDPIC-capable platform today).
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    Acked-by: default avatarDavid Howells <dhowells@redhat.com>
    9b14ec35
binfmt_elf_fdpic.c 47.4 KB