Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]

2024-11-21 Thread via GitHub


xiaoxiang781216 merged PR #14851:
URL: https://github.com/apache/nuttx/pull/14851


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]

2024-11-19 Thread via GitHub


github-actions[bot] commented on PR #14851:
URL: https://github.com/apache/nuttx/pull/14851#issuecomment-2487693066

   This PR exceeds the recommended size of 1000 lines. Please make sure you are 
NOT addressing multiple issues with one PR. Note this PR might be rejected due 
to its size. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]

2024-11-19 Thread via GitHub


XuNeo commented on code in PR #14851:
URL: https://github.com/apache/nuttx/pull/14851#discussion_r1849674951


##
tools/gdb/utils.py:
##
@@ -1,8 +1,6 @@
 
 # tools/gdb/utils.py
 #

Review Comment:
   It's a mistake. Added back.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]

2024-11-19 Thread via GitHub


github-actions[bot] commented on PR #14851:
URL: https://github.com/apache/nuttx/pull/14851#issuecomment-2487634066

   This PR exceeds the recommended size of 1000 lines. Please make sure you are 
NOT addressing multiple issues with one PR. Note this PR might be rejected due 
to its size. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]

2024-11-19 Thread via GitHub


github-actions[bot] commented on PR #14851:
URL: https://github.com/apache/nuttx/pull/14851#issuecomment-2487637835

   This PR exceeds the recommended size of 1000 lines. Please make sure you are 
NOT addressing multiple issues with one PR. Note this PR might be rejected due 
to its size. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]

2024-11-19 Thread via GitHub


XuNeo commented on code in PR #14851:
URL: https://github.com/apache/nuttx/pull/14851#discussion_r1849645396


##
tools/gdb/macros.py:
##
@@ -0,0 +1,214 @@
+
+# tools/gdb/macros.py
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+
+# NOTE: GDB stores macro information based on the current stack frame's scope,
+# including the source file and line number. Therefore, there may be missing
+# macro definitions when you are at different stack frames.
+#
+# To resolve this issue, we need to retrieve all macro information from the 
ELF file
+# then parse and evaluate it by ourselves.
+#
+# There might be two ways to achieve this, one is to leverage the C 
preprocessor
+# to directly preprocess all the macros instereted into python constants

Review Comment:
   Hi, it does mean interpreted. The intermediate macros need to be evaluated 
like 
   ```
   #define A 1
   #define C 2
   #define C (A +B)
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]

2024-11-19 Thread via GitHub


hartmannathan commented on code in PR #14851:
URL: https://github.com/apache/nuttx/pull/14851#discussion_r1849157590


##
tools/gdb/macros.py:
##
@@ -0,0 +1,214 @@
+
+# tools/gdb/macros.py
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+
+# NOTE: GDB stores macro information based on the current stack frame's scope,
+# including the source file and line number. Therefore, there may be missing
+# macro definitions when you are at different stack frames.
+#
+# To resolve this issue, we need to retrieve all macro information from the 
ELF file
+# then parse and evaluate it by ourselves.
+#
+# There might be two ways to achieve this, one is to leverage the C 
preprocessor
+# to directly preprocess all the macros instereted into python constants
+# gcc -E -x c -P  -I/path/to/nuttx/include
+#
+# While the other way is to leverage the dwarf info stored in the ELF file,
+# with -g3 switch, we have a `.debug_macro` section containing all the 
information
+# about the macros.
+#
+# Currently, we using the second method.
+
+import os
+import re
+import subprocess
+import tempfile
+
+PUNCTUATORS = [
+"\[",
+"\]",
+"\(",
+"\)",
+"\{",
+"\}",
+"\?",
+";",
+",",
+"~",
+"\.\.\.",
+"\.",
+"\-\>",
+"\-\-",
+"\-\=",
+"\-",
+"\+\+",
+"\+\=",
+"\+",
+"\*\=",
+"\*",
+"\!\=",
+"\!",
+"\&\&",
+"\&\=",
+"\&",
+"\/\=",
+"\/",
+"\%\>",
+"%:%:",
+"%:",
+"%=",
+"%",
+"\^\=",
+"\^",
+"\#\#",
+"\#",
+"\:\>",
+"\:",
+"\|\|",
+"\|\=",
+"\|",
+"<<=",
+"<<",
+"<=",
+"<:",
+"<%",
+"<",
+">>=",
+">>",
+">=",
+">",
+"\=\=",
+"\=",
+]
+
+
+def parse_macro(line, macros, pattern):
+# grep name, value
+# the first group matches the token, the second matches the replacement
+m = pattern.match(line)
+if not m:
+return False
+
+name, value = m.group(1), m.group(2)
+
+if name in macros:
+# FIXME: what should we do if we got a redefinition/duplication here?
+# for now I think it's ok just overwrite the old value
+pass
+
+# emplace, for all undefined macros we evalute it to zero
+macros[name] = value if value else "0"
+
+return True
+
+
+def fetch_macro_info(file):
+if not os.path.isfile(file):
+raise FileNotFoundError("No given ELF target found")
+
+# FIXME: we don't use subprocess here because
+# it's broken on some GDB distribution :(, I haven't
+# found a solution to it.
+
+with tempfile.NamedTemporaryFile(delete=False) as f1:
+
+# # os.system(f"readelf -wm {file} > {output}")
+process = subprocess.Popen(
+f"readelf -wm {file}", shell=True, stdout=f1, 
stderr=subprocess.STDOUT
+)
+
+process.communicate()
+errcode = process.returncode
+
+f1.close()
+
+if errcode != 0:
+return {}
+
+p = re.compile(".*macro[ ]*:[ ]*([\S]+\(.*?\)|[\w]+)[ ]*(.*)")
+macros = {}
+
+with open(f1.name, "rb") as f2:
+for line in f2.readlines():
+line = line.decode("utf-8")
+if not line.startswith(" DW_MACRO_define") and not 
line.startswith(
+" DW_MACRO_undef"
+):
+continue
+
+if not parse_macro(line, macros, p):
+print(f"Failed to parse {line}")
+
+return macros
+
+
+def split_tokens(expr):
+p = "(" + "|".join(PUNCTUATORS) + ")"
+res = list(
+filter(lambda e: e != "", map(lambda e: e.rstrip().lstrip(), 
re.split(p, expr)))
+)
+return res
+
+
+def do_expand(expr, macro_map):
+if expr in PUNCTUATORS:
+return expr
+
+tokens = split_tokens(expr)
+
+res = []
+
+for t in tokens:
+if t not in macro_map:
+res.append(t)
+continue
+res += do_expand(macro_map[t], macro_map)
+
+return res
+
+
+# NOTE: Implement a fully functional parser which 

Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]

2024-11-19 Thread via GitHub


github-actions[bot] commented on PR #14851:
URL: https://github.com/apache/nuttx/pull/14851#issuecomment-2485028724

   This PR exceeds the recommended size of 1000 lines. Please make sure you are 
NOT addressing multiple issues with one PR. Note this PR might be rejected due 
to its size. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]

2024-11-19 Thread via GitHub


github-actions[bot] commented on PR #14851:
URL: https://github.com/apache/nuttx/pull/14851#issuecomment-2485041148

   This PR exceeds the recommended size of 1000 lines. Please make sure you are 
NOT addressing multiple issues with one PR. Note this PR might be rejected due 
to its size. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org