162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  linux/init/version.c
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Copyright (C) 1992  Theodore Ts'o
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci *  May be freely distributed as part of Linux.
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <generated/compile.h>
1162306a36Sopenharmony_ci#include <linux/build-salt.h>
1262306a36Sopenharmony_ci#include <linux/elfnote-lto.h>
1362306a36Sopenharmony_ci#include <linux/export.h>
1462306a36Sopenharmony_ci#include <linux/init.h>
1562306a36Sopenharmony_ci#include <linux/printk.h>
1662306a36Sopenharmony_ci#include <linux/uts.h>
1762306a36Sopenharmony_ci#include <linux/utsname.h>
1862306a36Sopenharmony_ci#include <linux/proc_ns.h>
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_cistatic int __init early_hostname(char *arg)
2162306a36Sopenharmony_ci{
2262306a36Sopenharmony_ci	size_t bufsize = sizeof(init_uts_ns.name.nodename);
2362306a36Sopenharmony_ci	size_t maxlen  = bufsize - 1;
2462306a36Sopenharmony_ci	size_t arglen;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	arglen = strlcpy(init_uts_ns.name.nodename, arg, bufsize);
2762306a36Sopenharmony_ci	if (arglen > maxlen) {
2862306a36Sopenharmony_ci		pr_warn("hostname parameter exceeds %zd characters and will be truncated",
2962306a36Sopenharmony_ci			maxlen);
3062306a36Sopenharmony_ci	}
3162306a36Sopenharmony_ci	return 0;
3262306a36Sopenharmony_ci}
3362306a36Sopenharmony_ciearly_param("hostname", early_hostname);
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciconst char linux_proc_banner[] =
3662306a36Sopenharmony_ci	"%s version %s"
3762306a36Sopenharmony_ci	" (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")"
3862306a36Sopenharmony_ci	" (" LINUX_COMPILER ") %s\n";
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciBUILD_SALT;
4162306a36Sopenharmony_ciBUILD_LTO_INFO;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci/*
4462306a36Sopenharmony_ci * init_uts_ns and linux_banner contain the build version and timestamp,
4562306a36Sopenharmony_ci * which are really fixed at the very last step of build process.
4662306a36Sopenharmony_ci * They are compiled with __weak first, and without __weak later.
4762306a36Sopenharmony_ci */
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cistruct uts_namespace init_uts_ns __weak;
5062306a36Sopenharmony_ciconst char linux_banner[] __weak;
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci#include "version-timestamp.c"
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ciEXPORT_SYMBOL_GPL(init_uts_ns);
55