All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Hatle <mark.hatle@windriver.com>
To: Hongxu Jia <hongxu.jia@windriver.com>, <ross.burton@intel.com>,
	<richard.purdie@linuxfoundation.org>, <bruce.ashfield@gmail.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH V2 01/15] conf/bitbake.conf package.bbclass: fix dbg package not contain sources while -fdebug-prefix-map used
Date: Wed, 23 Mar 2016 08:40:20 -0500	[thread overview]
Message-ID: <56F29CC4.9010204@windriver.com> (raw)
In-Reply-To: <33e2a988b2639c965d4b733148a9eb20619b8a66.1458713426.git.hongxu.jia@windriver.com>

On 3/23/16 1:15 AM, Hongxu Jia wrote:
> Tweak DEBUG_FLAGS to use "/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
> as source target path in DWARF. While use gdb to debug binary, it could
> work with sources in dbg package.
> 
> While -fdebug-prefix-map is used for compiling, we do not need invoking
> debugedit to edit DWARF at do_package time, but list where sources files
> are.
> 
> The copydebugsources uses the list to copy sources to dbg package. It
> works whether -fdebug-prefix-map used or not.

The following looks right to me.  I'd recommend this version be used.

However, I'm guessing the work is not done.  Anything that has an ${S} outside
of the WORKDIR will not be remapped.  I'm guessing this includes the toolchain
and kernel bits.... but other things might also have a shared work dir?

We probably should make it a requirement that those things have their own unique
mapping defined as well.  I'm not sure if the existing tests will capture those
issues and alert the user.

(This is also a place in the developer guide we should probably explain what
this debug-prelix-map does and how it should be used to make on-target
debuggable items.)

--Mark

> [YOCTO #9305]
> 
> Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
> ---
>  meta/classes/package.bbclass | 24 ++++++++++++++++++++----
>  meta/conf/bitbake.conf       |  3 +--
>  2 files changed, 21 insertions(+), 6 deletions(-)
> 
> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
> index ef80e50..b2f5868 100644
> --- a/meta/classes/package.bbclass
> +++ b/meta/classes/package.bbclass
> @@ -300,6 +300,15 @@ def get_conffiles(pkg, d):
>      os.chdir(cwd)
>      return conf_list
>  
> +def checkbuildpath(file, d):
> +    tmpdir = d.getVar('TMPDIR', True)
> +    with open(file) as f:
> +        file_content = f.read()
> +        if tmpdir in file_content:
> +            return True
> +
> +    return False
> +
>  def splitdebuginfo(file, debugfile, debugsrcdir, sourcefile, d):
>      # Function to split a single file into two components, one is the stripped
>      # target system binary, the other contains any debugging information. The
> @@ -312,8 +321,6 @@ def splitdebuginfo(file, debugfile, debugsrcdir, sourcefile, d):
>      dvar = d.getVar('PKGD', True)
>      objcopy = d.getVar("OBJCOPY", True)
>      debugedit = d.expand("${STAGING_LIBDIR_NATIVE}/rpm/bin/debugedit")
> -    workdir = d.getVar("WORKDIR", True)
> -    workparentdir = d.getVar("DEBUGSRC_OVERRIDE_PATH", True) or os.path.dirname(os.path.dirname(workdir))
>  
>      # We ignore kernel modules, we don't generate debug info files.
>      if file.find("/lib/modules/") != -1 and file.endswith(".ko"):
> @@ -327,7 +334,7 @@ def splitdebuginfo(file, debugfile, debugsrcdir, sourcefile, d):
>  
>      # We need to extract the debug src information here...
>      if debugsrcdir:
> -        cmd = "'%s' -b '%s' -d '%s' -i -l '%s' '%s'" % (debugedit, workparentdir, debugsrcdir, sourcefile, file)
> +        cmd = "'%s' -i -l '%s' '%s'" % (debugedit, sourcefile, file)
>          (retval, output) = oe.utils.getstatusoutput(cmd)
>          if retval:
>              bb.fatal("debugedit failed with exit code %s (cmd was %s)%s" % (retval, cmd, ":\n%s" % output if output else ""))
> @@ -366,6 +373,13 @@ def copydebugsources(debugsrcdir, d):
>          workparentdir = os.path.dirname(os.path.dirname(workdir))
>          workbasedir = os.path.basename(os.path.dirname(workdir)) + "/" + os.path.basename(workdir)
>  
> +        # If build path exists in sourcefile, it means toolchain did not use
> +        # -fdebug-prefix-map to compile
> +        if checkbuildpath(sourcefile, d):
> +            localsrc_prefix = workparentdir + "/"
> +        else:
> +            localsrc_prefix = "/usr/src/debug/"
> +
>          nosuchdir = []
>          basepath = dvar
>          for p in debugsrcdir.split("/"):
> @@ -379,9 +393,11 @@ def copydebugsources(debugsrcdir, d):
>          # We need to ignore files that are not actually ours
>          # we do this by only paying attention to items from this package
>          processdebugsrc += "fgrep -zw '%s' | "
> +        # Remove prefix in the source paths
> +        processdebugsrc += "sed 's#%s##g' | "
>          processdebugsrc += "(cd '%s' ; cpio -pd0mlL --no-preserve-owner '%s%s' 2>/dev/null)"
>  
> -        cmd = processdebugsrc % (sourcefile, workbasedir, workparentdir, dvar, debugsrcdir)
> +        cmd = processdebugsrc % (sourcefile, workbasedir, localsrc_prefix, workparentdir, dvar, debugsrcdir)
>          (retval, output) = oe.utils.getstatusoutput(cmd)
>          # Can "fail" if internal headers/transient sources are attempted
>          #if retval:
> diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
> index 7ed5ffb..6bd6075 100644
> --- a/meta/conf/bitbake.conf
> +++ b/meta/conf/bitbake.conf
> @@ -550,8 +550,7 @@ EXTRA_OEMAKE_prepend_task-install = "${PARALLEL_MAKEINST} "
>  # Optimization flags.
>  ##################################################################
>  DEBUG_FLAGS ?= "-g -feliminate-unused-debug-types \
> -                -fdebug-prefix-map=${B}=/usr/src/${BPN} \
> -                -fdebug-prefix-map=${S}=/usr/src/${BPN} \
> +                -fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
>                  -fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
>                  -fdebug-prefix-map=${STAGING_DIR_HOST}= \
>  "
> 



  reply	other threads:[~2016-03-23 13:40 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-22 12:12 [PATCH V5 00/16] fix buildpaths QA issue Hongxu Jia
2016-03-22 12:12 ` [PATCH 01/16] conf/bitbake.conf package.bbclass: fix dbg package not contain sources while -fdebug-prefix-map used Hongxu Jia
2016-03-22 17:01   ` Mark Hatle
2016-03-23  1:11     ` Hongxu Jia
2016-03-22 12:12 ` [PATCH 02/16] kernel.bbclass: fix buildpath QA issue Hongxu Jia
2016-03-22 12:21   ` Bruce Ashfield
2016-03-22 16:18     ` Mark Hatle
2016-03-22 16:49       ` Bruce Ashfield
2016-03-22 16:57         ` Mark Hatle
2016-03-23  1:29         ` Hongxu Jia
2016-03-23 14:28           ` Bruce Ashfield
2016-03-23 15:50             ` Hongxu Jia
2016-03-22 12:12 ` [PATCH 03/16] dtc.inc: fix buildpaths " Hongxu Jia
2016-03-22 12:12 ` [PATCH 04/16] fix_buildpaths.bbclass: add bbclass to fix build path Hongxu Jia
2016-03-22 12:12 ` [PATCH 05/16] icu: fix buildpaths QA issue Hongxu Jia
2016-03-22 12:12 ` [PATCH 06/16] tcl: fix buildpath " Hongxu Jia
2016-03-22 12:12 ` [PATCH 07/16] python2/3: " Hongxu Jia
2016-03-22 12:12 ` [PATCH 08/16] bbclass distutils/distutils3: fix .pyc/.pyo buildpath Hongxu Jia
2016-03-22 12:12 ` [PATCH 09/16] bbclass distutils/distutils3/setuptools/setuptools3: clean up DISTUTILS_INSTALL_ARGS Hongxu Jia
2016-03-22 12:12 ` [PATCH 10/16] python-setuptools/python3-setuptools: use old-style install Hongxu Jia
2016-03-22 12:12 ` [PATCH 11/16] python3-pip: " Hongxu Jia
2016-03-22 12:12 ` [PATCH 12/16] waf.bbclass: support do patch on extracted files Hongxu Jia
2016-03-22 12:12 ` [PATCH 13/16] python-pycairo: fix buildpath QA issue Hongxu Jia
2016-03-22 12:12 ` [PATCH 14/16] openssl: " Hongxu Jia
2016-03-22 12:12 ` [PATCH 15/16] epiphany: fix buildpaths " Hongxu Jia
2016-03-22 12:12 ` [PATCH 16/16] gconf: " Hongxu Jia
2016-03-23  6:15 ` [PATCH V6 00/15] " Hongxu Jia
2016-03-23  6:15   ` [PATCH V2 01/15] conf/bitbake.conf package.bbclass: fix dbg package not contain sources while -fdebug-prefix-map used Hongxu Jia
2016-03-23 13:40     ` Mark Hatle [this message]
2016-03-23 14:15       ` Hongxu Jia
2016-03-23  6:15   ` [PATCH 03/15] fix_buildpaths.bbclass: add bbclass to fix build path Hongxu Jia

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=56F29CC4.9010204@windriver.com \
    --to=mark.hatle@windriver.com \
    --cc=bruce.ashfield@gmail.com \
    --cc=hongxu.jia@windriver.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=richard.purdie@linuxfoundation.org \
    --cc=ross.burton@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.