-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix segfaults with LLVM >= 13.0.0 #10
base: master
Are you sure you want to change the base?
Conversation
(* I was able to get it not segfault for some of the tests by replacing all | ||
uses of Llvm.global_context into Llvm.create_context, but it would | ||
duplicate the intrinsics (e.g. @llvm.stacksave & @llvm.stacksave.renamed) | ||
and fail at link time if they were used. *) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jberdine Do you have any idea what's going by any chance?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very strange indeed! All the things I work with that get any testing are still on llvm 12, so it could be just something waiting to go wrong. @vaivaswatha does this ring any bells for you?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very strange indeed! All the things I work with that get any testing are still on llvm 12, so it could be just something waiting to go wrong. @vaivaswatha does this ring any bells for you?
Nope, no idea. Weird though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I’ll try to port the llvm binding to OCaml 5.0. This requires removing all the raw pointers returned to the ocaml world, I’m hoping the problem comes from some place when the binding uses raw pointers where it isn’t safe to do so in OCaml 4
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have code using llvm where I have to make sure that there are no dead ocaml values with pointers into llvm-allocated memory before calling llvm functions that deallocate memory. What can happen is that the ocaml heap can grow into the memory freed by llvm, and the dead ocaml values with naked pointers end up pointing into the heap, causing the GC to follow them and crash.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mmh, I’m not sure if it’s related. Unless I’m missing something, both should be equivalent as far as the OCaml runtime is concerned.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, but experimenting I noticed that with llvm 12 one can get away with calling dispose_context
on global_context
while with llvm >= 13 this crashes. Since you could avoid the crashes by using create_context
instead, this makes me wonder if somewhere some code is manipulating the context in a way that is not happy with the new way the global context is allocated. But as I said, it's definitely a stretch.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was about to test your theory but i realized this change was not made in LLVM 13 but in LLVM 15, so this is for sure unrelated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm, ok, sorry for the noise. I wonder what I actually did when testing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No worries at all. Thanks for looking into it <3
No description provided.