XXX: Allow inline SRTs to be easily disabled
authorBen Gamari <ben@smart-cactus.org>
Sat, 27 Apr 2019 19:56:55 +0000 (15:56 -0400)
committerBen Gamari <ben@smart-cactus.org>
Tue, 21 May 2019 13:39:36 +0000 (09:39 -0400)
compiler/cmm/CmmBuildInfoTables.hs
includes/rts/storage/InfoTables.h
utils/deriveConstants/Main.hs

index be96fba..ce7c533 100644 (file)
@@ -747,12 +747,13 @@ oneSRT dflags staticFuns blockids lbls isCAF cafs = do
     -- build an SRT object at all, instead we put the singleton SRT
     -- entry in the info table.
     [one@(SRTEntry lbl)]
-      | -- Info tables refer to SRTs by offset (as noted in the section
+      | uSE_INLINE_SRT_FIELD dflags
+        -- Info tables refer to SRTs by offset (as noted in the section
         -- "Referring to an SRT from the info table" of Note [SRTs]). However,
         -- when dynamic linking is used we cannot guarantee that the offset
         -- between the SRT and the info table will fit in the offset field.
         -- Consequently we build a singleton SRT in in this case.
-        not (labelDynamic dflags this_mod lbl)
+          && not (labelDynamic dflags this_mod lbl)
 
         -- MachO relocations can't express offsets between compilation units at
         -- all, so we are always forced to build a singleton SRT in this case.
index 89fb2db..e45cc3a 100644 (file)
@@ -338,7 +338,7 @@ typedef struct StgConInfoTable_ {
  * info must be a Stg[Ret|Thunk]InfoTable* (an info table that has a SRT)
  */
 #if defined(TABLES_NEXT_TO_CODE)
-#if defined(x86_64_TARGET_ARCH)
+#if defined(USE_INLINE_SRT_FIELD)
 #define GET_SRT(info) \
   ((StgClosure*) (((StgWord) ((info)+1)) + (info)->i.srt))
 #else
@@ -365,7 +365,7 @@ typedef struct StgConInfoTable_ {
  * info must be a StgFunInfoTable*
  */
 #if defined(TABLES_NEXT_TO_CODE)
-#if defined(x86_64_TARGET_ARCH)
+#if defined(USE_INLINE_SRT_FIELD)
 #define GET_FUN_SRT(info) \
   ((StgClosure*) (((StgWord) ((info)+1)) + (info)->i.srt))
 #else
index 335afcd..182571d 100644 (file)
@@ -628,6 +628,9 @@ wanteds os = concat
           -- header sizes)
           ,constantWord Haskell "MIN_PAYLOAD_SIZE" "MIN_PAYLOAD_SIZE"
 
+           -- whether to use inline SRT offsets (see Note [SRTs])
+          ,constantBool Haskell "USE_INLINE_SRT_FIELD" "defined(USE_INLINE_SRT_FIELD)"
+
           ,constantInt  Haskell "MIN_INTLIKE" "MIN_INTLIKE"
           ,constantWord Haskell "MAX_INTLIKE" "MAX_INTLIKE"