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 ?
Thanks !
Olivier
>From 2f68108ae32a66782b4c7518f8830896732be64d Mon Sep 17 00:00:00 2001
From: Olivier Houchard <[email protected]>
Date: Wed, 13 Feb 2019 16:22:17 +0100
Subject: [PATCH] BUILD/MEDIUM: initcall: Fix build on MacOS.
MacOS syntax for sections is a bit different, so implement it.
This should be backported to 1.9.
---
include/common/initcall.h | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/include/common/initcall.h b/include/common/initcall.h
index 35d237fd..95e488ba 100644
--- a/include/common/initcall.h
+++ b/include/common/initcall.h
@@ -50,6 +50,12 @@ struct initcall {
void *arg3;
};
+#ifdef __APPLE__
+#define HA_SECTION(s) __section__("__DATA, " s)
+#else
+#define HA_SECTION(s) __section__((s))
+#endif
+
/* Declare a static variable in the init section dedicated to stage <stg>,
* with an element referencing function <function> and arguments <a1..a3>.
* <linenum> is needed to deduplicate entries created from a same file. The
@@ -62,7 +68,7 @@ struct initcall {
*/
#define __DECLARE_INITCALL(stg, linenum, function, a1, a2, a3) \
static const struct initcall *__initcb_##linenum \
- __attribute__((__used__,__section__("init_"#stg))) = \
+ __attribute__((__used__,HA_SECTION("init_"#stg))) = \
(stg < STG_SIZE) ? &(const struct initcall) { \
.fct = (void (*)(void *,void *,void *))function, \
.arg1 = (void *)(a1), \
@@ -113,9 +119,16 @@ struct initcall {
* empty. The corresponding sections must contain exclusively pointers to
* make sure each location may safely be visited by incrementing a pointer.
*/
+#ifdef __APPLE__
+#define DECLARE_INIT_SECTION(stg)
\
+ 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)
+
+#else
#define DECLARE_INIT_SECTION(stg)
\
extern __attribute__((__weak__)) const struct initcall
*__start_init_##stg; \
extern __attribute__((__weak__)) const struct initcall
*__stop_init_##stg
+#endif
/* Declare all initcall sections here */
DECLARE_INIT_SECTION(STG_PREPARE);
--
2.20.1