From 1101cb7b3b05d857c8bccc848bc5664155c82730 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 19 Dec 2013 09:38:11 -0700 Subject: [PATCH] add make-target-delegates This patch adds a new script, call make-target-delegates, which auto-generates some target delegation code based on annotations in target.h. This adds the new delegation macros, the new generated file, and adds the necessary calls to the new generated functions to target.c. It doesn't, however, add any actual annotations to the target methods, leaving these for separate patches. 2014-02-19 Tom Tromey PR build/7701: * target-delegates.c: New file. * target.c: Include target-delegates.c. (init_dummy_target): Call install_dummy_methods. (complete_target_initialization): Call install_delegators. * target.h (TARGET_DEFAULT_IGNORE, TARGET_DEFAULT_NORETURN) (TARGET_DEFAULT_RETURN, TARGET_DEFAULT_FUNC): New defines. * make-target-delegates: New file. --- gdb/ChangeLog | 11 ++ gdb/make-target-delegates | 253 ++++++++++++++++++++++++++++++++++++++ gdb/target-delegates.c | 14 +++ gdb/target.c | 9 ++ gdb/target.h | 24 ++++ 5 files changed, 311 insertions(+) create mode 100755 gdb/make-target-delegates create mode 100644 gdb/target-delegates.c diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bb6ce24a99a..f49246c7f38 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2014-02-19 Tom Tromey + + PR build/7701: + * target-delegates.c: New file. + * target.c: Include target-delegates.c. + (init_dummy_target): Call install_dummy_methods. + (complete_target_initialization): Call install_delegators. + * target.h (TARGET_DEFAULT_IGNORE, TARGET_DEFAULT_NORETURN) + (TARGET_DEFAULT_RETURN, TARGET_DEFAULT_FUNC): New defines. + * make-target-delegates: New file. + 2014-02-19 Tom Tromey * record.c (find_record_target): Use find_target_at. diff --git a/gdb/make-target-delegates b/gdb/make-target-delegates new file mode 100755 index 00000000000..f09f89d935d --- /dev/null +++ b/gdb/make-target-delegates @@ -0,0 +1,253 @@ +#!/usr/bin/perl + +# Copyright (C) 2013-2014 Free Software Foundation, Inc. +# +# This file is part of GDB. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# Usage: +# make-target-delegates target.h > target-delegates.c + +# The line we search for in target.h that marks where we should start +# looking for methods. +$TRIGGER = qr,^struct target_ops$,; +# The end of the methods part. +$ENDER = qr,^\s*};$,; + +# Match a C symbol. +$SYMBOL = qr,[a-zA-Z_][a-zA-Z0-9_]*,; +# Match the name part of a method in struct target_ops. +$NAME_PART = qr,\(\*(?${SYMBOL}+)\)\s,; +# Match the start of arguments to a method. +$ARGS_PART = qr,(?\(.*)$,; +# Match indentation. +$INTRO_PART = qr,^\s*,; + +# Match the return type when it is "ordinary". +$SIMPLE_RETURN_PART = qr,[^\(]+,; +# Match the return type when it is a VEC. +$VEC_RETURN_PART = qr,VEC\s*\([^\)]+\)[^\(]*,; + +# Match the TARGET_DEFAULT_* attribute for a method. +$TARGET_DEFAULT_PART = qr,TARGET_DEFAULT_(?