This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Need information about data and bss segment address access in cygwin


Thanks Cliff/Dave. I could not find the code where the dll data/bss
segments address are updated in cygwin. But in the fork code we are
doing a copy for all linked and loaded dlls data/bss segments by
giving the address as
for (dll *d = dlls.istart (DLL_LINK); d; d = dlls.inext ())
    {
      debug_printf ("copying data/bss of a linked dll");
      if (!fork_copy (pi, "linked dll data/bss", d->p.data_start, d->p.data_end,
						 d->p.bss_start, d->p.bss_end,
						 NULL))
	goto cleanup;
    }
and
 for (dll *d = dlls.istart (DLL_LOAD); d; d = dlls.inext ())
	{
	  debug_printf ("copying data/bss for a loaded dll");
	  if (!fork_copy (pi, "loaded dll data/bss", d->p.data_start, d->p.data_end,
						     d->p.bss_start, d->p.bss_end,
						     NULL))
	    goto cleanup;
	}

And also please let me know if there exist any document which gives
some idea about this.

Thanks
Sudha


On 1/20/06, Dave Korn <dave.korn@artimi.com> wrote:
> Cliff Hones wrote:
> > Sudhahar wrote:
> >> Thanks Dave your reply answered the question where they declared. But
> >> how does these variables get the segment address of data and bss for a
> >> running process to make a copy to the child process? This is the
> >> questions which is a puzzle to me.
> >
> > The linker places these variables at the start and end of the data and
> > bss segments.  The application can then find the addresses of the segments
> > by taking the address of the variables (eg &__data_start__).  They aren't
> > strictly variables in the C sense, inasmuch as trying to read or assign
> > to them may corrupt your application or cause a segmentation error.
>
>   Indeed; they aren't variables at all, they are merely symbols that point to
> whatever item of code or data happens to be at the start or end of the section
> concerned.
>
>   And the final part of the answer is that the linker also emits relocs
> against any references to their addresses, which are fixed up by the runtime
> loader at image-mapping time, and that's how they get the actual final real
> address at runtime.
>
> > Look in winsup/cygwin/lib/_cygwin_crt0_common.cc
>
>   Indeed.
>
>
>     cheers,
>       DaveK
> --
> Can't think of a witty .sigline today....
>
>
> --
> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
> Problem reports:       http://cygwin.com/problems.html
> Documentation:         http://cygwin.com/docs.html
> FAQ:                   http://cygwin.com/faq/
>
>

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]