]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix non-aligned CodeView symbols
authorMark Harmstone <mark@harmstone.com>
Sat, 30 Nov 2024 22:35:24 +0000 (22:35 +0000)
committerMark Harmstone <mark@harmstone.com>
Mon, 16 Dec 2024 02:13:00 +0000 (02:13 +0000)
CodeView symbols in PDB files are aligned to four-byte boundaries. It's
not really clear what logic MSVC uses to enforce this; sometimes the
symbols are padded in the object file, sometimes the linker seems to do
the work.

It makes more sense to do this in the compiler, so fix the two instances
where we can write symbols with a non-aligned length. S_FRAMEPROC is
unusually not a multiple of 4, so will always have 2 bytes padding.
S_INLINESITE is followed by variable-length "binary annotations", so
will also usually have padding.

gcc/
* dwarf2codeview.cc (write_s_frameproc): Align output.
(write_s_inlinesite): Align output.

gcc/dwarf2codeview.cc

index 19ec58d096eed8b6a6923120f93fd4839ea71617..a50fcdf9f7bfadc973b32154fe50d34c79ceb60c 100644 (file)
@@ -3208,6 +3208,8 @@ write_s_frameproc (void)
   fprint_whex (asm_out_file, 0);
   putc ('\n', asm_out_file);
 
+  ASM_OUTPUT_ALIGN (asm_out_file, 2);
+
   targetm.asm_out.internal_label (asm_out_file, SYMBOL_END_LABEL, label_num);
 }
 
@@ -3576,7 +3578,10 @@ write_s_inlinesite (dw_die_ref parent_func, dw_die_ref die)
   line_func = find_line_function (parent_func, die);
 
   if (line_func)
-    write_binary_annotations (line_func, func_id);
+    {
+      write_binary_annotations (line_func, func_id);
+      ASM_OUTPUT_ALIGN (asm_out_file, 2);
+    }
 #else
   (void) line_func;
 #endif