diff --git a/changelog b/changelog
index 29d18bb..6d57dd4 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+openjdk-8 (8u392-ga-1) unstable; urgency=medium
+
+  * Add openjdk-8 zero support for loong64
+
+  -- Leslie Zhai <zhaixiang@loongson.cn> Fri, 5 Jan 2024 13:53:25 +0800
+
 openjdk-8 (8u392-ga-1) unstable; urgency=low
 
   [ Emmanuel Bourg ]
diff --git a/control b/control
index b0e16b9..4ed8006 100644
--- a/control
+++ b/control
@@ -17,7 +17,7 @@ VCS-git: https://evolvis.org/anonscm/git/alioth/openjdk-8.git -b master
 VCS-Browser: https://evolvis.org/plugins/scmgit/cgi-bin/gitweb.cgi?p=alioth/openjdk-8.git;a=shortlog;h=refs/heads/master
 
 Package: openjdk-8-jdk-headless
-Architecture: alpha amd64 armel armhf arm64 i386 ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
+Architecture: alpha amd64 armel armhf arm64 i386 ia64 loong64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
 Multi-Arch: same
 Pre-Depends: ${dpkg:Depends}
 Depends: openjdk-8-jre-headless (= ${binary:Version}),
@@ -40,7 +40,7 @@ Description: OpenJDK Development Kit (JDK) (headless)
  from the IcedTea project.
 
 Package: openjdk-8-jre-headless
-Architecture: alpha amd64 armel armhf arm64 i386 ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
+Architecture: alpha amd64 armel armhf arm64 i386 ia64 loong64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
 Multi-Arch: same
 Pre-Depends: ${dpkg:Depends}
 Depends: ${jredefault:Depends}, ${cacert:Depends},
@@ -65,7 +65,7 @@ Description: OpenJDK Java runtime, using ${vm:Name} (headless)
  from the IcedTea project.
 
 Package: openjdk-8-jdk
-Architecture: alpha amd64 armel armhf arm64 i386 ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
+Architecture: alpha amd64 armel armhf arm64 i386 ia64 loong64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
 Multi-Arch: same
 Pre-Depends: ${dpkg:Depends}
 Depends: openjdk-8-jre (= ${binary:Version}),
@@ -86,7 +86,7 @@ Description: OpenJDK Development Kit (JDK)
  from the IcedTea project.
 
 Package: openjdk-8-jre
-Architecture: alpha amd64 armel armhf arm64 i386 ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
+Architecture: alpha amd64 armel armhf arm64 i386 ia64 loong64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
 Multi-Arch: same
 Pre-Depends: ${dpkg:Depends}
 Depends: openjdk-8-jre-headless (= ${binary:Version}),
@@ -106,7 +106,7 @@ Description: OpenJDK Java runtime, using ${vm:Name}
  from the IcedTea project.
 
 Package: openjdk-8-demo
-Architecture: alpha amd64 armel armhf arm64 i386 ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
+Architecture: alpha amd64 armel armhf arm64 i386 ia64 loong64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
 Pre-Depends: ${dpkg:Depends}
 Depends: openjdk-8-jre (= ${binary:Version}),
   ${shlibs:Depends}, ${misc:Depends}
@@ -150,7 +150,7 @@ Description: OpenJDK Development Kit (JDK) documentation
  from the IcedTea project.
 
 Package: openjdk-8-dbg
-Architecture: alpha amd64 armel armhf arm64 i386 ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
+Architecture: alpha amd64 armel armhf arm64 i386 ia64 loong64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
 Multi-Arch: same
 Section: debug
 Pre-Depends: ${dpkg:Depends}
@@ -168,7 +168,7 @@ Description: Java runtime based on OpenJDK (debugging symbols)
  from the IcedTea project.
 
 Package: openjdk-8-jre-zero
-Architecture: amd64 i386 arm64 ppc64 ppc64el sparc64 armhf
+Architecture: amd64 i386 arm64 ppc64 ppc64el sparc64 armhf loong64
 Multi-Arch: same
 Pre-Depends: ${dpkg:Depends}
 Depends: openjdk-8-jre-headless (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
diff --git a/patches/loong64-autoconf-config.diff b/patches/loong64-autoconf-config.diff
new file mode 100644
index 0000000..f1b3ac1
--- /dev/null
+++ b/patches/loong64-autoconf-config.diff
@@ -0,0 +1,12 @@
+diff --git a/common/autoconf/build-aux/autoconf-config.sub b/common/autoconf/build-aux/autoconf-config.sub
+index 1aab2b303e..483ff0b93b 100644
+--- a/common/autoconf/build-aux/autoconf-config.sub
++++ b/common/autoconf/build-aux/autoconf-config.sub
+@@ -275,6 +275,7 @@ case $basic_machine in
+ 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ 	| i370 | i860 | i960 | ia64 \
+ 	| ip2k | iq2000 \
++        | loongarch32 | loongarch64 \
+ 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+ 	| maxq | mb | microblaze | mcore | mep \
+ 	| mips | mipsbe | mipseb | mipsel | mipsle \
diff --git a/patches/loong64-backport-jdk-8270517-and-8315020.diff b/patches/loong64-backport-jdk-8270517-and-8315020.diff
new file mode 100644
index 0000000..093ca86
--- /dev/null
+++ b/patches/loong64-backport-jdk-8270517-and-8315020.diff
@@ -0,0 +1,62 @@
+diff --git a/common/autoconf/platform.m4 b/common/autoconf/platform.m4
+index 3cea6e09..a4746e6b 100644
+--- a/common/autoconf/platform.m4
++++ b/common/autoconf/platform.m4
+@@ -169,6 +169,12 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],
+       VAR_CPU_BITS=32
+       VAR_CPU_ENDIAN=big
+       ;;
++    loongarch64)
++      VAR_CPU=loongarch64
++      VAR_CPU_ARCH=loongarch
++      VAR_CPU_BITS=64
++      VAR_CPU_ENDIAN=little
++      ;;
+     *)
+       AC_MSG_ERROR([unsupported cpu $1])
+       ;;
+@@ -450,6 +456,7 @@ AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS],
+   case "${OPENJDK_TARGET_CPU}" in
+     alpha*)  ZERO_ARCHDEF=ALPHA ;;
+     ia64)  ZERO_ARCHDEF=IA64 ;;
++    loongarch64)  ZERO_ARCHDEF=LOONGARCH64 ;;
+     m68k)  ZERO_ARCHDEF=M68K ;;
+     mips|mipsn32|mips64)  ZERO_ARCHDEF=MIPS ;;
+     mipsel|mipsn32el|mips64el)  ZERO_ARCHDEF=MIPSEL ;;
+diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp
+index b2c2e2bb..39459110 100644
+--- a/hotspot/src/os/linux/vm/os_linux.cpp
++++ b/hotspot/src/os/linux/vm/os_linux.cpp
+@@ -1949,6 +1949,9 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
+   #ifndef EM_AARCH64
+   #define EM_AARCH64    183               /* ARM AARCH64 */
+   #endif
++  #ifndef EM_LOONGARCH
++  #define EM_LOONGARCH  258               /* LoongArch */
++  #endif
+ 
+   static const arch_t arch_array[]={
+     {EM_386,         EM_386,     ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
+@@ -1972,7 +1975,8 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
+     {EM_PARISC,      EM_PARISC,  ELFCLASS32, ELFDATA2MSB, (char*)"PARISC"},
+     {EM_68K,         EM_68K,     ELFCLASS32, ELFDATA2MSB, (char*)"M68k"},
+     {EM_AARCH64,     EM_AARCH64, ELFCLASS64, ELFDATA2LSB, (char*)"AARCH64"},
+-    {EM_SH,          EM_SH,      ELFCLASS32, ELFDATA2LSB, (char*)"Hitachi SH"}
++    {EM_SH,          EM_SH,      ELFCLASS32, ELFDATA2LSB, (char*)"Hitachi SH"},
++    {EM_LOONGARCH,   EM_LOONGARCH, ELFCLASS64, ELFDATA2LSB, (char*)"LoongArch"}
+   };
+ 
+   #if  (defined IA32)
+@@ -2007,9 +2011,11 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
+     static  Elf32_Half running_arch_code=EM_AARCH64;
+   #elif  (defined ZERO_SH)
+     static  Elf32_Half running_arch_code=EM_SH;
++  #elif  (defined LOONGARCH64)
++    static  Elf32_Half running_arch_code=EM_LOONGARCH;
+   #else
+     #error Method os::dll_load requires that one of following is defined:\
+-         IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, AARCH64, SH
++         IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, AARCH64, SH, LOONGARCH64
+   #endif
+ 
+   // Identify compatability class for VM's architecture and library's architecture
diff --git a/rules b/rules
index f378189..4225392 100755
--- a/rules
+++ b/rules
@@ -53,7 +53,7 @@ hotspot_aarch32_archs = armhf
 hotspot_archs	= amd64 i386 arm64 ppc64 ppc64el sparc64 \
 	$(hotspot_aarch32_archs)
 jtreg_archs	= $(hotspot_archs) alpha armel armhf \
-		  ia64 mips mipsel mips64 mips64el powerpc \
+		  ia64 loong64 mips mipsel mips64 mips64el powerpc \
 		  powerpcspe ppc64 ppc64el s390x sh4 x32
 # FIXME: use bootcycle builds for zero archs?
 bootcycle_build  = $(if $(filter $(DEB_HOST_ARCH), $(hotspot_archs)),yes)
@@ -152,8 +152,8 @@ endif
 
 with_docs = $(if $(findstring nodoc, $(DEB_BUILD_OPTIONS)),,yes)
 
-arch_map	:= alpha=alpha arm=arm armel=arm armhf=arm arm64=aarch64 amd64=amd64 hppa=parisc i386=i586 m68k=m68k mips=mips mipsel=mipsel mips64=mips64 mips64el=mips64el powerpc=ppc powerpcspe=ppc ppc64=ppc64 ppc64el=ppc64le sparc=sparc sparc64=sparcv9 sh4=sh s390x=s390x ia64=ia64 x32=x32
-archdir_map	:= alpha=alpha arm=arm armel=arm armhf=arm arm64=aarch64 amd64=amd64 hppa=parisc i386=i386 m68k=m68k mips=mips mipsel=mipsel mips64=mips64 mips64el=mips64el powerpc=ppc powerpcspe=ppc ppc64=ppc64 ppc64el=ppc64le sparc=sparc sparc64=sparcv9 sh4=sh s390x=s390x ia64=ia64 x32=x32
+arch_map	:= alpha=alpha arm=arm armel=arm armhf=arm arm64=aarch64 amd64=amd64 hppa=parisc i386=i586 loong64=loongarch64 m68k=m68k mips=mips mipsel=mipsel mips64=mips64 mips64el=mips64el powerpc=ppc powerpcspe=ppc ppc64=ppc64 ppc64el=ppc64le sparc=sparc sparc64=sparcv9 sh4=sh s390x=s390x ia64=ia64 x32=x32
+archdir_map	:= alpha=alpha arm=arm armel=arm armhf=arm arm64=aarch64 amd64=amd64 hppa=parisc i386=i386 loong64=loongarch64 m68k=m68k mips=mips mipsel=mipsel mips64=mips64 mips64el=mips64el powerpc=ppc powerpcspe=ppc ppc64=ppc64 ppc64el=ppc64le sparc=sparc sparc64=sparcv9 sh4=sh s390x=s390x ia64=ia64 x32=x32
 
 jvmarch		:= $(strip $(patsubst $(DEB_HOST_ARCH_CPU)=%, %, \
 			$(filter $(DEB_HOST_ARCH_CPU)=%, $(arch_map))))
@@ -171,7 +171,7 @@ ifneq (,$(filter $(DEB_HOST_ARCH),$(hotspot_aarch32_archs)))
   hotspot_version = aarch32
 endif
 
-any_archs = alpha amd64 armel ${hotspot_aarch32_archs} arm64 i386 ia64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
+any_archs = alpha amd64 armel ${hotspot_aarch32_archs} arm64 i386 ia64 loong64 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el m68k sh4 sparc sparc64 s390x x32
 
 ifneq (,$(filter $(distrel),xenial))
   transitional_jamvm_pkg = yes
@@ -298,7 +298,7 @@ export OPT_CFLAGS_DEFAULT
 endif
 
 with_pulse = yes
-ifneq (,$(filter $(DEB_HOST_ARCH), alpha))
+ifneq (,$(filter $(DEB_HOST_ARCH), alpha loong64))
   with_pulse =
 endif
 
@@ -376,6 +376,7 @@ COMMON_PATCHES = \
 	jdk-841269-filechooser.patch \
 	jdk-i18n-pt_BR.diff \
 	hotspot-ia64.diff \
+	loong64-autoconf-config.diff \
 
 ifeq ($(derivative),Debian)
   COMMON_PATCHES += \
@@ -395,7 +396,8 @@ COMMON_PATCHES += \
 
 ifeq (,$(filter $(DEB_HOST_ARCH),$(hotspot_aarch32_archs)))
   COMMON_PATCHES += \
-	zero-sh.diff
+	zero-sh.diff \
+	loong64-backport-jdk-8270517-and-8315020.diff
 endif
 
 ifeq ($(with_pulse),yes)
@@ -965,7 +967,7 @@ stamps/configure: stamps/patch
 	-cat /etc/hosts
 
 	mkdir -p bin
-ifeq (,$(filter $(DEB_HOST_ARCH), alpha amd64 arm64 hppa mips64 mips64el ppc64 ppc64el s390x sparc64 x32))
+ifeq (,$(filter $(DEB_HOST_ARCH), alpha amd64 arm64 hppa loong64 mips64 mips64el ppc64 ppc64el s390x sparc64 x32))
 	( \
 	  echo '#! /bin/sh'; \
 	  echo 'if [ -x /usr/bin/linux32 ]; then'; \
@@ -1112,7 +1114,7 @@ build: pre-build $(build_stamps)
 	rm -f buildwatch.pid
 
 stamps/build: stamps/configure
-ifneq (,$(filter $(DEB_HOST_ARCH), alpha armel armhf ia64 m68k mips mipsel mips64 mips64el powerpc powerpcspe s390x sh4 sparc sparc64))
+ifneq (,$(filter $(DEB_HOST_ARCH), alpha armel armhf ia64 loong64 m68k mips mipsel mips64 mips64el powerpc powerpcspe s390x sh4 sparc sparc64))
 	sh -c 'sh debian/buildwatch.sh $(CURDIR)/$(builddir) &'
 endif
 	if $(EXTRA_BUILD_ENV) $(MAKE) -C $(builddir) $(build_target); then \
