Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-10-21 Thread Joshua Watt
On Fri, Oct 21, 2022 at 10:54 AM Alexander Kanavin
 wrote:
>
> I think we had a similar problem in rust, and I ended up rewriting the
> shell script in python and running it with nativepython3 :-)

I had to re-write the script to be a C program because there wasn't
any way to make qemu find and invoke nativepython3, but that appears
to work. I'll send a patch

>
> Alex
>
> On Fri, 21 Oct 2022 at 17:48, Joshua Watt  wrote:
> >
> > Ya I've tracked it down to when qemu invokes the qemu-oe-bridge-helper
> > to setup network bridging. This is a shell script that uses /bin/sh, and
> > as the log indicates, /bin/sh can't find the required symbols to start
> > up (and qemu fails).
> >
> > I also see it when runqemu attempt so to invoke the stty program to
> > cleanup the console after qemu runs for the same reason. This one is a
> > little easier to fix; I have a prototype patch that only passes the
> > munged environment that sets LD_PRELOAD when runqemu actually invokes
> > qemu by passing env= to subprocess. The other process invocations with
> > subprcess are not passed this environment, so they don't see the
> > LD_PRELOAD. This doesn't fix the bridge problem however because in that
> > case, qemu is invoking the script so the script inherits qemu's environment.
> >
> > On 10/21/22 10:43, Alexander Kanavin wrote:
> > > This is the first time I hear about this - can you find out what is
> > > expecting the symbol, and where it's supposed to come from?
> > >
> > > Alex
> > >
> > > On Fri, 21 Oct 2022 at 17:27, Joshua Watt  wrote:
> > >> This patch broke runqemu for me when I moved to kirkstone. I get this 
> > >> error:
> > >>
> > >>   /bin/sh: symbol lookup error:
> > >> /grmn/prj/mrn/alchemy/build/tmp/eng/kirkstone/tetra/sysroots-uninative/x86_64-linux/lib/librt.so.1:
> > >> undefined symbol: __libc_unwind_link_get, version GLIBC_PRIVATE
> > >>
> > >> And I'm not sure how to fix it. Reverting this change does resolve the 
> > >> problem.
> > >>
> > >> My host is Ubuntu 20.04
> > >>
> > >>
> > >>
> > >> On Fri, Feb 4, 2022 at 2:40 PM Alexander Kanavin 
> > >>  wrote:
> > >>> Some of the host distributions build the drivers in a way 
> > >>> (RPATH/RUNPATH)
> > >>> that tricks uninative loader into loading pieces of the host libc, if
> > >>> the same pieces haven't been previously loaded by native binaries. 
> > >>> Mixing
> > >>> the two libc versions leads to failures.
> > >>>
> > >>> This change ensures that the correct (uninative) versions are always in 
> > >>> use.
> > >>>
> > >>> Signed-off-by: Alexander Kanavin 
> > >>> ---
> > >>>   meta/classes/qemuboot.bbclass | 2 +-
> > >>>   scripts/runqemu   | 4 
> > >>>   2 files changed, 5 insertions(+), 1 deletion(-)
> > >>>
> > >>> diff --git a/meta/classes/qemuboot.bbclass 
> > >>> b/meta/classes/qemuboot.bbclass
> > >>> index cc1cbce69d..229bd88527 100644
> > >>> --- a/meta/classes/qemuboot.bbclass
> > >>> +++ b/meta/classes/qemuboot.bbclass
> > >>> @@ -109,7 +109,7 @@ def qemuboot_vars(d):
> > >>>   build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
> > >>>   'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
> > >>>   'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> > >>> -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> > >>> +'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 
> > >>> 'UNINATIVE_LOADER']
> > >>>   return build_vars + [k for k in d.keys() if k.startswith('QB_')]
> > >>>
> > >>>   do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
> > >>> diff --git a/scripts/runqemu b/scripts/runqemu
> > >>> index 4e05c1bb15..7d1f85f357 100755
> > >>> --- a/scripts/runqemu
> > >>> +++ b/scripts/runqemu
> > >>> @@ -460,6 +460,10 @@ class BaseConfig(object):
> > >>>   except subprocess.CalledProcessError as e:
> > >>>   raise RunQemuError("Could not determine the path to dri 
> > >>> drivers on the host via pkg-config.\nPlease install Mesa development 
> > >>> files (particularly, dri.pc) on the host machine.")
> > >>>   os.environ['LIBGL_DRIVERS_PATH'] = 
> > >>> dripath.decode('utf-8').strip()
> > >>> +uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
> > >>> +preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
> > >>> +preload_paths = [os.path.join(uninative_path, i) for i in 
> > >>> preload_items]
> > >>> +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
> > >>>
> > >>>   def check_args(self):
> > >>>   for debug in ("-d", "--debug"):
> > >>> --
> > >>> 2.20.1
> > >>>
> > >>>
> > >>> 
> > >>>

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#172033): 
https://lists.openembedded.org/g/openembedded-core/message/172033
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 

Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-10-21 Thread Alexander Kanavin
I think we had a similar problem in rust, and I ended up rewriting the
shell script in python and running it with nativepython3 :-)

Alex

On Fri, 21 Oct 2022 at 17:48, Joshua Watt  wrote:
>
> Ya I've tracked it down to when qemu invokes the qemu-oe-bridge-helper
> to setup network bridging. This is a shell script that uses /bin/sh, and
> as the log indicates, /bin/sh can't find the required symbols to start
> up (and qemu fails).
>
> I also see it when runqemu attempt so to invoke the stty program to
> cleanup the console after qemu runs for the same reason. This one is a
> little easier to fix; I have a prototype patch that only passes the
> munged environment that sets LD_PRELOAD when runqemu actually invokes
> qemu by passing env= to subprocess. The other process invocations with
> subprcess are not passed this environment, so they don't see the
> LD_PRELOAD. This doesn't fix the bridge problem however because in that
> case, qemu is invoking the script so the script inherits qemu's environment.
>
> On 10/21/22 10:43, Alexander Kanavin wrote:
> > This is the first time I hear about this - can you find out what is
> > expecting the symbol, and where it's supposed to come from?
> >
> > Alex
> >
> > On Fri, 21 Oct 2022 at 17:27, Joshua Watt  wrote:
> >> This patch broke runqemu for me when I moved to kirkstone. I get this 
> >> error:
> >>
> >>   /bin/sh: symbol lookup error:
> >> /grmn/prj/mrn/alchemy/build/tmp/eng/kirkstone/tetra/sysroots-uninative/x86_64-linux/lib/librt.so.1:
> >> undefined symbol: __libc_unwind_link_get, version GLIBC_PRIVATE
> >>
> >> And I'm not sure how to fix it. Reverting this change does resolve the 
> >> problem.
> >>
> >> My host is Ubuntu 20.04
> >>
> >>
> >>
> >> On Fri, Feb 4, 2022 at 2:40 PM Alexander Kanavin  
> >> wrote:
> >>> Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
> >>> that tricks uninative loader into loading pieces of the host libc, if
> >>> the same pieces haven't been previously loaded by native binaries. Mixing
> >>> the two libc versions leads to failures.
> >>>
> >>> This change ensures that the correct (uninative) versions are always in 
> >>> use.
> >>>
> >>> Signed-off-by: Alexander Kanavin 
> >>> ---
> >>>   meta/classes/qemuboot.bbclass | 2 +-
> >>>   scripts/runqemu   | 4 
> >>>   2 files changed, 5 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
> >>> index cc1cbce69d..229bd88527 100644
> >>> --- a/meta/classes/qemuboot.bbclass
> >>> +++ b/meta/classes/qemuboot.bbclass
> >>> @@ -109,7 +109,7 @@ def qemuboot_vars(d):
> >>>   build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
> >>>   'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
> >>>   'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> >>> -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> >>> +'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 
> >>> 'UNINATIVE_LOADER']
> >>>   return build_vars + [k for k in d.keys() if k.startswith('QB_')]
> >>>
> >>>   do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
> >>> diff --git a/scripts/runqemu b/scripts/runqemu
> >>> index 4e05c1bb15..7d1f85f357 100755
> >>> --- a/scripts/runqemu
> >>> +++ b/scripts/runqemu
> >>> @@ -460,6 +460,10 @@ class BaseConfig(object):
> >>>   except subprocess.CalledProcessError as e:
> >>>   raise RunQemuError("Could not determine the path to dri 
> >>> drivers on the host via pkg-config.\nPlease install Mesa development 
> >>> files (particularly, dri.pc) on the host machine.")
> >>>   os.environ['LIBGL_DRIVERS_PATH'] = 
> >>> dripath.decode('utf-8').strip()
> >>> +uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
> >>> +preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
> >>> +preload_paths = [os.path.join(uninative_path, i) for i in 
> >>> preload_items]
> >>> +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
> >>>
> >>>   def check_args(self):
> >>>   for debug in ("-d", "--debug"):
> >>> --
> >>> 2.20.1
> >>>
> >>>
> >>> 
> >>>

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#172029): 
https://lists.openembedded.org/g/openembedded-core/message/172029
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-10-21 Thread Joshua Watt
Ya I've tracked it down to when qemu invokes the qemu-oe-bridge-helper 
to setup network bridging. This is a shell script that uses /bin/sh, and 
as the log indicates, /bin/sh can't find the required symbols to start 
up (and qemu fails).


I also see it when runqemu attempt so to invoke the stty program to 
cleanup the console after qemu runs for the same reason. This one is a 
little easier to fix; I have a prototype patch that only passes the 
munged environment that sets LD_PRELOAD when runqemu actually invokes 
qemu by passing env= to subprocess. The other process invocations with 
subprcess are not passed this environment, so they don't see the 
LD_PRELOAD. This doesn't fix the bridge problem however because in that 
case, qemu is invoking the script so the script inherits qemu's environment.


On 10/21/22 10:43, Alexander Kanavin wrote:

This is the first time I hear about this - can you find out what is
expecting the symbol, and where it's supposed to come from?

Alex

On Fri, 21 Oct 2022 at 17:27, Joshua Watt  wrote:

This patch broke runqemu for me when I moved to kirkstone. I get this error:

  /bin/sh: symbol lookup error:
/grmn/prj/mrn/alchemy/build/tmp/eng/kirkstone/tetra/sysroots-uninative/x86_64-linux/lib/librt.so.1:
undefined symbol: __libc_unwind_link_get, version GLIBC_PRIVATE

And I'm not sure how to fix it. Reverting this change does resolve the problem.

My host is Ubuntu 20.04



On Fri, Feb 4, 2022 at 2:40 PM Alexander Kanavin  wrote:

Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
that tricks uninative loader into loading pieces of the host libc, if
the same pieces haven't been previously loaded by native binaries. Mixing
the two libc versions leads to failures.

This change ensures that the correct (uninative) versions are always in use.

Signed-off-by: Alexander Kanavin 
---
  meta/classes/qemuboot.bbclass | 2 +-
  scripts/runqemu   | 4 
  2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
index cc1cbce69d..229bd88527 100644
--- a/meta/classes/qemuboot.bbclass
+++ b/meta/classes/qemuboot.bbclass
@@ -109,7 +109,7 @@ def qemuboot_vars(d):
  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
-'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
+'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 'UNINATIVE_LOADER']
  return build_vars + [k for k in d.keys() if k.startswith('QB_')]

  do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
diff --git a/scripts/runqemu b/scripts/runqemu
index 4e05c1bb15..7d1f85f357 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -460,6 +460,10 @@ class BaseConfig(object):
  except subprocess.CalledProcessError as e:
  raise RunQemuError("Could not determine the path to dri drivers on the 
host via pkg-config.\nPlease install Mesa development files (particularly, dri.pc) on the 
host machine.")
  os.environ['LIBGL_DRIVERS_PATH'] = dripath.decode('utf-8').strip()
+uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
+preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
+preload_paths = [os.path.join(uninative_path, i) for i in 
preload_items]
+os.environ['LD_PRELOAD'] = " ".join(preload_paths)

  def check_args(self):
  for debug in ("-d", "--debug"):
--
2.20.1





-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#172028): 
https://lists.openembedded.org/g/openembedded-core/message/172028
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-10-21 Thread Alexander Kanavin
This is the first time I hear about this - can you find out what is
expecting the symbol, and where it's supposed to come from?

Alex

On Fri, 21 Oct 2022 at 17:27, Joshua Watt  wrote:
>
> This patch broke runqemu for me when I moved to kirkstone. I get this error:
>
>  /bin/sh: symbol lookup error:
> /grmn/prj/mrn/alchemy/build/tmp/eng/kirkstone/tetra/sysroots-uninative/x86_64-linux/lib/librt.so.1:
> undefined symbol: __libc_unwind_link_get, version GLIBC_PRIVATE
>
> And I'm not sure how to fix it. Reverting this change does resolve the 
> problem.
>
> My host is Ubuntu 20.04
>
>
>
> On Fri, Feb 4, 2022 at 2:40 PM Alexander Kanavin  
> wrote:
> >
> > Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
> > that tricks uninative loader into loading pieces of the host libc, if
> > the same pieces haven't been previously loaded by native binaries. Mixing
> > the two libc versions leads to failures.
> >
> > This change ensures that the correct (uninative) versions are always in use.
> >
> > Signed-off-by: Alexander Kanavin 
> > ---
> >  meta/classes/qemuboot.bbclass | 2 +-
> >  scripts/runqemu   | 4 
> >  2 files changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
> > index cc1cbce69d..229bd88527 100644
> > --- a/meta/classes/qemuboot.bbclass
> > +++ b/meta/classes/qemuboot.bbclass
> > @@ -109,7 +109,7 @@ def qemuboot_vars(d):
> >  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
> >  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
> >  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> > -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> > +'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 'UNINATIVE_LOADER']
> >  return build_vars + [k for k in d.keys() if k.startswith('QB_')]
> >
> >  do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
> > diff --git a/scripts/runqemu b/scripts/runqemu
> > index 4e05c1bb15..7d1f85f357 100755
> > --- a/scripts/runqemu
> > +++ b/scripts/runqemu
> > @@ -460,6 +460,10 @@ class BaseConfig(object):
> >  except subprocess.CalledProcessError as e:
> >  raise RunQemuError("Could not determine the path to dri 
> > drivers on the host via pkg-config.\nPlease install Mesa development files 
> > (particularly, dri.pc) on the host machine.")
> >  os.environ['LIBGL_DRIVERS_PATH'] = dripath.decode('utf-8').strip()
> > +uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
> > +preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
> > +preload_paths = [os.path.join(uninative_path, i) for i in 
> > preload_items]
> > +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
> >
> >  def check_args(self):
> >  for debug in ("-d", "--debug"):
> > --
> > 2.20.1
> >
> >
> > 
> >

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#172027): 
https://lists.openembedded.org/g/openembedded-core/message/172027
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-10-21 Thread Joshua Watt
This patch broke runqemu for me when I moved to kirkstone. I get this error:

 /bin/sh: symbol lookup error:
/grmn/prj/mrn/alchemy/build/tmp/eng/kirkstone/tetra/sysroots-uninative/x86_64-linux/lib/librt.so.1:
undefined symbol: __libc_unwind_link_get, version GLIBC_PRIVATE

And I'm not sure how to fix it. Reverting this change does resolve the problem.

My host is Ubuntu 20.04



On Fri, Feb 4, 2022 at 2:40 PM Alexander Kanavin  wrote:
>
> Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
> that tricks uninative loader into loading pieces of the host libc, if
> the same pieces haven't been previously loaded by native binaries. Mixing
> the two libc versions leads to failures.
>
> This change ensures that the correct (uninative) versions are always in use.
>
> Signed-off-by: Alexander Kanavin 
> ---
>  meta/classes/qemuboot.bbclass | 2 +-
>  scripts/runqemu   | 4 
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
> index cc1cbce69d..229bd88527 100644
> --- a/meta/classes/qemuboot.bbclass
> +++ b/meta/classes/qemuboot.bbclass
> @@ -109,7 +109,7 @@ def qemuboot_vars(d):
>  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
>  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
>  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> +'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 'UNINATIVE_LOADER']
>  return build_vars + [k for k in d.keys() if k.startswith('QB_')]
>
>  do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
> diff --git a/scripts/runqemu b/scripts/runqemu
> index 4e05c1bb15..7d1f85f357 100755
> --- a/scripts/runqemu
> +++ b/scripts/runqemu
> @@ -460,6 +460,10 @@ class BaseConfig(object):
>  except subprocess.CalledProcessError as e:
>  raise RunQemuError("Could not determine the path to dri drivers 
> on the host via pkg-config.\nPlease install Mesa development files 
> (particularly, dri.pc) on the host machine.")
>  os.environ['LIBGL_DRIVERS_PATH'] = dripath.decode('utf-8').strip()
> +uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
> +preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
> +preload_paths = [os.path.join(uninative_path, i) for i in 
> preload_items]
> +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
>
>  def check_args(self):
>  for debug in ("-d", "--debug"):
> --
> 2.20.1
>
>
> 
>

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#172024): 
https://lists.openembedded.org/g/openembedded-core/message/172024
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-02-12 Thread Alexander Kanavin
On Sat, 12 Feb 2022 at 14:18, Enrico Scholz
 wrote:
> | File: '.../meta/classes/qemuboot.bbclass', lineno: 141, function: 
> do_write_qemuboot_conf
> |  0137:else:
> |  0138:val = d.getVar(k)
> |  0139:# we only want to write out relative paths so that we can 
> relocate images
> |  0140:# and still run them
> |  *** 0141:if val.startswith(topdir):
> |  0142:val = os.path.relpath(val, finalpath)
> |  0143:cf.set('config_bsp', k, '%s' % val)
> |  0144:
> |  0145:# QB_DEFAULT_KERNEL's value of KERNEL_IMAGETYPE is the name 
> of a symlink
> | Exception: AttributeError: 'NoneType' object has no attribute 'startswith'

Fix is in master-next.

Alex

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161671): 
https://lists.openembedded.org/g/openembedded-core/message/161671
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-02-12 Thread Enrico Scholz via lists.openembedded.org
"Alexander Kanavin"  writes:

> --- a/meta/classes/qemuboot.bbclass
> +++ b/meta/classes/qemuboot.bbclass
> @@ -109,7 +109,7 @@ def qemuboot_vars(d):
>  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
>  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
>  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> +'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 'UNINATIVE_LOADER']
>  return build_vars + [k for k in d.keys() if k.startswith('QB_')]

Build without uninative fails now with

| File: '.../meta/classes/qemuboot.bbclass', lineno: 141, function: 
do_write_qemuboot_conf
|  0137:else:
|  0138:val = d.getVar(k)
|  0139:# we only want to write out relative paths so that we can 
relocate images
|  0140:# and still run them
|  *** 0141:if val.startswith(topdir):
|  0142:val = os.path.relpath(val, finalpath)
|  0143:cf.set('config_bsp', k, '%s' % val)
|  0144:
|  0145:# QB_DEFAULT_KERNEL's value of KERNEL_IMAGETYPE is the name of 
a symlink
| Exception: AttributeError: 'NoneType' object has no attribute 'startswith'



Enrico

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161670): 
https://lists.openembedded.org/g/openembedded-core/message/161670
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-02-06 Thread Alexander Kanavin
There's also an issue with the wrapper script run by host bash for
qemu-system that breaks with uninative, so just hold it off until I get it
all confirmed as working :)

Alex

On Sun, 6 Feb 2022 at 10:57, Richard Purdie <
richard.pur...@linuxfoundation.org> wrote:

> On Sun, 2022-02-06 at 09:51 +, Richard Purdie via
> lists.openembedded.org
> wrote:
> > On Sat, 2022-02-05 at 12:20 +, Richard Purdie via
> lists.openembedded.org
> > wrote:
> > > On Fri, 2022-02-04 at 21:40 +0100, Alexander Kanavin wrote:
> > > > Some of the host distributions build the drivers in a way
> (RPATH/RUNPATH)
> > > > that tricks uninative loader into loading pieces of the host libc, if
> > > > the same pieces haven't been previously loaded by native binaries.
> Mixing
> > > > the two libc versions leads to failures.
> > > >
> > > > This change ensures that the correct (uninative) versions are always
> in use.
> > > >
> > > > Signed-off-by: Alexander Kanavin 
> > > > ---
> > > >  meta/classes/qemuboot.bbclass | 2 +-
> > > >  scripts/runqemu   | 4 
> > > >  2 files changed, 5 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/meta/classes/qemuboot.bbclass
> b/meta/classes/qemuboot.bbclass
> > > > index cc1cbce69d..229bd88527 100644
> > > > --- a/meta/classes/qemuboot.bbclass
> > > > +++ b/meta/classes/qemuboot.bbclass
> > > > @@ -109,7 +109,7 @@ def qemuboot_vars(d):
> > > >  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
> > > >  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
> > > >  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> > > > -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> > > > +'STAGING_DIR_HOST', 'SERIAL_CONSOLES',
> 'UNINATIVE_LOADER']
> > > >  return build_vars + [k for k in d.keys() if k.startswith('QB_')]
> > > >
> > > >  do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
> > > > diff --git a/scripts/runqemu b/scripts/runqemu
> > > > index 4e05c1bb15..7d1f85f357 100755
> > > > --- a/scripts/runqemu
> > > > +++ b/scripts/runqemu
> > > > @@ -460,6 +460,10 @@ class BaseConfig(object):
> > > >  except subprocess.CalledProcessError as e:
> > > >  raise RunQemuError("Could not determine the path to dri
> drivers on the host via pkg-config.\nPlease install Mesa development files
> (particularly, dri.pc) on the host machine.")
> > > >  os.environ['LIBGL_DRIVERS_PATH'] =
> dripath.decode('utf-8').strip()
> > > > +uninative_path =
> os.path.dirname(self.get("UNINATIVE_LOADER"))
> > > > +preload_items = ['libdl.so.2', 'librt.so.1',
> 'libpthread.so.0']
> > > > +preload_paths = [os.path.join(uninative_path, i) for i in
> preload_items]
> > > > +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
> > > >
> > >
> > > This looks like a good way to work around this corner case and I don't
> see any
> > > other alternative. Can I ask that:
> > >
> > > a) we put some comment into the code so we can understand this in a
> couple of
> > > years time as it is a rather weird corner case
> > >
> > > b) we put some "if os.path.exists()" in there, maybe even just on the
> uninnative
> > > loader direction so that in the non-uninative case we don't throw
> warnings?
> >
> > I've added a tweak doing this into master-next.
>
> Although I see one in your branch too, should have checked that first :/
>
> Cheers,
>
> Richard
>
>

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161397): 
https://lists.openembedded.org/g/openembedded-core/message/161397
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-02-06 Thread Richard Purdie
On Sun, 2022-02-06 at 09:51 +, Richard Purdie via lists.openembedded.org
wrote:
> On Sat, 2022-02-05 at 12:20 +, Richard Purdie via lists.openembedded.org
> wrote:
> > On Fri, 2022-02-04 at 21:40 +0100, Alexander Kanavin wrote:
> > > Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
> > > that tricks uninative loader into loading pieces of the host libc, if
> > > the same pieces haven't been previously loaded by native binaries. Mixing
> > > the two libc versions leads to failures.
> > > 
> > > This change ensures that the correct (uninative) versions are always in 
> > > use.
> > > 
> > > Signed-off-by: Alexander Kanavin 
> > > ---
> > >  meta/classes/qemuboot.bbclass | 2 +-
> > >  scripts/runqemu   | 4 
> > >  2 files changed, 5 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
> > > index cc1cbce69d..229bd88527 100644
> > > --- a/meta/classes/qemuboot.bbclass
> > > +++ b/meta/classes/qemuboot.bbclass
> > > @@ -109,7 +109,7 @@ def qemuboot_vars(d):
> > >  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
> > >  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
> > >  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> > > -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> > > +'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 
> > > 'UNINATIVE_LOADER']
> > >  return build_vars + [k for k in d.keys() if k.startswith('QB_')]
> > >  
> > >  do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
> > > diff --git a/scripts/runqemu b/scripts/runqemu
> > > index 4e05c1bb15..7d1f85f357 100755
> > > --- a/scripts/runqemu
> > > +++ b/scripts/runqemu
> > > @@ -460,6 +460,10 @@ class BaseConfig(object):
> > >  except subprocess.CalledProcessError as e:
> > >  raise RunQemuError("Could not determine the path to dri 
> > > drivers on the host via pkg-config.\nPlease install Mesa development 
> > > files (particularly, dri.pc) on the host machine.")
> > >  os.environ['LIBGL_DRIVERS_PATH'] = 
> > > dripath.decode('utf-8').strip()
> > > +uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
> > > +preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
> > > +preload_paths = [os.path.join(uninative_path, i) for i in 
> > > preload_items]
> > > +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
> > >  
> > 
> > This looks like a good way to work around this corner case and I don't see 
> > any
> > other alternative. Can I ask that:
> > 
> > a) we put some comment into the code so we can understand this in a couple 
> > of
> > years time as it is a rather weird corner case
> > 
> > b) we put some "if os.path.exists()" in there, maybe even just on the 
> > uninnative
> > loader direction so that in the non-uninative case we don't throw warnings?
> 
> I've added a tweak doing this into master-next.

Although I see one in your branch too, should have checked that first :/

Cheers,

Richard


-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161396): 
https://lists.openembedded.org/g/openembedded-core/message/161396
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-02-06 Thread Richard Purdie
On Sat, 2022-02-05 at 12:20 +, Richard Purdie via lists.openembedded.org
wrote:
> On Fri, 2022-02-04 at 21:40 +0100, Alexander Kanavin wrote:
> > Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
> > that tricks uninative loader into loading pieces of the host libc, if
> > the same pieces haven't been previously loaded by native binaries. Mixing
> > the two libc versions leads to failures.
> > 
> > This change ensures that the correct (uninative) versions are always in use.
> > 
> > Signed-off-by: Alexander Kanavin 
> > ---
> >  meta/classes/qemuboot.bbclass | 2 +-
> >  scripts/runqemu   | 4 
> >  2 files changed, 5 insertions(+), 1 deletion(-)
> > 
> > diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
> > index cc1cbce69d..229bd88527 100644
> > --- a/meta/classes/qemuboot.bbclass
> > +++ b/meta/classes/qemuboot.bbclass
> > @@ -109,7 +109,7 @@ def qemuboot_vars(d):
> >  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
> >  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
> >  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> > -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> > +'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 'UNINATIVE_LOADER']
> >  return build_vars + [k for k in d.keys() if k.startswith('QB_')]
> >  
> >  do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
> > diff --git a/scripts/runqemu b/scripts/runqemu
> > index 4e05c1bb15..7d1f85f357 100755
> > --- a/scripts/runqemu
> > +++ b/scripts/runqemu
> > @@ -460,6 +460,10 @@ class BaseConfig(object):
> >  except subprocess.CalledProcessError as e:
> >  raise RunQemuError("Could not determine the path to dri 
> > drivers on the host via pkg-config.\nPlease install Mesa development files 
> > (particularly, dri.pc) on the host machine.")
> >  os.environ['LIBGL_DRIVERS_PATH'] = dripath.decode('utf-8').strip()
> > +uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
> > +preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
> > +preload_paths = [os.path.join(uninative_path, i) for i in 
> > preload_items]
> > +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
> >  
> 
> This looks like a good way to work around this corner case and I don't see any
> other alternative. Can I ask that:
> 
> a) we put some comment into the code so we can understand this in a couple of
> years time as it is a rather weird corner case
> 
> b) we put some "if os.path.exists()" in there, maybe even just on the 
> uninnative
> loader direction so that in the non-uninative case we don't throw warnings?

I've added a tweak doing this into master-next.

Cheers,

Richard


-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161394): 
https://lists.openembedded.org/g/openembedded-core/message/161394
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-02-05 Thread Richard Purdie
On Fri, 2022-02-04 at 21:40 +0100, Alexander Kanavin wrote:
> Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
> that tricks uninative loader into loading pieces of the host libc, if
> the same pieces haven't been previously loaded by native binaries. Mixing
> the two libc versions leads to failures.
> 
> This change ensures that the correct (uninative) versions are always in use.
> 
> Signed-off-by: Alexander Kanavin 
> ---
>  meta/classes/qemuboot.bbclass | 2 +-
>  scripts/runqemu   | 4 
>  2 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
> index cc1cbce69d..229bd88527 100644
> --- a/meta/classes/qemuboot.bbclass
> +++ b/meta/classes/qemuboot.bbclass
> @@ -109,7 +109,7 @@ def qemuboot_vars(d):
>  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
>  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
>  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> +'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 'UNINATIVE_LOADER']
>  return build_vars + [k for k in d.keys() if k.startswith('QB_')]
>  
>  do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
> diff --git a/scripts/runqemu b/scripts/runqemu
> index 4e05c1bb15..7d1f85f357 100755
> --- a/scripts/runqemu
> +++ b/scripts/runqemu
> @@ -460,6 +460,10 @@ class BaseConfig(object):
>  except subprocess.CalledProcessError as e:
>  raise RunQemuError("Could not determine the path to dri drivers 
> on the host via pkg-config.\nPlease install Mesa development files 
> (particularly, dri.pc) on the host machine.")
>  os.environ['LIBGL_DRIVERS_PATH'] = dripath.decode('utf-8').strip()
> +uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
> +preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
> +preload_paths = [os.path.join(uninative_path, i) for i in 
> preload_items]
> +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
>  

This looks like a good way to work around this corner case and I don't see any
other alternative. Can I ask that:

a) we put some comment into the code so we can understand this in a couple of
years time as it is a rather weird corner case

b) we put some "if os.path.exists()" in there, maybe even just on the uninnative
loader direction so that in the non-uninative case we don't throw warnings?

Cheers,

Richard




-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161389): 
https://lists.openembedded.org/g/openembedded-core/message/161389
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-02-04 Thread Alexander Kanavin
The dynamic loader will print an error about missing libraries, but will
execute the binary regardless.

Alex

On Fri, 4 Feb 2022 at 22:17, Christopher Larson  wrote:

> What will this do if uninative isn't enabled?
>
> On Fri, Feb 4, 2022 at 1:40 PM Alexander Kanavin 
> wrote:
>
>> Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
>> that tricks uninative loader into loading pieces of the host libc, if
>> the same pieces haven't been previously loaded by native binaries. Mixing
>> the two libc versions leads to failures.
>>
>> This change ensures that the correct (uninative) versions are always in
>> use.
>>
>> Signed-off-by: Alexander Kanavin 
>> ---
>>  meta/classes/qemuboot.bbclass | 2 +-
>>  scripts/runqemu   | 4 
>>  2 files changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
>> index cc1cbce69d..229bd88527 100644
>> --- a/meta/classes/qemuboot.bbclass
>> +++ b/meta/classes/qemuboot.bbclass
>> @@ -109,7 +109,7 @@ def qemuboot_vars(d):
>>  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
>>  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
>>  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
>> -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
>> +'STAGING_DIR_HOST', 'SERIAL_CONSOLES',
>> 'UNINATIVE_LOADER']
>>  return build_vars + [k for k in d.keys() if k.startswith('QB_')]
>>
>>  do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
>> diff --git a/scripts/runqemu b/scripts/runqemu
>> index 4e05c1bb15..7d1f85f357 100755
>> --- a/scripts/runqemu
>> +++ b/scripts/runqemu
>> @@ -460,6 +460,10 @@ class BaseConfig(object):
>>  except subprocess.CalledProcessError as e:
>>  raise RunQemuError("Could not determine the path to dri
>> drivers on the host via pkg-config.\nPlease install Mesa development files
>> (particularly, dri.pc) on the host machine.")
>>  os.environ['LIBGL_DRIVERS_PATH'] =
>> dripath.decode('utf-8').strip()
>> +uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
>> +preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
>> +preload_paths = [os.path.join(uninative_path, i) for i in
>> preload_items]
>> +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
>>
>>  def check_args(self):
>>  for debug in ("-d", "--debug"):
>> --
>> 2.20.1
>>
>>
>> 
>>
>>
>
> --
> Christopher Larson
> kergoth at gmail dot com
> Founder - BitBake, OpenEmbedded, OpenZaurus
> Senior Software Engineer, Mentor Graphics
>

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161385): 
https://lists.openembedded.org/g/openembedded-core/message/161385
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-02-04 Thread Christopher Larson
What will this do if uninative isn't enabled?

On Fri, Feb 4, 2022 at 1:40 PM Alexander Kanavin 
wrote:

> Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
> that tricks uninative loader into loading pieces of the host libc, if
> the same pieces haven't been previously loaded by native binaries. Mixing
> the two libc versions leads to failures.
>
> This change ensures that the correct (uninative) versions are always in
> use.
>
> Signed-off-by: Alexander Kanavin 
> ---
>  meta/classes/qemuboot.bbclass | 2 +-
>  scripts/runqemu   | 4 
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
> index cc1cbce69d..229bd88527 100644
> --- a/meta/classes/qemuboot.bbclass
> +++ b/meta/classes/qemuboot.bbclass
> @@ -109,7 +109,7 @@ def qemuboot_vars(d):
>  build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
>  'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
>  'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
> -'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
> +'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 'UNINATIVE_LOADER']
>  return build_vars + [k for k in d.keys() if k.startswith('QB_')]
>
>  do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
> diff --git a/scripts/runqemu b/scripts/runqemu
> index 4e05c1bb15..7d1f85f357 100755
> --- a/scripts/runqemu
> +++ b/scripts/runqemu
> @@ -460,6 +460,10 @@ class BaseConfig(object):
>  except subprocess.CalledProcessError as e:
>  raise RunQemuError("Could not determine the path to dri
> drivers on the host via pkg-config.\nPlease install Mesa development files
> (particularly, dri.pc) on the host machine.")
>  os.environ['LIBGL_DRIVERS_PATH'] = dripath.decode('utf-8').strip()
> +uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
> +preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
> +preload_paths = [os.path.join(uninative_path, i) for i in
> preload_items]
> +os.environ['LD_PRELOAD'] = " ".join(preload_paths)
>
>  def check_args(self):
>  for debug in ("-d", "--debug"):
> --
> 2.20.1
>
>
> 
>
>

-- 
Christopher Larson
kergoth at gmail dot com
Founder - BitBake, OpenEmbedded, OpenZaurus
Senior Software Engineer, Mentor Graphics

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161384): 
https://lists.openembedded.org/g/openembedded-core/message/161384
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



[OE-core] [PATCH] runqemu: preload uninative libraries when host gl drivers are in use

2022-02-04 Thread Alexander Kanavin
Some of the host distributions build the drivers in a way (RPATH/RUNPATH)
that tricks uninative loader into loading pieces of the host libc, if
the same pieces haven't been previously loaded by native binaries. Mixing
the two libc versions leads to failures.

This change ensures that the correct (uninative) versions are always in use.

Signed-off-by: Alexander Kanavin 
---
 meta/classes/qemuboot.bbclass | 2 +-
 scripts/runqemu   | 4 
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass
index cc1cbce69d..229bd88527 100644
--- a/meta/classes/qemuboot.bbclass
+++ b/meta/classes/qemuboot.bbclass
@@ -109,7 +109,7 @@ def qemuboot_vars(d):
 build_vars = ['MACHINE', 'TUNE_ARCH', 'DEPLOY_DIR_IMAGE',
 'KERNEL_IMAGETYPE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
 'STAGING_DIR_NATIVE', 'STAGING_BINDIR_NATIVE',
-'STAGING_DIR_HOST', 'SERIAL_CONSOLES']
+'STAGING_DIR_HOST', 'SERIAL_CONSOLES', 'UNINATIVE_LOADER']
 return build_vars + [k for k in d.keys() if k.startswith('QB_')]
 
 do_write_qemuboot_conf[vardeps] += "${@' '.join(qemuboot_vars(d))}"
diff --git a/scripts/runqemu b/scripts/runqemu
index 4e05c1bb15..7d1f85f357 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -460,6 +460,10 @@ class BaseConfig(object):
 except subprocess.CalledProcessError as e:
 raise RunQemuError("Could not determine the path to dri drivers on 
the host via pkg-config.\nPlease install Mesa development files (particularly, 
dri.pc) on the host machine.")
 os.environ['LIBGL_DRIVERS_PATH'] = dripath.decode('utf-8').strip()
+uninative_path = os.path.dirname(self.get("UNINATIVE_LOADER"))
+preload_items = ['libdl.so.2', 'librt.so.1', 'libpthread.so.0']
+preload_paths = [os.path.join(uninative_path, i) for i in 
preload_items]
+os.environ['LD_PRELOAD'] = " ".join(preload_paths)
 
 def check_args(self):
 for debug in ("-d", "--debug"):
-- 
2.20.1


-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161382): 
https://lists.openembedded.org/g/openembedded-core/message/161382
Mute This Topic: https://lists.openembedded.org/mt/88916306/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-