On Wed, 2011-03-09 at 10:34 -0800, Roland McGrath wrote: > > Ah, yes. That is what I thought first too. But gcc is sneaky :) > > If gcc detects gas has support for the .loc directive, it will not > > output the section itself, but let gas generate it (because the > > assembler has exact info on instruction sizes). > > Sure, but there is no .loc in there! In fact, it's gas that is quite > sneaky here. > > /* If there is no line information and no non-empty .debug_info > section, or if there is both a non-empty .debug_info and a non-empty > .debug_line, then we do nothing. */ > > So its the presence of some .section .debug_info content (even without any > .file, let alone .loc) that makes it emit the .debug_line header. > > If there is a bug here, it's a gas bug.
Indeed. So you can "trick" gas into creating a needless .debug_line section by just doing: $ echo ".section .debug_info" > empty.s; echo ".byte 0x0" >> empty.s $ as -g empty.s $ eu-readelf -w a.out DWARF section [ 4] '.debug_info' at offset 0x40: [Offset] DWARF section [ 5] '.debug_line' at offset 0x41: Table at offset 0: Length: 25 DWARF version: 2 Prologue length: 19 Minimum instruction length: 1 Maximum operations per instruction: 1 Initial value if 'is_stmt': 1 Line base: -5 Line range: 14 Opcode base: 13 Opcodes: [ 1] 0 arguments [ 2] 1 argument [ 3] 1 argument [ 4] 1 argument [ 5] 1 argument [ 6] 0 arguments [ 7] 0 arguments [ 8] 0 arguments [ 9] 1 argument [10] 0 arguments [11] 0 arguments [12] 1 argument Directory table: File name table: Entry Dir Time Size Name Line number statements: That of course is an invalid .debug_info section, but there really is no reason for gas to output the .debug_line section since there was no explicit .debug_line sections, nor where there any .loc or .line directives. Current dwarflint does error on the above, but doesn't mention that nothing refers to the "empty" .debug_line sections: $ eu-dwarflint a.out error: .debug_abbrev: data not found. So, the bug is in gas. I cannot immediately think of how to trick gcc itself into producing this bug. But if this gas bug is fixed we might need to fix gcc to not unconditionally produce a DW_AT_line_stmt_list for the CU. Cheers, Mark _______________________________________________ elfutils-devel mailing list [email protected] https://fedorahosted.org/mailman/listinfo/elfutils-devel
