On Mon, Jul 8, 2019 at 12:09 PM Alexey Dobriyan <adobri...@gmail.com> wrote: > > Thomas Garnier wrote: > > - "pushq $1f\n\t" > > + "movabsq $1f, %q0\n\t" > > + "pushq %q0\n\t" > > "iretq\n\t" > > UNWIND_HINT_RESTORE > > "1:" > > Fake PIE. True PIE looks like this:
I used movabsq in couple assembly changes where the memory context is unclear and relative reference might lead to issues. It happened on early boot and hibernation save/restore paths. Do you think a relative reference in this function will always be accurate? > > ffffffff81022d70 <do_sync_core>: > ffffffff81022d70: 8c d0 mov eax,ss > ffffffff81022d72: 50 push rax > ffffffff81022d73: 54 push rsp > ffffffff81022d74: 48 83 04 24 08 add QWORD PTR [rsp],0x8 > ffffffff81022d79: 9c pushf > ffffffff81022d7a: 8c c8 mov eax,cs > ffffffff81022d7c: 50 push rax > ffffffff81022d7d: ===> 48 8d 05 03 00 00 00 lea rax,[rip+0x3] # > ffffffff81022d87 <do_sync_core+0x17> > ffffffff81022d84: 50 push rax > ffffffff81022d85: 48 cf iretq > ffffffff81022d87: c3 ret > > Signed-off-by: Alexey Dobriyan <adobri...@gmail.com> > > --- a/arch/x86/include/asm/processor.h > +++ b/arch/x86/include/asm/processor.h > @@ -710,7 +710,8 @@ static inline void sync_core(void) > "pushfq\n\t" > "mov %%cs, %0\n\t" > "pushq %q0\n\t" > - "pushq $1f\n\t" > + "leaq 1f(%%rip), %q0\n\t" > + "pushq %q0\n\t" > "iretq\n\t" > UNWIND_HINT_RESTORE > "1:"