- 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)
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 RTEMS_CAPTURE_OVERFLOW is an overflow flag for each CPU, and its
value is the same as RTEMS_CAPTURE_INIT. Executing rtems_capture_flush
will set the RTEMS_CAPTURE_INIT flag to 0 in the global flags.
Fixes#5184.
This commit aligns trampolines for THUMB and ARM instructions
(CALL/JUMP24 and THM_JUMP24/THM_PC22).
According to the ARM technical reference in section "Register-relative
and PC-relative expressions":
In Thumb code:
- For B, BL, CBNZ, and CBZ instructions, the value of the PC is the
address of the current instruction plus 4 bytes.
- For all other instructions that use labels, the value of the PC is
the address of the current instruction plus 4 bytes, with bit[1]
of the result cleared to 0 to make it word-aligned.
Closes#5189
The POSIX sporadic server may temporarily remove the real priority of a
thread. Check that the priority node is active before the change is
propagated.
Update #5164.
Previously the system event used by lio_listio was manually added to
event.h and not using rtems-central. This patch corrects that and renames
the event to make it clearer.
Some related dead code has also been removed.
(cherry picked from commit cabc8c3a78)
Co-authored-by: alessandronardin <ale.daluch@gmail.com>
Properly serialize explicit thread priority changes (for example
rtems_task_set_priority()) and thread priority changes carried out by
thread queues (locking protocols such as priority inheritance).
Update #5159.
In case of overflows, we may have an RTEMS_RECORD_UPTIME_HIGH event as
the first event. This uptime high event has no associated
RTEMS_RECORD_UPTIME_LOW event.
This code had a uint32_t local variable for seconds from a timespec.
This was assigning a time_t to a uint32_t and ultimately returning it.
This propgated to rtems_timespec_add_to().
Coverity CID 1512527
Closes#5107.
This removes the carriage return printed before the shell prompt as it
can cause other output to be overwritten unexpectedly. This was
discovered when using the "cat" shell command on a file whose content
contained no trailing \n\r and was short enough to be entirely swallowed
by the prompt.
The rtime decompression routine does not fully check bounds during the
entirety of the decompression pass and can corrupt memory outside the
decompression buffer if the compressed data is corrupted. This adds the
required check to prevent this failure mode.
Updates #5072
This reverts commit c1aa06dbd2.
Extending the rtems_stack_checker_info like this breaks the existing
visitor API used by rtems_stack_checker_iterate(). After review, using
an information structure contradicts the intention of the reporter to
allow a minimal reporting. Filling up the information structure with
all the details would pull in several dependencies, like
_Thread_Get_name(). The API should be improved to provide the user with
the necessary information from the TCB without having to access members
directly.