Question about psuedo abort errors
Rusty Howell
Hello, My company is using yocto. When building our own recipes, I get pseudo abort errors rather often. I've read the wiki page about them, but I'm not sure exactly what we are doing wrong that is making this happen. We have many recipes for various libraries and applications. The files listed in the abort error log are usually C++ header files. A coworker has told me that setting PACKAGE_DEBUG_SPLIT_STYLE = "debug-without-src" in the local.conf will allow bitbake to ignore this error. But in the end, I would like to understand what exactly is the root cause, so that I can adjust our recipes to fix this. Here is the pseudo.log from the most recent failure. I know a lot of proprietary context is missing for anyone in the OSS community to give super confident answers, but I appreciate any suggestions. Some context here: * We have a legacy git repo that contains the source for several different libraries. * We use CMake recursively to build all the libs from the top level. * Some libs depend on other libs in the repo. * I am trying to build the recipe "libc4statsclient", which is just one of the libs in the repo. * The header file shown in the error is part of another library and recipe. ERROR: Task (/home/rhowell/corex-develop/yocto/sources/c4-distro/meta-c4/recipes-c4/libc4statsdclient/libc4statsdclient_git.bb:do_install) failed with exit code '1' Pseudo log: Setup complete, sending SIGUSR1 to pid 3063620. path mismatch [3 links]: ino 3804719 db '/home/rhowell/corex-develop/yocto/build.imx8mq-core/tmp/work/imx8mq_core-control4-linux/libc4statsdclient/local+AUTOINC+e18ad903a2-r3/package/usr/src/debug/libc4statsdclient/local+AUTOINC+e18ad903a2-r3/git/control4/c4shared/logger/logger.hpp' req '/home/rhowell/corex-develop/yocto/build.imx8mq-core/tmp/work/imx8mq_core-control4-linux/libc4statsdclient/local+AUTOINC+e18ad903a2-r3/git/control4/c4shared/logger/logger.hpp'. Thanks for your time and any suggestions. Rusty Howell |
|
Richard Purdie
On Thu, 2022-06-09 at 10:38 -0600, Rusty Howell wrote:
My company is using yocto. When building our own recipes, I getStarting with the error message, it says that a path of: WORKDIR/git/control4/c4shared/logger/logger.hpp was accessed and it was found in the pseudo database as: WORKDIR/package/usr/src/debug/libc4statsdclient/local+AUTOINC+e18ad903a2-r3/git/control4/c4shared/logger/logger.hpp This doesn't seem so unusual to me since recipe source files would often be hardlinked into package/usr/src/debug as part of the build, however the ordering is backwards, the git/ should be created first, then the WORKDIR/package one. I was thinking this was really odd, then I realised you say this aborted in do_install. WORKDIR/package is created by do_package, *not* do_install which runs before do_package. This probably starts to hint at what is going on. Is this a directory where a previous build has run? If so, what changed between the build runs? My suspicion is that WORKDIR/package is being deleted outside of pseudo and that is confusing things. The question is what/where it is being deleted. Are you using rm_work? The WORKDIR/temp/log.task_order file can be interesting to see which tasks reran and in which order. I appreciate this isn't an answer but it might give you an idea where to look... Cheers, Richard |
|
Rusty Howell
Thanks for the response, Richard. Is the pseudo database located inside TMPDIR? I have deleted the TMPDIR at times to try to get my build back to a working state. If the pseudo db is outside TMPDIR, then that would be the most likely cause of this error. But I would think that other OSS recipes would generate this same error after I delete TMPDIR, not just my company ones.
|
|
Richard Purdie
On Fri, 2022-06-10 at 10:05 -0700, Rusty Howell wrote:
Thanks for the response, Richard. Is the pseudo database locatedThe pseudo database is per workdir (i.e. per recipe) in WORKDIR/pseudo. Cheers, Richard |
|
Tamis <tamtamis@...>
Hello, I read what has been written above but I didn't see a final solution. So I am also trying to understand the error in order to find a solution.
+ install -m 0644 WORKDIR/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_list.h WORKDIR/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_pdinc.h WORKDIR/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_util.h WORKDIR/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_varmsg.h WORKDIR/lib32-las/M-WBS0.1-r0/image/usr/include
abort()ing pseudo client by server request. See https://wiki.yoctoproject.org/wiki/Pseudo_Abort for more details on this. Check logfile: WORDIR/lib32-las/M-WBS0.1-r0/pseudo//pseudo.log
Aborted (core dumped) + bb_exit_handler + ret=134 + echo WARNING: exit code 134 from a shell command. WARNING: exit code 134 from a shell command. + exit 134 --------------------------------------------------------------------------------- And pseudo log error output: ------------------------------------------------------------------ pid 26345 [parent 26344], doing new pid setup and server start Setup complete, sending SIGUSR1 to pid 26344. path mismatch [3 links]: ino 7868999 db 'WORKDIR/lib32-las/M-WBS0.1-r0/package/usr/src/debug/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_list.h' req 'WORKDIR/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_list.h'. db cleanup for server shutdown, 08:38:52.482 memory-to-file backup complete, 08:38:52.482. db cleanup finished, 08:38:52.482 debug_logfile: fd 2 pid 6423 [parent 6422], doing new pid setup and server start Setup complete, sending SIGUSR1 to pid 6422. path mismatch [3 links]: ino 7868999 db 'WORKDIR/lib32-las/M-WBS0.1-r0/package/usr/src/debug/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_list.h' req 'WORKDIR/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_list.h'. db cleanup for server shutdown, 09:13:45.899 memory-to-file backup complete, 09:13:45.899. db cleanup finished, 09:13:45.899 ----------------------------------------------------------------------------------------------------------------------------------- Also the task order is the following: do_cleansstate (20698): log.do_cleansstate.20698 Next invocation do_prepare_recipe_sysroot (23311): log.do_prepare_recipe_sysroot.23311 All above are failures in do_install phase. You see multiple invocations trying to fix the error and adding more debug. In sumo branch we did not have those issues. So something seems to have been changed in between. Right now the dunfell used branch is dunfell-23.0.21 and the latest is dunfell-23.0.22 but I don't see a pseudo fix or something similar. I could also use RM_WORK to that recipe and clean it after build, so the error would disappear but it would be good to understand what is the problem here. If requested I can also sent the full log of install along with the pseudo debug output. Thanks a lot, |
|
Richard Purdie
Hi,
On Thu, 2023-02-23 at 02:27 -0800, Tamis wrote: I know that this might be an old thread but we seem to deal the exactI'm curious if you upgrade to the latest pseudo revision whether this helps at all. There was a fix that was partially related to issues like this. The error either means the file was deleted on disk without pseudo seeing it, then it was created again or that there is some kind of race in file creation confusing pseudo. The latest commits to pseudo try and fix the latter. Cheers, Richard |
|
Tamis <tamtamis@...>
Hello Richard
I see the pseudo SRCREV is different in kirkstone and master from dunfell branch one. I will check the one from kirkstone and even master and I will let you know in any case. |
|
Tamis <tamtamis@...>
Hello Richard, I tested with both kirkstone and master pseudo. Would you require some more traces in order to see something more? |
|
Richard Purdie
I saw you're still having problems even with the latest pseudo
revisions. I'll make some comments below. On Thu, 2023-02-23 at 02:27 -0800, Tamis wrote: Install error:This is saying the file on disk with inode 7868999 is: WORKDIR/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_list.h but the pseudo database thinks this is: WORKDIR/lib32-las/M-WBS0.1-r0/package/usr/src/debug/lib32-las/M-WBS0.1-r0/git/lasiflib/include/lasif_list.h so the question is when was this file created? It would be created by do_package since it is in the /package/ directory. It would seem to be being deleted outside of pseudo context. db cleanup for server shutdown, 08:38:52.482How are you excluding it? I have to wonder if that is somehow breaking things due to dependency changes. Also the task order is the following:Are you saying the first failure is here in the do_install above? do_install (32535): log.do_install.32535This is odd. Why would an rm_work run here? do_deploy_source_date_epoch (4919): log.do_deploy_source_date_epoch.4919This is also odd since if rm_work did run, shouldn't the unpack/patch need to run again? Didn't you say you'd disabled rm_work for this recipe? All above are failures in do_install phase. You see multipleSomething is deleting the files in /package/ which is confusing pseudo. The question is what/when. Stepping through this and seeing when the files there disappear would be the next step to debug it, narrow down when something is deleting them. Cheers, Richard |
|
Chen Qi
This is weird since ${S} is usually in PSEUDO_IGNORE_PATHS.
toggle quoted message
Show quoted text
And if I understand it correctly, if ${S} is in PSEUDO_IGNORE_PATHS, pseudo should not complain about any file under ${S}. Could you please check if your recipe's PSEUDO_INGORE_PATHS contains "WORKDIR/lib32-las/M-WBS0.1-r0/git"? Regards, Qi On 3/6/23 02:08, Richard Purdie wrote:
I saw you're still having problems even with the latest pseudo |
|
Tamis <tamtamis@...>
Hello all, I think Qi found something. But lets see all points raised one by one:
Yes. When I reproduced the error and made my tests. This is odd. Why would an rm_work run here?I do not know. I guess it might runs for every recipe and if that recipe is in RM_WORK_EXCLUDE it just exits? This is also odd since if rm_work did run, shouldn't the unpack/patchI guess that rm_work invocation did not removed anything. Since WORKDIR files were all there. As wrote above it run and then exists doing nothing since RM_WORK_EXCLUDE is set. Something is deleting the files in /package/ which is confusing pseudo.
Regards, |
|
Tamis <tamtamis@...>
Hello all, S = "${WORKDIR}/git" Fixed the paths into do_install. After next invocation of the recipe the error was not reproducible. So I believe that issue was resolved. |
|
Jason Andryuk <jandryuk@...>
On Thu, Mar 9, 2023 at 4:19 AM Tamis <tamtamis@...> wrote:
Wow, I think I've been seeing a similar issue. Thank you so much for the investigation! We have some recipes building Qt libraries & binaries with qmake - https://gitlab.com/vglass/ivc. The QT classes use a split build dir, and we have: S="${WORKDIR}/git/src/usivc/ivclib" B="${SEPB}" SEPB="${WORKDIR}/${B}" However, the QT .pro files are full of references to parent directories like: SOURCES += ../syslog.cpp SOURCES += ../../data-structures/ringbuffer.c Would it be okay to PSEUDO_IGNORE_PATHS .= ",${WORKDIR}/git" to work around the issue? It's still specified within the source directory - just at a higher level. I don't know the QT build system, but ${S} being set down in the subdirectory with the .pro file seems needed for QT. Regards, Jason |
|