Loading...
other-tools/dyld_usage.cpp dyld-1340 dyld-1162
--- dyld/dyld-1340/other-tools/dyld_usage.cpp
+++ dyld/dyld-1162/other-tools/dyld_usage.cpp
@@ -156,7 +156,9 @@
                 case DBG_DYLD_TIMING_DLOPEN_PREFLIGHT: dequeueEvent<dlopen_preflight>(event, [&](dlopen_preflight* endEvent){
                     endEvent->result = event->arg2;
                 }); break;
-                case DBG_DYLD_TIMING_LAUNCH_EXECUTABLE: dequeueEvent<app_launch>(event, [&](app_launch* endEvent) {}); break;
+                case DBG_DYLD_TIMING_LAUNCH_EXECUTABLE: dequeueEvent<app_launch>(event, [&](app_launch* endEvent){
+                    endEvent->launchMode = event->arg4;
+                }); break;
                 case DBG_DYLD_TIMING_DLSYM: dequeueEvent<dlsym>(event, [&](dlsym* endEvent){
                     endEvent->result = event->arg2;
                 }); break;
@@ -326,7 +328,7 @@
         } else if (auto validateClosure = dynamic_cast<validate_closure *>(node.get())) {
             line << "validate closure";
         } else if (auto launchNode = dynamic_cast<app_launch *>(node.get())) {
-            line << "app launch " + launchNode->flagsString() + "-> 0x" << std::hex << launchNode->address;
+            line << "app launch (dyld" << std::dec << launchNode->launchMode << ") -> 0x" << std::hex << launchNode->address;
         } else if (auto initNode  = dynamic_cast<static_init *>(node.get())) {
             line << "run static initializer 0x" << std::hex << initNode->funcAddress;
         } else if (auto fixupNode  = dynamic_cast<apply_fixups *>(node.get())) {
@@ -391,7 +393,7 @@
         } else if (auto launchNode = dynamic_cast<app_launch *>(node.get())) {
             sstr << std::hex;
             sstr << "{\"type\":\"app_launch\",\"address\":\"0x";
-            sstr << launchNode->address << "\",\"mode\":" << launchNode->flags << "";
+            sstr << launchNode->address << "\",\"mode\":" << launchNode->launchMode << "";
         } else if (auto initNode  = dynamic_cast<static_init *>(node.get())) {
             sstr << std::hex;
             sstr << "{\"type\":\"static_init\",\"image_address\":\"0x"  << initNode->libraryAddress;
@@ -579,32 +581,10 @@
     };
 
     struct app_launch : event_pair {
-        app_launch(ktrace_event_t E) : event_pair(E), address(E->arg2), flags(E->arg3) {}
+        app_launch(ktrace_event_t E) : event_pair(E), address(E->arg2) {}
         uint64_t address;
-        uint64_t flags;
+        uint64_t launchMode;
         std::vector<event_pair *> _children;
-
-        std::string flagsString() const {
-            if ( flags == (uint64_t)dyld3::DyldLaunchExecutableFlags::None )
-                return "";
-            std::string v;
-            if ( flags & (uint64_t)dyld3::DyldLaunchExecutableFlags::HasTPROHeap ) {
-                if ( !v.empty() )
-                    v += ", ";
-                v += "tpro-heap";
-            }
-            if ( flags & (uint64_t)dyld3::DyldLaunchExecutableFlags::HasTPRODataConst ) {
-                if ( !v.empty() )
-                    v += ", ";
-                v += "tpro-data-const";
-            }
-            if ( flags & (uint64_t)dyld3::DyldLaunchExecutableFlags::HasTPROStacks ) {
-                if ( !v.empty() )
-                    v += ", ";
-                v += "tpro-stacks";
-            }
-            return "(" + v + ") ";
-        }
     };
 
     struct static_init : event_pair {