Commit cc240aa7 by Ian Lance Taylor

re PR go/69357 (libgo refers to _end in a non-weak way)

	PR go/69537
    runtime: Don't refer to _end symbol in shared library.
    
    Fixes GCC PR 69357.
    
    Reviewed-on: https://go-review.googlesource.com/19362

From-SVN: r233235
parent 41798077
91833164072078a3fde7e9b05641ec3ed4a2f5d0 2ef5f1ca449b5cf07dbbd7b13a50910fb5567372
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -30,6 +30,11 @@ ...@@ -30,6 +30,11 @@
extern char **environ; extern char **environ;
/* A copy of _end that a shared library can reasonably refer to. */
uintptr __go_end;
extern byte _end[];
/* The main function. */ /* The main function. */
int int
...@@ -41,6 +46,7 @@ main (int argc, char **argv) ...@@ -41,6 +46,7 @@ main (int argc, char **argv)
return 0; return 0;
runtime_isstarted = true; runtime_isstarted = true;
__go_end = (uintptr)_end;
runtime_check (); runtime_check ();
runtime_args (argc, (byte **) argv); runtime_args (argc, (byte **) argv);
runtime_osinit (); runtime_osinit ();
......
...@@ -505,7 +505,8 @@ runtime_mallocinit(void) ...@@ -505,7 +505,8 @@ runtime_mallocinit(void)
{ {
byte *p, *p1; byte *p, *p1;
uintptr arena_size, bitmap_size, spans_size, p_size; uintptr arena_size, bitmap_size, spans_size, p_size;
extern byte _end[]; uintptr *pend;
uintptr end;
uintptr limit; uintptr limit;
uint64 i; uint64 i;
bool reserved; bool reserved;
...@@ -613,7 +614,12 @@ runtime_mallocinit(void) ...@@ -613,7 +614,12 @@ runtime_mallocinit(void)
// So adjust it upward a little bit ourselves: 1/4 MB to get // So adjust it upward a little bit ourselves: 1/4 MB to get
// away from the running binary image and then round up // away from the running binary image and then round up
// to a MB boundary. // to a MB boundary.
p = (byte*)ROUND((uintptr)_end + (1<<18), 1<<20);
end = 0;
pend = &__go_end;
if(pend != nil)
end = *pend;
p = (byte*)ROUND(end + (1<<18), 1<<20);
p_size = bitmap_size + spans_size + arena_size + PageSize; p_size = bitmap_size + spans_size + arena_size + PageSize;
p = runtime_SysReserve(p, p_size, &reserved); p = runtime_SysReserve(p, p_size, &reserved);
if(p == nil) if(p == nil)
......
...@@ -863,3 +863,4 @@ extern void _cgo_notify_runtime_init_done (void); ...@@ -863,3 +863,4 @@ extern void _cgo_notify_runtime_init_done (void);
extern _Bool runtime_iscgo; extern _Bool runtime_iscgo;
extern _Bool runtime_cgoHasExtraM; extern _Bool runtime_cgoHasExtraM;
extern Hchan *runtime_main_init_done; extern Hchan *runtime_main_init_done;
extern uintptr __go_end __attribute__ ((weak));
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment