• A
    [MIPS] Load modules to CKSEG0 if CONFIG_BUILD_ELF64=n · 656be92f
    Atsushi Nemoto 提交于
    This is a patch to load 64-bit modules to CKSEG0 so that can be
    compiled with -msym32 option.  This makes each module ~10% smaller.
    
    * introduce MODULE_START and MODULE_END
    * custom module_alloc()
    * PGD for modules
    * change XTLB refill handler synthesizer
    * enable -msym32 for modules again
      (revert ca78b1a5c6a6e70e052d3ea253828e49b5d07c8a)
    
    New XTLB refill handler looks like this:
    
    80000080 dmfc0   k0,C0_BADVADDR
    80000084 bltz    k0,800000e4			# goto l_module_alloc
    80000088 lui     k1,0x8046			# %high(pgd_current)
    8000008c ld      k1,24600(k1)			# %low(pgd_current)
    80000090 dsrl    k0,k0,0x1b			# l_vmalloc_done:
    80000094 andi    k0,k0,0x1ff8
    80000098 daddu   k1,k1,k0
    8000009c dmfc0   k0,C0_BADVADDR
    800000a0 ld      k1,0(k1)
    800000a4 dsrl    k0,k0,0x12
    800000a8 andi    k0,k0,0xff8
    800000ac daddu   k1,k1,k0
    800000b0 dmfc0   k0,C0_XCONTEXT
    800000b4 ld      k1,0(k1)
    800000b8 andi    k0,k0,0xff0
    800000bc daddu   k1,k1,k0
    800000c0 ld      k0,0(k1)
    800000c4 ld      k1,8(k1)
    800000c8 dsrl    k0,k0,0x6
    800000cc mtc0    k0,C0_ENTRYLO0
    800000d0 dsrl    k1,k1,0x6
    800000d4 mtc0    k1,C0_ENTRYL01
    800000d8 nop
    800000dc tlbwr
    800000e0 eret
    800000e4 dsll    k1,k0,0x2			# l_module_alloc:
    800000e8 bgez    k1,80000008			# goto l_vmalloc
    800000ec lui     k1,0xc000
    800000f0 dsubu   k0,k0,k1
    800000f4 lui     k1,0x8046			# %high(module_pg_dir)
    800000f8 beq     zero,zero,80000000
    800000fc nop
    80000000 beq     zero,zero,80000090		# goto l_vmalloc_done
    80000004 daddiu  k1,k1,0x4000
    80000008 dsll32  k1,k1,0x0			# l_vmalloc:
    8000000c dsubu   k0,k0,k1
    80000010 beq     zero,zero,80000090		# goto l_vmalloc_done
    80000014 lui     k1,0x8046			# %high(swapper_pg_dir)
    Signed-off-by: NAtsushi Nemoto <anemo@mba.ocn.ne.jp>
    Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
    656be92f
pgtable-64.h 8.3 KB