Subject: Re: New snapshot coming soon...
To: None <cgd@auchentoshan.pdl.cs.cmu.edu>
From: Jonathan Stone <jonathan@DSG.Stanford.EDU>
List: port-pmax
Date: 03/05/1997 20:09:38
"Chris G. Demetriou" <cgd@cs.cmu.edu> writes:


>> Any dynamicaly-linked binary has a reference to the *exact* library
>> against which it was linked -- e.g., libc.so.12.11 for the current
>> snapshot.  The dynamic linker (ld.so) can't use newer versions of
>> libraries to resolve those references (eg., 12.11.x or 12.12), like
>> the SunOS-style  ld.so used on a.out platforms can.

>"... then this is broken."

Yup, and that's why I was busy building a new snapshot that does it
right, (.e., just as you suggested). I've committed changes that add
the symlinks to the snapshot, changed the bsd.lib.mk rules to DTRT,
and I'm busy recompiling and relinking with that, to

	(a) be Really Sure it all works; and
	(b) so that anyone who installed the recent snapshot
	    can install one that does things `right'.

Here's the patch to bsd.lib.mk I'm using; criticism positively
encouraged.  (I thought I sent it to cgd privately already, but
the warning above makes me wonder if I did...)


--Jonathan


*** DIST/bsd.lib.mk	Tue Feb 18 04:17:10 1997
--- bsd.lib.mk	Wed Mar  5 04:09:50 1997
***************
*** 19,24 ****
--- 19,76 ----
  .SUFFIXES:
  .SUFFIXES: .out .o .po .so .S .s .c .cc .C .f .y .l .ln .m4
  
+ 
+ # Set PICFLAGS to cc flags for producing position-independent code,
+ # if not already set.  Includes -DPIC, if required.
+ 
+ # Data-driven table using make variables to control  how shared libraries
+ # are built for different platforms and object formats.
+ # SHLIB_TYPE:		currently either "ELF" or "a.out".
+ # SHLIB_SOVERSION:  	version number to be compiled into a shared library
+ #                    	via -soname. Usualy ${SHLIB_MAJOR} on ELF.
+ #   			NetBSD/pmax used to use ${SHLIB_MAJOR}.{SHLIB-MINOR}.
+ # SHLIB_LDSTARTFILE:	???
+ # SHLIB_LDENDTILE:	??
+ # CPICFLAGS:	flags to compile .c files for .so objects.
+ # APICFLAGS:	flags to assemble .S files for .so objects.
+ 
+ .if (${MACHINE_ARCH} == "alpha")
+ 
+ SHLIB_TYPE=ELF
+ SHLIB_LDSTARTFILE= /usr/lib/crtbeginS.o
+ SHLIB_LDENDFILE= /usr/lib/crtendS.o
+ SHLIB_SOVERSION=${SHLIB_MAJOR}
+ CPICFLAGS ?= -fpic -DPIC
+ APICFLAGS ?= -DPIC
+ 
+ .elif (${MACHINE_ARCH} == "mips")
+ 
+ SHLIB_TYPE=ELF
+ # still use gnu-derived ld.so on pmax; don't have or need lib<>.so support.
+ SHLIB_LDSTARTFILE=
+ SHLIB_LDENDFILE=
+ SHLIB_SOVERSION=${SHLIB_MAJOR}
+ 
+ # On mips, all libs need to be compiled with ABIcalls, not just sharedlibs.
+ CPICFLAGS?=
+ APICFLAGS?=
+ #CPICFLAGS?= -fpic -DPIC
+ #APICFLAGS?= -DPIC
+ 
+ # so turn shlib PIC flags on for ${CPP}, ${CC}, and ${AS} as follows:
+ AINC+=-DPIC -DABICALLS
+ COPTS+=	-fPIC ${AINC}
+ AFLAGS+= -fPIC
+ AS+=	-KPIC
+ 
+ .else
+ 
+ SHLIB_TYPE=a.out
+ SHLIB_SOVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR}
+ 
+ .endif
+ 
+ 
  CFLAGS+=	${COPTS}
  
  .c.o:
***************
*** 34,41 ****
  	@rm -f ${.TARGET}.o
  
  .c.so:
! 	@echo ${COMPILE.c:Q} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}
! 	@${COMPILE.c} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
  	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
  	@rm -f ${.TARGET}.o
  
--- 86,93 ----
  	@rm -f ${.TARGET}.o
  
  .c.so:
! 	@echo ${COMPILE.c:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
! 	@${COMPILE.c} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o
  	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
  	@rm -f ${.TARGET}.o
  
***************
*** 55,62 ****
  	@rm -f ${.TARGET}.o
  
  .cc.so .C.so:
! 	@echo ${COMPILE.cc:Q} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}
! 	@${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
  	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
  	@rm -f ${.TARGET}.o
  
--- 107,114 ----
  	@rm -f ${.TARGET}.o
  
  .cc.so .C.so:
! 	@echo ${COMPILE.cc:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}
! 	@${COMPILE.cc} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o
  	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
  	@rm -f ${.TARGET}.o
  
***************
*** 73,86 ****
  	@rm -f ${.TARGET}.o
  
  .S.so .s.so:
! 	@echo ${COMPILE.S:Q} ${PICFLAG} -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
! 	@${COMPILE.S} ${PICFLAG} -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
  	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
  	@rm -f ${.TARGET}.o
  
- .if !defined(PICFLAG)
- PICFLAG=-fpic
- .endif
  
  .if !defined(NOPROFILE)
  _LIBS=lib${LIB}.a lib${LIB}_p.a
--- 125,135 ----
  	@rm -f ${.TARGET}.o
  
  .S.so .s.so:
! 	@echo ${COMPILE.S:Q} ${APICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
! 	@${COMPILE.S} ${APICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
  	@${LD} -x -r ${.TARGET}.o -o ${.TARGET}
  	@rm -f ${.TARGET}.o
  
  
  .if !defined(NOPROFILE)
  _LIBS=lib${LIB}.a lib${LIB}_p.a
***************
*** 126,139 ****
  lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: lib${LIB}_pic.a ${DPADD}
  	@echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
  	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
! .if (${MACHINE_ARCH} != "alpha")
  	$(LD) -x -Bshareable -Bforcearchive \
  	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} lib${LIB}_pic.a ${LDADD}
! .else
! 	$(LD) -shared -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
! 	    -soname lib${LIB}.so.${SHLIB_MAJOR} /usr/lib/crtbeginS.o \
  	    --whole-archive lib${LIB}_pic.a --no-whole-archive ${LDADD} \
! 	    /usr/lib/crtendS.o
  .endif
  
  LOBJS+=	${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
--- 175,188 ----
  lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: lib${LIB}_pic.a ${DPADD}
  	@echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
  	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
! .if (${SHLIB_TYPE} == "a.out")
  	$(LD) -x -Bshareable -Bforcearchive \
  	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} lib${LIB}_pic.a ${LDADD}
! .elif (${SHLIB_TYPE} == "ELF")
! 	$(LD) -x -shared -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
! 	    -soname lib${LIB}.so.${SHLIB_SOVERSION}  ${SHLIB_LDSTARTFILE} \
  	    --whole-archive lib${LIB}_pic.a --no-whole-archive ${LDADD} \
! 	    ${SHLIB_LDENDFILE}
  .endif
  
  LOBJS+=	${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
***************
*** 193,199 ****
  .if !defined(NOPIC) && defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
  	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
  	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} ${DESTDIR}${LIBDIR}
! .if (${MACHINE_ARCH} == "alpha")
  	rm -f ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}
  	ln -s lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
  	    ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}
--- 242,248 ----
  .if !defined(NOPIC) && defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
  	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
  	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} ${DESTDIR}${LIBDIR}
! .if (${SHLIB_TYPE} == "ELF")
  	rm -f ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}
  	ln -s lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
  	    ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}