13d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar/*===- InstrProfilingUtil.c - Support library for PGO instrumentation -----===*\
23d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar|*
33d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar|*                     The LLVM Compiler Infrastructure
43d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar|*
53d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar|* This file is distributed under the University of Illinois Open Source
63d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar|* License. See LICENSE.TXT for details.
73d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar|*
83d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar\*===----------------------------------------------------------------------===*/
93d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar
103d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#include "InstrProfilingUtil.h"
113d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#include "InstrProfiling.h"
123d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar
133d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#ifdef _WIN32
143d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#include <direct.h>
153d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#elif I386_FREEBSD
163d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainarint mkdir(const char*, unsigned short);
173d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#else
183d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#include <sys/stat.h>
193d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#include <sys/types.h>
203d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#endif
213d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar
223d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga NainarCOMPILER_RT_VISIBILITY
233d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainarvoid __llvm_profile_recursive_mkdir(char *path) {
243d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar  int i;
253d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar
263d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar  for (i = 1; path[i] != '\0'; ++i) {
273d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar    if (path[i] != '/') continue;
283d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar    path[i] = '\0';
293d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#ifdef _WIN32
303d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar    _mkdir(path);
313d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#else
323d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar    mkdir(path, 0755);  /* Some of these will fail, ignore it. */
333d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar#endif
343d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar    path[i] = '/';
353d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar  }
363d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar}
37