/*
 * Copyright (C) 2015 Imagination Technologies
 * Author: Alex Smith <alex.smith@imgtec.com>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 */

#include "vdso.h"

#include <linux/elfnote.h>
#include <linux/version.h>

ELFNOTE_START(Linux, 0, "a")
	.long LINUX_VERSION_CODE
ELFNOTE_END

/*
 * The .MIPS.abiflags section must be defined with the FP ABI flags set
 * to 'any' to be able to link with both old and new libraries.
 * Newer toolchains are capable of automatically generating this, but we want
 * to work with older toolchains as well. Therefore, we define the contents of
 * this section here (under different names), and then genvdso will patch
 * it to have the correct name and type.
 *
 * We base the .MIPS.abiflags section on preprocessor definitions rather than
 * CONFIG_* because we need to match the particular ABI we are building the
 * VDSO for.
 *
 * See https://dmz-portal.mips.com/wiki/MIPS_O32_ABI_-_FR0_and_FR1_Interlinking
 * for the .MIPS.abiflags section description.
 */

	.section .mips_abiflags, "a"
	.align 3
__mips_abiflags:
	.hword	0		/* version */
	.byte	__mips		/* isa_level */

	/* isa_rev */
#ifdef __mips_isa_rev
	.byte	__mips_isa_rev
#else
	.byte	0
#endif

	/* gpr_size */
#ifdef __mips64
	.byte	2		/* AFL_REG_64 */
#else
	.byte	1		/* AFL_REG_32 */
#endif

	/* cpr1_size */
#if (defined(__mips_isa_rev) && __mips_isa_rev >= 6) || defined(__mips64)
	.byte	2		/* AFL_REG_64 */
#else
	.byte	1		/* AFL_REG_32 */
#endif

	.byte	0		/* cpr2_size (AFL_REG_NONE) */
	.byte	0		/* fp_abi (Val_GNU_MIPS_ABI_FP_ANY) */
	.word	0		/* isa_ext */
	.word	0		/* ases */
	.word	0		/* flags1 */
	.word	0		/* flags2 */
