1. 15 Jun, 2022 3 commits
    • Ben Avison's avatar
      Reduce _swi/_swix stack usage · 0e8e4385
      Ben Avison authored
      The (previously StrongARM-bracketed) code was overallocating stack space
      by 3 words in order to retain compatibility with the now-deleted dynamic
      code build variant.
      
      Version 6.13. Tagged as 'RISC_OSLib-6_13'
      0e8e4385
    • Ben Avison's avatar
      Add variants of _swi and _swix that take a va_list · 4ddb0942
      Ben Avison authored
      These are typically useful for wrapper functions that want to do something
      before and/or after a SWI call, and which therefore need to pass a pointer
      to their own variadic arguments into the guts of _swi or _swix.
      
      The pairs of functions _swi and _vswi, and _swix and _vswix, are almost
      identical, differing only in argument marshalling.
      
      There being only two additional entries, I didn't think it was worth
      introducing a whole new library chunk. Instead, I've tacked them onto the
      end of chunk 2 (the basic clib functions).
      
      Note that this means that any applications that use these new entries will
      need to take responsibility for RMEnsuring this version of the
      SharedCLibrary module and softloading a newer one if necessary.
      4ddb0942
    • Ben Avison's avatar
      Retire StrongARM build switch · 3b7d39bd
      Ben Avison authored
      Harvard caches are here to stay - can't conceive why we'd ever want to build
      binaries that didn't support them again.
      
      SASTMhatbroken is now conditional on the target (i.e. lowest supported)
      architecture being 4 or below - i.e. the workaround for the StrongARM bug
      isn't needed for ROMs targeting ARMv5 or above.
      3b7d39bd
  2. 21 May, 2022 1 commit
  3. 16 May, 2022 3 commits
    • Ben Avison's avatar
      Enable GitLab CI/CD · 0c546b02
      Ben Avison authored
      Detail:
      * Enable GitLab CI
      * Address issues identified by CI jobs, excluding those related to cppcheck
      * Enable GitLab CD for stubs (used implicitly when linker is invoked by cc)
      
      Version 6.12. Tagged as 'RISC_OSLib-6_12'
      0c546b02
    • Ben Avison's avatar
      Auto-create empty directories · 27fc5b5f
      Ben Avison authored
      Detail:
      * Remove empty directories and have the Makefiles create them
      * Consolidate and complete .gitignore
      27fc5b5f
    • Ben Avison's avatar
      Cross-compilation support · a3bda86e
      Ben Avison authored
      Detail:
      * GNUmakefile: add translation of Makefile to GNU make / cross-compilation
        requirements (this component is too non-standard to make much use of the
        shared makefiles)
      * Makefile: comment out rules for objects that aren't used for any targets,
        for clarity; don't clean files that are never created
      * Various: change to using OS-agnostic filename path syntax
      * Various: ensure case matches for filename paths (don't assume host filing
        system is case-agnostic)
      a3bda86e
  4. 22 Nov, 2021 1 commit
    • Stuart Swales's avatar
      [535] fminf(x,y) / fmaxf(x,y) corrupt result for equal non-zero parameters · ebee6f7d
      Stuart Swales authored
      Detail:
        fminf(x,y) / fmaxf(x,y) corrupted the result when x==y and x!=0.0 due to
        ANDing/ORRing a single precision register with the high word of a double
        precision register pair when fixing up signs for mixed +/- 0 parameters
        in an analogous fashion to fmax/fmin (which are correct).
      
      Version 6.11. Tagged as 'RISC_OSLib-6_11'
      ebee6f7d
  5. 13 Nov, 2021 2 commits
  6. 06 Feb, 2021 1 commit
  7. 05 Sep, 2020 1 commit
    • Ben Avison's avatar
      Enable modulewrapped applications to use ResGen · 073ebc25
      Ben Avison authored
      This utilises a weak symbol import so that if the symbol `Resources` resolves
      at link time, it is called to discover the address of the resource file data
      block(s) to be installed in ResourceFS. If this fails, it drops back to using
      the `s.ResFiles` source file as previously, thereby ensuring compatibility
      with components that have not yet been converted to use ResGen.
      
      Since `Resources` is the default area name (and thus discovery function name)
      used for ResGen in the shared makefiles, this makes it as simple as possible
      to utilise it.
      
      Version 6.08. Tagged as 'RISC_OSLib-6_08'
      073ebc25
  8. 06 Jul, 2020 1 commit
    • Jeffrey Lee's avatar
      Adjust 26 vs. 32 bit mode checks · fa89c230
      Jeffrey Lee authored
      As noted in https://www.riscosopen.org/forum/forums/9/topics/15359, MRS
      instructions which are executed in user mode may return unknown values
      for the CPSR E, A, I, F and M fields on ARMv8 CPUs. At the moment the
      only observed deviation from normal behaviour is that CPUs which lack
      AArch32 privileged-mode support may return zero for the fields. This was
      found to confuse some 26 vs. 32 bit mode checks in CLib.
      
      Clearly we're a long way away from having a version of RISC OS which can
      run on a CPU that lacks AArch32 privileged mode support, but we can
      still try and make sure user-mode applications are compatible with them.
      So this change adjusts the mode checks in the stubs and overlay manager
      so that programs linked with them should function correctly (TEQ is now
      used instead of MRS)
      
      Note that once we do start porting RISC OS to one of the troublesome
      CPUs, there are many more potentially troublesome MRS's within the
      module code that will need adjusting, especially if CPUs start returning
      values other than zero.
      
      Version 6.07. Tagged as 'RISC_OSLib-6_07'
      fa89c230
  9. 09 May, 2020 2 commits
    • Jeffrey Lee's avatar
      txtar: Support extended scroll requests · d3688b4c
      Jeffrey Lee authored
      Use extended scroll requests to handle mouse wheel scrolling, to avoid
      the "thumbing" code getting confused and thinking the user is dragging
      the scrollbar (the "thumbing" mode of scrolling isn't desirable for the
      mouse wheel, because it largely ignores the requested scroll distance)
      
      This change allows Edit & SrcEdit (and anything else using txtar) to
      handle the scroll wheel better, now that the WindowScroll module is
      controlling things.
      
      Version 6.06. Tagged as 'RISC_OSLib-6_06'
      d3688b4c
    • ROOL's avatar
      Extra rlib sprite function for ROM stubs · f41e4118
      ROOL authored
      Detail:
        Export sprite_put_mask_scaled when UROM.
        Also, delete sprite_put_greyscaled() which has been unimplemented in SpriteExtend since RISC OS 3.60.
      Admin:
        Required by Paint bounty.
      
      Version 6.05. Not tagged
      f41e4118
  10. 06 May, 2020 4 commits
    • ROOL's avatar
      Fix switch to wrong mode in AbortFindHandler · ae6fe48b
      ROOL authored
      Detail:
        Was (trying to) clear the M32 flag in {CONFIG}=32.
        Ref: https://www.riscosopen.org/forum/forums/1/topics/15080?page=1#posts-99441
        Makefile updated to only pass rlib's txt switch when building rlib.
      
      Version 6.05. Tagged as 'RISC_OSLib-6_05'
      ae6fe48b
    • ROOL's avatar
      Add C11/C18 library functions · eef62ec8
      ROOL authored
      Detail:
        alloc.c - Add aligned_alloc(). Since softloaded versions of the C library can't rely on OS_Module 24 being available there is a fallback implementation for older kernels.
        stdlib.c - Add quick_exit() and at_quick_exit(). Also fix bug in _Exit; a missing loop pre-decrement led to only checking a single (out of array bounds!) vector.
        time.c - Add timespec_get().
        cl_entry2 - 4 new functions added to the stubs.
        Reduce spare CLib static workspace to absorb the quick_exit() handlers, remove the unused words from armsys.c so they're all accounted for in one space.
      Admin:
        In order that the functions can be defined in the stubs now (despite not having a compiler to support C11/C18) they are enabled when 'DDE' is defined so that C library builds work.
      eef62ec8
    • ROOL's avatar
      CLib header updates · 948e0838
      ROOL authored
      Detail:
        assert.h - definition of static_assert
        complex.h - definition of CMPLX[F|L]
        float.h - various implementation defines
        stdio.h - hide gets() as it's been withdrawn
        wchar.h - guard mbstate_t as it can also be in uchar.h, fix missing __valist definition
      Admin:
        In order that the functions can be defined in the stubs now (despite not having a compiler to support C11/C18) they are enabled when 'DDE' is defined so that C library builds work.
      948e0838
    • ROOL's avatar
      Add fopen's exclusive mode · 68fc9d43
      ROOL authored
      Detail:
        Remove undocumented 't' mode which forcibly timestamped files, since other operating systems use this to denote a text file (as opposed to 'b' binary mode).
        Add 'x' mode per ISO9899:2018
        * only applies to 'w' mode files (not 'r' or 'a')
        * file must not exist prior to creation
        * beyond that we rely on RISC OS' policy of only allowing a file to be opened once for writing as our exclusivity
        Also fix bug in check for 'Protected disc' error, which only trigged for fsnumber_ADFS (8).
      Admin:
        Tested in a ROM build with a simple test harness.
      68fc9d43
  11. 22 Apr, 2020 1 commit
  12. 20 Jul, 2019 1 commit
  13. 29 Jun, 2019 2 commits
  14. 09 Jun, 2019 1 commit
    • ROOL's avatar
      Build fix · 20984a33
      ROOL authored
      Detail:
        Add missing function draw_create_diag() to the ROM version of RISC_OSLib, required by Paint-2_24 and later.
        To keep ROM footprint to a minimum, export only that function; this also avoids adding static workspace and needing to increase RlibSpace.
      
      Version 6.01. Tagged as 'RISC_OSLib-6_01'
      20984a33
  15. 17 Mar, 2019 1 commit
    • ROOL's avatar
      Build fix · 6982f5cc
      ROOL authored
      Detail:
        Add wimp_autoscroll to rlib entries.
      
      Version 6.00. Not tagged
      6982f5cc
  16. 16 Mar, 2019 1 commit
    • ROOL's avatar
      CLib and rlib header updates · 0c846685
      ROOL authored
      Detail:
        Export fenv.h (omitted in error).
        Add FP_FAST_FMAL and FP_FAST_FMA defines per C standard
        Submission for ARMv7 Compiler bounty.
      
        Add Wimp_AutoScroll supporting function to rlib.
        Export various related defines for autoscroll use.
        Submission for Clipboard Support bounty.
      
      Version 6.00. Tagged as 'RISC_OSLib-6_00'
      0c846685
  17. 09 Feb, 2019 1 commit
    • ROOL's avatar
      Fix to iconbar menu X offset · 2f520d7e
      ROOL authored
      Detail:
        The fix applied to all menus in event.c revision 4.6 didn't take into account the offset of -16 already applied to iconbar menus.
      Admin:
        Tested with Draw-1_31.
      
      Version 5.99. Tagged as 'RISC_OSLib-5_99'
      2f520d7e
  18. 26 Jan, 2019 1 commit
    • Robert Sprowson's avatar
      Various fixes · a8f233bb
      Robert Sprowson authored
      colourtran.c: Swap round arg names to colourtran_colournumbertoGCOL to match prototype.
      txtar.c: Avoid incorrect use of strncat buffer limit, and possible unterminated string after strncpy, by reexpressing using snprintf.
      txtedit.c: Avoid incorrect use of strncat buffer limit by reexpressing using snprintf. Avoid potential NULL pointer dereference by moving the filename copy inside the 'if' which confirms it's non-NULL.
      txtfind.c: Remove repeated check of repls being valid. Free repls on error. Free pat on error.
      xfersend.c: Fix potential out of bounds array access (of leaf[]) if the leafname length exceeds the space in the Wimp message.
      Found by cppcheck static analysis.
      
      txtopt.c/h: Sprinkle in some consts.
      event.c: Open menu at the Style Guide approved offset of 64.
      xfersend.c: Remove redundant check of xfersend__filename being NULL in xfersend__suggest_leaf() as all paths leading to it being called ensure the allocation exists (also, it would have strcpy'd garbage due to malloc not clearing the allocation).
      
      Removed unused header txtover.h.
      
      Version 5.98. Tagged as 'RISC_OSLib-5_98'
      a8f233bb
  19. 11 Jun, 2018 1 commit
    • Jeffrey Lee's avatar
      Fix to CopyError change · 0a8fe9be
      Jeffrey Lee authored
      Detail:
        kernel/s/k_body - CPSR_f is the correct field for the NZCV flags, not _c
      Admin:
        Untested
      
      
      Version 5.97. Tagged as 'RISC_OSLib-5_97'
      0a8fe9be
  20. 10 Jun, 2018 1 commit
    • Jeffrey Lee's avatar
      Try and avoid blocking callbacks · 73fd8884
      Jeffrey Lee authored
      Detail:
        The kernel has a 'callback postponement flag' which will be set whenever an X SWI, called from user mode, returns a pointer to an error (and the error block looks like it's in RAM).
        Although this flag will help prevent the error buffer from being overwritten by any errors generated by callbacks, it will also have the effect of blocking Alt-Break and CLib's Escape handler, due to them both being reliant on callbacks.
        Since the flag may persist for a long time, it can be dangerous to leave the OS in this state (the flag can only be cleared by a SWI call from user mode - which may never happen if the program is stuck in a bad state).
        So to combat this, CLib will now make some effort to try and avoid leaving the postponement flag in situations where it shouldn't be needed.
        File changes:
        - c/armsys:
          - Change _sys_flen to return 0 for TTY streams, since calling OS_Args for them isn't going to generate any useful result (previously it was generating an error, causing the postponement flag to be left set on entry to main())
          - Be extra vigilant when entering main() to make sure the callback postponement flag isn't set, just in case other checks don't resolve it
        - kernel/s/k_body:
          - Change CopyError to attempt to clear the callback postponement flag if we suspect it's set. We've just copied the error to our own buffer, so it should be our job to worry about preventing that buffer being prematurely overwritten, not the kernel's.
      Admin:
        Tested on BB-xM
        'while (1) {}' (and similar variants) now multitasks in task windows and is no longer unkillable
        Fixes issue reported on forums:
        https://www.riscosopen.org/forum/forums/4/topics/11542#posts-79767
      
      
      Version 5.96. Tagged as 'RISC_OSLib-5_96'
      73fd8884
  21. 14 Apr, 2018 1 commit
    • Jeffrey Lee's avatar
      Make abort handling more robust · e4577090
      Jeffrey Lee authored
      Detail:
        kernel/s/k_body - Update AbortFindHandler to check that SP & SL are both word aligned, especially because the code will attempt to load from SL to check for the stack chunk magic marker.
      Admin:
        Tested on BB-xM
        Avoids some "abort while in abort handler" type scenarios if an abort occurs while SP/SL are invalid
      
      
      Version 5.95. Tagged as 'RISC_OSLib-5_95'
      e4577090
  22. 29 Oct, 2017 1 commit
    • Robert Sprowson's avatar
      Put ctl in the attic · 91926745
      Robert Sprowson authored
      The ctl part of rlib has various memory leaks (ref https://www.riscosopen.org/forum/forums/4/topics/9503) reflecting its abandoned state. See the FrontEnd module for a more flexible implementation of the same GUI-in-a-text-file scripting language.
      The ctl API was not in C release 3 (it post dates that) nor in C release 4 manual, and the whole of rlib was removed from C release 5 in favour of the Toolbox.
      The change log at the top of rlib/s/rl_spare shows it was briefly added in early 1990 then removed in April 1991. 26 years later, cull it from the Makefile too.
      
      Version 5.94. Tagged as 'RISC_OSLib-5_94'
      91926745
  23. 03 Sep, 2017 1 commit
    • Jeffrey Lee's avatar
      Eliminate some global OS_SynchroniseCodeAreas calls · d89ca652
      Jeffrey Lee authored
      Detail:
        kernel/s/k_body - Eliminate a couple of global OS_SynchroniseCodeAreas calls in _kernel_init and _kernel_system
        s/initmodule - Eliminate a global OS_SynchroniseCodeAreas call in _Shared_Lib_Module_SWI_Code
      Admin:
        Tested on iMx6
        Improves performance with SMP ROMs, where global D-cache clean isn't really possible
      
      
      Version 5.93. Tagged as 'RISC_OSLib-5_93'
      d89ca652
  24. 28 May, 2016 1 commit
    • Jeffrey Lee's avatar
      Remove ARM2 NOPs · e52669b7
      Jeffrey Lee authored
      Detail:
        kernel/s/k_body, s/initmodule - Remove NOPs from after PSR manipulation macros; the macros now fully take care of ARM2 & StrongARM compatibility for us
      Admin:
        Tested PlingSystem build on (ARM3) RISC OS 3.1
        Requires HdrSrc-2_63 for ARM2 compatibility
      
      
      Version 5.92. Tagged as 'RISC_OSLib-5_92'
      e52669b7
  25. 25 May, 2016 1 commit
    • Jeffrey Lee's avatar
      Build fix · 3aebb5f2
      Jeffrey Lee authored
      Detail:
        s/longlong - Copy-paste error led to conditional being on wrong line
      Admin:
        Tested with Raspberry Pi ROM build
      
      
      Version 5.91. Retagged as 'RISC_OSLib-5_91'
      3aebb5f2
  26. 24 May, 2016 1 commit
    • Jeffrey Lee's avatar
      When multiple CPU architectures are supported, allow dynamically linked... · f3f167bc
      Jeffrey Lee authored
      When multiple CPU architectures are supported, allow dynamically linked clients to be given optimal versions of routines where possible
      
      Detail:
        This set of changes adds support for representing architecture-specific variants of routines within the export tables which the shared C library uses to fill in the client's stubs.
        This allows builds of the module which target multiple architectures (e.g. IOMD, Raspberry Pi, or softloads) to offer the most optimal versions of routines to clients wherever multiple variants exist.
        If only one architecture is supported, only one version of each routine will be built, and no variant tables will be generated.
        Currently routine selection for staticly linked clients isn't supported - staticly linked targets will only use the most backwards-compatible version of the routines, as before. Also not all routines are catered for yet (e.g. _ll_udiv)
        File changes:
        - s/h_common - New file containing macros used during variant table construction
        - Makefile - Set SHARED_C_LIBRARY to {TRUE} for SCL builds of assembler code, as per the SHARED_C_LIBRARY #define
        - kernel/s/k_body, s/longlong - For routines which have multiple variants available for the target architectures, build all variants, and generate variant table entries using the new RoutineVariant macro. This has required some reordering of the different variants to make sure that when both versions are built, the most backwards-compatible one will be first (and thus will be called by staticly linked clients)
        - s/h_modmacro - "Entry" macro (when building SCL export tables) changed to use DCD instead of B, to allow byte-aligned symbols to be represented (low bits of symbol address is now used as 'is a variant table' flag)
        - s/initmodule - Client stub initialisation rewritten to take into account the B -> DCD change, and to detect and evaluate variant entries
        - clib/s/cl_entries, kernel/s/k_entries, kernel/s/k_entries2 - Update library entry tables to reference the variant forms of routines where relevant
      Admin:
        Tested on Raspberry Pi 1, 2, 3 (ROM), RISC OS 3.1 & StrongARM 3.7 (softload 26bit build)
        Requires Kernel-5_35-4_79_2_325
      
      
      Version 5.91. Tagged as 'RISC_OSLib-5_91'
      f3f167bc
  27. 14 May, 2016 1 commit
    • ROOL's avatar
      [391] localtime() ignores manual timezone configuration · 332c9e74
      ROOL authored
      Detail:
        When in the default C locale localtime() would return the wrong time for nonzero timezones.
      Admin:
        Tested with softloaded C library for each ROM release supported.
        Submission from Rick Murray.
      
      Version 5.90. Tagged as 'RISC_OSLib-5_90'
      332c9e74
  28. 08 May, 2016 1 commit
    • Jeffrey Lee's avatar
      Prefer CPS over MSR for PSR manipulation. Use UDIV/SDIV for general-purpose... · 377852c3
      Jeffrey Lee authored
      Prefer CPS over MSR for PSR manipulation. Use UDIV/SDIV for general-purpose division, and UMULL for /10.
      
      Detail:
        s/k_body:
        - _kernel_irqs_off and _kernel_irqs_on now use CPS for disabling/enabling IRQs as opposed to MSR. Apart from being shorter code sequences, it's generally a faster instruction.
        - __rt_udiv and __rt_sdiv (and aliases) now use the UDIV and SDIV instructions if building for ARMv7VE
        - __rt_udiv10 and __rt_sdiv10 (and aliases) now use UMULL to multiply by 1/10 when building for targets with long multiply support, as this is faster than the old method. UDIV/SDIV can be fast too, but only for small numbers, making UMULL the best for the general case.
      Admin:
        Tested on Cortex-A15
        Prototyping of division routines on assorted CPUs shows that UDIV/SDIV is generally between 20% and 400% faster than the old routine (Cortex-A7, Cortex-A53), or up to 1300% faster on Cortex-A15 (the CPU does not like the old routine!)
        Division by 10 is now about 20% faster across all appropriate CPUs
      
      
      Version 5.89. Tagged as 'RISC_OSLib-5_89'
      377852c3
  29. 01 Mar, 2016 2 commits