If no alignment is specified in the assembly file, LoongArch will not
perform forced alignment. When this object file (.o) is linked into an
executable, instructions may not be 4-byte aligned, which will
eventually cause instruction fetch errors.
For example, the above issue can occur when generating a shared object
file (.so) with the -nostdlib option.
if (*str == '\0')
break;
+ /* LoongArch instructions require 4-byte alignment. When emitting
+ instructions into any section, record the appropriate section
+ alignment. */
+ record_alignment (now_seg, 2);
+
struct loongarch_cl_insn the_one;
memset (&the_one, 0, sizeof (the_one));
the_one.name = str;
--- /dev/null
+#as:
+#readelf: -S
+
+#...
+ \[ [0-9]+\] \.text PROGBITS [0-9a-f]{16} [0-9a-f]{8}
+ [0-9a-f]{16} [0-9a-f]{16} AX 0 0 4
+#...
--- /dev/null
+.type test, @function
+test:
+ jirl $ra, $ra, 0
+.size test, .-test