PR/57906: Jan-Benedict Glaw: Extend`mkbootimage` to allow for

$MKREPRO_TIMESTAMP usage
This commit is contained in:
christos 2024-02-08 17:57:54 +00:00
parent dff9645d2a
commit 7c3feac8da
2 changed files with 27 additions and 15 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile.inc,v 1.13 2010/10/17 11:19:53 kiyohara Exp $
# $NetBSD: Makefile.inc,v 1.14 2024/02/08 17:57:54 christos Exp $
.include <bsd.own.mk>
.include "${NETBSDSRCDIR}/distrib/common/Makefile.distrib"
@ -9,8 +9,13 @@
MDEC?= ${DESTDIR}/usr/mdec
BOOTLOADER?= ${MDEC}/boot
.if ${MKREPRO_TIMESTAMP:Uno} != "no"
MKBOOTIMAGE_TIMESTAMP=-t "${MKREPRO_TIMESTAMP}"
.endif
${IMAGE}:
${TOOL_POWERPCMKBOOTIMAGE} -I -m ${MACHINE} -b ${BOOTLOADER} ${.TARGET}
${TOOL_POWERPCMKBOOTIMAGE} -I -m ${MACHINE} -b ${BOOTLOADER} ${MKBOOTIMAGE_TIMESTAMP} ${.TARGET}
KFILES= ${IMAGE}

View File

@ -1,4 +1,4 @@
/* $NetBSD: mkbootimage.c,v 1.19 2016/01/21 17:14:05 christos Exp $ */
/* $NetBSD: mkbootimage.c,v 1.20 2024/02/08 17:57:54 christos Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@ -105,9 +105,7 @@ static void usage(int);
static int open_file(const char *, char *, Elf32_External_Ehdr *,
struct stat *);
static void check_mbr(int, char *);
static int prep_build_image(char *, char *, char *, char *);
static void rs6000_build_records(int);
static int rs6000_build_image(char *, char *, char *, char *);
int main(int, char **);
@ -127,10 +125,10 @@ usage(int extended)
}
#ifdef USE_SYSCTL
fprintf(stderr, "usage: %s [-Ilsv] [-m machine] [-b bootfile] "
"[-k kernel] [-r rawdev] bootimage\n", getprogname());
"[-k kernel] [-r rawdev] [-t epoch] bootimage\n", getprogname());
#else
fprintf(stderr, "usage: %s [-Ilsv] -m machine [-b bootfile] "
"[-k kernel] [-r rawdev] bootimage\n", getprogname());
"[-k kernel] [-r rawdev] [-t epoch] bootimage\n", getprogname());
#endif
exit(1);
}
@ -163,7 +161,7 @@ open_file(const char *ftype, char *file, Elf32_External_Ehdr *hdr,
if (ELFGET16(hdr->e_machine) != EM_PPC)
errx(3, "input '%s' is not PowerPC exec binary", file);
return(fd);
return fd;
}
static void
@ -680,7 +678,7 @@ bebox_write_header(int bebox_fd, int elf_image_len, int kern_img_len)
}
static int
bebox_build_image(char *kernel, char *boot, char *rawdev, char *outname)
bebox_build_image(char *kernel, char *boot, char *rawdev, char *outname, char *repro_timestamp)
{
unsigned char *elf_img = NULL, *kern_img = NULL, *header_img = NULL;
int i, ch, tmp, kgzlen, err, hsize = BEBOX_HEADER_SIZE;
@ -822,6 +820,10 @@ bebox_build_image(char *kernel, char *boot, char *rawdev, char *outname)
*(int32_t *)(header_img + BEBOX_FILE_SIZE_ALIGN_OFFSET) =
(int32_t)sa_htobe32(roundup(tmp, BEBOX_FILE_BLOCK_SIZE));
if (repro_timestamp) {
tp.tv_sec = (time_t)atoll(repro_timestamp);
tp.tv_usec = 0;
} else
gettimeofday(&tp, 0);
for (offset = bebox_mtime_offset; *offset != -1; offset++)
*(int32_t *)(header_img + *offset) =
@ -848,6 +850,7 @@ main(int argc, char **argv)
int ch, lfloppyflag=0;
char *kernel = NULL, *boot = NULL, *rawdev = NULL, *outname = NULL;
char *march = NULL;
char *repro_timestamp = NULL;
#ifdef USE_SYSCTL
char machine[SYS_NMLN];
int mib[2] = { CTL_HW, HW_MACHINE };
@ -856,7 +859,7 @@ main(int argc, char **argv)
setprogname(argv[0]);
kern_len = 0;
while ((ch = getopt(argc, argv, "b:Ik:lm:r:sv")) != -1)
while ((ch = getopt(argc, argv, "b:Ik:lm:r:st:v")) != -1)
switch (ch) {
case 'b':
boot = optarg;
@ -880,6 +883,9 @@ main(int argc, char **argv)
case 's':
saloneflag = 1;
break;
case 't':
repro_timestamp = optarg;
break;
case 'v':
verboseflag = 1;
break;
@ -924,12 +930,13 @@ main(int argc, char **argv)
outname = argv[0];
if (strcmp(march, "prep") == 0)
return(prep_build_image(kernel, boot, rawdev, outname));
return prep_build_image(kernel, boot, rawdev, outname);
if (strcmp(march, "rs6000") == 0)
return(rs6000_build_image(kernel, boot, rawdev, outname));
return rs6000_build_image(kernel, boot, rawdev, outname);
if (strcmp(march, "bebox") == 0)
return(bebox_build_image(kernel, boot, rawdev, outname));
return bebox_build_image(kernel, boot, rawdev, outname,
repro_timestamp);
usage(1);
return(0);
return 0;
}