On Mon, Jun 17, 2019 at 2:30 PM Luís Marques <luismarq...@lowrisc.org> wrote:
>
> On Thu, Jun 6, 2019 at 7:19 PM Denys Vlasenko <vda.li...@googlemail.com> 
> wrote:
> > Can you experiment with LLVM and find a definition of SET_PTR_TO_GLOBALS()
> > which works for it?
>
> I did not find any correct solution for this other than disabling the
> optimization for Clang/LLVM.

Works for me with the following versions:
llvm-libs-8.0.0-7.fc31.x86_64
llvm-8.0.0-7.fc31.x86_64
clang-libs-8.0.0-3.fc31.x86_64
clang-8.0.0-3.fc31.x86_64


struct globals;
extern struct globals *const ptr_to_globals;
#define barrier() __asm__ __volatile__("":::"memory")
#define SET_PTR_TO_GLOBALS(x) do { \
        (*(struct globals**)&ptr_to_globals) = (void*)(x); \
        barrier(); \
} while (0)
void f(void *p)
{
        SET_PTR_TO_GLOBALS(p);
}

$ clang -Os -Wall -S t.c
$ cat t.s
        .text
        .file   "t.c"
        .globl  f                       # -- Begin function f
        .type   f,@function
f:                                      # @f
        .cfi_startproc
# %bb.0:
        movq    %rdi, ptr_to_globals(%rip)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ store to ptr_to_globals
        #APP
        #NO_APP
        retq
.Lfunc_end0:
        .size   f, .Lfunc_end0-f
        .cfi_endproc
                                        # -- End function

        .ident  "clang version 8.0.0 (Fedora 8.0.0-3.fc31)"
        .section        ".note.GNU-stack","",@progbits
        .addrsig
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to