diff options
author | Matthew Dempsky <matthew@cvs.openbsd.org> | 2012-08-15 18:08:23 +0000 |
---|---|---|
committer | Matthew Dempsky <matthew@cvs.openbsd.org> | 2012-08-15 18:08:23 +0000 |
commit | a674a01d727c6ad840cd1284e1bcb9217a93823f (patch) | |
tree | 5c99dd5efd60f2c64f8e6117f6676ccc30e14bed | |
parent | 2d83e16befda8ed92a0b0f464fca548fa1e0747c (diff) |
A couple small but long anticipated changes:
- Link libpthread.so with -znodlopen. Because libpthread overrides
the weak symbols in libc, we can't allow it to be dynamically
loaded or else libc's weak symbols might have already been
resolved by ld.so. (Also, major bump because this is technically
a backwards incompat change in behavior, although dlopen()ing
libpthread never really worked.)
- Link libc.so with -nodefaultlibs -lgcc. This ensures that libc
doesn't try to link against itself (which ld.so wouldn't like).
- Change GCC 4 to link shared objects with -lpthread and -lc as
appropriate, now that there's no issues with doing so. This means
that it's no longer necessary to patch software to use -pthread
instead of -lpthread. (Ports tree rejoice!)
Also, to preemptively answer this question: No, this does not
eliminate the need for LD_PRELOAD=libpthread.so. That's a separate
issue that won't be resolved until we eliminate libc's weak symbols.
Discussed extensively on email and icb over the past few months.
ok deraadt
-rw-r--r-- | gnu/gcc/gcc/config/openbsd-libpthread.h | 2 | ||||
-rw-r--r-- | lib/libc/Makefile | 3 | ||||
-rw-r--r-- | lib/librthread/Makefile | 4 | ||||
-rw-r--r-- | lib/librthread/shlib_version | 2 |
4 files changed, 6 insertions, 5 deletions
diff --git a/gnu/gcc/gcc/config/openbsd-libpthread.h b/gnu/gcc/gcc/config/openbsd-libpthread.h index 41292631389..28b731c6891 100644 --- a/gnu/gcc/gcc/config/openbsd-libpthread.h +++ b/gnu/gcc/gcc/config/openbsd-libpthread.h @@ -19,5 +19,5 @@ along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define OBSD_LIB_SPEC "%{!shared:%{pthread:-lpthread%{p:_p}%{!p:%{pg:_p}}}} %{!shared:-lc%{p:_p}%{!p:%{pg:_p}}}" +#define OBSD_LIB_SPEC "%{pthread:-lpthread%{!shared:%{p|pg:_p}}} -lc%{!shared:%{p|pg:_p}}" diff --git a/lib/libc/Makefile b/lib/libc/Makefile index 54746afbaae..dda879185c7 100644 --- a/lib/libc/Makefile +++ b/lib/libc/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.30 2012/08/02 13:38:38 okan Exp $ +# $OpenBSD: Makefile,v 1.31 2012/08/15 18:08:22 matthew Exp $ # # The NLS (message catalog) functions are always in libc. To choose that # strerror(), perror(), strsignal(), psignal(), etc. actually call the NLS @@ -12,6 +12,7 @@ LIB=c CLEANFILES+=tags #CFLAGS+=-Werror +LDADD=-nodefaultlibs -lgcc LIBCSRCDIR=${.CURDIR} .include "${LIBCSRCDIR}/Makefile.inc" diff --git a/lib/librthread/Makefile b/lib/librthread/Makefile index aa9be7bab36..f81484f838a 100644 --- a/lib/librthread/Makefile +++ b/lib/librthread/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.31 2012/08/02 13:38:39 okan Exp $ +# $OpenBSD: Makefile,v 1.32 2012/08/15 18:08:22 matthew Exp $ # For ``COMPILER_VERSION'' .include <bsd.own.mk> @@ -13,7 +13,7 @@ CFLAGS+=-Wmissing-prototypes CFLAGS+=-Wstrict-prototypes CFLAGS+=-Wsign-compare CFLAGS+=-I${LIBCSRCDIR}/arch/${MACHINE_CPU} -I${LIBCSRCDIR}/include -LDADD = -Wl,-znodelete,-zinitfirst +LDADD = -Wl,-znodelete,-zinitfirst,-znodlopen .PATH: ${.CURDIR}/arch/${MACHINE_CPU} SRCS= rthread.c \ diff --git a/lib/librthread/shlib_version b/lib/librthread/shlib_version index 84e2c2920d7..ffdd3d2d569 100644 --- a/lib/librthread/shlib_version +++ b/lib/librthread/shlib_version @@ -1,2 +1,2 @@ -major=16 +major=17 minor=0 |