This is to workaround a difficult bug in newlib related to
configure-time generation of this flag in newlib.h. Since there is no
multi-lib mechanism for headers, _LDBL_EQ_DBL ends up in newlib.h, which
is installed architecture wide. The default -mcpu= setting for the 68k
toolchain does support long double, so this flag is not defined in
newlib.h.
However, Coldfire targets lack support for long double, leading to some
undesirable behavior in the C/C++ standard headers. ieeefp.h has
numerous sanity checks that will #error and <cmath> from C++ will fail
to compile.
It doesn't look like this issue will ever be fixed in newlib, so we'll
just define this manually as a workaround.
Closes#5435
This adds a missing text description for an internal error and updates
the spinternalerror02 test to check for the correct end of internal
error definitions.
Closes#5410
A write to the sctlr_el1 register is a 'context-changing operation'
and thus requires a pipeline flush for the change to actually take
effect on subsequent instructions.
The isb instruction gurantees this, and ensures mmu is enabled
immediately.
Closes#5422
This adds a backend for flashdev that simulates a flash device with
adjustable delays to simulate real flash devices and offers
configurable flash parameters. This also migrates the JFFS2
filesystem tests to the flashdev framework and eliminates the
purpose-built simulated flash in the testsuite in favor of a more
generic and widely usable solution.
Closes#5403
This adds summary support to the build with a global option to enable
this support and necessary changes to the imported summary support
source to integrate it into the build system and resolve errors.
Closes#5398
This makes the number of active chipselects a BSP configuration
parameter. The name of the macro in upstream source is misleading and
suggests that the driver can support up to the selected value when in
actuality it requires that number of chips to be present. If this number
of chips is not present, the driver will hang on initialization waiting
for a chip to respond that does not exist.
Closes#5397
Move JFFS2 from the Cygwin implementation of CRC32 to the zlib
implementation which can take advantage of hardware acceleration and
reduces code duplication. Synthetic benchmarks on AArch64 hardware show
approximately a 17x improvement in CRC32 calculation speed and
real-world testing with JFFS2 shows a 1% improvement in mount times, a
5% improvement in data write times, and a 9% improvement in garbage
collection times.
A test was written to compare hash generation between the two algorithms
and a partition was created with one and then remounted with the other
with no errors.
Closes#5396
When a callback does not exist, the Flashdev API should return error
where possible instead of success. When the API returns success for
missing callbacks, the Flashdev API client code may end up using
uninitialized variables as if they were filled by the API.
Closes#5392
Return the actual out of bounds size per page instead of the ioctl
return status. JFFS2 will happily operate with an OOB size of 0 and
instead put cleanmarkers in the normal page space of the flash.
Closes#5379
Previously this RTC was using the file system-based i2c interface in
/dev. Since the RTC is initialized pretty early on during system init,
we call open() before stdin/stdout/stderr have been opened. RTEMS
assumes that stdin == 0, stdout == 1, etc., and fails when that isn't
the case. In particular, when stdin != 0, RTEMS assumes that it wasn't
configured with a console driver and skips opening stdout/stderr,
leading to confusing issues with the standard I/O streams.
Closes#5284
If someone manages to open a file before rtems_libio_post_driver is run,
open() may allocate a file number other than 0 for stdin. This leads to
a silent failure of the logic in rtems_libio_post_driver, and confusing
behavior because your BSP behaves as if it doesn't have a console.
Instead of failing silently, raise an internal error if open() succeeds
but gives us an unexpected file number for stdin.
Updates #5284
This is now used by multiple files and can cause a multiple definitions
error when linking. Make the structure static to avoid this problem.
Closes#5372
In some cases a file read is not completed in a single call into the
JFFS2 layer and the inode is left in the READING state. When this
happens, it's possible for a garbage collection pass to be initiated
before completion of the read. In some such cases, the garbage
collection pass is executed in a tight loop that expects granular
locking to allow forward progress of the read between collection passes.
With RTEMS monolithic locking of the JFFS2 layer, forward progress is
not possible in this situation since the monolithic lock is never
released inside the loop.
The solution is to have the garbage collection pass return failure when
no progress is possible due to a bad inode state. This allows the read
to complete and the collection pass can be attempted at a later time.
Closes#5365
This extends the flashdev API to support the additional calls required
by NAND device backends. This also adds region-relative IOCTLs to
prevent reimplementation of offset logic in top-end flashdev/filesystem
adapters.
Closes#5350
The maximum size of JFFS2 is 4GB minus the block size of the flash.
Enforce this limitation when setting up a filesystem on a flashdev
region that is larger than the maximum.
This also resolves some off-nominal memory leaks.
Closes#5347
This adds an API call allowing for unregistration to include destruction
of private data that is not managed by the flashdev framework. This also
updates the existing consumers of flashdev to use the new private data
destructor callback.
Closes#5346
The conversion to Markdown for the documentation sources resulted in
changes of Doxygen comments of generated sources. Backport these
changes.
Close#5338.
- Provide an option for a file system to support close wtih
references held. This can happen in more complex file systems
and file descriptor handling with more complete reference
handling implementations where an fd can hold other fds and
close can be call on any fd and succeed.
- Fix open IOP leaks in the error paths.
- Provide better definition of the IOP flags to help clarify
the code.
Fixes#5201Closes#5311
This adds support for the "vGetTLSAddr" GDB query which retrieves the
address of a TLS variable by offset from the beginning of the TLS memory
space for the given thread. This offset does not include the size of the
thread control block which is at the beginning of every TLS area as used
by RTEMS. Notably, the returned address is big-endian rather than the
little-endian typical with other responses.
This functionality does not include retrieval of addresses for TLS
variables hosted in loadable modules, only TLS variables in the host
binary.
Closes#5271
If the Double Trap Extension is implemented, the
MDT bit of the mstatus (or mstatush in RV32)
register will be set when a trap is to be taken.
The MIE (Machine Interrupt Enable) bit can only
be set to 1 if the MDT bit is zero.
Thus, we need to clear MDT first if we want to
enable interrupts when dispatching a thread.
MDT is also cleared in register a1 before
restoring the interrupt frame as writing 1 to MDT
will cause MIE to be set to 0. In RV64 this
happens regardless of the value written to MIE in
the same write.
In RV32, MDT is in the mstatush so we do not need
to clear during restore as this register is not
restored.
With this change all 60 SMP tests pass (compared
to 20/60 before the fix). The tests have been run
on hardware using two RV64 CPUs that implement
the double trap extension.
Close#5288
(cherry picked from commit 19f12d2dca)
Before, the console driver needed
`BSP_CONSOLE_USE_INTERRUPTS` to be defined or it
would not build. The intent was to use polled
mode if the macro was equal to zero.
This change makes it so interrupt mode is used if
the macro is defined and polled mode is used if
the macro is not defined.
(cherry picked from commit 5e0a68d3ab)
Close#5283
The old logic would lead to an error when
multiprocessing was enabled and
`LEON3_GPTIMER_BASE` was defined due to
`leon3_timer_core_index` being undefined.
The new logic fixes this and keeps the same
intent:
- If multiprocessing is not enabled, the timer
index is 0
- If multiprocessing is enabled and
`LEON3_GPTIMER_BASE` is defined, the timer
index is twice the CPU boot index
- If multiprocessing is enabled and
`LEON3_GPTIMER_BASE` is not defined, we
fallback to the old logic using the GPTIMER
core index.
Close#5281
When memory is accessed by the remote debugging client, the access is
sandboxed with setjmp/longjmp and appropriate exception handlers to
prevent the attempted access from causing a failure of the debugger or
otherwise altering execution. The existing implementation works as
expected when the context executing the memory access and the exception
context resulting from a failed access do not share a stack.
In the case of AArch64, a failed access when the debugger is already in
exception context causes a re-entry into exception context where the
machine state is pushed onto the same stack that was in use where the
exception occurred. When setjmp is called inside a stack frame and the
exception occurs outside that stack frame, the stack frame is unwound
before the exception occurs and the exception entry overwrites the area
previously occupied by the stack frame housing the setjmp and corrupting
the link register that is stored there. After restoration of state using
longjmp(), this corrupted link register information is loaded from the
stack frame and undesired behavior occurs.
In the instance of this bug that was encountered, the corrupted link
register contained an unaligned pointer which caused an unending cascade
of prefetch abort exceptions presenting as a hard hang.
Closes#5273
- Assume a relocation record with a symbol name with a length of
0 is resolved. ARM seems to create a symbol with no name for
R_ARM_V4BX relocation records.
- Move the addition of the rtems_rtl_base_sym_global_add symbol
to the global symbol table to the weak
rtems_rtl_base_global_syms_init call. If symbols are
embedded the support for runtime loading symbols is over
loaded. This change is required so the base object has a
valid global symbol table attached to track dependencies.
Fixes#5234
The following files will be installed during SPARC/GRLIB builds:
- bsps/include/grlib/apbuart-regs.h
- bsps/include/grlib/gptimer-regs.h
- bsps/include/grlib/irqamp-regs.h
- bsps/sparc/include/grlib/io.h
Closes issue #5232
For example, with edge triggered external interrupts we may see spurious
interrupts. Ignore them instead of issuing a fatal error.
Use eieio to synchronize access to the IACK and EOI registers.
Use a loop to immediately services the next pending interrupt without
having to go through the exception epiloge and prologue.
Close#5173.
Some pkg-config variants perform transformations on the --libs options.
This may lead to completely broken linker options. Provide the LDFLAGS
as a variable. Remove "Ldflags:" since this is an unsupported field.
Update #5165.