Skip to main content
Harvey White
Senior III
July 20, 2026
Question

Bug report GNU tools 14.3.rel1 interrups

  • July 20, 2026
  • 2 replies
  • 50 views

This covers two separate problems.

  1. unsafe relocation.
    1. This is coupled with a “cannot find routine xxx”.  The cannot find xxx is explained by a  changed #ifdef that did not include a routine.  The problem that also cropped up was an “unsafe relocation” which doesn’t seem to mean all that much (I know the explanation) in the way of solving the problem.  This is “fixed” by going back to 13.3.rel1. and changing the #ifdef.
  2. Interrupts not working FreeRTOS latest
    1. primask register goes to 0x80 when default task is created.
    2. taskEXIT_CRITICAL() does not change that mask
    3. Timer, systick, and any other interrupts remain disabled after the first task.
    4. If no tasks are created, then primask may or may not be properly set, but the interrupts do not work
    5. FREERTOS insists that interrupts should be disabled (read the documents!) and will be re-enabled when the scheduler runs.
      1.  with 14.3.rel1 interrupts are not enabled.
    6. resetting GNU tools to 13.3.rel1 seems to make it all work (and it had been working

It might be something odd in my setup, but now I have an idea of what to look for.

 

2 replies

Andrew Neil
Super User
July 20, 2026

There have been a few threads on the “Unsafe Relocation” error, but I can’t seem to find any using the new forum search.

Please give the full error log.

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
Andrew Neil
Super User
July 20, 2026
A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
Harvey White
Senior III
July 20, 2026

Yes, I think that’s it.   That part is less important to me because it’s already a defined bug.  It’ll be attended to.

The interrupt situation is more important to me.  I’ll be working on trying to regularize that.

Pavel A.
July 20, 2026

> primask register goes to 0x80 when default task is created.
> taskEXIT_CRITICAL() does not change that mask

IIRC the cause can be a FreeRTOS API call before the scheduler is started, or calling an API without _IT in interrupt state.

Sometimes the former is hard to avoid without tweaks (ex. when using  malloc with the FreeRTOS thread locks).