[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#754213: (no subject)



On 08/28/2014 06:13 PM, Mauricio Faria de Oliveira wrote:
I'll send more details/demonstration/debugging on another e-mail.

The failure:

make[6]: Entering directory '/root/linux-tools/linux-tools-3.16~rc7/debian/build/scripts/mod' gcc -include real-lsb-32/types.h -I/root/linux-tools/linux-tools-3.16~rc7/include -S -o real-lsb-32/devicetable-offsets.s /root/linux-tools/linux-tools-3.16~rc7/scripts/mod/devicetable-offsets.c
	In file included from ./real-lsb-32/types.h:1:0,
		         from <command-line>:0:
/root/linux-tools/linux-tools-3.16~rc7/include/linux/types.h:149:9: error: unknown type name 'u32'
	 typedef u32 dma_addr_t;
		 ^
/root/linux-tools/linux-tools-3.16~rc7/include/linux/types.h:165:9: error: unknown type name 'u32'
	 typedef u32 phys_addr_t;
		 ^
Makefile.real:16: recipe for target 'real-lsb-32/devicetable-offsets.s' failed
	make[6]: *** [real-lsb-32/devicetable-offsets.s] Error 1


For debugging purposes, we'll use the preprocessor output (-E) with macro definitions (-dD); i.e.,

-gcc -include real-lsb-32/types.h -I/root/linux-tools/linux-tools-3.16~rc7/include -S -o real-lsb-32/devicetable-offsets.s /root/linux-tools/linux-tools-3.16~rc7/scripts/mod/devicetable-offsets.c +gcc -include real-lsb-32/types.h -I/root/linux-tools/linux-tools-3.16~rc7/include -E -dD
/root/linux-tools/linux-tools-3.16~rc7/scripts/mod/devicetable-offsets.c


Now let's go check/test with the definion of __SANE_USERSPACE_TYPES__.


- step 0) Reproduce the error:

	(the environment used ahead)
	$ cd /root/linux-tools/linux-tools-3.16~rc7/debian/build/scripts/mod
$ GCC_ARGS='-include real-lsb-32/types.h -I/root/linux-tools/linux-tools-3.16~rc7/include /root/linux-tools/linux-tools-3.16~rc7/scripts/mod/devicetable-offsets.c'

	
	$ gcc $GCC_ARGS -S -o /dev/null
	In file included from ./real-lsb-32/types.h:1:0,
		         from <command-line>:0:
/root/linux-tools/linux-tools-3.16~rc7/include/linux/types.h:149:9: error: unknown type name 'u32'
	 typedef u32 dma_addr_t;
		 ^
/root/linux-tools/linux-tools-3.16~rc7/include/linux/types.h:165:9: error: unknown type name 'u32'
	 typedef u32 phys_addr_t;
		 ^
	$ echo $?
	1

	Done.


- step 1) Verify fix by -D__SANE_USERSPACE_TYPES__

	$ gcc -D__SANE_USERSPACE_TYPES__ $GCC_ARGS -S -o /dev/null
	$ echo $?
	0


- step 2) Verify that __SANE_USERSPACE_TYPES__ is defined, as in that patch:

	$ grep SANE_USERSPACE_TYPES ../../../../tools/include/linux/types.h
	#define __SANE_USERSPACE_TYPES__        /* For PPC64, to get LL64 types */

	Ok, it's there.


- step 3) But why that fails?

	Because but that file/definition is not included by the file failing:

	$ gcc $GCC_ARGS -E -dD | grep SANE_USERSPACE_TYPES
	$
	
	So, 'int-l64.h' is taken...
	
	$ gcc $GCC_ARGS -E -dD | grep 'int-l.*64.h'
	# 1 "/usr/include/asm-generic/int-l64.h" 1 3 4
	# 9 "/usr/include/asm-generic/int-l64.h" 3 4
	# 12 "/usr/include/asm-generic/int-l64.h" 2 3 4

	... and no 'u32' is defined:

	$ gcc $GCC_ARGS -E -dD | grep u32 | grep -v __u32
	typedef u32 dma_addr_t;
	typedef u32 phys_addr_t;


- step 4) How does -D__SANE_USERSPACE_TYPES__ fix that?
	
	It makes 'int-ll64.h' to be taken...
	
	$ gcc -D__SANE_USERSPACE_TYPES__ $GCC_ARGS -E -dD | grep 'int-l.*64.h'
# 1 "/root/linux-tools/linux-tools-3.16~rc7/include/asm-generic/int-ll64.h" 1 3 4 # 1 "/root/linux-tools/linux-tools-3.16~rc7/include/uapi/asm-generic/int-ll64.h" 1 3 4 # 9 "/root/linux-tools/linux-tools-3.16~rc7/include/uapi/asm-generic/int-ll64.h" 3 4 # 12 "/root/linux-tools/linux-tools-3.16~rc7/include/uapi/asm-generic/int-ll64.h" 2 3 4 # 11 "/root/linux-tools/linux-tools-3.16~rc7/include/asm-generic/int-ll64.h" 2 3 4

	... and thus 'u32' is defined:

$ gcc -D__SANE_USERSPACE_TYPES__ $GCC_ARGS -E -dD | grep u32 | grep -v __u32
	typedef unsigned int u32;
	typedef u32 dma_addr_t;
	typedef u32 phys_addr_t;
	
	And gcc is happy.

--
Mauricio Faria de Oliveira
IBM Linux Technology Center


Reply to: