Looks probably like a bug in GCC and best discussed in their forum? (clang seems to produce the macro in the macinfo if you compile with `-fdebug-macro` (& you have to put some emitted entity (like a function definition) in the file before Clang will produce any debug info for the file))
On Wed, Sep 11, 2024 at 11:51 AM Lorenzo Gomez via Dwarf-discuss < dwarf-discuss@lists.dwarfstd.org> wrote: > Something else to note: > > If I link the "test_file1.o" file with "gcc -g3 -nostartfiles -Llib > -gdwarf-4 test_file1_copy.o -o test_file1_linked_dwarf4.o" the macro shows > up in the DWARF, regardless of whether it is defined before/after the > #include. > > > On 9/11/24 1:47 PM, Lorenzo Gomez wrote: > > Hi there, > > > I'm currently using dwarfdump "2020-01-14 10:13:32-08:00 Package Version > "20200114"" to look at macros inside the DWARF. > > > Imagine two files; test_file1.h and test_file1.cpp > > test_file1.cpp is defined as follows: > > > /* > * test_file.cpp > * > */ > > #ifdef __cplusplus > extern "C" { > #endif > > #include "test_file1.h" > > #include <fcntl.h> > #include <stdio.h> > #include <sys/stat.h> > #include <sys/types.h> > #include <unistd.h> > > Square sq = {}; > Circle ci = {}; > #ifdef __cplusplus > } > #endif > > > > > > Here are two scenarios for the definition of test_file1.h. > > > Scenario #1 > > test_file.h is defined as follows: > > #include "stdint.h" > > #define CFE_MISSION_ES_PERF_MAX_IDS 128 > > > > typedef struct CFE_ES_HousekeepingTlm_Payload > { > uint32_t PerfFilterMask[CFE_MISSION_ES_PERF_MAX_IDS / 32]; /**< > \cfetlmmnemonic \ES_PERFFLTRMASK > \brief Current > Setting of Performance Analyzer Filter Masks */ > uint32_t PerfTriggerMask[CFE_MISSION_ES_PERF_MAX_IDS / 32]; /**< > \cfetlmmnemonic \ES_PERFTRIGMASK > \brief > Current Setting of Performance Analyzer Trigger Masks */ > } CFE_ES_HousekeepingTlm_Payload_t; > > > > After compiling with "gcc -g3 -c -gdwarf-4 test_file1.cpp -o > test_file1_copy_dwarf4.o" and then running "dwarfdump test_file1_dwarf4.o > > dwarf4_test_file1.txt". The Macro doe NOT show up in > dwarf4_test_file1.txt. It does show up under the debug string table but not > under the "debug_macro" section. > > > > > > Scenario #2 > > test_file.h is defined as follows: > > > #define CFE_MISSION_ES_PERF_MAX_IDS 128 > > #include "stdint.h" > > > > typedef struct CFE_ES_HousekeepingTlm_Payload > { > uint32_t PerfFilterMask[CFE_MISSION_ES_PERF_MAX_IDS / 32]; /**< > \cfetlmmnemonic \ES_PERFFLTRMASK > \brief Current > Setting of Performance Analyzer Filter Masks */ > uint32_t PerfTriggerMask[CFE_MISSION_ES_PERF_MAX_IDS / 32]; /**< > \cfetlmmnemonic \ES_PERFTRIGMASK > \brief > Current Setting of Performance Analyzer Trigger Masks */ > } CFE_ES_HousekeepingTlm_Payload_t; > > > > After compiling with "gcc -g3 -c -gdwarf-4 test_file1.cpp -o > test_file1_dwarf4.o" and then running "dwarfdump test_file1_dwarf4.o > > dwarf4_test_file1.txt". The Macro DOES show up in dwarf4_test_file1.txt. > It does show up under the "debug_macro" section. > > > Is there a reason why in order for macros to show up they have to be > declared *before *the #include macro(s)? > > > Perhaps I'm missing something obvious? > > Some more info about my system(x86 Intel CPU): > > NAME="Pop!_OS" > VERSION="20.04 LTS" > ID=pop > ID_LIKE="ubuntu debian" > PRETTY_NAME="Pop!_OS 20.04 LTS" > VERSION_ID="20.04" > HOME_URL="https://pop.system76.com" <https://pop.system76.com> > SUPPORT_URL="https://support.system76.com" <https://support.system76.com> > BUG_REPORT_URL="https://github.com/pop-os/pop/issues" > <https://github.com/pop-os/pop/issues> > PRIVACY_POLICY_URL="https://system76.com/privacy" > <https://system76.com/privacy> > VERSION_CODENAME=focal > UBUNTU_CODENAME=focal > LOGO=distributor-logo-pop-os > > > > > Thanks > > Lorenzo > > > > > > > > > > > > > > > -- > Dwarf-discuss mailing list > Dwarf-discuss@lists.dwarfstd.org > https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss >
-- Dwarf-discuss mailing list Dwarf-discuss@lists.dwarfstd.org https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss