1

I inherited a legacy system that looks like this.

$ uname -a
Linux pos-sthlm-globe-as-209 2.4.19-dxx #10 Thu Dec 22 15:47:12 CET 2005 i686 GNU/Linux
niklros@pos-sthlm-globe-as-209:~$ gcc --version
2.95.4

It has source code that I can build (it is a 32-bit driver for a PCI card that is used):

# make clean
test -z "mtn.o" || rm -f mtn.o
rm -rf .libs _libs
rm -f *.o core *.core
rm -f *.lo
pos-sthlm-globe-as-209:~/mtn/dxxmtn# ls
BusMastHostApi.h   bmhostif_parsed.h  proc.c        uaa.c
Makefile       cc.c           queue.c       uaa.h
Makefile.am    ct812.c        ram.c     uaa_msg.c
Makefile.in    drawbridge.c       ringbuf.c     uniporte_parsed.c
PORT           dump.c         src       uniporte_parsed.h
TODO           log.c          telem.c       untar
UniPorte.h     main.c         telem_cmd.c   usr
aaa        memring.c          telem_cons.c  vpd.c
ac         mtn            telem_misc.c
bc.c           mtn2100.rc         tmp
bmhostif_parsed.c  mtn_poll.c         tty.c
pos-sthlm-globe-as-209:~/mtn/dxxmtn# make
if [ ! -f uniporte_parsed.c -a ! -f uniporte_parsed.h ]; then \
    rm -f uniporte_parsed.c uniporte_parsed.h; \
    ../utils/grabenum.pl /usr/local/dxx/include/UniPorte.h -header > uniporte_parsed.c; \
    for enum in uniporte_managed_object_indices uniport_disconnect_reason_enumeration uniporte_port_state_enumeration ; do \
        echo "Grabbing enumerator $enum from /usr/local/dxx/include/UniPorte.h into uniporte_parsed.c..."; \
        ../utils/grabenum.pl /usr/local/dxx/include/UniPorte.h $enum -array >> uniporte_parsed.c; \
        echo "extern char *$enum[];" >> uniporte_parsed.h; \
    ...
/usr/src/linux/include/linux/sched.h:770: warning: called from here
/bin/sh ../libtool --mode=link gcc  -O -D__KERNEL__ -DMODULE -DMODVERSIONS -Wall -Winline        -o mtn.o -r uniporte_parsed.o bmhostif_parsed.o uaa.o uaa_msg.o main.o bc.o cc.o mtn_poll.o tty.o ram.o vpd.o drawbridge.o ct812.o dump.o telem.o telem_cmd.o telem_misc.o queue.o ringbuf.o telem_cons.o log.o  
mkdir .libs
/usr/bin/ld -r -o mtn.o uniporte_parsed.o bmhostif_parsed.o uaa.o uaa_msg.o main.o bc.o cc.o mtn_poll.o tty.o ram.o vpd.o drawbridge.o ct812.o dump.o telem.o telem_cmd.o telem_misc.o queue.o ringbuf.o telem_cons.o log.o   
pos-sthlm-globe-as-209:~/mtn/dxxmtn# ls
BusMastHostApi.h   ct812.c   proc.c        tmp
Makefile       ct812.o   queue.c       tty.c
Makefile.am    drawbridge.c  queue.o       tty.o
Makefile.in    drawbridge.o  ram.c         uaa.c
PORT           dump.c    ram.o         uaa.h
TODO           dump.o    ringbuf.c     uaa.o
UniPorte.h     log.c     ringbuf.o     uaa_msg.c
aaa        log.o     src           uaa_msg.o
ac         main.c    telem.c       uniporte_parsed.c
bc.c           main.o    telem.o       uniporte_parsed.h
bc.o           memring.c     telem_cmd.c   uniporte_parsed.o
bmhostif_parsed.c  mtn       telem_cmd.o   untar
bmhostif_parsed.h  mtn.o     telem_cons.c  usr
bmhostif_parsed.o  mtn2100.rc    telem_cons.o  vpd.c
cc.c           mtn_poll.c    telem_misc.c  vpd.o
cc.o           mtn_poll.o    telem_misc.o
pos-sthlm-globe-as-209:~/mtn/dxxmtn# 

Now I try to replicate it in a Virtual Box VM on my local machine but it seems I fail and I think it is because gcc is version 3 and not version 2.

# uname -a     
Linux debian 2.4.27-3-386 #1 Wed Dec 6 00:38:33 UTC 2006 i686 GNU/Linux
debian:/home/developer/mtn-copy/mtn-copy/mtn/dxxmtn# gcc --version
gcc (GCC) 3.3.5 (Debian 1:3.3.5-13)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

debian:/home/developer/mtn-copy/mtn-copy/mtn/dxxmtn# make clean
test -z "mtn.o" || rm -f mtn.o
rm -rf .libs _libs
rm -f *.o core *.core
rm -f *.lo
debian:/home/developer/mtn-copy/mtn-copy/mtn/dxxmtn# ls
aaa        gcc-2.95.3.tar  proc.c    tty.c
ac         log.c       queue.c   uaa.c
bc.c           main.c      ram.c     uaa.h
bmhostif_parsed.c  Makefile    ringbuf.c     uaa_msg.c
bmhostif_parsed.h  Makefile.am     src       UniPorte.h
BusMastHostApi.h   Makefile.in     telem.c   uniporte_parsed.c
cc.c           memring.c       telem_cmd.c   uniporte_parsed.h
ct812.c        mtn         telem_cons.c  untar
drawbridge.c       mtn2100.rc      telem_misc.c  usr
dump.c         mtn_poll.c      tmp       usr-src-linux-include
gcc-2.95.3     PORT        TODO      vpd.c
debian:/home/developer/mtn-copy/mtn-copy/mtn/dxxmtn# make
if [ ! -f uniporte_parsed.c -a ! -f uniporte_parsed.h ]; then \
  rm -f uniporte_parsed.c uniporte_parsed.h; \
 ...
/usr/src/linux/include/linux/signal.h:205: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:149: warning: called from here
gcc -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/local/dxx/include -I../mtnadm -I/usr/src/linux/include -include /usr/src/linux/include/linux/modversions.h    -O -D__KERNEL__ -DMODULE -DMODVERSIONS -Wall -Winline         -c telem_misc.c
In file included from mtn/mtn.h:436,
         from mtn/telem_misc.h:28,
         from telem_misc.c:34:
/usr/src/linux/include/linux/malloc.h:4:2: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
In file included from mtn/mtn.h:443,
         from mtn/telem_misc.h:28,
         from telem_misc.c:34:
/usr/src/linux/include/asm/uaccess.h: In function `__constant_copy_from_user':
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/asm/uaccess.h:561: warning: called from here
/usr/src/linux/include/asm/siginfo.h: At top level:
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
/usr/src/linux/include/asm/siginfo.h:223: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
/usr/src/linux/include/asm/siginfo.h:226: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:149: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:161: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:193: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:205: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:149: warning: called from here
gcc -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/local/dxx/include -I../mtnadm -I/usr/src/linux/include -include /usr/src/linux/include/linux/modversions.h    -O -D__KERNEL__ -DMODULE -DMODVERSIONS -Wall -Winline         -c queue.c
In file included from mtn/mtn.h:436,
         from mtn/queue.h:54,
         from queue.c:70:
/usr/src/linux/include/linux/malloc.h:4:2: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
In file included from mtn/mtn.h:443,
         from mtn/queue.h:54,
         from queue.c:70:
/usr/src/linux/include/asm/uaccess.h: In function `__constant_copy_from_user':
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/asm/uaccess.h:561: warning: called from here
queue.c: In function `mtn_data_queue_add':
/usr/src/linux/include/asm/uaccess.h:557: warning: inlining failed in call to `__constant_copy_from_user'
queue.c:367: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
queue.c:379: warning: called from here
queue.c: In function `mtn_data_queue_get':
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
queue.c:443: warning: called from here
/usr/src/linux/include/asm/siginfo.h: At top level:
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
/usr/src/linux/include/asm/siginfo.h:223: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
/usr/src/linux/include/asm/siginfo.h:226: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:149: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:161: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:193: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:205: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:149: warning: called from here
gcc -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/local/dxx/include -I../mtnadm -I/usr/src/linux/include -include /usr/src/linux/include/linux/modversions.h    -O -D__KERNEL__ -DMODULE -DMODVERSIONS -Wall -Winline         -c ringbuf.c
ringbuf.c:43:19: errno.h: No such file or directory
In file included from ringbuf.c:45:
/usr/src/linux/include/asm/uaccess.h: In function `__constant_copy_from_user':
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/asm/uaccess.h:561: warning: called from here
In file included from mtn/mtn.h:436,
         from ringbuf.c:47:
/usr/src/linux/include/linux/malloc.h:4:2: warning: #warning linux/malloc.h is deprecated, use linux/slab.h instead.
ringbuf.c: In function `mtn_ringbuf_readline':
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
ringbuf.c:121: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
ringbuf.c:123: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
ringbuf.c:124: warning: called from here
ringbuf.c: In function `mtn_ringbuf_read':
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
ringbuf.c:151: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
ringbuf.c:153: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
ringbuf.c:154: warning: called from here
ringbuf.c: In function `mtn_ringbuf_read_to_user':
/usr/src/linux/include/asm/uaccess.h:548: warning: inlining failed in call to `__constant_copy_to_user'
ringbuf.c:181: warning: called from here
/usr/src/linux/include/asm/uaccess.h:548: warning: inlining failed in call to `__constant_copy_to_user'
ringbuf.c:185: warning: called from here
/usr/src/linux/include/asm/uaccess.h:548: warning: inlining failed in call to `__constant_copy_to_user'
ringbuf.c:185: warning: called from here
ringbuf.c: In function `mtn_ringbuf_write':
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
ringbuf.c:214: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
ringbuf.c:216: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
ringbuf.c:217: warning: called from here
ringbuf.c: In function `mtn_ringbuf_write_from_user':
/usr/src/linux/include/asm/uaccess.h:557: warning: inlining failed in call to `__constant_copy_from_user'
ringbuf.c:245: warning: called from here
/usr/src/linux/include/asm/uaccess.h:557: warning: inlining failed in call to `__constant_copy_from_user'
ringbuf.c:249: warning: called from here
/usr/src/linux/include/asm/uaccess.h:557: warning: inlining failed in call to `__constant_copy_from_user'
ringbuf.c:249: warning: called from here
/usr/src/linux/include/asm/siginfo.h: At top level:
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
/usr/src/linux/include/asm/siginfo.h:223: warning: called from here
/usr/src/linux/include/asm/string.h:222: warning: inlining failed in call to `__constant_memcpy'
/usr/src/linux/include/asm/siginfo.h:226: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:149: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:161: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:193: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:205: warning: called from here
/usr/src/linux/include/asm/string.h:457: warning: inlining failed in call to `__constant_c_and_count_memset'
/usr/src/linux/include/linux/signal.h:149: warning: called from here
make: *** [ringbuf.o] Error 1
debian:/home/developer/mtn-copy/mtn-copy/mtn/dxxmtn# 

Is my conclusion correct that the failed build in the VM is because of the difference in gcc versions or is there some other reason for the failed build?

3
  • 2
    BTW, you can have several versions of GCC installed at once. Jul 31 '17 at 7:54
  • @StephenKitt It seems that there are only warnings but still a failed build. The make output is too many lines for a question but I pasted it pastebin.com/e3q1NHJg My versions of Linux differ very little, both are v 2,4.x Jul 31 '17 at 7:54
  • @BasileStarynkevitch Nice. I hope that is why I get an error after the build and that I only need to install gcc v2.9. Jul 31 '17 at 7:55
4

The severe error you've got is from the preprocessor phase (for some #include <errno.h> line):

ringbuf.c:43:19: errno.h: No such file or directory

(the other diagnostics are just warnings; you should understand each of them, but you could -probably wrongly- choose to ignore them; I recommend improving the code to get no warnings with a recent version of GCC invoked with -Wall -Wextra, currently GCC 7 in july 2017)

On my Debian system, <errno.h> header is in /usr/include/errno.h provided by the libc6-dev package. You should install something equivalent.

As I commented, you can have several versions of gcc on your system (on my recent Debian, I can install gcc-5 and gcc-6 & gcc-7 packages, and I also could compile and build some recent version under /usr/local/bin/).
However, <errno.h> is not a compiler-supplied header, so installing another GCC (e.g. downgrading it) won't help.

2
  • Wonderful. Now it seems like it compiles without error. Jul 31 '17 at 8:06
  • 1
    Hah, the error actually appears in the part quoted in the question... Jul 31 '17 at 8:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.