https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81490
--- Comment #13 from H. Peter Anvin <hpa at zytor dot com> --- On July 20, 2017 10:47:54 AM PDT, ubizjak at gmail dot com <gcc-bugzi...@gcc.gnu.org> wrote: >https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81490 > >--- Comment #12 from Uroš Bizjak <ubizjak at gmail dot com> --- >(In reply to Andy Lutomirski from comment #8) > >> I would like to see something along these lines but even stronger: a >way to >> instruct GCC to use a particular type of access and relocation. For >> example, I think I should be able to ask GCC to reference symbol >"foo" using >> a PC-relative relocation or using an absolute relocation at my >option. > >Please note that the reason to use RIP relative address is one byte >shorter >insn sequence: > > addl $1, %gs:a(%rip) > addl $2, %gs:a > >assembles to: > > 0: 65 83 05 00 00 00 00 addl $0x1,%gs:0x0(%rip) # 0x8 > 7: 01 > 3: R_X86_64_PC32 a-0x5 > 8: 65 83 04 25 00 00 00 addl $0x2,%gs:0x0 > f: 00 02 > c: R_X86_64_32S a > >I'm not familiar with kernel code model assumptions, the doc says that > >'-mcmodel=kernel' > Generate code for the kernel code model. The kernel runs in the > negative 2 GB of the address space. This model has to be used for > Linux kernel code. > >so assuming that code and data fits in 2 GB of address space, all >symbols >should be reachable with either relocation. > >OTOH, we can avoid RIP relative addresses for non-default address >spaces, when >-mcmodel=kernel compile flag is in effect. It's not just about the kernel model. The example I have is for the small-pic model. We are considering moving away from the kernel model.