[Bug target/81490] x86: Handling of symbol ranges for __seg_fs/__seg_gs
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Jul 20 17:48:00 GMT 2017
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.
More information about the Gcc-bugs
mailing list