[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6

MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF  modem version: NA

Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/tools/MemoryUtility/memquery.pl b/mcu/tools/MemoryUtility/memquery.pl
new file mode 100644
index 0000000..cb741ef
--- /dev/null
+++ b/mcu/tools/MemoryUtility/memquery.pl
@@ -0,0 +1,739 @@
+#!/usr/bin/perl
+#
+#  Copyright Statement:
+#  --------------------
+#  This software is protected by Copyright and the information contained
+#  herein is confidential. The software may not be copied and the information
+#  contained herein may not be used or disclosed except with the written
+#  permission of MediaTek Inc. (C) 2006
+#
+#  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+#  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+#  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+#  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+#  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+#  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+#  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+#  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+#  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+#  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+#  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+#  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+#
+#  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+#  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+#  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+#  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+#  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+#
+#  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+#  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+#  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+#  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+#  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+#
+#*****************************************************************************
+#*
+#* Filename:
+#* ---------
+#*   MemoryUtility/memquery.pl
+#*
+#* Description:
+#* ------------
+#*  This script should be used in build flow
+#*  This provides corresponding memory utility command and system call
+#*
+#* Author:
+#* -------
+#*   Carl Kao  (mtk08237)
+#*
+#****************************************************************************/
+use strict;
+BEGIN { push @INC, "./" , './tools/', './tools/MemoryUtility/', '../' }
+use CommonUtility;
+use File::Basename;
+use BasicMemInfoQuery;
+
+my $nVerion = "LR13_v0.02";
+             # LR13_v0.02 ,  20180423 , updated l2cachelockinfo
+             # LR13_v0.01 ,  20160906 , Removed SPRAM2 support
+             # LR12_v0.06 ,  20160303 , Memory Utility implementation for LR12
+             # LR12_v0.05 ,  20160125 , Memory Utility Refinement for LR12
+             # LR12_v0.04 ,  20160113 , memquery remove l1 core related feature
+             # LR12_v0.03 ,  20151215 , fix memory utility .map file parsing feature for LR12 (64bit address)
+             # LR12_v0.02 ,  20151102 , detectZI parsing rule change
+             # LR12_v0.01 ,  20151026 , add GrepSymbolByInputSection feature to memory utility
+             # u0.07 , 20151030 , Carl , Parsing ELF file instead of parsing BIN file since there is CCCI header in front of bin file
+             # u0.06 , 20150127 , Carl , Take bin file path from build flow (final solution)
+             # u0.05 , 20150127 , Carl , Fix GetBinFile for UMOLY TRUNK since the nameing rule is different (temp solution)
+             # u0.04 , 20150121 , Carl , Fix GetBinFile for 91
+             # u0.03 , 20150119 , Carl , Memory Utility Refinement
+             # u0.02 , 20150107 , Carl , refine for 91 image layout
+             # u0.01 , 
+
+
+#****************************************************************************
+# Inputs
+#****************************************************************************
+my $ARGV_FILE_PATH              = $ARGV[0]; #./build/MT6297_EVB/NLWCTG_SAP/tmp/~memquery.tmp 
+my $IMAGELAYOUT_PATH            = $ARGV[1]; # scatter file or linker script
+my $MAKE_FILE                   = $ARGV[2];
+my $LINKER_OUTPUT_PATH          = $ARGV[3]; # map
+my $LOG_FOLDER                  = $ARGV[4];
+my $LOG_PATH                    = $ARGV[4]."/memquery.log";
+my $INFOMAKE_PATH               = $ARGV[5];
+my $BIN_FILE                    = $ARGV[6];
+my $SYM_FILE                    = $LINKER_OUTPUT_PATH;
+$SYM_FILE  =~ s/\.map$/\.sym/;
+if(!-f $SYM_FILE)
+{
+    print "\n[memquery][Note]$SYM_FILE doesn't exist!\n";
+    my $file = basename($SYM_FILE);
+    my $dirname  = dirname($SYM_FILE);
+    $SYM_FILE = $dirname."\/dummy_$file";
+    print "Use $SYM_FILE instead of it.\n";
+}
+
+#****************************************************************************
+# Global variable
+#****************************************************************************
+my @Supported_Cmd = qw(-h help --help 
+                      # basic comand
+                      symin objin libinfo objinfo discard 
+                      compareobj comparelib comparediscard 
+                      diff2symin diffsymin 
+                      basicinfo chkmemusage detectZI 
+                      symbolinfo sdatainfo  l2cachelockinfo
+                      topsizeobj
+                      syminobj syminlib symthreshold fillinfo
+                      # special command 
+                      tcmmargin     rammargin       l2srammargin    sprammargin 
+                      objinspram0   objinspram1     objinspramall   objinl2sram objintcm 
+                      syminspram0   syminspram1     syminspramall   syminl2sram symintcm 
+                      comparespram0 comparespram1   comparespramall comparetcm);  # no comparel2sram
+my $g_bToLog = 0;
+#****************************************************************************
+# MainFlow
+#****************************************************************************
+unlink $LOG_PATH if(-e $LOG_PATH);
+PrintLog("Command: $0 $ARGV[0] $ARGV[1] $ARGV[2] $ARGV[3] $ARGV[4] $ARGV[5] $ARGV[6] \n\n");
+my $arg_aref = ParseARGV($ARGV_FILE_PATH);
+DispatchCommand($arg_aref, \@Supported_Cmd, $IMAGELAYOUT_PATH, $MAKE_FILE, 
+                $LINKER_OUTPUT_PATH, $SYM_FILE, $LOG_FOLDER, $BIN_FILE);
+
+#****************************************************************************
+# 0 >>> exit - no error: 0, error code: > 0
+#****************************************************************************
+exit 0;
+
+#****************************************************************************
+# subroutines
+#****************************************************************************
+sub DispatchCommand
+{
+    my ($arg_aref, $Supported_Cmd_aref,  
+         $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    my $str1stCmd = $arg_aref->[0];
+    $g_bToLog = 1 if (grep {$_ =~/log/i} @$arg_aref);
+    my $bRunCommand = 0;
+    foreach my $cmd (@$Supported_Cmd_aref)
+    {
+        if($str1stCmd =~ /^$cmd$/i)
+        {
+            $cmd = "help" if($cmd eq "-h" or $cmd eq "--help");
+            shift(@$arg_aref);
+            no strict 'refs';
+            my $Func = "CMD_$cmd";
+            PrintToScreen("\n-----------------------------[Memory Query]---------------------------\n");
+            &{$Func}($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) if (exists &{$Func})
+                or mem_die("$Func() doesn't exists!", __FILE__, __LINE__);
+            $bRunCommand = 1;
+            last;
+        }    
+    }
+    if(!$bRunCommand)
+    {
+        print "$str1stCmd is not supported. Please refer to the following command option:\n";
+        Usage();
+    }
+}
+
+sub ParseARGV
+{
+    my ($strTmpFilePath) = @_;
+    Usage() if(!-e $strTmpFilePath);
+    my $strContent = CommonUtil::GetFileContent($strTmpFilePath);
+    my @arguments = split(/\s/, $strContent);
+    return \@arguments;
+}
+
+sub GetLogName
+{
+    my ($makefile, $log_folder, $strPostfix) = @_;
+    my $project = basename($makefile);
+    $project =~ s/\.mak|~//ig;
+    return "$log_folder/$project\_$strPostfix\.txt";
+}
+sub DecideOuput
+{
+    my ($makefile, $log_folder, $strPostfix) = @_;
+    my $Func = \&PrintToScreen;
+    if($g_bToLog)
+    {
+        $Func = \&PrintLog;
+        $LOG_PATH = GetLogName($makefile, $log_folder, $strPostfix);
+        unlink $LOG_PATH if(-e $LOG_PATH);
+    }
+    return $Func;
+}
+#****************************************************************************
+# command
+#****************************************************************************
+sub CMD_basicinfo
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    my $Func = DecideOuput($makefile, $log_folder, "BasicInfo");
+    no strict 'refs';
+    &BasicMemInfo::DispatchCommand("CMD_GetROMSize", $makefile, $lds_path, $map_path, $sym_path, $Func);
+    &{$Func}("-------------------------------------------------------------------\n");
+    &BasicMemInfo::DispatchCommand("CMD_GetRAMUsage", $makefile, $lds_path, $map_path, $sym_path, $Func);
+    &{$Func}("-------------------------------------------------------------------\n");
+    &BasicMemInfo::DispatchCommand("CMD_GetPhysicalRAMUsage", $makefile, $lds_path, $map_path, $sym_path, $Func);
+    &{$Func}("-------------------------------------------------------------------\n");
+    print "The output is generated under: $LOG_PATH\n" if($g_bToLog);
+}
+sub system_cmd
+{
+    my ($cmd, $strPostfix, $makefile, $log_folder) =@_;
+    my $path = GetLogName($makefile, $log_folder, $strPostfix);
+    my $output = "> \"$path\"" if($g_bToLog);
+    print "cmd=$cmd $output\n\n";
+    system("$cmd $output");
+    print "The output is generated under: $path\n" if($g_bToLog);
+}
+
+sub system_cmd_csv
+{
+    my ($cmd, $strPostfix, $makefile, $log_folder) =@_;
+    my $project = basename($makefile); 
+    $project =~ s/\.mak|~//ig; 
+    my $path =  "$log_folder/$project\_$strPostfix\.csv";
+    my $output = "> \"$path\"" if($g_bToLog);
+    print "cmd=$cmd $output\n\n";
+    system("$cmd $output");
+    print "The output is generated under: $path\n" if($g_bToLog);
+}
+
+sub CMD_tcmmargin
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    print"Redirect to memquery sprammargin!\n";
+    CMD_sprammargin($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder);
+}
+
+sub CMD_sprammargin
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    system_cmd("perl ./tools/MemoryUtility/TCMMargin.pl \"$makefile\" \"$lds_path\" \"$sym_path\"",
+               "SPRAMMargin", $makefile, $log_folder);
+}
+
+sub CMD_l2srammargin
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    CMD_sprammargin($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder);
+}
+
+sub CMD_rammargin
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    system_cmd("perl ./tools/MemoryUtility/RAMMargin.pl \"$makefile\" \"$lds_path\" \"$sym_path\"",
+               "RAMMargin", $makefile, $log_folder);
+}
+
+sub _CMD_comparespram
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path, $query_range) = @_;
+    if(scalar(@$arg_aref) < 1)
+    {
+        print "Please add the map path after comparespram.\nFor more information, you can refer to memquery -h\n\n";
+    }
+    else
+    {
+        my $compare_path = $arg_aref->[0];
+        my $output_log = GetLogName($makefile, $log_folder, "Compare".$query_range.($query_range eq "SPRAM"?"All":""));
+        system("perl ./tools/MemoryUtility/TCMQuery.pl -c $query_range \"$map_path\" \"$compare_path\" > \"$output_log\"");
+        print "The output is generated under: $output_log\n";
+    }
+}
+sub CMD_comparespram0
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    &_CMD_comparespram($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path, "SPRAM0");
+}
+sub CMD_comparespram1
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    &_CMD_comparespram($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path, "SPRAM1");
+}
+sub CMD_comparespramall
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    &_CMD_comparespram($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path, "SPRAM");
+}
+
+sub CMD_comparetcm
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    print"Redirect to memquery comparespram!\n";
+    CMD_comparespram($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path);
+}
+
+sub CMD_objintcm
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    print"Redirect to memquery objinspramall!\n";
+    CMD_objinspramall($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path);  
+}
+
+
+sub _CMD_objinspram
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path, $query_range) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -q $query_range \"$map_path\"", "size".($query_range eq "SPRAM"?"All":""),  $makefile, $log_folder);
+}
+sub CMD_objinspram0
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;    
+    _CMD_objinspram($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path, "SPRAM0");
+}
+sub CMD_objinspram1
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;    
+    _CMD_objinspram($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path, "SPRAM1");
+}
+sub CMD_objinspramall
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;    
+    print "This command is euqal to objinspram0 + objinspram1\n";
+    _CMD_objinspram($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path, "SPRAM");
+}
+
+sub CMD_objinl2sram
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -q L2SRAM \"$map_path\"", "L2SRAMSize", $makefile, $log_folder);
+}
+
+sub CMD_objin
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -q $arg_aref->[0] \"$map_path\"", "ObjSize", $makefile, $log_folder);
+}
+
+sub CMD_symbolinfo
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd_csv("perl ./tools/MemoryUtility/TCMQuery.pl -is $arg_aref->[0] \"$map_path\" \"$sym_path\"", "SymbolInfo", $makefile, $log_folder);
+}
+
+sub CMD_sdatainfo
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    my $output_log = GetLogName($makefile, $log_folder, "sdata");
+    system("perl ./tools/MemoryUtility/TCMQuery.pl -is \"\\.s(data|bss)_0\\.{0,1}\" \"$map_path\"  \"$sym_path\" > \"$output_log\"");
+    system("perl ./tools/MemoryUtility/TCMQuery.pl -is \"\\.s(data|bss)_1\\.{0,1}\" \"$map_path\"  \"$sym_path\" >> \"$output_log\"");
+    print "The output is generated under: $output_log\n";
+}
+
+sub CMD_l2cachelockinfo
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -is \"L2CACHE_LOCK\" \"$map_path\" \"$sym_path\"", "l2cachelock", $makefile, $log_folder);
+}
+
+
+sub CMD_discard
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/QueryDiscardedSym.pl -q \"$map_path\"", "Discard", $makefile, $log_folder);
+}
+
+sub CMD_comparediscard
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/QueryDiscardedSym.pl -c \"$map_path\" \"$arg_aref->[0]\"", "CompareDiscard", $makefile, $log_folder);
+}
+
+sub CMD_symintcm
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    print "Redirect to objinspramall!\n";
+    CMD_objinspramall();
+}
+
+sub CMD_syminl2sram
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -s L2SRAM \"$sym_path\"", "L2SRAMsymbol", $makefile, $log_folder);
+}
+
+sub CMD_syminspramall
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    print "This command is euqal to syminspram0 + syminspram1\n";
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -s SPRAM \"$sym_path\"", "SPRAMsymbolAll", $makefile, $log_folder);
+}
+
+sub CMD_syminspram0
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -s SPRAM0 \"$sym_path\"", "SPRAM0symbol", $makefile, $log_folder);
+}
+
+sub CMD_syminspram1
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -s SPRAM1 \"$sym_path\"", "SPRAM1symbol", $makefile, $log_folder);
+}
+sub CMD_symin
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -s $arg_aref->[0] \"$sym_path\"", "SymbolsBySection", $makefile, $log_folder);
+}
+
+sub CMD_syminobj
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd_csv("perl ./tools/MemoryUtility/TCMQuery.pl -so $arg_aref->[0] \"$map_path\" \"$sym_path\"", "SymbolsByObj", $makefile, $log_folder);
+}
+
+sub CMD_syminlib
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd_csv("perl ./tools/MemoryUtility/TCMQuery.pl -sl $arg_aref->[0] \"$map_path\" \"$sym_path\"", "SymbolsByLib", $makefile, $log_folder);
+}
+
+sub CMD_symthreshold
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd_csv("perl ./tools/MemoryUtility/TCMQuery.pl -st $arg_aref->[0] \"$map_path\" \"$sym_path\"", "SymbolsThreshold", $makefile, $log_folder);
+}
+
+sub CMD_diffsymin
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -sc $arg_aref->[0] \"$sym_path\" \"$arg_aref->[1]\"", "DiffSymbol", $makefile, $log_folder);
+}
+
+#Only List the difference without existence
+sub CMD_diff2symin
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+    system_cmd("perl ./tools/MemoryUtility/TCMQuery.pl -sce $arg_aref->[0] \"$sym_path\" \"$arg_aref->[1]\"", "Diff2Symbol", $makefile, $log_folder);
+}
+
+sub CMD_objinfo
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    if(scalar(@$arg_aref) == 0)
+    {
+        my $output_log = GetLogName($makefile, $log_folder, "ObjectSize");
+        system("perl ./tools/MemoryUtility/CompareObjSize.pl \"$map_path\" \"$map_path\" > \"$output_log\" ");
+        print "The output of all library information is generated under: $output_log\n";
+    }
+    else
+    {
+        foreach my $obj (@$arg_aref)
+        {
+            $obj .= ".obj" if($obj !~ /\.o/);
+            print "$obj\n===================================================\n";
+            system("perl ./tools/MemoryUtility/QuerySize.pl \"$map_path\" $obj");
+            print "\n";
+        }
+    }
+}
+
+sub CMD_fillinfo
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    $g_bToLog = 1;
+
+    system_cmd_csv("perl ./tools/MemoryUtility/TCMQuery.pl -sf $arg_aref->[0] \"$map_path\" \"$sym_path\"", "FillInfo", $makefile, $log_folder);
+}
+
+sub CMD_comparelib
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    if(scalar(@$arg_aref) < 1)
+    {
+        print "Please add the map path after comparelibinfo.\nFor more information, you can refer to memquery -h\n\n";
+    }
+    else
+    {
+        my $compare_path = $arg_aref->[0];
+        my $output_log = GetLogName($makefile, $log_folder, "LibrarySize");
+        system("perl ./tools/MemoryUtility/CompareLibrarySize.pl \"$map_path\" \"$compare_path\" > \"$output_log\" ");
+        print "The output is generated under: $output_log\n";
+    }
+}
+
+sub CMD_compareobj
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    if(scalar(@$arg_aref) < 1)
+    {
+        print "Please add the map path after compareobjinfo.\nFor more information, you can refer to memquery -h\n\n";
+    }
+    else
+    {
+        my $compare_path = $arg_aref->[0];
+        my $output_log = GetLogName($makefile, $log_folder, "ObjectSize");
+        system("perl ./tools/MemoryUtility/CompareObjSize.pl \"$map_path\" \"$compare_path\" > \"$output_log\" ");
+        print "The output is generated under: $output_log\n";
+    }
+}
+
+sub CMD_libinfo
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    if(scalar(@$arg_aref) == 0)
+    {
+        my $output_log = GetLogName($makefile, $log_folder, "LibrarySize");
+        system("perl ./tools/MemoryUtility/CompareLibrarySize.pl \"$map_path\" \"$map_path\" > \"$output_log\" ");
+        print "The output of all library information is generated under: $output_log\n";
+    }
+    else
+    {
+        foreach my $lib (@$arg_aref)
+        {
+            if($lib !~ /\.l|\.a/)
+            {
+                print "Please add filename extension after $lib. Otherwise it can't be searched properly.";    
+            }
+            else
+            {
+                print "$lib\n===================================================\n";
+                system("perl ./tools/MemoryUtility/QuerySize.pl \"$map_path\" $lib");
+                print "\n";    
+            }
+        }
+    }
+}
+
+sub CMD_chkmemusage
+{
+	my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    system_cmd("perl ./tools/MemoryUtility/ChkMemUsage.pl \"$makefile\" \"$lds_path\" \"$map_path\" \"$sym_path\" ",
+               "chkmemusage", $makefile, $log_folder);
+}
+
+sub CMD_detectZI
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+
+    #my $bin_path = GetBinFile($map_path);
+    my $bin_path = $bin_path;
+    my $elf_path = $map_path;
+    $elf_path =~ s/map/elf/g;
+    my ($nZIpercent, $gnZIthreshold) = ($arg_aref->[0], $arg_aref->[1]);
+    
+    $g_bToLog = 1;
+    
+    system_cmd("perl ./tools/MemoryUtility/DetectZI.pl \"$sym_path\" \"$map_path\" \"$elf_path\" \"$nZIpercent\" \"$gnZIthreshold\"", 
+                "detectZI_".$nZIpercent."_".$gnZIthreshold, $makefile, $log_folder);    
+}
+
+sub CMD_topsizeobj
+{
+    my ($arg_aref, $lds_path, $makefile, $map_path, $sym_path, $log_folder, $bin_path) = @_;
+    my $output_log = GetLogName($makefile, $log_folder, "TopSizeObj");
+    system("perl ./tools/MemoryUtility/ListTopSizeObj.pl \"$map_path\" > \"$output_log\" ");
+    print "The output is generated under: $output_log\n";
+}
+
+# We don't use this function since the naming rule of bin file and map file are different in UMOLY
+sub GetBinFile()
+{
+    my ($map_path) = @_;
+    my $binDir = &dirname($map_path)."\/";
+    
+    opendir (DIR, $binDir) or mem_die("can not open bin folder $binDir", __FILE__, __LINE__);
+    my $binfilePrefix = &basename($map_path, ".map");
+    $binfilePrefix =~ s/\_P\_|\_L\_/\_/g;
+    my @TMP_BIN_FILE = grep { /$binfilePrefix\..+\.bin/ } readdir DIR;
+    closedir DIR;
+    if( scalar(@TMP_BIN_FILE) == 0 ) {
+        opendir (DIR, $binDir) or mem_die("can not open bin folder $binDir", __FILE__, __LINE__);
+        @TMP_BIN_FILE = grep { /.+\_MDBIN\_.+\..+\.bin/ } readdir DIR;
+        closedir DIR;
+    }
+    mem_die("no bin file is found") if( scalar(@TMP_BIN_FILE) == 0 );
+    return $binDir.$TMP_BIN_FILE[0];
+}
+
+sub CMD_help
+{
+    Usage();    
+}
+
+#****************************************************************************
+# Subroutine:  PrintLog
+# Parameters:  string log
+# Returns:     x
+#****************************************************************************
+sub PrintLog
+{
+    my ($strInput) = @_;
+    my ($pack_name, $file, $line_no) = caller;
+    open (FILE_HANDLE, ">>$LOG_PATH") or &mem_die("Cannot open log: $LOG_PATH\n", $file, $line_no);
+    print FILE_HANDLE $strInput if(defined $strInput);
+    close FILE_HANDLE;
+}
+
+sub PrintToScreen
+{
+    my ($strInput) = @_;
+    print $strInput if (defined $strInput);    
+}
+
+#****************************************************************************
+# Subroutine:  mem_die
+# Parameters:  1. string error message, 2. __FILE__ 3. __LINE__
+# Returns:     x
+#****************************************************************************
+sub mem_die
+{
+    my ($error_msg, $file, $line_no) = @_;
+    my $pack_name = undef;
+    if(!defined $file or !defined $line_no)
+    {
+        ($pack_name, $file, $line_no) = caller;    
+    }
+    &CommonUtil::error_handler($error_msg, $file, $line_no, 'Memory Query');    
+}
+
+#****************************************************************************
+# Subroutine:  Usage
+# Parameters:  x
+# Returns:     x
+#****************************************************************************
+sub Usage
+{
+    #system("clear"); # windows: cls, linux: clear
+    my $make = "m";
+    $make = "./m" if ($^O eq "linux") ;
+    print <<"__EOFUSAGE";
+
+----------------------------------------------------------------------------    
+[USAGE] 
+$make [MAKEFILE] memquery [OPTIONS]
+Note: The project must be built before using memquery.
+
+e.g.
+./m "MT6589_MD1_GPRS(SKYPA).mak" memquery sprammargin
+./m "MT6589_MD1_GPRS(SKYPA).mak" memquery objinfo abc.obj cde.obj
+./m "MT6589_MD1_GPRS(SKYPA).mak" memquery libinfo libabc.a libcde.a
+./m "MT6589_MD1_GPRS(SKYPA).mak" memquery libinfo
+./m "MT6589_MD1_GPRS(SKYPA).mak" memquery symin ROM
+[OPTIONS]
+help|-h|--help
+    Show how to use memquer
+basicinfo
+    Show ROM/RAM/PhysicalRAMUsage information
+chkmemusage
+    Check if the memory usage is more than the predefined percentage of hardware provided memory size 
+detectZI [ZIpercent, ZIthreshold]
+    List the RW with ZIpercent % of its contents are ZI and the size is larger than ZIthreshold byte.
+    If no ZIpercentand ZIthreshold and specified, default ZIpercent=100 and ZIthreshold=0
+sprammargin
+l2srammargin
+    Show spram and l2sram left sizes
+rammargin
+    Show ram left sizes
+syminspram[all,0,1]
+    Output the information of all symbol in all spram or SPRAM[0,1] to a log
+    e.g. syminspramall
+         syminspram0
+objinspram[all,0,1]
+    Output the information of all objects in all spram or SPRAM[0,1] to a log
+    e.g. objinspramall
+         objinspram0
+comparespram[all,0,1]
+    Compare object list in all spram or SPRAM[0,1,2] between current project with input map
+    e.g. comparespramall
+         comparespram0
+objinl2sram
+    Output the information of all objects in l2sram to a log
+objin 'section,section,...'
+    Output the information of all objects in specfic section to a log
+    e.g. objin 'ROM,INTSRAM_CODE'
+         objin ROM
+symin 'section,section,...'
+    Output the symbol information in specfic section to a log
+    e.g. symin 'ROM,INTSRAM_CODE'
+         symin L2SRAM
+objinfo [objname] 
+    Show ro/rwzi sizes of these objects
+libinfo [libname.l|libname.a]
+    Show ro/rwzi sizes of these libraries
+objinfo
+    Output all object information to a log
+libinfo
+    Output all library information to a log
+symbolinfo
+    Output symbol information in specfic input section to a log
+sdatainfo
+    Output symbol information in small data sections of core 0~1 to a log
+l2cachelockinfo
+    Output symbol information in static l2cache_lock sections to a log
+comparelib [map path]
+    Compare library list in current project with input map
+    [NOTE]sym filename should be the same as maps and 
+          be put under the same folder.
+compareobj [map path]
+    Compare object list in current project with input map
+    [NOTE]sym filename should be the same as maps and 
+          be put under the same folder.
+diffsymin 'section,section,...' [sym path]
+    Compare 2 sym files by section
+    (List all difference)
+diff2symin 'section,section,...' [sym path]
+    Compare 2 sym files by section
+    (List only difference if any one symbol doesnt exist)
+
+
+--Redirect command in LR13--
+symintcm
+    This command will be redirected to syminspramall
+objintcm
+    This command will be redirected to objinspramall
+comparetcm [map path]
+    This command will be redirected to comparespramall
+tcmmargin 
+    This command will be redirected to l2srammargin
+
+    
+--Not support command in LR13--
+
+----------------------------------------------------------------------------
+__EOFUSAGE
+  exit 0;
+}