Looks like apples llvm is not based on master branch. https://news.ycombinator.com/item?id=16545037
-------- Ursprüngliche Nachricht -------- Von: Frederic Lecaille <[email protected]> Gesendet: 14. Februar 2019 16:13:01 MEZ An: Patrick Hemmer <[email protected]> CC: Olivier Houchard <[email protected]>, Aleksandar Lazic <[email protected]>, [email protected] 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.

