xref: /netbsd-src/sys/external/bsd/compiler_rt/dist/lib/profile/InstrProfilingUtil.c (revision ef84fd3bd8895f4e6be1e38baf19e6dc3255bc64)
1*ef84fd3bSjoerg /*===- InstrProfilingUtil.c - Support library for PGO instrumentation -----===*\
2*ef84fd3bSjoerg |*
3*ef84fd3bSjoerg |*                     The LLVM Compiler Infrastructure
4*ef84fd3bSjoerg |*
5*ef84fd3bSjoerg |* This file is distributed under the University of Illinois Open Source
6*ef84fd3bSjoerg |* License. See LICENSE.TXT for details.
7*ef84fd3bSjoerg |*
8*ef84fd3bSjoerg \*===----------------------------------------------------------------------===*/
9*ef84fd3bSjoerg 
10*ef84fd3bSjoerg #include "InstrProfilingUtil.h"
11*ef84fd3bSjoerg #include "InstrProfiling.h"
12*ef84fd3bSjoerg 
13*ef84fd3bSjoerg #ifdef _WIN32
14*ef84fd3bSjoerg #include <direct.h>
15*ef84fd3bSjoerg #elif I386_FREEBSD
16*ef84fd3bSjoerg int mkdir(const char*, unsigned short);
17*ef84fd3bSjoerg #else
18*ef84fd3bSjoerg #include <sys/stat.h>
19*ef84fd3bSjoerg #include <sys/types.h>
20*ef84fd3bSjoerg #endif
21*ef84fd3bSjoerg 
22*ef84fd3bSjoerg COMPILER_RT_VISIBILITY
__llvm_profile_recursive_mkdir(char * path)23*ef84fd3bSjoerg void __llvm_profile_recursive_mkdir(char *path) {
24*ef84fd3bSjoerg   int i;
25*ef84fd3bSjoerg 
26*ef84fd3bSjoerg   for (i = 1; path[i] != '\0'; ++i) {
27*ef84fd3bSjoerg     if (path[i] != '/') continue;
28*ef84fd3bSjoerg     path[i] = '\0';
29*ef84fd3bSjoerg #ifdef _WIN32
30*ef84fd3bSjoerg     _mkdir(path);
31*ef84fd3bSjoerg #else
32*ef84fd3bSjoerg     mkdir(path, 0755);  /* Some of these will fail, ignore it. */
33*ef84fd3bSjoerg #endif
34*ef84fd3bSjoerg     path[i] = '/';
35*ef84fd3bSjoerg   }
36*ef84fd3bSjoerg }
37