summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-03-31 12:57:05 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-05-19 16:11:56 +0200
commitb3c5e41bc05bc622c637d1da75a3c63091e4e789 (patch)
tree21327a66953e3014359ac8b4fce2e814ed2fdd62
parent8b026d66eb22e1fcf1cb03974606dca991aae392 (diff)
kern: import `macros.h' from x15
Import the macro definitions from the x15 kernel project, and replace all similar definitions littered all over the place with it. Importing this file will make importing code from the x15 kernel easier. We are already using the red-black tree implementation and the slab allocator from it, and we will import even more code in the near future. * kern/list.h: Do not define `structof', include `macros.h' instead. * kern/rbtree.h: Likewise. * kern/slab.c: Do not define `ARRAY_SIZE', include `macros.h' instead. * i386/grub/misc.h: Likewise. * i386/i386/xen.h: Do not define `barrier', include `macros.h' instead. * kern/macro_help.h: Delete file. Replaced by `macros.h'. * kern/macros.h: New file. * Makefrag.am (libkernel_a_SOURCES): Add new file, remove old file. * device/dev_master.h: Adopt accordingly. * device/io_req.h: Likewise. * device/net_io.h: Likewise. * i386/intel/read_fault.c: Likewise. * ipc/ipc_kmsg.h: Likewise. * ipc/ipc_mqueue.h: Likewise. * ipc/ipc_object.h: Likewise. * ipc/ipc_port.h: Likewise. * ipc/ipc_space.h: Likewise. * ipc/ipc_splay.c: Likewise. * ipc/ipc_splay.h: Likewise. * kern/assert.h: Likewise. * kern/ast.h: Likewise. * kern/pc_sample.h: Likewise. * kern/refcount.h: Likewise. * kern/sched.h: Likewise. * kern/sched_prim.c: Likewise. * kern/timer.c: Likewise. * kern/timer.h: Likewise. * vm/vm_fault.c: Likewise. * vm/vm_map.h: Likewise. * vm/vm_object.h: Likewise. * vm/vm_page.h: Likewise.
-rw-r--r--Makefrag.am2
-rw-r--r--device/dev_master.h2
-rw-r--r--device/io_req.h2
-rw-r--r--device/net_io.h2
-rw-r--r--i386/grub/misc.h2
-rw-r--r--i386/i386/xen.h2
-rw-r--r--i386/intel/read_fault.c2
-rw-r--r--ipc/ipc_kmsg.h2
-rw-r--r--ipc/ipc_mqueue.h2
-rw-r--r--ipc/ipc_object.h2
-rw-r--r--ipc/ipc_port.h2
-rw-r--r--ipc/ipc_space.h2
-rw-r--r--ipc/ipc_splay.c2
-rw-r--r--ipc/ipc_splay.h2
-rw-r--r--kern/assert.h2
-rw-r--r--kern/ast.h2
-rw-r--r--kern/list.h4
-rw-r--r--kern/macro_help.h50
-rw-r--r--kern/macros.h72
-rw-r--r--kern/pc_sample.h2
-rw-r--r--kern/rbtree.h5
-rw-r--r--kern/refcount.h2
-rw-r--r--kern/sched.h2
-rw-r--r--kern/sched_prim.c2
-rw-r--r--kern/slab.c2
-rw-r--r--kern/timer.c2
-rw-r--r--kern/timer.h2
-rw-r--r--vm/vm_fault.c2
-rw-r--r--vm/vm_map.h2
-rw-r--r--vm/vm_object.h2
-rw-r--r--vm/vm_page.h2
31 files changed, 101 insertions, 84 deletions
diff --git a/Makefrag.am b/Makefrag.am
index 91661437..9222ad20 100644
--- a/Makefrag.am
+++ b/Makefrag.am
@@ -171,7 +171,7 @@ libkernel_a_SOURCES += \
kern/mach_factor.h \
kern/machine.c \
kern/machine.h \
- kern/macro_help.h \
+ kern/macros.h \
kern/pc_sample.c \
kern/pc_sample.h \
kern/printf.c \
diff --git a/device/dev_master.h b/device/dev_master.h
index 6ad11526..70d4c63f 100644
--- a/device/dev_master.h
+++ b/device/dev_master.h
@@ -37,7 +37,7 @@
#if NCPUS > 1
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/cpu_number.h>
#include <kern/sched_prim.h>
#include <kern/thread.h>
diff --git a/device/io_req.h b/device/io_req.h
index 65e23e60..1ad46801 100644
--- a/device/io_req.h
+++ b/device/io_req.h
@@ -42,7 +42,7 @@
#include <device/device_types.h>
#include <device/dev_hdr.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
/*
* IO request element, queued on device for delayed replies.
diff --git a/device/net_io.h b/device/net_io.h
index f6de8541..d4e24d41 100644
--- a/device/net_io.h
+++ b/device/net_io.h
@@ -38,7 +38,7 @@
#include <mach/machine/vm_types.h>
#include <ipc/ipc_kmsg.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/lock.h>
#include <kern/kalloc.h>
diff --git a/i386/grub/misc.h b/i386/grub/misc.h
index c6cd4564..b71140a5 100644
--- a/i386/grub/misc.h
+++ b/i386/grub/misc.h
@@ -21,6 +21,7 @@
#define GRUB_MISC_HEADER 1
#include <stdarg.h>
+#include <kern/macros.h>
#include <grub/types.h>
#include <grub/symbol.h>
#include <grub/err.h>
@@ -32,7 +33,6 @@
#define ALIGN_UP_OVERHEAD(addr, align) ((-(addr)) & ((typeof (addr)) (align) - 1))
#define ALIGN_DOWN(addr, align) \
((addr) & ~((typeof (addr)) align - 1))
-#define ARRAY_SIZE(array) (sizeof (array) / sizeof (array[0]))
#define COMPILE_TIME_ASSERT(cond) switch (0) { case 1: case !(cond): ; }
#define grub_dprintf(condition, ...) grub_real_dprintf(GRUB_FILE, __LINE__, condition, __VA_ARGS__)
diff --git a/i386/i386/xen.h b/i386/i386/xen.h
index 638d6713..c6811873 100644
--- a/i386/i386/xen.h
+++ b/i386/i386/xen.h
@@ -21,6 +21,7 @@
#ifdef MACH_XEN
#ifndef __ASSEMBLER__
+#include <kern/macros.h>
#include <kern/printf.h>
#include <mach/machine/vm_types.h>
#include <mach/vm_param.h>
@@ -32,7 +33,6 @@
#include <xen/public/xen.h>
/* TODO: this should be moved in appropriate non-Xen place. */
-#define barrier() __asm__ __volatile__ ("": : :"memory")
#define mb() __asm__ __volatile__("lock; addl $0,0(%%esp)":::"memory")
#define rmb() mb()
#define wmb() mb()
diff --git a/i386/intel/read_fault.c b/i386/intel/read_fault.c
index 29f44396..4b1edce3 100644
--- a/i386/intel/read_fault.c
+++ b/i386/intel/read_fault.c
@@ -31,7 +31,7 @@
#include <vm/vm_page.h>
#include <vm/pmap.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
/*
* Expansion of vm_fault for read fault in kernel mode.
diff --git a/ipc/ipc_kmsg.h b/ipc/ipc_kmsg.h
index 620785b5..393c0392 100644
--- a/ipc/ipc_kmsg.h
+++ b/ipc/ipc_kmsg.h
@@ -38,7 +38,7 @@
#include <mach/message.h>
#include <kern/assert.h>
#include <kern/cpu_number.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/kalloc.h>
#include <ipc/ipc_marequest.h>
#include <ipc/ipc_object.h>
diff --git a/ipc/ipc_mqueue.h b/ipc/ipc_mqueue.h
index f8a2f1e7..2af5e02e 100644
--- a/ipc/ipc_mqueue.h
+++ b/ipc/ipc_mqueue.h
@@ -37,7 +37,7 @@
#include <mach/message.h>
#include <kern/assert.h>
#include <kern/lock.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <ipc/ipc_kmsg_queue.h>
#include <ipc/ipc_kmsg.h>
#include <ipc/ipc_thread.h>
diff --git a/ipc/ipc_object.h b/ipc/ipc_object.h
index b83bb5a6..be5bea71 100644
--- a/ipc/ipc_object.h
+++ b/ipc/ipc_object.h
@@ -38,7 +38,7 @@
#include <mach/message.h>
#include <ipc/ipc_types.h>
#include <kern/lock.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/slab.h>
typedef unsigned int ipc_object_refs_t;
diff --git a/ipc/ipc_port.h b/ipc/ipc_port.h
index 6914c717..ade69679 100644
--- a/ipc/ipc_port.h
+++ b/ipc/ipc_port.h
@@ -43,7 +43,7 @@
#include <mach/kern_return.h>
#include <mach/port.h>
#include <kern/lock.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/ipc_kobject.h>
#include <ipc/ipc_mqueue.h>
#include <ipc/ipc_table.h>
diff --git a/ipc/ipc_space.h b/ipc/ipc_space.h
index c4683d20..3bd2f4d0 100644
--- a/ipc/ipc_space.h
+++ b/ipc/ipc_space.h
@@ -42,7 +42,7 @@
#include <mach/boolean.h>
#include <mach/kern_return.h>
#include <mach/mach_types.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/lock.h>
#include <kern/slab.h>
#include <ipc/ipc_splay.h>
diff --git a/ipc/ipc_splay.c b/ipc/ipc_splay.c
index 6fb5bcbc..062a69f8 100644
--- a/ipc/ipc_splay.c
+++ b/ipc/ipc_splay.c
@@ -35,7 +35,7 @@
#include <mach/port.h>
#include <kern/assert.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <ipc/ipc_entry.h>
#include <ipc/ipc_splay.h>
diff --git a/ipc/ipc_splay.h b/ipc/ipc_splay.h
index d3316ef8..42e5a801 100644
--- a/ipc/ipc_splay.h
+++ b/ipc/ipc_splay.h
@@ -38,7 +38,7 @@
#include <mach/port.h>
#include <kern/assert.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <ipc/ipc_entry.h>
typedef struct ipc_splay_tree {
diff --git a/kern/assert.h b/kern/assert.h
index bd2a8beb..7b66d1b1 100644
--- a/kern/assert.h
+++ b/kern/assert.h
@@ -29,7 +29,7 @@
/* assert.h 4.2 85/01/21 */
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#ifndef NDEBUG
#define MACH_ASSERT 1
diff --git a/kern/ast.h b/kern/ast.h
index 4c28b1e6..7d472be9 100644
--- a/kern/ast.h
+++ b/kern/ast.h
@@ -41,7 +41,7 @@
*/
#include "cpu_number.h"
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <machine/ast.h>
/*
diff --git a/kern/list.h b/kern/list.h
index ad782a8a..be927625 100644
--- a/kern/list.h
+++ b/kern/list.h
@@ -31,9 +31,7 @@
#include <stddef.h>
#include <sys/types.h>
-
-#define structof(ptr, type, member) \
- ((type *)((char *)ptr - offsetof(type, member)))
+#include <kern/macros.h>
/*
* Structure used as both head and node.
diff --git a/kern/macro_help.h b/kern/macro_help.h
deleted file mode 100644
index 7ce171f6..00000000
--- a/kern/macro_help.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * File: kern/macro_help.h
- *
- * Provide help in making lint-free macro routines
- *
- */
-
-#ifndef _KERN_MACRO_HELP_H_
-#define _KERN_MACRO_HELP_H_
-
-#if !defined(MACRO_BEGIN)
-
-#include <mach/boolean.h>
-
-#define NEVER FALSE
-#define ALWAYS TRUE
-
-#define MACRO_BEGIN ({
-#define MACRO_END })
-
-#define MACRO_RETURN if (ALWAYS) return
-
-#endif /* !MACRO_BEGIN */
-
-#endif /* _KERN_MACRO_HELP_H_ */
diff --git a/kern/macros.h b/kern/macros.h
new file mode 100644
index 00000000..fb8dc5e1
--- /dev/null
+++ b/kern/macros.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2009, 2010, 2013 Richard Braun.
+ *
+ * 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ * Helper macros.
+ */
+
+#ifndef _KERN_MACROS_H
+#define _KERN_MACROS_H
+
+#define MACRO_BEGIN ({
+#define MACRO_END })
+#define MACRO_RETURN if (1) return
+
+#define __QUOTE(x) #x
+#define QUOTE(x) __QUOTE(x)
+
+#ifdef __ASSEMBLER__
+#define DECL_CONST(x, s) x
+#else /* __ASSEMBLER__ */
+#define __DECL_CONST(x, s) x##s
+#define DECL_CONST(x, s) __DECL_CONST(x, s)
+#endif /* __ASSEMBLER__ */
+
+#define STRLEN(x) (sizeof(x) - 1)
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+#define DIV_CEIL(n, d) (((n) + (d) - 1) / (d))
+
+#define P2ALIGNED(x, a) (((x) & ((a) - 1)) == 0)
+#define ISP2(x) P2ALIGNED(x, x)
+#define P2ALIGN(x, a) ((x) & -(a))
+#define P2ROUND(x, a) (-(-(x) & -(a)))
+#define P2END(x, a) (-(~(x) & -(a)))
+
+#define structof(ptr, type, member) \
+ ((type *)((char *)(ptr) - offsetof(type, member)))
+
+#define alignof(x) __alignof__(x)
+
+#define likely(expr) __builtin_expect(!!(expr), 1)
+#define unlikely(expr) __builtin_expect(!!(expr), 0)
+
+#define barrier() asm volatile("" : : : "memory")
+
+#define __noreturn __attribute__((noreturn))
+#define __aligned(x) __attribute__((aligned(x)))
+#define __always_inline inline __attribute__((always_inline))
+#define __section(x) __attribute__((section(x)))
+#define __packed __attribute__((packed))
+#define __alias(x) __attribute__((alias(x)))
+
+#define __format_printf(fmt, args) \
+ __attribute__((format(printf, fmt, args)))
+
+#endif /* _KERN_MACROS_H */
diff --git a/kern/pc_sample.h b/kern/pc_sample.h
index 3c64068d..4832cb9f 100644
--- a/kern/pc_sample.h
+++ b/kern/pc_sample.h
@@ -49,7 +49,7 @@
#include <mach/pc_sample.h>
#include <mach/machine/vm_types.h>
#include <kern/kern_types.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
/*
* Control structure for sampling, included in
diff --git a/kern/rbtree.h b/kern/rbtree.h
index 189a7fd6..16ef2736 100644
--- a/kern/rbtree.h
+++ b/kern/rbtree.h
@@ -31,12 +31,9 @@
#include <stddef.h>
#include <kern/assert.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <sys/types.h>
-#define structof(ptr, type, member) \
- ((type *)((char *)ptr - offsetof(type, member)))
-
/*
* Indexes of the left and right nodes in the children array of a node.
*/
diff --git a/kern/refcount.h b/kern/refcount.h
index 74204d6b..f32feb87 100644
--- a/kern/refcount.h
+++ b/kern/refcount.h
@@ -27,7 +27,7 @@
#ifndef _KERN_REFCOUNT_H_
#define _KERN_REFCOUNT_H_
-#include <kern/macro_help.h>
+#include <kern/macros.h>
/* Unless the above include file specified otherwise,
use the system-independent (unoptimized) atomic reference counter. */
diff --git a/kern/sched.h b/kern/sched.h
index ea601c5b..f82f9f56 100644
--- a/kern/sched.h
+++ b/kern/sched.h
@@ -38,7 +38,7 @@
#include <kern/queue.h>
#include <kern/lock.h>
#include <kern/kern_types.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#if MACH_FIXPRI
#include <mach/policy.h>
diff --git a/kern/sched_prim.c b/kern/sched_prim.c
index d7792ae6..e8f260e3 100644
--- a/kern/sched_prim.c
+++ b/kern/sched_prim.c
@@ -44,7 +44,7 @@
#include <kern/lock.h>
#include <kern/mach_clock.h>
#include <kern/mach_factor.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/processor.h>
#include <kern/queue.h>
#include <kern/sched.h>
diff --git a/kern/slab.c b/kern/slab.c
index 19ebfedb..60378b5f 100644
--- a/kern/slab.c
+++ b/kern/slab.c
@@ -79,6 +79,7 @@
#include <string.h>
#include <kern/assert.h>
#include <kern/mach_clock.h>
+#include <kern/macros.h>
#include <kern/printf.h>
#include <kern/slab.h>
#include <kern/kalloc.h>
@@ -96,7 +97,6 @@
/*
* Utility macros.
*/
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
#define P2ALIGNED(x, a) (((x) & ((a) - 1)) == 0)
#define ISP2(x) P2ALIGNED(x, x)
#define P2ALIGN(x, a) ((x) & -(a))
diff --git a/kern/timer.c b/kern/timer.c
index 6d6517ed..79ada27e 100644
--- a/kern/timer.c
+++ b/kern/timer.c
@@ -33,7 +33,7 @@
#include <kern/cpu_number.h>
#include <kern/assert.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
diff --git a/kern/timer.h b/kern/timer.h
index 57f017aa..2f473cf8 100644
--- a/kern/timer.h
+++ b/kern/timer.h
@@ -27,7 +27,7 @@
#ifndef _KERN_TIMER_H_
#define _KERN_TIMER_H_
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#if STAT_TIME
/*
diff --git a/vm/vm_fault.c b/vm/vm_fault.c
index 686156c9..0fa4d6af 100644
--- a/vm/vm_fault.c
+++ b/vm/vm_fault.c
@@ -51,7 +51,7 @@
#include <mach/memory_object.h>
#include <vm/memory_object_user.user.h>
/* For memory_object_data_{request,unlock} */
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/slab.h>
#if MACH_PCSAMPLE
diff --git a/vm/vm_map.h b/vm/vm_map.h
index b8103ebc..fc7730a2 100644
--- a/vm/vm_map.h
+++ b/vm/vm_map.h
@@ -52,7 +52,7 @@
#include <vm/vm_types.h>
#include <kern/lock.h>
#include <kern/rbtree.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
/* TODO: make it dynamic */
#define KENTRY_DATA_SIZE (256*PAGE_SIZE)
diff --git a/vm/vm_object.h b/vm/vm_object.h
index 5c42f568..3bfc67ab 100644
--- a/vm/vm_object.h
+++ b/vm/vm_object.h
@@ -45,7 +45,7 @@
#include <kern/lock.h>
#include <kern/assert.h>
#include <kern/debug.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <vm/pmap.h>
#include <ipc/ipc_types.h>
diff --git a/vm/vm_page.h b/vm/vm_page.h
index 4fe1b41d..e6a8c497 100644
--- a/vm/vm_page.h
+++ b/vm/vm_page.h
@@ -42,7 +42,7 @@
#include <kern/queue.h>
#include <kern/lock.h>
-#include <kern/macro_help.h>
+#include <kern/macros.h>
#include <kern/sched_prim.h> /* definitions of wait/wakeup */
#if MACH_VM_DEBUG