ghc-debug-stub 0.6.0.0 → 0.7.0.0
raw patch · 4 files changed
+25/−13 lines, 4 filesdep ~ghc-debug-conventiondep ~ghc-primPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: ghc-debug-convention, ghc-prim
API changes (from Hackage documentation)
- GHC.Debug.Stub: instance GHC.Show.Show GHC.Debug.Stub.SocketAddr
+ GHC.Debug.Stub: instance GHC.Internal.Show.Show GHC.Debug.Stub.SocketAddr
Files
- CHANGELOG.md +4/−0
- cbits/stub.cpp +17/−9
- cbits/trace.h +1/−1
- ghc-debug-stub.cabal +3/−3
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for ghc-debug-stub +## 0.7.0.0 -- 2025-05-20++* Compatability with 9.10 and 9.12+ ## 0.6.0.0 -- 2024-04-10 * Add requests for decoding cost centres and other profiling info
cbits/stub.cpp view
@@ -149,7 +149,7 @@ this->sock.write((char *) &status_payload, sizeof(uint16_t)); // then the body, usually empty trace("responding with body of length %lu: ( ", len);- for (int i = 0; i < len; i++)+ for (size_t i = 0; i < len; i++) { trace("%02X", buf[i]); }@@ -262,7 +262,7 @@ void collect_threads(std::function<void(StgTSO*)> f) {- for (int g=0; g < RtsFlags.GcFlags.generations; g++) {+ for (uint32_t g=0; g < RtsFlags.GcFlags.generations; g++) { StgTSO *tso = generations[g].threads; while (tso != END_TSO_QUEUE) { f(tso);@@ -295,7 +295,7 @@ // Size fields are always uint32_t in network-byte-order. static void write_size(Response& resp, StgWord size) { uint32_t size_payload = htonl(size);- trace("SIZE %llu", size);+ trace("SIZE %lu", size); resp.write((uint32_t) size_payload); } @@ -315,8 +315,6 @@ } static void write_small_bitmap(Response& resp, StgWord bitmap, StgWord size) {- uint32_t i = 0;- // Small bitmap write_size(resp, size); while (size > 0) {@@ -643,7 +641,7 @@ break; case CMD_SAVED_OBJECTS:- int i;+ StgWord i; for (i = 0; i < g_savedObjectState.n_objects; i++) { StgStablePtr v = g_savedObjectState.objects[i]; resp.write((uint64_t)(UNTAG_CLOSURE((StgClosure *)deRefStablePtr(v))));@@ -740,20 +738,20 @@ trace("ELT: %p\n", info_table);-#if MIN_VERSION_GLASGOW_HASKELL(9,11,20240401,0)+#if MIN_VERSION_GLASGOW_HASKELL(9,10,0,0) InfoProvEnt elt; int elt_res = lookupIPE(info_table, &elt); #else InfoProvEnt * elt = lookupIPE(info_table); int elt_res = (bool) elt; #endif- uint32_t len_payload;+ if (!elt_res){ trace("NOT FOUND\n"); resp.write((uint32_t) 0); } else {-#if MIN_VERSION_GLASGOW_HASKELL(9,11,20240401,0)+#if MIN_VERSION_GLASGOW_HASKELL(9,10,0,0) InfoProv ip = elt.prov; #else InfoProv ip = elt->prov;@@ -764,7 +762,17 @@ // Using the function just produces garbage.. no idea why write_string(resp, ip.table_name);+#if MIN_VERSION_GLASGOW_HASKELL(9,10,2,0)+ // In 9.10, GHC changed the closure_desc to uint32_t.+ // To maintain the previous behaviour, we format the id as its string+ // representation. For example, the number 10 is represented as the+ // string "10".+ char closure_desc_buf[CLOSURE_DESC_BUFFER_SIZE] = {};+ formatClosureDescIpe(&elt, closure_desc_buf);+ write_string(resp, closure_desc_buf);+#else write_string(resp, ip.closure_desc);+#endif write_string(resp, ip.ty_desc); write_string(resp, ip.label); write_string(resp, ip.module);
cbits/trace.h view
@@ -1,4 +1,4 @@ #pragma once void trace(const char *fmt, ...)- __attribute__((format (PRINTF, 1, 2)));+ __attribute__((format (printf, 1, 2)));
ghc-debug-stub.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: ghc-debug-stub-version: 0.6.0.0+version: 0.7.0.0 synopsis: Functions for instrumenting your application so the heap can be analysed with ghc-debug-common. description: Functions for instrumenting your application so the heap can@@ -31,8 +31,8 @@ build-depends: base >=4.16 && < 5 , directory ^>= 1.3 , filepath >= 1.4 && < 1.6- , ghc-prim >= 0.8 && < 0.12- , ghc-debug-convention == 0.6.0.0+ , ghc-prim >= 0.8 && < 0.14+ , ghc-debug-convention == 0.7.0.0 default-language: Haskell2010 cxx-sources: cbits/stub.cpp, cbits/socket.cpp, cbits/trace.cpp cxx-options: -std=gnu++11 -pthread -O3 -g3 -DTHREADED_RTS