MIPS: add asm-offsets.h generation
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
fbf502a9c2
commit
ddac4f3ea2
|
@ -143,3 +143,46 @@ dtbs: scripts
|
|||
KBUILD_DTBS := dtbs
|
||||
|
||||
KBUILD_IMAGE ?= $(KBUILD_BINARY)
|
||||
|
||||
#####
|
||||
# Generate asm-offsets.h
|
||||
#
|
||||
|
||||
offsets-file := include/generated/asm-offsets.h
|
||||
|
||||
always += $(offsets-file)
|
||||
targets += $(offsets-file)
|
||||
targets += arch/$(SRCARCH)/lib/asm-offsets.s
|
||||
|
||||
# Default sed regexp - multiline due to syntax constraints
|
||||
define sed-y
|
||||
"/^->/{s:->#\(.*\):/* \1 */:; \
|
||||
s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
|
||||
s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
|
||||
s:->::; p;}"
|
||||
endef
|
||||
|
||||
quiet_cmd_offsets = GEN $@
|
||||
define cmd_offsets
|
||||
(set -e; \
|
||||
echo "#ifndef __ASM_OFFSETS_H__"; \
|
||||
echo "#define __ASM_OFFSETS_H__"; \
|
||||
echo "/*"; \
|
||||
echo " * DO NOT MODIFY."; \
|
||||
echo " *"; \
|
||||
echo " * This file was generated by Kbuild"; \
|
||||
echo " *"; \
|
||||
echo " */"; \
|
||||
echo ""; \
|
||||
sed -ne $(sed-y) $<; \
|
||||
echo ""; \
|
||||
echo "#endif" ) > $@
|
||||
endef
|
||||
|
||||
# We use internal kbuild rules to avoid the "is up to date" message from make
|
||||
arch/$(SRCARCH)/lib/asm-offsets.s: arch/$(SRCARCH)/lib/asm-offsets.c FORCE
|
||||
$(Q)mkdir -p $(dir $@)
|
||||
$(call if_changed_dep,cc_s_c)
|
||||
|
||||
$(obj)/$(offsets-file): arch/$(SRCARCH)/lib/asm-offsets.s Makefile
|
||||
$(call cmd,offsets)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 by Ralf Baechle
|
||||
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
|
||||
*/
|
||||
|
||||
#ifndef _ASM_PTRACE_H
|
||||
#define _ASM_PTRACE_H
|
||||
|
||||
/*
|
||||
* This struct defines the way the registers are stored on the stack during an
|
||||
* exception. As usual the registers k0/k1 aren't being saved.
|
||||
*/
|
||||
struct pt_regs {
|
||||
#ifdef CONFIG_32BIT
|
||||
/* Pad bytes for argument save space on the stack. */
|
||||
unsigned long pad0[6];
|
||||
#endif
|
||||
|
||||
/* Saved main processor registers. */
|
||||
unsigned long regs[32];
|
||||
|
||||
/* Saved special registers. */
|
||||
unsigned long cp0_status;
|
||||
unsigned long hi;
|
||||
unsigned long lo;
|
||||
unsigned long cp0_badvaddr;
|
||||
unsigned long cp0_cause;
|
||||
unsigned long cp0_epc;
|
||||
} __attribute__ ((aligned (8)));
|
||||
|
||||
#endif /* _ASM_PTRACE_H */
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* offset.c: Calculate pt_regs and task_struct offsets.
|
||||
*
|
||||
* Copyright (C) 1996 David S. Miller
|
||||
* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Ralf Baechle
|
||||
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
|
||||
*
|
||||
* Kevin Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com
|
||||
* Copyright (C) 2000 MIPS Technologies, Inc.
|
||||
*/
|
||||
|
||||
#include <linux/kbuild.h>
|
||||
#include <linux/stddef.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
void output_ptreg_defines(void);
|
||||
|
||||
void output_ptreg_defines(void)
|
||||
{
|
||||
COMMENT("MIPS pt_regs offsets.");
|
||||
OFFSET(PT_R0, pt_regs, regs[0]);
|
||||
OFFSET(PT_R1, pt_regs, regs[1]);
|
||||
OFFSET(PT_R2, pt_regs, regs[2]);
|
||||
OFFSET(PT_R3, pt_regs, regs[3]);
|
||||
OFFSET(PT_R4, pt_regs, regs[4]);
|
||||
OFFSET(PT_R5, pt_regs, regs[5]);
|
||||
OFFSET(PT_R6, pt_regs, regs[6]);
|
||||
OFFSET(PT_R7, pt_regs, regs[7]);
|
||||
OFFSET(PT_R8, pt_regs, regs[8]);
|
||||
OFFSET(PT_R9, pt_regs, regs[9]);
|
||||
OFFSET(PT_R10, pt_regs, regs[10]);
|
||||
OFFSET(PT_R11, pt_regs, regs[11]);
|
||||
OFFSET(PT_R12, pt_regs, regs[12]);
|
||||
OFFSET(PT_R13, pt_regs, regs[13]);
|
||||
OFFSET(PT_R14, pt_regs, regs[14]);
|
||||
OFFSET(PT_R15, pt_regs, regs[15]);
|
||||
OFFSET(PT_R16, pt_regs, regs[16]);
|
||||
OFFSET(PT_R17, pt_regs, regs[17]);
|
||||
OFFSET(PT_R18, pt_regs, regs[18]);
|
||||
OFFSET(PT_R19, pt_regs, regs[19]);
|
||||
OFFSET(PT_R20, pt_regs, regs[20]);
|
||||
OFFSET(PT_R21, pt_regs, regs[21]);
|
||||
OFFSET(PT_R22, pt_regs, regs[22]);
|
||||
OFFSET(PT_R23, pt_regs, regs[23]);
|
||||
OFFSET(PT_R24, pt_regs, regs[24]);
|
||||
OFFSET(PT_R25, pt_regs, regs[25]);
|
||||
OFFSET(PT_R26, pt_regs, regs[26]);
|
||||
OFFSET(PT_R27, pt_regs, regs[27]);
|
||||
OFFSET(PT_R28, pt_regs, regs[28]);
|
||||
OFFSET(PT_R29, pt_regs, regs[29]);
|
||||
OFFSET(PT_R30, pt_regs, regs[30]);
|
||||
OFFSET(PT_R31, pt_regs, regs[31]);
|
||||
OFFSET(PT_LO, pt_regs, lo);
|
||||
OFFSET(PT_HI, pt_regs, hi);
|
||||
OFFSET(PT_EPC, pt_regs, cp0_epc);
|
||||
OFFSET(PT_BVADDR, pt_regs, cp0_badvaddr);
|
||||
OFFSET(PT_STATUS, pt_regs, cp0_status);
|
||||
OFFSET(PT_CAUSE, pt_regs, cp0_cause);
|
||||
DEFINE(PT_SIZE, sizeof(struct pt_regs));
|
||||
BLANK();
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef __LINUX_KBUILD_H
|
||||
#define __LINUX_KBUILD_H
|
||||
|
||||
#define DEFINE(sym, val) \
|
||||
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
|
||||
|
||||
#define BLANK() asm volatile("\n->" : : )
|
||||
|
||||
#define OFFSET(sym, str, mem) \
|
||||
DEFINE(sym, offsetof(struct str, mem))
|
||||
|
||||
#define COMMENT(x) \
|
||||
asm volatile("\n->#" x)
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue