diff options
| author | Andrew Wilkins <axwalk@gmail.com> | 2016-03-15 05:36:43 +0000 |
|---|---|---|
| committer | Andrew Wilkins <axwalk@gmail.com> | 2016-03-15 05:36:43 +0000 |
| commit | 6436a4abd7a2f3a60b230453295dba199d8a59c3 (patch) | |
| tree | 125aef80fc2cf46c5d1758a8ece1fde14e7b13fd /llgo/third_party/gofrontend/libgo/runtime/runtime.c | |
| parent | 36761bf92427846ce40fdd849615732c852e44dd (diff) | |
| download | bcm5719-llvm-6436a4abd7a2f3a60b230453295dba199d8a59c3.tar.gz bcm5719-llvm-6436a4abd7a2f3a60b230453295dba199d8a59c3.zip | |
[llgo] Roll gofrontend forward
Switch gofrontend to using go.googlesource.com, and
update to 81eb6a3f425b2158c67ee32c0cc973a72ce9d6be.
There are various changes required to update to the
go 1.5 runtime:
typemap.go is changed to accommodate the change in representation for equal/hash algorithms, and the removal of the zero value/type.
CMakeLists.txt is updated to add the build tree to the package search path, so internal packages, which are not installed, are found.
various files changes due to removal of __go_new_nopointers; the same change as in D11863, but with NoUnwindAttribute added to the added runtime functions which are called with "callOnly".
minor cleanups in ssa.go while investigating issues with unwinding/panic handling.
Differential Revisision: http://reviews.llvm.org/D15188
llvm-svn: 263536
Diffstat (limited to 'llgo/third_party/gofrontend/libgo/runtime/runtime.c')
| -rw-r--r-- | llgo/third_party/gofrontend/libgo/runtime/runtime.c | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/llgo/third_party/gofrontend/libgo/runtime/runtime.c b/llgo/third_party/gofrontend/libgo/runtime/runtime.c index e3320356c47..be7ccbd6135 100644 --- a/llgo/third_party/gofrontend/libgo/runtime/runtime.c +++ b/llgo/third_party/gofrontend/libgo/runtime/runtime.c @@ -35,6 +35,7 @@ extern volatile intgo runtime_MemProfileRate int32 runtime_gotraceback(bool *crash) { + String s; const byte *p; uint32 x; @@ -44,15 +45,14 @@ runtime_gotraceback(bool *crash) return runtime_m()->traceback; x = runtime_atomicload(&traceback_cache); if(x == ~(uint32)0) { - p = runtime_getenv("GOTRACEBACK"); - if(p == nil) - p = (const byte*)""; - if(p[0] == '\0') + s = runtime_getenv("GOTRACEBACK"); + p = s.str; + if(s.len == 0) x = 1<<1; - else if(runtime_strcmp((const char *)p, "crash") == 0) + else if(s.len == 5 && runtime_strcmp((const char *)p, "crash") == 0) x = (2<<1) | 1; else - x = runtime_atoi(p)<<1; + x = runtime_atoi(p, s.len)<<1; runtime_atomicstore(&traceback_cache, x); } if(crash != nil) @@ -136,13 +136,15 @@ os_runtime_args() } int32 -runtime_atoi(const byte *p) +runtime_atoi(const byte *p, intgo len) { int32 n; n = 0; - while('0' <= *p && *p <= '9') + while(len > 0 && '0' <= *p && *p <= '9') { n = n*10 + *p++ - '0'; + len--; + } return n; } @@ -339,7 +341,9 @@ static struct { void runtime_parsedebugvars(void) { - const byte *p; + String s; + const byte *p, *pn; + intgo len; intgo i, n; bool tmp; @@ -352,24 +356,27 @@ runtime_parsedebugvars(void) traceback_cache = ~(uint32)0; runtime_gotraceback(&tmp); - p = runtime_getenv("GODEBUG"); - if(p == nil) + s = runtime_getenv("GODEBUG"); + if(s.len == 0) return; + p = s.str; + len = s.len; for(;;) { for(i=0; i<(intgo)nelem(dbgvar); i++) { n = runtime_findnull((const byte*)dbgvar[i].name); - if(runtime_mcmp(p, "memprofilerate", n) == 0 && p[n] == '=') + if(len > n && runtime_mcmp(p, "memprofilerate", n) == 0 && p[n] == '=') // Set the MemProfileRate directly since it // is an int, not int32, and should only lbe // set here if specified by GODEBUG - runtime_MemProfileRate = runtime_atoi(p+n+1); - else if(runtime_mcmp(p, dbgvar[i].name, n) == 0 && p[n] == '=') - *dbgvar[i].value = runtime_atoi(p+n+1); + runtime_MemProfileRate = runtime_atoi(p+n+1, len-(n+1)); + else if(len > n && runtime_mcmp(p, dbgvar[i].name, n) == 0 && p[n] == '=') + *dbgvar[i].value = runtime_atoi(p+n+1, len-(n+1)); } - p = (const byte *)runtime_strstr((const char *)p, ","); - if(p == nil) + pn = (const byte *)runtime_strstr((const char *)p, ","); + if(pn == nil || pn - p >= len) break; - p++; + len -= (pn - p) - 1; + p = pn + 1; } } |

