On Thu, 10 May 2018, Kirill A. Shutemov wrote: > + /* > + * paging_prepare() and cleanup_trampoline() below can have GOT > + * references. Adjust the table with address we are running at. > + */ > + > + /* The GOP was not adjusted before */
GOP == EFI speak for Graphics Output Protocol. What the heck? > + xorq %rax, %rax And this clearing of RAX is related to this because? Sure you need it for adjust_got() but adding a comment to that is too much asked for, right? > + /* Calculate the address the binary is loaded at. */ > + call 1f > +1: popq %rdi > + subq $1b, %rdi > + > + call adjust_gop > + > /* > * At this point we are in long mode with 4-level paging enabled, > * but we might want to enable 5-level paging or vice versa. > @@ -381,6 +396,24 @@ trampoline_return: > pushq $0 > popfq > > + /* > + * Previously we've adjusted the GOT with address the binary was > + * loaded at. Now we need to re-adjust for relocation address. > + */ Breaking up those comments makes it more readable, right? > + /* > + * Calculate the address the binary is loaded at. > + * This address was used to adjust the table before and we need to > + * undo the change. > + */ > + call 1f > +1: popq %rax > + subq $1b, %rax > + > + /* The new adjustment is relocation address */ is the relocation address > + movq %rbx, %rdi > + call adjust_gop > + > /* > * Copy the compressed kernel to the end of our buffer > * where decompression in place becomes safe. > @@ -481,19 +514,6 @@ relocated: > shrq $3, %rcx > rep stosq > > -/* > - * Adjust our own GOT > - */ > - leaq _got(%rip), %rdx > - leaq _egot(%rip), %rcx > -1: > - cmpq %rcx, %rdx > - jae 2f > - addq %rbx, (%rdx) > - addq $8, %rdx > - jmp 1b > -2: > - > /* > * Do the extraction, and jump to the new kernel.. > */ > @@ -512,6 +532,26 @@ relocated: > */ > jmp *%rax > > +/* > + * Adjust global offest table offest? > + * > + * RAX is previous adjustment of the table to undo (0 if it's the first time > we touch GOP). is the previous And there is no reason to make that line overly long. > + * RDI is the new adjustment to apply. > + */ > +adjust_gop: > + /* Walk through the GOT adding the address to the entries */ > + leaq _got(%rip), %rdx > + leaq _egot(%rip), %rcx > +1: > + cmpq %rcx, %rdx > + jae 2f > + subq %rax, (%rdx) /* Undo previous adjustment */ > + addq %rdi, (%rdx) /* Apply the new adjustment */ > + addq $8, %rdx > + jmp 1b > +2: > + ret I'm really tired of your carelessness. The amount of half baken stuff you submit is way above the tolerance level by now. I asked you several times to be more careful, but you simply do not care at all. Get your act together finally. Thanks, tglx