[lttng-dev] userspace-rcu-0.8.6 problems on MacOSX

Alexandre Montplaisir alexmonthy at voxpopuli.im
Fri Mar 13 17:19:37 EDT 2015

On 2015-03-13 4:59 AM, Zifei Tong wrote:
> [...]
> gcc 4.9 from Homebrew works fine. For clang I have to apply a patch to move
> '__attribute__((__transparent_union__))' after the union declaration.
> I think this
> might be a clang bug.

Indeed, I tested it with clang 3.5 on Linux and it gives the same error 
too. But your patch fixes it (and it keeps working fine with GCC), it 
seems Clang expects the __attribute__ to be after the closing brace. GCC 
accepts both, although they recommend the other way:

(from https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html )
For an enum, struct or union type, you may specify attributes either 
between the enum, struct or union tag and the name of the type, or just 
past the closing curly brace of the /definition/. The former syntax is 

I don't know what the liburcu maintainers prefer, to keep using GCC's 
recommended syntax, or to make it compilable on current Clang?

>> On 2015-03-11 11:50 AM, Jim Reid wrote:
>>> Hi. There are some problems getting this to compile on MacOSX (10.9.5):
>>> 1) Many of the make regtest tests fail because the time command use
>>> command line arguments. eg:
>>> ...
>>> ./test_urcu_lgc 4 4 10 -d 2 -b 32768
>>> /usr/bin/time: illegal option -- a
>>> usage: time [-lp] command.
>>> ...

I found the culprit, the scripts tests/benchmark/runtests.sh and 
runtests-batch.sh run "time" with -a -o options, with don't exist on 
OSX's implementation. Changing the script to instead use output 
redirection keeps more or less the same output:

diff --git a/tests/benchmark/runtests-batch.sh b/tests/benchmark/runtests-batch.sh

index 2da1401..3d295fb 100755

--- a/tests/benchmark/runtests-batch.sh

+++ b/tests/benchmark/runtests-batch.sh

@@ -6,7 +6,7 @@ log_file="runall.detail.log"


  # Check if time bin is non-empty

  if [ -n "$test_time_bin" ]; then

-       time_command="$test_time_bin -a -o $log_file"

+       time_command="$test_time_bin"




@@ -14,6 +14,6 @@ fi

  #for a in test_urcu_gc test_urcu_gc_mb test_urcu_qsbr_gc; do

  for a in test_urcu_gc; do

         echo "./${a} $*" | tee -a "$log_file"

-       $time_command ./${a} $*

+       $time_command ./${a} $* 2>> $log_file


However, by doing so those tests now hang on my Mac test system (whereas 
before they would get skipped). Is it possible those tests don't even 
work on Mac?

>>> 2) The generated Makefiles feed Linuxy linker arguments (-Wl,-rpath==) to
>>> the compiler.
>>> I kludged that by manually editing the Makefile(s) to just use -L././libs
>>> instead. Which would seem to be a better solution in general. YMMV.
> Apparently, ld in OS X does not support -Wl,-rpath="/foo/bar" syntax,
> simply replace '='
> with space like -Wl,-rpath "/foo/bar" did the trick. I can send a
> patch for this.

Sure, you could send a patch. It keeps working with GNU's ld too, so I 
assume it would be acceptable.


> Thanks,
> Zifei Tong
>>> Could you please fix these for a future release? Thanks.

More information about the lttng-dev mailing list