> On 9 Sep 2022, at 23:08, Jakub Jelinek <ja...@redhat.com> wrote:
> 
> On Fri, Sep 09, 2022 at 10:50:19PM +0200, Rainer Orth wrote:
>> Hi Jakub,
>> 
>>> On Wed, Aug 31, 2022 at 12:56:25PM +0200, Marcel Vollweiler wrote:
>>>> libgomp/ChangeLog:
>> [...]
>>>>    (initialize_env): Extended to parse the new syntax of environment
>>>>    variables.
>> 
>> this patch broke Darwin bootstrap:
>> 
>> Undefined symbols for architecture x86_64:
>>  "_environ", referenced from:
>>      _initialize_env in env.o
>> ld: symbol(s) not found for architecture x86_64
>> collect2: error: ld returned 1 exit status
>> make[5]: *** [libgomp.la] Error 1
>> 
>> This is documented in environ(7):
>> 
>>     Shared libraries and bundles don't have direct access to environ, which
>>     is only available to the loader ld(1) when a complete program is being
>>     linked.  The environment routines can still be used, but if direct access
>>     to environ is needed, the _NSGetEnviron() routine, defined in
>>     <crt_externs.h>, can be used to retrieve the address of environ at run-
>>     time.
>> 
>> The following patch/hack, taken from
>> libgfortran/intrinsics/execute_command_line.c, allows the link to
>> succeed.  Bootstrap still running...
> 
> My preference would be to introduce some new header for this, which would
> say define get_environ inline function, and define it as
> static inline char **
> get_environ (void)
> {
>  extern char **environ;
>  return environ;
> }
> in libgomp/config/posix/env.h
> and to that
> #include <crt_externs.h>
> 
> static inline char **
> get_environ (void)
> {
>  return *_NSGetEnviron ();
> }
> in libgomp/config/darwin/env.h
> That way it is easier to override it for other platforms if needed.

We already have such a header …
include/environ.h

Iain

Reply via email to