summaryrefslogtreecommitdiff
path: root/includes/rts
diff options
context:
space:
mode:
authorBartosz Nitka <niteria@gmail.com>2017-09-18 07:53:56 -0700
committerBartosz Nitka <niteria@gmail.com>2017-09-18 09:17:31 -0700
commitcdaf5f2027ea9678e9f92e9140c79da2daa78360 (patch)
treef5faf4681779da5f65352639fa85354c97b91c17 /includes/rts
parent2258a2936bbeebcf671e19e8d6408b3a611c329d (diff)
downloadhaskell-cdaf5f2027ea9678e9f92e9140c79da2daa78360.tar.gz
[RTS] Add getObjectLoadStatus
This adds a function to the RTS linker API which lets the user check the status of dynamically linked objects. It was initially proposed by @afarmer in D2068. It's useful for testing the linker and also for detecting retention problems in production. It takes a path, because it's easier to use path as key instead of producing some stable handle. It returns an enum instead of bool, because I see no reason for destroying information. All the complexity is already out in the open, so there's nothing to save the users from. Test Plan: ./validate Reviewers: simonmar, Phyx, bgamari, austin, erikd Reviewed By: Phyx, bgamari Subscribers: rwbarton, afarmer, thomie Differential Revision: https://phabricator.haskell.org/D3963
Diffstat (limited to 'includes/rts')
-rw-r--r--includes/rts/Linker.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/includes/rts/Linker.h b/includes/rts/Linker.h
index 793195b3ab..298dc6a366 100644
--- a/includes/rts/Linker.h
+++ b/includes/rts/Linker.h
@@ -47,6 +47,20 @@ HsInt insertSymbol(pathchar* obj_name, char* key, void* data);
/* lookup a symbol in the hash table */
void *lookupSymbol( char *lbl );
+/* See Linker.c Note [runtime-linker-phases] */
+typedef enum {
+ OBJECT_LOADED,
+ OBJECT_NEEDED,
+ OBJECT_RESOLVED,
+ OBJECT_UNLOADED,
+ OBJECT_DONT_RESOLVE,
+ OBJECT_NOT_LOADED /* The object was either never loaded or has been
+ fully unloaded */
+} OStatus;
+
+/* check object load status */
+OStatus getObjectLoadStatus( pathchar *path );
+
/* delete an object from the pool */
HsInt unloadObj( pathchar *path );