summaryrefslogtreecommitdiff
path: root/lib/profile
diff options
context:
space:
mode:
authorSean Silva <chisophugis@gmail.com>2016-03-02 22:05:46 +0000
committerSean Silva <chisophugis@gmail.com>2016-03-02 22:05:46 +0000
commit353787fb1792fbb4f69d20943eb9c3a8cd319c4e (patch)
tree4e3a3483e151a0d9461f37bba71d1b85a21f3fb0 /lib/profile
parent0b985c5890dc2222ce385440de67fd14e1a7cd34 (diff)
Add some minimal portability code paths for PS4.
Summary: Hi David, SCE folks, What is implemented in this patch is enough for the upstream libprofile to work for PGO with the PS4 game codebase I tested ("game7" for you SCE folks; this is with a standalone build of compiler-rt). The first change, which is simple, is to stub out gethostname. PS4 doesn't have a simple analog for this that doesn't bring in extra OS libraries, so for now we do not support `%h` expansion. This is consistent with internal B#136272. The second change implies future work, but is a simple change at present. PS4 does not have `getenv`, so for now we will introduce a shim. This obviously makes it impossible for many of the tests to be run since they require setting `LLVM_PROFILE_FILE=`. I see two paths forward: 1. In the tests we are already wrapping execution with `%run` and so by setting a PS4-specific expansion for `%run` we can pass the information in another way We can adapt the getenv shim as appropriate. We will need to experiment with this internally. Maggie, Phillip, Filipe? Any ideas? Maybe ping me internally since we may need to get into some PS4 vagaries. I'm thinking a fake getenv library that uses some side channel for communication. 2. Another possibility which is more verbose is to use a separate clang invocation with `-profile-generate=<filename>` to set the filename in each test. This might require redundant clang invocations though which may be undesirable for upstream. David, thoughts? Also, this is a fairly libprofile-specific workaround, so it e.g. doesn't help Filipe's ASan work. Overall, this approach sounds like a bit of a hack to me. Small detail: InstrProfilingPort.h seems like the natural place for the getenv shim, but GCDAProfiling.c needs it as well. InstrProfilingUtil.h is currently the only header common between InstrProfilingFile.c and GCDAProfiling.c. I can move the shim to InstrProfilingPort.h and add an include to GCDAProfiling.c as per your preference David. Reviewers: davidxl, MaggieYi, phillip.power, filcab Subscribers: simon.f.whittaker, slingn, probinson, llvm-commits Differential Revision: http://reviews.llvm.org/D17676 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@262527 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/profile')
-rw-r--r--lib/profile/InstrProfilingPort.h2
-rw-r--r--lib/profile/InstrProfilingUtil.h7
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/profile/InstrProfilingPort.h b/lib/profile/InstrProfilingPort.h
index a945f97e6..d6e063e57 100644
--- a/lib/profile/InstrProfilingPort.h
+++ b/lib/profile/InstrProfilingPort.h
@@ -25,6 +25,8 @@
#define COMPILER_RT_MAX_HOSTLEN 128
#ifdef _MSC_VER
#define COMPILER_RT_GETHOSTNAME(Name, Len) gethostname(Name, Len)
+#elif defined(__PS4__)
+#define COMPILER_RT_GETHOSTNAME(Name, Len) (-1)
#else
#define COMPILER_RT_GETHOSTNAME(Name, Len) GetHostName(Name, Len)
#define COMPILER_RT_HAS_UNAME 1
diff --git a/lib/profile/InstrProfilingUtil.h b/lib/profile/InstrProfilingUtil.h
index 756b18e7c..77941e0b4 100644
--- a/lib/profile/InstrProfilingUtil.h
+++ b/lib/profile/InstrProfilingUtil.h
@@ -10,7 +10,14 @@
#ifndef PROFILE_INSTRPROFILINGUTIL_H
#define PROFILE_INSTRPROFILINGUTIL_H
+#include <stddef.h>
+
/*! \brief Create a directory tree. */
void __llvm_profile_recursive_mkdir(char *Pathname);
+/* PS4 doesn't have getenv. Define a shim. */
+#if __PS4__
+static inline char *getenv(const char *name) { return NULL; }
+#endif /* #if __PS4__ */
+
#endif /* PROFILE_INSTRPROFILINGUTIL_H */