MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / CallstackDataCb

Function CallstackDataCb

Source/ThirdParty/tracy/client/TracyCallstack.cpp:1147–1217  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1145}
1146
1147static int CallstackDataCb( void* /*data*/, uintptr_t pc, uintptr_t lowaddr, const char* fn, int lineno, const char* function )
1148{
1149 cb_data[cb_num].symLen = 0;
1150 cb_data[cb_num].symAddr = (uint64_t)lowaddr;
1151
1152 if( !fn && !function )
1153 {
1154 const char* symname = nullptr;
1155 auto vptr = (void*)pc;
1156 ptrdiff_t symoff = 0;
1157
1158 Dl_info dlinfo;
1159 if( dladdr( vptr, &dlinfo ) )
1160 {
1161 symname = dlinfo.dli_sname;
1162 symoff = (char*)pc - (char*)dlinfo.dli_saddr;
1163 const char* demangled = ___tracy_demangle( symname );
1164 if( demangled ) symname = demangled;
1165 }
1166
1167 if( !symname ) symname = "[unknown]";
1168
1169 if( symoff == 0 )
1170 {
1171 const auto len = std::min<size_t>( strlen( symname ), std::numeric_limits<uint16_t>::max() );
1172 cb_data[cb_num].name = CopyStringFast( symname, len );
1173 }
1174 else
1175 {
1176 char buf[32];
1177 const auto offlen = sprintf( buf, " + %td", symoff );
1178 const auto namelen = std::min<size_t>( strlen( symname ), std::numeric_limits<uint16_t>::max() - offlen );
1179 auto name = (char*)tracy_malloc_fast( namelen + offlen + 1 );
1180 memcpy( name, symname, namelen );
1181 memcpy( name + namelen, buf, offlen );
1182 name[namelen + offlen] = '\0';
1183 cb_data[cb_num].name = name;
1184 }
1185
1186 cb_data[cb_num].file = CopyStringFast( "[unknown]" );
1187 cb_data[cb_num].line = 0;
1188 }
1189 else
1190 {
1191 if( !fn ) fn = "[unknown]";
1192 if( !function )
1193 {
1194 function = "[unknown]";
1195 }
1196 else
1197 {
1198 const char* demangled = ___tracy_demangle( function );
1199 if( demangled ) function = demangled;
1200 }
1201
1202 const auto len = std::min<size_t>( strlen( function ), std::numeric_limits<uint16_t>::max() );
1203 cb_data[cb_num].name = CopyStringFast( function, len );
1204 cb_data[cb_num].file = NormalizePath( fn );

Callers

nothing calls this directly

Calls 6

___tracy_demangleFunction · 0.85
CopyStringFastFunction · 0.85
tracy_malloc_fastFunction · 0.85
memcpyFunction · 0.85
NormalizePathFunction · 0.85
maxFunction · 0.50

Tested by

no test coverage detected