https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85704

            Bug ID: 85704
           Summary: cc1 run out of memory memory when it compile
           Product: gcc
           Version: 8.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: haruue at caoyue dot com.cn
  Target Milestone: ---

Created attachment 44089
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44089&action=edit
The output of strace

I run out of memory when I try to build linux-usermode 4.16.7 with gcc 8.1.0.


* The operation to reproduce the problem: 
wget http://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.tar.xz
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/patch-4.16.7.xz
tar -Jxf linux-4.16.tar.xz
xz -d patch-4.16.7.xz
cd linux-4.16/
patch -p1 -i ../patch-4.16.7
make ARCH=um defconfig
ulimit -m 1500000 -v 1500000
make ARCH=um

Then, when it compiles the arch/um/drivers/ubd_kern.c, GCC got into stuck and
exhausts 1.5GB memory in little time.


* Source code of arch/um/drivers/ubd_kern.c in linux kernel tree:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/um/drivers/ubd_kern.c


* The actual command invoked is following:
gcc -Wp,-MD,arch/um/drivers/.ubd_kern.o.d \
        -nostdinc \
        -isystem \
        /usr/lib/gcc/x86_64-pc-linux-gnu/8.1.0/include \
        -I./arch/um/include \
        -I./arch/um/include/generated \
        -I./include \
        -I./arch/um/include/uapi \
        -I./arch/um/include/generated/uapi \
        -I./include/uapi \
        -I./include/generated/uapi \
        -include \
        ./include/linux/kconfig.h \
        -D__KERNEL__ \
        -m64 \
        -I./arch/x86/um \
        -I./arch/x86/include \
        -I./arch/x86/include/uapi \
        -I./arch/x86/include/generated \
        -I./arch/x86/include/generated/uapi \
        -Wall \
        -Wundef \
        -Wstrict-prototypes \
        -Wno-trigraphs \
        -fno-strict-aliasing \
        -fno-common \
        -fshort-wchar \
        -Werror-implicit-function-declaration \
        -Wno-format-security \
        -std=gnu89 \
        -fno-PIE \
        -mcmodel=large \
        -fno-builtin \
        -m64 \
        -funit-at-a-time \
        -D__arch_um__ \
        -I./arch/um/include/shared \
        -I./arch/x86/um/shared \
        -I./arch/um/include/shared/skas \
        -Dvmap=kernel_vmap \
        -Dlongjmp=kernel_longjmp \
        -Dsetjmp=kernel_setjmp \
        -Din6addr_loopback=kernel_in6addr_loopback \
        -Din6addr_any=kernel_in6addr_any \
        -Dstrrchr=kernel_strrchr \
        -D_LARGEFILE64_SOURCE \
        -Derrno=kernel_errno \
        -Dsigprocmask=kernel_sigprocmask \
        -Dmktime=kernel_mktime \
        -fno-delete-null-pointer-checks \
        -Wno-frame-address \
        -Wno-format-truncation \
        -Wno-format-overflow \
        -Wno-int-in-bool-context \
        -Os \
        -Wno-maybe-uninitialized \
        --param=allow-store-data-races=0 \
        -DCC_HAVE_ASM_GOTO \
        -Wframe-larger-than=1024 \
        -fno-stack-protector \
        -Wno-unused-but-set-variable \
        -Wno-unused-const-variable \
        -fno-omit-frame-pointer \
        -fno-optimize-sibling-calls \
        -fno-var-tracking-assignments \
        -g \
        -Wdeclaration-after-statement \
        -Wno-pointer-sign \
        -fno-strict-overflow \
        -fno-merge-all-constants \
        -fmerge-constants \
        -fno-stack-check \
        -fconserve-stack \
        -Werror=implicit-int \
        -Werror=strict-prototypes \
        -Werror=date-time \
        -Werror=incompatible-pointer-types \
        -Werror=designated-init \
        -Wno-packed-not-aligned \
        -DKBUILD_BASENAME='"ubd_kern"' \
        -DKBUILD_MODNAME='"ubd"' \
        -c -o \
        arch/um/drivers/ubd_kern.o \
        arch/um/drivers/ubd_kern.c;


I feel sorry because I know little about gcc implementation. I attached the
strace output of above gcc command. It seem that gcc just mmap more and more
memory before memory run out.

And everything is OK in GCC 7.3.1. 

Is this a bug of gcc or just some problem in the kernel code?

Reply via email to