[prev in list] [next in list] [prev in thread] [next in thread] 

List:       hurd-bug
Subject:    Re: __executable_start
From:       Emilio Pozuelo Monfort <pochu27 () gmail ! com>
Date:       2013-05-26 16:15:30
Message-ID: 51A23522.6000306 () gmail ! com
[Download RAW message or body]

Hi,

On 26/05/13 16:38, Thomas Schwinge wrote:
> Hi!
>
> Re-submitting an oldie of Samuel's:
>
> On Sun, 24 Jun 2007 17:45:35 +0200, Samuel Thibault <samuel.thibault@ens-lyon.org> wrote:
>> - _start points on the first instruction, not on the elf header.
>>    __executable_start does point on the elf header.
>
>> --- sysdeps/mach/hurd/i386/init-first.c.orig	2007-06-23 19:27:14.000000000 +0000
>> +++ sysdeps/mach/hurd/i386/init-first.c	2007-06-23 21:41:40.000000000 +0000
>> @@ -116,14 +116,14 @@
>>         /* We may need to see our own phdrs, e.g. for TLS setup.
>>            Try the usual kludge to find the headers without help from
>>   	 the exec server.  */
>> -      extern const void _start;
>> -      const ElfW(Ehdr) *const ehdr = &_start;
>> +      extern const void __executable_start;
>> +      const ElfW(Ehdr) *const ehdr = &__executable_start;
>>         _dl_phdr = (ElfW(Phdr) *) ((const void *) ehdr + ehdr->e_phoff);
>>         _dl_phnum = ehdr->e_phnum;
>>         assert (ehdr->e_phentsize == sizeof (ElfW(Phdr)));
>
> This is, as far as I can tell, the only such usage of _start in glibc.
>
> OK to commit?
>
> 	* sysdeps/mach/hurd/i386/init-first.c (init1): Use
> 	__executable_start symbol intsead instead of _start.

Typo there, s/intsead//. Won't comment on the patch itself as I'm no ELF expert.

Cheers,
Emilio

>
> diff --git sysdeps/mach/hurd/i386/init-first.c sysdeps/mach/hurd/i386/init-first.c
> index fc3330c..7031ed4 100644
> --- sysdeps/mach/hurd/i386/init-first.c
> +++ sysdeps/mach/hurd/i386/init-first.c
> @@ -125,8 +125,8 @@ init1 (int argc, char *arg0, ...)
>             /* We may need to see our own phdrs, e.g. for TLS setup.
>                Try the usual kludge to find the headers without help from
>                the exec server.  */
> -          extern const void _start;
> -          const ElfW(Ehdr) *const ehdr = &_start;
> +          extern const void __executable_start;
> +          const ElfW(Ehdr) *const ehdr = &__executable_start;
>             _dl_phdr = (const void *) ehdr + ehdr->e_phoff;
>             _dl_phnum = ehdr->e_phnum;
>             assert (ehdr->e_phentsize == sizeof (ElfW(Phdr)));
>
>
> Grüße,
>   Thomas
>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic