LoongArch: Enforce 4-byte align for machine instructions

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.
diff --git a/gas/config/tc-loongarch.c b/gas/config/tc-loongarch.c
index 1eb35f2..d067318 100644
--- a/gas/config/tc-loongarch.c
+++ b/gas/config/tc-loongarch.c
@@ -1432,6 +1432,11 @@
       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;
diff --git a/gas/testsuite/gas/loongarch/insn_align_4.d b/gas/testsuite/gas/loongarch/insn_align_4.d
new file mode 100644
index 0000000..31a5d35
--- /dev/null
+++ b/gas/testsuite/gas/loongarch/insn_align_4.d
@@ -0,0 +1,7 @@
+#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
+#...
diff --git a/gas/testsuite/gas/loongarch/insn_align_4.s b/gas/testsuite/gas/loongarch/insn_align_4.s
new file mode 100644
index 0000000..7b4922c
--- /dev/null
+++ b/gas/testsuite/gas/loongarch/insn_align_4.s
@@ -0,0 +1,4 @@
+.type test, @function
+test:
+  jirl	$ra, $ra, 0
+.size test, .-test