--- cmake/dtrace_prelink.cmake.orig 2011-06-21 16:42:39.000000000 +0000 +++ cmake/dtrace_prelink.cmake 2011-07-27 11:48:13.000000000 +0000 @@ -44,7 +44,13 @@ FILE(STRINGS ${dir}/dtrace_objects OBJS) FOREACH(obj ${OBJS}) IF(obj) - EXECUTE_PROCESS(COMMAND cp ${obj} dtrace_objects_merge) + # use original, non modified object + IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + GET_FILENAME_COMPONENT(obj_dest ${obj} NAME) + EXECUTE_PROCESS(COMMAND cp ${obj}.orig dtrace_objects_merge/${obj_dest}) + ELSE() + EXECUTE_PROCESS(COMMAND cp ${obj} dtrace_objects_merge) + ENDIF() ENDIF() ENDFOREACH() ENDFOREACH() @@ -62,6 +68,18 @@ LIST(APPEND REL_OBJECTS ${REL}) ENDFOREACH() +# there is a bug in dtrace/freebsd. When dtrace -G is running second time on already +# processed object it producing broken output. We need to save objects to use them +# later on a link stage + +IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + FOREACH(rel_object ${REL_OBJECTS}) + EXECUTE_PROCESS( + COMMAND cp ${rel_object} ${rel_object}.orig + ) + ENDFOREACH() +ENDIF() + FILE(WRITE dtrace_timestamp "") EXECUTE_PROCESS( COMMAND ${DTRACE} ${DTRACE_FLAGS} -o ${OUTFILE} -G -s ${DFILE} ${REL_OBJECTS}