On Fri, 2022-08-05 at 10:51 +0800, Xi Ruoyao via Gcc-patches wrote: > > If it is accessed through the GOT table, dynamic relocation is required > > when the module is loaded. > > Dynamic relocation is required when the module is loaded anyway. The > .ko modules are actually relocatable ELF objects (produced by ld -r) and > the module loader has to perform some work of a normal linker. > > > And accessing the got table may have a cache miss. > > /* snip */ > > > So my idea is "model(normal)","model (large)" etc. > > Then should we have an option to disable GOT globally? Maybe for kernel > we'll just "-mno-got -mcmodel=large" (or "extreme"? The kernel image is > loaded at 0x9000000000000000 and the modules are above > 0xffff000000000000 so we need to handle 64-bit offset).
Or maybe we should just use a PC-relative addressing with 4 instructions instead of GOT for -fno-PIC? Both way consumes 16 bytes (4 instructions for PC-relative, 2 instructions and a 64-bit GOT entry for GOT) and PC- relative may be more cache friendly. But such a major change cannot be backported for 12.2 IMO. -- Xi Ruoyao <xry...@xry111.site> School of Aerospace Science and Technology, Xidian University