--- Begin Message ---
Source: checkinstall
Version: 1.6.2+git20170426.d24a630-5
Severity: normal
X-Debbugs-Cc: [email protected]
Dear Maintainer,
checkinstall compiles incorrectly on loongarch, the attached patch has solved
the above problem, and has been verified on loongarch. Please merge the
attached patch.
-- System Information:
Debian Release: trixie/sid
APT prefers unreleased
APT policy: (500, 'unreleased'), (500, 'unstable')
Architecture: loong64 (loongarch64)
Kernel: Linux 5.10.0-60.96.0.126.oe2203.loongarch64 (SMP w/32 CPU threads)
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: unable to detect
Description: <short summary of the patch>
TODO: Put a short summary on the line above and replace this paragraph
with a longer explanation of this change. Complete the meta-information
with other relevant fields (see below for details). To make it easier, the
information below has been extracted from the changelog. Adjust it or drop
it.
.
checkinstall (1.6.2+git20170426.d24a630-5) unstable; urgency=medium
.
[ Stephen Gelman ]
* Fix HPPA build (Closes: #1055075)
Thanks John David Anglin for the patch!
* Fix riscv64 build (Closes: #1055077)
Thanks Aurelien Jarno for the patch!
* Fix armhf/armel build post-t64 transition (Closes: #1069436)
.
[ Samuel Thibault ]
* control: Add hurd-amd64 case.
Author: Stephen Gelman <[email protected]>
Bug-Debian: https://bugs.debian.org/1055075
Bug-Debian: https://bugs.debian.org/1055077
Bug-Debian: https://bugs.debian.org/1069436
---
The information above should follow the Patch Tagging Guidelines, please
checkout https://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:
Origin: (upstream|backport|vendor|other), (<patch-url>|commit:<commit-id>)
Bug: <upstream-bugtracker-url>
Bug-Debian: https://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: (no|not-needed|<patch-forwarded-url>)
Applied-Upstream: <version>, (<commit-url>|commit:<commid-id>)
Reviewed-By: <name and email of someone who approved/reviewed the patch>
Last-Update: 2024-10-16
--- checkinstall-1.6.2+git20170426.d24a630.orig/installwatch/installwatch.c
+++ checkinstall-1.6.2+git20170426.d24a630/installwatch/installwatch.c
@@ -152,6 +152,17 @@ static int (*true_renameat2)(int, const
static int (*true_symlinkat)(const char *, int, const char *);
static int (*true_unlinkat)(int, const char *, int);
+#ifdef __loongarch64
+static int (*true_stat)(const char *, struct stat *);
+static int (*true_stat64)(const char *, struct stat64 *);
+static int (*true_mknod)(const char *, mode_t, dev_t);
+static int (*true_lstat)(const char *, struct stat *);
+static int (*true_lstat64)(const char *, struct stat64 *);
+static int (*true_fstatat)(int, const char *, struct stat *, int);
+static int (*true_fstatat64)(int, const char *, struct stat64 *, int);
+static int (*true_mknodat)(int, const char *, mode_t, dev_t);
+#endif
+
#if defined __GNUC__ && __GNUC__>=2
#define inline inline
#else
@@ -179,6 +190,8 @@ static int (*true_unlinkat)(int, const c
#endif
#endif
+
+#ifndef __loongarch64
static inline int true_stat(const char *pathname,struct stat *info) {
return true_xstat(_STAT_VER,pathname,info);
}
@@ -202,6 +215,7 @@ static inline int true_fstatat64(int dir
static inline int true_mknodat(int dirfd, const char *pathname,mode_t
mode,dev_t dev) {
return true_xmknodat(_MKNOD_VER, dirfd, pathname, mode, &dev);
}
+#endif
/* A few defines to fix things a little */
@@ -427,6 +441,17 @@ static void initialize(void) {
true_symlinkat = dlsym(libc_handle, "symlinkat");
true_unlinkat = dlsym(libc_handle, "unlinkat");
+#ifdef __loongarch64
+ true_stat = dlsym(libc_handle, "stat");
+ true_stat64 = dlsym(libc_handle, "stat64");
+ true_mknod = dlsym(libc_handle, "mknod");
+ true_mknodat = dlsym(libc_handle, "mknodat");
+ true_lstat = dlsym(libc_handle, "lstat");
+ true_lstat64 = dlsym(libc_handle, "lstat64");
+ true_fstatat = dlsym(libc_handle, "fstatat");
+ true_fstatat64 = dlsym(libc_handle, "fstatat64");
+#endif
+
if(instw_init()) exit(-1);
}
@@ -2813,6 +2838,46 @@ int mkdir(const char *pathname, mode_t m
return result;
}
+#ifdef __loongarch64
+int mknod(const char *pathname, mode_t mode, dev_t dev) {
+ int result;
+ instw_t instw;
+
+ REFCOUNT;
+
+ if (!libc_handle)
+ initialize();
+
+#if DEBUG
+ debug(2,"mknod(%s,mode,dev)\n",pathname);
+#endif
+
+ /* We were asked to work in "real" mode */
+ if( !(__instw.gstatus & INSTW_INITIALIZED) ||
+ !(__instw.gstatus & INSTW_OKWRAP) ) {
+ result=true_mknod(pathname,mode,dev);
+ return result;
+ }
+
+ instw_new(&instw);
+ instw_setpath(&instw,pathname);
+
+#if DEBUG
+ instw_print(&instw);
+#endif
+
+ instw_apply(&instw);
+ backup(instw.truepath);
+
+ result=true_mknod(instw.translpath,mode,dev);
+ logg("%d\tmknod\t%s\t#%s\n",result,instw.reslvpath,error(result));
+
+ instw_delete(&instw);
+
+ return result;
+}
+#endif
+
int __xmknod(int version,const char *pathname, mode_t mode,dev_t *dev) {
int result;
instw_t instw;
@@ -3136,6 +3201,49 @@ int scandir( const char *dir,struct dire
}
#endif
+#ifdef __loongarch64
+int stat(const char *pathname, struct stat *info) {
+ int result;
+ instw_t instw;
+ int status;
+
+ if(!libc_handle)
+ initialize();
+#if DEBUG
+ debug(2, "stat(%s, %p)\n", pathname, info);
+#endif
+ /* We were asked to work in "real" mode */
+ if(!(__instw.gstatus & INSTW_INITIALIZED) ||
+ !(__instw.gstatus & INSTW_OKWRAP)) {
+ result = true_stat(pathname, info);
+ return result;
+ }
+
+ instw_new(&instw);
+ instw_setpath(&instw, pathname);
+ instw_getstatus(&instw, &status);
+
+#if DEBUG
+ instw_print(&instw);
+#endif
+
+ if(status&INSTW_TRANSLATED) {
+ debug(4,"\teffective stat(%s,%p)\n",
+ instw.translpath,info);
+ result=true_stat(instw.translpath,info);
+ } else {
+ debug(4,"\teffective stat(%s,%p)\n",
+ instw.path,info);
+ result=true_stat(instw.path,info);
+ }
+
+ instw_delete(&instw);
+
+ return result;
+}
+
+#endif
+
int __xstat(int version,const char *pathname,struct stat *info) {
int result;
instw_t instw;
@@ -3178,6 +3286,50 @@ int __xstat(int version,const char *path
return result;
}
+#ifdef __loongarch64
+int lstat(const char *pathname,struct stat *info) {
+ int result;
+ instw_t instw;
+ int status;
+
+ if (!libc_handle)
+ initialize();
+
+#if DEBUG
+ debug(2,"lstat(%s,%p)\n",pathname,info);
+#endif
+
+ /* We were asked to work in "real" mode */
+ if( !(__instw.gstatus & INSTW_INITIALIZED) ||
+ !(__instw.gstatus & INSTW_OKWRAP) ) {
+ result=true_lstat(pathname,info);
+ return result;
+ }
+
+ instw_new(&instw);
+ instw_setpath(&instw,pathname);
+ instw_getstatus(&instw,&status);
+
+#if DEBUG
+ instw_print(&instw);
+#endif
+
+ if(status&INSTW_TRANSLATED) {
+ debug(4,"\teffective lstat(%s,%p)\n",
+ instw.translpath,info);
+ result=true_lstat(instw.translpath,info);
+ } else {
+ debug(4,"\teffective lstat(%s,%p)\n",
+ instw.path,info);
+ result=true_lstat(instw.path,info);
+ }
+
+ instw_delete(&instw);
+
+ return result;
+}
+#endif
+
int __lxstat(int version,const char *pathname,struct stat *info) {
int result;
instw_t instw;
@@ -3753,6 +3905,53 @@ int scandir64( const char *dir,struct di
return result;
}
+#ifdef __loongarch64
+int stat64(const char *pathname,struct stat64 *info) {
+ int result;
+ instw_t instw;
+ int status;
+
+ if (!libc_handle)
+ initialize();
+
+#if DEBUG
+ debug(2,"stat64(%s,%p)\n",pathname,info);
+#endif
+
+ /* We were asked to work in "real" mode */
+ if( !(__instw.gstatus & INSTW_INITIALIZED) ||
+ !(__instw.gstatus & INSTW_OKWRAP) ) {
+ result=true_stat64(pathname,info);
+ return result;
+ }
+
+ instw_new(&instw);
+ instw_setpath(&instw,pathname);
+ instw_getstatus(&instw,&status);
+
+ if (!libc_handle)
+ initialize();
+
+#if DEBUG
+ instw_print(&instw);
+#endif
+
+ if(status&INSTW_TRANSLATED) {
+ debug(4,"\teffective stat64(%s,%p)\n",
+ instw.translpath,info);
+ result=true_stat64(instw.translpath,info);
+ } else {
+ debug(4,"\teffective stat64(%s,%p)\n",
+ instw.path,info);
+ result=true_stat64(instw.path,info);
+ }
+
+ instw_delete(&instw);
+
+ return result;
+}
+#endif
+
int __xstat64(int version,const char *pathname,struct stat64 *info) {
int result;
instw_t instw;
@@ -3798,6 +3997,47 @@ int __xstat64(int version,const char *pa
return result;
}
+#ifdef __loongarch64
+int lstat64(const char *pathname,struct stat64 *info) {
+ int result;
+ instw_t instw;
+ int status;
+
+#if DEBUG
+ debug(2,"lstat64(%s,%p)\n",pathname,info);
+#endif
+
+ /* We were asked to work in "real" mode */
+ if( !(__instw.gstatus & INSTW_INITIALIZED) ||
+ !(__instw.gstatus & INSTW_OKWRAP) ) {
+ result=true_lstat64(pathname,info);
+ return result;
+ }
+
+ instw_new(&instw);
+ instw_setpath(&instw,pathname);
+ instw_getstatus(&instw,&status);
+
+#if DEBUG
+ instw_print(&instw);
+#endif
+
+ if(status&INSTW_TRANSLATED) {
+ debug(4,"\teffective lstat64(%s,%p)\n",
+ instw.translpath,info);
+ result=true_lstat64(instw.translpath,info);
+ } else {
+ debug(4,"\teffective lstat64(%s,%p)\n",
+ instw.path,info);
+ result=true_lstat64(instw.path,info);
+ }
+
+ instw_delete(&instw);
+
+ return result;
+}
+#endif
+
int __lxstat64(int version,const char *pathname,struct stat64 *info) {
int result;
instw_t instw;
@@ -4057,6 +4297,80 @@ int fchownat (int dirfd, const char *pat
return result;
}
+#ifdef __loongarch64
+int fstatat (int dirfd, const char *path, struct stat *s, int flags) {
+
+ int result;
+ instw_t instw;
+
+ /* If all we are doing is normal open, forgo refcounting, etc. */
+ if(dirfd == AT_FDCWD || *path == '/')
+ {
+ #if DEBUG
+ debug(2, "fstatat(%d,%s,%p,0%o)\n", dirfd, path, s,
flags);
+ #endif
+
+ /* If we have AT_SYMLINK_NOFOLLOW then we need */
+ /* lstat() behaviour, according to fstatat(2) */
+
+ if ( flags & AT_SYMLINK_NOFOLLOW ) {
+ return lstat(path, s);
+ }
+ else {
+ return stat(path, s);
+ }
+
+ }
+
+ REFCOUNT;
+
+ if (!libc_handle)
+ initialize();
+
+#if DEBUG
+ debug(2, "fstatat(%d,%s,%p,0%o)\n", dirfd, path, s, flags);
+#endif
+
+ /* We were asked to work in "real" mode */
+ if(!(__instw.gstatus & INSTW_INITIALIZED) ||
+ !(__instw.gstatus & INSTW_OKWRAP)) {
+
+
+ /* If we have AT_SYMLINK_NOFOLLOW then we need */
+ /* lstat() behaviour, according to fstatat(2) */
+
+ if ( flags & AT_SYMLINK_NOFOLLOW ) {
+ return true_lstat(path, s);
+ }
+ else {
+ return true_stat(path, s);
+ }
+ }
+
+
+ instw_new(&instw);
+ instw_setpathrel(&instw,dirfd,path);
+
+#if DEBUG
+ instw_print(&instw);
+#endif
+
+ /* If we have AT_SYMLINK_NOFOLLOW then we need */
+ /* lstat() behaviour, according to fstatat(2) */
+
+ if ( flags & AT_SYMLINK_NOFOLLOW ) {
+ result=lstat(instw.path, s);
+ }
+ else {
+ result=stat(instw.path, s);
+
+ }
+
+ instw_delete(&instw);
+
+ return result;
+}
+#endif
int __fxstatat (int version, int dirfd, const char *path, struct stat *s, int
flags) {
@@ -4131,6 +4445,80 @@ int __fxstatat (int version, int dirfd,
return result;
}
+#ifdef __loongarch64
+int fstatat64 (int dirfd, const char *path, struct stat64 *s, int flags) {
+
+ int result;
+ instw_t instw;
+
+ /* If all we are doing is normal open, forgo refcounting, etc. */
+ if(dirfd == AT_FDCWD || *path == '/')
+ {
+ #if DEBUG
+ debug(2, "fstatat(%d,%s,%p,0%o)\n", dirfd, path, s,
flags);
+ #endif
+
+ /* If we have AT_SYMLINK_NOFOLLOW then we need */
+ /* lstat() behaviour, according to fstatat(2) */
+
+ if ( flags & AT_SYMLINK_NOFOLLOW ) {
+ return lstat64(path, s);
+ }
+ else {
+ return stat64(path, s);
+ }
+
+ }
+
+ REFCOUNT;
+
+ if (!libc_handle)
+ initialize();
+
+#if DEBUG
+ debug(2, "fstatat(%d,%s,%p,0%o)\n", dirfd, path, s, flags);
+#endif
+
+ /* We were asked to work in "real" mode */
+ if(!(__instw.gstatus & INSTW_INITIALIZED) ||
+ !(__instw.gstatus & INSTW_OKWRAP)) {
+
+ /* If we have AT_SYMLINK_NOFOLLOW then we need */
+ /* lstat() behaviour, according to fstatat(2) */
+
+ if ( flags & AT_SYMLINK_NOFOLLOW ) {
+ return true_lstat64(path, s);
+ }
+ else {
+ return true_stat64(path, s);
+ }
+ }
+
+
+ instw_new(&instw);
+ instw_setpathrel(&instw,dirfd,path);
+
+#if DEBUG
+ instw_print(&instw);
+#endif
+
+ /* If we have AT_SYMLINK_NOFOLLOW then we need */
+ /* lstat() behaviour, according to fstatat(2) */
+
+ if ( flags & AT_SYMLINK_NOFOLLOW ) {
+ result=lstat64(instw.path, s);
+ }
+ else {
+ result=stat64(instw.path, s);
+ }
+
+ instw_delete(&instw);
+
+ return result;
+
+}
+#endif
+
int __fxstatat64 (int version, int dirfd, const char *path, struct stat64 *s,
int flags) {
int result;
@@ -4336,6 +4724,50 @@ READLINKAT_T readlinkat (int dirfd, cons
return result;
}
+#ifdef __loongarch64
+int mknodat (int dirfd,const char *path,mode_t mode,dev_t dev) {
+
+ int result;
+ instw_t instw;
+
+ /* If all we are doing is normal open, forgo refcounting, etc. */
+ if(dirfd == AT_FDCWD || *path == '/')
+ {
+ #if DEBUG
+ debug(2, "mknod(%s, mode, dev)\n", path);
+ #endif
+ return mknod(path, mode, dev);
+ }
+
+ REFCOUNT;
+
+ if (!libc_handle)
+ initialize();
+
+#if DEBUG
+ debug(2, "mknod(%s, mode, dev)\n", path);
+#endif
+
+ /* We were asked to work in "real" mode */
+ if(!(__instw.gstatus & INSTW_INITIALIZED) ||
+ !(__instw.gstatus & INSTW_OKWRAP))
+ return true_mknod(path, mode, dev);
+
+ instw_new(&instw);
+ instw_setpathrel(&instw,dirfd,path);
+
+#if DEBUG
+ instw_print(&instw);
+#endif
+
+ result=mknod(instw.path, mode, dev);
+
+ instw_delete(&instw);
+
+ return result;
+}
+#endif
+
int __xmknodat (int version, int dirfd,const char *path,mode_t mode,dev_t
*dev) {
--- End Message ---