http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55309



--- Comment #27 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-08 
09:02:23 UTC ---

Zero based offset has the big disadvantage of imposing big requirements on the

executable.

Could we on x86_64 think about mem_to_shadow(x) (x >> 3) + 0x7fff8000 (note,

not |, but +)?

Then instead of something like:

        movq    %rdi, %rdx

        movabsq $17592186044416, %rax

        shrq    $3, %rdx

        cmpb    $0, (%rdx,%rax)

        jne     .L5

        movq    (%rdi), %rax

        ret

.L5:

        pushq   %rax

        call    __asan_report_load8

we could emit:

        movq    %rdi, %rdx

        shrq    $3, %rdx

        cmpb    $0, 0x7fff8000(%rdx)

        jne     .L5

        movq    (%rdi), %rax

        ret

.L5:

        pushq   %rax

        call    __asan_report_load8

which is 7 bytes shorter sequence, without the need of an extra register and

the not so cheap movabs insn.  By forcing PIE for everything, you are forcing

the PIC overhead of unnecessary extra indirections in many places (and, on

non-x86_64 usually it is even much more expensive).

Reply via email to