Re: Solaris & [PATCH libdrm 1/2] configure.ac: split -fvisibility and __attribute__((visibility)) checks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/ 9/15 05:37 AM, Emil Velikov wrote:
The former does not imply the latter and vice-versa. One such example is
the Sun compiler.

Cc: Alan Coopersmith <alan.coopersmith@xxxxxxxxxx>
Cc: Thierry Reding <treding@xxxxxxxxxx>
Signed-off-by: Emil Velikov <emil.l.velikov@xxxxxxxxx>
---

Hi Alan,
Can you please take a look it this series covers the symbol visibility
issues mentioned earlier ? In theory it should work like a charm but I
cannot really test it :-\

Patch 1 of 2 breaks configure on Solaris - I get:

checking for VALGRIND... no
checking whether cc -xc99=%all supports __attribute__((visibility))... ./configure[13393]: set does not quote correctly, so add quotes: double-quote^J      # substitution turns \\ into \, and sed turns \ into \.^J      sed -n ^I"s//\\/g;^J^I  s/^\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\)=\(.*\)/\1=2/p"^J      ;; #(^J    *)^J      # : not found [No such file or directory]
./configure[13393]: {\1+set}: bad substitution
./configure[13992]: : cannot open
./configure[14000]: : cannot open
./configure[14032]: : cannot open
./configure[14051]: : cannot open
./configure[14128]: : cannot open
./configure[14139]: : cannot open
./configure[14150]: : cannot open
./configure[14435]: : cannot open
./configure[14563]: : cannot open
./configure[14603]: : cannot open
./configure[14610]: : cannot open
./configure[14639]: : cannot open
./configure[14671]: : cannot open
./configure[14740]: : cannot open
./configure[14744]: : cannot open
./configure[14778]: : cannot open
./configure[14928]: : cannot open
./configure[14948]: : cannot open
./configure[14962]: : cannot open
./configure[14966]: : cannot open
configure: error: write failure creating
It also generated new autoconf warnings generating the configure script:

configure.ac:422: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2661: _AC_LINK_IFELSE is expanded from...
../../lib/autoconf/general.m4:2678: AC_LINK_IFELSE is expanded from...
configure.ac:422: the top level
configure.ac:422: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2661: _AC_LINK_IFELSE is expanded from...
../../lib/autoconf/general.m4:2678: AC_LINK_IFELSE is expanded from...
configure.ac:422: the top level
autoreconf: running: /net/also.us.oracle.com/export/alanc/autotools/install/bin/autoconf --force
configure.ac:422: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2661: _AC_LINK_IFELSE is expanded from...
../../lib/autoconf/general.m4:2678: AC_LINK_IFELSE is expanded from...
configure.ac:422: the top level
autoreconf: running: /net/also.us.oracle.com/export/alanc/autotools/install/bin/autoheader --force
configure.ac:422: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2661: _AC_LINK_IFELSE is expanded from...
../../lib/autoconf/general.m4:2678: AC_LINK_IFELSE is expanded from...
configure.ac:422: the top level
autoreconf: running: automake --add-missing --copy --force-missing
configure.ac:422: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2661: _AC_LINK_IFELSE is expanded from...
../../lib/autoconf/general.m4:2678: AC_LINK_IFELSE is expanded from...
configure.ac:422: the top level

Both seem to have been caused by a misplaced close paren/brace pair and are fixed by:

--- a/configure.ac
+++ b/configure.ac
@@ -422,7 +422,7 @@ AC_MSG_CHECKING([whether $CC supports __attribute__((visibility))])
AC_LINK_IFELSE([AC_LANG_PROGRAM([
    int foo_default( void ) __attribute__((visibility("default")));
    int foo_hidden( void ) __attribute__((visibility("hidden")));
-], HAVE_ATTRIBUTE_VISIBILITY="yes"; AC_MSG_RESULT([yes]), AC_MSG_RESULT([no])]);
+])], [HAVE_ATTRIBUTE_VISIBILITY="yes"; AC_MSG_RESULT([yes])], AC_MSG_RESULT([no]));

if test "x$HAVE_ATTRIBUTE_VISIBILITY" = xyes; then
    AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler supports __attribute__((visibility))])

(Gotta love autoconf and the mysteries of proper [] placements.)

After that I can build on Solaris with patch #1 applied, but patch #2 then breaks
due to Solaris Studio 12.4 compilers being more pedantic about prototypes in headers
having the external visibility declarations too - lots of errors of the form:

"intel_bufmgr.c", line 60: redeclaration must have the same or more restrictive linker scoping: drm_intel_bo_alloc_for_render

It looks like none of the headers have the drm_public attributes the compiler wants
to see there.

Additionally can you guys build libdrm (barring the patch you sent the
other day), or you need some parts of this ancient patch
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/x11-libs/libdrm/files/libdrm-2.4.58-solaris.patch?view=markup

That looks very much like an ancient patch we still have in our tree [1] since
I never found out if we could upstream it or replace it from our former DRM
team. Unfortunately, they're all gone now - I've cc'ed the people who picked
up that work - I'd already asked Randy to look at it as part of the work he's
doing to reconcile our DRM sources with upstream.

[1] https://hg.java.net/hg/solaris-x11~x-s12-clone/file/4e6b5865e3ec/open-src/lib/libdrm/solaris-drm-port.patch

I keep a subset in my local git repo to enable building from upstream since the
raw upstream builds don't work without at least some of it. (See attached patches for that subset.)

--
	-Alan Coopersmith-              alan.coopersmith@xxxxxxxxxx
	 Oracle Solaris Engineering - http://blogs.oracle.com/alanc
From 2186cc5946085c4f6cf5c1191abf7518cbf5b1bb Mon Sep 17 00:00:00 2001
From: Alan Coopersmith <alan.coopersmith@xxxxxxx>
Date: Tue, 17 Jun 2008 15:47:23 -0700
Subject: [PATCH:libdrm 1/2] Make data passed to ioctl's on Solaris match the
 Solaris kernel DRI implementation

---
 include/drm/drm.h |   13 +++++++++++++
 xf86drm.c         |    7 +++++++
 2 files changed, 20 insertions(+)

diff --git a/include/drm/drm.h b/include/drm/drm.h
index 229a29f..ec96620 100644
--- a/include/drm/drm.h
+++ b/include/drm/drm.h
@@ -210,12 +210,22 @@ struct drm_ctx_priv_map {
  * \sa drmAddMap().
  */
 struct drm_map {
+#ifdef __sun
+	unsigned long long offset;
+				/**< Requested physical address (0 for SAREA)*/
+	unsigned long long handle;
+				/**< User-space: "Handle" to pass to mmap() */
+				/**< Kernel-space: kernel-virtual address */
+#else
 	unsigned long offset;	 /**< Requested physical address (0 for SAREA)*/
+#endif
 	unsigned long size;	 /**< Requested physical size (bytes) */
 	enum drm_map_type type;	 /**< Type of memory to map */
 	enum drm_map_flags flags;	 /**< Flags */
+#ifndef __sun
 	void *handle;		 /**< User-space: "Handle" to pass to mmap() */
 				 /**< Kernel-space: kernel-virtual address */
+#endif
 	int mtrr;		 /**< MTRR slot used */
 	/*   Private data */
 };
@@ -379,6 +389,9 @@ struct drm_buf_map {
 	void *virtual;		/**< Mmap'd area in user-virtual */
 #endif
 	struct drm_buf_pub *list;	/**< Buffer information */
+#ifdef __sun
+	int fd;
+#endif
 };
 
 /**
diff --git a/xf86drm.c b/xf86drm.c
index e73cddd..fc2c956 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -1096,7 +1096,11 @@ int drmRmMap(int fd, drm_handle_t handle)
     drm_map_t map;
 
     memclear(map);
+#ifdef __sun
+    map.handle = handle;
+#else
     map.handle = (void *)(uintptr_t)handle;
+#endif
 
     if(drmIoctl(fd, DRM_IOCTL_RM_MAP, &map))
 	return -errno;
@@ -1330,6 +1334,9 @@ drmBufMapPtr drmMapBufs(int fd)
     int           i;
 
     memclear(bufs);
+#ifdef __sun
+    bufs.fd = fd;
+#endif
     if (drmIoctl(fd, DRM_IOCTL_MAP_BUFS, &bufs))
 	return NULL;
 
-- 
1.7.9.2

From 21f07103c94b6df7a64b6f1dfe981f8b69e4bb52 Mon Sep 17 00:00:00 2001
From: Alan Coopersmith <alan.coopersmith@xxxxxxx>
Date: Wed, 16 Dec 2009 14:57:54 -0800
Subject: [PATCH:libdrm 2/2] Add _IOC definition for Solaris/OpenSolaris

Signed-off-by: Alan Coopersmith <alan.coopersmith@xxxxxxx>
---
 xf86drm.h |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/xf86drm.h b/xf86drm.h
index 40c55c9..781c323 100644
--- a/xf86drm.h
+++ b/xf86drm.h
@@ -56,9 +56,17 @@ extern "C" {
 #define DRM_IOC_READWRITE	_IOC_READ|_IOC_WRITE
 #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
 
-#else /* One of the *BSDs */
+#else /* One of the *BSDs or Solaris */
 
 #include <sys/ioccom.h>
+
+#if defined(__sun) && !defined(_IOC)
+#define _IOC(dir, group, nr, size)                                      \
+    ((dir) == DRM_IOC_READWRITE ? _IOWRN((group), (nr), (size)) :       \
+     ((dir) == DRM_IOC_WRITE ? _IOWN((group), (nr), (size)) :           \
+      /* (dir) == DRM_IOC_READ */  _IORN((group), (nr), (size)) ))
+#endif
+
 #define DRM_IOCTL_NR(n)         ((n) & 0xff)
 #define DRM_IOC_VOID            IOC_VOID
 #define DRM_IOC_READ            IOC_OUT
-- 
1.7.9.2

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel

[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux