327 lines
12 KiB
Diff
327 lines
12 KiB
Diff
From f59cfb87a948b2fb9c18ab059b74b9141419643a Mon Sep 17 00:00:00 2001
|
|
From: wzx <wuzx1226@qq.com>
|
|
Date: Wed, 26 Oct 2022 09:53:14 +0800
|
|
Subject: [PATCH] Add sw64 architecture
|
|
|
|
Signed-off-by: wzx <wuzx1226@qq.com>
|
|
---
|
|
configure | 2 ++
|
|
configure.ac | 2 ++
|
|
include/pt-bsd.h | 4 ++--
|
|
libblkid/src/partitions/bsd.c | 1 +
|
|
libfdisk/src/bsd.c | 16 ++++++++--------
|
|
sys-utils/hwclock-rtc.c | 2 +-
|
|
sys-utils/hwclock.c | 12 ++++++------
|
|
sys-utils/hwclock.h | 6 +++---
|
|
sys-utils/lscpu-cputype.c | 2 +-
|
|
sys-utils/setarch.c | 4 ++++
|
|
tests/ts/fdisk/bsd | 5 ++++-
|
|
11 files changed, 34 insertions(+), 22 deletions(-)
|
|
|
|
diff --git a/configure b/configure
|
|
index 0671c06..6bd1f57 100755
|
|
--- a/configure
|
|
+++ b/configure
|
|
@@ -39881,6 +39881,7 @@ else $as_nop
|
|
case $host_cpu in
|
|
#(
|
|
alpha) syscall="442" ;; #(
|
|
+ sw_64) syscall="442" ;; #(
|
|
i*86) syscall="289" ;; #(
|
|
ia64*) syscall="1274" ;; #(
|
|
powerpc*) syscall="273" ;; #(
|
|
@@ -39986,6 +39987,7 @@ else $as_nop
|
|
case $host_cpu in
|
|
#(
|
|
alpha) syscall="443" ;; #(
|
|
+ sw_64) syscall="443" ;; #(
|
|
i*86) syscall="290" ;; #(
|
|
ia64*) syscall="1275" ;; #(
|
|
powerpc*) syscall="274" ;; #(
|
|
diff --git a/configure.ac b/configure.ac
|
|
index 2cb236f..d9d8691 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -2392,6 +2392,7 @@ UL_BUILD_INIT([ionice])
|
|
UL_REQUIRES_SYSCALL_CHECK([ionice],
|
|
[UL_CHECK_SYSCALL([ioprio_set],
|
|
[alpha], [442],
|
|
+ [sw_64], [442],
|
|
[i*86], [289],
|
|
[ia64*], [1274],
|
|
[powerpc*], [273],
|
|
@@ -2404,6 +2405,7 @@ UL_REQUIRES_SYSCALL_CHECK([ionice],
|
|
UL_REQUIRES_SYSCALL_CHECK([ionice],
|
|
[UL_CHECK_SYSCALL([ioprio_get],
|
|
[alpha], [443],
|
|
+ [sw_64], [443],
|
|
[i*86], [290],
|
|
[ia64*], [1275],
|
|
[powerpc*], [274],
|
|
diff --git a/include/pt-bsd.h b/include/pt-bsd.h
|
|
index 20c24b7..b878258 100644
|
|
--- a/include/pt-bsd.h
|
|
+++ b/include/pt-bsd.h
|
|
@@ -14,7 +14,7 @@
|
|
|
|
#define BSD_LINUX_BOOTDIR "/usr/ucb/mdec"
|
|
|
|
-#if defined (__alpha__) || defined (__powerpc__) || \
|
|
+#if defined (__alpha__) || defined (__sw_64__) || defined (__powerpc__) || \
|
|
defined (__ia64__) || defined (__hppa__)
|
|
# define BSD_LABELSECTOR 0
|
|
# define BSD_LABELOFFSET 64
|
|
@@ -141,7 +141,7 @@ struct bsd_disklabel {
|
|
#define BSD_FS_ADVFS 16 /* Digital Unix AdvFS */
|
|
|
|
/* this is annoying, but it's also the way it is :-( */
|
|
-#ifdef __alpha__
|
|
+#if defined __alpha__ || defined __sw_64__
|
|
#define BSD_FS_EXT2 8 /* ext2 file system */
|
|
#else
|
|
#define BSD_FS_MSDOS 8 /* MS-DOS file system */
|
|
diff --git a/libblkid/src/partitions/bsd.c b/libblkid/src/partitions/bsd.c
|
|
index ba12019..e7e4486 100644
|
|
--- a/libblkid/src/partitions/bsd.c
|
|
+++ b/libblkid/src/partitions/bsd.c
|
|
@@ -183,6 +183,7 @@ nothing:
|
|
* ------------------------+-------------+------------
|
|
* alpha luna88k mac68k | 0 | 64
|
|
* sparc(OpenBSD) vax | |
|
|
+ * sw_64 | |
|
|
* ------------------------+-------------+------------
|
|
* sparc64 sparc(NetBSD) | 0 | 128
|
|
* ------------------------+-------------+------------
|
|
diff --git a/libfdisk/src/bsd.c b/libfdisk/src/bsd.c
|
|
index 313ae5a..875fa11 100644
|
|
--- a/libfdisk/src/bsd.c
|
|
+++ b/libfdisk/src/bsd.c
|
|
@@ -55,7 +55,7 @@ static struct fdisk_parttype bsd_fstypes[] = {
|
|
{BSD_FS_V71K, "4.1BSD"},
|
|
{BSD_FS_V8, "Eighth Edition"},
|
|
{BSD_FS_BSDFFS, "4.2BSD"},
|
|
-#ifdef __alpha__
|
|
+#if defined __alpha__ || defined __sw_64__
|
|
{BSD_FS_EXT2, "ext2"},
|
|
#else
|
|
{BSD_FS_MSDOS, "MS-DOS"},
|
|
@@ -80,7 +80,7 @@ struct fdisk_bsd_label {
|
|
|
|
struct dos_partition *dos_part; /* parent */
|
|
struct bsd_disklabel bsd; /* on disk label */
|
|
-#if defined (__alpha__)
|
|
+#if defined (__alpha__) || defined (__sw_64__)
|
|
/* We access this through a u_int64_t * when checksumming */
|
|
char bsdbuffer[BSD_BBSIZE] __attribute__((aligned(8)));
|
|
#else
|
|
@@ -120,7 +120,7 @@ static struct fdisk_parttype *bsd_partition_parttype(
|
|
}
|
|
|
|
|
|
-#if defined (__alpha__)
|
|
+#if defined (__alpha__) || defined (__sw_64__)
|
|
static void alpha_bootblock_checksum (char *boot)
|
|
{
|
|
uint64_t *dp = (uint64_t *) boot, sum = 0;
|
|
@@ -606,7 +606,7 @@ int fdisk_bsd_edit_disklabel(struct fdisk_context *cxt)
|
|
struct bsd_disklabel *d = self_disklabel(cxt);
|
|
uintmax_t res;
|
|
|
|
-#if defined (__alpha__) || defined (__ia64__)
|
|
+#if defined (__alpha__) || defined (__sw_64__) || defined (__ia64__)
|
|
if (fdisk_ask_number(cxt, DEFAULT_SECTOR_SIZE, d->d_secsize,
|
|
UINT32_MAX, _("bytes/sector"), &res) == 0)
|
|
d->d_secsize = res;
|
|
@@ -712,7 +712,7 @@ int fdisk_bsd_write_bootstrap(struct fdisk_context *cxt)
|
|
sector = 0;
|
|
if (l->dos_part)
|
|
sector = dos_partition_get_start(l->dos_part);
|
|
-#if defined (__alpha__)
|
|
+#if defined (__alpha__) || defined (__sw_64__)
|
|
alpha_bootblock_checksum(l->bsdbuffer);
|
|
#endif
|
|
if (lseek(cxt->dev_fd, (off_t) sector * DEFAULT_SECTOR_SIZE, SEEK_SET) == -1) {
|
|
@@ -769,7 +769,7 @@ static int bsd_initlabel (struct fdisk_context *cxt)
|
|
else
|
|
d -> d_type = BSD_DTYPE_ST506;
|
|
|
|
-#if !defined (__alpha__)
|
|
+#if !defined (__alpha__) && !defined (__sw_64__)
|
|
d -> d_flags = BSD_D_DOSPART;
|
|
#else
|
|
d -> d_flags = 0;
|
|
@@ -893,7 +893,7 @@ static int bsd_write_disklabel(struct fdisk_context *cxt)
|
|
memmove(&l->bsdbuffer[BSD_LABELSECTOR * DEFAULT_SECTOR_SIZE
|
|
+ BSD_LABELOFFSET], d, sizeof(*d));
|
|
|
|
-#if defined (__alpha__) && BSD_LABELSECTOR == 0
|
|
+#if (defined (__alpha__) || defined (__sw_64__)) && BSD_LABELSECTOR == 0
|
|
/* Write the checksum to the end of the first sector. */
|
|
alpha_bootblock_checksum(l->bsdbuffer);
|
|
#endif
|
|
@@ -929,7 +929,7 @@ static int bsd_translate_fstype (int linux_type)
|
|
case 0x06: /* DOS 16-bit >=32M */
|
|
case 0xe1: /* DOS access */
|
|
case 0xe3: /* DOS R/O */
|
|
-#if !defined (__alpha__)
|
|
+#if !defined (__alpha__) && !defined (__sw_64__)
|
|
case 0xf2: /* DOS secondary */
|
|
return BSD_FS_MSDOS;
|
|
#endif
|
|
diff --git a/sys-utils/hwclock-rtc.c b/sys-utils/hwclock-rtc.c
|
|
index 7094cd0..11adb81 100644
|
|
--- a/sys-utils/hwclock-rtc.c
|
|
+++ b/sys-utils/hwclock-rtc.c
|
|
@@ -340,7 +340,7 @@ const struct clock_ops *probe_for_rtc_clock(const struct hwclock_control *ctl)
|
|
return &rtc_interface;
|
|
}
|
|
|
|
-#ifdef __alpha__
|
|
+#if defined __alpha__ || defined __sw_64__
|
|
/*
|
|
* Get the Hardware Clock epoch setting from the kernel.
|
|
*/
|
|
diff --git a/sys-utils/hwclock.c b/sys-utils/hwclock.c
|
|
index 2a18443..87228b5 100644
|
|
--- a/sys-utils/hwclock.c
|
|
+++ b/sys-utils/hwclock.c
|
|
@@ -1133,7 +1133,7 @@ manipulate_clock(const struct hwclock_control *ctl, const time_t set_time,
|
|
* Get or set the kernel RTC driver's epoch on Alpha machines.
|
|
* ISA machines are hard coded for 1900.
|
|
*/
|
|
-#if defined(__linux__) && defined(__alpha__)
|
|
+#if defined(__linux__) && (defined(__alpha__) || defined(__sw_64__))
|
|
static void
|
|
manipulate_epoch(const struct hwclock_control *ctl)
|
|
{
|
|
@@ -1208,7 +1208,7 @@ usage(void)
|
|
puts(_(" -w, --systohc set the RTC from the system time"));
|
|
puts(_(" --systz send timescale configurations to the kernel"));
|
|
puts(_(" -a, --adjust adjust the RTC to account for systematic drift"));
|
|
-#if defined(__linux__) && defined(__alpha__)
|
|
+#if defined(__linux__) && (defined(__alpha__) || defined(__sw_64__))
|
|
puts(_(" --getepoch display the RTC epoch"));
|
|
puts(_(" --setepoch set the RTC epoch according to --epoch"));
|
|
#endif
|
|
@@ -1228,7 +1228,7 @@ usage(void)
|
|
" --directisa use the ISA bus instead of %1$s access\n"), _PATH_RTC_DEV);
|
|
puts(_(" --date <time> date/time input for --set and --predict"));
|
|
puts(_(" --delay <sec> delay used when set new RTC time"));
|
|
-#if defined(__linux__) && defined(__alpha__)
|
|
+#if defined(__linux__) && (defined(__alpha__) || defined(__sw_64__))
|
|
puts(_(" --epoch <year> epoch input for --setepoch"));
|
|
#endif
|
|
puts(_(" --update-drift update the RTC drift factor"));
|
|
@@ -1307,7 +1307,7 @@ int main(int argc, char **argv)
|
|
{ "ul-debug", required_argument, NULL, 'd' },
|
|
{ "verbose", no_argument, NULL, 'v' },
|
|
{ "set", no_argument, NULL, OPT_SET },
|
|
-#if defined(__linux__) && defined(__alpha__)
|
|
+#if defined(__linux__) && (defined(__alpha__) || defined(__sw_64__))
|
|
{ "getepoch", no_argument, NULL, OPT_GETEPOCH },
|
|
{ "setepoch", no_argument, NULL, OPT_SETEPOCH },
|
|
{ "epoch", required_argument, NULL, OPT_EPOCH },
|
|
@@ -1415,7 +1415,7 @@ int main(int argc, char **argv)
|
|
ctl.show = 0;
|
|
ctl.hwaudit_on = 1;
|
|
break;
|
|
-#if defined(__linux__) && defined(__alpha__)
|
|
+#if defined(__linux__) && (defined(__alpha__) || defined(__sw_64__))
|
|
case OPT_GETEPOCH:
|
|
ctl.getepoch = 1;
|
|
ctl.show = 0;
|
|
@@ -1542,7 +1542,7 @@ int main(int argc, char **argv)
|
|
}
|
|
#endif
|
|
|
|
-#if defined(__linux__) && defined(__alpha__)
|
|
+#if defined(__linux__) && (defined(__alpha__) || defined(__sw_64__))
|
|
if (ctl.getepoch || ctl.setepoch) {
|
|
manipulate_epoch(&ctl);
|
|
hwclock_exit(&ctl, EXIT_SUCCESS);
|
|
diff --git a/sys-utils/hwclock.h b/sys-utils/hwclock.h
|
|
index b5b72d4..d29d95e 100644
|
|
--- a/sys-utils/hwclock.h
|
|
+++ b/sys-utils/hwclock.h
|
|
@@ -24,7 +24,7 @@ struct hwclock_control {
|
|
char *date_opt;
|
|
char *adj_file_name;
|
|
double rtc_delay; /* --delay <seconds> */
|
|
-#if defined(__linux__) && defined(__alpha__)
|
|
+#if defined(__linux__) && (defined(__alpha__) || defined(__sw_64__))
|
|
char *epoch_option;
|
|
#endif
|
|
#ifdef __linux__
|
|
@@ -39,7 +39,7 @@ struct hwclock_control {
|
|
hctosys:1,
|
|
utc:1,
|
|
systohc:1,
|
|
-#if defined(__linux__) && defined(__alpha__)
|
|
+#if defined(__linux__) && (defined(__alpha__) || defined(__sw_64__))
|
|
getepoch:1,
|
|
setepoch:1,
|
|
#endif
|
|
@@ -72,7 +72,7 @@ extern const struct clock_ops *probe_for_rtc_clock(const struct hwclock_control
|
|
extern double time_diff(struct timeval subtrahend, struct timeval subtractor);
|
|
|
|
/* rtc.c */
|
|
-#if defined(__linux__) && defined(__alpha__)
|
|
+#if defined(__linux__) && (defined(__alpha__) || defined(__sw_64__))
|
|
extern int get_epoch_rtc(const struct hwclock_control *ctl, unsigned long *epoch);
|
|
extern int set_epoch_rtc(const struct hwclock_control *ctl);
|
|
#endif
|
|
diff --git a/sys-utils/lscpu-cputype.c b/sys-utils/lscpu-cputype.c
|
|
index 3fd5f7a..b01ed21 100644
|
|
--- a/sys-utils/lscpu-cputype.c
|
|
+++ b/sys-utils/lscpu-cputype.c
|
|
@@ -611,7 +611,7 @@ struct lscpu_arch *lscpu_read_architecture(struct lscpu_cxt *cxt)
|
|
* information about our real CPU */
|
|
;
|
|
else {
|
|
-#if defined(__alpha__) || defined(__ia64__)
|
|
+#if defined(__alpha__) || defined(__sw_64__) || defined(__ia64__)
|
|
ar->bit64 = 1; /* 64bit platforms only */
|
|
#endif
|
|
/* platforms with 64bit flag in /proc/cpuinfo, define
|
|
diff --git a/sys-utils/setarch.c b/sys-utils/setarch.c
|
|
index 78b5183..f4f6e56 100644
|
|
--- a/sys-utils/setarch.c
|
|
+++ b/sys-utils/setarch.c
|
|
@@ -229,6 +229,10 @@ static struct arch_domain *init_arch_domains(void)
|
|
{PER_LINUX32, "mips", "mips"},
|
|
{PER_LINUX, "mips64", "mips64"},
|
|
#endif
|
|
+#if defined(__sw_64__)
|
|
+ {PER_LINUX, "sw_64", "sw_64"},
|
|
+ {PER_LINUX, "sw_64sw6b", "sw_64"},
|
|
+#endif
|
|
#if defined(__alpha__)
|
|
{PER_LINUX, "alpha", "alpha"},
|
|
{PER_LINUX, "alphaev5", "alpha"},
|
|
diff --git a/tests/ts/fdisk/bsd b/tests/ts/fdisk/bsd
|
|
index 8477f92..48e2a35 100755
|
|
--- a/tests/ts/fdisk/bsd
|
|
+++ b/tests/ts/fdisk/bsd
|
|
@@ -48,7 +48,7 @@ BYTE_ORDER=$($TS_HELPER_SYSINFO byte-order)
|
|
ARCH=$(uname -m)
|
|
case $ARCH in
|
|
# see include/pt-bsd.h
|
|
- *alpha* | *ppc* | *ia64* | *hppa* | *parisc* )
|
|
+ *sw_64* | *alpha* | *ppc* | *ia64* | *hppa* | *parisc* )
|
|
BSD_LABELSECTOR=0
|
|
BSD_LABELOFFSET=64
|
|
;;
|
|
@@ -61,6 +61,9 @@ esac
|
|
# and contains extra options for alpha
|
|
BSD_EXTRA=""
|
|
case $ARCH in
|
|
+ *sw_64*)
|
|
+ BSD_EXTRA="_sw_64"
|
|
+ ;;
|
|
*alpha*)
|
|
BSD_EXTRA="_alpha"
|
|
;;
|
|
--
|
|
2.33.0
|
|
|