Skip to content
  • Kevin Brodsky's avatar
    arm64: fix vdso-offsets.h dependency · a66649da
    Kevin Brodsky authored
    
    
    arm64/kernel/{vdso,signal}.c include vdso-offsets.h, as well as any
    file that includes asm/vdso.h. Therefore, vdso-offsets.h must be
    generated before these files are compiled.
    
    The current rules in arm64/kernel/Makefile do not actually enforce
    this, because even though $(obj)/vdso is listed as a prerequisite for
    vdso-offsets.h, this does not result in the intended effect of
    building the vdso subdirectory (before all the other objects). As a
    consequence, depending on the order in which the rules are followed,
    vdso-offsets.h is updated or not before arm64/kernel/{vdso,signal}.o
    are built. The current rules also impose an unnecessary dependency on
    vdso-offsets.h for all arm64/kernel/*.o, resulting in unnecessary
    rebuilds. This is made obvious when using make -j:
    
      touch arch/arm64/kernel/vdso/gettimeofday.S && make -j$NCPUS arch/arm64/kernel
    
    will sometimes result in none of arm64/kernel/*.o being
    rebuilt, sometimes all of them, or even just some of them.
    
    It is quite difficult to ensure that a header is generated before it
    is used with recursive Makefiles by using normal rules.  Instead,
    arch-specific generated headers are normally built in the archprepare
    recipe in the arch Makefile (see for instance arch/ia64/Makefile).
    Unfortunately, asm-offsets.h is included in gettimeofday.S, and must
    therefore be generated before vdso-offsets.h, which is not the case if
    archprepare is used. For this reason, a rule run after archprepare has
    to be used.
    
    This commit adds rules in arm64/Makefile to build vdso-offsets.h
    during the prepare step, ensuring that vdso-offsets.h is generated
    before building anything. It also removes the now-unnecessary
    dependencies on vdso-offsets.h in arm64/kernel/Makefile. Finally, it
    removes the duplication of asm-offsets.h between arm64/kernel/vdso/
    and include/generated/ and makes include/generated/vdso-offsets.h a
    target in arm64/kernel/vdso/Makefile.
    
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Michal Marek <mmarek@suse.com>
    Signed-off-by: default avatarKevin Brodsky <kevin.brodsky@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    a66649da