Author: peter
Date: Wed Nov 20 20:24:59 2013
New Revision: 258398
URL: http://svnweb.freebsd.org/changeset/base/258398

Log:
  MFC r258283 - move iconv* symbols out of libc.so.7 namespace with
  compatibility symbols to aid transition for existing 10.x installs.
  
  Approved by:  re (kib)

Added:
  stable/10/lib/libc/iconv/iconv-internal.h
     - copied unchanged from r258283, head/lib/libc/iconv/iconv-internal.h
  stable/10/lib/libc/iconv/iconv_compat.c
     - copied unchanged from r258283, head/lib/libc/iconv/iconv_compat.c
  stable/10/lib/libc_nonshared/
     - copied from r258283, head/lib/libc_nonshared/
Modified:
  stable/10/Makefile.inc1   (contents, props changed)
  stable/10/include/iconv.h
  stable/10/lib/Makefile
  stable/10/lib/libc/iconv/Makefile.inc
  stable/10/lib/libc/iconv/Symbol.map
  stable/10/lib/libc/iconv/iconv.c
  stable/10/lib/libc/libc.ldscript
  stable/10/sys/sys/param.h
Directory Properties:
  stable/10/   (props changed)
  stable/10/include/   (props changed)
  stable/10/lib/   (props changed)
  stable/10/lib/libc/   (props changed)

Modified: stable/10/Makefile.inc1
==============================================================================
--- stable/10/Makefile.inc1     Wed Nov 20 19:41:00 2013        (r258397)
+++ stable/10/Makefile.inc1     Wed Nov 20 20:24:59 2013        (r258398)
@@ -1453,11 +1453,13 @@ _startup_libs+= lib/csu/${MACHINE_CPUARC
 _startup_libs+=        gnu/lib/libgcc
 _startup_libs+=        lib/libcompiler_rt
 _startup_libs+=        lib/libc
+_startup_libs+=        lib/libc_nonshared
 .if ${MK_LIBCPLUSPLUS} != "no"
 _startup_libs+=        lib/libcxxrt
 .endif
 
 gnu/lib/libgcc__L: lib/libc__L
+gnu/lib/libgcc__L: lib/libc_nonshared__L
 .if ${MK_LIBCPLUSPLUS} != "no"
 lib/libcxxrt__L: gnu/lib/libgcc__L
 .endif

Modified: stable/10/include/iconv.h
==============================================================================
--- stable/10/include/iconv.h   Wed Nov 20 19:41:00 2013        (r258397)
+++ stable/10/include/iconv.h   Wed Nov 20 20:24:59 2013        (r258398)
@@ -69,17 +69,12 @@ size_t      __iconv(iconv_t, const char **, s
 /*
  * GNU interfaces for iconv
  */
-/* We have iconvctl() */
-#define _ICONV_VERSION 0x0108
-extern int _iconv_version;
-
 typedef struct {
        void    *spaceholder[64];
 } iconv_allocation_t;
 
 int     iconv_open_into(const char *, const char *, iconv_allocation_t *);
-void    iconv_set_relocation_prefix(const char *orig_prefix,
-            const char *curr_prefix);
+void    iconv_set_relocation_prefix(const char *, const char *);
 
 /*
  * iconvctl() request macros

Modified: stable/10/lib/Makefile
==============================================================================
--- stable/10/lib/Makefile      Wed Nov 20 19:41:00 2013        (r258397)
+++ stable/10/lib/Makefile      Wed Nov 20 20:24:59 2013        (r258398)
@@ -32,6 +32,7 @@
 
 SUBDIR_ORDERED=        ${_csu} \
        libc \
+       libc_nonshared \
        libbsm \
        libauditd \
        libcompiler_rt \

Modified: stable/10/lib/libc/iconv/Makefile.inc
==============================================================================
--- stable/10/lib/libc/iconv/Makefile.inc       Wed Nov 20 19:41:00 2013        
(r258397)
+++ stable/10/lib/libc/iconv/Makefile.inc       Wed Nov 20 20:24:59 2013        
(r258398)
@@ -14,5 +14,5 @@ SRCS+=        citrus_bcs.c citrus_bcs_strtol.c 
        citrus_esdb.c citrus_hash.c citrus_iconv.c citrus_lookup.c \
        citrus_lookup_factory.c citrus_mapper.c citrus_memstream.c \
        citrus_mmap.c citrus_module.c citrus_none.c citrus_pivot_factory.c \
-       citrus_prop.c citrus_stdenc.c iconv.c
+       citrus_prop.c citrus_stdenc.c iconv.c iconv_compat.c
 SYM_MAPS+= ${.CURDIR}/iconv/Symbol.map

Modified: stable/10/lib/libc/iconv/Symbol.map
==============================================================================
--- stable/10/lib/libc/iconv/Symbol.map Wed Nov 20 19:41:00 2013        
(r258397)
+++ stable/10/lib/libc/iconv/Symbol.map Wed Nov 20 20:24:59 2013        
(r258398)
@@ -2,22 +2,18 @@
  * $FreeBSD$
  */
 
-FBSD_1.2 {
-       __iconv;
-       __iconv_free_list;
-       __iconv_get_list;
-       iconv_canonicalize;
-};
-
 FBSD_1.3 {
-       _iconv_version;
-       iconv;
-       iconv_open;
-       iconv_close;
-       iconv_open_into;
-       iconv_set_relocation_prefix;
-       iconvctl;
-       iconvlist;
+       __bsd___iconv;
+       __bsd___iconv_free_list;
+       __bsd___iconv_get_list;
+       __bsd_iconv;
+       __bsd_iconv_canonicalize;
+       __bsd_iconv_close;
+       __bsd_iconv_open;
+       __bsd_iconv_open_into;
+       __bsd_iconv_set_relocation_prefix;
+       __bsd_iconvctl;
+       __bsd_iconvlist;
 };
 
 FBSDprivate_1.0 {

Copied: stable/10/lib/libc/iconv/iconv-internal.h (from r258283, 
head/lib/libc/iconv/iconv-internal.h)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ stable/10/lib/libc/iconv/iconv-internal.h   Wed Nov 20 20:24:59 2013        
(r258398, copy of r258283, head/lib/libc/iconv/iconv-internal.h)
@@ -0,0 +1,45 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+/*
+ * Interal prototypes for our back-end functions.
+ */
+size_t __bsd___iconv(iconv_t, const char **, size_t *, char **,
+               size_t *, __uint32_t, size_t *);
+void   __bsd___iconv_free_list(char **, size_t);
+int    __bsd___iconv_get_list(char ***, size_t *, __iconv_bool);
+size_t __bsd_iconv(iconv_t, const char ** __restrict,
+                   size_t * __restrict, char ** __restrict,
+                   size_t * __restrict);
+const char *__bsd_iconv_canonicalize(const char *);
+int    __bsd_iconv_close(iconv_t);
+iconv_t        __bsd_iconv_open(const char *, const char *);
+int    __bsd_iconv_open_into(const char *, const char *, iconv_allocation_t *);
+void   __bsd_iconv_set_relocation_prefix(const char *, const char *);
+int    __bsd_iconvctl(iconv_t, int, void *);
+void   __bsd_iconvlist(int (*) (unsigned int, const char * const *, void *), 
void *);

Modified: stable/10/lib/libc/iconv/iconv.c
==============================================================================
--- stable/10/lib/libc/iconv/iconv.c    Wed Nov 20 19:41:00 2013        
(r258397)
+++ stable/10/lib/libc/iconv/iconv.c    Wed Nov 20 20:24:59 2013        
(r258398)
@@ -47,15 +47,12 @@
 #include "citrus_hash.h"
 #include "citrus_iconv.h"
 
-#define ISBADF(_h_)    (!(_h_) || (_h_) == (iconv_t)-1)
-
-int _iconv_version = _ICONV_VERSION;
+#include "iconv-internal.h"
 
-iconv_t                 _iconv_open(const char *out, const char *in,
-                   struct _citrus_iconv *prealloc);
+#define ISBADF(_h_)    (!(_h_) || (_h_) == (iconv_t)-1)
 
-iconv_t
-_iconv_open(const char *out, const char *in, struct _citrus_iconv *handle)
+static iconv_t
+__bsd___iconv_open(const char *out, const char *in, struct _citrus_iconv 
*handle)
 {
        const char *out_slashes;
        char *out_noslashes;
@@ -92,23 +89,23 @@ _iconv_open(const char *out, const char 
 }
 
 iconv_t
-iconv_open(const char *out, const char *in)
+__bsd_iconv_open(const char *out, const char *in)
 {
 
-       return (_iconv_open(out, in, NULL));
+       return (__bsd___iconv_open(out, in, NULL));
 }
 
 int
-iconv_open_into(const char *out, const char *in, iconv_allocation_t *ptr)
+__bsd_iconv_open_into(const char *out, const char *in, iconv_allocation_t *ptr)
 {
        struct _citrus_iconv *handle;
 
        handle = (struct _citrus_iconv *)ptr;
-       return ((_iconv_open(out, in, handle) == (iconv_t)-1) ? -1 : 0);
+       return ((__bsd___iconv_open(out, in, handle) == (iconv_t)-1) ? -1 : 0);
 }
 
 int
-iconv_close(iconv_t handle)
+__bsd_iconv_close(iconv_t handle)
 {
 
        if (ISBADF(handle)) {
@@ -122,7 +119,7 @@ iconv_close(iconv_t handle)
 }
 
 size_t
-iconv(iconv_t handle, const char **in, size_t *szin, char **out, size_t *szout)
+__bsd_iconv(iconv_t handle, const char **in, size_t *szin, char **out, size_t 
*szout)
 {
        size_t ret;
        int err;
@@ -143,7 +140,7 @@ iconv(iconv_t handle, const char **in, s
 }
 
 size_t
-__iconv(iconv_t handle, const char **in, size_t *szin, char **out,
+__bsd___iconv(iconv_t handle, const char **in, size_t *szin, char **out,
     size_t *szout, uint32_t flags, size_t *invalids)
 {
        size_t ret;
@@ -167,7 +164,7 @@ __iconv(iconv_t handle, const char **in,
 }
 
 int
-__iconv_get_list(char ***rlist, size_t *rsz, bool sorted)
+__bsd___iconv_get_list(char ***rlist, size_t *rsz, bool sorted)
 {
        int ret;
 
@@ -181,7 +178,7 @@ __iconv_get_list(char ***rlist, size_t *
 }
 
 void
-__iconv_free_list(char **list, size_t sz)
+__bsd___iconv_free_list(char **list, size_t sz)
 {
 
        _citrus_esdb_free_list(list, sz);
@@ -202,7 +199,7 @@ qsort_helper(const void *first, const vo
 }
 
 void
-iconvlist(int (*do_one) (unsigned int, const char * const *,
+__bsd_iconvlist(int (*do_one) (unsigned int, const char * const *,
     void *), void *data)
 {
        char **list, **names;
@@ -213,7 +210,7 @@ iconvlist(int (*do_one) (unsigned int, c
 
        i = 0;
 
-       if (__iconv_get_list(&list, &sz, true))
+       if (__bsd___iconv_get_list(&list, &sz, true))
                list = NULL;
        qsort((void *)list, sz, sizeof(char *), qsort_helper);
        while (i < sz) {
@@ -222,7 +219,7 @@ iconvlist(int (*do_one) (unsigned int, c
                curkey = (char *)malloc(slashpos - list[i] + 2);
                names = (char **)malloc(sz * sizeof(char *));
                if ((curkey == NULL) || (names == NULL)) {
-                       __iconv_free_list(list, sz);
+                       __bsd___iconv_free_list(list, sz);
                        return;
                }
                strlcpy(curkey, list[i], slashpos - list[i] + 1);
@@ -231,7 +228,7 @@ iconvlist(int (*do_one) (unsigned int, c
                        slashpos = strchr(list[i], '/');
                        curitem = (char *)malloc(strlen(slashpos) + 1);
                        if (curitem == NULL) {
-                               __iconv_free_list(list, sz);
+                               __bsd___iconv_free_list(list, sz);
                                return;
                        }
                        strlcpy(curitem, &slashpos[1], strlen(slashpos) + 1);
@@ -245,18 +242,18 @@ iconvlist(int (*do_one) (unsigned int, c
                free(names);
        }
 
-       __iconv_free_list(list, sz);
+       __bsd___iconv_free_list(list, sz);
 }
 
-__inline const char
-*iconv_canonicalize(const char *name)
+__inline const char *
+__bsd_iconv_canonicalize(const char *name)
 {
 
        return (_citrus_iconv_canonicalize(name));
 }
 
 int
-iconvctl(iconv_t cd, int request, void *argument)
+__bsd_iconvctl(iconv_t cd, int request, void *argument)
 {
        struct _citrus_iconv *cv;
        struct iconv_hooks *hooks;
@@ -308,7 +305,7 @@ iconvctl(iconv_t cd, int request, void *
 }
 
 void
-iconv_set_relocation_prefix(const char *orig_prefix __unused,
+__bsd_iconv_set_relocation_prefix(const char *orig_prefix __unused,
     const char *curr_prefix __unused)
 {
 

Copied: stable/10/lib/libc/iconv/iconv_compat.c (from r258283, 
head/lib/libc/iconv/iconv_compat.c)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ stable/10/lib/libc/iconv/iconv_compat.c     Wed Nov 20 20:24:59 2013        
(r258398, copy of r258283, head/lib/libc/iconv/iconv_compat.c)
@@ -0,0 +1,121 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+/*
+ * These are ABI implementations for when the raw iconv_* symbol
+ * space was exposed via libc.so.7 in its early life.  This is
+ * a transition aide, these wrappers will not normally ever be
+ * executed except via __sym_compat() references.
+ */
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+size_t
+__iconv_compat(iconv_t a, const char ** b, size_t * c, char ** d,
+     size_t * e, __uint32_t f, size_t *g)
+{
+       return __bsd___iconv(a, b, c, d, e, f, g);
+}
+
+void
+__iconv_free_list_compat(char ** a, size_t b)
+{
+       __bsd___iconv_free_list(a, b);
+}
+
+int
+__iconv_get_list_compat(char ***a, size_t *b, __iconv_bool c)
+{
+       return __bsd___iconv_get_list(a, b, c);
+}
+
+size_t
+iconv_compat(iconv_t a, const char ** __restrict b,
+      size_t * __restrict c, char ** __restrict d,
+      size_t * __restrict e)
+{
+       return __bsd_iconv(a, b, c, d, e);
+}
+
+const char *
+iconv_canonicalize_compat(const char *a)
+{
+       return __bsd_iconv_canonicalize(a);
+}
+
+int
+iconv_close_compat(iconv_t a)
+{
+       return __bsd_iconv_close(a);
+}
+
+iconv_t
+iconv_open_compat(const char *a, const char *b)
+{
+       return __bsd_iconv_open(a, b);
+}
+
+int
+iconv_open_into_compat(const char *a, const char *b, iconv_allocation_t *c)
+{
+       return __bsd_iconv_open_into(a, b, c);
+}
+
+void
+iconv_set_relocation_prefix_compat(const char *a, const char *b)
+{
+       return __bsd_iconv_set_relocation_prefix(a, b);
+}
+
+int
+iconvctl_compat(iconv_t a, int b, void *c)
+{
+       return __bsd_iconvctl(a, b, c);
+}
+
+void
+iconvlist_compat(int (*a) (unsigned int, const char * const *, void *), void 
*b)
+{
+       return __bsd_iconvlist(a, b);
+}
+
+int _iconv_version_compat = 0x0108;    /* Magic - not used */
+
+__sym_compat(__iconv, __iconv_compat, FBSD_1.2);
+__sym_compat(__iconv_free_list, __iconv_free_list_compat, FBSD_1.2);
+__sym_compat(__iconv_get_list, __iconv_get_list_compat, FBSD_1.2);
+__sym_compat(_iconv_version, _iconv_version_compat, FBSD_1.3);
+__sym_compat(iconv, iconv_compat, FBSD_1.3);
+__sym_compat(iconv_canonicalize, iconv_canonicalize_compat, FBSD_1.2);
+__sym_compat(iconv_close, iconv_close_compat, FBSD_1.3);
+__sym_compat(iconv_open, iconv_open_compat, FBSD_1.3);
+__sym_compat(iconv_open_into, iconv_open_into_compat, FBSD_1.3);
+__sym_compat(iconv_set_relocation_prefix, iconv_set_relocation_prefix_compat, 
FBSD_1.3);
+__sym_compat(iconvctl, iconvctl_compat, FBSD_1.3);
+__sym_compat(iconvlist, iconvlist_compat, FBSD_1.3);

Modified: stable/10/lib/libc/libc.ldscript
==============================================================================
--- stable/10/lib/libc/libc.ldscript    Wed Nov 20 19:41:00 2013        
(r258397)
+++ stable/10/lib/libc/libc.ldscript    Wed Nov 20 20:24:59 2013        
(r258398)
@@ -1,2 +1,2 @@
 /* $FreeBSD$ */
-GROUP ( @@SHLIB@@ @@LIBDIR@@/libssp_nonshared.a )
+GROUP ( @@SHLIB@@ @@LIBDIR@@/libc_nonshared.a @@LIBDIR@@/libssp_nonshared.a )

Modified: stable/10/sys/sys/param.h
==============================================================================
--- stable/10/sys/sys/param.h   Wed Nov 20 19:41:00 2013        (r258397)
+++ stable/10/sys/sys/param.h   Wed Nov 20 20:24:59 2013        (r258398)
@@ -58,7 +58,7 @@
  *             in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1000501      /* Master, propagated to newvers */
+#define __FreeBSD_version 1000502      /* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to