Re: [PR] GDB Plugin Upgrade part2: memory leak detection and other memory tools [nuttx]
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]
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]
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]
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]
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]
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]
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]
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]
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