I've been a bit busy lately and I couldn't test this until now, but I have to say that this commit breaks u-boot bmips support :(
BTW, I tried this on several bmips boards (one of them is a Netgear CG3100D, which uses u-boot.bin instead of u-boot.elf) Do you have any idea on what could be hapenning? Regards, Álvaro. El 23/06/2017 a las 17:21, Daniel Schwierzeck escribió: > > > Am 19.06.2017 um 20:53 schrieb Paul Burton: >> U-Boot has up until now built with -fpic for the MIPS architecture, >> producing position independent code which uses indirection through a >> global offset table, making relocation fairly straightforward as it >> simply involves patching up GOT entries. >> >> Using -fpic does however have some downsides. The biggest of these is >> that generated code is bloated in various ways. For example, function >> calls are indirected through the GOT & the t9 register: >> >> 8f998064 lw t9,-32668(gp) >> 0320f809 jalr t9 >> >> Without -fpic the call is simply: >> >> 0f803f01 jal be00fc04 <puts> >> >> This is more compact & faster (due to the lack of the load & the >> dependency the jump has on its result). It is also easier to read & >> debug because the disassembly shows what function is being called, >> rather than just an offset from gp which would then have to be looked up >> in the ELF to discover the target function. >> >> Another disadvantage of -fpic is that each function begins with a >> sequence to calculate the value of the gp register, for example: >> >> 3c1c0004 lui gp,0x4 >> 279c3384 addiu gp,gp,13188 >> 0399e021 addu gp,gp,t9 >> >> Without using -fpic this sequence no longer appears at the start of each >> function, reducing code size considerably. >> >> This patch switches U-Boot from building with -fpic to building with >> -fno-pic, in order to gain the benefits described above. The cost of >> this is an extra step during the build process to extract relocation >> data from the ELF & write it into a new .rel section in a compact >> format, plus the added complexity of dealing with multiple types of >> relocation rather than the single type that applied to the GOT. The >> benefit is smaller, cleaner, more debuggable code. The relocate_code() >> function is reimplemented in C to handle the new relocation scheme, >> which also makes it easier to read & debug. >> >> Taking maltael_defconfig as an example the size of u-boot.bin built >> using the Codescape MIPS 2016.05-06 toolchain (gcc 4.9.2, binutils >> 2.24.90) shrinks from 254KiB to 224KiB. >> >> Signed-off-by: Paul Burton <paul.bur...@imgtec.com> >> Cc: Daniel Schwierzeck <daniel.schwierz...@gmail.com> >> Cc: u-boot@lists.denx.de >> >> --- >> >> Changes in v3: >> - Fix R_MIPS_26 case that was breaking qemu_mips_defconfig. >> >> Changes in v2: >> - Drop unused .$@.relocs from Makefile.postlink. >> - Remove PF_OBJCOPY & assign to OBJCOPYFLAGS directly in config.mk. >> - Move declaration of __rel_start to asm/sections.h. >> >> arch/mips/Makefile.postlink | 23 +++ >> arch/mips/config.mk | 21 +- >> arch/mips/cpu/start.S | 130 ------------ >> arch/mips/cpu/u-boot.lds | 41 +--- >> arch/mips/include/asm/relocs.h | 24 +++ >> arch/mips/include/asm/sections.h | 7 + >> arch/mips/lib/Makefile | 1 + >> arch/mips/lib/reloc.c | 164 +++++++++++++++ >> common/board_f.c | 2 +- >> tools/.gitignore | 1 + >> tools/Makefile | 2 + >> tools/mips-relocs.c | 426 >> +++++++++++++++++++++++++++++++++++++++ >> 12 files changed, 663 insertions(+), 179 deletions(-) >> create mode 100644 arch/mips/Makefile.postlink >> create mode 100644 arch/mips/include/asm/relocs.h >> create mode 100644 arch/mips/lib/reloc.c >> create mode 100644 tools/mips-relocs.c >> > Reviewed-by: Daniel Schwierzeck <daniel.schwierz...@gmail.com> > Tested-by: Daniel Schwierzeck <daniel.schwierz...@gmail.com> > > > applied to u-boot-mips/next, thanks. > > > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot