authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-19 10:47:17-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-19 10:47:17-04:00
loga9f0681f85679b602cd5f322f6b9b4b2d18a5c4a
treef3db83511319fb9cce081c5dda980ef01271b875
parentfd3a41dadc92e7b69b409af5f747004996465032

prevent non-export symbols from clobbering builtins

closes #1263

1 files changed, 31 insertions(+), 0 deletions(-)

src/codegen.cpp+31
......@@ -60,6 +60,33 @@ PackageTableEntry *new_anonymous_package(void) {
6060 return new_package("", "");
6161}
6262
63static const char *symbols_that_llvm_depends_on[] = {
64 "memcpy",
65 "memset",
66 "sqrt",
67 "powi",
68 "sin",
69 "cos",
70 "pow",
71 "exp",
72 "exp2",
73 "log",
74 "log10",
75 "log2",
76 "fma",
77 "fabs",
78 "minnum",
79 "maxnum",
80 "copysign",
81 "floor",
82 "ceil",
83 "trunc",
84 "rint",
85 "nearbyint",
86 "round",
87 // TODO probably all of compiler-rt needs to go here
88};
89
6390CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out_type, BuildMode build_mode,
6491 Buf *zig_lib_dir)
6592{
......@@ -94,6 +121,10 @@ CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out
94121 g->want_h_file = (out_type == OutTypeObj || out_type == OutTypeLib);
95122 buf_resize(&g->global_asm, 0);
96123
124 for (size_t i = 0; i < array_length(symbols_that_llvm_depends_on); i += 1) {
125 g->external_prototypes.put(buf_create_from_str(symbols_that_llvm_depends_on[i]), nullptr);
126 }
127
97128 if (root_src_path) {
98129 Buf *src_basename = buf_alloc();
99130 Buf *src_dir = buf_alloc();