| From 311df83437c4d578e35e5faca30c10da28c30323 Mon Sep 17 00:00:00 2001 |
| Message-Id: <311df83437c4d578e35e5faca30c10da28c30323.1595566447.git.baruch@tkos.co.il> |
| From: Baruch Siach <baruch@tkos.co.il> |
| Date: Fri, 24 Jul 2020 07:44:59 +0300 |
| Subject: [PATCH] BUG/MEDIUM: tools: fix build with static only toolchains |
| |
| uClibc toolchains built with no dynamic library support don't provide |
| the dlfcn.h header. That leads to build failure: |
| |
| CC src/tools.o |
| src/tools.c:15:10: fatal error: dlfcn.h: No such file or directory |
| #include <dlfcn.h> |
| ^~~~~~~~~ |
| Enable dladdr only when USE_DL is defined. |
| |
| Signed-off-by: Baruch Siach <baruch@tkos.co.il> |
| --- |
| Upstream status: |
| https://www.mail-archive.com/haproxy@formilux.org/msg37986.html |
| |
| src/tools.c | 12 ++++++------ |
| 1 file changed, 6 insertions(+), 6 deletions(-) |
| |
| diff --git a/src/tools.c b/src/tools.c |
| index 1c664852ad73..0bd80f846d05 100644 |
| --- a/src/tools.c |
| +++ b/src/tools.c |
| @@ -10,7 +10,7 @@ |
| * |
| */ |
| |
| -#ifdef __ELF__ |
| +#if defined(__ELF__) && defined(USE_DL) |
| #define _GNU_SOURCE |
| #include <dlfcn.h> |
| #include <link.h> |
| @@ -4410,7 +4410,7 @@ const char *get_exec_path() |
| return ret; |
| } |
| |
| -#ifdef __ELF__ |
| +#if defined(__ELF__) && defined(USE_DL) |
| /* calls dladdr() or dladdr1() on <addr> and <dli>. If dladdr1 is available, |
| * also returns the symbol size in <size>, otherwise returns 0 there. |
| */ |
| @@ -4444,7 +4444,7 @@ static int dladdr_and_size(const void *addr, Dl_info *dli, size_t *size) |
| * The file name (lib or executable) is limited to what lies between the last |
| * '/' and the first following '.'. An optional prefix <pfx> is prepended before |
| * the output if not null. The file is not dumped when it's the same as the one |
| - * that contains the "main" symbol, or when __ELF__ is not set. |
| + * that contains the "main" symbol, or when __ELF__ && USE_DL are not set. |
| * |
| * The symbol's base address is returned, or NULL when unresolved, in order to |
| * allow the caller to match it against known ones. |
| @@ -4472,7 +4472,7 @@ const void *resolve_sym_name(struct buffer *buf, const char *pfx, void *addr) |
| #endif |
| }; |
| |
| -#ifdef __ELF__ |
| +#if defined(__ELF__) && defined(USE_DL) |
| Dl_info dli, dli_main; |
| size_t size; |
| const char *fname, *p; |
| @@ -4489,7 +4489,7 @@ const void *resolve_sym_name(struct buffer *buf, const char *pfx, void *addr) |
| } |
| } |
| |
| -#ifdef __ELF__ |
| +#if defined(__ELF__) && defined(USE_DL) |
| /* Now let's try to be smarter */ |
| if (!dladdr_and_size(addr, &dli, &size)) |
| goto unknown; |
| @@ -4529,7 +4529,7 @@ const void *resolve_sym_name(struct buffer *buf, const char *pfx, void *addr) |
| chunk_appendf(buf, "+%#lx", (long)(addr - dli.dli_fbase)); |
| return NULL; |
| } |
| -#endif /* __ELF__ */ |
| +#endif /* __ELF__ && USE_DL */ |
| unknown: |
| /* unresolved symbol from the main file, report relative offset to main */ |
| if ((void*)addr < (void*)main) |
| -- |
| 2.27.0 |
| |