diff --git a/external/openglcts/modules/runner/glcTestRunner.cpp b/external/openglcts/modules/runner/glcTestRunner.cpp
index 0ad3c78..fd55b91 100644
--- a/external/openglcts/modules/runner/glcTestRunner.cpp
+++ b/external/openglcts/modules/runner/glcTestRunner.cpp
@@ -48,7 +48,7 @@
 public:
 	RunSession(tcu::Platform& platform, tcu::Archive& archive, const int numArgs, const char* const* args)
 		: m_cmdLine(numArgs, args)
-		, m_log(m_cmdLine.getLogFileName(), m_cmdLine.getLogFlags())
+		, m_log(m_cmdLine.getLogFileName(), (numArgs - 1), (char**)(args + 1), m_cmdLine.getLogFlags())
 		, m_app(platform, archive, m_log, m_cmdLine)
 	{
 	}
diff --git a/external/vulkancts/modules/vulkan/vktBuildPrograms.cpp b/external/vulkancts/modules/vulkan/vktBuildPrograms.cpp
index db95b77..a35bf44 100644
--- a/external/vulkancts/modules/vulkan/vktBuildPrograms.cpp
+++ b/external/vulkancts/modules/vulkan/vktBuildPrograms.cpp
@@ -667,7 +667,7 @@
 	try
 	{
 		tcu::DirArchive			archive					(".");
-		tcu::TestLog			log						(deqpCmdLine.getLogFileName(), deqpCmdLine.getLogFlags());
+		tcu::TestLog			log					(deqpCmdLine.getLogFileName(), (argc - 1), (char **)(argv + 1), deqpCmdLine.getLogFlags());
 		tcu::Platform			platform;
 		tcu::TestContext		testCtx					(platform, archive, log, deqpCmdLine, DE_NULL);
 		vk::SpirvVersion		baselineSpirvVersion	= vk::getBaselineSpirvVersion(cmdLine.getOption<opt::VulkanVersion>());
diff --git a/framework/common/tcuTestLog.cpp b/framework/common/tcuTestLog.cpp
index 277d896..8b9fc2d 100644
--- a/framework/common/tcuTestLog.cpp
+++ b/framework/common/tcuTestLog.cpp
@@ -21,6 +21,7 @@
  * \brief Test Log C++ Wrapper.
  *//*--------------------------------------------------------------------*/
 
+#include "deCommandLine.h"
 #include "tcuTestLog.hpp"
 #include "tcuTextureUtil.hpp"
 #include "tcuSurface.hpp"
@@ -187,6 +188,20 @@
 		throw ResourceError(std::string("Failed to open test log file '") + fileName + "'");
 }
 
+TestLog::TestLog (const char* fileName, const std::string& cmdLine, deUint32 flags)
+{
+
+	deCommandLine* parsedCmdLine = deCommandLine_parse(cmdLine.c_str());
+	if (!parsedCmdLine)
+		throw std::bad_alloc();
+
+	m_log = qpTestLog_createFileLog(fileName, parsedCmdLine->numArgs, parsedCmdLine->args, flags);
+	deCommandLine_destroy(parsedCmdLine);
+
+	if (!m_log)
+		throw ResourceError(std::string("Failed to open test log file '") + fileName + "'");
+}
+
 TestLog::~TestLog (void)
 {
 	qpTestLog_destroy(m_log);
diff --git a/framework/common/tcuTestLog.hpp b/framework/common/tcuTestLog.hpp
index 6ba0524..8323a8b 100644
--- a/framework/common/tcuTestLog.hpp
+++ b/framework/common/tcuTestLog.hpp
@@ -103,6 +103,7 @@
 	typedef LogNumber<deInt64>		Integer;
 
 	explicit			TestLog					(const char* fileName, int argc = 0, char** argv = DE_NULL, deUint32 flags = 0);
+	explicit			TestLog					(const char* fileName, const std::string& cmdLine, deUint32 flags = 0);
 						~TestLog				(void);
 
 	MessageBuilder		operator<<				(const BeginMessageToken&);
diff --git a/framework/platform/android/tcuAndroidTestActivity.cpp b/framework/platform/android/tcuAndroidTestActivity.cpp
index b8cff3c..cfe53cb 100644
--- a/framework/platform/android/tcuAndroidTestActivity.cpp
+++ b/framework/platform/android/tcuAndroidTestActivity.cpp
@@ -38,12 +38,12 @@
 
 // TestThread
 
-TestThread::TestThread (NativeActivity& activity, const CommandLine& cmdLine)
+TestThread::TestThread (NativeActivity& activity, const std::string& cmdLineString, const CommandLine& cmdLine)
 	: RenderThread	(activity)
 	, m_cmdLine		(cmdLine)
 	, m_platform	(activity)
 	, m_archive		(activity.getNativeActivity()->assetManager)
-	, m_log			(m_cmdLine.getLogFileName(), m_cmdLine.getLogFlags())
+	, m_log			(m_cmdLine.getLogFileName(), cmdLineString, m_cmdLine.getLogFlags())
 	, m_app			(m_platform, m_archive, m_log, m_cmdLine)
 	, m_finished	(false)
 {
@@ -87,7 +87,7 @@
 TestActivity::TestActivity (ANativeActivity* activity)
 	: RenderActivity	(activity)
 	, m_cmdLine			(getIntentStringExtra(activity, "cmdLine"))
-	, m_testThread		(*this, m_cmdLine)
+	, m_testThread		(*this, getIntentStringExtra(activity, "cmdLine"), m_cmdLine)
 	, m_started			(false)
 {
 	// Set initial orientation.
diff --git a/framework/platform/android/tcuAndroidTestActivity.hpp b/framework/platform/android/tcuAndroidTestActivity.hpp
index 58c28e6..2962c18 100644
--- a/framework/platform/android/tcuAndroidTestActivity.hpp
+++ b/framework/platform/android/tcuAndroidTestActivity.hpp
@@ -39,7 +39,7 @@
 class TestThread : public RenderThread
 {
 public:
-							TestThread					(NativeActivity& activity, const CommandLine& cmdLine);
+							TestThread					(NativeActivity& activity, const std::string& cmdLineString, const CommandLine& cmdLine);
 							~TestThread					(void);
 
 	void					run							(void);
