Looks like apples llvm is not based on master branch.

https://news.ycombinator.com/item?id=16545037


-------- Ursprüngliche Nachricht --------
Von: Frederic Lecaille <flecai...@haproxy.com>
Gesendet: 14. Februar 2019 16:13:01 MEZ
An: Patrick Hemmer <hapr...@stormcloud9.net>
CC: Olivier Houchard <ohouch...@haproxy.com>, Aleksandar Lazic 
<al-hapr...@none.at>, haproxy@formilux.org
Betreff: Re: Compilation fails on OS-X

On 2/14/19 3:12 PM, Patrick Hemmer wrote:
> 
> 
> On 2019/2/14 08:20, Frederic Lecaille wrote:
>> On 2/14/19 1:32 PM, Frederic Lecaille wrote:
>>> On 2/13/19 7:30 PM, Patrick Hemmer wrote:
>>>>
>>>>
>>>> On 2019/2/13 10:29, Olivier Houchard wrote:
>>>>> Hi Patrick,
>>>>>
>>>>> On Wed, Feb 13, 2019 at 10:01:01AM -0500, Patrick Hemmer wrote:
>>>>>> On 2019/2/13 09:40, Aleksandar Lazic wrote:
>>>>>>> Am 13.02.2019 um 14:45 schrieb Patrick Hemmer:
>>>>>>>> Trying to compile haproxy on my local machine for testing 
>>>>>>>> purposes and am
>>>>>>>> running into the following:
>>>>>>> Which compiler do you use?
>>>>>>     # gcc -v
>>>>>>     Configured with: 
>>>>>> --prefix=/Applications/Xcode.app/Contents/Developer/usr 
>>>>>> --with-gxx-include-dir=/usr/include/c++/4.2.1
>>>>>>     Apple LLVM version 9.0.0 (clang-900.0.39.2)
>>>>>>     Target: x86_64-apple-darwin17.7.0
>>>>>>     Thread model: posix
>>>>>>     InstalledDir: 
>>>>>> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
>>>>>>  
>>>>>>
>>>>>>
>>>>>>>>          # make TARGET=osx
>>>>>>>>          src/proto_http.c:293:1: error: argument to 'section' 
>>>>>>>> attribute is not
>>>>>>>> valid for this target: mach-o section specifier requires a 
>>>>>>>> segment and section
>>>>>>>> separated by a comma
>>>>>>>>          DECLARE_POOL(pool_head_http_txn, "http_txn", 
>>>>>>>> sizeof(struct http_txn));
>>>>>>>>          ^
>>>>>>>>          include/common/memory.h:128:2: note: expanded from 
>>>>>>>> macro 'DECLARE_POOL'
>>>>>>>>                          REGISTER_POOL(&ptr, name, size)
>>>>>>>>                          ^
>>>>>>>>          include/common/memory.h:123:2: note: expanded from 
>>>>>>>> macro 'REGISTER_POOL'
>>>>>>>>                          INITCALL3(STG_POOL, 
>>>>>>>> create_pool_callback, (ptr), (name),
>>>>>>>> (size))
>>>>>>>>                          ^
>>>>>>>>          include/common/initcall.h:102:2: note: expanded from 
>>>>>>>> macro 'INITCALL3'
>>>>>>>>                          _DECLARE_INITCALL(stage, __LINE__, 
>>>>>>>> function, arg1, arg2,
>>>>>>>> arg3)
>>>>>>>>                          ^
>>>>>>>>          include/common/initcall.h:78:2: note: expanded from macro
>>>>>>>> '_DECLARE_INITCALL'
>>>>>>>> __DECLARE_INITCALL(__VA_ARGS__)
>>>>>>>>                          ^
>>>>>>>>          include/common/initcall.h:65:42: note: expanded from macro
>>>>>>>> '__DECLARE_INITCALL'
>>>>>>>> __attribute__((__used__,__section__("init_"#stg))) = \
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Issue occurs on master, and the 1.9 branch
>>>>>>>>
>>>>>>>> -Patrick
>>>>> Does the (totally untested, because I have no Mac to test) patch 
>>>>> works for
>>>>> you ?
>>>>
>>>> Unfortunately not. Just introduces a lot of new errors:
>>>>
>>>>
>>>>      In file included from src/ev_poll.c:22:
>>>>      In file included from include/common/hathreads.h:26:
>>>>      include/common/initcall.h:134:22: error: expected ')'
>>>>      DECLARE_INIT_SECTION(STG_PREPARE);
>>>>                                               ^
>>>>      include/common/initcall.h:134:1: note: to match this '('
>>>>      DECLARE_INIT_SECTION(STG_PREPARE);
>>>>      ^
>>>>      include/common/initcall.h:124:82: note: expanded from macro 
>>>> 'DECLARE_INIT_SECTION'
>>>>                      extern __attribute__((__weak__)) const struct 
>>>> initcall *__start_init_##stg __asm("section$start$__DATA$" stg); \
>>>> ^
>>>
>>> Try to use -E in place of -c option of your compiler to stop after 
>>> having preprocessed the code. Then have a look to how the code of 
>>> src/ev_poll.c was preprocessed.
>>>
>>> This should help.
>>>
>>> Fred.
>>
>> As this sounds to be a preprocessing issue, and to have a look to how 
>> the code is preprocessed for Apple we can invert the two #ifdef 
>> __APPLE__  condition of Olivier's patch to use the same preprocessor 
>> commands on a Linux system.
>>
>>
>> Here is the code after having preprocessed it:
>>
>>
>> # 134 "include/common/initcall.h"
>> extern __attribute__((__weak__)) const struct initcall 
>> *__start_init_STG_PREPARE __asm("section$start$__DATA$" STG_PREPARE); 
>> extern __attribute__((__weak__)) const struct initcall 
>> *__stop_init_STG_PREPARE __asm("section$end$__DATA$" STG_PREPARE);
>> extern __attribute__((__weak__)) const struct initcall 
>> *__start_init_STG_LOCK __asm("section$start$__DATA$" STG_LOCK); extern 
>> __attribute__((__weak__)) const struct initcall *__stop_init_STG_LOCK 
>> __asm("section$end$__DATA$" STG_LOCK);
>> extern __attribute__((__weak__)) const struct initcall 
>> *__start_init_STG_ALLOC __asm("section$start$__DATA$" STG_ALLOC); 
>> extern __attribute__((__weak__)) const struct initcall 
>> *__stop_init_STG_ALLOC __asm("section$end$__DATA$" STG_ALLOC);
>> extern __attribute__((__weak__)) const struct initcall 
>> *__start_init_STG_POOL __asm("section$start$__DATA$" STG_POOL); extern 
>> __attribute__((__weak__)) const struct initcall *__stop_init_STG_POOL 
>> __asm("section$end$__DATA$" STG_POOL);
>> extern __attribute__((__weak__)) const struct initcall 
>> *__start_init_STG_REGISTER __asm("section$start$__DATA$" 
>> STG_REGISTER); extern __attribute__((__weak__)) const struct initcall 
>> *__stop_init_STG_REGISTER __asm("section$end$__DATA$" STG_REGISTER);
>> extern __attribute__((__weak__)) const struct initcall 
>> *__start_init_STG_INIT __asm("section$start$__DATA$" STG_INIT); extern 
>> __attribute__((__weak__)) const struct initcall *__stop_init_STG_INIT 
>> __asm("section$end$__DATA$" STG_INIT);
>>
>>
>>
>> should be I guess
>>
>> extern __attribute__((__weak__)) const struct initcall 
>> *__start_init_STG_PREPARE __asm("section$start$__DATA$STG_PREPARE");
>>
>> etc.
>>
>>
>> and the compiler warns like this:
>>
>>
>> $ gcc -Iinclude -Iebtree -Wall -Wextra  -O2 -g -fno-strict-aliasing 
>> -Wdeclaration-after-statement -fwrapv -Wno-unused-label 
>> -Wno-sign-compare -Wno-unused-parameter -Wno-old-style-declaration 
>> -Wno-ignored-qualifiers -Wno-clobbered -Wno-missing-field-initializers 
>>  -Wtype-limits -Wshift-negative-value -Wshift-overflow=2 
>> -Wduplicated-cond -Wnull-dereference       -DCONFIG_HAP_LINUX_SPLICE 
>> -DTPROXY -DCONFIG_HAP_LINUX_TPROXY -DCONFIG_HAP_CRYPT -DNEED_CRYPT_H 
>> -DUSE_ZLIB  -DENABLE_POLL -DENABLE_EPOLL -DUSE_CPU_AFFINITY 
>> -DASSUME_SPLICE_WORKS -DUSE_ACCEPT4 -DNETFILTER -DUSE_THREAD 
>> -DUSE_OPENSSL  -DUSE_SYSCALL_FUTEX -DUSE_LUA -I/opt/local/include 
>> -DUSE_PCRE -I/usr/include 
>> -DCONFIG_HAPROXY_VERSION=\"2.0-dev0-85ab28-296\" 
>> -DCONFIG_HAPROXY_DATE=\"2019/02/14\" -c -o src/ev_poll.o src/ev_poll.c
>> In file included from include/common/hathreads.h:26:0,
>>                  from src/ev_poll.c:22:
>> include/common/initcall.h:134:22: error: expected ‘)’ before 
>> ‘STG_PREPARE’
>>  DECLARE_INIT_SECTION(STG_PREPARE);
>>                       ^
>> include/common/initcall.h:124:107: note: in definition of macro 
>> ‘DECLARE_INIT_SECTION’
>>   extern __attribute__((__weak__)) const struct initcall 
>> *__start_init_##stg __asm("section$start$__DATA$" stg); \
>>
>>                                    ^~~
>> include/common/initcall.h:134:22: error: expected ‘)’ before 
>> ‘STG_PREPARE’
>>  DECLARE_INIT_SECTION(STG_PREPARE);
>>
>> sounds similar to Patrick's issue.
>>
>>
>>
> Yes, that is the generated code I end up with.
> 
> Just fumbling around, but if I change the macro to stringize the arg:
>      extern __attribute__((__weak__)) const struct initcall 
> *__start_init_##stg __asm("section$start$__DATA$" #stg); \
>      extern __attribute__((__weak__)) const struct initcall 
> *__stop_init_##stg __asm("section$end$__DATA$" #stg)
> 
> I end up with:
>      src/hlua.c:8301:1: error: argument to 'section' attribute is not 
> valid for this target: mach-o section
>        specifier requires a section whose length is between 1 and 16 
> characters
> 
> So now it seems like it's just too long.

Or the section may be empty (size < 1) for the linker because not found...

So, this is perhaps only a naming issue: missing underscores characters 
before stg macro argument.

Try to compile such simple examples and find the naming for the sections:

https://stackoverflow.com/questions/17669593/how-to-get-a-pointer-to-a-binary-section-in-mac-os-x/22366882#22366882

or try do understand the llvm CPP code source :

https://github.com/llvm-mirror/llvm/blob/master/lib/MC/MCSectionMachO.cpp

especially

https://github.com/llvm-mirror/llvm/blob/master/lib/MC/MCSectionMachO.cpp#L193

I did not find this naming convention.


Fred.




Reply via email to