🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Tom McConnell Tue, 22 Dec 1992 02:59
gcc-2.3.2 / NCR-3350 SVR4.02 <sys/endian.h> bug
#1413
Author: Tom McConnell
Date: Tue, 22 Dec 1992 02:59
104 lines
4272 bytes
  Howdy.

  I have finished porting gcc-2.3.2 to the NCR-3350, and used it to compile
X11R5p21 and libg++-2.3. This report concerns the <sys/endian.h> include file.

    Cheers,

    Tom McConnell

 Tom McConnell          |     Internet: tmcconne@sedona.intel.com
 Intel, Corp. C3-91     |     Phone: (602)-554-8229
 5000 W. Chandler Blvd. | The opinions expressed are my own. No one in 
 Chandler, AZ  85226    | their right mind would claim them.

Problem: The definition of "htonl" and "ntohl" differ between <sys/endian.h>
        and <sys/byteorder.h>.

Program: endian.c

/* Test <endian.h> */
#include <stdio.h>
#include <netinet/in.h>
main()
{
    printf("<endian.h> \n");
}

Example compile:

gcc -v    -c endian.c -o endian.o
Reading specs from /stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/specs
gcc version 2.3.2
 /stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/cpp -lang-c -v -undef -D__GNUC__=2
 -Di386 -Dunix -D__svr4__ -D__i386__ -D__unix__ -D__svr4__ -D__i386 -D__unix
 -D__svr4__ -Asystem(unix) -Acpu(i386) -Amachine(i386) endian.c
 /var/tmp/cca003Su.i
GNU CPP version 2.3.2 (i386 System V Release 4)
 /stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/cc1 /var/tmp/cca003Su.i -quiet
 -dumpbase endian.c -version -o /var/tmp/cca003Su.s
GNU C version 2.3.2 (i386 System V Release 4) compiled by GNU C version 2.3.2.
In file included from
 /stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/include/sys/endian.h:48, from
 /stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/include/netinet/in.h:42, from
 endian.c:3:
/stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/include/sys/byteorder.h:27:
 conflicting types for `htonl'
/stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/include/sys/endian.h:43:
 previous declaration of `htonl'
/stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/include/sys/byteorder.h:28: warning:
 static declaration for `htons' follows non-static
/stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/include/sys/byteorder.h:29:
 conflicting types for `ntohl'
/stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/include/sys/endian.h:43:
 previous declaration of `ntohl'
/stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/include/sys/byteorder.h:30: warning:
 static declaration for `ntohs' follows non-static
gmake: *** [endian.o] Error 1

Analysis: There are really two problems here: htonl() and ntohl() in endian.h
         pass different parameters (unsigned int) than htonl() and ntohl()
         in byteorder.h (unsigned long). Since the gcc-2.3.2 supplied
         byteorder.h also includes the assembly code, the easy way out was 
         to assume gcc-2.3.2 knew what it was doing. This may not be a good
         assumption, but it seems to work.

          The second problem is that if both <sys/endian.h> and
         <sys/byteorder.h> define the number conversion routines (ntohl, etc.),
         the linker will complain about "fatal error: symbol `htonl`
         multiply-defined".

Solution: Modify <sys/endian.h> so that if gcc is being used, do not define
         the number conversion routines. Instead, rely on <sys/byteorder.h>
         to define them.

Patch:
This patch file was created on Tue Dec 22 09:38:19 MST 1992.

The top level directory was /a/stor/gnu/iAWS/lib/gcc-lib/ncr3000/2.3.2/include


*** ./sys/endian.h_orig	Tue Dec 22 09:37:35 1992
--- ./sys/endian.h	Mon Dec 21 20:35:10 1992
***************
*** 39,42 ****
--- 39,43 ----
  #define	htons(x)	(x)
  #else
+ #   if !defined (__GNUC__) && !defined (__GNUG__)
  #	ifdef	__STDC__
  		unsigned short	ntohs(unsigned int), htons(unsigned int);
***************
*** 46,50 ****
  		unsigned long	ntohl(), htonl();
  #	endif
! #		include	<sys/byteorder.h>
  #endif
  
--- 47,52 ----
  		unsigned long	ntohl(), htonl();
  #	endif
! #   endif /* !defined (__GNUC__) && !defined (__GNUG__) */
! #   include	<sys/byteorder.h>
  #endif
  
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads