Skip to content

runtime: jump indirectly to longjmp on Xtensa - #5677

Merged
deadprogram merged 1 commit into
devfrom
fix-xtensa-longjmp-range
Sep 13, 2026
Merged

deadprogram merged 1 commit into
devfrom
fix-xtensa-longjmp-range

Conversation

@deadprogram

Copy link
Copy Markdown
Member

What this fixes

tinygo_longjmp in src/runtime/asm_xtensa.S ends with j longjmp. The Xtensa
J instruction holds an 18-bit signed offset, thus it reaches only 128 KB.

picolibc's setjmp.S puts longjmp in the plain .text group of the linker
script, while all TinyGo code goes into the .text.* group after it. In a large
program the two are more than 128 KB apart and the link stops.

ld.lld: error: relocation R_XTENSA_SLOT0_OP out of range: -217201 is not in
[-131072, 131071]; references 'longjmp'
>>> referenced by asm_xtensa.S:33

This came in with #5653, which added panic recovery on Xtensa.

How to see it

A small program links correctly, thus the smoke tests do not find this. The
example programs in the ESP smoke test are all below 15 KB.

A large program shows it. The examples/ap program in
tinygo-org/espradio is 494 KB of code
on xiao-esp32s3 and 530 KB on esp32-mini32. Both stop at the link step.

CGO_CFLAGS_ALLOW='-fno-short-enums' tinygo build -target=xiao-esp32s3 ./examples/ap/

The change

Load the address of longjmp from a literal and jump to it with jx. The
literal carries an R_XTENSA_32 relocation, which has no range limit.

The literal is placed by hand in the same section as the code. Automatic
literals go into a separate section, which this tree already records as a cause
of bad l32r offsets with LLVM 22 and lld. See the comments in
src/device/esp/esp32.S and src/device/esp/esp32s3.S. The same hand-placed
idiom is already used in targets/esp32-interrupts.S and
targets/esp32s3-interrupts.S.

The jump stays a jump. tinygo_longjmp has no entry instruction and runs in
the register window of its caller. A call4 or call8 would rotate the window
a second time and give longjmp bad arguments.

a8 is free in both ABIs. In the windowed ABI it becomes a0 of longjmp,
which longjmp overwrites at once from the jmp_buf. In the call0 ABI it is a
scratch register, and longjmp reads only a2 and a3.

Tests

  • make smoketest-esp passes.
  • TestESP32QEMU passes with Espressif QEMU, for print.go and recover.go.
  • testdata/recover.go on ESP32-S3 hardware gives output identical to
    testdata/recover.txt.
  • The two espradio programs above link, and the complete espradio smoke test
    passes on xiao-esp32c3, xiao-esp32s3 and esp32-mini32.
  • The relocation changes from R_XTENSA_SLOT0_OP to R_XTENSA_32, in the
    windowed ABI and in the call0 ABI.

tinygo_longjmp ended with a j instruction, which reaches only 128 KB.
picolibc puts longjmp in the plain .text group of the linker script,
while all TinyGo code goes into the .text.* group after it. In a large
program the two are more than 128 KB apart and the link stops with an
out of range R_XTENSA_SLOT0_OP relocation. Small programs link
correctly, thus the smoke tests do not find this.

Load the address of longjmp from a literal and jump to it with jx. The
literal carries an R_XTENSA_32 relocation, which has no range limit.

Place the literal by hand in the same section as the code. Automatic
literals go into a separate section, which this tree already records as
a cause of bad l32r offsets with LLVM 22 and lld. See the comments in
src/device/esp/esp32.S and src/device/esp/esp32s3.S.

Keep the jump instead of a call. tinygo_longjmp has no entry
instruction and runs in the register window of its caller. A call would
rotate the window a second time and give longjmp bad arguments.

a8 is free in both ABIs. In the windowed ABI it becomes a0 of longjmp,
which longjmp overwrites at once from the jmp_buf. In the call0 ABI it
is a scratch register and longjmp reads only a2 and a3.

The recover test passes on ESP32 in QEMU and on ESP32-S3 hardware.

@jakebailey jakebailey left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No way to test it?

@deadprogram

Copy link
Copy Markdown
Member Author

No way to test it?

Tested on my xiao-esp32s3 board using the espradio repo's examples.

@github-actions

Copy link
Copy Markdown

Size difference with the dev branch:

Binary size difference
 flash                          ram
 before   after   diff          before   after   diff
  19684   19684      0   0.00%    7052    7052      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-rp2040 ./examples/adafruit4650
  63212   63212      0   0.00%    6852    6852      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/adt7410/main.go
  11244   11244      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/adxl345/main.go
  15404   15404      0   0.00%    7460    7460      0   0.00% tinygo build -size short -o ./build/test.hex -target=pybadge ./examples/amg88xx
  10460   10460      0   0.00%    5364    5364      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/apa102/main.go
  13004   13004      0   0.00%    7196    7196      0   0.00% tinygo build -size short -o ./build/test.hex -target=nano-33-ble ./examples/apds9960/proximity/main.go
  12536   12536      0   0.00%    5376    5376      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/apa102/itsybitsy-m0/main.go
   8624    8624      0   0.00%    2312    2312      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/at24cx/main.go
   9964    9964      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bh1750/main.go
   9244    9244      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/blinkm/main.go
  71752   71752      0   0.00%    3720    3720      0   0.00% tinygo build -size short -o ./build/test.hex -target=pinetime     ./examples/bma42x/main.go
  67836   67836      0   0.00%    6820    6820      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bmi160/main.go
  29068   29068      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bmp180/main.go
  66492   66492      0   0.00%    6852    6852      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/bmp280/main.go
  13516   13516      0   0.00%    5436    5436      0   0.00% tinygo build -size short -o ./build/test.hex -target=trinket-m0 ./examples/bmp388/main.go
  24356   24356      0   0.00%    6284    6284      0   0.00% tinygo build -size short -o ./build/test.hex -target=metro-rp2350 ./examples/bno08x/i2c/main.go
   9136    9136      0   0.00%    3344    3344      0   0.00% tinygo build -size short -o ./build/test.hex -target=bluepill ./examples/ds1307/sram/main.go
  22744   22744      0   0.00%    3548    3548      0   0.00% tinygo build -size short -o ./build/test.hex -target=bluepill ./examples/ds1307/time/main.go
  31044   31044      0   0.00%    5600    5600      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/ds3231/alarms/main.go
  44900   44900      0   0.00%    5600    5600      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/ds3231/basic/main.go
   4752    4752      0   0.00%    2272    2272      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/easystepper/main.go
  72832   72832      0   0.00%    7672    7672      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/flash/console/spi
  68656   68656      0   0.00%    9712    9712      0   0.00% tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/flash/console/qspi
   7452    7452      0   0.00%    2276    2276      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/gc9a01/main.go
  69584   69584      0   0.00%    7020    7020      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/gps/i2c/main.go
  70088   70088      0   0.00%    7124    7124      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/gps/uart/main.go
  10004   10004      0   0.00%    5420    5420      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/hcsr04/main.go
   5824    5824      0   0.00%    2272    2272      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hd44780/customchar/main.go
   5904    5904      0   0.00%    2272    2272      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hd44780/text/main.go
  11980   11980      0   0.00%    5388    5388      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/hd44780i2c/main.go
  15868   15868      0   0.00%    7196    7196      0   0.00% tinygo build -size short -o ./build/test.hex -target=nano-33-ble ./examples/hts221/main.go
  16460   16460      0   0.00%    2420    2420      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/hub75/main.go
  11596   11596      0   0.00%    7596    7596      0   0.00% tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/basic
  14044   14044      0   0.00%    5556    5556      0   0.00% tinygo build -size short -o ./build/test.hex -target=xiao ./examples/ili9341/basic
  30932   30932      0   0.00%   38756   38756      0   0.00% tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/pyportal_boing
  11572   11572      0   0.00%    7596    7596      0   0.00% tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/scroll
  14084   14084      0   0.00%    5556    5556      0   0.00% tinygo build -size short -o ./build/test.hex -target=xiao ./examples/ili9341/scroll
 265340  265340      0   0.00%   47440   47440      0   0.00% tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/slideshow
  12172   12172      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/lis3dh/main.go
  15292   15292      0   0.00%    7196    7196      0   0.00% tinygo build -size short -o ./build/test.hex -target=nano-33-ble ./examples/lps22hb/main.go
  26544   26544      0   0.00%    2320    2320      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/lsm303agr/main.go
  29724   29724      0   0.00%    7452    7452      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-m4 ./examples/lsm303dlhc/main.go
  13948   13948      0   0.00%    5412    5412      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/lsm6ds3/main.go
  12524   12524      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mag3110/main.go
  11316   11316      0   0.00%    5396    5396      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp23017/main.go
  11748   11748      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp23017-multiple/main.go
  11660   11660      0   0.00%    5364    5364      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp3008/main.go
  74084   74084      0   0.00%    6924    6924      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mcp2515/main.go
  30304   30304      0   0.00%    4144    4144      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/microbitmatrix/main.go
  30256   30256      0   0.00%    6188    6188      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit-v2 ./examples/microbitmatrix/main.go
   9996    9996      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mma8653/main.go
   9948    9948      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/mpu6050/main.go
  79452   79452      0   0.00%    8076    8076      0   0.00% tinygo build -size short -o ./build/test.hex -target=p1am-100 ./examples/p1am/main.go
  15464   15464      0   0.00%    6232    6232      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/pca9685/main.go
   6620    6620      0   0.00%    3284    3284      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/pcd8544/setbuffer/main.go
   5020    5020      0   0.00%    2276    2276      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/pcd8544/setpixel/main.go
  15192   15192      0   0.00%    6216    6216      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-rp2040 ./examples/seesaw/soil-sensor
  14808   14808      0   0.00%    6216    6216      0   0.00% tinygo build -size short -o ./build/test.hex -target=qtpy-rp2040 ./examples/seesaw/rotary-encoder
   2873    2873      0   0.00%     560     560      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino ./examples/servo
  16992   16992      0   0.00%    6288    6288      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico     ./examples/sgp30
   9372    9372      0   0.00%    7404    7404      0   0.00% tinygo build -size short -o ./build/test.hex -target=pybadge ./examples/shifter/main.go
  58536   58536      0   0.00%    3720    3720      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/sht3x/main.go
  58488   58488      0   0.00%    3720    3720      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/sht4x/main.go
  58536   58536      0   0.00%    3720    3720      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/shtc3/main.go
  14132   14132      0   0.00%    9076    9076      0   0.00% tinygo build -size short -o ./build/test.hex -target=xiao-ble ./examples/ssd1306/
  14808   14808      0   0.00%    6248    6248      0   0.00% tinygo build -size short -o ./build/test.hex -target=xiao-rp2040 ./examples/ssd1306/
  14760   14760      0   0.00%    6240    6240      0   0.00% tinygo build -size short -o ./build/test.hex -target=thumby ./examples/ssd1306/
   6284    6284      0   0.00%    2276    2276      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/ssd1331/main.go
   7180    7180      0   0.00%    2276    2276      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/st7735/main.go
   6876    6876      0   0.00%    2276    2276      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/st7789/main.go
  18620   18620      0   0.00%    5356    5356      0   0.00% tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/thermistor/main.go
  11820   11820      0   0.00%    5172    5172      0   0.00% tinygo build -size short -o ./build/test.hex -target=circuitplay-bluefruit ./examples/tone
  11916   11916      0   0.00%    5356    5356      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/tm1637/main.go
  13948   13948      0   0.00%    6220    6220      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/touch/capacitive
  10692   10692      0   0.00%    7396    7396      0   0.00% tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/touch/resistive/fourwire/main.go
  13728   13728      0   0.00%    7656    7656      0   0.00% tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/touch/resistive/pyportal_touchpaint/main.go
  17284   17284      0   0.00%    5468    5468      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/vl53l1x/main.go
  15796   15796      0   0.00%    5468    5468      0   0.00% tinygo build -size short -o ./build/test.hex -target=itsybitsy-m0 ./examples/vl6180x/main.go
  26280   26280      0   0.00%   14360   14360      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-nrf52840-sense ./examples/waveshare-epd/epd1in54/main.go
   6748    6748      0   0.00%    2316    2316      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/waveshare-epd/epd2in13/main.go
   6380    6380      0   0.00%    2308    2308      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/waveshare-epd/epd2in13x/main.go
   6620    6620      0   0.00%    2316    2316      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/waveshare-epd/epd4in2/main.go
  30824   30824      0   0.00%   19296   19296      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/waveshare-epd/epd2in66b/main.go
   8588    8588      0   0.00%    5396    5396      0   0.00% tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/ws2812
   6108    6108      0   0.00%    8448    8448      0   0.00% tinygo build -size short -o ./build/test.bin -target=m5stamp-c3          ./examples/ws2812
  64532   64532      0   0.00%    6572    6572      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-nrf52840 ./examples/is31fl3731/main.go
   1773    1773      0   0.00%     600     600      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino   ./examples/ws2812
   1280    1280      0   0.00%     182     182      0   0.00% tinygo build -size short -o ./build/test.hex -target=digispark ./examples/ws2812
   7732    7732      0   0.00%    8728    8728      0   0.00% tinygo build -size short -o ./build/test.bin -target=xiao-esp32c3 ./examples/ws2812
  33196   33196      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=trinket-m0 ./examples/bme280/main.go
  18180   18180      0   0.00%    5340    5340      0   0.00% tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/microphone/main.go
  12908   12908      0   0.00%    5356    5356      0   0.00% tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/buzzer/main.go
  13868   13868      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=trinket-m0 ./examples/veml6070/main.go
   8332    8332      0   0.00%    5356    5356      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l293x/simple/main.go
  10268   10268      0   0.00%    5356    5356      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l293x/speed/main.go
   8300    8300      0   0.00%    5356    5356      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l9110x/simple/main.go
  10700   10700      0   0.00%    5356    5356      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/l9110x/speed/main.go
   8108    8108      0   0.00%    3316    3316      0   0.00% tinygo build -size short -o ./build/test.hex -target=nucleo-f103rb ./examples/shiftregister/main.go
   7492    7492      0   0.00%    2280    2280      0   0.00% tinygo build -size short -o ./build/test.hex -target=hifive1b ./examples/ssd1351/main.go
  15100   15100      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/lis2mdl/main.go
  12796   12796      0   0.00%    5380    5380      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/max72xx/main.go
  79704   79704      0   0.00%    6956    6956      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/dht/main.go
  39840   39840      0   0.00%    6768    6768      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-rp2040 ./examples/pcf8523/
  72872   72872      0   0.00%    7004    7004      0   0.00% tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/alarm/
   8924    8924      0   0.00%    5396    5396      0   0.00% tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/clkout/
  67576   67576      0   0.00%    7004    7004      0   0.00% tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/time/
  72712   72712      0   0.00%    7004    7004      0   0.00% tinygo build -size short -o ./build/test.hex -target=xiao ./examples/pcf8563/timer/
  15384   15384      0   0.00%    6224    6224      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/qmi8658c/main.go
  14472   14472      0   0.00%    6216    6216      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-rp2040 ./examples/pcf8591/
  10460   10460      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/ina260/main.go
  14508   14508      0   0.00%    5404    5404      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-m0 ./examples/ina219/main.go
  10352   10352      0   0.00%    5272    5272      0   0.00% tinygo build -size short -o ./build/test.hex -target=nucleo-l432kc ./examples/aht20/main.go
  76100   76100      0   0.00%   11468   11468      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-m4 ./examples/sdcard/console/
  62700   62700      0   0.00%    8860    8860      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-m4 ./examples/i2csoft/adt7410/
  11580   11580      0   0.00%    7412    7412      0   0.00% tinygo build -size short -o ./build/test.elf -target=wioterminal ./examples/axp192/m5stack-core2-blinky/
  12084   12084      0   0.00%    6156    6156      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/xpt2046/main.go
  14248   14248      0   0.00%    5044    5044      0   0.00% tinygo build -size short -o ./build/test.hex -target=nucleo-wl55jc ./examples/sx126x/lora_rxtx/
  46596   46596      0   0.00%    9532    9532      0   0.00% tinygo build -size short -o ./build/test.hex -target=pybadge ./examples/sx127x/lora_rxtx/
  36992   36992      0   0.00%    7936    7936      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/ssd1289/main.go
  14872   14872      0   0.00%    7200    7200      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/irremote/main.go
  15104   15104      0   0.00%    6240    6240      0   0.00% tinygo build -size short -o ./build/test.hex -target=badger2040 ./examples/uc8151/main.go
  15488   15488      0   0.00%    6676    6676      0   0.00% tinygo build -size short -o ./build/test.hex -target=badger2040 ./examples/waveshare-epd/epd2in9v2/main.go
  17180   17180      0   0.00%    6268    6268      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/scd30/main.go
  13528   13528      0   0.00%    6244    6244      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/scd4x/main.go
   9476    9476      0   0.00%    5356    5356      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=circuitplay-express ./examples/makeybutton/main.go
  11052   11052      0   0.00%    5380    5380      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/ds18b20/main.go
 125516  125516      0   0.00%    8408    8408      0   0.00% tinygo build -size short -o ./build/test.hex -target=nucleo-wl55jc ./examples/lora/lorawan/atcmd/
  19780   19780      0   0.00%    7812    7812      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/as560x/main.go
  15144   15144      0   0.00%    6216    6216      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/mpu6886/main.go
   9356    9356      0   0.00%    5356    5356      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/ttp229/main.go
  70744   70744      0   0.00%    7696    7696      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/ndir/main_ndir.go
  63184   63184      0   0.00%    3784    3784      0   0.00% tinygo build -size short -o ./build/test.hex -target=microbit ./examples/ndir/main_ndir.go
  67516   67516      0   0.00%    6884    6884      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 ./examples/ndir/main_ndir.go
  12952   12952      0   0.00%    6208    6208      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/mpu9150/main.go
  14772   14772      0   0.00%    6268    6268      0   0.00% tinygo build -size short -o ./build/test.hex -target=macropad-rp2040 ./examples/sh1106/macropad_spi
  11664   11664      0   0.00%    6656    6656      0   0.00% tinygo build -size short -o ./build/test.hex -target=macropad-rp2040 ./examples/encoders/quadrature-interrupt
  69144   69144      0   0.00%    7664    7664      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/mcp9808/main.go
  46540   46540      0   0.00%    8276    8276      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=pico ./examples/tmc2209/main.go
  14948   14948      0   0.00%    6164    6164      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/tmc5160/main.go
  13616   13616      0   0.00%    5160    5160      0   0.00% tinygo build -size short -o ./build/test.uf2 -target=nicenano ./examples/sharpmem/main.go
  63544   63544      0   0.00%    6600    6600      0   0.00% tinygo build -size short -o ./build/test.hex -target=feather-nrf52840 ./examples/max6675/main.go
  15784   15784      0   0.00%    6224    6224      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/ens160/main.go
  19648   19648      0   0.00%    6320    6320      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/si5351/main.go
  24512   24512      0   0.00%    7536    7536      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/w5500/main.go
  91800   91800      0   0.00%    7916    7916      0   0.00% tinygo build -size short -o ./build/test.hex -target=pico ./examples/sd
  90600   90600      0   0.00%    8024    8024      0   0.00% tinygo build -size short -o ./build/test.hex -target=challenger-rp2040 ./examples/net/ntpclient/
 384324  384324      0   0.00%   19644   19644      0   0.00% tinygo build -size short -o ./build/test.hex -target=pyportal -stack-size 8kb ./examples/net/http-get/
 125696  125696      0   0.00%    8964    8964      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-nano33 -stack-size 8kb ./examples/net/tcpclient/
 364456  364456      0   0.00%   18588   18588      0   0.00% tinygo build -size short -o ./build/test.hex -target=nano-rp2040 -stack-size 8kb ./examples/net/websocket/dial/
 107604  107604      0   0.00%   10944   10944      0   0.00% tinygo build -size short -o ./build/test.hex -target=metro-m4-airlift -stack-size 8kb ./examples/net/socket/
 429668  429668      0   0.00%   21312   21312      0   0.00% tinygo build -size short -o ./build/test.hex -target=matrixportal-m4 -stack-size 8kb ./examples/net/webstatic/
 173700  173700      0   0.00%   10852   10852      0   0.00% tinygo build -size short -o ./build/test.hex -target=arduino-mkrwifi1010 -stack-size 8kb ./examples/net/tlsclient/
 162880  162880      0   0.00%    9968    9968      0   0.00% tinygo build -size short -o ./build/test.hex -target=nano-rp2040 -stack-size 8kb ./examples/net/mqttclient/natiu/
 121616  121616      0   0.00%   14256   14256      0   0.00% tinygo build -size short -o ./build/test.hex -target=wioterminal -stack-size 8kb ./examples/net/webclient/
 379604  379604      0   0.00%   24404   24404      0   0.00% tinygo build -size short -o ./build/test.hex -target=wioterminal -stack-size 8kb ./examples/net/webserver/
 381520  381520      0   0.00%   24364   24364      0   0.00% tinygo build -size short -o ./build/test.hex -target=wioterminal -stack-size 8kb ./examples/net/mqttclient/paho/
 183180  183180      0   0.00%   14948   14948      0   0.00% tinygo build -size short -o ./build/test.hex -target=elecrow-rp2040 -stack-size 8kb ./examples/net/tlsclient/
 126732  126732      0   0.00%   13052   13052      0   0.00% tinygo build -size short -o ./build/test.hex -target=elecrow-rp2350 -stack-size 8kb ./examples/net/ntpclient/
  23544   23556     12   0.05%    8580    8580      0   0.00% tinygo build -size short -o ./build/test.bin -target=esp32-coreboard-v2 ./examples/gdew0154m09/main.go
  12356   12368     12   0.10%    4688    4688      0   0.00% tinygo build -size short -o ./build/test.elf -target=m5stack-core2 ./examples/ft6336/basic/
  19904   19916     12   0.06%    4956    4956      0   0.00% tinygo build -size short -o ./build/test.elf -target=m5stack-core2 ./examples/ft6336/touchpaint/
7027370 7027406     36   0.00% 1138534 1138534      0   0.00%

@deadprogram

Copy link
Copy Markdown
Member Author

Thanks for review @jakebailey now merging.

@deadprogram
deadprogram merged commit ea3327a into dev Sep 13, 2026
72 checks passed
@deadprogram
deadprogram deleted the fix-xtensa-longjmp-range branch September 13, 2026 08:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants