forked from tinygo-org/tinygo
-
Notifications
You must be signed in to change notification settings - Fork 0
merging dev and master #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This function is called from runtime.printitf, which is called from runtime._panic, and is therefore the leaf function of many call paths. This makes analyzing stack usage very difficult. Also forwarding printuint32 to printuint64 as it reduces code size in the few examples I've tested. Printing numbers is not often done so it doesn't matter if it's a bit slow (the serial connection is probably slower anyway).
Previously we used --sysroot to set the sysroot explicitly. Unfortunately, this flag is not used directly by Clang to set the include path (<sysroot>/include) but is instead interpreted by the toolchain code. This means that even when the toolchain is explicitly set (using the --sysroot parameter), it may still decide to use a different include path such as <sysroot>/usr/include (such as on baremetal aarch64). This commit uses the Clang-internal -internal-isystem flag which sets the include directory directly (as a system include path). This should be more robust. The reason the --sysroot parameter has so far worked is that all existing targets happened to add <sysroot>/include as an include path. The relevant Clang code is here: https://github.com/llvm/llvm-project/blob/release/9.x/clang/lib/Driver/Driver.cpp#L4693-L4739 So far, RISC-V is handled by RISCVToolchain, Cortex-M targets by BareMetal (which seems to be specific to ARM unlike what the name says) and aarch64 fell back to Generic_ELF.
This makes AsmFull more powerful (by supporting return values) and avoids a compiler builtin.
This finally fixes a TODO left in the code.
This commit fixes errors like the following:
inlinable function call in a function with debug info must have a !dbg location
call void @runtime.nilPanic(i8* undef, i8* null)
inlinable function call in a function with debug info must have a !dbg location
%24 = call fastcc %runtime._interface @"(*github.com/vugu/vugu/domrender.JSRenderer).render$1"(%"github.com/vugu/vugu.VGNode"** %19, i32 %22, i32 %23, i8* %15, i8* undef)
error: optimizations caused a verification failure
Not all instructions had a debug location, which apparently caused
issues for the inliner.
While adding some code to clear the Next field when popping from a task stack for safety reasons, the clear was placed outside of a nil pointer check. As a result, (*internal/task.Stack).Pop panicked when the Stack is empty.
…ound when not on default port Signed-off-by: deadprogram <ron@hybridgroup.com>
…hen flashing Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit changes pin numbering for atmega328 based boards (Uno, Nano) to use the standard format, where pin number is determined by the pin/port. Previously, pin numbers were based on what the Uno uses, which does not seem to have a clear pattern. One difference is that counting starts at port B, as there is no port A. So PB0 is 0, PB1 is 1… PC0 is 8. This commit also moves PWM code to the atmega328 file, as it may not be generic to all ATmega chips.
This allows applications to mount filesystems in the os package. This is useful for mounting external flash filesystems, for example.
We don't need it anymore since we use lld to link RISC-V binaries.
Previously it would trigger a nil pointer panic.
Previously, we implemented individual bytealg functions via linknaming, and had to update them every once in a while when we hit linker errors. Instead, this change reimplements the bytealg package in pure Go. If something is missing, it will cause a compiler error rather than a linker error. This is easier to test and maintain.
This also implements DisableInterrupts/EnableInterrupts for RISC-V, as those operations were needed to implement a few libcalls.
* machine/samd51: fix register access for interrupts pins in samd51
… flashing Signed-off-by: deadprogram <ron@hybridgroup.com>
Signed-off-by: deadprogram <ron@hybridgroup.com>
This line causes problems when installing software: apt-get complains that there are duplicate lines.
This version adds error handling for the DumpIntelHex method, and thus fixes a TODO comment.
* machine/samd51: standardize samd51 uart settings
* machine/wioterminal: add support for wioterminal board
The PLIC threshold value must be zeroed at startup to permit all interrupt priorities. Fixes tinygo-org#1128.
Previously it would return a `*scanner.Error`, which is not supported in the error printer of the main package. This can easily be fixed by making it a regular object (instead of a pointer).
There was what appears to be a race condition in the Tx function. While it would work fine in many cases, when there were interrupts (such as when using BLE), the function would just hang waiting for `EVENTS_READY` to arrive. I think what was happening was that the `spi.Bus.RXD.Get()` would start the next transfer, which would complete (and generate an event) before `EVENTS_READY` was reset to 0. The fix is easy: clear `EVENTS_READY` before doing something that can trigger an event. I believe I've seen this bug before on the PineTime but I couldn't find the issue back then.
This change adds support for `tinygo gdb` on the PCA10056. The board is normally flashed with the MSD programmer. Debugging needs a real debugger interface however, which is relatively simple by just adding the right OpenOCD configuration.
Previously, chansend and chanrecv allocated a heap object before blocking on a channel. This object was used to implement a linked list of goroutines blocked on the channel. The chansend and chanrecv now instead accept a buffer to store this object in as an argument. The compiler now creates a stack allocation for this object and passes it in.
Signed-off-by: deadprogram <ron@hybridgroup.com>
Clean up the go.mod and go.sum which have gotten a bit messy, and add an extra line to go.sum that keeps reappearing locally for some reason (so it seems important).
This is necessary to avoid a circular dependency between the device/avr and runtime/interrupts package in the next commit. It may be worth replacing existing calls like device/arm.Asm to device.Asm, to have a single place where these are defined.
This should cover all supported baremetal targets.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.