On Fri, 18 Aug 2017, Maciej W. Rozycki wrote: > > When building a kernel for the microMIPS ISA, ensure that the ISA bit > > (ie. bit 0) in the entry address is set. Otherwise we may include an > > entry address in images which bootloaders will jump to as MIPS32 code. > > Hmm, what's going on here? The ISA bit is set by the linker according to > the mode the code at the entry symbol has been assembled for, e.g.: > > $ readelf -h vmlinux | grep Entry > Entry point address: 0x804355e1 > $ readelf -s vmlinux | grep kernel_entry > 156535: 80100400 0 FUNC GLOBAL DEFAULT [MICROMIPS] 1 __kernel_entry > 156742: 804355e0 146 FUNC GLOBAL DEFAULT [MICROMIPS] 1 kernel_entry > $ > > or no microMIPS (or MIPS16) executable could work. Is your build process > or toolchain used broken by any chance? It is indeed the build process. You've come up with a valid, however a complicated solution. How about the change below, on top of yours -- does it work for you? If so, then I'll wrap it up and submit as an update. Maciej --- arch/mips/Makefile | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) linux-mips-start-address.diff Index: linux-sfr-usead/arch/mips/Makefile =================================================================== --- linux-sfr-usead.orig/arch/mips/Makefile 2017-08-18 15:25:58.196676000 +0100 +++ linux-sfr-usead/arch/mips/Makefile 2017-08-18 15:27:55.309653000 +0100 @@ -242,21 +242,8 @@ include arch/mips/Kbuild.platforms ifdef CONFIG_PHYSICAL_START load-y = $(CONFIG_PHYSICAL_START) endif - -entry-noisa-y = 0x$(shell $(NM) vmlinux 2>/dev/null \ - | grep "\bkernel_entry\b" | cut -f1 -d \ ) -ifdef CONFIG_CPU_MICROMIPS - # - # Set the ISA bit, since the kernel_entry symbol in the ELF will have it - # clear which would lead to images containing addresses which bootloaders may - # jump to as MIPS32 code. - # - entry-y = $(patsubst %0,%1,$(patsubst %2,%3,$(patsubst %4,%5, \ - $(patsubst %6,%7,$(patsubst %8,%9,$(patsubst %a,%b, \ - $(patsubst %c,%d,$(patsubst %e,%f,$(entry-noisa-y))))))))) -else - entry-y = $(entry-noisa-y) -endif +entry-y = $(shell $(OBJDUMP) -f vmlinux 2>/dev/null \ + | sed -n 's/start address //p') cflags-y += -I$(srctree)/arch/mips/include/asm/mach-generic drivers-$(CONFIG_PCI) += arch/mips/pci/