1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# Try setting up some bits for dtrace.
#
# By itself, dtrace can trace things like function entry/return points
# just fine, and even pull numeric and string arguments. More involved
# data structures, though, would either need manual definition in the D
# scripts (which is practically impossible for anything sizable), manual
# specification of offsets (even worse), or CTF info included in the
# binary (hey, we can do that!). So, see if we can pull that stuff in...
find_program(CTFCONVERT ctfconvert)
find_program(CTFMERGE ctfmerge)
if(CTFCONVERT AND CTFMERGE)
message(STATUS "Found ctfconvert/ctfmerge, setting up CTF info for dtrace.")
# ctfconvert/merge is about pulling over debug info, so make sure we
# enable that in the objects.
add_definitions("-g")
# ctfconvert/merge on BSD has a '-g' option, which we want to use
# (preserves the -g info in the final binary). Solarish apparently
# doesn't; maybe it always does it anyway? Regardless, figure out
# whether it takes that arg...
execute_process(COMMAND ${CTFCONVERT} -g -l0 /dev/null
OUTPUT_QUIET ERROR_VARIABLE _CTFCONVERT_G_OUT)
if(${_CTFCONVERT_G_OUT} MATCHES "^Usage:")
# No -g; leave vars alone
else()
# Add -g
set(CTFCONVERT "${CTFCONVERT} -g")
set(CTFMERGE "${CTFMERGE} -g")
endif()
# This is a horrific hack. cmake provides no way to actually find
# out the list of object files, or where they are, because that would
# be too easy. So we have to "know", and take our best shot. Sigh.
# Well, it's really only a dev tool anyway, so I guess some manual
# mess isn't the end of the world. We can't check the existence yet
# here, since it hasn't been created at this point in the process.
# So we just have to hope. mk_ctf_info.sh will warn us if things
# change...
set(CODIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/ctwmlib.dir)
add_custom_command(TARGET ctwm POST_BUILD
COMMAND ${CMAKE_COMMAND} -E env
CTFCONVERT=${CTFCONVERT} CTFMERGE=${CTFMERGE}
${TOOLS}/mk_ctf_info.sh ${CODIR}
${CMAKE_CURRENT_BINARY_DIR}/ctwm
COMMENT "Converting in CTF info for dtrace"
)
endif()
|