From: Pedro Alves <palves@redhat.com>
To: Kevin Buettner <kevinb@redhat.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH] gdb.dwarf2: Define and use gdb_target_symbol_prefix for symbol prefixes
Date: Thu, 05 Nov 2015 10:46:00 -0000 [thread overview]
Message-ID: <563B3389.20502@redhat.com> (raw)
In-Reply-To: <20151104233946.51336127@pinnacle.lan>
On 11/05/2015 06:39 AM, Kevin Buettner wrote:
> On Fri, 30 Oct 2015 11:11:33 +0000
> Pedro Alves <palves@redhat.com> wrote:
> But for a .S file, we need to do something like this (as shown in
> gdb.arch/i386-float.S):
>
> #define CONCAT1(a, b) CONCAT2(a, b)
> #define CONCAT2(a, b) a ## b
>
> #ifdef SYMBOL_PREFIX
> # define SYMBOL(str) CONCAT1(SYMBOL_PREFIX, str)
> #else
> # define SYMBOL(str) str
> #endif
>
> .text
> .globl SYMBOL(main)
> SYMBOL(main):
>
> I don't understand the reason for both CONCAT1 and CONCAT2,
You need two levels in order to first expand SYMBOL_PREFIX, and
then concat the result. Otherwise SYMBOL(main) expands to
literally "SYMBOL_PREFIXmain" (minus quotes).
> It seems to me that the way to fix this is to make
> gdb_target_symbol_prefix_flags return an unquoted prefix. I.e.
> it should return:
>
> additional_flags=-DSYMBOL_PREFIX=_
>
> instead of:
>
> additional_flags=-DSYMBOL_PREFIX="_"
Yup.
>
> Then, within C files, SYMBOL is defined as follows:
>
> #ifdef SYMBOL_PREFIX
> #define SYMBOL(str) #SYMBOL_PREFIX #str
> #else
> #define SYMBOL(str) #str
> #endif
>
> Note that this is the same as before, except that I added a # to
> the front of SYMBOL_PREFIX. It's possible that this won't work -
It wont. # can only be used with a macro parameter.
> we might end up with "SYMBOL_PREFIX" instead of "_" for the prefix.
> If that's the case, then some layering is needed, perhaps something
> like this:
>
> #define STRCAT1(a,b) #a #b
> #ifdef SYMBOL_PREFIX
> #define SYMBOL(str) STRCAT1(SYMBOL_PREFIX,str)
> #else
> #define SYMBOL(str) #str
> #endif
>
That still needs double expansion.
> I'm willing to make these changes, but I want to first be sure that
> I'm not missing an easier fix.
IMO, it's clearer to separate the concerns -- concatenation
and final stringification.
Start with the usual concatenation:
#define CONCAT1(a, b) CONCAT2(a, b)
#define CONCAT2(a, b) a ## b
#ifdef SYMBOL_PREFIX
# define SYMBOL1(str) CONCAT1(SYMBOL_PREFIX, str)
#else
# define SYMBOL1(str) str
#endif
Then add a stringification layer:
#define STR1(s) #s
#define STR(s) STR1(s)
#define SYMBOL(str) STR(SYMBOL1(str))
This way you have these expansions:
SYMBOL1(main) -> _main
SYMBOL(main) -> "_main"
Thanks,
Pedro Alves
next prev parent reply other threads:[~2015-11-05 10:46 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-30 11:06 Kevin Buettner
2015-10-30 12:06 ` Kevin Buettner
2015-10-30 15:53 ` Pedro Alves
2015-11-05 6:39 ` Kevin Buettner
2015-11-05 10:46 ` Pedro Alves [this message]
2015-11-05 10:55 ` Pedro Alves
2015-11-06 5:33 ` Kevin Buettner
2015-10-30 15:51 ` Pedro Alves
2015-11-04 21:49 ` Kevin Buettner
2015-11-05 10:14 ` Pedro Alves
2015-11-05 20:01 ` Kevin Buettner
2015-11-05 21:19 ` Pedro Alves
2015-11-05 22:26 ` Kevin Buettner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=563B3389.20502@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=kevinb@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox