Subzero: Add the "llvm2ice -ffunction-sections" argument.

The purpose is to enable bisection debugging of Subzero-translated functions, using objcopy to selectively splice functions from llc and Subzero into the binary.

Note that llvm-mc claims to take this argument, but actually does nothing with it, so we need to implement it in Subzero.

Also moves the ClFlags object into the GlobalContext so everyone can access it.

BUG= none
R=wala@chromium.org

Review URL: https://codereview.chromium.org/455633002
diff --git a/src/IceTranslator.cpp b/src/IceTranslator.cpp
index 4b84688..59403d2 100644
--- a/src/IceTranslator.cpp
+++ b/src/IceTranslator.cpp
@@ -26,14 +26,14 @@
 
 void Translator::translateFcn(Ice::Cfg *Fcn) {
   Func.reset(Fcn);
-  if (Flags.DisableInternal)
+  if (Ctx->getFlags().DisableInternal)
     Func->setInternal(false);
-  if (Flags.DisableTranslation) {
+  if (Ctx->getFlags().DisableTranslation) {
     Func->dump();
   } else {
     Ice::Timer TTranslate;
     Func->translate();
-    if (Flags.SubzeroTimingEnabled) {
+    if (Ctx->getFlags().SubzeroTimingEnabled) {
       std::cerr << "[Subzero timing] Translate function "
                 << Func->getFunctionName() << ": " << TTranslate.getElapsedSec()
                 << " sec\n";
@@ -45,7 +45,7 @@
 
     Ice::Timer TEmit;
     Func->emit();
-    if (Flags.SubzeroTimingEnabled) {
+    if (Ctx->getFlags().SubzeroTimingEnabled) {
       std::cerr << "[Subzero timing] Emit function " << Func->getFunctionName()
                 << ": " << TEmit.getElapsedSec() << " sec\n";
     }
@@ -53,6 +53,6 @@
 }
 
 void Translator::emitConstants() {
-  if (!Flags.DisableTranslation && Func)
+  if (!Ctx->getFlags().DisableTranslation && Func)
     Func->getTarget()->emitConstants();
 }