Re: GDB 13.1 and clang

John Baldwin <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On 3/8/23 1:22 PM, Chris Johns wrote:
> On 9/3/2023 5:22 am, Simon Marchi wrote:
>> On 3/8/23 15:07, Chris Johns wrote:
>>> Hi,
>>>
>>> I have just tried to build the latest RTEMS tools and we now use gdb 13.1. I am
>>> seeing a build failure on FreeBSD 13.1 of:
>>>
>>> In file included from ../../gdb-13.1/gdb/xml-tdesc.c:23:
>>> In file included from ../../gdb-13.1/gdb/target.h:42:
>>> In file included from ../../gdb-13.1/gdb/infrun.h:21:
>>> In file included from ../../gdb-13.1/gdb/gdbthread.h:26:
>>> In file included from ../../gdb-13.1/gdb/breakpoint.h:38:
>>> ../../gdb-13.1/gdb/target/waitstatus.h:113:1: error: use of undeclared
>>> identifier 'DIAGNOSTIC_ERROR_SWITCH'
>>> DIAGNOSTIC_ERROR_SWITCH
>>> ^
>>>
>>> I only have clang installed on the FreeBSD machine.
>>>
>>> A quick review of include/diagnostics.h seems to show support for
>>> DIAGNOSTIC_ERROR_SWITCH only in the gcc area?
>>
>> Hmm, I see it in the clang section:
>>
>> # define DIAGNOSTIC_ERROR_SWITCH \
>>    DIAGNOSTIC_ERROR ("-Wswitch")
>>
> 
> It seems I need to do a better review before posting :)
> 
>> https://sourceware.org/cgit/binutils-gdb/tree/include/diagnostics.h?h=gdb-13.1-release&id=4f3e26ac6ee31f7bc4b04abd8bdb944e7f1fc5d2#n76
>>
>> Unless there's a typo I don't see.
>>
>> diagnostics.h is included at the top of waitstatus.h.  Is it possible
>> that another unrelated diagnostics.h gets included on FreeBSD?  You
>> could inspect the preprocessed file to see what the preprocessor
>> included for diagnostics.h.
> 
> There is another version installed here:
> 
> $ pkg which /usr/local/include/diagnostics.h
> /usr/local/include/diagnostics.h was installed by package binutils-2.37_2,1
> 
> We have /usr/local/include early in the include list on FreeBSD to pick up some
> of the required libraries installed as packages. I will check for a package
> update or I revisit the build flags to see how it can be handled.
> 
> Thank you for the prompt and helpful responses.

Yes, I manually delete all the headers installed by binutils into
/usr/local/include when building GDB from source locally to work
around this. :(  I'm not sure of the best fix for this.  I tracked
it down to the change to add zstd as ZSTD_CFLAGS is before BFD_CFLAGS
in INTERNAL_CFLAGS_BASE in Makefile.in in this commit:

commit 2cac01e3ffff74898c54fa5e6418817f5578adb6
Author: Fangrui Song <[email protected]>
Date:   Mon Sep 26 19:50:13 2022 -0700

     binutils, gdb: support zstd compressed debug sections
     
     PR29397 PR29563: Add new configure option --with-zstd which defaults to
     auto.  If pkgconfig/libzstd.pc is found, define HAVE_ZSTD and support
     zstd compressed debug sections for most tools.
     
     * bfd: for addr2line, objdump --dwarf, gdb, etc
     * gas: support --compress-debug-sections=zstd
     * ld: support ELFCOMPRESS_ZSTD input and --compress-debug-sections=zstd
     * objcopy: support ELFCOMPRESS_ZSTD input for
       --decompress-debug-sections and --compress-debug-sections=zstd
     * gdb: support ELFCOMPRESS_ZSTD input.  The bfd change references zstd
       symbols, so gdb has to link against -lzstd in this patch.
     
     If zstd is not supported, ELFCOMPRESS_ZSTD input triggers an error.  We
     can avoid HAVE_ZSTD if binutils-gdb imports zstd/ like zlib/, but this
     is too heavyweight, so don't do it for now.
     
     ```
     % ld/ld-new a.o
     ld/ld-new: a.o: section .debug_abbrev is compressed with zstd, but BFD is not built with zstd support
     ...
     
     % ld/ld-new a.o --compress-debug-sections=zstd
     ld/ld-new: --compress-debug-sections=zstd: ld is not built with zstd support
     
     % binutils/objcopy --compress-debug-sections=zstd a.o b.o
     binutils/objcopy: --compress-debug-sections=zstd: binutils is not built with zstd support
     
     % binutils/objcopy b.o --decompress-debug-sections
     binutils/objcopy: zstd.o: section .debug_abbrev is compressed with zstd, but BFD is not built with zstd support
     ...
     ```

I have not tried moving ZSTD_CFLAGS after BFD_CFLAGS, but if it worked I
think the right solution is to ensure all the "local" includes for things
in git come first before any includes that pull from the installed system.
I think this would mean moving READLINE_CFLAGS (for systems that use a
system readline), ZLIBINC, and ZSTD_CFLAGS after INCLUDE_CFLAGS.

I just tried this and it worked for me locally:

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 6e39383eb93..40497541880 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -629,8 +629,8 @@ INTERNAL_CPPFLAGS = $(CPPFLAGS) @GUILE_CPPFLAGS@ @PYTHON_CPPFLAGS@ \
  # INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros.
  INTERNAL_CFLAGS_BASE = \
  	$(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \
-	$(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) $(ZLIBINC) \
-	$(ZSTD_CFLAGS) $(BFD_CFLAGS) $(INCLUDE_CFLAGS) $(LIBDECNUMBER_CFLAGS) \
+	$(GDB_CFLAGS) $(OPCODES_CFLAGS) $(BFD_CFLAGS) $(INCLUDE_CFLAGS) \
+	$(READLINE_CFLAGS) $(ZLIBINC) $(ZSTD_CFLAGS) $(LIBDECNUMBER_CFLAGS) \
  	$(INTL_CFLAGS) $(INCGNU) $(INCSUPPORT) $(LIBBACKTRACE_INC) \
  	$(ENABLE_CFLAGS) $(INTERNAL_CPPFLAGS) $(SRCHIGH_CFLAGS) \
  	$(TOP_CFLAGS) $(PTHREAD_CFLAGS) $(DEBUGINFOD_CFLAGS) $(GMPINC) \

-- 
John Baldwin
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.