This file is indexed.

/usr/include/xenomai/asm-x86/wrappers_32.h is in libxenomai-dev 2.6.4+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
/*
 * Copyright (C) 2005 Philippe Gerum <rpm@xenomai.org>.
 *
 * Xenomai 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.
 *
 * Xenomai 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 Xenomai; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 */

#ifndef _XENO_ASM_X86_WRAPPERS_32_H
#define _XENO_ASM_X86_WRAPPERS_32_H
#define _XENO_ASM_X86_WRAPPERS_H

#ifndef __KERNEL__
#error "Pure kernel header included from user-space!"
#endif

#include <asm-generic/xenomai/wrappers.h> /* Read the generic portion. */
#include <linux/interrupt.h>
#include <asm/processor.h>

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11)
#define tsk_used_math(task)			((task)->used_math)
#define set_stopped_child_used_math(task)	((task)->used_math = 1)
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)

#define CONFIG_MMU 1

#define wrap_phys_mem_prot(filp,pfn,size,prot)  (prot)

#define wrap_range_ok(task,addr,size) ({ \
	unsigned long flag,sum; \
	asm("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0" \
		:"=&r" (flag), "=r" (sum) \
		:"1" (addr),"g" ((int)(size)),"g" ((task)->addr_limit.seg)); \
	flag == 0; })

#define wrap_test_fpu_used(task)  \
   ((task)->flags & PF_USEDFPU)
#define wrap_set_fpu_used(task)   \
do {				  \
    (task)->flags |= PF_USEDFPU;  \
} while(0)
#define wrap_clear_fpu_used(task) \
do {				  \
    (task)->flags &= ~PF_USEDFPU; \
} while(0)

/* Since the job is done in the vanilla __switch_to() we call, the
   following routine is a nop on 2.4 kernels. */
#define wrap_switch_iobitmap(p,cpu)   do { } while(0)

#define wrap_strncpy_from_user(dstP,srcP,n) __strncpy_from_user(dstP,srcP,n)

/**
 * fls - find last bit set
 * @x: the word to search
 *
 * This is defined the same way as
 * the libc and compiler builtin ffs routines, therefore
 * differs in spirit from ffz (man ffs).
 */
static inline int fls(int x)
{
	int r;

	__asm__("bsrl %1,%0\n\t"
		"jnz 1f\n\t"
		"movl $-1,%0\n"
		"1:" : "=r" (r) : "rm" (x));
	return r+1;
}

typedef unsigned long phys_addr_t;

typedef phys_addr_t resource_size_t;

#else /*  LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)  */

#define wrap_phys_mem_prot(filp,pfn,size,prot)  (prot)

#define wrap_range_ok(task,addr,size) ({ \
	unsigned long flag,sum; \
	asm("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0" \
		:"=&r" (flag), "=r" (sum) \
		:"1" (addr),"g" ((int)(size)),"g" (task_thread_info(task)->addr_limit.seg)); \
	flag == 0; })

#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
#ifndef CONFIG_X86_WP_WORKS_OK
#error "Xenomai has to rely on the WP bit, CONFIG_M486 or better required"
#endif /* CONFIG_X86_WP_WORKS_OK */
#endif /* Linux < 3.8.0 */

#if LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)
#ifdef TS_USEDFPU
#define wrap_test_fpu_used(task)  \
   (task_thread_info(task)->status & TS_USEDFPU)
#define wrap_set_fpu_used(task)   \
do { \
   task_thread_info(task)->status |= TS_USEDFPU; \
} while(0)
#define wrap_clear_fpu_used(task) \
do { \
   task_thread_info(task)->status &= ~TS_USEDFPU; \
} while(0)
#else /* !defined(TS_USEDFPU) */
#define wrap_test_fpu_used(task) ((task)->thread.has_fpu)
#define wrap_set_fpu_used(task)			\
	do {					\
		(task)->thread.has_fpu = 1;	\
	} while(0)
#define wrap_clear_fpu_used(task)		\
	do {					\
		(task)->thread.has_fpu = 0;	\
	} while(0)
#endif /* !defined(TS_USEDFPU) */
#else /* Linux >= 3.4.0 */
#include <asm/i387.h>
#include <asm/fpu-internal.h>

#define wrap_test_fpu_used(task) __thread_has_fpu(task)
#define wrap_set_fpu_used(task) __thread_set_has_fpu(task)
#define wrap_clear_fpu_used(task) __thread_clear_has_fpu(task)
#endif /* Linux >= 3.4.0 */

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
#define wrap_iobitmap_base(tss)  (tss)->io_bitmap_base
#else
#define wrap_iobitmap_base(tss)  (tss)->x86_tss.io_bitmap_base
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)

static inline void wrap_switch_iobitmap(struct task_struct *p, int cpu)
{
    struct thread_struct *thread = &p->thread;

    if (thread->io_bitmap_ptr) {

    	struct tss_struct *tss = &per_cpu(init_tss, cpu);

	if (wrap_iobitmap_base(tss) == INVALID_IO_BITMAP_OFFSET_LAZY) {

		memcpy(tss->io_bitmap, thread->io_bitmap_ptr, thread->io_bitmap_max);

		if (thread->io_bitmap_max < tss->io_bitmap_max)
		    memset((char *) tss->io_bitmap +
			   thread->io_bitmap_max, 0xff,
			   tss->io_bitmap_max - thread->io_bitmap_max);

		tss->io_bitmap_max = thread->io_bitmap_max;
		wrap_iobitmap_base(tss) = IO_BITMAP_OFFSET;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
		tss->io_bitmap_owner = thread;
#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) */
	}
    }
}

#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30) */

static inline void wrap_switch_iobitmap(struct task_struct *p, int cpu)
{
	/* I/O bitmap is eagerly switched in __switch_to() */
}

#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30) */

#define wrap_strncpy_from_user(dstP,srcP,n) rthal_strncpy_from_user(dstP,srcP,n)

#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) */

#define rthal_irq_desc_status(irq)	(rthal_irq_descp(irq)->status)

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
#define rthal_irq_chip_enable(irq)					\
	({								\
		int __err__ = 0;					\
		if (rthal_irq_descp(irq)->handler == NULL)		\
			__err__ = -ENODEV;				\
		else							\
			rthal_irq_descp(irq)->handler->enable(irq);	\
		__err__;						\
	})
#define rthal_irq_chip_disable(irq)					\
	({								\
		int __err__ = 0;					\
		if (rthal_irq_descp(irq)->handler == NULL)		\
			__err__ = -ENODEV;				\
		else							\
			rthal_irq_descp(irq)->handler->disable(irq);	\
		__err__;						\
	})
typedef irqreturn_t (*rthal_irq_host_handler_t)(int irq,
						void *dev_id,
						struct pt_regs *regs);

#define DECLARE_LINUX_IRQ_HANDLER(fn, irq, dev_id)		\
	irqreturn_t fn(int irq, void *dev_id, struct pt_regs *regs)

#define rthal_irq_chip_end(irq)	rthal_irq_chip_enable(irq)
#else /* >= 2.6.19 */
#if !defined(CONFIG_GENERIC_HARDIRQS) \
	|| LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)
#define rthal_irq_chip_enable(irq)   ({ rthal_irq_descp(irq)->chip->unmask(irq); 0; })
#define rthal_irq_chip_disable(irq)  ({ rthal_irq_descp(irq)->chip->mask(irq); 0; })
#endif
#define rthal_irq_chip_end(irq)      ({ rthal_irq_descp(irq)->ipipe_end(irq, rthal_irq_descp(irq)); 0; })
typedef irq_handler_t rthal_irq_host_handler_t;

#define DECLARE_LINUX_IRQ_HANDLER(fn, irq, dev_id)	\
	irqreturn_t fn(int irq, void *dev_id)

#endif

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
#define x86reg_origax	orig_ax
#define x86reg_ax	ax
#define x86reg_bx	bx
#define x86reg_cx	cx
#define x86reg_dx	dx
#define x86reg_si	si
#define x86reg_di	di
#define x86reg_sp	sp
#define x86reg_bp	bp
#define x86reg_ip	ip
#else
#define x86reg_origax	orig_eax
#define x86reg_ax	eax
#define x86reg_bx	ebx
#define x86reg_cx	ecx
#define x86reg_dx	edx
#define x86reg_si	esi
#define x86reg_di	edi
#define x86reg_sp	esp
#define x86reg_bp	ebp
#define x86reg_ip	eip
#endif

#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,25)
typedef union i387_union x86_fpustate;
#define x86_fpustate_ptr(t) (&(t)->i387)
#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,34)
typedef union thread_xstate x86_fpustate;
#define x86_fpustate_ptr(t) ((t)->xstate)
#else /* 2.6.35 and above */
typedef union thread_xstate x86_fpustate;
#define x86_fpustate_ptr(t) ((t)->fpu.state)
#endif

#endif /* _XENO_ASM_X86_WRAPPERS_32_H */