Menu

#3684 Issues in reentrant functions for mos6502

closed-fixed
None
MOS6502
5
2025-12-30
2023-12-02
No

Compiling with --stack-auto is equivalent to having all functions marked __reentrant. Thus the regression test failures for the mos6502-stack-auto target can affect even users that do not use --stack-auto, as long as they use some reentrant functions. There are currently a lot of such failures, especially considering that the mos6502 port is considered stable.

IMO, the worst ones are the ones where assertions fail (at regression test runtime), since this means that bad code was generated silently. There also are lots of "FATAL Compiler Internal Error", but IMO, these are less of a problem, since it is a compile-time failure, which is obvious to the users.

Discussion

  • Gabriele Gorla

    Gabriele Gorla - 2023-12-03

    I am down to 41 failures. Some are likely stack overflow giving the limited 256 bytes stack, but many are real failures.
    I'll keep working on them.

     
  • Gabriele Gorla

    Gabriele Gorla - 2023-12-03
    • assigned_to: Gabriele Gorla
     
  • Philipp Klaus Krause

    There was clear progress here: by now, I see only 44 failures left on my Debian GNU/Linux amd64 testing system:

    Summary for 'uc6502-stack-auto': 44 failures, 31145 tests, 5957 test cases, 16499738 bytes, 655368445 ticks
       Failure: gte/991019-1
       Failure: div.c
       Failure: gcc-torture-execute-20000113-1.c
       Failure: gcc-torture-execute-20010129-1.c
       Failure: gcc-torture-execute-20010129-1.c
       Failure: cases/tst_gcc-torture-execute-20010129-1
       Failure: cases/tst_gcc-torture-execute-20030916-1
       Failure: cases/tst_gcc-torture-execute-20031012-1
       Failure: cases/tst_gcc-torture-execute-20071030-1
       Failure: gcc-torture-execute-20100430-1.c
       Failure: cases/tst_gcc-torture-execute-20100430-1
       Failure: cases/tst_gcc-torture-execute-930614-2
       Failure: cases/tst_gcc-torture-execute-930628-1
       Failure: gcc-torture-execute-931102-1.c
       Failure: cases/tst_gcc-torture-execute-931102-2
       Failure: cases/tst_gcc-torture-execute-990513-1
       Failure: cases/tst_gcc-torture-execute-pr28982a
       Failure: gcc-torture-execute-pr29156.c
       Failure: cases/tst_gcc-torture-execute-pr33870-1
       Failure: gcc-torture-execute-pr51466.c
       Failure: cases/tst_gcc-torture-execute-ssad-run
       Failure: cases/tst_gcc-torture-execute-usad-run
       Failure: cases/tst_lonesha256
       Failure: cases/stack-restore/stack-restore_optSize_-1
       Failure: cases/stack-restore/stack-restore_optSize_0
       Failure: cases/stack-restore/stack-restore_optSize_1
       Failure: cases/tinyaes/tinyaes_mode_CBC_keylen_128
       Failure: cases/tinyaes/tinyaes_mode_CBC_keylen_192
       Failure: cases/tinyaes/tinyaes_mode_CBC_keylen_256
       Failure: cases/tinyaes/tinyaes_mode_CTR_keylen_128
       Failure: cases/tinyaes/tinyaes_mode_CTR_keylen_192
       Failure: cases/tinyaes/tinyaes_mode_CTR_keylen_256
       Failure: cases/tinyaes/tinyaes_mode_ECB_keylen_128
       Failure: cases/tinyaes/tinyaes_mode_ECB_keylen_192
       Failure: cases/tinyaes/tinyaes_mode_ECB_keylen_256
    
     
  • Gabriele Gorla

    Gabriele Gorla - 2023-12-13

    I recently checked in a few bugfixes. It should be down to 41 now.
    Several tests fail because of an issue with returning structs which is only partially implemented in the non stack-auto port.
    I'll keep working on the remaining failures. Hopefully I can clean most of them before the hard freeze.

    Summary for 'uc6502-stack-auto': 41 failures, 31148 tests, 5957 test cases, 16497762 bytes, 655470405 ticks
       Failure: gte/991019-1
       Failure: div.c
       Failure: gcc-torture-execute-20000113-1.c
       Failure: gcc-torture-execute-20010129-1.c
       Failure: gcc-torture-execute-20010129-1.c
       Failure: cases/tst_gcc-torture-execute-20010129-1
       Failure: cases/tst_gcc-torture-execute-20030916-1
       Failure: cases/tst_gcc-torture-execute-20031012-1
       Failure: cases/tst_gcc-torture-execute-20071030-1
       Failure: gcc-torture-execute-20100430-1.c
       Failure: cases/tst_gcc-torture-execute-20100430-1
       Failure: cases/tst_gcc-torture-execute-930614-2
       Failure: cases/tst_gcc-torture-execute-930628-1
       Failure: gcc-torture-execute-931102-1.c
       Failure: cases/tst_gcc-torture-execute-931102-2
       Failure: cases/tst_gcc-torture-execute-990513-1
       Failure: cases/tst_gcc-torture-execute-pr28982a
       Failure: gcc-torture-execute-pr29156.c
       Failure: cases/tst_gcc-torture-execute-pr33870-1
       Failure: gcc-torture-execute-pr51466.c
       Failure: cases/tst_gcc-torture-execute-ssad-run
       Failure: cases/tst_gcc-torture-execute-usad-run
       Failure: cases/tst_lonesha256
       Failure: cases/tinyaes/tinyaes_mode_CBC_keylen_128
       Failure: cases/tinyaes/tinyaes_mode_CBC_keylen_192
       Failure: cases/tinyaes/tinyaes_mode_CBC_keylen_256
       Failure: cases/tinyaes/tinyaes_mode_CTR_keylen_128
       Failure: cases/tinyaes/tinyaes_mode_CTR_keylen_192
       Failure: cases/tinyaes/tinyaes_mode_CTR_keylen_256
       Failure: cases/tinyaes/tinyaes_mode_ECB_keylen_128
       Failure: cases/tinyaes/tinyaes_mode_ECB_keylen_192
       Failure: cases/tinyaes/tinyaes_mode_ECB_keylen_256
    
     
  • Gabriele Gorla

    Gabriele Gorla - 2023-12-17

    with [r14538] the failures are down to 31

    Summary for 'uc6502-stack-auto': 31 failures, 31109 tests, 5952 test cases, 16568293 bytes, 653281246 ticks
       Failure: gcc-torture-execute-20000113-1.c
       Failure: gcc-torture-execute-20010129-1.c
       Failure: gcc-torture-execute-20010129-1.c
       Failure: cases/tst_gcc-torture-execute-20010129-1
       Failure: cases/tst_gcc-torture-execute-20030916-1
       Failure: cases/tst_gcc-torture-execute-20031012-1
       Failure: cases/tst_gcc-torture-execute-20071030-1
       Failure: gcc-torture-execute-20100430-1.c
       Failure: cases/tst_gcc-torture-execute-20100430-1
       Failure: gcc-torture-execute-930614-2.c
       Failure: cases/tst_gcc-torture-execute-930614-2
       Failure: cases/tst_gcc-torture-execute-930628-1
       Failure: gcc-torture-execute-931102-1.c
       Failure: cases/tst_gcc-torture-execute-931102-2
       Failure: cases/tst_gcc-torture-execute-990513-1
       Failure: gcc-torture-execute-divconst-2.c
       Failure: cases/tst_gcc-torture-execute-pr28982a
       Failure: gcc-torture-execute-pr29156.c
       Failure: cases/tst_gcc-torture-execute-pr33870-1
       Failure: gcc-torture-execute-pr51466.c
       Failure: cases/tst_gcc-torture-execute-ssad-run
       Failure: cases/tst_gcc-torture-execute-usad-run
       Failure: cases/tst_lonesha256
       Failure: cases/muldiv/muldiv_type_long_storage_none_attr_volatile
       Failure: muldiv_type_long_storage_static_attr_volatile
       Failure: cases/tinyaes/tinyaes_mode_CBC_keylen_128
       Failure: cases/tinyaes/tinyaes_mode_CBC_keylen_192
       Failure: cases/tinyaes/tinyaes_mode_CBC_keylen_256
       Failure: cases/tinyaes/tinyaes_mode_CTR_keylen_128
       Failure: cases/tinyaes/tinyaes_mode_CTR_keylen_192
       Failure: cases/tinyaes/tinyaes_mode_CTR_keylen_256
       Failure: cases/tinyaes/tinyaes_mode_ECB_keylen_128
       Failure: cases/tinyaes/tinyaes_mode_ECB_keylen_192
       Failure: cases/tinyaes/tinyaes_mode_ECB_keylen_256
    
     

    Related

    Commit: [r14538]

  • Gabriele Gorla

    Gabriele Gorla - 2024-01-13

    with [r14610] I disabled many tests that fail due to stack size limitations.

    Summary for 'uc6502-stack-auto': 11 failures, 31307 tests, 5969 test cases, 15969652 bytes, 642296145 ticks
       Failure: gcc-torture-execute-20000113-1.c
       Failure: cases/tst_gcc-torture-execute-931102-1
       Failure: cases/tst_gcc-torture-execute-931102-2
       Failure: gcc-torture-execute-divconst-2.c
       Failure: cases/tst_gcc-torture-execute-pr28982a
       Failure: gcc-torture-execute-pr29156.c
       Failure: cases/tst_gcc-torture-execute-pr33870-1
       Failure: gcc-torture-execute-pr51466.c
       Failure: muldiv_type_long_storage_none_attr_volatile
       Failure: muldiv_type_long_storage_static_attr_volatile
    
     

    Related

    Commit: [r14610]

  • Gabriele Gorla

    Gabriele Gorla - 2025-02-13

    with [r15285] i am down to 3 failing tests:

    Summary for 'uc6502-stack-auto': 2 abnormal stops ( ), 10 failures, 31616 tests, 6024 test cases, 16154861 bytes, 997224925 ticks
       Failure: gte/991019-1
       abnormal stop: gcc-torture-execute-pr28982a.c
       abnormal stop: gcc-torture-execute-pr33870-1.c
    
     

    Related

    Commit: [r15285]

    • Philipp Klaus Krause

      I see one more on my laptop:

      Summary for 'uc6502-stack-auto': 2 abnormal stops ( ), 14 failures, 31616 tests, 6024 test cases, 16154586 bytes, 994567471 ticks
         Failure: gte/991019-1
         Failure: div.c
         abnormal stop: gcc-torture-execute-pr28982a.c
         abnormal stop: gcc-torture-execute-pr33870-1.c
      

      Either way, looks like you can enable test-uc6502-stack-auto in sdcc-build/lib/variables.mk soon.

       
  • Gabriele Gorla

    Gabriele Gorla - 2025-12-14

    with the latest [r15970] check in i am down to just one failure.
    This might be due to a stack overflow due to the limited stack space.

    Summary for 'uc6502-stack-auto': 1 abnormal stops ( ), 0 failures, 32215 tests, 6201 test cases, 12946409 bytes, 602512624 ticks
       abnormal stop: gcc-torture-execute-pr28982a.c
    
     

    Related

    Commit: [r15970]


    Last edit: Gabriele Gorla 2025-12-15
    • Philipp Klaus Krause

      That is great news. You can check for stack overflow with uCsim, and setting a watchpoint on the bytes close to where the stack would overflow.
      Once it passes or you disable the test, you can enable the regression test target test-uc6502-stack-auto in sdcc-build/lib/variables.mk (it is currently commented out there) to include it in the nightly compile farm testing.

       
  • Gabriele Gorla

    Gabriele Gorla - 2025-12-30

    I disabled the test and added mos6502-stack-auto to the regression with [r16018]

     

    Related

    Commit: [r16018]

  • Gabriele Gorla

    Gabriele Gorla - 2025-12-30
    • status: open --> closed-fixed
     

Log in to post a comment.

MongoDB Logo MongoDB