Bug 10634

Summary: #include <linux/usbdevice_fs.h> does not compile due to missing __user definition
Product: Sisyphus Reporter: Damir Shayhutdinov <damir>
Component: glibc-kernheadersAssignee: Dmitry V. Levin <ldv>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: glebfm, ldv, placeholder
Version: unstable   
Hardware: all   
OS: Linux   

Description Damir Shayhutdinov 2007-01-10 15:48:16 MSK
В многих заголовках ядра присутствует символ препроцессора __user. Насколько я
знаю, он имеет смысл только для ядра. Поэтому софт (конкретно - kvm), который
пытается скомпилироваться с таким заголовком, валится с ошибкой.

/usr/include/linux/usbdevice_fs.h:49: error: variable or field `__user' declared
void
Comment 1 Sergey Vlasov 2007-01-10 15:55:00 MSK
На самом деле макрос __user определяется в <linux/compiler.h>; можно либо
добавить #include <linux/compiler.h> в файлы, использующие __user, либо
пропустить файлы заголовков через sed, чтобы убрать эти конструкции:

# Eliminate the contents of (and inclusions of) compiler.h
HDRSED  := sed 	-e "s/ inline / __inline__ /g" \
		-e "s/[[:space:]]__user[[:space:]]\+/ /g" \
		-e "s/(__user[[:space:]]\+/ (/g" \
		-e "s/[[:space:]]__force[[:space:]]\+/ /g" \
		-e "s/(__force[[:space:]]\+/ (/g" \
		-e "s/[[:space:]]__iomem[[:space:]]\+/ /g" \
		-e "s/(__iomem[[:space:]]\+/ (/g" \
		-e "s/[[:space:]]__attribute_const__[[:space:]]\+/\ /g" \
		-e "s/[[:space:]]__attribute_const__$$//" \
		-e "/^\#include <linux\/compiler.h>/d"

(из linux-2.6.18/scripts/Makefile.headersinst).

Вариант "добавить #include <linux/compiler.h> в файлы, использующие заголовки
ядра" не годится, поскольку linux/compiler.h не входит в набор файлов, которые
разработчики ядра считают допустимыми для использования в userspace (этот файл
не устанавливается по make headers_install).
Comment 2 Dmitry V. Levin 2007-01-25 03:19:13 MSK
Hopefully fixed in 2.6.17-alt4.