On Tue, Nov 03, 2015 at 03:58:10PM +0100, Mark Wielaard wrote: > Although the dwfl_module_getsrc_file.c change itself is good, the abuse > of INTUSE to define and use a "not really" libdw dwarf_line_file > function (which really is just dwarf_linesrc with the two unused return > values dropped) was just too ugly. Sorry, I know you didn't introduce > this (it looks like it has been this way forever). I'll propose > something that doesn't hurt my eyes so much.
At first I thought we should introduce a new libdw line function or make an exiting one easier for what dwfl_module_getsrc_file needs. But this seems a little too specific. It might be better to wait till we start supporting the the new DWARFv5 line tables which will need new functions to support anyway. So lets just use what you came up with, but just rename the function and drop the strange INTUSE usage. Attached your patch with just that change. Cheers, Mark
>From 3148f5cd3dafdce78a30b609901fc9b27cceb983 Mon Sep 17 00:00:00 2001 From: Chih-Hung Hsieh <c...@google.com> Date: Wed, 21 Oct 2015 15:44:56 -0700 Subject: [PATCH] Move nested functions in dwfl_module_getsrc_file.c. * Nested functions in this file are moved to file scope to compile with clang. Extra parameters are added to pass local variables. Signed-off-by: Chih-Hung Hsieh <c...@google.com> Signed-off-by: Mark Wielaard <m...@redhat.com> --- libdwfl/ChangeLog | 8 ++++++++ libdwfl/dwfl_module_getsrc_file.c | 35 ++++++++++++++++++++--------------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index e7c373e..27250a9 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,4 +1,12 @@ 2015-10-21 Chih-Hung Hsieh <c...@google.com> + Mark Wielaard <m...@redhat.com> + + * dwfl_module_getsrc_file.c (dwfl_module_getsrc_file): Move nested + functions 'dwarf_line_file', 'dwfl_line', and 'dwfl_line_file' to + file scope. Rename dwarf_line_file to dwfl_dwarf_line_file. Don't + use INTUSE. + +2015-10-21 Chih-Hung Hsieh <c...@google.com> * frame_unwind.c (expr_eval): Move nested function 'push' and 'pop' to file scope. Pass used local variables in struct eval_stack. diff --git a/libdwfl/dwfl_module_getsrc_file.c b/libdwfl/dwfl_module_getsrc_file.c index 20aa8a5..21a5915 100644 --- a/libdwfl/dwfl_module_getsrc_file.c +++ b/libdwfl/dwfl_module_getsrc_file.c @@ -30,6 +30,24 @@ #include "../libdw/libdwP.h" +static inline const char * +dwfl_dwarf_line_file (const Dwarf_Line *line) +{ + return line->files->info[line->file].name; +} + +static inline Dwarf_Line * +dwfl_line (const Dwfl_Line *line) +{ + return &dwfl_linecu (line)->die.cu->lines->info[line->idx]; +} + +static inline const char * +dwfl_line_file (const Dwfl_Line *line) +{ + return dwfl_dwarf_line_file (dwfl_line (line)); +} + int dwfl_module_getsrc_file (Dwfl_Module *mod, const char *fname, int lineno, int column, @@ -58,19 +76,6 @@ dwfl_module_getsrc_file (Dwfl_Module *mod, && cu != NULL && (error = __libdwfl_cu_getsrclines (cu)) == DWFL_E_NOERROR) { - inline const char *INTUSE(dwarf_line_file) (const Dwarf_Line *line) - { - return line->files->info[line->file].name; - } - inline Dwarf_Line *dwfl_line (const Dwfl_Line *line) - { - return &dwfl_linecu (line)->die.cu->lines->info[line->idx]; - } - inline const char *dwfl_line_file (const Dwfl_Line *line) - { - return INTUSE(dwarf_line_file) (dwfl_line (line)); - } - /* Search through all the line number records for a matching file and line/column number. If any of the numbers is zero, no match is performed. */ @@ -87,7 +92,7 @@ dwfl_module_getsrc_file (Dwfl_Module *mod, } else { - const char *file = INTUSE(dwarf_line_file) (line); + const char *file = dwfl_dwarf_line_file (line); if (file != lastfile) { /* Match the name with the name the user provided. */ @@ -110,7 +115,7 @@ dwfl_module_getsrc_file (Dwfl_Module *mod, size_t inner; for (inner = 0; inner < cur_match; ++inner) if (dwfl_line_file (match[inner]) - == INTUSE(dwarf_line_file) (line)) + == dwfl_dwarf_line_file (line)) break; if (inner < cur_match && (dwfl_line (match[inner])->line != line->line -- 2.4.3