blob: a2008f550fee31ab33ad36d63b7d18ce35690542 [file] [log] [blame]
Jeff Dike4ff83ce2007-05-06 14:51:08 -07001/*
2 * Copyright (C) 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3 * Licensed under the GPL
4 */
5
6#ifndef __START_H__
7#define __START_H__
8
Jeff Dike54ae36f2007-10-16 01:27:33 -07009#include "uml-config.h"
10#include "kern_constants.h"
11
12/*
Jeff Dike4bdf8bc2008-02-04 22:30:44 -080013 * Stolen from linux/const.h, which can't be directly included since
14 * this is used in userspace code, which has no access to the kernel
15 * headers. Changed to be suitable for adding casts to the start,
16 * rather than "UL" to the end.
Jeff Dike54ae36f2007-10-16 01:27:33 -070017 */
Jeff Dike54ae36f2007-10-16 01:27:33 -070018
Jeff Dike4bdf8bc2008-02-04 22:30:44 -080019/* Some constant macros are used in both assembler and
20 * C code. Therefore we cannot annotate them always with
21 * 'UL' and other type specifiers unilaterally. We
22 * use the following macros to deal with this.
Jeff Dike54ae36f2007-10-16 01:27:33 -070023 */
Jeff Dike4bdf8bc2008-02-04 22:30:44 -080024
25#ifdef __ASSEMBLY__
26#define _AC(X, Y) (Y)
27#else
28#define __AC(X, Y) (X (Y))
29#define _AC(X, Y) __AC(X, Y)
30#endif
31
Jeff Dike42a2b542008-02-04 22:31:00 -080032/*
33 * The "- 1"'s are to avoid gcc complaining about integer overflows
34 * and unrepresentable decimal constants. With 3-level page tables,
35 * TASK_SIZE is 0x80000000, which gets turned into its signed decimal
36 * equivalent in asm-offsets.s. gcc then complains about that being
37 * unsigned only in C90. To avoid that, UM_TASK_SIZE is defined as
38 * TASK_SIZE - 1. To compensate, we need to add the 1 back here.
39 * However, adding it back to UM_TASK_SIZE produces more gcc
40 * complaints. So, I adjust the thing being subtracted from
41 * UM_TASK_SIZE instead. Bah.
42 */
Jeff Dike4bdf8bc2008-02-04 22:30:44 -080043#define STUB_CODE _AC((unsigned long), \
Jeff Dike42a2b542008-02-04 22:31:00 -080044 UM_TASK_SIZE - (2 * UM_KERN_PAGE_SIZE - 1))
45#define STUB_DATA _AC((unsigned long), UM_TASK_SIZE - (UM_KERN_PAGE_SIZE - 1))
Jeff Dike4bdf8bc2008-02-04 22:30:44 -080046#define STUB_START _AC(, STUB_CODE)
47
Jeff Dike54ae36f2007-10-16 01:27:33 -070048#ifndef __ASSEMBLY__
49
Jeff Dike4ff83ce2007-05-06 14:51:08 -070050#include "sysdep/ptrace.h"
51
52struct cpu_task {
53 int pid;
54 void *task;
55};
56
57extern struct cpu_task cpu_tasks[];
58
59extern unsigned long low_physmem;
60extern unsigned long high_physmem;
61extern unsigned long uml_physmem;
62extern unsigned long uml_reserved;
63extern unsigned long end_vm;
64extern unsigned long start_vm;
65extern unsigned long long highmem;
66
67extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end;
68extern unsigned long _unprotected_end;
69extern unsigned long brk_start;
70
71extern int linux_main(int argc, char **argv);
Jeff Dike4ff83ce2007-05-06 14:51:08 -070072
Jeff Dike77bf4402007-10-16 01:26:58 -070073extern void (*sig_info[])(int, struct uml_pt_regs *);
Jeff Dike4ff83ce2007-05-06 14:51:08 -070074
75#endif
Jeff Dike54ae36f2007-10-16 01:27:33 -070076
77#endif