PATCH: PR gas/10531: Strange assembler warning message on section group
Jim Wilson
wilson@codesourcery.com
Mon Oct 26 22:11:00 GMT 2009
On 08/22/2009 04:53 PM, H.J. Lu wrote:
> This patch hadles ".file" directives properly with a new testcase from gcc 3.4.
> OK to install?
Now that I have time to properly review this...
The stuff for excluding group sections from simple section name string
searches looks mostly OK.
I see that bfd_make_section_old_way contains the entire contents of the
function bfd_get_section_by_name. This was OK when the latter was a
5-line function, but now that it is a 20-line function, maybe it is
better to have bfd_make_section_old_way call bfd_get_section_by_name
instead of duplicating all 20 lines? Except that would require some
interface changes, because bfd_get_section_by_name can return NULL for
two different things, one which bfd_make_section_old_way ignores, and
one which needs special handling. So it is a little harder, but it
still seems potentially worthwhile. Maybe part of this can be split out
to its own function or macro?
I see that you only fixed those two functions, but you left similar
functions like bfd_make_section and bfd_make_section_with_flags unfixed.
Maybe because these aren't called from gas/dwarf2dbg.c? Shouldn't we
be fixing all of the functions? If we do need to fix more functions,
then that means more copies of the same 20-lines of code, which makes it
more important to avoid duplication of this code.
I think the stuff for deciding whether to emit a debug_line section has
more problems.
There are some minor issues. For instance in as.c you added a comment
> /* If assembler shiuld debug info. */
which needs to be fixed. Need to change "shiuld" to "should generate".
You changed the behaviour of the dwarf2_finish function, but you didn't
update the comment before the function start which is now wrong with
your patch.
You added two variables gen_debug and dwarf2_directive_used, and a test
for them
> + if (!dwarf2_directive_used && gen_debug == DEBUG_UNSPECIFIED)
But this test seems to be equivalent to "if (!all_segs)" so there is no
need for these two new variables.
The bigger problem here is that with your patch dwarf2_finish now does
if (!all_segs) return;
...
if (!all_segs && emit_other_sections) return;
which doesn't make a lot of sense. The current code handles the case
where the compiler emits a debug_info section, but does not emit any
.file or .loc directives. .loc will only be emitted if there is code.
It will not be emitted for an input file that contains only variables.
GCC will always emit .file if the assembler supports it, but it is
possible that it might be missing if someone configured gcc wrong. It
isn't obvious whether we need to handle this case, it is probably safer
if we do.
This is why my suggested solution takes a slightly different tack here.
Instead of checking for -g or .file/.loc, I check for a non-empty
debug_line section. If there is one, then it should be safe to assume
that the compiler emitted a correct debug_line section, and the
assembler should not emit one. My suggested patch can be found here
http://sourceware.org/ml/binutils/2009-08/msg00358.html
Jim
More information about the Binutils
mailing list