Sven Tennie pushed to branch wip/romes/hadrian-cross-stage2-rebase_SVEN_FINAL at Glasgow Haskell Compiler / GHC

Commits:

4 changed files:

Changes:

  • testsuite/tests/driver/config-pins/ConfigPinsExpected.py
    1
    +# Expected GHC config values, keyed by platform key.
    
    2
    +#
    
    3
    +# Platform key construction:
    
    4
    +#   base = "target platform string" from ghc --info  (or config.platform)
    
    5
    +#   key  = base
    
    6
    +#        + ("-cross"   if cross-compiling)
    
    7
    +#        + ("-unreg"   if Unregisterised,
    
    8
    +#           "-no_tntc" elif Tables-next-to-code == NO)
    
    9
    +#
    
    10
    +# When a new platform is encountered the test prints a ready-to-paste entry.
    
    11
    +
    
    12
    +
    
    13
    +def platform_key(platform, is_cross, is_unreg, no_tntc):
    
    14
    +    key = platform
    
    15
    +    if is_cross:  key += "-cross"
    
    16
    +    if is_unreg:  key += "-unreg"
    
    17
    +    elif no_tntc: key += "-no_tntc"
    
    18
    +    return key
    
    19
    +
    
    20
    +PINNED_GHC_INFO_FIELDS = [
    
    21
    +    "target arch",
    
    22
    +    "target os",
    
    23
    +    "target platform string",
    
    24
    +    "target word size",
    
    25
    +    "target word big endian",
    
    26
    +    "Tables next to code",
    
    27
    +    "Support SMP",
    
    28
    +    "Have interpreter",
    
    29
    +    "Use interpreter",
    
    30
    +    "Have native code generator",
    
    31
    +    "Unregisterised",
    
    32
    +    "Leading underscore",
    
    33
    +    "target has RTS linker",
    
    34
    +    "target RTS linker only supports shared libraries",
    
    35
    +    "cross compiling",
    
    36
    +    "target has GNU nonexec stack",
    
    37
    +    "target has subsections via symbols",
    
    38
    +    "Target default backend",
    
    39
    +]
    
    40
    +
    
    41
    +GHC_INFO_EXPECTED = {
    
    42
    +
    
    43
    +    # ── x86_64 Linux (all distros) ───────────────────────────────────────────
    
    44
    +    "x86_64-unknown-linux": {
    
    45
    +        "target arch":                                      "ArchX86_64",
    
    46
    +        "target os":                                        "OSLinux",
    
    47
    +        "target platform string":                           "x86_64-unknown-linux",
    
    48
    +        "target word size":                                 "8",
    
    49
    +        "target word big endian":                           "NO",
    
    50
    +        "Tables next to code":                              "YES",
    
    51
    +        "Support SMP":                                      "YES",
    
    52
    +        "Have interpreter":                                 "YES",
    
    53
    +        "Use interpreter":                                  "YES",
    
    54
    +        "Have native code generator":                       "YES",
    
    55
    +        "Unregisterised":                                   "NO",
    
    56
    +        "Leading underscore":                               "NO",
    
    57
    +        "target has RTS linker":                            "YES",
    
    58
    +        "target RTS linker only supports shared libraries": "NO",
    
    59
    +        "cross compiling":                                  "NO",
    
    60
    +        "target has GNU nonexec stack":                     "YES",
    
    61
    +        "target has subsections via symbols":               "NO",
    
    62
    +        "Target default backend":                           "native code generator",
    
    63
    +    },
    
    64
    +
    
    65
    +    # ── x86_64 Linux unregisterised ──────────────────────────────────────────
    
    66
    +    "x86_64-unknown-linux-unreg": {
    
    67
    +        "target arch":                                      "ArchX86_64",
    
    68
    +        "target os":                                        "OSLinux",
    
    69
    +        "target platform string":                           "x86_64-unknown-linux",
    
    70
    +        "target word size":                                 "8",
    
    71
    +        "target word big endian":                           "NO",
    
    72
    +        "Tables next to code":                              "NO",
    
    73
    +        "Support SMP":                                      "NO",
    
    74
    +        "Have interpreter":                                 "YES",
    
    75
    +        "Use interpreter":                                  "YES",
    
    76
    +        "Have native code generator":                       "NO",
    
    77
    +        "Unregisterised":                                   "YES",
    
    78
    +        "Leading underscore":                               "NO",
    
    79
    +        "target has RTS linker":                            "YES",
    
    80
    +        "target RTS linker only supports shared libraries": "NO",
    
    81
    +        "cross compiling":                                  "NO",
    
    82
    +        "target has GNU nonexec stack":                     "YES",
    
    83
    +        "target has subsections via symbols":               "NO",
    
    84
    +        "Target default backend":                           "compiling via C",
    
    85
    +    },
    
    86
    +
    
    87
    +    # ── x86_64 Linux no tables-next-to-code ──────────────────────────────────
    
    88
    +    "x86_64-unknown-linux-no_tntc": {
    
    89
    +        "target arch":                                      "ArchX86_64",
    
    90
    +        "target os":                                        "OSLinux",
    
    91
    +        "target platform string":                           "x86_64-unknown-linux",
    
    92
    +        "target word size":                                 "8",
    
    93
    +        "target word big endian":                           "NO",
    
    94
    +        "Tables next to code":                              "NO",
    
    95
    +        "Support SMP":                                      "YES",
    
    96
    +        "Have interpreter":                                 "YES",
    
    97
    +        "Use interpreter":                                  "YES",
    
    98
    +        "Have native code generator":                       "YES",
    
    99
    +        "Unregisterised":                                   "NO",
    
    100
    +        "Leading underscore":                               "NO",
    
    101
    +        "target has RTS linker":                            "YES",
    
    102
    +        "target RTS linker only supports shared libraries": "NO",
    
    103
    +        "cross compiling":                                  "NO",
    
    104
    +        "target has GNU nonexec stack":                     "YES",
    
    105
    +        "target has subsections via symbols":               "NO",
    
    106
    +        "Target default backend":                           "native code generator",
    
    107
    +    },
    
    108
    +
    
    109
    +    # ── aarch64 Linux native ─────────────────────────────────────────────────
    
    110
    +    "aarch64-unknown-linux": {
    
    111
    +        "target arch":                                      "ArchAArch64",
    
    112
    +        "target os":                                        "OSLinux",
    
    113
    +        "target platform string":                           "aarch64-unknown-linux",
    
    114
    +        "target word size":                                 "8",
    
    115
    +        "target word big endian":                           "NO",
    
    116
    +        "Tables next to code":                              "YES",
    
    117
    +        "Support SMP":                                      "YES",
    
    118
    +        "Have interpreter":                                 "YES",
    
    119
    +        "Use interpreter":                                  "YES",
    
    120
    +        "Have native code generator":                       "YES",
    
    121
    +        "Unregisterised":                                   "NO",
    
    122
    +        "Leading underscore":                               "NO",
    
    123
    +        "target has RTS linker":                            "YES",
    
    124
    +        "target RTS linker only supports shared libraries": "NO",
    
    125
    +        "cross compiling":                                  "NO",
    
    126
    +        "target has GNU nonexec stack":                     "YES",
    
    127
    +        "target has subsections via symbols":               "NO",
    
    128
    +        "Target default backend":                           "native code generator",
    
    129
    +    },
    
    130
    +
    
    131
    +    # ── aarch64 Linux cross ──────────────────────────────────────────────────
    
    132
    +    "aarch64-unknown-linux-cross": {
    
    133
    +        "target arch":                                      "ArchAarch64",
    
    134
    +        "target os":                                        "OSLinux",
    
    135
    +        "target platform string":                           "aarch64-unknown-linux",
    
    136
    +        "target word size":                                 "8",
    
    137
    +        "target word big endian":                           "NO",
    
    138
    +        "Tables next to code":                              "YES",
    
    139
    +        "Support SMP":                                      "YES",
    
    140
    +        "Have interpreter":                                 "NO",
    
    141
    +        "Use interpreter":                                  "NO",
    
    142
    +        "Have native code generator":                       "YES",
    
    143
    +        "Unregisterised":                                   "NO",
    
    144
    +        "Leading underscore":                               "NO",
    
    145
    +        "target has RTS linker":                            "YES",
    
    146
    +        "target RTS linker only supports shared libraries": "NO",
    
    147
    +        "cross compiling":                                  "YES",
    
    148
    +        "target has GNU nonexec stack":                     "YES",
    
    149
    +        "target has subsections via symbols":               "NO",
    
    150
    +        "Target default backend":                           "native code generator",
    
    151
    +    },
    
    152
    +
    
    153
    +    # ── i386 Linux ───────────────────────────────────────────────────────────
    
    154
    +    "i386-unknown-linux": {
    
    155
    +        "target arch":                                      "ArchX86",
    
    156
    +        "target os":                                        "OSLinux",
    
    157
    +        "target platform string":                           "i386-unknown-linux",
    
    158
    +        "target word size":                                 "4",
    
    159
    +        "target word big endian":                           "NO",
    
    160
    +        "Tables next to code":                              "YES",
    
    161
    +        "Support SMP":                                      "YES",
    
    162
    +        "Have interpreter":                                 "YES",
    
    163
    +        "Use interpreter":                                  "YES",
    
    164
    +        "Have native code generator":                       "YES",
    
    165
    +        "Unregisterised":                                   "NO",
    
    166
    +        "Leading underscore":                               "NO",
    
    167
    +        "target has RTS linker":                            "YES",
    
    168
    +        "target RTS linker only supports shared libraries": "NO",
    
    169
    +        "cross compiling":                                  "NO",
    
    170
    +        "target has GNU nonexec stack":                     "YES",
    
    171
    +        "target has subsections via symbols":               "NO",
    
    172
    +        "Target default backend":                           "native code generator",
    
    173
    +    },
    
    174
    +
    
    175
    +    # ── aarch64 macOS ────────────────────────────────────────────────────────
    
    176
    +    "aarch64-apple-darwin": {
    
    177
    +        "target arch":                                      "ArchAArch64",
    
    178
    +        "target os":                                        "OSDarwin",
    
    179
    +        "target platform string":                           "aarch64-apple-darwin",
    
    180
    +        "target word size":                                 "8",
    
    181
    +        "target word big endian":                           "NO",
    
    182
    +        "Tables next to code":                              "YES",
    
    183
    +        "Support SMP":                                      "YES",
    
    184
    +        "Have interpreter":                                 "YES",
    
    185
    +        "Use interpreter":                                  "YES",
    
    186
    +        "Have native code generator":                       "YES",
    
    187
    +        "Unregisterised":                                   "NO",
    
    188
    +        "Leading underscore":                               "YES",
    
    189
    +        "target has RTS linker":                            "YES",
    
    190
    +        "target RTS linker only supports shared libraries": "NO",
    
    191
    +        "cross compiling":                                  "NO",
    
    192
    +        "target has GNU nonexec stack":                     "NO",
    
    193
    +        "target has subsections via symbols":               "NO",
    
    194
    +        "Target default backend":                           "native code generator",
    
    195
    +    },
    
    196
    +
    
    197
    +    # ── x86_64 macOS ─────────────────────────────────────────────────────────
    
    198
    +    "x86_64-apple-darwin": {
    
    199
    +        "target arch":                                      "ArchX86_64",
    
    200
    +        "target os":                                        "OSDarwin",
    
    201
    +        "target platform string":                           "x86_64-apple-darwin",
    
    202
    +        "target word size":                                 "8",
    
    203
    +        "target word big endian":                           "NO",
    
    204
    +        "Tables next to code":                              "YES",
    
    205
    +        "Support SMP":                                      "YES",
    
    206
    +        "Have interpreter":                                 "YES",
    
    207
    +        "Use interpreter":                                  "YES",
    
    208
    +        "Have native code generator":                       "YES",
    
    209
    +        "Unregisterised":                                   "NO",
    
    210
    +        "Leading underscore":                               "YES",
    
    211
    +        "target has RTS linker":                            "YES",
    
    212
    +        "target RTS linker only supports shared libraries": "NO",
    
    213
    +        "cross compiling":                                  "NO",
    
    214
    +        "target has GNU nonexec stack":                     "NO",
    
    215
    +        "target has subsections via symbols":               "YES",
    
    216
    +        "Target default backend":                           "native code generator",
    
    217
    +    },
    
    218
    +
    
    219
    +    # ── x86_64 FreeBSD ───────────────────────────────────────────────────────
    
    220
    +    "x86_64-portbld-freebsd": {
    
    221
    +        "target arch":                                      "ArchX86_64",
    
    222
    +        "target os":                                        "OSFreeBSD",
    
    223
    +        "target platform string":                           "x86_64-portbld-freebsd",
    
    224
    +        "target word size":                                 "8",
    
    225
    +        "target word big endian":                           "NO",
    
    226
    +        "Tables next to code":                              "YES",
    
    227
    +        "Support SMP":                                      "YES",
    
    228
    +        "Have interpreter":                                 "YES",
    
    229
    +        "Use interpreter":                                  "YES",
    
    230
    +        "Have native code generator":                       "YES",
    
    231
    +        "Unregisterised":                                   "NO",
    
    232
    +        "Leading underscore":                               "NO",
    
    233
    +        "target has RTS linker":                            "YES",
    
    234
    +        "target RTS linker only supports shared libraries": "NO",
    
    235
    +        "cross compiling":                                  "NO",
    
    236
    +        "target has GNU nonexec stack":                     "YES",
    
    237
    +        "target has subsections via symbols":               "NO",
    
    238
    +        "Target default backend":                           "native code generator",
    
    239
    +    },
    
    240
    +
    
    241
    +    # ── x86_64 Windows native ────────────────────────────────────────────────
    
    242
    +    "x86_64-unknown-mingw32": {
    
    243
    +        "target arch":                                      "ArchX86_64",
    
    244
    +        "target os":                                        "OSMinGW32",
    
    245
    +        "target platform string":                           "x86_64-unknown-mingw32",
    
    246
    +        "target word size":                                 "8",
    
    247
    +        "target word big endian":                           "NO",
    
    248
    +        "Tables next to code":                              "YES",
    
    249
    +        "Support SMP":                                      "YES",
    
    250
    +        "Have interpreter":                                 "YES",
    
    251
    +        "Use interpreter":                                  "YES",
    
    252
    +        "Have native code generator":                       "YES",
    
    253
    +        "Unregisterised":                                   "NO",
    
    254
    +        "Leading underscore":                               "NO",
    
    255
    +        "target has RTS linker":                            "YES",
    
    256
    +        "target RTS linker only supports shared libraries": "NO",
    
    257
    +        "cross compiling":                                  "NO",
    
    258
    +        "target has GNU nonexec stack":                     "NO",
    
    259
    +        "target has subsections via symbols":               "NO",
    
    260
    +        "Target default backend":                           "native code generator",
    
    261
    +    },
    
    262
    +
    
    263
    +    # ── aarch64 Windows cross ────────────────────────────────────────────────
    
    264
    +    "aarch64-unknown-mingw32-cross": {
    
    265
    +        "target arch":                                      "ArchAarch64",
    
    266
    +        "target os":                                        "OSMinGW32",
    
    267
    +        "target platform string":                           "aarch64-unknown-mingw32",
    
    268
    +        "target word size":                                 "8",
    
    269
    +        "target word big endian":                           "NO",
    
    270
    +        "Tables next to code":                              "YES",
    
    271
    +        "Support SMP":                                      "YES",
    
    272
    +        "Have interpreter":                                 "NO",
    
    273
    +        "Use interpreter":                                  "NO",
    
    274
    +        "Have native code generator":                       "YES",
    
    275
    +        "Unregisterised":                                   "NO",
    
    276
    +        "Leading underscore":                               "NO",
    
    277
    +        "target has RTS linker":                            "YES",
    
    278
    +        "target RTS linker only supports shared libraries": "NO",
    
    279
    +        "cross compiling":                                  "YES",
    
    280
    +        "target has GNU nonexec stack":                     "NO",
    
    281
    +        "target has subsections via symbols":               "NO",
    
    282
    +        "Target default backend":                           "native code generator",
    
    283
    +    },
    
    284
    +
    
    285
    +    # ── wasm32 cross ─────────────────────────────────────────────────────────
    
    286
    +    "wasm32-unknown-wasi-cross-no_tntc": {
    
    287
    +        "target arch":                                      "ArchWasm32",
    
    288
    +        "target os":                                        "OSWasi",
    
    289
    +        "target platform string":                           "wasm32-unknown-wasi",
    
    290
    +        "target word size":                                 "4",
    
    291
    +        "target word big endian":                           "NO",
    
    292
    +        "Tables next to code":                              "NO",
    
    293
    +        "Support SMP":                                      "NO",
    
    294
    +        "Have interpreter":                                 "YES",
    
    295
    +        "Use interpreter":                                  "YES",
    
    296
    +        "Have native code generator":                       "YES",
    
    297
    +        "Unregisterised":                                   "NO",
    
    298
    +        "Leading underscore":                               "NO",
    
    299
    +        "target has RTS linker":                            "YES",
    
    300
    +        "target RTS linker only supports shared libraries": "NO",
    
    301
    +        "cross compiling":                                  "YES",
    
    302
    +        "target has GNU nonexec stack":                     "NO",
    
    303
    +        "target has subsections via symbols":               "NO",
    
    304
    +        "Target default backend":                           "native code generator",
    
    305
    +    },
    
    306
    +
    
    307
    +    # ── wasm32 cross unregisterised ──────────────────────────────────────────
    
    308
    +    "wasm32-unknown-wasi-cross-unreg": {
    
    309
    +        "target arch":                                      "ArchWasm32",
    
    310
    +        "target os":                                        "OSWasi",
    
    311
    +        "target platform string":                           "wasm32-unknown-wasi",
    
    312
    +        "target word size":                                 "4",
    
    313
    +        "target word big endian":                           "NO",
    
    314
    +        "Tables next to code":                              "NO",
    
    315
    +        "Support SMP":                                      "NO",
    
    316
    +        "Have interpreter":                                 "NO",
    
    317
    +        "Use interpreter":                                  "NO",
    
    318
    +        "Have native code generator":                       "NO",
    
    319
    +        "Unregisterised":                                   "YES",
    
    320
    +        "Leading underscore":                               "NO",
    
    321
    +        "target has RTS linker":                            "YES",
    
    322
    +        "target RTS linker only supports shared libraries": "NO",
    
    323
    +        "cross compiling":                                  "YES",
    
    324
    +        "target has GNU nonexec stack":                     "NO",
    
    325
    +        "target has subsections via symbols":               "NO",
    
    326
    +        "Target default backend":                           "compiling via C",
    
    327
    +    },
    
    328
    +
    
    329
    +    # ── JavaScript cross ─────────────────────────────────────────────────────
    
    330
    +    "javascript-unknown-ghcjs-cross": {
    
    331
    +        "target arch":                                      "ArchJavaScript",
    
    332
    +        "target os":                                        "OSGhcjs",
    
    333
    +        "target platform string":                           "javascript-unknown-ghcjs",
    
    334
    +        "target word size":                                 "4",
    
    335
    +        "target word big endian":                           "NO",
    
    336
    +        "Tables next to code":                              "YES",
    
    337
    +        "Support SMP":                                      "NO",
    
    338
    +        "Have interpreter":                                 "NO",
    
    339
    +        "Use interpreter":                                  "NO",
    
    340
    +        "Have native code generator":                       "NO",
    
    341
    +        "Unregisterised":                                   "NO",
    
    342
    +        "Leading underscore":                               "NO",
    
    343
    +        "target has RTS linker":                            "NO",
    
    344
    +        "target RTS linker only supports shared libraries": "NO",
    
    345
    +        "cross compiling":                                  "YES",
    
    346
    +        "target has GNU nonexec stack":                     "NO",
    
    347
    +        "target has subsections via symbols":               "NO",
    
    348
    +        "Target default backend":                           "compiling to JavaScript",
    
    349
    +    },
    
    350
    +
    
    351
    +    # ── riscv64 Linux cross ──────────────────────────────────────────────────
    
    352
    +    "riscv64-unknown-linux-cross": {
    
    353
    +        "target arch":                                      "ArchRISCV64",
    
    354
    +        "target os":                                        "OSLinux",
    
    355
    +        "target platform string":                           "riscv64-unknown-linux",
    
    356
    +        "target word size":                                 "8",
    
    357
    +        "target word big endian":                           "NO",
    
    358
    +        "Tables next to code":                              "YES",
    
    359
    +        "Support SMP":                                      "YES",
    
    360
    +        "Have interpreter":                                 "NO",
    
    361
    +        "Use interpreter":                                  "NO",
    
    362
    +        "Have native code generator":                       "YES",
    
    363
    +        "Unregisterised":                                   "NO",
    
    364
    +        "Leading underscore":                               "NO",
    
    365
    +        "target has RTS linker":                            "YES",
    
    366
    +        "target RTS linker only supports shared libraries": "NO",
    
    367
    +        "cross compiling":                                  "YES",
    
    368
    +        "target has GNU nonexec stack":                     "YES",
    
    369
    +        "target has subsections via symbols":               "NO",
    
    370
    +        "Target default backend":                           "native code generator",
    
    371
    +    },
    
    372
    +
    
    373
    +    # ── loongarch64 Linux cross ──────────────────────────────────────────────
    
    374
    +    "loongarch64-unknown-linux-cross": {
    
    375
    +        "target arch":                                      "ArchLoongArch64",
    
    376
    +        "target os":                                        "OSLinux",
    
    377
    +        "target platform string":                           "loongarch64-unknown-linux",
    
    378
    +        "target word size":                                 "8",
    
    379
    +        "target word big endian":                           "NO",
    
    380
    +        "Tables next to code":                              "YES",
    
    381
    +        "Support SMP":                                      "YES",
    
    382
    +        "Have interpreter":                                 "NO",
    
    383
    +        "Use interpreter":                                  "NO",
    
    384
    +        "Have native code generator":                       "YES",
    
    385
    +        "Unregisterised":                                   "NO",
    
    386
    +        "Leading underscore":                               "NO",
    
    387
    +        "target has RTS linker":                            "NO",
    
    388
    +        "target RTS linker only supports shared libraries": "NO",
    
    389
    +        "cross compiling":                                  "YES",
    
    390
    +        "target has GNU nonexec stack":                     "YES",
    
    391
    +        "target has subsections via symbols":               "NO",
    
    392
    +        "Target default backend":                           "native code generator",
    
    393
    +    },
    
    394
    +}
    
    395
    +
    
    396
    +TESTSUITE_CONFIG_EXPECTED = {
    
    397
    +
    
    398
    +    # ── x86_64 Linux ─────────────────────────────────────────────────────────
    
    399
    +    "x86_64-unknown-linux": {
    
    400
    +        "platform":            "x86_64-unknown-linux",
    
    401
    +        "arch":                "x86_64",
    
    402
    +        "wordsize":            "64",
    
    403
    +        "have_ncg":            True,
    
    404
    +        "have_interp":         True,
    
    405
    +        "unregisterised":      False,
    
    406
    +        "tables_next_to_code": True,
    
    407
    +        "leading_underscore":  False,
    
    408
    +        "target_has_smp":      True,
    
    409
    +        "have_RTS_linker":     True,
    
    410
    +        "interp_force_dyn":    False,
    
    411
    +        "cross":               False,
    
    412
    +    },
    
    413
    +
    
    414
    +    # ── x86_64 Linux unregisterised ──────────────────────────────────────────
    
    415
    +    "x86_64-unknown-linux-unreg": {
    
    416
    +        "platform":            "x86_64-unknown-linux",
    
    417
    +        "arch":                "x86_64",
    
    418
    +        "wordsize":            "64",
    
    419
    +        "have_ncg":            False,
    
    420
    +        "have_interp":         True,
    
    421
    +        "unregisterised":      True,
    
    422
    +        "tables_next_to_code": False,
    
    423
    +        "leading_underscore":  False,
    
    424
    +        "target_has_smp":      False,
    
    425
    +        "have_RTS_linker":     True,
    
    426
    +        "interp_force_dyn":    False,
    
    427
    +        "cross":               False,
    
    428
    +    },
    
    429
    +
    
    430
    +    # ── x86_64 Linux no tables-next-to-code ──────────────────────────────────
    
    431
    +    "x86_64-unknown-linux-no_tntc": {
    
    432
    +        "platform":            "x86_64-unknown-linux",
    
    433
    +        "arch":                "x86_64",
    
    434
    +        "wordsize":            "64",
    
    435
    +        "have_ncg":            True,
    
    436
    +        "have_interp":         True,
    
    437
    +        "unregisterised":      False,
    
    438
    +        "tables_next_to_code": False,
    
    439
    +        "leading_underscore":  False,
    
    440
    +        "target_has_smp":      True,
    
    441
    +        "have_RTS_linker":     True,
    
    442
    +        "interp_force_dyn":    False,
    
    443
    +        "cross":               False,
    
    444
    +    },
    
    445
    +
    
    446
    +    # ── aarch64 Linux native ─────────────────────────────────────────────────
    
    447
    +    "aarch64-unknown-linux": {
    
    448
    +        "platform":            "aarch64-unknown-linux",
    
    449
    +        "arch":                "aarch64",
    
    450
    +        "wordsize":            "64",
    
    451
    +        "have_ncg":            True,
    
    452
    +        "have_interp":         True,
    
    453
    +        "unregisterised":      False,
    
    454
    +        "tables_next_to_code": True,
    
    455
    +        "leading_underscore":  False,
    
    456
    +        "target_has_smp":      True,
    
    457
    +        "have_RTS_linker":     True,
    
    458
    +        "interp_force_dyn":    False,
    
    459
    +        "cross":               False,
    
    460
    +    },
    
    461
    +
    
    462
    +    # ── aarch64 Linux cross ──────────────────────────────────────────────────
    
    463
    +    "aarch64-unknown-linux-cross": {
    
    464
    +        "platform":            "aarch64-unknown-linux",
    
    465
    +        "arch":                "aarch64",
    
    466
    +        "wordsize":            "64",
    
    467
    +        "have_ncg":            True,
    
    468
    +        "have_interp":         False,
    
    469
    +        "unregisterised":      False,
    
    470
    +        "tables_next_to_code": True,
    
    471
    +        "leading_underscore":  False,
    
    472
    +        "target_has_smp":      True,
    
    473
    +        "have_RTS_linker":     True,
    
    474
    +        "interp_force_dyn":    False,
    
    475
    +        "cross":               True,
    
    476
    +    },
    
    477
    +
    
    478
    +    # ── i386 Linux ───────────────────────────────────────────────────────────
    
    479
    +    "i386-unknown-linux": {
    
    480
    +        "platform":            "i386-unknown-linux",
    
    481
    +        "arch":                "i386",
    
    482
    +        "wordsize":            "32",
    
    483
    +        "have_ncg":            True,
    
    484
    +        "have_interp":         True,
    
    485
    +        "unregisterised":      False,
    
    486
    +        "tables_next_to_code": True,
    
    487
    +        "leading_underscore":  False,
    
    488
    +        "target_has_smp":      True,
    
    489
    +        "have_RTS_linker":     True,
    
    490
    +        "interp_force_dyn":    False,
    
    491
    +        "cross":               False,
    
    492
    +    },
    
    493
    +
    
    494
    +    # ── aarch64 macOS ────────────────────────────────────────────────────────
    
    495
    +    "aarch64-apple-darwin": {
    
    496
    +        "platform":            "aarch64-apple-darwin",
    
    497
    +        "arch":                "aarch64",
    
    498
    +        "wordsize":            "64",
    
    499
    +        "have_ncg":            True,
    
    500
    +        "have_interp":         True,
    
    501
    +        "unregisterised":      False,
    
    502
    +        "tables_next_to_code": True,
    
    503
    +        "leading_underscore":  True,
    
    504
    +        "target_has_smp":      True,
    
    505
    +        "have_RTS_linker":     True,
    
    506
    +        "interp_force_dyn":    False,
    
    507
    +        "cross":               False,
    
    508
    +    },
    
    509
    +
    
    510
    +    # ── x86_64 macOS ─────────────────────────────────────────────────────────
    
    511
    +    "x86_64-apple-darwin": {
    
    512
    +        "platform":            "x86_64-apple-darwin",
    
    513
    +        "arch":                "x86_64",
    
    514
    +        "wordsize":            "64",
    
    515
    +        "have_ncg":            True,
    
    516
    +        "have_interp":         True,
    
    517
    +        "unregisterised":      False,
    
    518
    +        "tables_next_to_code": True,
    
    519
    +        "leading_underscore":  True,
    
    520
    +        "target_has_smp":      True,
    
    521
    +        "have_RTS_linker":     True,
    
    522
    +        "interp_force_dyn":    False,
    
    523
    +        "cross":               False,
    
    524
    +    },
    
    525
    +
    
    526
    +    # ── x86_64 FreeBSD ───────────────────────────────────────────────────────
    
    527
    +    "x86_64-portbld-freebsd": {
    
    528
    +        "platform":            "x86_64-portbld-freebsd",
    
    529
    +        "arch":                "x86_64",
    
    530
    +        "wordsize":            "64",
    
    531
    +        "have_ncg":            True,
    
    532
    +        "have_interp":         True,
    
    533
    +        "unregisterised":      False,
    
    534
    +        "tables_next_to_code": True,
    
    535
    +        "leading_underscore":  False,
    
    536
    +        "target_has_smp":      True,
    
    537
    +        "have_RTS_linker":     True,
    
    538
    +        "interp_force_dyn":    False,
    
    539
    +        "cross":               False,
    
    540
    +    },
    
    541
    +
    
    542
    +    # ── x86_64 Windows native ────────────────────────────────────────────────
    
    543
    +    "x86_64-unknown-mingw32": {
    
    544
    +        "platform":            "x86_64-unknown-mingw32",
    
    545
    +        "arch":                "x86_64",
    
    546
    +        "wordsize":            "64",
    
    547
    +        "have_ncg":            True,
    
    548
    +        "have_interp":         True,
    
    549
    +        "unregisterised":      False,
    
    550
    +        "tables_next_to_code": True,
    
    551
    +        "leading_underscore":  False,
    
    552
    +        "target_has_smp":      True,
    
    553
    +        "have_RTS_linker":     True,
    
    554
    +        "interp_force_dyn":    False,
    
    555
    +        "cross":               False,
    
    556
    +    },
    
    557
    +
    
    558
    +    # ── aarch64 Windows cross ────────────────────────────────────────────────
    
    559
    +    "aarch64-unknown-mingw32-cross": {
    
    560
    +        "platform":            "aarch64-unknown-mingw32",
    
    561
    +        "arch":                "aarch64",
    
    562
    +        "wordsize":            "64",
    
    563
    +        "have_ncg":            True,
    
    564
    +        "have_interp":         False,
    
    565
    +        "unregisterised":      False,
    
    566
    +        "tables_next_to_code": True,
    
    567
    +        "leading_underscore":  False,
    
    568
    +        "target_has_smp":      True,
    
    569
    +        "have_RTS_linker":     True,
    
    570
    +        "interp_force_dyn":    False,
    
    571
    +        "cross":               True,
    
    572
    +    },
    
    573
    +
    
    574
    +    # ── wasm32 cross ─────────────────────────────────────────────────────────
    
    575
    +    "wasm32-unknown-wasi-cross-no_tntc": {
    
    576
    +        "platform":            "wasm32-unknown-wasi",
    
    577
    +        "arch":                "wasm32",
    
    578
    +        "wordsize":            "32",
    
    579
    +        "have_ncg":            True,
    
    580
    +        "have_interp":         True,
    
    581
    +        "unregisterised":      False,
    
    582
    +        "tables_next_to_code": False,
    
    583
    +        "leading_underscore":  False,
    
    584
    +        "target_has_smp":      False,
    
    585
    +        "have_RTS_linker":     True,
    
    586
    +        "interp_force_dyn":    True,
    
    587
    +        "cross":               True,
    
    588
    +    },
    
    589
    +
    
    590
    +    # ── wasm32 cross unregisterised ──────────────────────────────────────────
    
    591
    +    "wasm32-unknown-wasi-cross-unreg": {
    
    592
    +        "platform":            "wasm32-unknown-wasi",
    
    593
    +        "arch":                "wasm32",
    
    594
    +        "wordsize":            "32",
    
    595
    +        "have_ncg":            False,
    
    596
    +        "have_interp":         False,
    
    597
    +        "unregisterised":      True,
    
    598
    +        "tables_next_to_code": False,
    
    599
    +        "leading_underscore":  False,
    
    600
    +        "target_has_smp":      False,
    
    601
    +        "have_RTS_linker":     True,
    
    602
    +        "interp_force_dyn":    False,
    
    603
    +        "cross":               True,
    
    604
    +    },
    
    605
    +
    
    606
    +    # ── JavaScript cross ─────────────────────────────────────────────────────
    
    607
    +    "javascript-unknown-ghcjs-cross": {
    
    608
    +        "platform":            "javascript-unknown-ghcjs",
    
    609
    +        "arch":                "javascript",
    
    610
    +        "wordsize":            "32",
    
    611
    +        "have_ncg":            False,
    
    612
    +        "have_interp":         False,
    
    613
    +        "unregisterised":      False,
    
    614
    +        "tables_next_to_code": True,
    
    615
    +        "leading_underscore":  False,
    
    616
    +        "target_has_smp":      False,
    
    617
    +        "have_RTS_linker":     False,
    
    618
    +        "interp_force_dyn":    False,
    
    619
    +        "cross":               True,
    
    620
    +    },
    
    621
    +
    
    622
    +    # ── riscv64 Linux cross ──────────────────────────────────────────────────
    
    623
    +    "riscv64-unknown-linux-cross": {
    
    624
    +        "platform":            "riscv64-unknown-linux",
    
    625
    +        "arch":                "riscv64",
    
    626
    +        "wordsize":            "64",
    
    627
    +        "have_ncg":            True,
    
    628
    +        "have_interp":         False,
    
    629
    +        "unregisterised":      False,
    
    630
    +        "tables_next_to_code": True,
    
    631
    +        "leading_underscore":  False,
    
    632
    +        "target_has_smp":      True,
    
    633
    +        "have_RTS_linker":     True,
    
    634
    +        "interp_force_dyn":    False,
    
    635
    +        "cross":               True,
    
    636
    +    },
    
    637
    +
    
    638
    +    # ── loongarch64 Linux cross ──────────────────────────────────────────────
    
    639
    +    "loongarch64-unknown-linux-cross": {
    
    640
    +        "platform":            "loongarch64-unknown-linux",
    
    641
    +        "arch":                "loongarch64",
    
    642
    +        "wordsize":            "64",
    
    643
    +        "have_ncg":            True,
    
    644
    +        "have_interp":         False,
    
    645
    +        "unregisterised":      False,
    
    646
    +        "tables_next_to_code": True,
    
    647
    +        "leading_underscore":  False,
    
    648
    +        "target_has_smp":      True,
    
    649
    +        "have_RTS_linker":     False,
    
    650
    +        "interp_force_dyn":    False,
    
    651
    +        "cross":               True,
    
    652
    +    },
    
    653
    +}

  • testsuite/tests/driver/config-pins/GhcInfoPins.py
    1
    +#!/usr/bin/env python3
    
    2
    +"""Check that ghc --info output matches pinned expected values."""
    
    3
    +import ast
    
    4
    +import subprocess
    
    5
    +import sys
    
    6
    +
    
    7
    +sys.path.insert(0, '.')
    
    8
    +from ConfigPinsExpected import GHC_INFO_EXPECTED, PINNED_GHC_INFO_FIELDS, platform_key
    
    9
    +
    
    10
    +
    
    11
    +def info_platform_key(info_map):
    
    12
    +    return platform_key(
    
    13
    +        info_map.get("target platform string", "<unknown>"),
    
    14
    +        info_map.get("cross compiling", "NO") == "YES",
    
    15
    +        info_map.get("Unregisterised", "NO") == "YES",
    
    16
    +        info_map.get("Tables next to code", "YES") == "NO",
    
    17
    +    )
    
    18
    +
    
    19
    +
    
    20
    +def main():
    
    21
    +    if len(sys.argv) != 2:
    
    22
    +        print("Usage: GhcInfoPins.py <compiler-path>")
    
    23
    +        sys.exit(1)
    
    24
    +
    
    25
    +    compiler = sys.argv[1]
    
    26
    +    try:
    
    27
    +        result = subprocess.run([compiler, "--info"], capture_output=True, text=True)
    
    28
    +    except OSError as e:
    
    29
    +        print(f"Failed to run {compiler!r} --info: {e}")
    
    30
    +        sys.exit(1)
    
    31
    +    if result.returncode != 0:
    
    32
    +        print(f"Error running {compiler!r} --info:\n{result.stderr}")
    
    33
    +        sys.exit(1)
    
    34
    +    try:
    
    35
    +        info_map = dict(ast.literal_eval(result.stdout.strip()))
    
    36
    +    except (ValueError, SyntaxError) as e:
    
    37
    +        print(f"Failed to parse {compiler!r} --info output: {e}")
    
    38
    +        sys.exit(1)
    
    39
    +    key = info_platform_key(info_map)
    
    40
    +
    
    41
    +    actual = {f: info_map.get(f, "<missing>") for f in PINNED_GHC_INFO_FIELDS}
    
    42
    +
    
    43
    +    if key not in GHC_INFO_EXPECTED:
    
    44
    +        print(f"Platform key {key!r} not in ConfigPinsExpected.")
    
    45
    +        print("Add this entry to GHC_INFO_EXPECTED in ConfigPinsExpected.py:")
    
    46
    +        print()
    
    47
    +        print(f"    {key!r}: {{")
    
    48
    +        for f, v in actual.items():
    
    49
    +            print(f"        {f!r}: {v!r},")
    
    50
    +        print("    },")
    
    51
    +        sys.exit(1)
    
    52
    +
    
    53
    +    expected = GHC_INFO_EXPECTED[key]
    
    54
    +    mismatches = [
    
    55
    +        (f, ev, actual.get(f, "<missing>"))
    
    56
    +        for f, ev in sorted(expected.items())
    
    57
    +        if ev != actual.get(f, "<missing>")
    
    58
    +    ]
    
    59
    +
    
    60
    +    if mismatches:
    
    61
    +        print(f"MISMATCH for {key!r}:")
    
    62
    +        for f, ev, av in mismatches:
    
    63
    +            print(f"  {f!r}: expected {ev!r}, got {av!r}")
    
    64
    +        sys.exit(1)
    
    65
    +
    
    66
    +    print(f"OK: {key}")
    
    67
    +
    
    68
    +
    
    69
    +if __name__ == "__main__":
    
    70
    +    main()

  • testsuite/tests/driver/config-pins/TestsuiteConfigPins.py
    1
    +#!/usr/bin/env python3
    
    2
    +"""Check that Hadrian-supplied testsuite config values match pinned expected values."""
    
    3
    +import sys
    
    4
    +
    
    5
    +sys.path.insert(0, '.')
    
    6
    +from ConfigPinsExpected import TESTSUITE_CONFIG_EXPECTED, platform_key
    
    7
    +
    
    8
    +
    
    9
    +def main():
    
    10
    +    if len(sys.argv) != 13:
    
    11
    +        print("Usage: TestsuiteConfigPins.py platform arch wordsize "
    
    12
    +              "have_ncg have_interp unreg tntc leading_us has_smp "
    
    13
    +              "rts_linker interp_dyn cross")
    
    14
    +        print(f"Got {len(sys.argv) - 1} args: {sys.argv[1:]}")
    
    15
    +        sys.exit(1)
    
    16
    +
    
    17
    +    (platform, arch, wordsize,
    
    18
    +     have_ncg, have_interp, unreg, tntc,
    
    19
    +     lead_us, has_smp, rts_linker, interp_dyn, cross) = sys.argv[1:]
    
    20
    +
    
    21
    +    b = lambda s: s == "1"
    
    22
    +    actual = {
    
    23
    +        "platform":            platform,
    
    24
    +        "arch":                arch,
    
    25
    +        "wordsize":            wordsize,
    
    26
    +        "have_ncg":            b(have_ncg),
    
    27
    +        "have_interp":         b(have_interp),
    
    28
    +        "unregisterised":      b(unreg),
    
    29
    +        "tables_next_to_code": b(tntc),
    
    30
    +        "leading_underscore":  b(lead_us),
    
    31
    +        "target_has_smp":      b(has_smp),
    
    32
    +        "have_RTS_linker":     b(rts_linker),
    
    33
    +        "interp_force_dyn":    b(interp_dyn),
    
    34
    +        "cross":               b(cross),
    
    35
    +    }
    
    36
    +    key = platform_key(platform, b(cross), b(unreg), not b(tntc))
    
    37
    +
    
    38
    +    if key not in TESTSUITE_CONFIG_EXPECTED:
    
    39
    +        print(f"Platform key {key!r} not in ConfigPinsExpected.")
    
    40
    +        print("Add this entry to TESTSUITE_CONFIG_EXPECTED in ConfigPinsExpected.py:")
    
    41
    +        print()
    
    42
    +        print(f"    {key!r}: {{")
    
    43
    +        for k, v in actual.items():
    
    44
    +            print(f"        {k!r}: {v!r},")
    
    45
    +        print("    },")
    
    46
    +        sys.exit(1)
    
    47
    +
    
    48
    +    expected = TESTSUITE_CONFIG_EXPECTED[key]
    
    49
    +    mismatches = [
    
    50
    +        (k, ev, actual[k])
    
    51
    +        for k, ev in expected.items()
    
    52
    +        if ev != actual.get(k)
    
    53
    +    ]
    
    54
    +
    
    55
    +    if mismatches:
    
    56
    +        print(f"MISMATCH for {key!r}:")
    
    57
    +        for k, ev, av in mismatches:
    
    58
    +            print(f"  {k!r}: expected {ev!r}, got {av!r}")
    
    59
    +        sys.exit(1)
    
    60
    +
    
    61
    +    print(f"OK: {key}")
    
    62
    +
    
    63
    +
    
    64
    +if __name__ == "__main__":
    
    65
    +    main()

  • testsuite/tests/driver/config-pins/all.T
    1
    +import sys
    
    2
    +
    
    3
    +# Python run_command rather than compiled Haskell: wasm32/WASI targets cannot
    
    4
    +# call runInteractiveProcess from compiled binaries (no process creation in
    
    5
    +# WASI).  Python scripts run on the host regardless of the target under test.
    
    6
    +
    
    7
    +test('GhcInfoPins',
    
    8
    +     [extra_files(['ConfigPinsExpected.py', 'GhcInfoPins.py']),
    
    9
    +      ignore_stdout],
    
    10
    +     run_command,
    
    11
    +     [sys.executable + ' GhcInfoPins.py "' + config.compiler + '"'])
    
    12
    +
    
    13
    +test('TestsuiteConfigPins',
    
    14
    +     [extra_files(['ConfigPinsExpected.py', 'TestsuiteConfigPins.py']),
    
    15
    +      ignore_stdout],
    
    16
    +     run_command,
    
    17
    +     [sys.executable + ' TestsuiteConfigPins.py ' + ' '.join([
    
    18
    +         config.platform,
    
    19
    +         config.arch,
    
    20
    +         config.wordsize,
    
    21
    +         str(int(config.have_ncg)),
    
    22
    +         str(int(config.have_interp)),
    
    23
    +         str(int(config.unregisterised)),
    
    24
    +         str(int(config.tables_next_to_code)),
    
    25
    +         str(int(config.leading_underscore)),
    
    26
    +         str(int(config.target_has_smp)),
    
    27
    +         str(int(config.have_RTS_linker)),
    
    28
    +         str(int(config.interp_force_dyn)),
    
    29
    +         str(int(config.cross)),
    
    30
    +     ])])