lkml.org 
[lkml]   [2023]   [Feb]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH v2 0/5] LoongArch: Add kernel relocation and KASLR support
From
Date
On Wed, 2023-02-08 at 12:37 +0800, Youling Tang wrote:
> In the case of "[Patch v2 2/5] LoongArch: use la.pcrel instenad of
> la.abs for exception handlerS", the above failure will occur.
>
> Patch2 may have certain problems when using the old toolchains.
>
> Youling.

Thanks for the test...

The problem is: old toolchain uses pcaddu12i/ori/lu32i.d/lu52i.d/add.d
for a 3-operand la.pcrel, while the new toolchain uses
pcalau12i/addi.d/lu32i/lu52i/add.d. (I've somehow forgotten all the
difference!)

We can fix it with something like...

> +void reloc_handler(unsigned long handler, struct handler_reloc *rel)
> +{
> + if (!rel)
> + return;
> +
> + for (unsigned long i = 0; i < rel->cnt; i++) {
> + unsigned long pc = handler + rel->entries[i].offset;
> + unsigned long v = rel->entries[i].sym;

/* anchor etc. moved into do_reloc_pcalau12i */

> + union loongarch_instruction *insn =
> + (union loongarch_instruction *)pc;

switch insn[0]->reg1i20_format->reg1i20_format {
case pcaddu12i_op:
do_reloc_pcaddu12i(insn, pc, v);
break;
case pcalau12i_op: /* TODO: add it for asm/inst.h */
do_reloc_pcalau12i(insn, pc, v);
break;
default:
panic("what the f**k");
}

Alternatively, we can also emit the pcalau12i/addi.d/lu32i/lu52i
sequence and overwrite the pcaddu12i/ori sequence generated by the old
toolchain.

Which way do you like?
--
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

\
 
 \ /
  Last update: 2023-03-27 00:14    [W:0.055 / U:0.676 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site