[Git][ghc/ghc][wip/T24504] IPE: WIP: Replace closure_desc string representation in logs output on Word32
Serge S. Gulin (@gulin.serge)
gitlab at gitlab.haskell.org
Wed May 8 05:24:25 UTC 2024
Serge S. Gulin pushed to branch wip/T24504 at Glasgow Haskell Compiler / GHC
Commits:
97998bb6 by Serge S. Gulin at 2024-05-08T08:24:06+03:00
IPE: WIP: Replace closure_desc string representation in logs output on Word32
- - - - -
6 changed files:
- rts/IPE.c
- rts/Trace.c
- rts/eventlog/EventLog.c
- rts/include/rts/IPE.h
- testsuite/tests/rts/ipe/ipeMap.c
- testsuite/tests/rts/ipe/ipe_lib.c
Changes:
=====================================
rts/IPE.c
=====================================
@@ -176,6 +176,10 @@ void registerInfoProvList(IpeBufferListNode *node) {
}
}
+void formatClosureDescIpe(const InfoProvEnt *ipe_buf, const char *str_buf) {
+ sprintf((char*) str_buf, "closure_desc_%03u", ipe_buf->prov.closure_desc);
+}
+
bool lookupIPE(const StgInfoTable *info, InfoProvEnt *out) {
updateIpeMap();
IpeMapEntry *map_ent = (IpeMapEntry *) lookupHashTable(ipeMap, (StgWord)info);
=====================================
rts/Trace.c
=====================================
@@ -688,9 +688,12 @@ void traceIPE(const InfoProvEnt *ipe)
if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
ACQUIRE_LOCK(&trace_utx);
+ const char closure_desc_buf[256] = {};
+ formatClosureDescIpe(ipe, closure_desc_buf);
+
tracePreface();
- debugBelch("IPE: table_name %s, closure_desc %d, ty_desc %s, label %s, unit %s, module %s, srcloc %s:%s\n",
- ipe->prov.table_name, ipe->prov.closure_desc, ipe->prov.ty_desc,
+ debugBelch("IPE: table_name %s, closure_desc %s, ty_desc %s, label %s, unit %s, module %s, srcloc %s:%s\n",
+ ipe->prov.table_name, closure_desc_buf, ipe->prov.ty_desc,
ipe->prov.label, ipe->prov.unit_id, ipe->prov.module,
ipe->prov.src_file, ipe->prov.src_span);
=====================================
rts/eventlog/EventLog.c
=====================================
@@ -1441,11 +1441,14 @@ void postTickyCounterSamples(StgEntCounter *counters)
#endif /* TICKY_TICKY */
void postIPE(const InfoProvEnt *ipe)
{
+ const char closure_desc_buf[256] = {};
+ formatClosureDescIpe(ipe, closure_desc_buf);
+
// See Note [Maximum event length].
const StgWord MAX_IPE_STRING_LEN = 65535;
ACQUIRE_LOCK(&eventBufMutex);
StgWord table_name_len = MIN(strlen(ipe->prov.table_name), MAX_IPE_STRING_LEN);
- StgWord closure_desc_len = MIN(strlen(ipe->prov.closure_desc), MAX_IPE_STRING_LEN);
+ StgWord closure_desc_len = MIN(strlen(closure_desc_buf), MAX_IPE_STRING_LEN);
StgWord ty_desc_len = MIN(strlen(ipe->prov.ty_desc), MAX_IPE_STRING_LEN);
StgWord label_len = MIN(strlen(ipe->prov.label), MAX_IPE_STRING_LEN);
StgWord module_len = MIN(strlen(ipe->prov.module), MAX_IPE_STRING_LEN);
@@ -1462,7 +1465,7 @@ void postIPE(const InfoProvEnt *ipe)
postPayloadSize(&eventBuf, len);
postWord64(&eventBuf, (StgWord) INFO_PTR_TO_STRUCT(ipe->info));
postStringLen(&eventBuf, ipe->prov.table_name, table_name_len);
- postStringLen(&eventBuf, ipe->prov.closure_desc, closure_desc_len);
+ postStringLen(&eventBuf, closure_desc_buf, closure_desc_len);
postStringLen(&eventBuf, ipe->prov.ty_desc, ty_desc_len);
postStringLen(&eventBuf, ipe->prov.label, label_len);
postStringLen(&eventBuf, ipe->prov.module, module_len);
=====================================
rts/include/rts/IPE.h
=====================================
@@ -89,5 +89,9 @@ typedef struct IpeBufferListNode_ {
void registerInfoProvList(IpeBufferListNode *node);
+// We leave it in old format to keep compatibility with existing https://github.com/haskell/ghc-events
+// See: https://github.com/haskell/ghc-events/commit/cce6a35677f5f99b44c21d86febd295b909ef1ce
+void formatClosureDescIpe(const InfoProvEnt *ipe_buf, const char *str_buf);
+
// Returns true on success, initializes `out`.
bool lookupIPE(const StgInfoTable *info, InfoProvEnt *out);
=====================================
testsuite/tests/rts/ipe/ipeMap.c
=====================================
@@ -68,10 +68,13 @@ HaskellObj shouldFindOneIfItHasBeenRegistered(Capability *cap) {
registerInfoProvList(node);
- InfoProvEnt result = lookupIPE_("shouldFindOneIfItHasBeenRegistered", get_itbl(fortyTwo));
+ const InfoProvEnt result = lookupIPE_("shouldFindOneIfItHasBeenRegistered", get_itbl(fortyTwo));
+
+ const char closure_desc_buf[256] = {};
+ formatClosureDescIpe(&result, closure_desc_buf);
assertStringsEqual(result.prov.table_name, "table_name_042");
- assertStringsEqual(result.prov.closure_desc, "closure_desc_042");
+ assertStringsEqual(closure_desc_buf, "closure_desc_042");
assertStringsEqual(result.prov.ty_desc, "ty_desc_042");
assertStringsEqual(result.prov.label, "label_042");
assertStringsEqual(result.prov.unit_id, "unit-id");
=====================================
testsuite/tests/rts/ipe/ipe_lib.c
=====================================
@@ -33,10 +33,7 @@ IpeBufferEntry makeAnyProvEntry(Capability *cap, StringTable *st, int i) {
snprintf(tableName, tableNameLength, "table_name_%03i", i);
provEnt.table_name = add_string(st, tableName);
- unsigned int closureDescLength = strlen("closure_desc_") + 3 /* digits */ + 1 /* null character */;
- char *closureDesc = malloc(sizeof(char) * closureDescLength);
- snprintf(closureDesc, closureDescLength, "closure_desc_%03i", i);
- provEnt.closure_desc = add_string(st, closureDesc);
+ provEnt.closure_desc = i;
unsigned int tyDescLength = strlen("ty_desc_") + 3 /* digits */ + 1 /* null character */;
char *tyDesc = malloc(sizeof(char) * tyDescLength);
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/97998bb63996088251207247f10e5e3b15a7c62f
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/97998bb63996088251207247f10e5e3b15a7c62f
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20240508/4af10f98/attachment-0001.html>
More information about the ghc-commits
mailing list