diff mbox

[pacman-dev] libmakepkg/tidy: fix debug sources not being properly detected sometimes

Message ID 20180613011718.4103-2-eschwartz@archlinux.org
State Accepted, archived
Headers show

Commit Message

Eli Schwartz June 13, 2018, 1:17 a.m. UTC
DW_AT_comp_dir is meant to contain the directory in which the compiler
was run

DW_AT_name contains the source file the compiler was told to use.

In the event that DW_AT_name is an absolute path, it is (obviously) not
meant to be computed relative to DW_AT_comp_dir. However, we did not
handle this correctly, and as a result tried to copy source files using
doubled-up filepaths.

The correct approach should be to use DW_AT_name on its own, in the
event that it is an absolute path.

This fixes debug package generation for many packages that use absolute
paths in their build systems... like CMake.

Reported-by: Jagannathan Tiruvallur Eachambadi <jagannathante@gmail.com>
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
---
 scripts/libmakepkg/tidy/strip.sh.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Eli Schwartz June 19, 2018, 4 p.m. UTC | #1
On 06/12/2018 09:17 PM, Eli Schwartz wrote:
> DW_AT_comp_dir is meant to contain the directory in which the compiler
> was run
> 
> DW_AT_name contains the source file the compiler was told to use.
> 
> In the event that DW_AT_name is an absolute path, it is (obviously) not
> meant to be computed relative to DW_AT_comp_dir. However, we did not
> handle this correctly, and as a result tried to copy source files using
> doubled-up filepaths.
> 
> The correct approach should be to use DW_AT_name on its own, in the
> event that it is an absolute path.

Finish this paragraph with "See
http://wiki.dwarfstd.org/index.php?title=Best_Practices"

Thanks Allan for finding this documented somewhere.

> This fixes debug package generation for many packages that use absolute
> paths in their build systems... like CMake.
> 
> Reported-by: Jagannathan Tiruvallur Eachambadi <jagannathante@gmail.com>
> Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
> ---
>  scripts/libmakepkg/tidy/strip.sh.in | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
> index 36d1b89e..5937e13c 100644
> --- a/scripts/libmakepkg/tidy/strip.sh.in
> +++ b/scripts/libmakepkg/tidy/strip.sh.in
> @@ -37,7 +37,7 @@ build_id() {
>  
>  source_files() {
>  	LANG=C readelf "$1" --debug-dump | \
> -		awk '/DW_AT_name +:/{name=$8}/DW_AT_comp_dir +:/{print $8 "/" name}'
> +		awk '/DW_AT_name +:/{name=$8}/DW_AT_comp_dir +:/{{if (name !~ /^\//) {printf "%s/", $8}}{print name}}'
>  }
>  
>  strip_file() {
>
diff mbox

Patch

diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
index 36d1b89e..5937e13c 100644
--- a/scripts/libmakepkg/tidy/strip.sh.in
+++ b/scripts/libmakepkg/tidy/strip.sh.in
@@ -37,7 +37,7 @@  build_id() {
 
 source_files() {
 	LANG=C readelf "$1" --debug-dump | \
-		awk '/DW_AT_name +:/{name=$8}/DW_AT_comp_dir +:/{print $8 "/" name}'
+		awk '/DW_AT_name +:/{name=$8}/DW_AT_comp_dir +:/{{if (name !~ /^\//) {printf "%s/", $8}}{print name}}'
 }
 
 strip_file() {