[PATCH v2] build: Make FILE symbol paths consistent

Ross Lagerwall posted 1 patch 1 year, 2 months ago
Test gitlab-ci passed
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20230213165539.3257260-1-ross.lagerwall@citrix.com
xen/Rules.mk | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH v2] build: Make FILE symbol paths consistent
Posted by Ross Lagerwall 1 year, 2 months ago
The FILE symbols in out-of-tree builds may be either a relative path to
the object dir or an absolute path depending on how the build is
invoked. Fix the paths for C files so that they are consistent with
in-tree builds - the path is relative to the "xen" directory (e.g.
common/irq.c).

This fixes livepatch builds when the original Xen build was out-of-tree
since livepatch-build always does in-tree builds. Note that this doesn't
fix the behaviour for Clang < 6 which always embeds full paths.

Fixes: 7115fa562fe7 ("build: adding out-of-tree support to the xen build")
Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
---

In v2:
* Adjust commit description.
* Rename rel_path.

 xen/Rules.mk | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index 70b7489ea8..d6b7cec0a8 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -228,8 +228,9 @@ quiet_cmd_cc_o_c = CC      $@
 ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y)
     cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $(dot-target).tmp -MQ $@
     ifneq ($(CONFIG_CC_IS_CLANG)$(call clang-ifversion,-lt,600,y),yy)
+        rel-path = $(patsubst $(abs_srctree)/%,%,$(call realpath,$(1)))
         cmd_objcopy_fix_sym = \
-	    $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@ && rm -f $(dot-target).tmp
+           $(OBJCOPY) --redefine-sym $(<F)=$(call rel-path,$<) $(dot-target).tmp $@ && rm -f $(dot-target).tmp
     else
         cmd_objcopy_fix_sym = mv -f $(dot-target).tmp $@
     endif
-- 
2.31.1
Re: [PATCH v2] build: Make FILE symbol paths consistent
Posted by Jan Beulich 1 year, 2 months ago
On 13.02.2023 17:55, Ross Lagerwall wrote:
> The FILE symbols in out-of-tree builds may be either a relative path to
> the object dir or an absolute path depending on how the build is
> invoked. Fix the paths for C files so that they are consistent with
> in-tree builds - the path is relative to the "xen" directory (e.g.
> common/irq.c).
> 
> This fixes livepatch builds when the original Xen build was out-of-tree
> since livepatch-build always does in-tree builds. Note that this doesn't
> fix the behaviour for Clang < 6 which always embeds full paths.

Is "fix" here actually correct? I.e. is there anything to fix in that
case? It looks to me as if "always absolute paths" is as good as
"always relative paths". In which case s/fix/alter/?

> Fixes: 7115fa562fe7 ("build: adding out-of-tree support to the xen build")
> Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>

With the above clarified (a possible adjustment could be done while
committing):
Reviewed-by: Jan Beulich <jbeulich@suse.com>

Jan
Re: [PATCH v2] build: Make FILE symbol paths consistent
Posted by Ross Lagerwall 1 year, 2 months ago
> From: Jan Beulich <jbeulich@suse.com>
> Sent: Wednesday, February 15, 2023 9:55 AM
> To: Ross Lagerwall <ross.lagerwall@citrix.com>
> Cc: Andrew Cooper <Andrew.Cooper3@citrix.com>; George Dunlap <George.Dunlap@citrix.com>; Julien Grall <julien@xen.org>; Stefano Stabellini <sstabellini@kernel.org>; Wei Liu <wl@xen.org>; Anthony Perard <anthony.perard@citrix.com>; xen-devel@lists.xenproject.org <xen-devel@lists.xenproject.org>
> Subject: Re: [PATCH v2] build: Make FILE symbol paths consistent 
>  
> On 13.02.2023 17:55, Ross Lagerwall wrote:
> > The FILE symbols in out-of-tree builds may be either a relative path to
> > the object dir or an absolute path depending on how the build is
> > invoked. Fix the paths for C files so that they are consistent with
> > in-tree builds - the path is relative to the "xen" directory (e.g.
> > common/irq.c).
> > 
> > This fixes livepatch builds when the original Xen build was out-of-tree
> > since livepatch-build always does in-tree builds. Note that this doesn't
> > fix the behaviour for Clang < 6 which always embeds full paths.
> 
> Is "fix" here actually correct? I.e. is there anything to fix in that
> case? It looks to me as if "always absolute paths" is as good as
> "always relative paths". In which case s/fix/alter/?
> 

If embedding absolute paths, the livepatch-build process will fail to
match symbols between the base xen-syms and the newly built, patched
objects unless they are built with the source directory at the exact
same path. So yes, I would consider this as not "fixed" for Clang < 6.

Thanks,
Ross