]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUILD: tools: rely on __ELF__ not USE_DL to enable use of dladdr()
authorWilly Tarreau <w@1wt.eu>
Wed, 4 Mar 2020 09:31:58 +0000 (10:31 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 4 Mar 2020 11:04:07 +0000 (12:04 +0100)
The approach was wrong. USE_DL is for the makefile to know if it's required
to append -ldl at link time. Some platforms do not need it (and in fact do
not have it) yet they have a working dladdr(). The real condition is related
to ELF. Given that due to Lua, all platforms that require -ldl already have
USE_DL set, let's replace USE_DL with __ELF__ here and consider that dladdr
is always needed on ELF, which basically is already the case.

src/standard.c

index 78237b9102dbcaa4ce64a9d19b8c6959ba4c8e9c..38997d5f48968cdb6bd30d47ed628efea323c460 100644 (file)
@@ -10,7 +10,7 @@
  *
  */
 
-#if defined(USE_DL)
+#ifdef __ELF__
 #define _GNU_SOURCE
 #include <dlfcn.h>
 #include <link.h>
@@ -4335,7 +4335,7 @@ void debug_hexdump(FILE *out, const char *pfx, const char *buf,
        }
 }
 
-#ifdef USE_DL
+#ifdef __ELF__
 /* calls dladdr() or dladdr1() on <addr> and <dli>. If dladdr1 is available,
  * also returns the symbol size in <size>, otherwise returns 0 there.
  */
@@ -4369,7 +4369,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 USE_DL is not set.
+ * that contains the "main" symbol, or when __ELF__ is 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.
@@ -4397,7 +4397,7 @@ void *resolve_sym_name(struct buffer *buf, const char *pfx, void *addr)
 #endif
        };
 
-#ifdef USE_DL
+#ifdef __ELF__
        Dl_info dli, dli_main;
        size_t size;
        const char *fname, *p;
@@ -4414,7 +4414,7 @@ void *resolve_sym_name(struct buffer *buf, const char *pfx, void *addr)
                }
        }
 
-#ifdef USE_DL
+#ifdef __ELF__
        /* Now let's try to be smarter */
        if (!dladdr_and_size(addr, &dli, &size))
                goto unknown;
@@ -4454,7 +4454,7 @@ void *resolve_sym_name(struct buffer *buf, const char *pfx, void *addr)
                chunk_appendf(buf, "+%#lx", (long)(addr - dli.dli_fbase));
                return NULL;
        }
-#endif /* USE_DL */
+#endif /* __ELF__ */
  unknown:
        /* unresolved symbol from the main file, report relative offset to main */
        if ((void*)addr < (void*)main)