Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Can't configure kernel anymore
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Gentoo on Sparc
View previous topic :: View next topic  
Author Message
gtbX
Tux's lil' helper
Tux's lil' helper


Joined: 11 Oct 2003
Posts: 126

PostPosted: Mon Aug 15, 2022 4:52 am    Post subject: Can't configure kernel anymore Reply with quote

When attempting to upgrade the kernel on my sparc Ultra 5, I can no longer execute `make oldconfig` or `make menuconfig`:

Code:
# make oldconfig
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTLD  scripts/kconfig/conf
{ command -v gcc; } >/dev/null 2>&1 && echo "n" || echo "y": Cannot allocate memory
make[1]: *** [scripts/kconfig/Makefile:77: oldconfig] Error 1
make: *** [Makefile:616: oldconfig] Error 2


There's only 512MB of RAM, but 5GB of swap space available. This used to run without error up until a few weeks ago, and I can still build the kernel with `make` if I copy over my previous .config. I'm assuming some change to the toolchain caused this, since it's affecting the last kernel version I was able to configure as well as the latest one. Any ideas?
Back to top
View user's profile Send private message
Goverp
Advocate
Advocate


Joined: 07 Mar 2007
Posts: 2182

PostPosted: Mon Aug 15, 2022 9:23 am    Post subject: Reply with quote

It might be worth playing with make clean and it's ilk. There may be junk left around from an earlier build that's getting in the way.
_________________
Greybeard
Back to top
View user's profile Send private message
gtbX
Tux's lil' helper
Tux's lil' helper


Joined: 11 Oct 2003
Posts: 126

PostPosted: Mon Aug 15, 2022 4:08 pm    Post subject: Reply with quote

Both `make clean` and `make distclean` run ok

Code:
# make clean
# make distclean
  CLEAN   scripts/basic
  CLEAN   scripts/kconfig


But `make defconfig` fails with the same error as above:
Code:
# make defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
*** Default configuration is based on 'sparc64_defconfig'
{ command -v gcc; } >/dev/null 2>&1 && echo "n" || echo "y": Cannot allocate memory
make[1]: *** [scripts/kconfig/Makefile:87: defconfig] Error 1
make: *** [Makefile:616: defconfig] Error 2
Back to top
View user's profile Send private message
Goverp
Advocate
Advocate


Joined: 07 Mar 2007
Posts: 2182

PostPosted: Tue Aug 16, 2022 9:32 am    Post subject: Reply with quote

It seems to be running out of space when issuing "command -v gcc", which should just return /usr/bin/gcc, so this appears to be a test for the compiler's presence. Either that or "echo" is failing! Perhaps you have something weird in your PATH or LDPATH or similar that's causing "command" to recurse infinitely following symbolic links, or some other such strangeness.
What do you get if you execute the failing line in a terminal session in the same working directory?
_________________
Greybeard
Back to top
View user's profile Send private message
gtbX
Tux's lil' helper
Tux's lil' helper


Joined: 11 Oct 2003
Posts: 126

PostPosted: Thu Aug 18, 2022 4:24 pm    Post subject: Reply with quote

The command itself runs just fine:
Code:
# { command -v gcc; } >/dev/null 2>&1 && echo "n" || echo "y"
n


Running make with V=1 shows that it appears as if the `conf` binary is failing:

Code:
# make defconfig V=1
make -f ./scripts/Makefile.build obj=scripts/basic
make -f ./scripts/Makefile.build obj=scripts/kconfig defconfig
scripts/kconfig/conf  --defconfig=arch/sparc/configs/sparc64_defconfig Kconfig
{ command -v gcc; } >/dev/null 2>&1 && echo "n" || echo "y": Cannot allocate memory
make[1]: *** [scripts/kconfig/Makefile:87: defconfig] Error 1
make: *** [Makefile:616: defconfig] Error 2


I tracked it down to a call to popen() in that binary:
Code:
        p = popen(cmd, "r");
        if (!p) {
                fprintf(stderr, "Unable to popen:\n"); // added by me
                perror(cmd);
                exit(1);
        }

but now I'm stuck. Nothing looks out of place in my PATH (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin). I'm going to try rebuilding glibc in case popen() is broken for some reason, but I think I would have bigger problems if that were the case.
Back to top
View user's profile Send private message
Goverp
Advocate
Advocate


Joined: 07 Mar 2007
Posts: 2182

PostPosted: Fri Aug 19, 2022 9:47 am    Post subject: Reply with quote

What was the command (cmd)?
_________________
Greybeard
Back to top
View user's profile Send private message
gtbX
Tux's lil' helper
Tux's lil' helper


Joined: 11 Oct 2003
Posts: 126

PostPosted: Sat Aug 20, 2022 3:33 am    Post subject: Reply with quote

I added some more debugging output:
Code:
        errno = 0;
        p = popen(cmd, "r");
        if (!p) {
                fprintf(stderr, "Unable to popen \'%s\': %d\n", cmd, errno);
                perror(cmd);
                exit(1);
        }


Output:
Code:
# make defconfig V=1
make -f ./scripts/Makefile.build obj=scripts/basic
make -f ./scripts/Makefile.build obj=scripts/kconfig defconfig
  gcc -Wp,-MMD,scripts/kconfig/.preprocess.o.d -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64      -c -o scripts/kconfig/preprocess.o scripts/kconfig/preprocess.c
  gcc   -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/confdata.o scripts/kconfig/expr.o scripts/kconfig/lexer.lex.o scripts/kconfig/menu.o scripts/kconfig/parser.tab.o scripts/kconfig/preprocess.o scripts/kconfig/symbol.o scripts/kconfig/util.o
scripts/kconfig/conf  --defconfig=arch/sparc/configs/sparc64_defconfig Kconfig
Unable to popen '{ command -v gcc; } >/dev/null 2>&1 && echo "n" || echo "y"': 12
{ command -v gcc; } >/dev/null 2>&1 && echo "n" || echo "y": Cannot allocate memory
make[1]: *** [scripts/kconfig/Makefile:87: defconfig] Error 1
make: *** [Makefile:616: defconfig] Error 2


And the man page for popen explicitly notes that it does not set errno if it can't allocate memory. wtf?

I also created a small test program to popen this command and print its output, which runs as expected:

Code:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    char buf[3] = {0};
    FILE* f = popen("{ command -v gcc; } >/dev/null 2>&1 && echo \"n\" || echo \"y\"", "r");
    if (!f) {
        perror("oops");
        exit(1);
    }

    fread(buf, sizeof(buf) -1, 1, f);
    printf("output of command: %s", buf);

    pclose(f);

    return 0;
}


Code:
$ ./popen
output of command: n
Back to top
View user's profile Send private message
Goverp
Advocate
Advocate


Joined: 07 Mar 2007
Posts: 2182

PostPosted: Sat Aug 20, 2022 11:48 am    Post subject: Reply with quote

Sorry, I missed that cmd was our earlier friend "{command -v gcc; } ... "

IIUC while popen can't return ENOMEM, the underlying fork can, and popen would? return that.

I'm not sure if the following Googlet for "ENOMEM fork" is relevant, but it certainly uses the right words!
https://mail.gnome.org/archives/gtk-devel-list/2018-April/msg00000.html
Maybe this is more helpful:
https://www.mail-archive.com/redhat-list@redhat.com/msg129118.html
_________________
Greybeard
Back to top
View user's profile Send private message
Hu
Administrator
Administrator


Joined: 06 Mar 2007
Posts: 22728

PostPosted: Sat Aug 20, 2022 1:13 pm    Post subject: Reply with quote

Since this is reproducible (though not yet minimized), I suggest using strace on the make that fails and its child processes. That will tell us exactly which system call fails, and from which process, which may help us understand why the attempted test programs are not failing as expected.
Back to top
View user's profile Send private message
gtbX
Tux's lil' helper
Tux's lil' helper


Joined: 11 Oct 2003
Posts: 126

PostPosted: Thu Aug 25, 2022 4:26 am    Post subject: Reply with quote

When running it through strace, the bug disappears

Code:
# strace -ff -o /tmp/kernel_config/conf -e trace=%process make oldconfig V=1
make -f ./scripts/Makefile.build obj=scripts/basic
make -f ./scripts/Makefile.build obj=scripts/kconfig oldconfig
scripts/kconfig/conf  --oldconfig Kconfig
#
# No change to .config
#


At least it runs now, and I can more easily change my configuration. The logs in /tmp/kernel_config are of no help, since naturally, they trace a successful run.


I just noticed a warning produced from my now-building kernel about a missing clone3 syscall:
Code:
  CALL    scripts/checksyscalls.sh
<stdin>:1517:2: warning: #warning syscall clone3 not implemented [-Wcpp]

Might that be part of the issue? When I tried rebuilding glibc, I disabled that USE flag to see if it would help at all (it didn't). Idk if that message refers to the currently running kernel, libc, or the building kernel.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Gentoo on Sparc All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum