59c5fb8
diff -Naur acpica-unix2-20190108/source/common/dmrestag.c acpica-unix2-20190108-patch/source/common/dmrestag.c
59c5fb8
--- acpica-unix2-20190108/source/common/dmrestag.c	2019-01-08 14:10:31.000000000 -0700
59c5fb8
+++ acpica-unix2-20190108-patch/source/common/dmrestag.c	2019-05-10 13:57:10.768398838 -0600
59c5fb8
@@ -710,10 +710,25 @@
59c5fb8
      * end up in the final compiled AML, it's just an appearance issue for the
59c5fb8
      * disassembled code.
59c5fb8
      */
59c5fb8
-    Pathname[strlen (Pathname) - ACPI_NAME_SIZE] = 0;
59c5fb8
-    strncat (Pathname, ResourceNode->Name.Ascii, ACPI_NAME_SIZE);
59c5fb8
-    strcat (Pathname, ".");
59c5fb8
-    strncat (Pathname, Tag, ACPI_NAME_SIZE);
59c5fb8
+    {
59c5fb8
+    	/* 
59c5fb8
+	 * GCC9 forces some contortions when non-null-terminated char
59c5fb8
+	 * strings are being used; using strncat() might be simpler,
59c5fb8
+	 * but the assumption that the string is null-terminated gets
59c5fb8
+	 * checked and AML does not always guarantee that is true.
59c5fb8
+	 */
59c5fb8
+    	char *tmp;
59c5fb8
+	unsigned char dot = '.';
59c5fb8
+
59c5fb8
+    	Pathname[strlen (Pathname) - ACPI_NAME_SIZE] = 0;
59c5fb8
+	tmp = Pathname + strlen(Pathname);
59c5fb8
+	memcpy (tmp, ResourceNode->Name.Ascii, ACPI_NAME_SIZE);
59c5fb8
+	tmp += ACPI_NAME_SIZE;
59c5fb8
+	memcpy (tmp, &dot, 1);
59c5fb8
+	tmp++;
59c5fb8
+        memcpy (tmp, Tag, ACPI_NAME_SIZE);
59c5fb8
+	tmp += ACPI_NAME_SIZE;
59c5fb8
+    }
59c5fb8
 
59c5fb8
     /* Internalize the namepath to AML format */
59c5fb8
 
59c5fb8
diff -Naur acpica-unix2-20190108/source/compiler/aslcodegen.c acpica-unix2-20190108-patch/source/compiler/aslcodegen.c
59c5fb8
--- acpica-unix2-20190108/source/compiler/aslcodegen.c	2019-05-10 13:40:12.827411487 -0600
59c5fb8
+++ acpica-unix2-20190108-patch/source/compiler/aslcodegen.c	2019-05-10 13:25:34.667850614 -0600
59c5fb8
@@ -450,11 +450,11 @@
59c5fb8
      */
59c5fb8
     if (AcpiGbl_CaptureComments)
59c5fb8
     {
59c5fb8
-        strncpy(AcpiGbl_TableSig, Child->Asl.Value.String, ACPI_NAME_SIZE);
59c5fb8
+        memcpy(AcpiGbl_TableSig, Child->Asl.Value.String, ACPI_NAME_SIZE);
59c5fb8
         Child->Asl.Value.String = ACPI_SIG_XXXX;
59c5fb8
     }
59c5fb8
 
59c5fb8
-    strncpy (AslGbl_TableHeader.Signature, Child->Asl.Value.String, ACPI_NAME_SIZE);
59c5fb8
+    memcpy (AslGbl_TableHeader.Signature, Child->Asl.Value.String, ACPI_NAME_SIZE);
59c5fb8
 
59c5fb8
     /* Revision */
59c5fb8
 
59c5fb8
@@ -471,12 +471,12 @@
59c5fb8
     /* OEMID */
59c5fb8
 
59c5fb8
     Child = Child->Asl.Next;
59c5fb8
-    strncpy (AslGbl_TableHeader.OemId, Child->Asl.Value.String, ACPI_OEM_ID_SIZE);
59c5fb8
+    memcpy (AslGbl_TableHeader.OemId, Child->Asl.Value.String, ACPI_OEM_ID_SIZE);
59c5fb8
 
59c5fb8
     /* OEM TableID */
59c5fb8
 
59c5fb8
     Child = Child->Asl.Next;
59c5fb8
-    strncpy (AslGbl_TableHeader.OemTableId, Child->Asl.Value.String, ACPI_OEM_TABLE_ID_SIZE);
59c5fb8
+    memcpy (AslGbl_TableHeader.OemTableId, Child->Asl.Value.String, ACPI_OEM_TABLE_ID_SIZE);
59c5fb8
 
59c5fb8
     /* OEM Revision */
59c5fb8