Hi! On Mon, 29 Sep 2014 20:13:38 +0200, I wrote: > On Wed, 9 Oct 2013 18:32:11 +0000, "Iyer, Balaji V" <[email protected]> > wrote: > > [libcilkrts] > > Here is a patch to have libcilkrts use AC_USE_SYSTEM_EXTENSIONS (as other > libraries are doing) instead of manually fiddling with the _GNU_SOURCE > definition. This increases portability, as most of those definitions are > currently hard-coded for __linux__ only. Tested on x86 GNU/Hurd, and > x86_64 GNU/Linux is in progress. OK for trunk once testing completed?
Barry had a question about this change, so let me clarify this:
> libcilkrts/
> * configure.ac (AC_USE_SYSTEM_EXTENSIONS): Instantiate.
> <HAVE_PTHREAD_AFFINITY_NP>: Don't define _GNU_SOURCE.
> * configure: Regenerate.
> * runtime/os-unix.c [__linux__] (_GNU_SOURCE): Don't define.
> * runtime/sysdep-unix.c [__linux__] (_GNU_SOURCE): Likewise.
> --- libcilkrts/configure.ac
> +++ libcilkrts/configure.ac
> @@ -39,6 +39,9 @@ AC_PREREQ([2.64])
> AC_CANONICAL_SYSTEM
> target_alias=${target_alias-$host_alias}
> AC_SUBST(target_alias)
> +
> +AC_USE_SYSTEM_EXTENSIONS
> @@ -188,8 +191,7 @@ AC_LINK_IFELSE(
> # Check for pthread_{,attr_}[sg]etaffinity_np.
> AC_LINK_IFELSE(
> [AC_LANG_PROGRAM(
> - [#define _GNU_SOURCE
> - #include <pthread.h>],
> + [#include <pthread.h>],
> [cpu_set_t cpuset;
> pthread_attr_t attr;
> pthread_getaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset);
> --- libcilkrts/runtime/os-unix.c
> +++ libcilkrts/runtime/os-unix.c
> @@ -36,13 +36,6 @@
> * POSSIBILITY OF SUCH DAMAGE.
> **************************************************************************/
>
> -#ifdef __linux__
> - // define _GNU_SOURCE before *any* #include.
> - // Even <stdint.h> will break later #includes if this macro is not
> - // already defined when it is #included.
> -# define _GNU_SOURCE
> -#endif
> --- libcilkrts/runtime/sysdep-unix.c
> +++ libcilkrts/runtime/sysdep-unix.c
> @@ -39,13 +39,6 @@
> **************************************************************************
> */
>
> -#ifdef __linux__
> - // define _GNU_SOURCE before *any* #include.
> - // Even <stdint.h> will break later #includes if this macro is not
> - // already defined when it is #included.
> -# define _GNU_SOURCE
> -#endif
On Wed, 1 Oct 2014 13:18:51 +0000, "Tannenbaum, Barry M"
<[email protected]> wrote:
> I've been looking at your 3rd edit to remove the use of _GNU_SOURCE for
> portability. We didn't define this arbitrarily. We want to call dladdr() to
> get the shared object associated with an address. The docs state that in
> order to call this function, we should be defining _GNU_SOURCE.
You're correct that -D_GNU_SOURCE is required for this. What I proposed
is to remove the *manual* _GNU_SOURCE definitions, that are currently
conditioned to __linux__, given that I had put AC_USE_SYSTEM_EXTENSIONS
into configure.ac, which globally adds -D_GNU_SOURCE as well as other
similar defines to the compiler flags, see
<https://www.gnu.org/software/autoconf/manual/autoconf-2.64/html_node/Posix-Variants.html>.
Of course, this is a bit of a "sledgehammer approach" to the problem, but
is what is being done in other libraries that ship with GCC.
Now, I don't know all the contexts in which the libcilkrts code is being
built. I thought all of them -- or, at least those where the _GNU_SOURCE
definition does have any effect: GNU systems using glibc -- are using the
configure script, but maybe that's not true. In this case, in these
other build systems, if any, also (maybe just unconditionally) add
-D_GNU_SOURCE to the compiler flags. If that's not an option, leave in
the manual _GNU_SOURCE definitions in the *.c files, conditioned to
__linux__ -- which is ugly ;-) but does fulfil its purpose.
> How should I be determining if this functionality is available?
You can then assume that dladdr is available.
Grüße,
Thomas
pgpOZMuEnA7B7.pgp
Description: PGP signature
