Commit 816fd68f by Jim Stichnoth

Subzero: Set the correct target arch in the browser hookup.

The original implementation hard-coded the target to x86-32. The new implementation mirrors pnacl-llc by probing the architecture it is running on. Continues the plumbing work in https://codereview.chromium.org/1698523003/ , toward the goal of enabling sandboxed translator tests for x86-64, particularly on the spec bots. BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4077 R=jpp@chromium.org Review URL: https://codereview.chromium.org/1696123003 .
parent 5fa0a5f7
...@@ -17,6 +17,13 @@ ...@@ -17,6 +17,13 @@
#if PNACL_BROWSER_TRANSLATOR #if PNACL_BROWSER_TRANSLATOR
#include "IceBrowserCompileServer.h" #include "IceBrowserCompileServer.h"
// Headers which are not properly part of the SDK are included by their path in
// the NaCl tree.
#ifdef __pnacl__
#include "native_client/src/untrusted/nacl/pnacl.h"
#endif // __pnacl__
#include "llvm/Support/QueueStreamer.h" #include "llvm/Support/QueueStreamer.h"
#include <cstring> #include <cstring>
...@@ -116,6 +123,35 @@ void fatalErrorHandler(void *UserData, const std::string &Reason, ...@@ -116,6 +123,35 @@ void fatalErrorHandler(void *UserData, const std::string &Reason,
pthread_exit(0); pthread_exit(0);
} }
/// Adapted from pnacl-llc's AddDefaultCPU() in srpc_main.cpp.
TargetArch getTargetArch() {
#if defined(__pnacl__)
switch (__builtin_nacl_target_arch()) {
case PnaclTargetArchitectureX86_32:
case PnaclTargetArchitectureX86_32_NonSFI:
return Target_X8632;
case PnaclTargetArchitectureX86_64:
return Target_X8664;
case PnaclTargetArchitectureARM_32:
case PnaclTargetArchitectureARM_32_NonSFI:
return Target_ARM32;
case PnaclTargetArchitectureMips_32:
return Target_MIPS32;
default:
llvm::report_fatal_error("no target architecture match.");
}
#elif defined(__i386__)
return Target_X8632;
#elif defined(__x86_64__)
return Target_X8664;
#elif defined(__arm__)
return Target_ARM32;
#else
// TODO(stichnot): Add mips.
#error "Unknown architecture"
#endif
}
} // end of anonymous namespace } // end of anonymous namespace
BrowserCompileServer::~BrowserCompileServer() = default; BrowserCompileServer::~BrowserCompileServer() = default;
...@@ -135,8 +171,7 @@ void BrowserCompileServer::getParsedFlags(uint32_t NumThreads, int argc, ...@@ -135,8 +171,7 @@ void BrowserCompileServer::getParsedFlags(uint32_t NumThreads, int argc,
Flags.setNumTranslationThreads(NumThreads); Flags.setNumTranslationThreads(NumThreads);
Flags.setUseSandboxing(true); Flags.setUseSandboxing(true);
Flags.setOutFileType(FT_Elf); Flags.setOutFileType(FT_Elf);
// TODO(jvoung): allow setting different target arches. Flags.setTargetArch(getTargetArch());
Flags.setTargetArch(Target_X8632);
ExtraFlags.setBuildOnRead(true); ExtraFlags.setBuildOnRead(true);
ExtraFlags.setInputFileFormat(llvm::PNaClFormat); ExtraFlags.setInputFileFormat(llvm::PNaClFormat);
} }
......
...@@ -154,6 +154,11 @@ void splitToClassAndName(const IceString &RegName, IceString *SplitRegClass, ...@@ -154,6 +154,11 @@ void splitToClassAndName(const IceString &RegName, IceString *SplitRegClass,
} }
} }
LLVM_ATTRIBUTE_NORETURN void badTargetFatalError(TargetArch Target) {
llvm::report_fatal_error("Unsupported target: " +
std::string(targetArchString(Target)));
}
} // end of anonymous namespace } // end of anonymous namespace
void TargetLowering::filterTypeToRegisterSet( void TargetLowering::filterTypeToRegisterSet(
...@@ -243,7 +248,7 @@ std::unique_ptr<TargetLowering> ...@@ -243,7 +248,7 @@ std::unique_ptr<TargetLowering>
TargetLowering::createLowering(TargetArch Target, Cfg *Func) { TargetLowering::createLowering(TargetArch Target, Cfg *Func) {
switch (Target) { switch (Target) {
default: default:
llvm::report_fatal_error("Unsupported target"); badTargetFatalError(Target);
#define SUBZERO_TARGET(X) \ #define SUBZERO_TARGET(X) \
case Target_##X: \ case Target_##X: \
return ::X::createTargetLowering(Func); return ::X::createTargetLowering(Func);
...@@ -257,7 +262,7 @@ void TargetLowering::staticInit(GlobalContext *Ctx) { ...@@ -257,7 +262,7 @@ void TargetLowering::staticInit(GlobalContext *Ctx) {
// Call the specified target's static initializer. // Call the specified target's static initializer.
switch (Target) { switch (Target) {
default: default:
llvm::report_fatal_error("Unsupported target"); badTargetFatalError(Target);
#define SUBZERO_TARGET(X) \ #define SUBZERO_TARGET(X) \
case Target_##X: { \ case Target_##X: { \
static bool InitGuard##X = false; \ static bool InitGuard##X = false; \
...@@ -742,7 +747,7 @@ TargetDataLowering::createLowering(GlobalContext *Ctx) { ...@@ -742,7 +747,7 @@ TargetDataLowering::createLowering(GlobalContext *Ctx) {
TargetArch Target = Ctx->getFlags().getTargetArch(); TargetArch Target = Ctx->getFlags().getTargetArch();
switch (Target) { switch (Target) {
default: default:
llvm::report_fatal_error("Unsupported target"); badTargetFatalError(Target);
#define SUBZERO_TARGET(X) \ #define SUBZERO_TARGET(X) \
case Target_##X: \ case Target_##X: \
return ::X::createTargetDataLowering(Ctx); return ::X::createTargetDataLowering(Ctx);
...@@ -874,7 +879,7 @@ TargetHeaderLowering::createLowering(GlobalContext *Ctx) { ...@@ -874,7 +879,7 @@ TargetHeaderLowering::createLowering(GlobalContext *Ctx) {
TargetArch Target = Ctx->getFlags().getTargetArch(); TargetArch Target = Ctx->getFlags().getTargetArch();
switch (Target) { switch (Target) {
default: default:
llvm::report_fatal_error("Unsupported target"); badTargetFatalError(Target);
#define SUBZERO_TARGET(X) \ #define SUBZERO_TARGET(X) \
case Target_##X: \ case Target_##X: \
return ::X::createTargetHeaderLowering(Ctx); return ::X::createTargetHeaderLowering(Ctx);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment