From 1798cac7a8b3331a277da1f106752ce0a34f8937 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 8 Jul 2021 19:25:55 -0700 Subject: runtime: remove direct assignments to memory locations PR bootstrap/101374 They cause a warning with the updated GCC -Warray-bounds option. Replace them with calls to abort, which for our purposes is fine. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/333409 --- libgo/runtime/proc.c | 4 ++-- libgo/runtime/runtime_c.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'libgo/runtime') diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c index 38bf7a6..3a30748 100644 --- a/libgo/runtime/proc.c +++ b/libgo/runtime/proc.c @@ -594,7 +594,7 @@ runtime_mstart(void *arg) gp->entry = nil; gp->param = nil; __builtin_call_with_static_chain(pfn(gp1), fv); - *(int*)0x21 = 0x21; + abort(); } if(mp->exiting) { @@ -662,7 +662,7 @@ setGContext(void) gp->entry = nil; gp->param = nil; __builtin_call_with_static_chain(pfn(gp1), fv); - *(int*)0x22 = 0x22; + abort(); } } diff --git a/libgo/runtime/runtime_c.c b/libgo/runtime/runtime_c.c index 18222c1..bc920a5 100644 --- a/libgo/runtime/runtime_c.c +++ b/libgo/runtime/runtime_c.c @@ -116,7 +116,7 @@ runtime_signalstack(byte *p, uintptr n) if(p == nil) st.ss_flags = SS_DISABLE; if(sigaltstack(&st, nil) < 0) - *(int *)0xf1 = 0xf1; + abort(); } int32 go_open(char *, int32, int32) -- cgit v1.1 From c5b21c3f4c17b0649155035d2f9aa97b2da8a813 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 30 Jul 2021 14:28:58 -0700 Subject: libgo: update to Go1.17rc2 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/341629 --- libgo/runtime/go-now.c | 4 +-- libgo/runtime/runtime_c.c | 23 ++++++++++++++++- libgo/runtime/stack.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 88 insertions(+), 4 deletions(-) (limited to 'libgo/runtime') diff --git a/libgo/runtime/go-now.c b/libgo/runtime/go-now.c index 1c02e52..e1dcd18 100644 --- a/libgo/runtime/go-now.c +++ b/libgo/runtime/go-now.c @@ -8,7 +8,7 @@ #include "runtime.h" -// Return current time. This is the implementation of time.walltime1(). +// Return current time. This is the implementation of runtime.walltime(). struct walltime_ret { @@ -16,7 +16,7 @@ struct walltime_ret int32_t nsec; }; -struct walltime_ret now(void) __asm__ (GOSYM_PREFIX "runtime.walltime1") +struct walltime_ret now(void) __asm__ (GOSYM_PREFIX "runtime.walltime") __attribute__ ((no_split_stack)); struct walltime_ret diff --git a/libgo/runtime/runtime_c.c b/libgo/runtime/runtime_c.c index bc920a5..f92bdd4 100644 --- a/libgo/runtime/runtime_c.c +++ b/libgo/runtime/runtime_c.c @@ -199,10 +199,13 @@ getEnd() uintptr getText(void) __asm__ (GOSYM_PREFIX "runtime.getText"); +extern void main_main(void*) + __asm__(GOSYM_PREFIX "main.main"); + uintptr getText(void) { - return (uintptr)(const void *)(getText); + return (uintptr)(const void *)(main_main); } // Return the end of the text segment, assumed to come after the @@ -224,6 +227,24 @@ getEtext(void) return (uintptr)(p); } +// Return the start of the BSS section. + +uintptr getBSS(void) + __asm__ (GOSYM_PREFIX "runtime.getBSS"); + +uintptr +getBSS(void) +{ + const void *p; + + p = __edata; + if (p == NULL) + p = _edata; + if (p == NULL) + p = __bss_start; + return (uintptr)(p); +} + // CPU-specific initialization. // Fetch CPUID info on x86. diff --git a/libgo/runtime/stack.c b/libgo/runtime/stack.c index c78f0c4..0c0c30e 100644 --- a/libgo/runtime/stack.c +++ b/libgo/runtime/stack.c @@ -23,7 +23,7 @@ bool runtime_usestackmaps; #pragma GCC optimize ("-fno-optimize-sibling-calls") extern void scanstackblock(uintptr addr, uintptr size, void *gcw) - __asm__("runtime.scanstackblock"); + __asm__(GOSYM_PREFIX "runtime.scanstackblock"); static bool doscanstack1(G*, void*) __attribute__ ((noinline)); @@ -125,3 +125,66 @@ static bool doscanstack1(G *gp, void *gcw) { #endif return true; } + +extern bool onCurrentStack(uintptr p) + __asm__(GOSYM_PREFIX "runtime.onCurrentStack"); + +bool onCurrentStack(uintptr p) +{ +#ifdef USING_SPLIT_STACK + + void* sp; + size_t spsize; + void* next_segment; + void* next_sp; + void* initial_sp; + + sp = __splitstack_find(nil, nil, &spsize, &next_segment, &next_sp, + &initial_sp); + while (sp != nil) { + if (p >= (uintptr)(sp) && p < (uintptr)(sp) + spsize) { + return true; + } + sp = __splitstack_find(next_segment, next_sp, &spsize, + &next_segment, &next_sp, &initial_sp); + } + return false; + +#else + + G* gp; + byte* bottom; + byte* top; + byte* temp; + byte* nextsp2; + byte* initialsp2; + + gp = runtime_g(); + bottom = (byte*)(&p); + top = (byte*)(void*)(gp->gcinitialsp) + gp->gcstacksize; + if ((uintptr)(top) < (uintptr)(bottom)) { + temp = top; + top = bottom; + bottom = temp; + } + if (p >= (uintptr)(bottom) && p < (uintptr)(top)) { + return true; + } + + nextsp2 = secondary_stack_pointer(); + if (nextsp2 != nil) { + initialsp2 = (byte*)(void*)(gp->gcinitialsp2); + if (uintptr(initialsp2) < uintptr(nextsp2)) { + temp = initialsp2; + initialsp2 = nextsp2; + nextsp2 = temp; + } + if (p >= (uintptr)(nextsp2) && p < (uintptr)(initialsp2)) { + return true; + } + } + + return false; + +#endif +} -- cgit v1.1 From e5c00544cce1feb2c8c4e9aad766315d389c69c4 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 13 Aug 2021 10:15:45 -0700 Subject: runtime: use C cast syntax in stack.c Didn't notice earlier because this code is only used on systems that do not support -fsplit-stack. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/342051 --- libgo/runtime/stack.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libgo/runtime') diff --git a/libgo/runtime/stack.c b/libgo/runtime/stack.c index 0c0c30e..65e8fa3 100644 --- a/libgo/runtime/stack.c +++ b/libgo/runtime/stack.c @@ -174,7 +174,7 @@ bool onCurrentStack(uintptr p) nextsp2 = secondary_stack_pointer(); if (nextsp2 != nil) { initialsp2 = (byte*)(void*)(gp->gcinitialsp2); - if (uintptr(initialsp2) < uintptr(nextsp2)) { + if ((uintptr)(initialsp2) < (uintptr)(nextsp2)) { temp = initialsp2; initialsp2 = nextsp2; nextsp2 = temp; -- cgit v1.1