mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
77f642517b
Using `Store_field` to initialize fields of blocks allocated with `caml_alloc_small` is unsafe. The fields of blocks allocated by `caml_alloc_small` are not initialized, and `Store_field` calls the OCaml GC write barrier. If the uninitialized value of a field happens to point into the OCaml heap, then it will e.g. be added to a conflict set or followed and have what the GC thinks are color bits changed. This leads to crashes or memory corruption. This diff fixes a few (I think all) instances of this problem. Some of these are creating option values. OCaml 4.12 has a dedicated `caml_alloc_some` function for this, so this diff adds a compatible function with a version check to avoid conflict. With that, macros for accessing option values are also added. Differential Revision: https://reviews.llvm.org/D99471
7 lines
163 B
CMake
7 lines
163 B
CMake
add_ocaml_library(llvm_target
|
|
OCAML llvm_target
|
|
OCAMLDEP llvm
|
|
C target_ocaml
|
|
CFLAGS "-I${CMAKE_CURRENT_SOURCE_DIR}/../llvm"
|
|
LLVM Target)
|