>>So I presume this is done to avoid wasting space with duplicate information. Well yes, I had the same thought too. But seems like it is makes no sense because you can disable/strip debug sections. But the major problem that I've seen is that non-GDB debugger expects CFI in debug_frame section but not eh_frame. And their point is pretty strong - eh_frame is just for EH, not for debugging. purposes. GDB is smart enough to use this info from eh_frame but it is not specified for architecture in documents (or I was unable to find it). Alex On Fri, Oct 5, 2018 at 3:33 PM Richard Earnshaw (lists) <Richard.Earnshaw@xxxxxxx> wrote: > > On 05/10/18 13:27, Kyrill Tkachov wrote: > > Hi Alex, > > > > I'm forwarding this to the gcc-help list which is the appropriate place > > for this discussion. > > gcc-bugs is for automated emails from the bug tracker and your mail is > > likely to get lost in there. > > > > Thanks, > > Kyrill > > > > On 05/10/18 13:24, Alexander Fedotov wrote: > >> Hello > >> > >> I've noticed that for C++ translation unit GCC for aarch64 always > >> emits CFI into eh_frame but never debug_frame even if debug > >> information is enabled. Tried on GCC versions 6 to 8. > >> DWARF for the ARM 64-bit architecture (AArch64) states that it must be > >> debug_frame > >> ((https://static.docs.arm.com/ihi0057/b/IHI0057B_aadwarf64.pdf) > >> GAS supports emitting CFI to both sections by directive: .cfi_sections > >> .debug_frame,.eh_frame > >> > >> At the same time gcc for arm emits CFI in both debug_frame and .ARM.exidx > >> > >> I'm aware about CFI for Exception Handling. But what the reason to not > >> emit both ? > >> Is there any implicit reason for that or it's just a bug ? > > On Arm, the .ARM.exidx data is insufficient for debugging, so we > certainly need the additional information in the dwarf unwinding tables. > On AArch64 that's not true, the information is complete enough for a > debugger to use. So I presume this is done to avoid wasting space with > duplicate information. > > What do other targets that use dwarf exception unwinding do? > > R. > > >> > >> Steps to reproduce: > >> > >> cat > test.cpp <<EOF > >> int foo() { > >> return 0; > >> } > >> EOF > >> > >> ./aarch64-none-elf-gcc -c -g test.cpp -o test_cpp.o && > >> ./aarch64-none-elf-objdump -g test_cpp.o | grep -B 3 "CIE" | grep > >> "_frame" > >> Contents of the .eh_frame section: > >> > >> While for C code it does: > >> cat > test.c <<EOF > >> int foo() { > >> return 0; > >> } > >> EOF > >> > >> ./aarch64-none-elf-gcc -c -g test.c -o test_c.o && > >> ./aarch64-none-elf-objdump -g test_c.o | grep -B 3 "CIE" | grep > >> "_frame" > >> Contents of the .debug_frame section: > >> > >> > >> Alex > > > -- Best regards, AF