On Mon, 14 Sep 2020, Ard Biesheuvel wrote: > This is a respin of the adr_l/ldr_l code I wrote some years ago in the > context of my KASLR proof of concept for 32-bit ARM. > > A new use case came up, in the form of Clang, which does not implement > the 'adrl' pseudo-instruction in its assembler, and so for PC-relative > references that don't fit into a ARM adr instruction, we need something > else. Patch #2 addresses an actual Clang build issue of this nature, by > replacing an occurrence of adrl with adr_l. > > I have included my existing cleanup patches that were built on top of the > adr_l macro, which replace several occurrences of open coded arithmetic to > calculate runtime addresses based on link time virtual addresses stored > in literals. > > Note that all of these patches with the exception of #2 were reviewed or > acked by Nico before, but given that this was a while ago (and the fact Certainly it must have been, as I didn't remember much of it. > that neither of us work for Linaro anymore), I have dropped these. Note > that only patch #1 deviates significantly from the last version that I > sent out, the remaining ones were just freshened up (and their commit > logs slightly expanded). Reviewed-by: Nicolas Pitre <nico@xxxxxxxxxxx> > Cc: Russell King <linux@xxxxxxxxxxxxxxx> > Cc: Linus Walleij <linus.walleij@xxxxxxxxxx> > Cc: Nicolas Pitre <nico@xxxxxxxxxxx> > Cc: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > Cc: Stefan Agner <stefan@xxxxxxxx> > Cc: Peter Smith <Peter.Smith@xxxxxxx> > Cc: Marc Zyngier <maz@xxxxxxxxxx> > Cc: Will Deacon <will@xxxxxxxxxx> > > Ard Biesheuvel (12): > ARM: assembler: introduce adr_l, ldr_l and str_l macros > ARM: efistub: replace adrl pseudo-op with adr_l macro invocation > ARM: module: add support for place relative relocations > ARM: head-common.S: use PC-relative insn sequence for __proc_info > ARM: head-common.S: use PC-relative insn sequence for idmap creation > ARM: head.S: use PC-relative insn sequence for secondary_data > ARM: kernel: use relative references for UP/SMP alternatives > ARM: head: use PC-relative insn sequence for __smp_alt > ARM: sleep.S: use PC-relative insn sequence for > sleep_save_sp/mpidr_hash > ARM: head.S: use PC-relative insn sequences for __fixup_pv_table > ARM: head.S: use PC relative insn sequence to calculate PHYS_OFFSET > ARM: kvm: replace open coded VA->PA calculations with adr_l call > > arch/arm/boot/compressed/head.S | 18 +--- > arch/arm/include/asm/assembler.h | 88 ++++++++++++++++++- > arch/arm/include/asm/elf.h | 5 ++ > arch/arm/include/asm/processor.h | 2 +- > arch/arm/kernel/head-common.S | 22 ++--- > arch/arm/kernel/head.S | 90 +++++--------------- > arch/arm/kernel/hyp-stub.S | 27 +++--- > arch/arm/kernel/module.c | 20 ++++- > arch/arm/kernel/sleep.S | 19 ++--- > 9 files changed, 159 insertions(+), 132 deletions(-) > > -- > 2.17.1 > >