On multi-TB storage array with XFS filesystem I have to enable 64bit inodes recently (inode64 mount option). Having test.c with: int main(void){ return 0; } compiles fine for one file, but if i copy it to another one (several times till it got the right inode number) it produces: root@matylda1: /mnt/data/kasparek# LC_ALL=C gcc -o test.o test-10356.c cc1: error: test-10356.c: Value too large for defined data type The only difference I believe is inode number, definitely not the content of the file: root@matylda1: /mnt/data/kasparek# stat test.c File: `test.c' Size: 30 Blocks: 8 IO Block: 4096 regular file Device: 810h/2064d Inode: 10853690 Links: 1 root@matylda1: /mnt/data/kasparek# stat test-10356.c File: `test-10356.c' Size: 30 Blocks: 8 IO Block: 4096 regular file Device: 810h/2064d Inode: 15447948189 Links: 1 from strace I found that cc1 is doing fstat64 call on the source code file and then finishes with this message. The first this I need to help with is how to check if the code that causes this (expect somewhere is used 32bit variable to store the inode) is from gcc itself or it is some third-party library. I checked latest version of 4.0, 4.1, 4.2, 4.3, 4.4, 4.5 branches and all behave the same. The system is x86_64 2.6.32.12 kernel on CentOS 5.4. All GCCs are 32bit binaries (with cross compiler for x86_64, mips, arm and alpha having the same behavior). Thanks in advance.
> root@matylda1: /mnt/data/kasparek# LC_ALL=C gcc -o test.o test-10356.c > cc1: error: test-10356.c: Value too large for defined data type > The first this I need to help with is how to > check if the code that causes this (expect somewhere is used 32bit variable to > store the inode) is from gcc itself or it is some third-party library. I Execute gcc -o test.o test-10356.c -### 2>&1 | grep cc1 to get the cc1 command line. Then use gdb --args <cc1 cmdline> to debug the compiler. Getting a backtrace before the abort would be nice.
This is know. GCC does not use LFS and thus fails. A patch to fix that was once applied but broke AIX and thus was reverted.
(In reply to comment #1) > to get the cc1 command line. Then use gdb --args <cc1 cmdline> to debug the > compiler. Getting a backtrace before the abort would be nice. (gdb) bt #0 open_file (file=0x8a64148) at /usr/local/lib/gcc/i686-pc-linux-gnu/4.3.4/include-fixed/sys/stat.h:510 #1 0x0866d707 in _cpp_find_file (pfile=0x8a5bb80, fname=0xff8d636f "test-10356.c", start_dir=0x8a5bbf4, fake=0 '\0', angle_brackets=0) at ../../libcpp/files.c:378 #2 0x0866e2cc in cpp_read_main_file (pfile=0x8a5bb80, fname=0xff8d636f "test-10356.c") at ../../libcpp/init.c:561 #3 0x080f94a1 in c_common_post_options (pfilename=0x8945fdc) at ../../gcc/c-opts.c:1197 #4 0x08339410 in toplev_main (argc=11, argv=0xff8d4874) at ../../gcc/toplev.c:1810 #5 0x08118cb2 in main (argc=Cannot access memory at address 0x100 ) at ../../gcc/main.c:35 I belive the problematic stat is gcc/files.c:232 (gcc-4.5.0). Would it be possible to add config option to enable LFS that may be disabled by default?
Hello, is there any progress in this, may I help with something?
I run into this myself today with an older compiler. This has been fixed in svn commit 166230. The fix is part of gcc-4.6.0+ and it does not look like it has been backported. It can be closed now :)
Fixed so closing; 4.6.
Fixed so closing; 4.6.x and above is only supported for fixing bugs now.