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
This commit is contained in:
Ian Lance Taylor 2016-02-09 00:34:55 +00:00
parent 41798077bf
commit cc240aa7d1
4 changed files with 16 additions and 3 deletions

View File

@ -1,4 +1,4 @@
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.

View File

@ -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)
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 ();

View File

@ -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)
// 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)

View File

@ -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));