Skip to contentSkip to conversation

libdrm: hide all private symbols

PATCH In review Maarten Lankhorst 6 participants 8 messages Jul 30, 2014 4 messages not in the archive

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 libdrm: hide all private symbols

Using -export-symbols-regex all private symbols are hidden, resulting in the following changes:

libkms: removes all driver specific exports
radeon: removes the bof_* exports
nouveau: removes the abi16_* exports
freedreno: remove the *kgsl_* and msm_* exports
intel: removes the drm_mm* exports omap/exynos: unchanged as far as I can tell

---

exynos/Makefile.am +2 -1
index 0a2663a..0cd753d 100644
@@ -7,7 +7,8 @@ AM_CFLAGS = \
 
 libdrm_exynos_la_LTLIBRARIES = libdrm_exynos.la
 libdrm_exynos_ladir = $(libdir)
-libdrm_exynos_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_exynos_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^(exynos|g2d)_'
 libdrm_exynos_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
 libdrm_exynos_la_SOURCES = \
freedreno/Makefile.am +2 -1
index 7903e5b..5fdee22 100644
@@ -9,7 +9,8 @@ AM_CFLAGS = \
 
 libdrm_freedreno_la_LTLIBRARIES = libdrm_freedreno.la
 libdrm_freedreno_ladir = $(libdir)
-libdrm_freedreno_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_freedreno_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^fd_'
 libdrm_freedreno_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
 libdrm_freedreno_la_SOURCES = \
intel/Makefile.am +2 -1
index f49b099..2b9ee48 100644
@@ -33,7 +33,8 @@ AM_CFLAGS = \
 
 libdrm_intel_la_LTLIBRARIES = libdrm_intel.la
 libdrm_intel_ladir = $(libdir)
-libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^drm_intel_'
 libdrm_intel_la_LIBADD = ../libdrm.la \
 	@PTHREADSTUBS_LIBS@ \
 	@PCIACCESS_LIBS@ \
libkms/Makefile.am +2 -1
index 449a73b..e3c727a 100644
@@ -5,7 +5,8 @@ AM_CFLAGS = \
 
 libkms_la_LTLIBRARIES = libkms.la
 libkms_ladir = $(libdir)
-libkms_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libkms_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^kms_'
 libkms_la_LIBADD = ../libdrm.la
 
 #if HAVE_LIBUDEV
nouveau/Makefile.am +2 -1
index 206e892..257cab9 100644
@@ -8,7 +8,8 @@ AM_CFLAGS = \
 
 libdrm_nouveau_la_LTLIBRARIES = libdrm_nouveau.la
 libdrm_nouveau_ladir = $(libdir)
-libdrm_nouveau_la_LDFLAGS = -version-number 2:0:0 -no-undefined
+libdrm_nouveau_la_LDFLAGS = -version-number 2:0:0 -no-undefined \
+	-export-symbols-regex '^nouveau_'
 libdrm_nouveau_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
 libdrm_nouveau_la_SOURCES = nouveau.c \
omap/Makefile.am +2 -1
index c77520b..bcbe98e 100644
@@ -7,7 +7,8 @@ AM_CFLAGS = \
 
 libdrm_omap_la_LTLIBRARIES = libdrm_omap.la
 libdrm_omap_ladir = $(libdir)
-libdrm_omap_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_omap_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^omap_'
 libdrm_omap_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
 libdrm_omap_la_SOURCES = omap_drm.c
radeon/Makefile.am +2 -1
index a8cd100..9fa19a8 100644
@@ -31,7 +31,8 @@ AM_CFLAGS = \
 
 libdrm_radeon_la_LTLIBRARIES = libdrm_radeon.la
 libdrm_radeon_ladir = $(libdir)
-libdrm_radeon_la_LDFLAGS = -version-number 1:0:1 -no-undefined
+libdrm_radeon_la_LDFLAGS = -version-number 1:0:1 -no-undefined \
+	-export-symbols-regex '^radeon_'
 libdrm_radeon_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
 libdrm_radeon_la_SOURCES = \
#1 lore raw

[CCing Emil as well]

Am 30.07.2014 um 11:38 schrieb Maarten Lankhorst:

Quoted 1 line

Using -export-symbols-regex all private symbols are hidden, resulting in the following changes:

Wasn't "-export-symbols-regex" exactly that stuff we are trying to avoid in mesa?

Christian.

Quoted 114 lines

libkms: removes all driver specific exports
radeon: removes the bof_* exports
nouveau: removes the abi16_* exports
freedreno: remove the *kgsl_* and msm_* exports
intel: removes the drm_mm* exports omap/exynos: unchanged as far as I can tell

---

exynos/Makefile.am +2 -1
index 0a2663a..0cd753d 100644
@@ -7,7 +7,8 @@ AM_CFLAGS = \
 
  libdrm_exynos_la_LTLIBRARIES = libdrm_exynos.la
  libdrm_exynos_ladir = $(libdir)
-libdrm_exynos_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_exynos_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^(exynos|g2d)_'
  libdrm_exynos_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
  libdrm_exynos_la_SOURCES = \
freedreno/Makefile.am +2 -1
index 7903e5b..5fdee22 100644
@@ -9,7 +9,8 @@ AM_CFLAGS = \
 
  libdrm_freedreno_la_LTLIBRARIES = libdrm_freedreno.la
  libdrm_freedreno_ladir = $(libdir)
-libdrm_freedreno_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_freedreno_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^fd_'
  libdrm_freedreno_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
  libdrm_freedreno_la_SOURCES = \
intel/Makefile.am +2 -1
index f49b099..2b9ee48 100644
@@ -33,7 +33,8 @@ AM_CFLAGS = \
 
  libdrm_intel_la_LTLIBRARIES = libdrm_intel.la
  libdrm_intel_ladir = $(libdir)
-libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^drm_intel_'
  libdrm_intel_la_LIBADD = ../libdrm.la \
  	@PTHREADSTUBS_LIBS@ \
  	@PCIACCESS_LIBS@ \
libkms/Makefile.am +2 -1
index 449a73b..e3c727a 100644
@@ -5,7 +5,8 @@ AM_CFLAGS = \
 
  libkms_la_LTLIBRARIES = libkms.la
  libkms_ladir = $(libdir)
-libkms_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libkms_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^kms_'
  libkms_la_LIBADD = ../libdrm.la
 
  #if HAVE_LIBUDEV
nouveau/Makefile.am +2 -1
index 206e892..257cab9 100644
@@ -8,7 +8,8 @@ AM_CFLAGS = \
 
  libdrm_nouveau_la_LTLIBRARIES = libdrm_nouveau.la
  libdrm_nouveau_ladir = $(libdir)
-libdrm_nouveau_la_LDFLAGS = -version-number 2:0:0 -no-undefined
+libdrm_nouveau_la_LDFLAGS = -version-number 2:0:0 -no-undefined \
+	-export-symbols-regex '^nouveau_'
  libdrm_nouveau_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
  libdrm_nouveau_la_SOURCES = nouveau.c \
omap/Makefile.am +2 -1
index c77520b..bcbe98e 100644
@@ -7,7 +7,8 @@ AM_CFLAGS = \
 
  libdrm_omap_la_LTLIBRARIES = libdrm_omap.la
  libdrm_omap_ladir = $(libdir)
-libdrm_omap_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_omap_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+	-export-symbols-regex '^omap_'
  libdrm_omap_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
  libdrm_omap_la_SOURCES = omap_drm.c
radeon/Makefile.am +2 -1
index a8cd100..9fa19a8 100644
@@ -31,7 +31,8 @@ AM_CFLAGS = \
 
  libdrm_radeon_la_LTLIBRARIES = libdrm_radeon.la
  libdrm_radeon_ladir = $(libdir)
-libdrm_radeon_la_LDFLAGS = -version-number 1:0:1 -no-undefined
+libdrm_radeon_la_LDFLAGS = -version-number 1:0:1 -no-undefined \
+	-export-symbols-regex '^radeon_'
  libdrm_radeon_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
 
  libdrm_radeon_la_SOURCES = \

_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel

A message that is not in the archive (sent off-list or not yet received): [email protected]

#3 lore raw
Quoted 8 lines · Christian König

[CCing Emil as well]

Am 30.07.2014 um 11:38 schrieb Maarten Lankhorst:

Quoted 2 lines

Using -export-symbols-regex all private symbols are hidden, resulting in the following changes:

Wasn't "-export-symbols-regex" exactly that stuff we are trying to avoid in mesa?

IMHO we should try to pick up Thierry visibility patches, as these are the best solution + BSD's ld lacks version-script support. Then use a version-script over export-symbols-regex, as the latter messes up local symbols apart from the exported ones.

-Emil

Quoted 103 lines

Christian.

Quoted 100 lines

libkms: removes all driver specific exports
radeon: removes the bof_* exports
nouveau: removes the abi16_* exports
freedreno: remove the *kgsl_* and msm_* exports
intel: removes the drm_mm* exports omap/exynos: unchanged as far as I can tell

---

exynos/Makefile.am +2 -1
index 0a2663a..0cd753d 100644
@@ -7,7 +7,8 @@ AM_CFLAGS = \
    libdrm_exynos_la_LTLIBRARIES = libdrm_exynos.la
  libdrm_exynos_ladir = $(libdir)
-libdrm_exynos_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_exynos_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+    -export-symbols-regex '^(exynos|g2d)_'
  libdrm_exynos_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
    libdrm_exynos_la_SOURCES = \
freedreno/Makefile.am +2 -1
index 7903e5b..5fdee22 100644
@@ -9,7 +9,8 @@ AM_CFLAGS = \
    libdrm_freedreno_la_LTLIBRARIES = libdrm_freedreno.la
  libdrm_freedreno_ladir = $(libdir)
-libdrm_freedreno_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_freedreno_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+    -export-symbols-regex '^fd_'
  libdrm_freedreno_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
    libdrm_freedreno_la_SOURCES = \
intel/Makefile.am +2 -1
index f49b099..2b9ee48 100644
@@ -33,7 +33,8 @@ AM_CFLAGS = \
    libdrm_intel_la_LTLIBRARIES = libdrm_intel.la
  libdrm_intel_ladir = $(libdir)
-libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+    -export-symbols-regex '^drm_intel_'
  libdrm_intel_la_LIBADD = ../libdrm.la \
      @PTHREADSTUBS_LIBS@ \
      @PCIACCESS_LIBS@ \
libkms/Makefile.am +2 -1
index 449a73b..e3c727a 100644
@@ -5,7 +5,8 @@ AM_CFLAGS = \
    libkms_la_LTLIBRARIES = libkms.la
  libkms_ladir = $(libdir)
-libkms_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libkms_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+    -export-symbols-regex '^kms_'
  libkms_la_LIBADD = ../libdrm.la
    #if HAVE_LIBUDEV
nouveau/Makefile.am +2 -1
index 206e892..257cab9 100644
@@ -8,7 +8,8 @@ AM_CFLAGS = \
    libdrm_nouveau_la_LTLIBRARIES = libdrm_nouveau.la
  libdrm_nouveau_ladir = $(libdir)
-libdrm_nouveau_la_LDFLAGS = -version-number 2:0:0 -no-undefined
+libdrm_nouveau_la_LDFLAGS = -version-number 2:0:0 -no-undefined \
+    -export-symbols-regex '^nouveau_'
  libdrm_nouveau_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
    libdrm_nouveau_la_SOURCES = nouveau.c \
omap/Makefile.am +2 -1
index c77520b..bcbe98e 100644
@@ -7,7 +7,8 @@ AM_CFLAGS = \
    libdrm_omap_la_LTLIBRARIES = libdrm_omap.la
  libdrm_omap_ladir = $(libdir)
-libdrm_omap_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+libdrm_omap_la_LDFLAGS = -version-number 1:0:0 -no-undefined \
+    -export-symbols-regex '^omap_'
  libdrm_omap_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
    libdrm_omap_la_SOURCES = omap_drm.c
radeon/Makefile.am +2 -1
index a8cd100..9fa19a8 100644
@@ -31,7 +31,8 @@ AM_CFLAGS = \
    libdrm_radeon_la_LTLIBRARIES = libdrm_radeon.la
  libdrm_radeon_ladir = $(libdir)
-libdrm_radeon_la_LDFLAGS = -version-number 1:0:1 -no-undefined
+libdrm_radeon_la_LDFLAGS = -version-number 1:0:1 -no-undefined \
+    -export-symbols-regex '^radeon_'
  libdrm_radeon_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
    libdrm_radeon_la_SOURCES = \
 

_______________________________________________
dri-devel mailing list [email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel

#4 lore raw

PATCH 1/1 configure: Support symbol visibility when available

From: Thierry Reding <[email protected]>

Checks whether or not the compiler supports the -fvisibility option. If so it sets the VISIBILITY_CFLAGS variable which can be added to the per directory AM_CFLAGS where appropriate.

By default all symbols will be hidden via the VISIBILITY_CFLAGS. The drm_public macro can be used to mark symbols that should be exported.

---
Changes in v3:
- distribute libdrm.h

 Makefile.am  |  1 +
 configure.ac | 20 ++++++++++++++++++++
 libdrm.h     | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 55 insertions(+)
 create mode 100644 libdrm.h
Makefile.am +1 -0
index 826c30d0c0d9..65680da963eb 100644
@@ -69,6 +69,7 @@ libdrm_la_SOURCES =				\
 	xf86drmSL.c				\
 	xf86drmMode.c				\
 	xf86atomic.h				\
+	libdrm.h				\
 	libdrm_lists.h
 
 libdrmincludedir = ${includedir}
configure.ac +20 -0
index 1c78c4520c49..f7c7177bfb2a 100644
@@ -366,6 +366,26 @@ AC_ARG_WITH([kernel-source],
 	    [kernel_source="$with_kernel_source"])
 AC_SUBST(kernel_source)
 
+dnl Add flags for gcc and g++
+if test "x$GCC" = xyes; then
+    # Enable -fvisibility=hidden if using a gcc that supports it
+    save_CFLAGS="$CFLAGS"
+    AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
+    VISIBILITY_CFLAGS="-fvisibility=hidden"
+    CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
+    AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
+                   [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
+
+    # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
+    CFLAGS=$save_CFLAGS
+
+    if test "x$VISIBILITY_CFLAGS" != x; then
+        AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler has -fvisibility support])
+    fi
+
+    AC_SUBST([VISIBILITY_CFLAGS])
+fi
+
 AC_SUBST(WARN_CFLAGS)
 AC_CONFIG_FILES([
 	Makefile
libdrm.h new file +34 -0
new file mode 100644
index 000000000000..23926e6f6741
@@ -0,0 +1,34 @@
+/*
+ * Copyright © 2014 NVIDIA Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef LIBDRM_LIBDRM_H
+#define LIBDRM_LIBDRM_H
+
+#if defined(HAVE_VISIBILITY)
+#  define drm_private __attribute__((visibility("hidden")))
+#  define drm_public __attribute__((visibility("default")))
+#else
+#  define drm_private
+#  define drm_public
+#endif
+
+#endif
Signature · 6 lines
2.0.3

_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel

A message that is not in the archive (sent off-list or not yet received): 1406728085-981-1-git-send-email-thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org

#6 lore raw

Re: [PATCH libdrm] configure: Support symbol visibility when available

Quoted 8 lines · Thierry Reding

From: Thierry Reding <[email protected]>

Checks whether or not the compiler supports the -fvisibility option. If so it sets the VISIBILITY_CFLAGS variable which can be added to the per directory AM_CFLAGS where appropriate.

By default all symbols will be hidden via the VISIBILITY_CFLAGS. The drm_public macro can be used to mark symbols that should be exported.

hmm, maybe dumb question, I might possibly have missed some discussion on this, but if we merged this without a heap of patches to export libdrm and libdrm_foo syms, wouldn't everything be hidden?

Maybe we should introduce drm_public first.. then once stuff is converted to use it actually start hiding things?

BR,
-R

Quoted 97 lines

---
Changes in v3:
- distribute libdrm.h

 Makefile.am  |  1 +
 configure.ac | 20 ++++++++++++++++++++
 libdrm.h     | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 55 insertions(+)
 create mode 100644 libdrm.h
Makefile.am +1 -0
index 826c30d0c0d9..65680da963eb 100644
@@ -69,6 +69,7 @@ libdrm_la_SOURCES =                           \
        xf86drmSL.c                             \
        xf86drmMode.c                           \
        xf86atomic.h                            \
+       libdrm.h                                \
        libdrm_lists.h
 
 libdrmincludedir = ${includedir}
configure.ac +20 -0
index 1c78c4520c49..f7c7177bfb2a 100644
@@ -366,6 +366,26 @@ AC_ARG_WITH([kernel-source],
            [kernel_source="$with_kernel_source"])
 AC_SUBST(kernel_source)
 
+dnl Add flags for gcc and g++
+if test "x$GCC" = xyes; then
+    # Enable -fvisibility=hidden if using a gcc that supports it
+    save_CFLAGS="$CFLAGS"
+    AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
+    VISIBILITY_CFLAGS="-fvisibility=hidden"
+    CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
+    AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
+                   [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
+
+    # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
+    CFLAGS=$save_CFLAGS
+
+    if test "x$VISIBILITY_CFLAGS" != x; then
+        AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler has -fvisibility support])
+    fi
+
+    AC_SUBST([VISIBILITY_CFLAGS])
+fi
+
 AC_SUBST(WARN_CFLAGS)
 AC_CONFIG_FILES([
        Makefile
libdrm.h new file +34 -1
new file mode 100644
index 000000000000..23926e6f6741
@@ -0,0 +1,34 @@
+/*
+ * Copyright © 2014 NVIDIA Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef LIBDRM_LIBDRM_H
+#define LIBDRM_LIBDRM_H
+
+#if defined(HAVE_VISIBILITY)
+#  define drm_private __attribute__((visibility("hidden")))
+#  define drm_public __attribute__((visibility("default")))
+#else
+#  define drm_private
+#  define drm_public
+#endif
+
+#endif
--

2.0.3

Quoted 4 lines

_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel

_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

A message that is not in the archive (sent off-list or not yet received): CAF6AEGsKy0jMeTki8R4CJb5+fbKgX3qJW8uV4Wbr8Vm2Ojr-vQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org

#8 lore raw

Re: [PATCH libdrm] configure: Support symbol visibility when available

Quoted 11 lines · Rob Clark
Quoted 8 lines · Thierry Reding

From: Thierry Reding <[email protected]>

Checks whether or not the compiler supports the -fvisibility option. If so it sets the VISIBILITY_CFLAGS variable which can be added to the per directory AM_CFLAGS where appropriate.

By default all symbols will be hidden via the VISIBILITY_CFLAGS. The drm_public macro can be used to mark symbols that should be exported.

Quoted 7 lines

hmm, maybe dumb question, I might possibly have missed some discussion on this, but if we merged this without a heap of patches to export libdrm and libdrm_foo syms, wouldn't everything be hidden?

Maybe we should introduce drm_public first.. then once stuff is converted to use it actually start hiding things?

This adds the tool, but it's up-to the individual libraries/makefiles to make use of it.

All you need is:
- append $(VISIBILITY_CFLAGS) to libdrm_freedreno_CFLAGS
- prefix each exported function definition with DRM_PUBLIC
- ***
- profit :P

-Emil

Quoted 101 lines

BR,
-R

Quoted 97 lines

---
Changes in v3:
- distribute libdrm.h

 Makefile.am  |  1 +
 configure.ac | 20 ++++++++++++++++++++
 libdrm.h     | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 55 insertions(+)
 create mode 100644 libdrm.h
Makefile.am +1 -0
index 826c30d0c0d9..65680da963eb 100644
@@ -69,6 +69,7 @@ libdrm_la_SOURCES =                           \
        xf86drmSL.c                             \
        xf86drmMode.c                           \
        xf86atomic.h                            \
+       libdrm.h                                \
        libdrm_lists.h
 
 libdrmincludedir = ${includedir}
configure.ac +20 -0
index 1c78c4520c49..f7c7177bfb2a 100644
@@ -366,6 +366,26 @@ AC_ARG_WITH([kernel-source],
            [kernel_source="$with_kernel_source"])
 AC_SUBST(kernel_source)
 
+dnl Add flags for gcc and g++
+if test "x$GCC" = xyes; then
+    # Enable -fvisibility=hidden if using a gcc that supports it
+    save_CFLAGS="$CFLAGS"
+    AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
+    VISIBILITY_CFLAGS="-fvisibility=hidden"
+    CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
+    AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
+                   [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
+
+    # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
+    CFLAGS=$save_CFLAGS
+
+    if test "x$VISIBILITY_CFLAGS" != x; then
+        AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler has -fvisibility support])
+    fi
+
+    AC_SUBST([VISIBILITY_CFLAGS])
+fi
+
 AC_SUBST(WARN_CFLAGS)
 AC_CONFIG_FILES([
        Makefile
libdrm.h new file +34 -1
new file mode 100644
index 000000000000..23926e6f6741
@@ -0,0 +1,34 @@
+/*
+ * Copyright © 2014 NVIDIA Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef LIBDRM_LIBDRM_H
+#define LIBDRM_LIBDRM_H
+
+#if defined(HAVE_VISIBILITY)
+#  define drm_private __attribute__((visibility("hidden")))
+#  define drm_public __attribute__((visibility("default")))
+#else
+#  define drm_private
+#  define drm_public
+#endif
+
+#endif
--

2.0.3

Quoted 4 lines
Quoted 4 lines

_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel

_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

A message that is not in the archive (sent off-list or not yet received): [email protected]

#10 lore raw

Re: [PATCH libdrm] configure: Support symbol visibility when available

Quoted 19 lines · Emil Velikov
Quoted 11 lines · Rob Clark
Quoted 8 lines · Thierry Reding

From: Thierry Reding <[email protected]>

Checks whether or not the compiler supports the -fvisibility option. If so it sets the VISIBILITY_CFLAGS variable which can be added to the per directory AM_CFLAGS where appropriate.

By default all symbols will be hidden via the VISIBILITY_CFLAGS. The drm_public macro can be used to mark symbols that should be exported.

Quoted 7 lines

hmm, maybe dumb question, I might possibly have missed some discussion on this, but if we merged this without a heap of patches to export libdrm and libdrm_foo syms, wouldn't everything be hidden?

Maybe we should introduce drm_public first.. then once stuff is converted to use it actually start hiding things?

Quoted 8 lines

This adds the tool, but it's up-to the individual libraries/makefiles to make use of it.

All you need is:
- append $(VISIBILITY_CFLAGS) to libdrm_freedreno_CFLAGS
- prefix each exported function definition with DRM_PUBLIC
- ***
- profit :P

ahh, ok, that makes much more sense.. thx :-)

BR,
-R

Quoted 103 lines

-Emil

Quoted 101 lines

BR,
-R

Quoted 97 lines

---
Changes in v3:
- distribute libdrm.h

 Makefile.am  |  1 +
 configure.ac | 20 ++++++++++++++++++++
 libdrm.h     | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 55 insertions(+)
 create mode 100644 libdrm.h
Makefile.am +1 -0
index 826c30d0c0d9..65680da963eb 100644
@@ -69,6 +69,7 @@ libdrm_la_SOURCES =                           \
        xf86drmSL.c                             \
        xf86drmMode.c                           \
        xf86atomic.h                            \
+       libdrm.h                                \
        libdrm_lists.h
 
 libdrmincludedir = ${includedir}
configure.ac +20 -0
index 1c78c4520c49..f7c7177bfb2a 100644
@@ -366,6 +366,26 @@ AC_ARG_WITH([kernel-source],
            [kernel_source="$with_kernel_source"])
 AC_SUBST(kernel_source)
 
+dnl Add flags for gcc and g++
+if test "x$GCC" = xyes; then
+    # Enable -fvisibility=hidden if using a gcc that supports it
+    save_CFLAGS="$CFLAGS"
+    AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
+    VISIBILITY_CFLAGS="-fvisibility=hidden"
+    CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
+    AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
+                   [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
+
+    # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
+    CFLAGS=$save_CFLAGS
+
+    if test "x$VISIBILITY_CFLAGS" != x; then
+        AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler has -fvisibility support])
+    fi
+
+    AC_SUBST([VISIBILITY_CFLAGS])
+fi
+
 AC_SUBST(WARN_CFLAGS)
 AC_CONFIG_FILES([
        Makefile
libdrm.h new file +34 -1
new file mode 100644
index 000000000000..23926e6f6741
@@ -0,0 +1,34 @@
+/*
+ * Copyright © 2014 NVIDIA Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef LIBDRM_LIBDRM_H
+#define LIBDRM_LIBDRM_H
+
+#if defined(HAVE_VISIBILITY)
+#  define drm_private __attribute__((visibility("hidden")))
+#  define drm_public __attribute__((visibility("default")))
+#else
+#  define drm_private
+#  define drm_public
+#endif
+
+#endif
--

2.0.3

Quoted 5 lines
Quoted 4 lines
Quoted 4 lines

_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel

_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reviewed-by on v1 1/1
#11 lore raw

Re: [PATCH libdrm] configure: Support symbol visibility when available

In reply to Thierry Reding
Quoted 9 lines · Thierry Reding

From: Thierry Reding <[email protected]>

Checks whether or not the compiler supports the -fvisibility option. If so it sets the VISIBILITY_CFLAGS variable which can be added to the per directory AM_CFLAGS where appropriate.

By default all symbols will be hidden via the VISIBILITY_CFLAGS. The drm_public macro can be used to mark symbols that should be exported.

Thank you Thierry. Finally we can cleanup some of the exports that libdrm* erroneously provides :)

Quoted 85 lines

---
Changes in v3:
- distribute libdrm.h

 Makefile.am  |  1 +
 configure.ac | 20 ++++++++++++++++++++
 libdrm.h     | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 55 insertions(+)
 create mode 100644 libdrm.h
Makefile.am +1 -0
index 826c30d0c0d9..65680da963eb 100644
@@ -69,6 +69,7 @@ libdrm_la_SOURCES =				\
 	xf86drmSL.c				\
 	xf86drmMode.c				\
 	xf86atomic.h				\
+	libdrm.h				\
 	libdrm_lists.h
 
 libdrmincludedir = ${includedir}
configure.ac +20 -0
index 1c78c4520c49..f7c7177bfb2a 100644
@@ -366,6 +366,26 @@ AC_ARG_WITH([kernel-source],
 	    [kernel_source="$with_kernel_source"])
 AC_SUBST(kernel_source)
 
+dnl Add flags for gcc and g++
+if test "x$GCC" = xyes; then
+    # Enable -fvisibility=hidden if using a gcc that supports it
+    save_CFLAGS="$CFLAGS"
+    AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
+    VISIBILITY_CFLAGS="-fvisibility=hidden"
+    CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
+    AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
+                   [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
+
+    # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
+    CFLAGS=$save_CFLAGS
+
+    if test "x$VISIBILITY_CFLAGS" != x; then
+        AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler has -fvisibility support])
+    fi
+
+    AC_SUBST([VISIBILITY_CFLAGS])
+fi
+
 AC_SUBST(WARN_CFLAGS)
 AC_CONFIG_FILES([
 	Makefile
libdrm.h new file +24 -0
new file mode 100644
index 000000000000..23926e6f6741
@@ -0,0 +1,34 @@
+/*
+ * Copyright © 2014 NVIDIA Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef LIBDRM_LIBDRM_H
+#define LIBDRM_LIBDRM_H

libdrm.h line 34

Quoted 10 lines
libdrm.h new file +10 -0
+
+#if defined(HAVE_VISIBILITY)
+#  define drm_private __attribute__((visibility("hidden")))
+#  define drm_public __attribute__((visibility("default")))
+#else
+#  define drm_private
+#  define drm_public
+#endif
+
+#endif

_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel