From 088bba31a3b0222f263470fc9c95770466d16d86 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Thu, 23 Nov 2017 11:39:19 +0100 Subject: [PATCH] Revert "src, tools: add debug symbols for node internals" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 446c1ecfdaf99de38082d048626f301109da49c6. Reverted for breaking `make test-v8`. The "find all relevant system headers" logic in `tools/gen-postmortem-metadata.py` needs more work. Also reverts commit e46c3f743dc78ef0a614289a874e1c60c7e96490. ("tools: fix typo in gen-postmortem-metadata.py".) PR-URL: https://github.com/nodejs/node/pull/17272 Refs: https://github.com/nodejs/node/pull/14901 Reviewed-By: Colin Ihrig Reviewed-By: Daniel Bevenius Reviewed-By: Joyee Cheung Reviewed-By: Matheus Marchini Reviewed-By: Michaƫl Zasso --- node.gyp | 26 +--- tools/gen-postmortem-metadata.py | 200 ------------------------------- 2 files changed, 1 insertion(+), 225 deletions(-) delete mode 100644 tools/gen-postmortem-metadata.py diff --git a/node.gyp b/node.gyp index 58bbb4005f9234..c32adc37206526 100644 --- a/node.gyp +++ b/node.gyp @@ -178,7 +178,6 @@ 'dependencies': [ 'node_js2c#host', - 'deps/nghttp2/nghttp2.gyp:nghttp2' ], 'includes': [ @@ -299,7 +298,6 @@ # node.gyp is added to the project by default. 'common.gypi', '<(SHARED_INTERMEDIATE_DIR)/node_javascript.cc', - '<(SHARED_INTERMEDIATE_DIR)/node-debug-support.cc', ], 'variables': { @@ -972,29 +970,7 @@ }]] }], ] - }, - { - 'target_name': 'node_postmortem_metadata', - 'type': 'none', - 'toolsets': ['host'], - 'actions': [ - { - 'action_name': 'gen-postmortem-metadata', - 'process_outputs_as_sources': 1, - 'inputs': [ - './tools/gen-postmortem-metadata.py', - ], - 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/node-debug-support.cc', - ], - 'action': [ - 'python', - './tools/gen-postmortem-metadata.py', - '<@(_outputs)', - ] - } - ] - }, + } ], # end targets 'conditions': [ diff --git a/tools/gen-postmortem-metadata.py b/tools/gen-postmortem-metadata.py deleted file mode 100644 index 312f76ae5de63b..00000000000000 --- a/tools/gen-postmortem-metadata.py +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/env python - -# -# gen-postmortem-metadata.py output_file.cc -# -# Creates debugging symbols to help navigate Node's internals using post-mortem -# debugging tools. -# - -import os -import fnmatch -import re -from glob import glob -import sys - - -class DebugSymbol(object): - type_ = 'int' - _prefix = 'nodedbg_' - - def __init__(self, name, value, headers=[], type_=None): - self.name = name - self.value = value - self.headers = headers - self.type_ = type_ or DebugSymbol.type_ - - @classmethod - def get_headers(cls, debug_symbols): - ''' - Return a list of headers without duplicates, preserving the order they were - declared - ''' - seen = set() - headers = [debug_symbol.headers for debug_symbol in debug_symbols] - headers = sum(headers, []) - - result = [] - for h in headers: - if not h in seen: - seen.add(h) - result.append(h) - - return result - - @property - def declare(self): - return '{type} {prefix}{name};'.format( - type=self.type_, - prefix=self._prefix, - name=self.name, - ) - - @property - def fill(self): - return '{prefix}{name} = {value};'.format( - prefix=self._prefix, - name=self.name, - value=self.value, - ) - - -debug_symbols = [ - DebugSymbol( - name='environment_context_idx_embedder_data', - value='Environment::kContextEmbedderDataIndex', - headers=['env.h'], - type_='int', - ), - DebugSymbol( - name='class__BaseObject__persistent_handle', - value='offsetof(BaseObject, persistent_handle_)', - headers=['base_object-inl.h'], - type_='size_t', - ), - DebugSymbol( - name='class__Environment__handleWrapQueue', - value='offsetof(Environment, handle_wrap_queue_)', - headers=['env.h'], - type_='size_t', - ), - DebugSymbol( - name='class__HandleWrap__node', - value='offsetof(HandleWrap, handle_wrap_queue_)', - headers=['handle_wrap.h'], - type_='size_t', - ), - DebugSymbol( - name='class__HandleWrapQueue__headOffset', - value='offsetof(Environment::HandleWrapQueue, head_)', - headers=['env.h'], - type_='size_t', - ), - DebugSymbol( - name='class__HandleWrapQueue__nextOffset', - value='offsetof(ListNode, next_)', - headers=['handle_wrap.h', 'util.h'], - type_='size_t', - ), - DebugSymbol( - name='class__Environment__reqWrapQueue', - value='offsetof(Environment, req_wrap_queue_)', - headers=['env.h'], - type_='size_t', - ), - DebugSymbol( - name='class__ReqWrap__node', - value='offsetof(ReqWrap, req_wrap_queue_)', - headers=['req_wrap.h'], - type_='size_t', - ), - DebugSymbol( - name='class__ReqWrapQueue__headOffset', - value='offsetof(Environment::ReqWrapQueue, head_)', - headers=['env.h'], - type_='size_t', - ), - DebugSymbol( - name='class__ReqWrapQueue__nextOffset', - value='offsetof(ListNode>, next_)', - headers=['req_wrap.h', 'util.h'], - type_='size_t', - ), -] - - -template = ''' -/* - * This file is generated by {filename}. Do not edit directly. - */ - -// Need to import standard headers before redefining private, otherwise it -// won't compile -{standard_includes} - -int GenDebugSymbol(); - -#define private friend int GenDebugSymbol(); private - -{includes} - -{declare_symbols} - -namespace node {{ - -int GenDebugSymbol() {{ -{fill_symbols} -return 1; -}} - -int debug_symbols_generated = GenDebugSymbol(); - -}} -''' - - -def get_standard_includes(): - ''' - Try to find all standard C++ headers needed by node and its dependencies - ''' - includes = set() - regex = re.compile('#include *<([a-zA-Z0-9\-_]*)>') - for src in ["src", "deps"]: - for root, dirnames, filenames in os.walk(src): - for filename in fnmatch.filter(filenames, '*.h'): - f = open(os.path.join(root, filename), 'r') - for line in f.readlines(): - match = regex.match(line) - if match: - includes.add(match.group(1)) - return sorted(includes) - - -def create_symbols_file(): - out = file(sys.argv[1], 'w') - headers = DebugSymbol.get_headers(debug_symbols) - includes = ['#include "{0}"'.format(header) for header in headers] - includes = '\n'.join(includes) - - standard_includes = get_standard_includes() - standard_includes = ['#include <{0}>'.format(include) for include in standard_includes] - standard_includes = '\n'.join(standard_includes) - - declare_symbols = '\n'.join([symbol.declare for symbol in debug_symbols]) - fill_symbols = '\n'.join([symbol.fill for symbol in debug_symbols]) - - out.write(template.format( - filename=sys.argv[0], - includes=includes, - standard_includes=standard_includes, - declare_symbols=declare_symbols, - fill_symbols=fill_symbols, - )) - - -if len(sys.argv) < 2: - print('usage: {0} output.cc'.format(sys.argv[0])) - sys.exit(2) - - -create_symbols_file()