From a2583fc2739111e240a78762dc3464440c29c145 Mon Sep 17 00:00:00 2001
From: Kumar Harsh <harkumar@codeaurora.org>
Date: Mon, 17 Sep 2018 13:56:21 +0530
Subject: [PATCH] ldrp_V2 : Support increased length in Linux banner string

This patch fixes the need for a hard coded value
to specify upper limit on length of the Linux Banner.

get_version() inside ramdump.py has been renamed to
get_matched_version() to reflect the true nature of
the function.

Added a variable banner_len in get_matched_version()
which is the length of linux_banner returned by
gdbmi.get_value_of_string('linux_banner').
This variable is further passed to read_cstring()
function to specify the max limit of characters to
be read. We are dynamically calculating the length
using gdb to read linux banner.

Change-Id: I571882a5999c26ccd8accd90b26d0149c839633b
Signed-off-by: Kumar Harsh <harkumar@codeaurora.org>
---
 linux-ramdump-parser-v2/gdbmi.py   |  2 +-
 linux-ramdump-parser-v2/ramdump.py | 15 ++++++++-------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/linux-ramdump-parser-v2/gdbmi.py b/linux-ramdump-parser-v2/gdbmi.py
index 4e06b84..a40d2b6 100644
--- a/linux-ramdump-parser-v2/gdbmi.py
+++ b/linux-ramdump-parser-v2/gdbmi.py
@@ -294,7 +294,7 @@ class GdbMI(object):
 
     def get_value_of_string(self, symbol):
         """Returns the value of a symbol (as a string)"""
-        self._run("set print elements 256")
+        self._run("set print elements 0")
         cmd = 'print /s {0}'.format(symbol)
         result = self._run(cmd)
         if len(result.lines) == 0:
diff --git a/linux-ramdump-parser-v2/ramdump.py b/linux-ramdump-parser-v2/ramdump.py
index 8ad0889..3e4cae9 100644
--- a/linux-ramdump-parser-v2/ramdump.py
+++ b/linux-ramdump-parser-v2/ramdump.py
@@ -701,7 +701,7 @@ class RamDump():
                 '!!! This is a BUG in the parser and should be reported.')
             sys.exit(1)
 
-        if not self.get_version():
+        if not self.get_matched_version():
             print_out_str('!!! Could not get the Linux version!')
             print_out_str(
                 '!!! Your vmlinux is probably wrong for these dumps')
@@ -814,11 +814,16 @@ class RamDump():
                 else:
                     return addr - (self.kimage_voffset)
 
-    def get_version(self):
+    def get_matched_version(self):
         banner_addr = self.address_of('linux_banner')
         if banner_addr is not None:
             banner_addr = self.kernel_virt_to_phys(banner_addr)
-            b = self.read_cstring(banner_addr, 256, False)
+            vm_v = self.gdbmi.get_value_of_string('linux_banner')
+            if vm_v is None:
+                print_out_str('!!! Could not read banner address from vmlinux!')
+                return False
+            banner_len = len(vm_v)
+            b = self.read_cstring(banner_addr, banner_len, False)
             if b is None:
                 print_out_str('!!! Could not read banner address!')
                 return False
@@ -835,10 +840,6 @@ class RamDump():
 
             print_out_str('Linux Banner: ' + b.rstrip())
             print_out_str('version = {0}'.format(self.version))
-            vm_v = self.gdbmi.get_value_of_string('linux_banner')
-            if vm_v is None:
-                print_out_str('!!! Could not read banner address from vmlinux!')
-                return False
             if str(vm_v) in str(b):
                 print_out_str("Linux banner from vmlinux = %s" % vm_v)
                 print_out_str("Linux banner from dump = %s" % b)
-- 
GitLab