mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-09-11 15:09:32 +00:00
02021b5853
C malloc storage has explicit lifetime: it must remain allocated until free even when no GC-visible pointer references it. Treating it as an ordinary NoPtrs allocation breaks bare-metal C object graphs, while conservatively scanning arbitrary C bytes creates false Go roots. Add allocManual/freeManual so collectors can represent pointer-free, explicitly managed storage. Block GC keeps these objects permanently marked and releases their blocks on free; Boehm uses atomic uncollectable allocations; leaking and custom collectors provide equivalent behavior. Wasm keeps its allocation map only for validation and sizes, and WASIp2 realloc now copies min(oldSize, newSize). Bump the Boehm library cache version because enabling atomic uncollectable allocations changes its compiled flags and exported API. Also handle zero-size and overflowing allocations, serialize allocation registries, reject Go finalizers on manual storage, and add CGo regressions for C pointer graphs, hidden until-free allocations, repeated free/reuse, and allocation edge cases.
2936 lines
135 KiB
Markdown
2936 lines
135 KiB
Markdown
0.42.0
|
|
---
|
|
* **general**
|
|
- all: add LLVM 22 support, and support LLVM 19 and LLVM 20 on Fedora 43
|
|
- all: build and test using Go 1.27, and raise the max supported Go version to 1.27
|
|
- all: modernize and clean up code with Go 1.24+ in mind (#5489, #5498)
|
|
- all: use unsafe.SliceData where appropriate
|
|
- all: update golang.org/x/tools and go-llvm
|
|
- cli: add basic probe-rs support
|
|
- cli: clarify the runtime.alloc linker error with -gc=none
|
|
- main: allow the -o flag to point to a directory
|
|
- main: make the -monitor flag on flash respect the port
|
|
- main: update to espflasher 0.8.0 with fixes for esp32c3 and esp32s3
|
|
- cgo: add CGO_CFLAGS support (#5453)
|
|
- version: update to 0.42.0 for the new dev cycle
|
|
- docs: add agents.md guideline for use of ASD-STE100 (#5566)
|
|
* **compiler**
|
|
- compiler, runtime: make runtime, map, and channel panics recoverable
|
|
- compiler, runtime: support recover on riscv64
|
|
- compiler, runtime, reflect: generate type-specific hash/equal (#5359)
|
|
- support Go 1.27 generic methods via the x/tools upgrade
|
|
- canonicalize generic instance and method signature identities
|
|
- disambiguate function-local named types and generic instance link names (#5336)
|
|
- exclude generic methods from runtime method sets
|
|
- support file-level //go:linkname directives and the //go:linknamestd pragma
|
|
- add the //go:noheap pragma
|
|
- pass large aggregates by pointer
|
|
- use LLVM intrinsics for math trig operations
|
|
- optimize zero-sized allocations
|
|
- consistently pass layout and alignment to createAlloc
|
|
- handle nested unsigned shift being untyped after type resolution (#5497)
|
|
- store the defer list head in the defer frame and centralize deferred call records
|
|
- centralize SSA loads, stores, result handling, and LLVM function type construction
|
|
- transform, compiler: support the captures(none) attribute of LLVM 21
|
|
- compiler: make composite map hashes order dependent
|
|
* **core**
|
|
- reflect: add Type.ConvertibleTo and complex, rune, and integer string conversions
|
|
- reflect: implement MakeChan
|
|
- reflect: add missing iterator methods
|
|
- reflect, reflectlite: make IsRO and MakeRO package methods
|
|
- sync: add Map.CompareAndSwap and Map.CompareAndDelete
|
|
- sync: fix deadlock in the Map.Range callback
|
|
- os, syscall: add Statfs and Fstatfs stubs and Getpagesize for non-hosted targets
|
|
- os: add File.Chown on the unix path
|
|
- runtime, syscall, internal/poll, os: wasip1 poll_oneoff scheduler integration and net.FileListener (#5386)
|
|
- runtime, testing: support Goexit, SkipNow, and FailNow
|
|
- syscall: remove sliceHeader, use unsafe.SliceData more
|
|
- builder, cgo, syscall: replace fixed-size array casts with unsafe.Slice
|
|
- builder, loader: fix -ldflags -X not overriding variables with default values
|
|
- builder: build SSA before compiling packages
|
|
- builder: increase the stack size margin for automatic stack allocation
|
|
- builder: do not count non-writable SHT_NOBITS sections as RAM or bss
|
|
- builder: link stack probes on Windows amd64 and arm64, and add chkstk2.S for windows/386
|
|
- builder: add strlen to the wasm builtins
|
|
- builder: retry cached archive renames on Windows (#5462)
|
|
- loader: avoid a race condition when loading the package list, and skip object resolution
|
|
- interp: bail out of loops that iterate too many times (#5395)
|
|
- interp: fix partial store aliasing and avoid repeated object clones
|
|
- interp: defer out-of-bounds loads to runtime instead of crashing
|
|
- interp: mark pointers in aggregate call operands as external
|
|
- interp: fix switch-instruction handling for the new case-value API of LLVM 22
|
|
- transform: follow returned pointer and aggregate alloc aliases
|
|
- transform: add -print-allocs-cover and restore the -print-allocs reason output
|
|
- device: add device/uefi and device/amd64
|
|
- wasm: patch wasm_exec.js and wasm_exec_node.js from Go 1.18+ (#5483)
|
|
* **net**
|
|
- update the net module with a roundtrip fix for js/wasm
|
|
* **runtime**
|
|
- make divide-by-zero and nil dereference panics recoverable
|
|
- add a Windows vectored exception handler for recoverable panics
|
|
- make Goexit exit host threads, and encode a pending Goexit in the panic state
|
|
- make out-of-memory and fatal failures unrecoverable
|
|
- improve the hardfault handler and stack reporting on Cortex-M
|
|
- prevent timer starvation in the cores scheduler
|
|
- do not access the timer queue outside of the lock
|
|
- fix ticker not stopping when Stop races with its callback (#5487)
|
|
- wake channel waiters after releasing locks (#5513)
|
|
- implement SetFinalizer and run syscall/js finalizers without a manual GC (#5545)
|
|
- implement MemStats.NumGC
|
|
- add runtime.fastrandn (#5502)
|
|
- make arrays and struct field hashes order dependent
|
|
- add critical-section fallbacks for atomic And and Or
|
|
- gc: pause all cores before scanning the stack and globals
|
|
- gc: correct the old size calculation in block realloc
|
|
- gc: correct the leaking allocator bounds and overflow checks
|
|
- gc: move objHeader to the end of the block header
|
|
- cgo: keep malloc allocations alive until free and stop the program for invalid or repeated free calls
|
|
- fix the leaking GC build with the cores scheduler
|
|
- rp2040: fix -gc=leaking and -gc=none
|
|
- rp2: handle the RP2350 shared FIFO IRQ for GC (#5482)
|
|
- esp32c6: select the 80MHz PLL as the TIMG0 timer clock source
|
|
- split baremetal memory setup and the Windows PE globals scan for UEFI (#5360, #5361)
|
|
* **machine**
|
|
- usb: support bidirectional endpoints by dynamic registration on RP2, SAMD21/51, and nRF52840 (#5447)
|
|
- usb: generate endpoint descriptors dynamically
|
|
- usb: implement endpoint stall for nRF52840
|
|
- usb: fix a truncated string descriptor when the host requests a short maxLen (#5449)
|
|
- usb: add USBDevice.Attach and USBDevice.Detach (#5563)
|
|
- usb/cdc: fix the RP2 USB CDC TX race with the cores scheduler (#5391)
|
|
- add UART line inversion support (#5522)
|
|
- optimize RTT initialization
|
|
- device/arm: add ARM v7-M MPU support
|
|
- esp32: add interrupt support with vector table, timer alarm, and GPIO SetInterrupt
|
|
- esp32: add interrupt-based UART RX and fix the init order
|
|
- esp32: implement flash XIP (execute-in-place) support
|
|
- esp32: add ADC driver (#5595)
|
|
- esp32: fix pullup and pulldown on RTC GPIO pins
|
|
- esp32: remove dead code and fix GC root scanning
|
|
- esp32: configure UARTs to the specified pins and yield while waiting for the buffer
|
|
- esp32, esp32s3: fix the boot crash caused by the LLVM 22 lld l32r relocation bug
|
|
- esp32s3: fix register-window corruption under interrupt load
|
|
- esp32s3: add temperature reading
|
|
- esp32c6: add a minimal implementation with I2C and ADC support
|
|
- stm32: fix UART transmission, baud rate, and interrupt handling
|
|
- stm32: add an OTG FS USB driver for F4 and F7
|
|
- stm32: add STM32H7 and NUCLEO-H753ZI support
|
|
- stm32: add support for the STM32U031 chip
|
|
- stm32: make the HSE crystal frequency selectable
|
|
- stm32u5: configure the system clock to 160 MHz
|
|
- nrf: avoid a too high priority interrupt on SoftDevice
|
|
- rp2: allow SPI transmit-only without SDI (#5437)
|
|
- rp2: clear the USB buffer status before the endpoint handlers
|
|
- rp2350: fix the ROM CS control for the RP2350 ROM code
|
|
- add GP aliases for waveshare-rp2040-zero
|
|
- gba: add support for mGBA debugging
|
|
- gba: add bios interrupt flags and sound register constants (#5445)
|
|
* **targets**
|
|
- add minimal uefi target support with the LinkerFlavor option (#5452, #5465)
|
|
- uefi: add support for UEFI time and events, fix STOP newline conversion (#5549)
|
|
- uefi: add support for the tasks scheduler and make it the default (#5553)
|
|
- add Puya PY32F MCU support (#5106)
|
|
- add esp32s3-box-3 (#5388)
|
|
- add M5Stack Stamp-S3A (#5524)
|
|
- add Pimoroni Blinky 2350 and Badger 2350 (#5434)
|
|
- add the 'Plus' board variant of SeeedStudio XIAO nrf52840 (#5479)
|
|
- esp32: adjust memory usage, add DRAM1 sections, and export the symbols needed for wifi
|
|
- esp32c3: add the BT ROM functions to the linker
|
|
- esp32: add the espradio tag for convenience
|
|
- builder: fix esp32 XIP so large programs flash correctly, including QEMU image offsets
|
|
- wasm_exec.js: add runtime.getRandomData to the gojs imports, coerce memory offsets to unsigned, and reset _pendingEvent
|
|
* **libs**
|
|
- update macos-minimal-sdk to v0.1.0
|
|
* **build/test**
|
|
- ci: run the full smoke test once, and split the GNUmakefile (#5616)
|
|
- ci: publish a draft release from the artifacts that CI already built
|
|
- ci: stop the LLVM caches from being evicted
|
|
- ci: modify builds to use LLVM 22
|
|
- ci: add a check for compatibility with older Go and LLVM versions
|
|
- ci: add a job to make sure go.sum stays in sync with go.mod
|
|
- ci: re-add fmt-check, and remove the CircleCI configuration
|
|
- ci: adjust runner sizes for Linux, Windows, and macOS
|
|
- build: statically link the MinGW runtime in the LLVM tools on Windows
|
|
- Makefile: use ${LLVM_PROJECTDIR} during the copy phase
|
|
- GNUmakefile: disable DWARF compression for CGo objects, and update the stdlib test lists
|
|
- test: run ESP32 programs in QEMU
|
|
- test: support simavr 1.8+
|
|
- test: normalize LLVM IR when updating goldens
|
|
- test: convert TestBinarySize to a golden file test
|
|
- testdata: add regression tests for generic instances, generic aliases, and large aggregates
|
|
- test: skip flaky and Go 1.27 affected tests for now
|
|
|
|
0.41.1
|
|
---
|
|
* **machine**
|
|
- esp32c3: correct pin interrupt setup call that was overlooked from #5320
|
|
* **runtime**
|
|
- esp32s3: wait for TIMG0 update register to clear before reading timer registers
|
|
* **net**
|
|
- update net module to a version that is backwards compatible with Go 1.25.x to fix #5332
|
|
|
|
0.41.0
|
|
---
|
|
* **general**
|
|
- go.mod, compiler: bump minimum Go version to 1.23
|
|
- builder: support Go 1.26 now
|
|
- feat: add inheritable-only field to filter processor-level targets (#5270)
|
|
- feature: add esp32flash flash method for esp32s3/esp32c3/esp32/esp8266
|
|
- flashing: introduce flash method 'esp32jtag' for esp32c3/esp32s3 targets
|
|
- fashing: add "adb" flash method using Android Debug Bridge
|
|
- main: auto-use best available flashing options on esp32
|
|
- espflasher: update to espflasher 0.6.0
|
|
* **compiler**
|
|
- implement method-set based AssignableTo and Implements (#5304)
|
|
- simplify createObjectLayout
|
|
- implement copy directly
|
|
- fix min/max on floats by using intrinsics
|
|
- add element layout to sliceAppend
|
|
- add intrinsic for crypto/internal/constanttime.boolToUint8
|
|
- fix SyscallN handling for Windows on Go 1.26+
|
|
* **core**
|
|
- reflect: add TypeAssert
|
|
- reflect: fix TypeAssert for structs
|
|
- sync: add WaitGroup.Go
|
|
- os: add UserCacheDir and UserConfigDir
|
|
- os: implement Lchown function for changing file ownership (#5161)
|
|
- testing: add b.ReportMetric()
|
|
- errors: add errors package to passing list
|
|
- internal/gclayout: use correct lengths
|
|
- internal/abi: add EscapeNonString, EscapeToResultNonString
|
|
- internal, runtime: add internal fips bool
|
|
- internal/itoa: resurrect from Go stdlib
|
|
- internal/syscall/unix: implement GetRandom for WASI targets
|
|
- interp: make ptrtoint size mismatch a recoverable error
|
|
- loader: support "all:" prefix in //go:embed patterns
|
|
- loader, crypto/internal/entropy: fix 32 MiB RAM overflow on microcontrollers
|
|
- loader, unicode/utf8: fix hiBits overflow on 16-bit AVR targets
|
|
- builder: order embedded files deterministically
|
|
- builder: fix panic in findPackagePath when using -size short
|
|
- builder: fix SIGSEGV when stripping duplicate function definitions
|
|
- builder, runtime: fix duplicate symbol error with Go 1.26+ on Windows
|
|
- builder: use target-specific -march for RISC-V library compilation
|
|
- transform: modify output format from the -print-allocs flag to match the go coverage tool format
|
|
- cgo: allow for changes to 'short-enums' flag
|
|
- wasm: add more stubbed file operations
|
|
* **machine**
|
|
- esp32c3: implement BlockDevice for esp32c3 flash
|
|
- esp32c3: clear GPIO STATUS before dispatching pin callbacks
|
|
- esp32c3: implement USBDevice using interrupts
|
|
- esp32c3: add Enable stub for QEMU test target
|
|
- esp32c3: fix interrupt disable handling
|
|
- esp32c3: clear MCAUSE after handling interrupt
|
|
- esp32c3: map missing IRAM sections in linker script
|
|
- esp32c3: fix to use PROVIDE() for WiFi/BLE ROM function addresses to allow blob overrides
|
|
- esp32c3: add WiFi/BLE ROM linker support
|
|
- esp32c3: use TIMG0 alarm interrupt for sleepTicks instead of busy-waiting
|
|
- esp32s3: implement Pin.SetInterrupt for GPIO pin change interrupts
|
|
- esp32s3: use edge-triggered CPU interrupt for GPIO pin interrupts
|
|
- esp32s3: add interrupt support (#5244)
|
|
- esp32s3: switch USB implementation to use interrupts instead of polling
|
|
- esp32s3: replace inline ISR with full interrupt vector handler
|
|
- esp32s3: use TIMG0 alarm interrupt for sleepTicks
|
|
- esp32s3: improve exception handlers, add procPin/procUnpin, and linker wrap flags
|
|
- esp32s3: fix Xtensa register window spill using recursive call4 in task switching
|
|
- esp32s3: update linker script and boot assembly for multi-page flash XIP mapping
|
|
- esp32s3: add flash XIP boot assembly with cache/MMU init
|
|
- esp32s3: implement SPI (#5169)
|
|
- esp32s3: implement I2C interface (#5210)
|
|
- esp32s3: implement RNG based on onboard hardware random number generator
|
|
- esp32s3,esp32c3: add USB serial support
|
|
- esp32s3,esp32c3: add txStalled flag to skip USB serial spin when no host
|
|
- esp32s3,esp32c3: make USB Serial/JTAG writes non-blocking when FIFO is full
|
|
- esp32c3/esp32s3: refactor ADC implementation to reduce code duplication
|
|
- esp32s3,esp32c3: add ADC support (#5231)
|
|
- esp32s3,esp32c3: add PWM support (#5215)
|
|
- esp32c3/esp32s3: refactoring and corrections for SPI implementation
|
|
- esp32xx: add WASM simulator support for ESP32-C3/ESP32-S3 targets
|
|
- esp32: default SPI CS pin to NoPin when unset
|
|
- esp: fix tinygo_scanCurrentStack to spill register windows
|
|
- stm32: fix UART interrupt storm caused by uncleared overrun error
|
|
- stm32: fix PWM problem due to register shifting
|
|
- stm32: add STM32U585 target definition and runtime
|
|
- stm32: add STM32U5 GPIO, pin interrupts, and UART support
|
|
- stm32: add STM32U5 I2C support
|
|
- stm32: add STM32U5 SPI support
|
|
- stm32u585: implement ADC
|
|
- stm32g0b1: add support (#5150)
|
|
- stm32g0b1: add Watchdog + ADC support (#5158)
|
|
- stm32l0: add flash support
|
|
- stm32l0x1,l0x2: TIM: adapt to 32-bit register access
|
|
- stm32g0: sync with updated stm32 device files
|
|
- attiny85: add USI-based SPI support (#5181)
|
|
- attiny85: add PWM support (#5171)
|
|
- rp: add Close function to UART to allow for removing all system resources/power usage
|
|
- rp: use blockReset() and unresetBlockWait() helper functions for peripheral reset/unreset
|
|
- rp2: prevent PWM Period method overflow
|
|
- rp2: add per-byte timeout budget for I2C (#5189)
|
|
- feather-m0: export UART0 and pins
|
|
- usb/cdc: better ring buffer implementation (#5209)
|
|
- fix: replace ! with ~ for register mask
|
|
- atmega328p_simulator: add correct build tag for arduino_uno after renaming
|
|
* **net**
|
|
- update to Go 1.26.2 net package with UDP and JS improvements
|
|
* **runtime**
|
|
- implement fminimum/fmaximum
|
|
- make timeoffset atomic
|
|
- add MemStats.HeapObjects
|
|
- handle GODEBUG on wasip2 (#5312)
|
|
- fix Darwin syscall return value truncation and lost arguments
|
|
- add syscall.runtimeClearenv for Go 1.26
|
|
- split syscall functions for darwin changes for 1.26
|
|
- fix: init heap before random number seed on wasm platforms
|
|
* **targets**
|
|
- add esp32s3-supermini board target
|
|
- add support for Seeedstudio Xiao-RP2350 board
|
|
- add Shrike Lite board (#5170)
|
|
- rename arduino target to arduino-uno
|
|
- add pins/setup for Arduino UNO Q board QWIIC connector
|
|
- correct pin mapping for Arduino UNO Q STM32 MCU
|
|
- add stm32u585 openocd commands for flashing on Arduino UNO Q
|
|
- correct name/tag use for esp32s3-wroom1 board
|
|
- modify esp32, esp32s3, esp32c3, & esp8266 targets to use built-in esp32flash
|
|
- switch rp2040/rp2350 to default to tasks scheduler
|
|
- change default stack size for esp32c3 and esp32s3 to 8196
|
|
- swan: rename group build tag stm32l4x5 => stm32l4y5 to avoid clash with stm32 device name
|
|
- nucleo-f722ze: add build-tag stm32f722
|
|
- fix: set stm32u5x clock rate to default
|
|
- create generic targets for esp32 boards
|
|
* **libs**
|
|
- stm32-svd: update submodule
|
|
- update tools/gen-device-svd for recent changes to stm32-svd file structure (#5212)
|
|
* **build/test**
|
|
- build: use Golang 1.26 for all builds
|
|
- build: actually use the version of llvm we are supposed to be testing by using brew link command
|
|
- build: let scoop run updates to resolve binaryen install failures on Windows
|
|
- ci: don't double zip release artifacts
|
|
- test: increase default timeout from 1 to 2 minutes to prevent spurious CI fails
|
|
- testdata: fix flaky timers test by draining ticker channel after Stop
|
|
- testdata: more corpus entries (#5182)
|
|
- add soypat/lneto to corpus
|
|
- GNUmakefile: add context and expvar to stdlib tests
|
|
- GNUmakefile: add encoding/xml to stdlib tests on Linux
|
|
- main (test): skip mipsle test if the emulator is missing
|
|
- make: remove machine without board from smoketest
|
|
- stm32: add Arduino UNO Q to smoketests
|
|
- flake: bump to nixpkgs 25.11
|
|
- chore: update all github actions to latest versions
|
|
- fix: use external 7zip for scoop installs on Windows
|
|
|
|
0.40.1
|
|
---
|
|
* **machine**
|
|
- nrf: fix flash writes when SoftDevice is enabled
|
|
* **runtime**
|
|
- runtime: avoid fixed math/rand sequence on RP2040/RP2350 (#5124)
|
|
- runtime: add calls to initRand() during run() for all schedulers
|
|
- runtime: call initRand() before initHeap() during initialization
|
|
- runtime: use rand_hwrng hardwareRand for RP2040/RP2350 (#5135)
|
|
* **libs**
|
|
- picolibc: use updated location for git repo
|
|
|
|
0.40.0
|
|
---
|
|
* **general**
|
|
- all: add full LLVM 20 support
|
|
- core: feat: enable //go:linkname pragma for globals
|
|
- core: feature: Add flag to ignore go compatibility matrix (#5078)
|
|
- chore: update version for 0.40 development cycle
|
|
* **compiler**
|
|
- emit an error when the actual arch doesn't match GOARCH
|
|
- mark string parameters as readonly
|
|
- use Tarjan's SCC algorithm to detect loops for defer
|
|
- lower "large stack" limit to 16kb
|
|
* **core**
|
|
- shrink bdwgc library
|
|
- Fix linker errors for runtime.vgetrandom and crypto/internal/sysrand.fatal
|
|
- fix: add TryLock to sync.RWMutex
|
|
- fix: correct linter issues exposed by the fix in #4679
|
|
- fix: don't hardcode success return state
|
|
- fix: expand RTT debugger compatibility
|
|
- internal/task (threads): save stack bounds instead of scanning under a lock
|
|
- internal/task: create detached threads and fix error handling
|
|
- interp: better errors when debugging interp
|
|
- transform (gc): create stack slots in callers of external functions
|
|
- internal/task: prevent semaphore resource leak for threads scheduler
|
|
* **machine**
|
|
- cortexm: optimize code size for the HardFault_Handler
|
|
- fe310: add I2C pins for the HiFive1b
|
|
- clarify WriteAt semantics of BlockDevice
|
|
- fix deprecated AsmFull comment (#5005)
|
|
- make sure DMA buffers do not escape unnecessarily
|
|
- only enable USB-CDC when needed
|
|
- use larger SPI MAXCNT on nrf52833 and nrf52840
|
|
- fix: update m.queuedBytes when clamping output to avoid corrupting sentBytes
|
|
- fix: use int64 in ReadTemperature to avoid overflow
|
|
- fix(rp2): disable DBGPAUSE on startup
|
|
- fix(rp2): possible integer overflow while computing factors for SPI baudrate
|
|
- fix(rp2): reset spinlocks at startup
|
|
- fix(rp2): switch spinlock busy loop to wfe
|
|
- fix(rp2): use side-effect-free spinlocks
|
|
- nrf: add ADC_VDDH which is an ADC pin for VDDH
|
|
- nrf: don't block SPI transfer
|
|
- nrf: don't set PSELN, it's ignored in single ended mode anyway
|
|
- nrf: fix typo in ADC configuration
|
|
- nrf: refactor SoftDevice enabled check
|
|
- nrf: rename pwmPin to adcPin
|
|
- nrf: support flash operations while the SoftDevice is enabled
|
|
- rp2040: allow writing to the UART inside interrupts
|
|
- machine,nrf528: stop the bus only once on I2C bus error and ensures the first error is returned
|
|
* **net**
|
|
- update submodule to latest commits
|
|
* **runtime**
|
|
- (avr): fix infinite longjmp loop if stack is aligned to 256 bytes
|
|
- (gc_blocks.go): clear full size of allocation
|
|
- (gc_blocks.go): make sweep branchless
|
|
- (gc_blocks.go): simplify scanning logic
|
|
- (gc_blocks.go): use a linked stack to scan marked objects
|
|
- (gc_blocks.go): use best-fit allocation
|
|
- (gc_boehm.go): fix world already stopped check
|
|
- (wasm): scan the system stack
|
|
- fix sleep duration for long sleeps
|
|
- remove copied code for nrf52840
|
|
- src/syscall: update src buffer after write
|
|
- wasm: fix C realloc and optimize it a bit
|
|
* **targets**
|
|
- add xiao-esp32s3 board target
|
|
- Add ESP32-S3 support (#5091)
|
|
- Added Gopher ARCADE board
|
|
- Create "pico2-ice" target board (#5062)
|
|
* **build/test**
|
|
- Add testing.T.Context() and testing.B.Context()
|
|
- create separate go.mod file for testing dependencies for wasm tests that use Chromium headless browser to avoid use of older incompatible version.
|
|
- go back to normal scheduler instead of tasks scheduler for macos CI
|
|
- update CI to use Go 1.25.5
|
|
- update macOS GH actions builds to handle sunset of macOS 13
|
|
- use task scheduler on macOS builds to avoid test race condition lockups
|
|
- update all CI builds to use latest stable Go release. Also update some of the actions to their latest releases.
|
|
- update GH actions builds to use Go 1.25.4
|
|
- uninstall cmake before install
|
|
- fix: point the submodule for musl-lib to a mirror in the TinyGo GitHub org
|
|
- fix: remove macOS 15 from CI build matrix (conflicts with macOS 14 build)
|
|
- fix: separate host expected bytes from device intended bytes
|
|
- fix/typo: makeESPFirmwareImage
|
|
- make: GNUmakefile: shrink TinyGo binaries on Linux
|
|
- move the directory list into a variable
|
|
- several improvements to the macOS GH actions build
|
|
- Fix for #4678: top-level 'make lint' wasn't working
|
|
- fix: increase the timeout for chromedp to connect to the headless browser used for running the wasm tests.
|
|
- testdata: some more packages for the test corpus
|
|
|
|
0.39.0
|
|
---
|
|
* **general**
|
|
- all: add Go 1.25 support
|
|
- net: update to latest tinygo net package
|
|
- docs: clarify build verification step for macOS users
|
|
- Add flag to skip Renesas SVD builds
|
|
* **build**
|
|
- Makefile: install missing dlmalloc files
|
|
- flash: add -o flag support to save built binary (Fixes #4937) (#4942)
|
|
- fix: update version of clang to 17 to accommodate latest Go 1.25 docker base image
|
|
* **ci**
|
|
- chore: update all CI builds to test Go 1.25 release
|
|
- fix: disable test-newest since CircleCI seems unable to download due to rate-limits on Dockerhub
|
|
- ci: rename some jobs to avoid churn on every Go/LLVM version bump
|
|
- ci: make the goroutines test less racy
|
|
- tests: de-flake goroutines test
|
|
* **compiler**
|
|
- compiler: implement internal/abi.Escape
|
|
* **main**
|
|
- main: show the compiler error (if any) for `tinygo test -c`
|
|
- chore: correct GOOS=js name in error messages for WASM
|
|
* **machine**
|
|
- machine: add international keys
|
|
- machine: remove some unnecessary "// peripherals:" comments
|
|
- machine: add I2C pin comments
|
|
- machine: standardize I2C errors with "i2c:" prefix
|
|
- machine: make I2C usable in the simulator
|
|
- fix: add SPI and I2C to teensy 4.1 (#4943)
|
|
- `rp2`: use the correct channel mask for rp2350 ADC; hold lock during read (#4938)
|
|
- `rp2`: disable digital input for analog inputs
|
|
* **runtime**
|
|
- runtime: ensure time.Sleep(d) sleeps at least d
|
|
- runtime: stub out weak pointer support
|
|
- runtime: implement dummy AddCleanup
|
|
- runtime: enable multi-core scheduler for rp2350
|
|
- `internal/task`: use -stack-size flag when starting a new thread
|
|
- `internal/task`: add SA_RESTART flag to GC interrupts
|
|
- `internal/task`: a few small correctness fixes
|
|
- `internal/gclayout`: make gclayout values constants
|
|
- darwin: add threading support and use it by default
|
|
* **standard library**
|
|
- `sync`: implement sync.Swap
|
|
- `reflect`: implement Method.IsExported
|
|
* **testing**
|
|
- testing: stub out testing.B.Loop
|
|
* **targets**
|
|
- `stm32`: add support for the STM32L031G6U6
|
|
- add metro-rp2350 board definition (#4989)
|
|
- `rp2040/rp2350`: set the default stack size to 8k for rp2040/rp2350 based boards where this was not already the case
|
|
|
|
|
|
0.38.0
|
|
---
|
|
* **general**
|
|
- `go.*`: upgrade `golang.org/x/tools` to v0.30.0
|
|
- `all`: add support for LLVM 20
|
|
* **build**
|
|
- go back to using MinoruSekine/setup-scoop for Windows CI builds
|
|
- `flake.*`: upgrade to nixpkgs 25.05, LLVM 20
|
|
- `Makefile`: only detect ccache command when needed
|
|
- `Makefile`: create random filename inside rule
|
|
- `Makefile`: don't set GOROOT
|
|
- `Makefile`: call uname at most once
|
|
- `Makefile`: only read NodeJS version when it is needed
|
|
* **compiler**
|
|
- add support for `GODEBUG=gotypesalias=1`
|
|
- `interp`: fix `copy()` from/to external buffers
|
|
- add `-nobounds` (similar to `-gcflags=-B`)
|
|
- `compileopts`: add library version to cached library path
|
|
- `builder`: build wasi-libc inside TinyGo
|
|
- `builder`: simplify bdwgc libc dependency
|
|
- `builder`: don't use precompiled libraries
|
|
- `compileopts`: enable support for `GOARCH=wasm` in `tinygo test`
|
|
* **fixes**
|
|
- `rp2350`: Fix DMA to SPI transmits on RP2350 (#4903)
|
|
- `microbit v2`: use OpenOCD flash method on microbit v2 when using Nordic Semi SoftDevice
|
|
- `main`: display all of the current GC options for the `-gc` flag
|
|
- Remove duplicated error handling
|
|
- `sync`: fix `TestMutexConcurrent` test
|
|
- fix race condition in `testdata/goroutines.go`
|
|
- fix build warnings on Windows ARM
|
|
* **machine**
|
|
- `usb`: add USB mass storage class support
|
|
- implement usb receive message throttling
|
|
- declare usb endpoints per-platform
|
|
- `samd21`: implement watchdog
|
|
- `samd51`: write to flash memory in 512 byte long chunks
|
|
- `samd21`: write to flash memory in 64 byte long chunks
|
|
- don't inline RTT `WriteByte` everywhere
|
|
- `rp2`: unexport machine-specific errors
|
|
- `rp2`: discount scheduling delays in I2C timeouts (#4876)
|
|
- use pointer receiver in simulated PWM peripherals
|
|
- add simulated PWM/timer peripherals
|
|
- `rp2`: expose usb endpoint stall handling
|
|
- `arm`: clear pending interrupts before enabling them
|
|
- `rp2`: merge common usb code (#4856)
|
|
* **main**
|
|
- add "cores" and "threads" schedulers to help text
|
|
- add `StartPos` and `EndPos` to `-json` build output
|
|
- change `-json` flag to match upstream Go
|
|
* **runtime**
|
|
- don't lock the print output inside interrupts
|
|
- don't try to interrupt other cores before they are started
|
|
- implement `NumCPU` for the multicore scheduler
|
|
- add support for multicore scheduler
|
|
- refactor obtaining the system stack
|
|
- `interrupt`: add `Checkpoint` type
|
|
- add `exportedFuncPtr`
|
|
- avoid an allocation in `(*time.Timer).Reset`
|
|
- stub runtime signal functions for `os/signal` on wasip1
|
|
- move `timeUnit` to a single place
|
|
- implement `NumCPU` for `-scheduler=threads`
|
|
- move `mainExited` boolean
|
|
- `internal/task`: rename `tinygo_pause` to `tinygo_task_exit`
|
|
- map every goroutine to a new OS thread
|
|
- refactor `timerQueue`
|
|
- make conservative and precise GC MT-safe
|
|
- `internal/task`: implement atomic primitives for preemptive scheduling
|
|
- Use diskutil on macOS to extract volume name and path for FAT mounts #4928
|
|
* **standard library**
|
|
- `net`: update submodule to latest commits
|
|
- `runtime/debug`: add GC related stubs
|
|
- `metrics`: flesh out some of the metric types
|
|
- `reflect`: Chan related stubs
|
|
- `os`: handle relative and abs paths in `Executable()`
|
|
- `os`: add `os.Executable()` for Darwin
|
|
- `sync`: implement `RWMutex` using futexes
|
|
- `reflect`: Add `SliceOf`, `ArrayOf`, `StructOf`, `MapOf`, `FuncOf`
|
|
* **targets**
|
|
- `rp2040`: add multicore support
|
|
- `riscv32`: use `gdb` binary as a fallback
|
|
- add target for Microbit v2 with SoftDevice S140 support for both peripheral and central
|
|
- `windows`: use MSVCRT.DLL instead of UCRT on i386
|
|
- `windows`: add windows/386 support
|
|
- `arm64`: remove unnecessary `.section` directive
|
|
- `riscv-qemu`: actually sleep in `time.Sleep()`
|
|
- `riscv`: define CSR constants and use them where possible
|
|
- `darwin`: support Boehm GC (and use by default)
|
|
- `windows`: add support for the Boehm-Demers-Weiser GC
|
|
- `windows`: fix wrong register for first parameter
|
|
* **wasm**
|
|
- add Boehm GC support
|
|
- refactor/modify stub signal handling
|
|
- don't block `//go:wasmexport` because of running goroutines
|
|
- use `int64` instead of `float64` for the `timeUnit`
|
|
* **boards**
|
|
- Add board support for BigTreeTech SKR Pico (#4842)
|
|
|
|
|
|
0.37.0
|
|
---
|
|
* **general**
|
|
- add the Boehm-Demers-Weiser GC on Linux
|
|
* **ci**
|
|
- add more tests for wasm and baremetal
|
|
* **compiler**
|
|
- crypto/internal/sysrand is allowed to use unsafe signatures
|
|
* **examples**
|
|
- add goroutine benchmark to examples
|
|
* **fixes**
|
|
- ensure use of pointers for SPI interface on atsam21/atsam51 and other machines/boards that were missing implementation (#4798)
|
|
- replace loop counter with hw timer for USB SetAddressReq on rp2040 (#4796)
|
|
* **internal**
|
|
- update to go.bytecodealliance.org@v0.6.2 in GNUmakefile and internal/wasm-tools
|
|
- exclude certain files when copying package in internal/cm
|
|
- update to go.bytecodealliance.org/cm@v0.2.2 in internal/cm
|
|
- remove old reflect.go in internal/reflectlite
|
|
* **loader**
|
|
- use build tags for package iter and iter methods on reflect.Value in loader, iter, reflect
|
|
- add shim for go1.22 and earlier in loader, iter
|
|
* **machine**
|
|
- bump rp2040 to 200MHz (#4768)
|
|
- correct register address for Pin.SetInterrupt for rp2350 (#4782)
|
|
- don't block the rp2xxx UART interrupt handler
|
|
- fix RP2040 Pico board on the playground
|
|
- add flash support for rp2350 (#4803)
|
|
* **os**
|
|
- add stub Symlink for wasm
|
|
* **refactor**
|
|
- use *SPI everywhere to make consistent for implementations. Fixes #4663 "in reverse" by making SPI a pointer everywhere, as discussed in the comments.
|
|
* **reflect**
|
|
- add Value.SetIter{Key,Value} and MapIter.Reset in reflect, internal/reflectlite
|
|
- embed reflectlite types into reflect types in reflect, internal/reflectlite
|
|
- add Go 1.24 iter.Seq[2] methods
|
|
- copy reflect iter tests from upstream Go
|
|
- panic on Type.CanSeq[2] instead of returning false
|
|
- remove strconv.go
|
|
- remove unused go:linkname functions
|
|
* **riscv-qemu**
|
|
- add VirtIO RNG device
|
|
- increase stack size
|
|
* **runtime**
|
|
- only allocate heap memory when needed
|
|
- remove unused file func.go
|
|
- use package reflectlite
|
|
* **transform**
|
|
- cherry-pick from #4774
|
|
|
|
|
|
0.36.0
|
|
---
|
|
* **general**
|
|
- add initial Go 1.24 support
|
|
- add support for LLVM 19
|
|
- update license for 2025
|
|
- make small corrections for README regarding wasm
|
|
- use GOOS and GOARCH for building wasm simulated boards
|
|
- only infer target for wasm when GOOS and GOARCH are set correctly, not just based on file extension
|
|
- add test-corpus-wasip2
|
|
- use older image for cross-compiling builds
|
|
- update Linux builds to run on ubuntu-latest since 20.04 is being retired
|
|
- ensure build output directory is created
|
|
- add NoSandbox flag to chrome headless that is run during WASM tests, since this is now required for Ubuntu 23+ and we are using Ubuntu 24+ when running Github Actions
|
|
- update wasmtime used for CI to 29.0.1 to fix issue with install during CI tests
|
|
- update to use `Get-CimInstance` as `wmic` is being deprecated on WIndows
|
|
- remove unnecessary executable permissions
|
|
- `goenv`: update to new v0.36.0 development version
|
|
* **compiler**
|
|
- `builder`: fix parsing of external ld.lld error messages
|
|
- `cgo`: mangle identifier names
|
|
- `interp`: correctly mark functions as modifying memory
|
|
- add buildmode=wasi-legacy to support existing base of users who expected the older behavior for wasi modules to not return an exit code as if they were reactors
|
|
* **standard library**
|
|
- `crypto/tls`: add Dialer.DialContext() to fix websocket client
|
|
- `crypto/tls`: add VersionTLS constants and VersionName(version uint16) method that turns it into a string, copied from big go
|
|
- `internal/syscall/unix`: use our own version of this package
|
|
- `machine`: replace hard-coded cpu frequencies on rp2xxx
|
|
- `machine`: bump rp2350 CPUFrequency to 150 MHz
|
|
- `machine`: compute rp2 clock dividers from crystal and target frequency
|
|
- `machine`: remove bytes package dependency in flash code
|
|
- `machine/usb/descriptor`: avoid bytes package
|
|
- `net`: update to latest submodule with httptest subpackage and ResolveIPAddress implementation
|
|
- `os`: add File.Chdir support
|
|
- `os`: implement stub Chdir for non-OS systems
|
|
- `os/file`: add file.Chmod
|
|
- `reflect`: implement Value.Equal
|
|
- `runtime`: add FIPS helper functions
|
|
- `runtime`: manually initialize xorshift state
|
|
- `sync`: move Mutex to internal/task
|
|
- `syscall`: add wasip1 RandomGet
|
|
- `testing`: add Chdir
|
|
- `wasip2`: add stubs to get internal/syscall/unix to work
|
|
* **fixes**
|
|
- correctly handle calls for GetRNG() when being made from nrf devices with SoftDevice enabled
|
|
- fix stm32f103 ADC
|
|
- `wasm`: correctly handle id lookup for finalizeRef call
|
|
- `wasm`: avoid total failure on wasm finalizer call
|
|
- `wasm`: convert offset as signed int into unsigned int in syscall/js.stringVal in wasm_exec.js
|
|
* **targets**
|
|
- rp2350: add pll generalized solution; fix ADC handles; pwm period fix
|
|
- rp2350: extending support to include the rp2350b
|
|
- rp2350: cleanup: unexport internal USB and clock package variable, consts and types
|
|
- nrf: make ADC resolution changeable
|
|
- turn on GC for TKey1 device, since it does in fact work
|
|
- match Pico2 stack size to Pico
|
|
* **boards**
|
|
- add support for Pimoroni Pico Plus2
|
|
- add target for pico2-w board
|
|
- add comboat_fw tag for elecrow W5 boards with Combo-AT Wifi firmware
|
|
- add support for Elecrow Pico rp2350 W5 boards
|
|
- add support for Elecrow Pico rp2040 W5 boards
|
|
- add support for NRF51 HW-651
|
|
- add support for esp32c3-supermini
|
|
- add support for waveshare-rp2040-tiny
|
|
* **examples**
|
|
- add naive debouncing for pininterrupt example
|
|
|
|
|
|
0.35.0
|
|
---
|
|
* **general**
|
|
- update cmsis-svd library
|
|
- use default UART settings in the echo example
|
|
- `goenv`: also show git hash with custom build of TinyGo
|
|
- `goenv`: support parsing development versions of Go
|
|
- `main`: parse extldflags early so we can report the error message
|
|
* **compiler**
|
|
- `builder`: whitelist temporary directory env var for Clang invocation to fix Windows bug
|
|
- `builder`: fix cache paths in `-size=full` output
|
|
- `builder`: work around incorrectly escaped DWARF paths on Windows (Clang bug)
|
|
- `builder`: fix wasi-libc path names on Windows with `-size=full`
|
|
- `builder`: write HTML size report
|
|
- `cgo`: support C identifiers only referred to from within macros
|
|
- `cgo`: support function-like macros
|
|
- `cgo`: support errno value as second return parameter
|
|
- `cgo`: add support for `#cgo noescape` lines
|
|
- `compiler`: fix bug in interrupt lowering
|
|
- `compiler`: allow panic directly in `defer`
|
|
- `compiler`: fix wasmimport -> wasmexport in error message
|
|
- `compiler`: support `//go:noescape` pragma
|
|
- `compiler`: report error instead of crashing when instantiating a generic function without body
|
|
- `interp`: align created globals
|
|
* **standard library**
|
|
- `machine`: modify i2s interface/implementation to better match specification
|
|
- `os`: implement `StartProcess`
|
|
- `reflect`: add `Value.Clear`
|
|
- `reflect`: add interface support to `NumMethods`
|
|
- `reflect`: fix `AssignableTo` for named + non-named types
|
|
- `reflect`: implement `CanConvert`
|
|
- `reflect`: handle more cases in `Convert`
|
|
- `reflect`: fix Copy of non-pointer array with size > 64bits
|
|
- `runtime`: don't call sleepTicks with a negative duration
|
|
- `runtime`: optimize GC scanning (findHead)
|
|
- `runtime`: move constants into shared package
|
|
- `runtime`: add `runtime.fcntl` function for internal/syscall/unix
|
|
- `runtime`: heapptr only needs to be initialized once
|
|
- `runtime`: refactor scheduler (this fixes a few bugs with `-scheduler=none`)
|
|
- `runtime`: rewrite channel implementation to be smaller and more flexible
|
|
- `runtime`: use `SA_RESTART` when registering a signal for os/signal
|
|
- `runtime`: implement race-free signals using futexes
|
|
- `runtime`: run deferred functions in `Goexit`
|
|
- `runtime`: remove `Cond` which seems to be unused
|
|
- `runtime`: properly handle unix read on directory
|
|
- `runtime/trace`: stub all public methods
|
|
- `sync`: don't use volatile in `Mutex`
|
|
- `sync`: implement `WaitGroup` using a (pseudo)futex
|
|
- `sync`: make `Cond` parallelism-safe
|
|
- `syscall`: use wasi-libc tables for wasm/js target
|
|
* **targets**
|
|
- `mips`: fix a bug when scanning the stack
|
|
- `nintendoswitch`: get this target to compile again
|
|
- `rp2350`: add support for the new RP2350
|
|
- `rp2040/rp2350` : make I2C implementation shared for rp2040/rp2350
|
|
- `rp2040/rp2350` : make SPI implementation shared for rp2040/rp2350
|
|
- `rp2040/rp2350` : make RNG implementation shared for rp2040/rp2350
|
|
- `wasm`: revise and simplify wasmtime argument handling
|
|
- `wasm`: support `//go:wasmexport` functions after a call to `time.Sleep`
|
|
- `wasm`: correctly return from run() in wasm_exec.js
|
|
- `wasm`: call process.exit() when go.run() returns
|
|
- `windows`: don't return, exit via exit(0) instead to flush stdout buffer
|
|
* **boards**
|
|
- add support for the Tillitis TKey
|
|
- add support for the Raspberry Pi Pico2 (based on the RP2040)
|
|
- add support for Pimoroni Tiny2350
|
|
|
|
|
|
0.34.0
|
|
---
|
|
* **general**
|
|
- fix `GOOS=wasip1` for `tinygo test`
|
|
- add `-C DIR` flag
|
|
- add initial documentation for project governance
|
|
- add `-ldflags='-extldflags=...'` support
|
|
- improve usage message with `tinygo help` and when passing invalid parameters
|
|
* **compiler**
|
|
- `builder`: remove environment variables when invoking Clang, to avoid the environment changing the behavior
|
|
- `builder`: check for the Go toolchain version used to compile TinyGo
|
|
- `cgo`: add `C.CBytes` implementation
|
|
- `compiler`: fix passing weirdly-padded structs as parameters to new goroutines
|
|
- `compiler`: support pragmas on generic functions
|
|
- `compiler`: do not let the slice buffer escape when casting a `[]byte` or `[]rune` to a string, to help escape analysis
|
|
- `compiler`: conform to the latest iteration of the wasm types proposal
|
|
- `loader`: don't panic when main package is not named 'main'
|
|
- `loader`: make sure we always return type checker errors even without type errors
|
|
- `transform`: optimize range over `[]byte(string)`
|
|
* **standard library**
|
|
- `crypto/x509`: add package stub to build crypto/x509 on macOS
|
|
- `machine/usb/adc/midi`: fix `PitchBend`
|
|
- `os`: add `Truncate` stub for baremetal
|
|
- `os`: add stubs for `os.File` deadlines
|
|
- `os`: add internal `net.newUnixFile` for the net package
|
|
- `runtime`: stub runtime_{Before,After}Exec for linkage
|
|
- `runtime`: randomize map accesses
|
|
- `runtime`: support `maps.Clone`
|
|
- `runtime`: add more fields to `MemStats`
|
|
- `runtime`: implement newcoro, coroswitch to support package iter
|
|
- `runtime`: disallow defer in interrupts
|
|
- `runtime`: add support for os/signal on Linux and MacOS
|
|
- `runtime`: add gc layout info for some basic types to help the precise GC
|
|
- `runtime`: bump GC mark stack size to avoid excessive heap rescans
|
|
* **targets**
|
|
- `darwin`: use Go standard library syscall package instead of a custom one
|
|
- `fe310`: support GPIO `PinInput`
|
|
- `mips`: fix compiler crash with GOMIPS=softfloat and defer
|
|
- `mips`: add big-endian (GOARCH=mips) support
|
|
- `mips`: use MIPS32 (instead of MIPS32R2) as the instruction set for wider compatibility
|
|
- `wasi`: add relative and absolute --dir options to wasmtime args
|
|
- `wasip2`: add wasmtime -S args to support network interfaces
|
|
- `wasm`: add `//go:wasmexport` support (for all WebAssembly targets)
|
|
- `wasm`: use precise instead of conservative GC for WebAssembly (including WASI)
|
|
- `wasm-unknown`: add bulk memory flags since basically every runtime has it now
|
|
* **boards**
|
|
- add RAKwireless RAK4631
|
|
- add WaveShare ESP-C3-32S-Kit
|
|
|
|
|
|
0.33.0
|
|
---
|
|
|
|
* **general**
|
|
- use latest version of x/tools
|
|
- add chromeos 9p support for flashing
|
|
- sort compiler error messages by source position in a package
|
|
- don't include prebuilt libraries in the release to simplify packaging and reduce the release tarball size
|
|
- show runtime panic addresses for `tinygo run`
|
|
- support Go 1.23 (including all new language features)
|
|
- `test`: support GOOS/GOARCH pairs in the `-target` flag
|
|
- `test`: remove message after test binary built
|
|
* **compiler**
|
|
- remove unused registers for x86_64 linux syscalls
|
|
- remove old atomics workaround for AVR (not necessary in modern LLVM versions)
|
|
- support `golang.org/x/sys/unix` syscalls
|
|
- `builder`: remove workaround for generics race condition
|
|
- `builder`: add package ID to compiler and optimization error messages
|
|
- `builder`: show better error messages for some common linker errors
|
|
- `cgo`: support preprocessor macros passed on the command line
|
|
- `cgo`: use absolute paths for error messages
|
|
- `cgo`: add support for printf
|
|
- `loader`: handle `go list` errors inside TinyGo (for better error messages)
|
|
- `transform`: fix incorrect alignment of heap-to-stack transform
|
|
- `transform`: use thinlto-pre-link passes (instead of the full pipeline) to speed up compilation speed slightly
|
|
* **standard library**
|
|
- `crypto/tls`: add CipherSuiteName and some extra fields to ConnectionSTate
|
|
- `internal/abi`: implement initial version of this package
|
|
- `machine`: use new `internal/binary` package
|
|
- `machine`: rewrite Reply() to fix sending long replies in I2C Target Mode
|
|
- `machine/usb/descriptor`: Reset joystick physical
|
|
- `machine/usb/descriptor`: Drop second joystick hat
|
|
- `machine/usb/descriptor`: Add more HID... functions
|
|
- `machine/usb/descriptor`: Fix encoding of values
|
|
- `machine/usb/hid/joystick`: Allow more hat switches
|
|
- `os`: add `Chown`, `Truncate`
|
|
- `os/user`: use stdlib version of this package
|
|
- `reflect`: return correct name for the `unsafe.Pointer` type
|
|
- `reflect`: implement `Type.Overflow*` functions
|
|
- `runtime`: implement dummy `getAuxv` to satisfy golang.org/x/sys/
|
|
- `runtime`: don't zero out new allocations for `-gc=leaking` when they are already zeroed
|
|
- `runtime`: simplify slice growing/appending code
|
|
- `runtime`: print a message when a fatal signal like SIGSEGV happens
|
|
- `runtime/debug`: add `GoVersion` to `debug.BuildInfo`
|
|
- `sync`: add `Map.Clear()`
|
|
- `sync/atomic`: add And* and Or* compiler intrinsics needed for Go 1.23
|
|
- `syscall`: add `Fork` and `Execve`
|
|
- `syscall`: add all MacOS errno values
|
|
- `testing`: stub out `T.Deadline`
|
|
- `unique`: implement custom (naive) version of the unique package
|
|
* **targets**
|
|
- `arm`: support `GOARM=*,softfloat` (softfloat support for ARM v5, v6, and v7)
|
|
- `mips`: add linux/mipsle (and experimental linux/mips) support
|
|
- `mips`: add `GOMIPS=softfloat` support
|
|
- `wasip2`: add WASI preview 2 support
|
|
- `wasm/js`: add `node:` prefix in `require()` call of wasm_exec.js
|
|
- `wasm-unknown`: make sure the `os` package can be imported
|
|
- `wasm-unknown`: remove import-memory flag
|
|
|
|
|
|
0.32.0
|
|
---
|
|
|
|
* **general**
|
|
- fix wasi-libc include headers on Nix
|
|
- apply OpenOCD commands after target configuration
|
|
- fix a minor race condition when determining the build tags
|
|
- support UF2 drives with a space in their name on Linux
|
|
- add LLVM 18 support
|
|
- drop support for Go 1.18 to be able to stay up to date
|
|
|
|
* **compiler**
|
|
- move `-panic=trap` support to the compiler/runtime
|
|
- fix symbol table index for WebAssembly archives
|
|
- fix ed25519 build errors by adjusting the alias names
|
|
- add aliases to generic AES functions
|
|
- fix race condition by temporarily applying a proposed patch
|
|
- `builder`: keep un-wasm-opt'd .wasm if -work was passed
|
|
- `builder`: make sure wasm-opt command line is printed if asked
|
|
- `cgo`: implement shift operations in preprocessor macros
|
|
- `interp`: checking for methodset existence
|
|
|
|
* **standard library**
|
|
- `machine`: add `__tinygo_spi_tx` function to simulator
|
|
- `machine`: fix simulator I2C support
|
|
- `machine`: add GetRNG support to simulator
|
|
- `machine`: add `TxFifoFreeLevel` for CAN
|
|
- `os`: add `Link`
|
|
- `os`: add `FindProcess` for posix
|
|
- `os`: add `Process.Release` for unix
|
|
- `os`: add `SetReadDeadline` stub
|
|
- `os`, `os/signal`: add signal stubs
|
|
- `os/user`: add stubs for `Lookup{,Group}` and `Group`
|
|
- `reflect`: use int in `StringHeader` and `SliceHeader` on non-AVR platforms
|
|
- `reflect`: fix `NumMethods` for Interface type
|
|
- `runtime`: skip negative sleep durations in sleepTicks
|
|
|
|
* **targets**
|
|
- `esp32`: add I2C support
|
|
- `rp2040`: move UART0 and UART1 to common file
|
|
- `rp2040`: make all RP2040 boards available for simulation
|
|
- `rp2040`: fix timeUnit type
|
|
- `stm32`: add i2c `Frequency` and `SetBaudRate` function for chips that were missing implementation
|
|
- `wasm-unknown`: add math and memory builtins that LLVM needs
|
|
- `wasip1`: replace existing `-target=wasi` support with wasip1 as supported in Go 1.21+
|
|
|
|
* **boards**
|
|
- `adafruit-esp32-feather-v2`: add the Adafruit ESP32 Feather V2
|
|
- `badger2040-w`: add support for the Badger2040 W
|
|
- `feather-nrf52840-sense`: fix lack of LXFO
|
|
- `m5paper`: add support for the M5 Paper
|
|
- `mksnanov3`: limit programming speed to 1800 kHz
|
|
- `nucleol476rg`: add stm32 nucleol476rg support
|
|
- `pico-w`: add the Pico W (which is near-idential to the pico target)
|
|
- `thingplus-rp2040`, `waveshare-rp2040-zero`: add WS2812 definition
|
|
- `pca10059-s140v7`: add this variant to the PCA10059 board
|
|
|
|
|
|
0.31.2
|
|
---
|
|
|
|
* **general**
|
|
* update the `net` submodule to updated version with `Buffers` implementation
|
|
|
|
* **compiler**
|
|
* `syscall`: add wasm_unknown tag to some additional files so it can compile more code
|
|
|
|
* **standard library**
|
|
* `runtime`: add Frame.Entry field
|
|
|
|
|
|
0.31.1
|
|
---
|
|
|
|
* **general**
|
|
* fix Binaryen build in make task
|
|
* update final build stage of Docker `dev` image to go1.22
|
|
* only use GHA cache for building Docker `dev` image
|
|
* update the `net` submodule to latest version
|
|
|
|
* **compiler**
|
|
* `interp`: make getelementptr offsets signed
|
|
* `interp`: return a proper error message when indexing out of range
|
|
|
|
|
|
0.31.0
|
|
---
|
|
|
|
* **general**
|
|
* remove LLVM 14 support
|
|
* add LLVM 17 support, and use it by default
|
|
* add Nix flake support
|
|
* update bundled Binaryen to version 116
|
|
* add `ports` subcommand that lists available serial ports for `-port` and `-monitor`
|
|
* support wasmtime version 14
|
|
* add `-serial=rtt` for serial output over SWD
|
|
* add Go 1.22 support and use it by default
|
|
* change minimum Node.js version from 16 to 18
|
|
* **compiler**
|
|
* use the new LLVM pass manager
|
|
* allow systems with more stack space to allocate larger values on the stack
|
|
* `build`: fix a crash due to sharing GlobalValues between build instances
|
|
* `cgo`: add `C._Bool` type
|
|
* `cgo`: fix calling CGo callback inside generic function
|
|
* `compileopts`: set `purego` build tag by default so that more packages can be built
|
|
* `compileopts`: force-enable CGo to avoid build issues
|
|
* `compiler`: fix crash on type assert on interfaces with no methods
|
|
* `interp`: print LLVM instruction in traceback
|
|
* `interp`: support runtime times by running them at runtime
|
|
* `loader`: enforce Go language version in the type checker (this may break existing programs with an incorrect Go version in go.mod)
|
|
* `transform`: fix bug in StringToBytes optimization pass
|
|
* **standard library**
|
|
* `crypto/tls`: stub out a lot of functions
|
|
* `internal/task`, `machine`: make TinyGo code usable with "big Go" CGo
|
|
* `machine`: implement `I2C.SetBaudRate` consistently across chips
|
|
* `machine`: implement `SPI.Configure` consistently across chips
|
|
* `machine`: add `DeviceID` for nrf, rp2040, sam, stm32
|
|
* `machine`: use smaller UART buffer size on atmega chips
|
|
* `machine/usb`: allow setting a serial number using a linker flag
|
|
* `math`: support more math functions on baremetal (picolibc) systems
|
|
* `net`: replace entire net package with a new one based on the netdev driver
|
|
* `os/user`: add bare-bones implementation of this package
|
|
* `reflect`: stub `CallSlice` and `FuncOf`
|
|
* `reflect`: add `TypeFor[T]`
|
|
* `reflect`: update `IsZero` to Go 1.22 semantics
|
|
* `reflect`: move indirect values into interface when setting interfaces
|
|
* `runtime`: stub `Breakpoint`
|
|
* `sync`: implement trylock
|
|
* **targets**
|
|
* `atmega`: use UART double speed mode for fewer errors and higher throughput
|
|
* `atmega328pb`: refactor to enable extra uart
|
|
* `avr`: don't compile large parts of picolibc (math, stdio) for LLVM 17 support
|
|
* `esp32`: switch over to the official SVD file
|
|
* `esp32c3`: implement USB_SERIAL for USBCDC communication
|
|
* `esp32c3`: implement I2C
|
|
* `esp32c3`: implement RNG
|
|
* `esp32c3`: add more ROM functions and update linker script for the in-progress wifi support
|
|
* `esp32c3`: update to newer SVD files
|
|
* `rp2040`: add support for UART hardware flow control
|
|
* `rp2040`: add definition for `machine.PinToggle`
|
|
* `rp2040`: set XOSC startup delay multiplier
|
|
* `samd21`: add support for UART hardware flow control
|
|
* `samd51`: add support for UART hardware flow control
|
|
* `wasm`: increase default stack size to 64k for wasi/wasm targets
|
|
* `wasm`: bump wasi-libc version to SDK 20
|
|
* `wasm`: remove line of dead code in wasm_exec.js
|
|
* **new targets/boards**
|
|
* `qtpy-esp32c3`: add Adafruit QT Py ESP32-C3 board
|
|
* `mksnanov3`: add support for the MKS Robin Nano V3.x
|
|
* `nrf52840-generic`: add generic nrf52840 chip support
|
|
* `thumby`: add support for Thumby
|
|
* `wasm`: add new `wasm-unknown` target that doesn't depend on WASI or a browser
|
|
* **boards**
|
|
* `arduino-mkrwifi1010`, `arduino-nano33`, `nano-rp2040`, `matrixportal-m4`, `metro-m4-airlift`, `pybadge`, `pyportal`: add `ninafw` build tag and some constants for BLE support
|
|
* `gopher-badge`: fix typo in USB product name
|
|
* `nano-rp2040`: add UART1 and correct mappings for NINA via UART
|
|
* `pico`: bump default stack size from 2kB to 8kB
|
|
* `wioterminal`: expose UART4
|
|
|
|
|
|
0.30.0
|
|
---
|
|
|
|
* **general**
|
|
- add LLVM 16 support, use it by default
|
|
* **compiler**
|
|
- `build`: work around a race condition by building Go SSA serially
|
|
- `compiler`: fix a crash by not using the LLVM global context types
|
|
- `interp`: don't copy unknown values in `runtime.sliceCopy` to fix miscompile
|
|
- `interp`: fix crash in error report by not returning raw LLVM values
|
|
* **standard library**
|
|
- `machine/usb/adc/midi`: various improvements and API changes
|
|
- `reflect`: add support for `[...]T` → `[]T` in reflect
|
|
* **targets**
|
|
- `atsamd21`, `atsamd51`: add support for USB INTERRUPT OUT
|
|
- `rp2040`: always use the USB device enumeration fix, even in chips that supposedly have the HW fix
|
|
- `wasm`: increase default stack size to 32k for wasi/wasm
|
|
* **boards**
|
|
- `gobadge`: add GoBadge target as alias for PyBadge :)
|
|
- `gemma-m0`: add support for the Adafruit Gemma M0
|
|
|
|
|
|
0.29.0
|
|
---
|
|
|
|
* **general**
|
|
- Go 1.21 support
|
|
- use https for renesas submodule #3856
|
|
- ci: rename release-double-zipped to something more useful
|
|
- ci: update Node.js from version 14 to version 16
|
|
- ci: switch GH actions builds to use Go 1.21 final release
|
|
- docker: update clang to version 15
|
|
- docker: use Go 1.21 for Docker dev container build
|
|
- `main`: add target JSON file in `tinygo info` output
|
|
- `main`: improve detection of filesystems
|
|
- `main`: use `go env` instead of doing all detection manually
|
|
- make: add make task to generate Renesas device wrappers
|
|
- make: add task to check NodeJS version before running tests
|
|
- add submodule for Renesas SVD file mirror repo
|
|
- update to go-serial package v1.6.0
|
|
- `testing`: add Testing function
|
|
- `tools/gen-device-svd`: small changes needed for Renesas MCUs
|
|
* **compiler**
|
|
- `builder`: update message for max supported Go version
|
|
- `compiler,reflect`: NumMethods reports exported methods only
|
|
- `compiler`: add compiler-rt and wasm symbols to table
|
|
- `compiler`: add compiler-rt to wasm.json
|
|
- `compiler`: add min and max builtin support
|
|
- `compiler`: implement clear builtin for maps
|
|
- `compiler`: implement clear builtin for slices
|
|
- `compiler`: improve panic message when a runtime call is unavailable
|
|
- `compiler`: update .ll test output
|
|
- `loader`: merge go.env file which is now required starting in Go 1.21 to correctly get required packages
|
|
* **standard library**
|
|
- `os`: define ErrNoDeadline
|
|
- `reflect`: Add FieldByNameFunc
|
|
- `reflect`: add SetZero
|
|
- `reflect`: fix iterating over maps with interface{} keys
|
|
- `reflect`: implement Value.Grow
|
|
- `reflect`: remove unnecessary heap allocations
|
|
- `reflect`: use .key() instead of a type assert
|
|
- `sync`: add implementation from upstream Go for OnceFunc, OnceValue, and OnceValues
|
|
* **targets**
|
|
- `machine`: UART refactor (#3832)
|
|
- `machine/avr`: pin change interrupt
|
|
- `machine/macropad_rp2040`: add machine.BUTTON
|
|
- `machine/nrf`: add I2C timeout
|
|
- `machine/nrf`: wait for stop condition after reading from the I2C bus
|
|
- `machine/nRF52`: set SPI TX/RX lengths even data is empty. Fixes #3868 (#3877)
|
|
- `machine/rp2040`: add missing suffix to CMD_READ_STATUS
|
|
- `machine/rp2040`: add NoPin support
|
|
- `machine/rp2040`: move flash related functions into separate file from C imports for correct - LSP. Fixes #3852
|
|
- `machine/rp2040`: wait for 1000 us after flash reset to avoid issues with busy USB bus
|
|
- `machine/samd51,rp2040,nrf528xx,stm32`: implement watchdog
|
|
- `machine/samd51`: fix i2cTimeout was decreasing due to cache activation
|
|
- `machine/usb`: Add support for HID Keyboard LEDs
|
|
- `machine/usb`: allow USB Endpoint settings to be changed externally
|
|
- `machine/usb`: refactor endpoint configuration
|
|
- `machine/usb`: remove usbDescriptorConfig
|
|
- `machine/usb/hid,joystick`: fix hidreport (3) (#3802)
|
|
- `machine/usb/hid`: add RxHandler interface
|
|
- `machine/usb/hid`: rename Handler() to TxHandler()
|
|
- `wasi`: allow zero inodes when reading directories
|
|
- `wasm`: add support for GOOS=wasip1
|
|
- `wasm`: fix functions exported through //export
|
|
- `wasm`: remove i64 workaround, use BigInt instead
|
|
- `example`: adjust time offset
|
|
- `example`: simplify pininterrupt
|
|
* **boards**
|
|
- `targets`: add AKIZUKI DENSHI AE-RP2040
|
|
- `targets`: adding new uf2 target for PCA10056 (#3765)
|
|
|
|
|
|
0.28.0
|
|
---
|
|
|
|
* **general**
|
|
- fix parallelism in the compiler on Windows by building LLVM with thread support
|
|
- support qemu-user debugging
|
|
- make target JSON msd-volume-name an array
|
|
- print source location when a panic happens in -monitor
|
|
- `test`: don't print `ok` for a successful compile-only
|
|
* **compiler**
|
|
- `builder`: remove non-ThinLTO build mode
|
|
- `builder`: fail earlier if Go is not available
|
|
- `builder`: improve `-size=full` in a number of ways
|
|
- `builder`: implement Nordic DFU file writer in Go
|
|
- `cgo`: allow `LDFLAGS: --export=...`
|
|
- `compiler`: support recursive slice types
|
|
- `compiler`: zero struct padding during map operations
|
|
- `compiler`: add llvm.ident metadata
|
|
- `compiler`: remove `unsafe.Pointer(uintptr(v) + idx)` optimization (use `unsafe.Add` instead)
|
|
- `compiler`: add debug info to `//go:embed` data structures for better `-size` output
|
|
- `compiler`: add debug info to string constants
|
|
- `compiler`: fix a minor race condition
|
|
- `compiler`: emit correct alignment in debug info for global variables
|
|
- `compiler`: correctly generate reflect data for local named types
|
|
- `compiler`: add alloc attributes to `runtime.alloc`, reducing flash usage slightly
|
|
- `compiler`: for interface maps, use the original named type if available
|
|
- `compiler`: implement most math/bits functions as LLVM intrinsics
|
|
- `compiler`: ensure all defers have been seen before creating rundefers
|
|
* **standard library**
|
|
- `internal/task`: disallow blocking inside an interrupt
|
|
- `machine`: add `CPUReset`
|
|
- `machine/usb/hid`: add MediaKey support
|
|
- `machine/usb/hid/joystick`: move joystick under HID
|
|
- `machine/usb/hid/joystick`: allow joystick settings override
|
|
- `machine/usb/hid/joystick`: handle case where we cannot find the correct HID descriptor
|
|
- `machine/usb/hid/mouse`: add support for mouse back and forward
|
|
- `machine/usb`: add ability to override default VID, PID, manufacturer name, and product name
|
|
- `net`: added missing `TCPAddr` and `UDPAddr` implementations
|
|
- `os`: add IsTimeout function
|
|
- `os`: fix resource leak in `(*File).Close`
|
|
- `os`: add `(*File).Sync`
|
|
- `os`: implement `(*File).ReadDir` for wasi
|
|
- `os`: implement `(*File).WriteAt`
|
|
- `reflect`: make sure null bytes are supported in tags
|
|
- `reflect`: refactor this package to enable many new features
|
|
- `reflect`: add map type methods: `Elem` and `Key`
|
|
- `reflect`: add map methods: `MapIndex`, `MapRange`/`MapIter`, `SetMapIndex`, `MakeMap`, `MapKeys`
|
|
- `reflect`: add slice methods: `Append`, `MakeSlice`, `Slice`, `Slice3`, `Copy`, `Bytes`, `SetLen`
|
|
- `reflect`: add misc methods: `Zero`, `Addr`, `UnsafeAddr`, `OverflowFloat`, `OverflowInt`, `OverflowUint`, `SetBytes`, `Convert`, `CanInt`, `CanFloat`, `CanComplex`, `Comparable`
|
|
- `reflect`: add type methods: `String`, `PkgPath`, `FieldByName`, `FieldByIndex`, `NumMethod`
|
|
- `reflect`: add stubs for `Type.Method`, `CanConvert`, `ArrayOf`, `StructOf`, `MapOf`
|
|
- `reflect`: add stubs for channel select routines/types
|
|
- `reflect`: allow nil rawType to call Kind()
|
|
- `reflect`: ensure all ValueError panics have Kind fields
|
|
- `reflect`: add support for named types
|
|
- `reflect`: improve `Value.String()`
|
|
- `reflect`: set `Index` and `PkgPath` field in `Type.Field`
|
|
- `reflect`: `Type.AssignableTo`: you can assign anything to `interface{}`
|
|
- `reflect`: add type check to `Value.Field`
|
|
- `reflect`: let `TypeOf(nil)` return nil
|
|
- `reflect`: move `StructField.Anonymous` field to match upstream location
|
|
- `reflect`: add `UnsafePointer` for Func types
|
|
- `reflect`: `MapIter.Next` needs to allocate new keys/values every time
|
|
- `reflect`: fix `IsNil` for interfaces
|
|
- `reflect`: fix `Type.Name` to return an empty string for non-named types
|
|
- `reflect`: add `VisibleFields`
|
|
- `reflect`: properly handle embedded structs
|
|
- `reflect`: make sure `PointerTo` works for named types
|
|
- `reflect`: `Set`: convert non-interface to interface
|
|
- `reflect`: `Set`: fix direction of assignment check
|
|
- `reflect`: support channel directions
|
|
- `reflect`: print struct tags in Type.String()
|
|
- `reflect`: properly handle read-only values
|
|
- `runtime`: allow custom-gc SetFinalizer and clarify KeepAlive
|
|
- `runtime`: implement KeepAlive using inline assembly
|
|
- `runtime`: check for heap allocations inside interrupts
|
|
- `runtime`: properly turn pointer into empty interface when hashing
|
|
- `runtime`: improve map size hint usage
|
|
- `runtime`: zero map key/value on deletion to so GC doesn't see them
|
|
- `runtime`: print the address where a panic happened
|
|
- `runtime/debug`: stub `SetGCPercent`, `BuildInfo.Settings`
|
|
- `runtime/metrics`: add this package as a stub
|
|
- `syscall`: `Stat_t` timespec fields are Atimespec on darwin
|
|
- `syscall`: add `Timespec.Unix()` for wasi
|
|
- `syscall`: add fsync using libc
|
|
- `testing`: support -test.count
|
|
- `testing`: make test output unbuffered when verbose
|
|
- `testing`: add -test.skip
|
|
- `testing`: move runtime.GC() call to runN to match upstream
|
|
- `testing`: add -test.shuffle to order randomize test and benchmark order
|
|
* **targets**
|
|
- `arm64`: fix register save/restore to include vector registers
|
|
- `attiny1616`: add support for this chip
|
|
- `cortexm`: refactor EnableInterrupts and DisableInterrupts to avoid `arm.AsmFull`
|
|
- `cortexm`: enable functions in RAM for go & cgo
|
|
- `cortexm`: convert SystemStack from `AsmFull` to C inline assembly
|
|
- `cortexm`: fix crash due to wrong stack size offset
|
|
- `nrf`: samd21, stm32: add flash API
|
|
- `nrf`: fix memory issue in ADC read
|
|
- `nrf`: new peripheral type for nrf528xx chips
|
|
- `nrf`: implement target mode
|
|
- `nrf`: improve ADC and add oversampling, longer sample time, and reference voltage
|
|
- `rp2040`: change calling order for device enumeration fix to do first
|
|
- `rp2040`: rtc delayed interrupt
|
|
- `rp2040`: provide better errors for invalid pins on I2C and SPI
|
|
- `rp2040`: change uart to allow for a single pin
|
|
- `rp2040`: implement Flash interface
|
|
- `rp2040`: remove SPI `DataBits` property
|
|
- `rp2040`: unify all linker scripts using LDFLAGS
|
|
- `rp2040`: remove SPI deadline for improved performance
|
|
- `rp2040`: use 4MHz as default frequency for SPI
|
|
- `rp2040`: implement target mode
|
|
- `rp2040`: use DMA for send-only SPI transfers
|
|
- `samd21`: rearrange switch case for get pin cfg
|
|
- `samd21`: fix issue with WS2812 driver by making pin accesses faster
|
|
- `samd51`: enable CMCC cache for greatly improved performance
|
|
- `samd51`: remove extra BK0RDY clear
|
|
- `samd51`: implement Flash interface
|
|
- `samd51`: use correct SPI frequency
|
|
- `samd51`: remove extra BK0RDY clear
|
|
- `samd51`: fix ADC multisampling
|
|
- `wasi`: allow users to set the `runtime_memhash_tsip` or `runtime_memhash_fnv` build tags
|
|
- `wasi`: set `WASMTIME_BACKTRACE_DETAILS` when running in wasmtime.
|
|
- `wasm`: implement the `//go:wasmimport` directive
|
|
* **boards**
|
|
- `gameboy-advance`: switch to use register definitions in device/gba
|
|
- `gameboy-advance`: rename display and make pointer receivers
|
|
- `gopher-badge`: Added Gopher Badge support
|
|
- `lorae5`: add needed definition for UART2
|
|
- `lorae5`: correct mapping for I2C bus, add pin mapping to enable power
|
|
- `pinetime`: update the target file (rename from pinetime-devkit0)
|
|
- `qtpy`: fix bad pin assignment
|
|
- `wioterminal`: fix pin definition of BCM13
|
|
- `xiao`: Pins D4 & D5 are I2C1. Use pins D2 & D3 for I2C0.
|
|
- `xiao`: add DefaultUART
|
|
|
|
|
|
0.27.0
|
|
---
|
|
|
|
* **general**
|
|
- all: update musl
|
|
- all: remove "acm:"` prefix for USB vid/pid pair
|
|
- all: add support for LLVM 15
|
|
- all: use DWARF version 4
|
|
- all: add initial (incomplete) support for Go 1.20
|
|
- all: add `-gc=custom` option
|
|
- `main`: print ldflags including ThinLTO flags with -x
|
|
- `main`: fix error message when a serial port can't be accessed
|
|
- `main`: add `-timeout` flag to allow setting how long TinyGo will try looking for a MSD volume for flashing
|
|
- `test`: print PASS on pass when running standalone test binaries
|
|
- `test`: fix printing of benchmark output
|
|
- `test`: print package name when compilation failed (not just when the test failed)
|
|
* **compiler**
|
|
- refactor to support LLVM 15
|
|
- `builder`: print compiler commands while building a library
|
|
- `compiler`: fix stack overflow when creating recursive pointer types (fix for LLVM 15+ only)
|
|
- `compiler`: allow map keys and values of ≥256 bytes
|
|
- `cgo`: add support for `C.float` and `C.double`
|
|
- `cgo`: support anonymous enums included in multiple Go files
|
|
- `cgo`: add support for bitwise operators
|
|
- `interp`: add support for constant icmp instructions
|
|
- `transform`: fix memory corruption issues
|
|
* **standard library**
|
|
- `machine/usb`: remove allocs in USB ISR
|
|
- `machine/usb`: add `Port()` and deprecate `New()` to have the API better match the singleton that is actually being returned
|
|
- `machine/usb`: change HID usage-maximum to 0xFF
|
|
- `machine/usb`: add USB HID joystick support
|
|
- `machine/usb`: change to not send before endpoint initialization
|
|
- `net`: implement `Pipe`
|
|
- `os`: add stub for `os.Chtimes`
|
|
- `reflect`: stub out `Type.FieldByIndex`
|
|
- `reflect`: add `Value.IsZero` method
|
|
- `reflect`: fix bug in `.Field` method when the field fits in a pointer but the parent doesn't
|
|
- `runtime`: switch some `panic()` calls in the gc to `runtimePanic()` for consistency
|
|
- `runtime`: add xorshift-based fastrand64
|
|
- `runtime`: fix alignment for arm64, arm, xtensa, riscv
|
|
- `runtime`: implement precise GC
|
|
- `runtime/debug`: stub `PrintStack`
|
|
- `sync`: implement simple pooling in `sync.Pool`
|
|
- `syscall`: stubbed `Setuid`, Exec and friends
|
|
- `syscall`: add more stubs as needed for Go 1.20 support
|
|
- `testing`: implement `t.Setenv`
|
|
- `unsafe`: add support for Go 1.20 slice/string functions
|
|
* **targets**
|
|
- `all`: do not set stack size per board
|
|
- `all`: update picolibc to v1.7.9
|
|
- `atsame5x`: fix CAN extendedID handling
|
|
- `atsame5x`: reduce heap allocation
|
|
- `avr`: drop GNU toolchain dependency
|
|
- `avr`: fix .data initialization for binaries over 64kB
|
|
- `avr`: support ThinLTO
|
|
- `baremetal`: implements calloc
|
|
- `darwin`: fix `syscall.Open` on darwin/arm64
|
|
- `darwin`: fix error with `tinygo lldb`
|
|
- `esp`: use LLVM Xtensa linker instead of Espressif toolchain
|
|
- `esp`: use ThinLTO for Xtensa
|
|
- `esp32c3`: add SPI support
|
|
- `linux`: include musl `getpagesize` function in release
|
|
- `nrf51`: add ADC implementation
|
|
- `nrf52840`: add PDM support
|
|
- `riscv`: add "target-abi" metadata flag
|
|
- `rp2040`: remove mem allocation in GPIO ISR
|
|
- `rp2040`: avoid allocating clock on heap
|
|
- `rp2040`: add basic GPIO support for PIO
|
|
- `rp2040`: fix USB interrupt issue
|
|
- `rp2040`: fix RP2040-E5 USB errata
|
|
- `stm32`: always set ADC pins to pullups floating
|
|
- `stm32f1`, `stm32f4`: fix ADC by clearing the correct bit for rank after each read
|
|
- `stm32wl`: Fix incomplete RNG initialisation
|
|
- `stm32wlx`: change order for init so clock speeds are set before peripheral start
|
|
- `wasi`: makes wasmtime "run" explicit
|
|
- `wasm`: fix GC scanning of allocas
|
|
- `wasm`: allow custom malloc implementation
|
|
- `wasm`: remove `-wasm-abi=` flag (use `-target` instead)
|
|
- `wasm`: fix scanning of the stack
|
|
- `wasm`: fix panic when allocating 0 bytes using malloc
|
|
- `wasm`: always run wasm-opt even with `-scheduler=none`
|
|
- `wasm`: avoid miscompile with ThinLTO
|
|
- `wasm`: allow the emulator to expand `{tmpDir}`
|
|
- `wasm`: support ThinLTO
|
|
- `windows`: update mingw-w64 version to avoid linker warning
|
|
- `windows`: add ARM64 support
|
|
* **boards**
|
|
- Add Waveshare RP2040 Zero
|
|
- Add Arduino Leonardo support
|
|
- Add Adafruit KB2040
|
|
- Add Adafruit Feather M0 Express
|
|
- Add Makerfabs ESP32C3SPI35 TFT Touchscreen board
|
|
- Add Espressif ESP32-C3-DevKit-RUST-1 board
|
|
- `lgt92`: fix OpenOCD configuration
|
|
- `xiao-rp2040`: fix D9 and D10 constants
|
|
- `xiao-rp2040`: add pin definitions
|
|
|
|
0.26.0
|
|
---
|
|
|
|
* **general**
|
|
- remove support for LLVM 13
|
|
- remove calls to deprecated ioutil package
|
|
- move from `os.IsFoo` to `errors.Is(err, ErrFoo)`
|
|
- fix for builds using an Android host
|
|
- make interp timeout configurable from command line
|
|
- ignore ports with VID/PID if there is no candidates
|
|
- drop support for Go 1.16 and Go 1.17
|
|
- update serial package to v1.3.5 for latest bugfixes
|
|
- remove GOARM from `tinygo info`
|
|
- add flag for setting the goroutine stack size
|
|
- add serial port monitoring functionality
|
|
* **compiler**
|
|
- `cgo`: implement support for static functions
|
|
- `cgo`: fix panic when FuncType.Results is nil
|
|
- `compiler`: add aliases for `edwards25519/field.feMul` and `field.feSquare`
|
|
- `compiler`: fix incorrect DWARF type in some generic parameters
|
|
- `compiler`: use LLVM math builtins everywhere
|
|
- `compiler`: replace some math operation bodies with LLVM intrinsics
|
|
- `compiler`: replace math aliases with intrinsics
|
|
- `compiler`: fix `unsafe.Sizeof` for chan and map values
|
|
- `compileopts`: use tags parser from buildutil
|
|
- `compileopts`: use backticks for regexp to avoid extra escapes
|
|
- `compileopts`: fail fast on duplicate values in target field slices
|
|
- `compileopts`: fix windows/arm target triple
|
|
- `compileopts`: improve error handling when loading target/*.json
|
|
- `compileopts`: add support for stlink-dap programmer
|
|
- `compileopts`: do not complain about `-no-debug` on MacOS
|
|
- `goenv`: support `GOOS=android`
|
|
- `interp`: fix reading from external global
|
|
- `loader`: fix link error for `crypto/internal/boring/sig.StandardCrypto`
|
|
* **standard library**
|
|
- rename assembly files to .S extension
|
|
- `machine`: add PWM peripheral comments to pins
|
|
- `machine`: improve UARTParity slightly
|
|
- `machine`: do not export DFU_MAGIC_* constants on nrf52840
|
|
- `machine`: rename `PinInputPullUp`/`PinInputPullDown`
|
|
- `machine`: add `KHz`, `MHz`, `GHz` constants, deprecate `TWI_FREQ_*` constants
|
|
- `machine`: remove level triggered pin interrupts
|
|
- `machine`: do not expose `RESET_MAGIC_VALUE`
|
|
- `machine`: use `NoPin` constant where appropriate (instead of `0` for example)
|
|
- `net`: sync net.go with Go 1.18 stdlib
|
|
- `os`: add `SyscallError.Timeout`
|
|
- `os`: add `ErrProcessDone` error
|
|
- `reflect`: implement `CanInterface` and fix string `Index`
|
|
- `runtime`: make `MemStats` available to leaking collector
|
|
- `runtime`: add `MemStats.TotalAlloc`
|
|
- `runtime`: add `MemStats.Mallocs` and `Frees`
|
|
- `runtime`: add support for `time.NewTimer` and `time.NewTicker`
|
|
- `runtime`: implement `resetTimer`
|
|
- `runtime`: ensure some headroom for the GC to run
|
|
- `runtime`: make gc and scheduler asserts settable with build tags
|
|
- `runtime/pprof`: add `WriteHeapProfile`
|
|
- `runtime/pprof`: `runtime/trace`: stub some additional functions
|
|
- `sync`: implement `Map.LoadAndDelete`
|
|
- `syscall`: group WASI consts by purpose
|
|
- `syscall`: add WASI `{D,R}SYNC`, `NONBLOCK` FD flags
|
|
- `syscall`: add ENOTCONN on darwin
|
|
- `testing`: add support for -benchmem
|
|
* **targets**
|
|
- remove USB vid/pid pair of bootloader
|
|
- `esp32c3`: remove unused `UARTStopBits` constants
|
|
- `nrf`: implement `GetRNG` function
|
|
- `nrf`: `rp2040`: add `machine.ReadTemperature`
|
|
- `nrf52`: cleanup s140v6 and s140v7 uf2 targets
|
|
- `rp2040`: implement semi-random RNG based on ROSC based on pico-sdk
|
|
- `wasm`: add summary of wasm examples and fix callback bug
|
|
- `wasm`: do not allow undefined symbols (`--allow-undefined`)
|
|
- `wasm`: make sure buffers returned by `malloc` are kept until `free` is called
|
|
- `windows`: save and restore xmm registers when switching goroutines
|
|
* **boards**
|
|
- add Pimoroni's Tufty2040
|
|
- add XIAO ESP32C3
|
|
- add Adafruit QT2040
|
|
- add Adafruit QT Py RP2040
|
|
- `esp32c3-12f`: `matrixportal-m4`: `p1am-100`: remove duplicate build tags
|
|
- `hifive1-qemu`: remove this emulated board
|
|
- `wioterminal`: add UART3 for RTL8720DN
|
|
- `xiao-ble`: fix usbpid
|
|
|
|
|
|
0.25.0
|
|
---
|
|
|
|
* **command line**
|
|
- change to ignore PortReset failures
|
|
* **compiler**
|
|
- `compiler`: darwin/arm64 is aarch64, not arm
|
|
- `compiler`: don't clobber X18 and FP registers on darwin/arm64
|
|
- `compiler`: fix issue with methods on generic structs
|
|
- `compiler`: do not try to build generic functions
|
|
- `compiler`: fix type names for generic named structs
|
|
- `compiler`: fix multiple defined function issue for generic functions
|
|
- `compiler`: implement `unsafe.Alignof` and `unsafe.Sizeof` for generic code
|
|
* **standard library**
|
|
- `machine`: add DTR and RTS to Serialer interface
|
|
- `machine`: reorder pin definitions to improve pin list on tinygo.org
|
|
- `machine/usb`: add support for MIDI
|
|
- `machine/usb`: adjust buffer alignment (samd21, samd51, nrf52840)
|
|
- `machine/usb/midi`: add `NoteOn`, `NoteOff`, and `SendCC` methods
|
|
- `machine/usb/midi`: add definition of MIDI note number
|
|
- `runtime`: add benchmarks for memhash
|
|
- `runtime`: add support for printing slices via print/println
|
|
* **targets**
|
|
- `avr`: fix some apparent mistake in atmega1280/atmega2560 pin constants
|
|
- `esp32`: provide hardware pin constants
|
|
- `esp32`: fix WDT reset on the MCH2022 badge
|
|
- `esp32`: optimize SPI transmit
|
|
- `esp32c3`: provide hardware pin constants
|
|
- `esp8266`: provide hardware pin constants like `GPIO2`
|
|
- `nrf51`: define and use `P0_xx` constants
|
|
- `nrf52840`, `samd21`, `samd51`: unify bootloader entry process
|
|
- `nrf52840`, `samd21`, `samd51`: change usbSetup and sendZlp to public
|
|
- `nrf52840`, `samd21`, `samd51`: refactor handleStandardSetup and initEndpoint
|
|
- `nrf52840`, `samd21`, `samd51`: improve usb-device initialization
|
|
- `nrf52840`, `samd21`, `samd51`: move usbcdc to machine/usb/cdc
|
|
- `rp2040`: add usb serial vendor/product ID
|
|
- `rp2040`: add support for usb
|
|
- `rp2040`: change default for serial to usb
|
|
- `rp2040`: add support for `machine.EnterBootloader`
|
|
- `rp2040`: turn off pullup/down when input type is not specified
|
|
- `rp2040`: make picoprobe default openocd interface
|
|
- `samd51`: add support for `DAC1`
|
|
- `samd51`: improve TRNG
|
|
- `wasm`: stub `runtime.buffered`, `runtime.getchar`
|
|
- `wasi`: make leveldb runtime hash the default
|
|
* **boards**
|
|
- add Challenger RP2040 LoRa
|
|
- add MCH2022 badge
|
|
- add XIAO RP2040
|
|
- `clue`: remove pins `D21`..`D28`
|
|
- `feather-rp2040`, `macropad-rp2040`: fix qspi-flash settings
|
|
- `xiao-ble`: add support for flash-1200-bps-reset
|
|
- `gopherbot`, `gopherbot2`: add these aliases to simplify for newer users
|
|
|
|
|
|
0.24.0
|
|
---
|
|
|
|
* **command line**
|
|
- remove support for go 1.15
|
|
- remove support for LLVM 11 and LLVM 12
|
|
- add initial Go 1.19 beta support
|
|
- `test`: fix package/... syntax
|
|
* **compiler**
|
|
- add support for the embed package
|
|
- `builder`: improve error message for "command not found"
|
|
- `builder`: add support for ThinLTO on MacOS and Windows
|
|
- `builder`: free LLVM objects after use, to reduce memory leaking
|
|
- `builder`: improve `-no-debug` error messages
|
|
- `cgo`: be more strict: CGo now requires every Go file to import the headers it needs
|
|
- `compiler`: alignof(func) is 1 pointer, not 2
|
|
- `compiler`: add support for type parameters (aka generics)
|
|
- `compiler`: implement `recover()` built-in function
|
|
- `compiler`: support atomic, volatile, and LLVM memcpy-like functions in defer
|
|
- `compiler`: drop support for macos syscalls via inline assembly
|
|
- `interp`: do not try to interpret past task.Pause()
|
|
- `interp`: fix some buggy localValue handling
|
|
- `interp`: do not unroll loops
|
|
- `transform`: fix MakeGCStackSlots that caused a possible GC bug on WebAssembly
|
|
* **standard library**
|
|
- `os`: enable os.Stdin for baremetal target
|
|
- `reflect`: add `Value.UnsafePointer` method
|
|
- `runtime`: scan GC globals conservatively on Windows, MacOS, Linux and Nintendo Switch
|
|
- `runtime`: add per-map hash seeds
|
|
- `runtime`: handle nil map write panics
|
|
- `runtime`: add stronger hash functions
|
|
- `syscall`: implement `Getpagesize`
|
|
* **targets**
|
|
- `atmega2560`: support UART1-3 + example for uart
|
|
- `avr`: use compiler-rt for improved float64 support
|
|
- `avr`: simplify timer-based time
|
|
- `avr`: fix race condition in stack write
|
|
- `darwin`: add support for `GOARCH=arm64` (aka Apple Silicon)
|
|
- `darwin`: support `-size=short` and `-size=full` flag
|
|
- `rp2040`: replace sleep 'busy loop' with timer alarm
|
|
- `rp2040`: align api for `PortMaskSet`, `PortMaskClear`
|
|
- `rp2040`: fix GPIO interrupts
|
|
- `samd21`, `samd51`, `nrf52840`: add support for USBHID (keyboard / mouse)
|
|
- `wasm`: update wasi-libc version
|
|
- `wasm`: use newer WebAssembly features
|
|
* **boards**
|
|
- add Badger 2040
|
|
- `matrixportal-m4`: attach USB DP to the correct pin
|
|
- `teensy40`: add I2C support
|
|
- `wioterminal`: fix I2C definition
|
|
|
|
|
|
0.23.0
|
|
---
|
|
|
|
* **command line**
|
|
- add `-work` flag
|
|
- add Go 1.18 support
|
|
- add LLVM 14 support
|
|
- `run`: add support for command-line parameters
|
|
- `build`: calculate default output path if `-o` is not specified
|
|
- `build`: add JSON output
|
|
- `test`: support multiple test binaries with `-c`
|
|
- `test`: support flags like `-v` on all targets (including emulated firmware)
|
|
* **compiler**
|
|
- add support for ThinLTO
|
|
- use compiler-rt from LLVM
|
|
- `builder`: prefer GNU build ID over Go build ID for caching
|
|
- `builder`: add support for cross compiling to Darwin
|
|
- `builder`: support machine outlining pass in stacksize calculation
|
|
- `builder`: disable asynchronous unwind tables
|
|
- `compileopts`: fix emulator configuration on non-amd64 Linux architectures
|
|
- `compiler`: move allocations > 256 bytes to the heap
|
|
- `compiler`: fix incorrect `unsafe.Alignof` on some 32-bit architectures
|
|
- `compiler`: accept alias for slice `cap` builtin
|
|
- `compiler`: allow slices of empty structs
|
|
- `compiler`: fix difference in aliases in interface methods
|
|
- `compiler`: make `RawSyscall` an alias for `Syscall`
|
|
- `compiler`: remove support for memory references in `AsmFull`
|
|
- `loader`: only add Clang header path for CGo
|
|
- `transform`: fix poison value in heap-to-stack transform
|
|
* **standard library**
|
|
- `internal/fuzz`: add this package as a shim
|
|
- `os`: implement readdir for darwin and linux
|
|
- `os`: add `DirFS`, which is used by many programs to access readdir.
|
|
- `os`: isWine: be compatible with older versions of wine, too
|
|
- `os`: implement `RemoveAll`
|
|
- `os`: Use a `uintptr` for `NewFile`
|
|
- `os`: add stubs for `exec.ExitError` and `ProcessState.ExitCode`
|
|
- `os`: export correct values for `DevNull` for each OS
|
|
- `os`: improve support for `Signal` by fixing various bugs
|
|
- `os`: implement `File.Fd` method
|
|
- `os`: implement `UserHomeDir`
|
|
- `os`: add `exec.ProcessState` stub
|
|
- `os`: implement `Pipe` for darwin
|
|
- `os`: define stub `ErrDeadlineExceeded`
|
|
- `reflect`: add stubs for more missing methods
|
|
- `reflect`: rename `reflect.Ptr` to `reflect.Pointer`
|
|
- `reflect`: add `Value.FieldByIndexErr` stub
|
|
- `runtime`: fix various small GC bugs
|
|
- `runtime`: use memzero for leaking collector instead of manually zeroing objects
|
|
- `runtime`: implement `memhash`
|
|
- `runtime`: implement `fastrand`
|
|
- `runtime`: add stub for `debug.ReadBuildInfo`
|
|
- `runtime`: add stub for `NumCPU`
|
|
- `runtime`: don't inline `runtime.alloc` with `-gc=leaking`
|
|
- `runtime`: add `Version`
|
|
- `runtime`: add stubs for `NumCgoCall` and `NumGoroutine`
|
|
- `runtime`: stub {Lock,Unlock}OSThread on Windows
|
|
- `runtime`: be able to deal with a very small heap
|
|
- `syscall`: make `Environ` return a copy of the environment
|
|
- `syscall`: implement getpagesize and munmap
|
|
- `syscall`: `wasi`: define `MAP_SHARED` and `PROT_READ`
|
|
- `syscall`: stub mmap(), munmap(), MAP_SHARED, PROT_READ, SIGBUS, etc. on nonhosted targets
|
|
- `syscall`: darwin: more complete list of signals
|
|
- `syscall`: `wasi`: more complete list of signals
|
|
- `syscall`: stub `WaitStatus`
|
|
- `syscall/js`: allow copyBytesTo(Go|JS) to use `Uint8ClampedArray`
|
|
- `testing`: implement `TempDir`
|
|
- `testing`: nudge type TB closer to upstream; should be a no-op change.
|
|
- `testing`: on baremetal platforms, use simpler test matcher
|
|
* **targets**
|
|
- `atsamd`: fix usbcdc initialization when `-serial=uart`
|
|
- `atsamd51`: allow higher frequency when using SPI
|
|
- `esp`: support CGo
|
|
- `esp32c3`: add support for input pin
|
|
- `esp32c3`: add support for GPIO interrupts
|
|
- `esp32c3`: add support to receive UART data
|
|
- `rp2040`: fix PWM bug at high frequency
|
|
- `rp2040`: fix some minor I2C bugs
|
|
- `rp2040`: fix incorrect inline assembly
|
|
- `rp2040`: fix spurious i2c STOP during write+read transaction
|
|
- `rp2040`: improve ADC support
|
|
- `wasi`: remove `--export-dynamic` linker flag
|
|
- `wasm`: remove heap allocator from wasi-libc
|
|
* **boards**
|
|
- `circuitplay-bluefruit`: move pin mappings so board can be compiled for WASM use in Playground
|
|
- `esp32-c3-12f`: add the ESP32-C3-12f Kit
|
|
- `m5stamp-c3`: add pin setting of UART
|
|
- `macropad-rp2040`: add the Adafruit MacroPad RP2040 board
|
|
- `nano-33-ble`: typo in LPS22HB peripheral definition and documentation (#2579)
|
|
- `teensy41`: add the Teensy 4.1 board
|
|
- `teensy40`: add ADC support
|
|
- `teensy40`: add SPI support
|
|
- `thingplus-rp2040`: add the SparkFun Thing Plus RP2040 board
|
|
- `wioterminal`: add DefaultUART
|
|
- `wioterminal`: verify written data when flashing through OpenOCD
|
|
- `xiao-ble`: add XIAO BLE nRF52840 support
|
|
|
|
|
|
0.22.0
|
|
---
|
|
|
|
* **command line**
|
|
- add asyncify to scheduler flag help
|
|
- support -run for tests
|
|
- remove FreeBSD target support
|
|
- add LLVM 12 and LLVM 13 support, use LLVM 13 by default
|
|
- add support for ARM64 MacOS
|
|
- improve help
|
|
- check /run/media as well as /media on Linux for non-debian-based distros
|
|
- `test`: set cmd.Dir even when running emulators
|
|
- `info`: add JSON output using the `-json` flag
|
|
* **compiler**
|
|
- `builder`: fix off-by-one in size calculation
|
|
- `builder`: handle concurrent library header rename
|
|
- `builder`: use flock to avoid double-compiles
|
|
- `builder`: use build ID as cache key
|
|
- `builder`: add -fno-stack-protector to musl build
|
|
- `builder`: update clang header search path to look in /usr/lib
|
|
- `builder`: explicitly disable unwind tables for ARM
|
|
- `cgo`: add support for `C.CString` and related functions
|
|
- `compiler`: fix ranging over maps with particular map types
|
|
- `compiler`: add correct debug location to init instructions
|
|
- `compiler`: fix emission of large object layouts
|
|
- `compiler`: work around AVR atomics bugs
|
|
- `compiler`: predeclare runtime.trackPointer
|
|
- `interp`: work around AVR function pointers in globals
|
|
- `interp`: run goroutine starts and checks at runtime
|
|
- `interp`: always run atomic and volatile loads/stores at runtime
|
|
- `interp`: bump timeout to 180 seconds
|
|
- `interp`: handle type assertions on nil interfaces
|
|
- `loader`: eliminate goroot cache inconsistency
|
|
- `loader`: respect $GOROOT when running `go list`
|
|
- `transform`: allocate the correct amount of bytes in an alloca
|
|
- `transform`: remove switched func lowering
|
|
* **standard library**
|
|
- `crypto/rand`: show error if platform has no rng
|
|
- `device/*`: add `*_Msk` field for each bit field and avoid duplicates
|
|
- `device/*`: provide Set/Get for each register field described in the SVD files
|
|
- `internal/task`: swap stack chain when switching goroutines
|
|
- `internal/task`: remove `-scheduler=coroutines`
|
|
- `machine`: add `Device` string constant
|
|
- `net`: add bare Interface implementation
|
|
- `net`: add net.Buffers
|
|
- `os`: stub out support for some features
|
|
- `os`: obey TMPDIR on unix, TMP on Windows, etc
|
|
- `os`: implement `ReadAt`, `Mkdir`, `Remove`, `Stat`, `Lstat`, `CreateTemp`, `MkdirAll`, `Chdir`, `Chmod`, `Clearenv`, `Unsetenv`, `Setenv`, `MkdirTemp`, `Rename`, `Seek`, `ExpandEnv`, `Symlink`, `Readlink`
|
|
- `os`: implement `File.Stat`
|
|
- `os`: fix `IsNotExist` on nonexistent path
|
|
- `os`: fix opening files on WASI in read-only mode
|
|
- `os`: work around lack of `syscall.seek` on 386 and arm
|
|
- `reflect`: make sure indirect pointers are handled correctly
|
|
- `runtime`: allow comparing interfaces
|
|
- `runtime`: use LLVM intrinsic to read the stack pointer
|
|
- `runtime`: strengthen hashmap hash function for structs and arrays
|
|
- `runtime`: fix float/complex hashing
|
|
- `runtime`: fix nil map dereference
|
|
- `runtime`: add realloc implementation to GCs
|
|
- `runtime`: handle negative sleep times
|
|
- `runtime`: correct GC scan bounds
|
|
- `runtime`: remove extalloc GC
|
|
- `rumtime`: implement `__sync` libcalls as critical sections for most microcontrollers
|
|
- `runtime`: add stubs for `Func.FileLine` and `Frame.PC`
|
|
- `sync`: fix concurrent read-lock on write-locked RWMutex
|
|
- `sync`: add a package doc
|
|
- `sync`: add tests
|
|
- `syscall`: add support for `Mmap` and `Mprotect`
|
|
- `syscall`: fix array size for mmap slice creation
|
|
- `syscall`: enable `Getwd` in wasi
|
|
- `testing`: add a stub for `CoverMode`
|
|
- `testing`: support -bench option to run benchmarks matching the given pattern.
|
|
- `testing`: support b.SetBytes(); implement sub-benchmarks.
|
|
- `testing`: replace spaces with underscores in test/benchmark names, as upstream does
|
|
- `testing`: implement testing.Cleanup
|
|
- `testing`: allow filtering subbenchmarks with the `-bench` flag
|
|
- `testing`: implement `-benchtime` flag
|
|
- `testing`: print duration
|
|
- `testing`: allow filtering of subtests using `-run`
|
|
* **targets**
|
|
- `all`: change LLVM features to match vanilla Clang
|
|
- `avr`: use interrupt-based timer which is much more accurate
|
|
- `nrf`: fix races in I2C
|
|
- `samd51`: implement TRNG for randomness
|
|
- `stm32`: pull-up on I2C lines
|
|
- `stm32`: fix timeout for i2c comms
|
|
- `stm32f4`, `stm32f103`: initial implementation for ADC
|
|
- `stm32f4`, `stm32f7`, `stm32l0x2`, `stm32l4`, `stm32l5`, `stm32wl`: TRNG implementation in crypto/rand
|
|
- `stm32wl`: add I2C support
|
|
- `windows`: add support for the `-size=` flag
|
|
- `wasm`: add support for `tinygo test`
|
|
- `wasi`, `wasm`: raise default stack size to 16 KiB
|
|
* **boards**
|
|
- add M5Stack
|
|
- add lorae5 (stm32wle) support
|
|
- add Generic Node Sensor Edition
|
|
- add STM32F469 Discovery
|
|
- add M5Stamp C3
|
|
- add Blues Wireless Swan
|
|
- `bluepill`: add definitions for ADC pins
|
|
- `stm32f4disco`: add definitions for ADC pins
|
|
- `stm32l552ze`: use supported stlink interface
|
|
- `microbit-v2`: add some pin definitions
|
|
|
|
|
|
0.21.0
|
|
---
|
|
|
|
* **command line**
|
|
- drop support for LLVM 10
|
|
- `build`: drop support for LLVM targets in the -target flag
|
|
- `build`: fix paths in error messages on Windows
|
|
- `build`: add -p flag to set parallelism
|
|
- `lldb`: implement `tinygo lldb` subcommand
|
|
- `test`: use emulator exit code instead of parsing test output
|
|
- `test`: pass testing arguments to wasmtime
|
|
* **compiler**
|
|
- use -opt flag for optimization level in CFlags (-Os, etc)
|
|
- `builder`: improve accuracy of the -size=full flag
|
|
- `builder`: hardcode some more frame sizes for __aeabi_* functions
|
|
- `builder`: add support for -size= flag for WebAssembly
|
|
- `cgo`: fix line/column reporting in syntax error messages
|
|
- `cgo`: support function definitions in CGo headers
|
|
- `cgo`: implement rudimentary C array decaying
|
|
- `cgo`: add support for stdio in picolibc and wasi-libc
|
|
- `cgo`: run CGo parser per file, not per CGo fragment
|
|
- `compiler`: fix unintentionally exported math functions
|
|
- `compiler`: properly implement div and rem operations
|
|
- `compiler`: add support for recursive function types
|
|
- `compiler`: add support for the `go` keyword on interface methods
|
|
- `compiler`: add minsize attribute for -Oz
|
|
- `compiler`: add "target-cpu" and "target-features" attributes
|
|
- `compiler`: fix indices into strings and arrays
|
|
- `compiler`: fix string compare functions
|
|
- `interp`: simplify some code to avoid some errors
|
|
- `interp`: support recursive globals (like linked lists) in globals
|
|
- `interp`: support constant globals
|
|
- `interp`: fix reverting of extractvalue/insertvalue with multiple indices
|
|
- `transform`: work around renamed return type after merging LLVM modules
|
|
* **standard library**
|
|
- `internal/bytealg`: fix indexing error in Compare()
|
|
- `machine`: support Pin.Get() function when the pin is configured as output
|
|
- `net`, `syscall`: Reduce code duplication by switching to internal/itoa.
|
|
- `os`: don't try to read executable path on baremetal
|
|
- `os`: implement Getwd
|
|
- `os`: add File.WriteString and File.WriteAt
|
|
- `reflect`: fix type.Size() to account for struct padding
|
|
- `reflect`: don't construct an interface-in-interface value
|
|
- `reflect`: implement Value.Elem() for interface values
|
|
- `reflect`: fix Value.Index() in a specific case
|
|
- `reflect`: add support for DeepEqual
|
|
- `runtime`: add another set of invalid unicode runes to encodeUTF8()
|
|
- `runtime`: only initialize os.runtime_args when needed
|
|
- `runtime`: only use CRLF on baremetal systems for println
|
|
- `runtime/debug`: stub `debug.SetMaxStack`
|
|
- `runtime/debug`: stub `debug.Stack`
|
|
- `testing`: add a stub for t.Parallel()
|
|
- `testing`: add support for -test.short flag
|
|
- `testing`: stub B.ReportAllocs()
|
|
- `testing`: add `testing.Verbose`
|
|
- `testing`: stub `testing.AllocsPerRun`
|
|
* **targets**
|
|
- fix gen-device-svd to handle 64-bit values
|
|
- add CPU and Features property to all targets
|
|
- match LLVM triple to the one Clang uses
|
|
- `atsam`: simplify definition of SERCOM UART, I2C and SPI peripherals
|
|
- `atsam`: move I2S0 to machine file
|
|
- `esp32`: fix SPI configuration
|
|
- `esp32c3`: add support for GDB debugging
|
|
- `esp32c3`: add support for CPU interrupts
|
|
- `esp32c3`: use tasks scheduler by default
|
|
- `fe310`: increase CPU frequency from 16MHz to 320MHz
|
|
- `fe310`: add support for bit banging drivers
|
|
- `linux`: build static binaries using musl
|
|
- `linux`: reduce binary size by calling `write` instead of `putchar`
|
|
- `linux`: add support for GOARM
|
|
- `riscv`: implement 32-bit atomic operations
|
|
- `riscv`: align the heap to 16 bytes
|
|
- `riscv`: switch to tasks-based scheduler
|
|
- `rp2040`: add CPUFrequency()
|
|
- `rp2040`: improve I2C baud rate configuration
|
|
- `rp2040`: add pin interrupt API
|
|
- `rp2040`: refactor PWM code and fix Period calculation
|
|
- `stm32f103`: fix SPI
|
|
- `stm32f103`: make SPI frequency selection more flexible
|
|
- `qemu`: signal correct exit code to QEMU
|
|
- `wasi`: run C/C++ constructors at startup
|
|
- `wasm`: ensure heapptr is aligned
|
|
- `wasm`: update wasi-libc dependency
|
|
- `wasm`: wasi: use asyncify
|
|
- `wasm`: support `-scheduler=none`
|
|
- `windows`: add support for Windows (amd64 only for now)
|
|
* **boards**
|
|
- `feather-stm32f405`, `feather-rp2040`: add I2C pin names
|
|
- `m5stack-core2`: add M5Stack Core2
|
|
- `nano-33-ble`: SoftDevice s140v7 support
|
|
- `nano-33-ble`: add constants for more on-board pins
|
|
|
|
|
|
0.20.0
|
|
---
|
|
|
|
* **command line**
|
|
- add support for Go 1.17
|
|
- improve Go version detection
|
|
- add support for the Black Magic Probe (BMP)
|
|
- add a flag for creating cpu profiles
|
|
* **compiler**
|
|
- `builder:` list libraries at the end of the linker command
|
|
- `builder:` strip debug information at link time instead of at compile time
|
|
- `builder:` add missing error check for `ioutil.TempFile()`
|
|
- `builder:` simplify running of jobs
|
|
- `compiler:` move LLVM math builtin support into the compiler
|
|
- `compiler:` move math aliases from the runtime to the compiler
|
|
- `compiler:` add aliases for many hashing packages
|
|
- `compiler:` add `*ssa.MakeSlice` bounds tests
|
|
- `compiler:` fix max possible slice
|
|
- `compiler:` add support for new language features of Go 1.17
|
|
- `compiler:` fix equally named structs in different scopes
|
|
- `compiler:` avoid zero-sized alloca in channel operations
|
|
- `interp:` don't ignore array indices for untyped objects
|
|
- `interp:` keep reverted package initializers in order
|
|
- `interp:` fix bug in compiler-time/run-time package initializers
|
|
- `loader:` fix panic in CGo files with syntax errors
|
|
- `transform:` improve GC stack slot pass to work around a bug
|
|
* **standard library**
|
|
- `crypto/rand`: switch to `arc4random_buf`
|
|
- `math:` fix `math.Max` and `math.Min`
|
|
- `math/big`: fix undefined symbols error
|
|
- `net:` add MAC address implementation
|
|
- `os:` implement `os.Executable`
|
|
- `os:` add `SEEK_SET`, `SEEK_CUR`, and `SEEK_END`
|
|
- `reflect:` add StructField.IsExported method
|
|
- `runtime:` reset heapptr to heapStart after preinit()
|
|
- `runtime:` add `subsections_via_symbols` to assembly files on darwin
|
|
- `testing:` add subset implementation of Benchmark
|
|
- `testing:` test testing package using `tinygo test`
|
|
- `testing:` add support for the `-test.v` flag
|
|
* **targets**
|
|
- `386:` bump minimum requirement to the Pentium 4
|
|
- `arm:` switch to Thumb instruction set on ARM
|
|
- `atsamd:` fix copy-paste error for atsamd21/51 calibTrim block
|
|
- `baremetal`,`wasm`: support command line params and environment variables
|
|
- `cortexm:` fix stack overflow because of unaligned stacks
|
|
- `esp32c3:` add support for the ESP32-C3 from Espressif
|
|
- `nrf52840:` fix ram size
|
|
- `nxpmk66f18:` fix a suspicious bitwise operation
|
|
- `rp2040:` add SPI support
|
|
- `rp2040:` add I2C support
|
|
- `rp2040:` add PWM implementation
|
|
- `rp2040:` add openocd configuration
|
|
- `stm32:` add support for PortMask* functions for WS2812 support
|
|
- `unix:` fix time base for time.Now()
|
|
- `unix:` check for mmap error and act accordingly
|
|
- `wasm:` override dlmalloc heap implementation from wasi-libc
|
|
- `wasm:` align heap to 16 bytes
|
|
- `wasm:` add support for the crypto/rand package
|
|
* **boards**
|
|
- add `DefaultUART` to adafruit boards
|
|
- `arduino-mkrwifi1010:` add board definition for Arduino MKR WiFi 1010
|
|
- `arduino-mkrwifi1010:` fix pin definition of `NINA_RESETN`
|
|
- `feather-nrf52:` fix pin definition of uart
|
|
- `feather-rp2040:` add pin name definition
|
|
- `gameboy-advance:` fix ROM header
|
|
- `mdbt50qrx-uf2:` add Raytac MDBT50Q-RX Dongle with TinyUF2
|
|
- `nano-rp2040:` define `NINA_SPI` and fix wifinina pins
|
|
- `teensy40:` enable hardware UART reconfiguration, fix receive watermark interrupt
|
|
|
|
|
|
0.19.0
|
|
---
|
|
|
|
* **command line**
|
|
- don't consider compile-only tests as failing
|
|
- add -test flag for `tinygo list`
|
|
- escape commands while printing them with the -x flag
|
|
- make flash-command portable and safer to use
|
|
- use `extended-remote` instead of `remote` in GDB
|
|
- detect specific serial port IDs based on USB vid/pid
|
|
- add a flag to the command line to select the serial implementation
|
|
* **compiler**
|
|
- `cgo`: improve constant parser
|
|
- `compiler`: support chained interrupt handlers
|
|
- `compiler`: add support for running a builtin in a goroutine
|
|
- `compiler`: do not emit nil checks for loading closure variables
|
|
- `compiler`: skip context parameter when starting regular goroutine
|
|
- `compiler`: refactor method names
|
|
- `compiler`: add function and global section pragmas
|
|
- `compiler`: implement `syscall.rawSyscallNoError` in inline assembly
|
|
- `interp`: ignore inline assembly in markExternal
|
|
- `interp`: fix a bug in pointer cast workaround
|
|
- `loader`: fix testing a main package
|
|
* **standard library**
|
|
- `crypto/rand`: replace this package with a TinyGo version
|
|
- `machine`: make USBCDC global a pointer
|
|
- `machine`: make UART objects pointer receivers
|
|
- `machine`: define Serial as the default output
|
|
- `net`: add initial support for net.IP
|
|
- `net`: add more net compatibility
|
|
- `os`: add stub for os.ReadDir
|
|
- `os`: add FileMode constants from Go 1.16
|
|
- `os`: add stubs required for net/http
|
|
- `os`: implement process related functions
|
|
- `reflect`: implement AppendSlice
|
|
- `reflect`: add stubs required for net/http
|
|
- `runtime`: make task.Data a 64-bit integer to avoid overflow
|
|
- `runtime`: expose memory stats
|
|
- `sync`: implement NewCond
|
|
- `syscall`: fix int type in libc version
|
|
* **targets**
|
|
- `cortexm`: do not disable interrupts on abort
|
|
- `cortexm`: bump default stack size to 2048 bytes
|
|
- `nrf`: avoid heap allocation in waitForEvent
|
|
- `nrf`: don't trigger a heap allocation in SPI.Transfer
|
|
- `nrf52840`: add support for flashing with the BOSSA tool
|
|
- `rp2040`: add support for GPIO input
|
|
- `rp2040`: add basic support for ADC
|
|
- `rp2040`: gpio and adc pin definitions
|
|
- `rp2040`: implement UART
|
|
- `rp2040`: patch elf to checksum 2nd stage boot
|
|
- `stm32`: add PWM for most chips
|
|
- `stm32`: add support for pin interrupts
|
|
- `stm32f103`: add support for PinInputPullup / PinInputPulldown
|
|
- `wasi`: remove wasm build tag
|
|
* **boards**
|
|
- `feather-rp2040`: add support for this board
|
|
- `feather-nrf52840-sense`: add board definition for this board
|
|
- `pca10059`: support flashing from Windows
|
|
- `nano-rp2040`: add this board
|
|
- `nano-33-ble`: add support for this board
|
|
- `pico`: add the Raspberry Pi Pico board with the new RP2040 chip
|
|
- `qtpy`: add pin for neopixels
|
|
- all: add definition for ws2812 for supported boards
|
|
|
|
|
|
0.18.0
|
|
---
|
|
|
|
* **command line**
|
|
- drop support for Go 1.11 and 1.12
|
|
- throw an error when no target is specified on Windows
|
|
- improve error messages in `getDefaultPort()`, support for multiple ports
|
|
- remove `-cflags` and `-ldflags` flags
|
|
- implement `-ldflags="-X ..."`
|
|
- add `-print-allocs` flag that lets you print all heap allocations
|
|
- openocd commands in tinygo command line
|
|
- add `-llvm-features` parameter
|
|
- match `go test` output
|
|
- discover USB ports only, this will ignore f.ex. bluetooth
|
|
- use physicmal path instead of cached GOROOT in function getGoroot
|
|
- add goroot for snap installs
|
|
* **compiler**
|
|
- `builder`: add support for `-opt=0`
|
|
- `builder`, `compiler`: compile and cache packages in parallel
|
|
- `builder`: run interp per package
|
|
- `builder`: cache C and assembly file outputs
|
|
- `builder`: add support for `-x` flag to print commands
|
|
- `builder`: add optsize attribute while building the package
|
|
- `builder`: run function passes per package
|
|
- `builder`: hard code Clang compiler
|
|
- `compiler`: do not use `llvm.GlobalContext()`
|
|
- `compiler`: remove SimpleDCE pass
|
|
- `compiler`: do not emit nil checks for `*ssa.Alloc` instructions
|
|
- `compiler`: merge `runtime.typecodeID` and runtime.typeInInterface
|
|
- `compiler`: do not check for impossible type asserts
|
|
- `compiler`: fix use of global context: `llvm.Int32Type()`
|
|
- `compiler`: add interface IR test
|
|
- `compiler`: fix lack of method name in interface matching
|
|
- `compiler`: fix "fragment covers entire variable" bug
|
|
- `compiler`: optimize string literals and globals
|
|
- `compiler`: decouple func lowering from interface type codes
|
|
- `compiler`: add function attributes to some runtime calls
|
|
- `compiler`: improve position information in error messages
|
|
- `cgo`: add support for CFLAGS in .c files
|
|
- `interp`: support GEP on fixed (MMIO) addresses
|
|
- `interp`: handle `(reflect.Type).Elem()`
|
|
- `interp`: add support for runtime.interfaceMethod
|
|
- `interp`: make toLLVMValue return an error instead of panicking
|
|
- `interp`: add support for switch statement
|
|
- `interp`: fix phi instruction
|
|
- `interp`: remove map support
|
|
- `interp`: support extractvalue/insertvalue with multiple operands
|
|
- `transform`: optimize string comparisons against ""
|
|
- `transform`: optimize `reflect.Type` `Implements()` method
|
|
- `transform`: fix bug in interface lowering when signatures are renamed
|
|
- `transform`: don't rely on struct name of `runtime.typecodeID`
|
|
- `transform`: use IPSCCP pass instead of the constant propagation pass
|
|
- `transform`: fix func lowering assertion failure
|
|
- `transform`: do not lower zero-sized alloc to alloca
|
|
- `transform`: split interface and reflect lowering
|
|
* **standard library**
|
|
- `runtime`: add dummy debug package
|
|
- `machine`: fix data shift/mask in newUSBSetup
|
|
- `machine`: make `machine.I2C0` and similar objects pointers
|
|
- `machine`: unify usbcdc code
|
|
- `machine`: refactor PWM support
|
|
- `machine`: avoid heap allocations in USB code
|
|
- `reflect`: let `reflect.Type` be of interface type
|
|
- `reflect`: implement a number of stub functions
|
|
- `reflect`: check for access in the `Interface` method call
|
|
- `reflect`: fix `AssignableTo` and `Implements` methods
|
|
- `reflect`: implement `Value.CanAddr`
|
|
- `reflect`: implement `Sizeof` and `Alignof` for func values
|
|
- `reflect`: implement `New` function
|
|
- `runtime`: implement command line arguments in hosted environments
|
|
- `runtime`: implement environment variables for Linux
|
|
- `runtime`: improve timers on nrf, and samd chips
|
|
* **targets**
|
|
- all: use -Qunused-arguments only for assembly files
|
|
- `atmega1280`: add PWM support
|
|
- `attiny`: remove dummy UART
|
|
- `atsamd21`: improve SPI
|
|
- `atsamd51`: fix PWM support in atsamd51p20
|
|
- `atsamd5x`: improve SPI
|
|
- `atsamd51`, `atsame5x`: unify samd51 and same5x
|
|
- `atsamd51`, `atsamd21`: fix `ADC.Get()` value at 8bit and 10bit
|
|
- `atsame5x`: add support for CAN
|
|
- `avr`: remove I2C stubs from attiny support
|
|
- `cortexm`: check for `arm-none-eabi-gdb` and `gdb-multiarch` commands
|
|
- `cortexm`: add `__isr_vector` symbol
|
|
- `cortexm`: disable FPU on Cortex-M4
|
|
- `cortexm`: clean up Cortex-M target files
|
|
- `fe310`: fix SPI read
|
|
- `gameboy-advance`: Fix RGBA color interpretation
|
|
- `nrf52833`: add PWM support
|
|
- `stm32l0`: use unified UART logic
|
|
- `stm32`: move f103 (bluepill) to common i2c code
|
|
- `stm32`: separate altfunc selection for UART Tx/Rx
|
|
- `stm32`: i2c implementation for F7, L5 and L4 MCUs
|
|
- `stm32`: make SPI CLK fast to fix data issue
|
|
- `stm32`: support SPI on L4 series
|
|
- `unix`: avoid possible heap allocation with `-opt=0`
|
|
- `unix`: use conservative GC by default
|
|
- `unix`: use the tasks scheduler instead of coroutines
|
|
- `wasi`: upgrade WASI version to wasi_snapshot_preview1
|
|
- `wasi`: darwin: support basic file io based on libc
|
|
- `wasm`: only export explicitly exported functions
|
|
- `wasm`: use WASI ABI for exit function
|
|
- `wasm`: scan globals conservatively
|
|
* **boards**
|
|
- `arduino-mega1280`: add support for the Arduino Mega 1280
|
|
- `arduino-nano-new`: Add Arduino Nano w/ New Bootloader target
|
|
- `atsame54-xpro`: add initial support this board
|
|
- `feather-m4-can`: add initial support for this board
|
|
- `grandcentral-m4`: add board support for Adafruit Grand Central M4 (SAMD51)
|
|
- `lgt92`: update to new UART structure
|
|
- `microbit`: remove LED constant
|
|
- `microbit-v2`: add support for S113 SoftDevice
|
|
- `nucleol432`: add support for this board
|
|
- `nucleo-l031k6`: add this board
|
|
- `pca10059`: initial support for this board
|
|
- `qtpy`: fix msd-volume-name
|
|
- `qtpy`: fix i2c setting
|
|
- `teensy40`: move txBuffer allocation to UART declaration
|
|
- `teensy40`: add UART0 as alias for UART1
|
|
|
|
|
|
0.17.0
|
|
|
|
---
|
|
* **command line**
|
|
- switch to LLVM 11 for static builds
|
|
- support gdb debugging with AVR
|
|
- add support for additional openocd commands
|
|
- add `-x` flag to print commands
|
|
- use LLVM 11 by default when linking LLVM dynamically
|
|
- update go-llvm to use LLVM 11 on macOS
|
|
- bump go.bug.st/serial to version 1.1.2
|
|
- do not build LLVM with libxml to work around a bugo on macOS
|
|
- add support for Go 1.16
|
|
- support gdb daemonization on Windows
|
|
- remove support for LLVM 9, to fix CI
|
|
- kill OpenOCD if it does not exit with a regular quit signal
|
|
- support `-ocd-output` on Windows
|
|
* **compiler**
|
|
- `builder`: parallelize most of the build
|
|
- `builder`: remove unused cacheKey parameter
|
|
- `builder`: add -mcpu flag while building libraries
|
|
- `builder`: wait for running jobs to finish
|
|
- `cgo`: add support for variadic functions
|
|
- `compiler`: fix undefined behavior in wordpack
|
|
- `compiler`: fix incorrect "exported function" panic
|
|
- `compiler`: fix non-int integer constants (fixing a crash)
|
|
- `compiler`: refactor and add tests
|
|
- `compiler`: emit a nil check when slicing an array pointer
|
|
- `compiler`: saturate float-to-int conversions
|
|
- `compiler`: test float to int conversions and fix upper-bound calculation
|
|
- `compiler`: support all kinds of deferred builtins
|
|
- `compiler`: remove ir package
|
|
- `compiler`: remove unnecessary main.main call workaround
|
|
- `compiler`: move the setting of attributes to getFunction
|
|
- `compiler`: create runtime types lazily when needed
|
|
- `compiler`: move settings to a separate Config struct
|
|
- `compiler`: work around an ARM backend bug in LLVM
|
|
- `interp`: rewrite entire package
|
|
- `interp`: fix alignment of untyped globals
|
|
- `loader`: use name "main" for the main package
|
|
- `loader`: support imports from vendor directories
|
|
- `stacksize`: add support for DW_CFA_offset_extended
|
|
- `transform`: show better error message in coroutines lowering
|
|
* **standard library**
|
|
- `machine`: accept configuration struct for ADC parameters
|
|
- `machine`: make I2C.Configure signature consistent
|
|
- `reflect`: implement PtrTo
|
|
- `runtime`: refactor to simplify stack switching
|
|
- `runtime`: put metadata at the top end of the heap
|
|
* **targets**
|
|
- `atsam`: add a length check to findPinPadMapping
|
|
- `atsam`: improve USBCDC
|
|
- `atsam`: avoid infinite loop when USBCDC is disconnected
|
|
- `avr`: add SPI support for Atmega based chips
|
|
- `avr`: use Clang for compiling C and assembly files
|
|
- `esp32`: implement task based scheduler
|
|
- `esp32`: enable the FPU
|
|
- `esp8266`: implement task based scheduler
|
|
- `esp`: add compiler-rt library
|
|
- `esp`: add picolibc
|
|
- `nrf`: refactor code a bit to reduce duplication
|
|
- `nrf`: use SPIM peripheral instead of the legacy SPI peripheral
|
|
- `nrf`: update nrfx submodule to latest commit
|
|
- `nrf52840`: ensure that USB CDC interface is only initialized once
|
|
- `nrf52840`: improve USBCDC
|
|
- `stm32`: use stm32-rs SVDs which are of much higher quality
|
|
- `stm32`: harmonization of UART logic
|
|
- `stm32`: replace I2C addressable interface with simpler type
|
|
- `stm32`: fix i2c and add stm32f407 i2c
|
|
- `stm32`: revert change that adds support for channels in interrupts
|
|
- `wasm`: implement a growable heap
|
|
- `wasm`: fix typo in wasm_exec.js, syscall/js.valueLoadString()
|
|
- `wasm`: Namespaced Wasm Imports so they don't conflict across modules, or reserved LLVM IR
|
|
- `wasi`: support env variables based on libc
|
|
- `wasi`: specify wasi-libc in a different way, to improve error message
|
|
* **boards**
|
|
- `matrixportal-m4`: add support for board Adafruit Matrix Portal M4
|
|
- `mkr1000`: add this board
|
|
- `nucleo-f722ze`: add this board
|
|
- `clue`: correct volume name and add alias for release version of Adafruit Clue board
|
|
- `p1am-100`: add support for the P1AM-100 (similar to Arduino MKR)
|
|
- `microbit-v2`: add initial support based on work done by @alankrantas thank you!
|
|
- `lgt92`: support for STM32L0 MCUs and Dragino LGT92 device
|
|
- `nicenano`: nice!nano board support
|
|
- `circuitplay-bluefruit`: correct internal I2C pin mapping
|
|
- `clue`: correct for lack of low frequency crystal
|
|
- `digispark`: split off attiny85 target
|
|
- `nucleo-l552ze`: implementation with CLOCK, LED, and UART
|
|
- `nrf52840-mdk-usb-dongle`: add this board
|
|
|
|
0.16.0
|
|
---
|
|
|
|
* **command-line**
|
|
- add initial support for LLVM 11
|
|
- make lib64 clang include path check more robust
|
|
- `build`: improve support for GOARCH=386 and add tests
|
|
- `gdb`: add support for qemu-user targets
|
|
- `test`: support non-host tests
|
|
- `test`: add support for -c and -o flags
|
|
- `test`: implement some benchmark stubs
|
|
* **compiler**
|
|
- `builder`: improve detection of clang on Fedora
|
|
- `compiler`: fix floating point comparison bugs
|
|
- `compiler`: implement negate for complex numbers
|
|
- `loader`: fix linkname in test binaries
|
|
- `transform`: add missing return pointer restore for regular coroutine tail
|
|
calls
|
|
* **standard library**
|
|
- `machine`: switch default frequency to 4MHz
|
|
- `machine`: clarify caller's responsibility in `SetInterrupt`
|
|
- `os`: add `LookupEnv()` stub
|
|
- `reflect`: implement `Swapper`
|
|
- `runtime`: fix UTF-8 decoding
|
|
- `runtime`: gc: use raw stack access whenever possible
|
|
- `runtime`: use dedicated printfloat32
|
|
- `runtime`: allow ranging over a nil map
|
|
- `runtime`: avoid device/nxp dependency in HardFault handler
|
|
- `testing`: implement dummy Helper method
|
|
- `testing`: add Run method
|
|
* **targets**
|
|
- `arm64`: add support for SVCall intrinsic
|
|
- `atsamd51`: avoid panic when configuring SPI with SDI=NoPin
|
|
- `avr`: properly support the `.rodata` section
|
|
- `esp8266`: implement `Pin.Get` function
|
|
- `nintendoswitch`: fix crash when printing long lines (> 120)
|
|
- `nintendoswitch`: add env parser and removed unused stuff
|
|
- `nrf`: add I2C error checking
|
|
- `nrf`: give more flexibility in picking SPI speeds
|
|
- `nrf`: fix nrf52832 flash size
|
|
- `stm32f103`: support wakeups from interrupts
|
|
- `stm32f405`: add SPI support
|
|
- `stm32f405`: add I2C support
|
|
- `wasi`: add support for this target
|
|
- `wasi`: use 'generic' ABI by default
|
|
- `wasi`: remove --no-threads flag from wasm-ld
|
|
- `wasm`: add instanceof support for WebAssembly
|
|
- `wasm`: use fixed length buffer for putchar
|
|
* **boards**
|
|
- `d1mini`: add this ESP8266 based board
|
|
- `esp32`: use board definitions instead of chip names
|
|
- `qtpy`: add board definition for Adafruit QTPy
|
|
- `teensy40`: add this board
|
|
|
|
0.15.0
|
|
---
|
|
|
|
* **command-line**
|
|
- add cached GOROOT to info subcommand
|
|
- embed git-hash in tinygo-dev executable
|
|
- implement tinygo targets to list usable targets
|
|
- use simpler file copy instead of file renaming to avoid issues on nrf52840 UF2 bootloaders
|
|
- use ToSlash() to specify program path
|
|
- support flashing esp32/esp8266 directly from tinygo
|
|
- when flashing call PortReset only on other than openocd
|
|
* **compiler**
|
|
- `compileopts`: add support for custom binary formats
|
|
- `compiler`: improve display of goroutine wrappers
|
|
- `interp`: don't panic in the Store method
|
|
- `interp`: replace some panics with error messages
|
|
- `interp`: show error line in first line of the traceback
|
|
- `loader`: be more robust when creating the cached GOROOT
|
|
- `loader`: rewrite/refactor much of the code to use go list directly
|
|
- `loader`: use ioutil.TempDir to create a temporary directory
|
|
- `stacksize`: deal with DW_CFA_advance_loc1
|
|
* **standard library**
|
|
- `runtime`: use waitForEvents when appropriate
|
|
* **wasm**
|
|
- `wasm`: Remove --no-threads from wasm-ld calls.
|
|
- `wasm`: update wasi-libc dependency
|
|
* **targets**
|
|
- `arduino-mega2560`: fix flashing on Windows
|
|
- `arm`: automatically determine stack sizes
|
|
- `arm64`: make dynamic loader structs and constants private
|
|
- `avr`: configure emulator in board files
|
|
- `cortexm`: fix stack size calculation with interrupts
|
|
- `flash`: add openocd settings to atsamd21 / atsamd51
|
|
- `flash`: add openocd settings to nrf5
|
|
- `microbit`: reelboard: flash using OpenOCD when needed
|
|
- `nintendoswitch`: Add dynamic loader for runtime loading PIE sections
|
|
- `nintendoswitch`: fix import cycle on dynamic_arm64.go
|
|
- `nintendoswitch`: Fix invalid memory read / write in print calls
|
|
- `nintendoswitch`: simplified assembly code
|
|
- `nintendoswitch`: support outputting .nro files directly
|
|
* **boards**
|
|
- `arduino-zero`: Adding support for the Arduino Zero (#1365)
|
|
- `atsamd2x`: fix BAUD value
|
|
- `atsamd5x`: fix BAUD value
|
|
- `bluepill`: Enable stm32's USART2 for the board and map it to UART1 tinygo's device
|
|
- `device/atsamd51x`: add all remaining bitfield values for PCHCTRLm Mapping
|
|
- `esp32`: add libgcc ROM functions to linker script
|
|
- `esp32`: add SPI support
|
|
- `esp32`: add support for basic GPIO
|
|
- `esp32`: add support for the Espressif ESP32 chip
|
|
- `esp32`: configure the I/O matrix for GPIO pins
|
|
- `esp32`: export machine.PortMask* for bitbanging implementations
|
|
- `esp8266`: add support for this chip
|
|
- `machine/atsamd51x,runtime/atsamd51x`: fixes needed for full support for all PWM pins. Also adds some useful constants to clarify peripheral clock usage
|
|
- `machine/itsybitsy-nrf52840`: add support for Adafruit Itsybitsy nrf52840 (#1243)
|
|
- `machine/stm32f4`: refactor common code and add new build tag stm32f4 (#1332)
|
|
- `nrf`: add SoftDevice support for the Circuit Playground Bluefruit
|
|
- `nrf`: call sd_app_evt_wait when the SoftDevice is enabled
|
|
- `nrf52840`: add build tags for SoftDevice support
|
|
- `nrf52840`: use higher priority for USB-CDC code
|
|
- `runtime/atsamd51x`: use PCHCTRL_GCLK_SERCOMX_SLOW for setting clocks on all SERCOM ports
|
|
- `stm32f405`: add basic UART handler
|
|
- `stm32f405`: add STM32F405 machine/runtime, and new board/target feather-stm32f405
|
|
* **build**
|
|
- `all`: run test binaries in the correct directory
|
|
- `build`: Fix arch release job
|
|
- `ci`: run `tinygo test` for known-working packages
|
|
- `ci`: set git-fetch-depth to 1
|
|
- `docker`: fix the problem with the wasm build (#1357)
|
|
- `Makefile`: check whether submodules have been downloaded in some common cases
|
|
* **docs**
|
|
- add ESP32, ESP8266, and Adafruit Feather STM32F405 to list of supported boards
|
|
|
|
0.14.1
|
|
---
|
|
* **command-line**
|
|
- support for Go 1.15
|
|
* **compiler**
|
|
- loader: work around Windows symlink limitation
|
|
|
|
0.14.0
|
|
---
|
|
* **command-line**
|
|
- fix `getDefaultPort()` on non-English Windows locales
|
|
- compileopts: improve error reporting of unsupported flags
|
|
- fix test subcommand
|
|
- use auto-retry to locate MSD for UF2 and HEX flashing
|
|
- fix touchSerialPortAt1200bps on Windows
|
|
- support package names with backslashes on Windows
|
|
* **compiler**
|
|
- fix a few crashes due to named types
|
|
- add support for atomic operations
|
|
- move the channel blocked list onto the stack
|
|
- fix -gc=none
|
|
- fix named string to `[]byte` slice conversion
|
|
- implement func value and builtin defers
|
|
- add proper parameter names to runtime.initAll, to fix a panic
|
|
- builder: fix picolibc include path
|
|
- builder: use newer version of gohex
|
|
- builder: try to determine stack size information at compile time
|
|
- builder: remove -opt=0
|
|
- interp: fix sync/atomic.Value load/store methods
|
|
- loader: add Go module support
|
|
- transform: fix debug information in func lowering pass
|
|
- transform: do not special-case zero or one implementations of a method call
|
|
- transform: introduce check for method calls on nil interfaces
|
|
- transform: gc: track 0-index GEPs to fix miscompilation
|
|
* **cgo**
|
|
- Add LDFlags support
|
|
* **standard library**
|
|
- extend stdlib to allow import of more packages
|
|
- replace master/slave terminology with appropriate alternatives (MOSI->SDO
|
|
etc)
|
|
- `internal/bytealg`: reimplement bytealg in pure Go
|
|
- `internal/task`: fix nil panic in (*internal/task.Stack).Pop
|
|
- `os`: add Args and stub it with mock data
|
|
- `os`: implement virtual filesystem support
|
|
- `reflect`: add Cap and Len support for map and chan
|
|
- `runtime`: fix return address in scheduler on RISC-V
|
|
- `runtime`: avoid recursion in printuint64 function
|
|
- `runtime`: replace ReadRegister with AsmFull inline assembly
|
|
- `runtime`: fix compilation errors when using gc.extalloc
|
|
- `runtime`: add cap and len support for chans
|
|
- `runtime`: refactor time handling (improving accuracy)
|
|
- `runtime`: make channels work in interrupts
|
|
- `runtime/interrupt`: add cross-chip disable/restore interrupt support
|
|
- `sync`: implement `sync.Cond`
|
|
- `sync`: add WaitGroup
|
|
* **targets**
|
|
- `arm`: allow nesting in DisableInterrupts and EnableInterrupts
|
|
- `arm`: make FPU configuration consistent
|
|
- `arm`: do not mask fault handlers in critical sections
|
|
- `atmega2560`: fix pin mapping for pins D2, D5 and the L port
|
|
- `atsamd`: return an error when an incorrect PWM pin is used
|
|
- `atsamd`: add support for pin change interrupts
|
|
- `atsamd`: add DAC support
|
|
- `atsamd21`: add more ADC pins
|
|
- `atsamd51`: fix ROM / RAM size on atsamd51j20
|
|
- `atsamd51`: add more pins
|
|
- `atsamd51`: add more ADC pins
|
|
- `atsamd51`: add pin change interrupt settings
|
|
- `atsamd51`: extend pinPadMapping
|
|
- `arduino-nano33`: use (U)SB flag to ensure that device can be found when
|
|
not on default port
|
|
- `arduino-nano33`: remove (d)ebug flag to reduce console noise when flashing
|
|
- `avr`: use standard pin numbering
|
|
- `avr`: unify GPIO pin/port code
|
|
- `avr`: add support for PinInputPullup
|
|
- `avr`: work around codegen bug in LLVM 10
|
|
- `avr`: fix target triple
|
|
- `fe310`: remove extra println left in by mistake
|
|
- `feather-nrf52840`: add support for the Feather nRF52840
|
|
- `maixbit`: add board definition and dummy runtime
|
|
- `nintendoswitch`: Add experimental Nintendo Switch support without CRT
|
|
- `nrf`: expose the RAM base address
|
|
- `nrf`: add support for pin change interrupts
|
|
- `nrf`: add microbit-s110v8 target
|
|
- `nrf`: fix bug in SPI.Tx
|
|
- `nrf`: support debugging the PCA10056
|
|
- `pygamer`: add Adafruit PyGamer support
|
|
- `riscv`: fix interrupt configuration bug
|
|
- `riscv`: disable linker relaxations during gp init
|
|
- `stm32f4disco`: add new target with ST-Link v2.1 debugger
|
|
- `teensy36`: add Teensy 3.6 support
|
|
- `wasm`: fix event handling
|
|
- `wasm`: add --no-demangle linker option
|
|
- `wioterminal`: add support for the Seeed Wio Terminal
|
|
- `xiao`: add support for the Seeed XIAO
|
|
|
|
0.13.1
|
|
---
|
|
* **standard library**
|
|
- `runtime`: do not put scheduler and GC code in the same section
|
|
- `runtime`: copy stack scan assembly for GBA
|
|
* **boards**
|
|
- `gameboy-advance`: always use ARM mode instead of Thumb mode
|
|
|
|
|
|
0.13.0
|
|
---
|
|
* **command line**
|
|
- use `gdb-multiarch` for debugging Cortex-M chips
|
|
- support `tinygo run` with simavr
|
|
- support LLVM 10
|
|
- support Go 1.14
|
|
- retry 3 times when attempting to do a 1200-baud reset
|
|
* **compiler**
|
|
- mark the `abort` function as noreturn
|
|
- fix deferred calls to exported functions
|
|
- add debug info for local variables
|
|
- check for channel size limit
|
|
- refactor coroutine lowering
|
|
- add `dereferenceable_or_null` attribute to pointer parameters
|
|
- do not perform nil checking when indexing slices and on `unsafe.Pointer`
|
|
- remove `runtime.isnil` hack
|
|
- use LLVM builtins for runtime `memcpy`/`memmove`/`memzero` functions
|
|
- implement spec-compliant shifts on negative/overflow
|
|
- support anonymous type asserts
|
|
- track pointer result of string concatenation for GC
|
|
- track PHI nodes for GC
|
|
- add debug info to goroutine start wrappers
|
|
- optimize comparing interface values against nil
|
|
- fix miscompilation when deferring an interface call
|
|
- builder: include picolibc for most baremetal targets
|
|
- builder: run tools (clang, lld) as separate processes
|
|
- builder: use `-fshort-enums` consistently
|
|
- interp: add support for constant type asserts
|
|
- interp: better support for interface operations
|
|
- interp: include backtrace with error
|
|
- transform: do not track const globals for GC
|
|
- transform: replace panics with source locations
|
|
- transform: fix error in interface lowering pass
|
|
- transform: make coroutine lowering deterministic
|
|
- transform: fix miscompilation in func lowering
|
|
* **cgo**
|
|
- make `-I` and `-L` paths absolute
|
|
* **standard library**
|
|
- `machine`: set the USB VID and PID to the manufacturer values
|
|
- `machine`: correct USB CDC composite descriptors
|
|
- `machine`: move `errors.New` calls to globals
|
|
- `runtime`: support operations on nil maps
|
|
- `runtime`: fix copy builtin return value on AVR
|
|
- `runtime`: refactor goroutines
|
|
- `runtime`: support `-scheduler=none` on most platforms
|
|
- `runtime`: run package initialization in the main goroutine
|
|
- `runtime`: export `malloc` / `free` for use from C
|
|
- `runtime`: add garbage collector that uses an external allocator
|
|
- `runtime`: scan callee-saved registers while marking the stack
|
|
- `runtime`: remove recursion from conservative GC
|
|
- `runtime`: fix blocking select on nil channel
|
|
- `runtime/volatile`: include `ReplaceBits` method
|
|
- `sync`: implement trivial `sync.Map`
|
|
* **targets**
|
|
- `arm`: use `-fomit-frame-pointer`
|
|
- `atmega1284`: support this chip for testing purposes
|
|
- `atsamd51`: make QSPI available on all boards
|
|
- `atsamd51`: add support for ADC1
|
|
- `atsamd51`: use new interrupt registration in UART code
|
|
- `attiny`: clean up pin definitions
|
|
- `avr`: use the correct RAM start address
|
|
- `avr`: pass the correct `-mmcu` flag to the linker
|
|
- `avr`: add support for tasks scheduler (disabled by default)
|
|
- `avr`: fix linker problem with overlapping program/data areas
|
|
- `nrf`: fix typo in pin configuration options
|
|
- `nrf`: add lib/nrfx/mdk to include dirs
|
|
- `nrf52840`: implement USB-CDC
|
|
- `riscv`: implement VirtIO target and add RISC-V integration test
|
|
- `riscv`: add I2C support for the HiFive1 rev B board
|
|
- `stm32`: refactor GPIO pin handling
|
|
- `stm32`: refactor UART code
|
|
- `stm32f4`: add SPI
|
|
- `wasm`: support Go 1.14 (breaking previous versions)
|
|
- `wasm`: support `syscall/js.CopyBytesToJS`
|
|
- `wasm`: sync polyfills from Go 1.14.
|
|
* **boards**
|
|
- `arduino-mega2560`: add the Arduino Mega 2560
|
|
- `clue-alpha`: add the Adafruit CLUE Alpha
|
|
- `gameboy-advance`: enable debugging with GDB
|
|
- `particle-argon`: add the Particle Argon board
|
|
- `particle-boron`: add the Particle Boron board
|
|
- `particle-xenon`: add the Particle Xenon board
|
|
- `reelboard`: add `reelboard-s140v7` SoftDevice target
|
|
|
|
0.12.0
|
|
---
|
|
* **command line**
|
|
- add initial FreeBSD support
|
|
- remove getting a serial port in gdb subcommand
|
|
- add support for debugging through JLinkGDBServer
|
|
- fix CGo when cross compiling
|
|
- remove default port check for Digispark as micronucleus communicates directly using HID
|
|
- differentiate between various serial/USB error messages
|
|
* **builder**
|
|
- improve detection of Clang headers
|
|
* **compiler**
|
|
- fix assertion on empty interface
|
|
- don't crash when encountering `types.Invalid`
|
|
- revise defer to use heap allocations when running a variable number of times
|
|
- improve error messages for failed imports
|
|
- improve "function redeclared" error
|
|
- add globaldce pass to start of optimization pipeline
|
|
- add support for debugging globals
|
|
- implement RISC-V CSR operations as intrinsics
|
|
- add support for CGO_ENABLED environment variable
|
|
- do not emit debug info for extern globals (bugfix)
|
|
- add support for interrupts
|
|
- implement maps for arbitrary keys
|
|
- interp: error location for "unknown GEP" error
|
|
- wasm-abi: create temporary allocas in the entry block
|
|
* **cgo**
|
|
- add support for symbols in `#define`
|
|
- fix a bug in number tokenization
|
|
* **standard library**
|
|
- `machine`: avoid bytes package in USB logic
|
|
- `runtime`: fix external address declarations
|
|
- `runtime`: provide implementation for `internal/bytealg.IndexByte`
|
|
* **targets**
|
|
- `atsamd51`: fix volatile usage
|
|
- `atsamd51`: fix ADC, updating to 12-bits precision
|
|
- `atsamd51`: refactor SPI pin configuration to only look at pin numbers
|
|
- `atsamd51`: switch UART to use new pin configuration
|
|
- `atsamd51`: fix obvious bug in I2C code
|
|
- `atsamd51`: use only the necessary UART interrupts
|
|
- `atsamd51`: refactor I2C pin handling to auto-detect pin mode
|
|
- `avr`: use a garbage collector
|
|
- `fe310`: use CLINT peripheral for timekeeping
|
|
- `fe310`: add support for PLIC interrupts
|
|
- `fe310`: implement UART receive interrupts
|
|
- `riscv`: support sleeping in QEMU
|
|
- `riscv`: add bare-bones interrupt support
|
|
- `riscv`: print exception PC and code
|
|
- `wasm`: implement memcpy and memset
|
|
- `wasm`: include wasi-libc
|
|
- `wasm`: use wasi ABI for basic startup/stdout
|
|
* **boards**
|
|
- `arduino`: make avrdude command line compatible with Windows
|
|
- `arduino-nano`: add this board
|
|
- `arduino-nano33`: fix UART1 and UART2
|
|
- `circuitplay-bluefruit`: add this board
|
|
- `digispark`: add clock speed and pin mappings
|
|
- `gameboy-advance`: include compiler-rt in build
|
|
- `gameboy-advance`: implement interrupt handler
|
|
- `hifive1b`: add support for gdb subcommand
|
|
- `pyportal`: add this board
|
|
- `pyportal`: remove manual SPI pin mapping as now handled by default
|
|
|
|
|
|
0.11.0
|
|
---
|
|
* **command line**
|
|
- add support for QEMU in `gdb` subcommand
|
|
- use builtin Clang when building statically, dropping the clang-9 dependency
|
|
- search for default serial port on both macOS and Linux
|
|
- windows: support `tinygo flash` directly by using win32 wmi
|
|
* **compiler**
|
|
- add location information to the IR checker
|
|
- make reflection sidetables constant globals
|
|
- improve error locations in goroutine lowering
|
|
- interp: improve support for maps with string keys
|
|
- interp: add runtime fallback for mapassign operations
|
|
* **standard library**
|
|
- `machine`: add support for `SPI.Tx()` on play.tinygo.org
|
|
- `machine`: rename `CPU_FREQUENCY` to `CPUFrequency()`
|
|
* **targets**
|
|
- `adafruit-pybadge`: add Adafruit Pybadge
|
|
- `arduino-nano33`: allow simulation on play.tinygo.org
|
|
- `arduino-nano33`: fix default SPI pin numbers to be D13/D11/D12
|
|
- `circuitplay-express`: allow simulation on play.tinygo.org
|
|
- `hifive1-qemu`: add target for testing RISC-V bare metal in QEMU
|
|
- `riscv`: fix heap corruption due to changes in LLVM 9
|
|
- `riscv`: add support for compiler-rt
|
|
- `qemu`: rename to `cortex-m-qemu`
|
|
|
|
0.10.0
|
|
---
|
|
* **command line**
|
|
- halt GDB after flashing with `gdb` subcommand
|
|
- fix a crash when using `-ocd-output`
|
|
- add `info` subcommand
|
|
- add `-programmer` flag
|
|
* **builder**
|
|
- macos: use llvm@8 instead of just llvm in paths
|
|
- add `linkerscript` key to target JSON files
|
|
- write a symbol table when writing out the compiler-rt lib
|
|
- make Clang header detection more robust
|
|
- switch to LLVM 9
|
|
* **compiler**
|
|
- fix interface miscompilation with reflect
|
|
- fix miscompile of static goroutine calls to closures
|
|
- fix `todo: store` panic
|
|
- fix incorrect starting value for optimized allocations in a loop
|
|
- optimize coroutines on non-Cortex-M targets
|
|
- fix crash for programs which have heap allocations but never hit the GC
|
|
- add support for async interface calls
|
|
- fix inserting non-const values in a const global
|
|
- interp: improve error reporting
|
|
- interp: implement comparing ptrtoint to 0
|
|
* **cgo**
|
|
- improve diagnostics
|
|
- implement the constant parser (for `#define`) as a real parser
|
|
- rename reserved field names such as `type`
|
|
- avoid `"unsafe" imported but not used` error
|
|
- include all enums in the CGo Go AST
|
|
- add support for nested structs and unions
|
|
- implement `#cgo CFLAGS`
|
|
* **standard library**
|
|
- `reflect`: add implementation of array alignment
|
|
- `runtime`: improve scheduler performance when no goroutines are queued
|
|
- `runtime`: add blocking select
|
|
- `runtime`: implement interface equality in non-trivial cases
|
|
- `runtime`: add AdjustTimeOffset to update current time
|
|
- `runtime`: only implement CountString for required platforms
|
|
- `runtime`: use MSP/PSP registers for scheduling on Cortex-M
|
|
* **targets**
|
|
- `arm`: add system timer registers
|
|
- `atmega`: add port C GPIO support
|
|
- `atsamd21`: correct handling of pins >= 32
|
|
- `atsamd21`: i2s initialization fixes
|
|
- `atsamd51`: fix clock init code
|
|
- `atsamd51`: correct initialization for RTC
|
|
- `atsamd51`: fix pin function selection
|
|
- `atsamd51`: pin method cleanup
|
|
- `atsamd51`: allow setting pin mode for each of the SPI pins
|
|
- `atsamd51`: correct channel init and pin map for ADC based on ItsyBitsy-M4
|
|
- `feather-m4`: add Adafruit Feather M4 board
|
|
- `hifive1b`: add support for SPI1
|
|
- `hifive1b`: fix compiling in simulation
|
|
- `linux`: fix time on arm32
|
|
- `metro-m4`: add support for Adafruit Metro M4 Express Airlift board
|
|
- `metro-m4`: fixes for UART2
|
|
- `pinetime-devkit0`: add support for the PineTime dev kit
|
|
- `x9pro`: add support for this smartwatch
|
|
- `pca10040-s132v6`: add support for SoftDevice
|
|
- `pca10056-s140v7`: add support for SoftDevice
|
|
- `arduino-nano33`: added SPI1 connected to NINA-W102 chip on Arduino Nano 33 IOT
|
|
|
|
0.9.0
|
|
---
|
|
* **command line**
|
|
- implement 1200-baud UART bootloader reset when flashing boards that support
|
|
it
|
|
- flash using mass-storage device for boards that support it
|
|
- implement `tinygo env`
|
|
- add support for Windows (but not yet producing Windows binaries)
|
|
- add Go version to `tinygo env`
|
|
- update SVD files for up-to-date peripheral interfaces
|
|
* **compiler**
|
|
- add `//go:align` pragma
|
|
- fix bug related to type aliases
|
|
- add support for buffered channels
|
|
- remove incorrect reflect optimization
|
|
- implement copying slices in init interpretation
|
|
- add support for constant indices with a named type
|
|
- add support for recursive types like linked lists
|
|
- fix miscompile of function nil panics
|
|
- fix bug related to goroutines
|
|
* **standard library**
|
|
- `machine`: do not check for nil slices in `SPI.Tx`
|
|
- `reflectlite`: add support for Go 1.13
|
|
- `runtime`: implement `internal/bytealg.CountString`
|
|
- `sync`: properly handle nil `New` func in `sync.Pool`
|
|
* **targets**
|
|
- `arduino`: fix .bss section initialization
|
|
- `fe310`: implement `Pin.Get`
|
|
- `gameboy-advance`: support directly outputting .gba files
|
|
- `samd`: reduce code size by avoiding reflection
|
|
- `samd21`: do not hardcode pin numbers for peripherals
|
|
- `stm32f103`: avoid issue with `time.Sleep` less than 200µs
|
|
|
|
0.8.0
|
|
---
|
|
* **command line**
|
|
- fix parsing of beta Go versions
|
|
- check the major/minor installed version of Go before compiling
|
|
- validate `-target` flag better to not panic on an invalid target
|
|
* **compiler**
|
|
- implement full slice expression: `s[:2:4]`
|
|
- fix a crash when storing a linked list in an interface
|
|
- fix comparing struct types by making type IDs more unique
|
|
- fix some bugs in IR generation
|
|
- add support for linked lists in reflect data
|
|
- implement `[]rune` to string conversion
|
|
- implement support for `go` on func values
|
|
* **standard library**
|
|
- `reflect`: add support for named types
|
|
- `reflect`: add support for `t.Bits()`
|
|
- `reflect`: add basic support for `t.AssignableTo()`
|
|
- `reflect`: implement `t.Align()`
|
|
- `reflect`: add support for struct types
|
|
- `reflect`: fix bug in `v.IsNil` and `v.Pointer` for addressable values
|
|
- `reflect`: implement support for array types
|
|
- `reflect`: implement `t.Comparable()`
|
|
- `runtime`: implement stack-based scheduler
|
|
- `runtime`: fix bug in the sleep queue of the scheduler
|
|
- `runtime`: implement `memcpy` for Cortex-M
|
|
- `testing`: implement stub `testing.B` struct
|
|
- `testing`: add common test logging methods such as Errorf/Fatalf/Printf
|
|
* **targets**
|
|
- `386`: add support for linux/386 syscalls
|
|
- `atsamd21`: make SPI pins configurable so that multiple SPI ports can be
|
|
used
|
|
- `atsamd21`: correct issue with invalid first reading coming from ADC
|
|
- `atsamd21`: add support for reset-to-bootloader using 1200baud over USB-CDC
|
|
- `atsamd21`: make pin selection more flexible for peripherals
|
|
- `atsamd21`: fix minimum delay in `time.Sleep`
|
|
- `atsamd51`: fix minimum delay in `time.Sleep`
|
|
- `nrf`: improve SPI write-only speed, by making use of double buffering
|
|
- `stm32f103`: fix SPI frequency selection
|
|
- `stm32f103`: add machine.Pin.Get method for reading GPIO values
|
|
- `stm32f103`: allow board specific UART usage
|
|
- `nucleo-f103rb`: add support for NUCLEO-F103RB board
|
|
- `itsybitsy-m4`: add support for this board with a SAMD51 family chip
|
|
- `cortex-m`: add support for `arm.SystemReset()`
|
|
- `gameboy-advance`: add initial support for the GameBoy Advance
|
|
- `wasm`: add `//go:wasm-module` magic comment to set the wasm module name
|
|
- `wasm`: add syscall/js.valueSetIndex support
|
|
- `wasm`: add syscall/js.valueInvoke support
|
|
|
|
0.7.1
|
|
---
|
|
* **targets**
|
|
- `atsamd21`: add support for the `-port` flag in the flash subcommand
|
|
|
|
0.7.0
|
|
---
|
|
* **command line**
|
|
- try more locations to find Clang built-in headers
|
|
- add support for `tinygo test`
|
|
- build current directory if no package is specified
|
|
- support custom .json target spec with `-target` flag
|
|
- use zversion.go to detect version of GOROOT version
|
|
- make initial heap size configurable for some targets (currently WebAssembly
|
|
only)
|
|
* **cgo**
|
|
- add support for bitfields using generated getters and setters
|
|
- add support for anonymous structs
|
|
* **compiler**
|
|
- show an error instead of panicking on duplicate function definitions
|
|
- allow packages like github.com/tinygo-org/tinygo/src/\* by aliasing it
|
|
- remove `//go:volatile` support
|
|
It has been replaced with the runtime/volatile package.
|
|
- allow pointers in map keys
|
|
- support non-constant syscall numbers
|
|
- implement non-blocking selects
|
|
- add support for the `-tags` flag
|
|
- add support for `string` to `[]rune` conversion
|
|
- implement a portable conservative garbage collector (with support for wasm)
|
|
- add the `//go:noinline` pragma
|
|
* **standard library**
|
|
- `os`: add `os.Exit` and `syscall.Exit`
|
|
- `os`: add several stubs
|
|
- `runtime`: fix heap corruption in conservative GC
|
|
- `runtime`: add support for math intrinsics where supported, massively
|
|
speeding up some benchmarks
|
|
- `testing`: add basic support for testing
|
|
* **targets**
|
|
- add support for a generic target that calls `__tinygo_*` functions for
|
|
peripheral access
|
|
- `arduino-nano33`: add support for this board
|
|
- `hifive1`: add support for this RISC-V board
|
|
- `reelboard`: add e-paper pins
|
|
- `reelboard`: add `PowerSupplyActive` to enable voltage for on-board devices
|
|
- `wasm`: put the stack at the start of linear memory, to detect stack
|
|
overflows
|
|
|
|
0.6.0
|
|
---
|
|
* **command line**
|
|
- some portability improvements
|
|
- make `$GOROOT` more robust and configurable
|
|
- check for Clang at the Homebrew install location as fallback
|
|
* **compiler driver**
|
|
- support multiple variations of LLVM commands, for non-Debian distributions
|
|
* **compiler**
|
|
- improve code quality in multiple ways
|
|
- make panic configurable, adding trap on panic
|
|
- refactor many internal parts of the compiler
|
|
- print all errors encountered during compilation
|
|
- implement calling function values of a named type
|
|
- implement returning values from blocking functions
|
|
- allow larger-than-int values to be sent across a channel
|
|
- implement complex arithmetic
|
|
- improve hashmap support
|
|
- add debuginfo for function arguments
|
|
- insert nil checks on stores (increasing code size)
|
|
- implement volatile operations as compiler builtins
|
|
- add `//go:inline` pragma
|
|
- add build tags for the Go stdlib version
|
|
* **cgo**
|
|
- implement `char`, `enum` and `void*` types
|
|
- support `#include` for builtin headers
|
|
- improve typedef/struct/enum support
|
|
- only include symbols that are necessary, for broader support
|
|
- mark external function args as `nocapture`
|
|
- implement support for some `#define` constants
|
|
- implement support for multiple CGo files in a single package
|
|
- **standard library**
|
|
- `machine`: remove microbit matrix (moved to drivers repository)
|
|
- `machine`: refactor pins to use `Pin` type instead of `GPIO`
|
|
- `runtime`: print more interface types on panic, including `error`
|
|
* **targets**
|
|
- `arm`: print an error on HardFault (including stack overflows)
|
|
- `atsamd21`: fix a bug in the ADC peripheral
|
|
- `atsamd21`: add support for I2S
|
|
- `feather-m0`: add support for this board
|
|
- `nrf51`: fix a bug in I2C
|
|
- `stm32f103xx`: fix a bug in I2C
|
|
- `syscall`: implement `Exit` on unix
|
|
- `trinket-m0`: add support for this board
|
|
- `wasm`: make _main_ example smaller
|
|
- `wasm`: don't cache wasm file in the server, for ease of debugging
|
|
- `wasm`: work around bug #41508 that caused a deadlock while linking
|
|
- `wasm`: add support for `js.FuncOf`
|
|
|
|
0.5.0
|
|
---
|
|
- **compiler driver**
|
|
- use `wasm-ld` instead of `wasm-ld-8` on macOS
|
|
- drop dependency on `llvm-ar`
|
|
- fix linker script includes when running outside `TINYGOROOT`
|
|
- **compiler**
|
|
- switch to LLVM 8
|
|
- add support for the Go 1.12 standard library (Go 1.11 is still supported)
|
|
- work around lack of escape analysis due to nil checks
|
|
- implement casting named structs and pointers to them
|
|
- fix int casting to use the source signedness
|
|
- fix some bugs around `make([]T, …)` with uncommon index types
|
|
- some other optimizations
|
|
- support interface asserts in interp for "math/rand" support
|
|
- resolve all func value targets at compile time (wasm-only at the moment)
|
|
- **cgo**
|
|
- improve diagnostics
|
|
- implement C `struct`, `union`, and arrays
|
|
- fix CGo-related crash in libclang
|
|
- implement `C.struct_` types
|
|
- **targets**
|
|
- all baremetal: pretend to be linux/arm instead of js/wasm
|
|
- `avr`: improve `uintptr` support
|
|
- `cortexm`: implement memmove intrinsic generated by LLVM
|
|
- `cortexm`: use the lld linker instead of `arm-none-eabi-ld`
|
|
- `darwin`: use custom syscall package that links to libSystem.dylib
|
|
- `microbit`: add blink example
|
|
- `samd21`: support I2C1
|
|
- `samd21`: machine/atsamd21: correct pad/pin handling when using both UART
|
|
and USBCDC interfaces at same time
|
|
- `stm32f4discovery`: add support for this board
|
|
- `wasm`: support async func values
|
|
- `wasm`: improve documentation and add extra example
|
|
|
|
0.4.1
|
|
---
|
|
- **compiler**
|
|
- fix `objcopy` replacement to include the .data section in the firmware image
|
|
- use `llvm-ar-7` on Linux to fix the Docker image
|
|
|
|
0.4.0
|
|
---
|
|
- **compiler**
|
|
- switch to the hardfloat ABI on ARM, which is more widely used
|
|
- avoid a dependency on `objcopy` (`arm-none-eabi-objcopy` etc.)
|
|
- fix a bug in `make([]T, n)` where `n` is 64-bits on a 32-bit platform
|
|
- adapt to a change in the AVR backend in LLVM 8
|
|
- directly support the .uf2 firmware format as used on Adafruit boards
|
|
- fix a bug when calling `panic()` at init time outside of the main package
|
|
- implement nil checks, which results in a ~5% increase in code size
|
|
- inline slice bounds checking, which results in a ~1% decrease in code size
|
|
- **targets**
|
|
- `samd21`: fix a bug in port B pins
|
|
- `samd21`: implement SPI peripheral
|
|
- `samd21`: implement ADC peripheral
|
|
- `stm32`: fix a bug in timekeeping
|
|
- `wasm`: fix a bug in `wasm_exec.js` that caused corruption in linear memory
|
|
when running on Node.js.
|
|
|
|
0.3.0
|
|
---
|
|
- **compiler**
|
|
- remove old `-initinterp` flag
|
|
- add support for macOS
|
|
- **cgo**
|
|
- add support for bool/float/complex types
|
|
- **standard library**
|
|
- `device/arm`: add support to disable/enable hardware interrupts
|
|
- `machine`: add CPU frequency for nrf-based boards
|
|
- `syscall`: add support for darwin/amd64
|
|
- **targets**
|
|
- `circuitplay_express`: add support for this board
|
|
- `microbit`: add regular pin constants
|
|
- `samd21`: fix time function for goroutine support
|
|
- `samd21`: add support for USB-CDC (serial over USB)
|
|
- `samd21`: add support for pins in port B
|
|
- `samd21`: add support for pullup and pulldown pins
|
|
- `wasm`: add support for Safari in example
|
|
|
|
|
|
0.2.0
|
|
---
|
|
- **command line**
|
|
- add version subcommand
|
|
- **compiler**
|
|
- fix a bug in floating point comparisons with NaN values
|
|
- fix a bug when calling `panic` in package initialization code
|
|
- add support for comparing `complex64` and `complex128`
|
|
- **cgo**
|
|
- add support for external globals
|
|
- add support for pointers and function pointers
|
|
- **standard library**
|
|
- `fmt`: initial support, `fmt.Println` works
|
|
- `math`: support for most/all functions
|
|
- `os`: initial support (only stdin/stdout/stderr)
|
|
- `reflect`: initial support
|
|
- `syscall`: add support for amd64, arm, and arm64
|