Thanks a lot! That works perfectly!

Closed.

On Thu, Mar 31, 2016, 14:08 Yichao Yu <yyc1...@gmail.com> wrote:

> On Thu, Mar 31, 2016 at 7:52 AM, Yichao Yu <yyc1...@gmail.com> wrote:
> > On Thu, Mar 31, 2016 at 5:23 AM, Laurent Bartholdi
> > <laurent.bartho...@gmail.com> wrote:
> >> Thanks for the quick reply! Yes, that would be wonderful.
> >>
> >> I want to interface to a library that has its own garbage collection;
> that
> >> library walks the stack to find potential objects that must be kept
> alive.
> >> Therefore, all calls to that library must be done in the form
> >>   library_global_StackBottomBags = __builtin_frame_address(0);
> >>   library_function(...)
> >
> >
> > OK, this is a reasonable use case if the library requires this....
> > It's a weird API though.
> >
> > You can use llvm intrinsics to do that. This is basically how
> > `__builtin_frame_address` is implemented in clang.
> >
> > julia> function f()
> >            Base.llvmcall(("""
> >                           declare i8 *@llvm.frameaddress(i32)
> >                           """, """
> >                           %1 = call i8 *@llvm.frameaddress(i32 0)
> >                           ret i8 *%1
> >                           """), Ptr{UInt8}, Tuple{})
> >        end
> > f (generic function with 1 method)
> >
> > julia> f()
> > Ptr{UInt8} @0x00007ffecb9a3130
> >
>
> Note that this is 0.5 only.
>
> You can hack sth to work on 0.4
>
> ```
> julia> f(p) = p
> f (generic function with 1 method)
>
> julia> g() = ccall(cfunction(f, Ptr{Void}, Tuple{Ptr{Void}}),
> Ptr{Void}, (Ptr{Int},), &1)
> g (generic function with 1 method)
>
> julia> g()
> Ptr{Void} @0x00007ffe4ec24920
> ```
>
> >
> >
> >>
> >>
> >> On Thursday, 31 March 2016 00:25:13 UTC+2, Yichao Yu wrote:
> >>>
> >>>
> >>> On Mar 30, 2016 6:22 PM, "Yichao Yu" <yyc...@gmail.com> wrote:
> >>> >
> >>> >
> >>> > On Mar 30, 2016 6:21 PM, "Laurent Bartholdi" <laurent....@gmail.com>
> >>> > wrote:
> >>> > >
> >>> > > Hi,
> >>> > > Is there a way to obtain the address of the current stack frame
> (the
> >>> > > ebp register on x86 processors)?
> >>> > >
> >>> > > In GCC, there's the bultin primitive __builtin_frame_address() that
> >>> > > does precisely that.
> >>> >
> >>> > Why do you want this?
> >>> >
> >>>
> >>> It's possible but should not be done in general.
> >>>
> >>> > >
> >>> > > Many thanks in advance, Laurent
>
-- 
Laurent Bartholdi
DMA, École Normale Supérieure, 45 rue d'Ulm, 75005 Paris. +33 14432 2060
Mathematisches Institut, Universität Göttingen, Bunsenstrasse 3-5, D-37073
Göttingen. +49 551 39 7826

Reply via email to