linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
@ 2013-09-23  6:04 Chen Gang
  2013-09-23  6:12 ` Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-09-23  6:04 UTC (permalink / raw)
  To: vgupta; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 2230 bytes --]

Hello arc members:

It is arc compiler's bug, but can not report to gnu tool chain (it is
not integrated into gnu tool chain), so have to report it here (I find
this bug here, and I guess, some arc folks are here, too).


In "drivers/power/wm831x_power.c", all wm831x_bat_get_prop() calling
functions are inline, so wm831x_bat_get_prop() size is more than 256,
but it uses 1 byte to express related offset (".byte .L61-.L65 + 6").

If let some of wm831x_bat_get_prop() calling functions noinline, it can
pass compiling.

The related .s file is in attachment, and the related command and error
(for next-20130920 tree) is below:

    /usr/local/bin/arc-elf32-gcc -Wp,-MD,drivers/power/.wm831x_power.o.d  -nostdinc -isystem /usr/local/lib/gcc/arc-elf32/4.4.7/include -I/root/linux-next/arch/arc/include -Iarch/arc/include/generated  -Iinclude -I/root/linux-next/arch/arc/include/uapi -Iarch/arc/include/generated/uapi -I/root/linux-next/include/uapi -Iinclude/generated/uapi -include /root/linux-next/include/linux/kconfig.h -include /root/linux-next/arch/arc/include/asm/current.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -mA7 -fno-common -pipe -fno-builtin -D__linux__ -fsection-anchors -mlock -mswape -mrtsc -fasynchronous-unwind-tables -mno-sdata -fcall-used-gp -mbig-endian -multcost=16 -fno-reorder-blocks -fno-ipa-cp-clone -Wframe-larger-than=1024 -fno-stack-protector -fomit-frame-pointer -g -femit-struct-debug-baseonly -fno-var-tracking -fno-inline-functions-cal
 led-once 
-Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -DDEBUG   -DMODULE -mlong-calls  -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(wm831x_power)"  -D"KBUILD_MODNAME=KBUILD_STR(wm831x_power)" -c -o drivers/power/.tmp_wm831x_power.o drivers/power/wm831x_power.c
  {standard input}: Assembler messages:
  {standard input}:934: Error: value of 256 too large for field of 1 bytes at 1987


Welcome any suggestions or completions (e.g. which location and members
this bug should be reported to).

Thanks.
-- 
Chen Gang

[-- Attachment #2: wm831x_power.s --]
[-- Type: text/plain, Size: 119013 bytes --]

	.file	"wm831x_power.c"
	.cpu ARC700
	.section	.debug_abbrev,"",@progbits
.Ldebug_abbrev0:
	.section	.debug_info,"",@progbits
.Ldebug_info0:
	.section	.debug_line,"",@progbits
.Ldebug_line0:
	.section .text
.Ltext0:
	.section	.exit.text,"ax",@progbits
	.align 4
	.type	wm831x_power_driver_exit, @function
wm831x_power_driver_exit:
.LFB869:
.LSM0:
.LSM1:
	mov_s r0,@.LANCHOR0	;9
	j @platform_driver_unregister
.LFE869:
	.size	wm831x_power_driver_exit, .-wm831x_power_driver_exit
	.section .text
	.align 4
	.type	wm831x_power_remove, @function
wm831x_power_remove:
.LFB866:
.LM1:
	push_s blink
.LCFI0:
.LCFI1:
	bl.d __st_r13_to_r22
	sub_s sp,sp,40
.LM2:
	mov_s r14,r0	;0
.LBB165:
.LBB166:
.LM3:
	add_s r0,r0,12
	jl @dev_get_drvdata
.LBE166:
.LBE165:
.LM4:
	mov r16,@.LANCHOR1		;10
.LBB168:
.LBB167:
.LM5:
	mov_s r13,r0	;0
.LBE167:
.LBE168:
.LM6:
	ld_s r15,[r0]		;11
	mov r22,@platform_get_irq_byname		;10
	mov r21,@irq_create_mapping		;10
	mov r20,@free_irq		;10
.LM7:
	b_s @.L4
.L5:
.LM8:
	jl.d [r22]
	ld.ab r1,[r16,4]	;16
	mov_s r1,r0	;0
.LBB169:
.LBB170:
.LM9:
	jl.d [r21]
	ld_s r0,[r15,92]		;11
.LBE170:
.LBE169:
.LM10:
	jl.d [r20]
	mov_s r1,r13	;0
.L4:
.LM11:
	mov_s r0,r14	;0
	mov r19,@platform_get_irq_byname		;10
	mov r18,@irq_create_mapping		;10
	mov r17,@free_irq		;10
.LM12:
	brne r16, @.LANCHOR1+32, @.L5
.LM13:
	mov_s r1,@.LC0	;9
	jl [r19]
	mov_s r1,r0	;0
.LBB171:
.LBB172:
.LM14:
	jl.d [r18]
	ld_s r0,[r15,92]		;11
.LBE172:
.LBE171:
.LM15:
	jl.d [r17]
	mov_s r1,r13	;0
.LM16:
	mov_s r1,@.LC1	;9
	jl.d [r19]
	mov_s r0,r14	;0
	mov_s r1,r0	;0
.LBB173:
.LBB174:
.LM17:
	jl.d [r18]
	ld_s r0,[r15,92]		;11
.LBE174:
.LBE173:
.LM18:
	jl.d [r17]
	mov_s r1,r13	;0
.LM19:
	mov_s r2,r13	;0
	add r2,r2,512
	ldb r2,[r2,-28]
	breq_s r2, 0, @.L6
.LM20:
	mov_s r0,r13	;0
	add r0,r0,284
	jl @power_supply_unregister
.L6:
.LM21:
	mov_s r14,@power_supply_unregister	;9
	jl_s.d [r14]
	add_s r0,r13,4
.LM22:
	jl_s.d [r14]
	add3 r0,r13,18
.LM23:
	mov_s r0,r13	;0
	jl @kfree
.LM24:
	mov_s r12,40	;0
	b.d __ld_r13_to_r22_ret
	mov_s r0,0	;0
.LFE866:
	.size	wm831x_power_remove, .-wm831x_power_remove
	.align 4
	.type	wm831x_battey_apply_config, @function
wm831x_battey_apply_config:
.LFB856:
.LM25:
	add_s r12,r2,1
	mov_s lp_count,r12	;2
	cmp_s r2,0
	st.a r13,[sp,-4]       ;17
.LCFI2:
	mov_s r12,1	;0
	mov r13,lp_count		;6
	mov.ge r12,r13
	mov_s lp_count,r12	;2
	lp .L__GCC__LP12
	sr @.L12,[2]; LP_START
	0:
.LM26:
	mov_s r12,r3	;0
	mov_s r7,r1	;2
	mov_s r3,r5	;0
	mov r5,0		;3
	b_s @.L10
.L12:
.LM27:
	ld.ab r8,[r7,8]	;16
	breq.nd r12, r8, @.L11
	add r5,r5,1
.L10:
.LM28:
	nop
	
.L__GCC__LP12: ; loop end, start is @.L12
.L11:
.LM29:
	brne.d r5, r2, @.L13
	add3 r1,r1,r5
.LM30:
	ld_s r0,[r0,40]		;11
	mov_s r2,r3	;0
.LM31:
	ld_s r13,[sp]		;11
.LM32:
	mov_s r3,r12	;0
	mov r4,r6		;3
	mov_s r1,@.LC2	;9
.LM33:
	add_s sp,sp,4
.LM34:
	j @dev_err
.L13:
.LM35:
	ld r7,[r4]	;16
	ld_s r2,[r1,4]		;11
	or r2,r2,r7
	st r2,[r4]       ;17
.LBB175:
.LM36:
	ldw r2,[@.LANCHOR2+18]
	bbit0.nd r2,6,@.L15
	ld_s r1,[r0,40]		;11
.LBE175:
.LM37:
	ld_s r13,[sp]		;11
.LBB176:
.LM38:
	mov_s r4,r12	;2
	mov r5,r6		;3
	mov_s r0,@.LANCHOR2	;9
	mov_s r2,@.LC3	;9
.LBE176:
.LM39:
	add_s sp,sp,4
.LBB177:
.LM40:
	j @__dynamic_dev_dbg
.L15:
.LBE177:
.LM41:
	ld_s r13,[sp]		;11
	j_s.d [blink]
	add_s sp,sp,4
.LFE856:
	.size	wm831x_battey_apply_config, .-wm831x_battey_apply_config
	.align 4
	.type	wm831x_config_battery, @function
wm831x_config_battery:
.LFB857:
.LM42:
	push_s blink
.LCFI3:
.LCFI4:
	bl.d __st_r13_to_r16
	sub_s sp,sp,16
	mov_s r13,r0	;0
.LM43:
	ld_s r0,[r0,40]		;11
.LM44:
	sub_s sp,sp,8
.LCFI5:
.LM45:
	ld r2,[r0,176]	;16
.LM46:
	breq_s r2, 0, @.L19
	ld_s r14,[r2,96]		;11
	brne_s r14, 0, @.L20
.L19:
.LM47:
	mov_s r1,@.LC4	;9
	jl @dev_warn
.LM48:
	b_s @.L28
.L20:
.LM49:
	mov_s r2,0	;0
.LM50:
	st_s r2,[sp]		;12
.LM51:
	st_s r2,[sp,4]		;12
.LM52:
	ld_s r2,[r14]		;11
	brne_s r2, 0, @.L22
.LM53:
	mov_s r1,@.LC5	;9
	jl @_dev_info
.LM54:
	b_s @.L28
.L22:
.LM55:
	st 32768,[sp,4]      ;19
.LM56:
	ld_s r2,[r14,8]		;11
	breq_s r2, 0, @.L23
.LM57:
	st 16384,[sp]      ;19
.L23:
.LM58:
	ld_s r2,[r14,4]		;11
	breq_s r2, 0, @.L24
.LM59:
	st 32800,[sp,4]      ;19
.L24:
.LM60:
	ld_s r3,[r14,12]		;11
	mov_s r15,@wm831x_battey_apply_config	;9
	mov_s r1,@.LANCHOR0+84	;9
	mov_s r2,4	;0
	mov r4,sp		;3
	mov r5,@.LC6		;10
	mov r6,@.LC7		;10
	jl_s.d [r15]
	mov_s r0,r13	;0
.LM61:
	ld_s r3,[r14,16]		;11
	mov_s r0,r13	;0
	mov_s r1,@.LANCHOR0+116	;9
	mov_s r2,4	;0
	mov r5,@.LC8		;10
	mov r6,@.LC9		;10
	jl_s.d [r15]
	mov r4,sp		;3
.LM62:
	ld_s r3,[r14,24]		;11
	mov_s r0,r13	;0
	mov_s r1,@.LANCHOR0+148	;9
	mov_s r2,16	;0
	mov r5,@.LC10		;10
	mov r6,@.LC7		;10
	jl_s.d [r15]
	mov r4,sp		;3
.LM63:
	ld_s r3,[r14,20]		;11
	mov_s r0,r13	;0
	mov_s r1,@.LANCHOR0+276	;9
	mov_s r2,8	;0
	mov r5,@.LC11		;10
	mov r6,@.LC7		;10
	jl_s.d [r15]
	add r4,sp,4
.LM64:
	ld_s r3,[r14,28]		;11
	mov_s r2,16	;0
	mov_s r0,r13	;0
	mov_s r1,@.LANCHOR0+340	;9
	mov r5,@.LC12		;10
	mov r6,@.LC13		;10
	jl_s.d [r15]
	mov r4,sp		;3
.LM65:
	mov_s r0,r13	;0
	jl @wm831x_reg_unlock
.LM66:
	mov.f r2,r0
	beq_s @.L25
.LM67:
	ld_s r0,[r13,40]		;11
	mov_s r1,@.LC14	;9
	jl @dev_err
.LM68:
	b_s @.L28
.L25:
.LM69:
	ldw r3,[sp,6]
	mov_s r2,39968	;9
	mov_s r0,r13	;0
	mov_s r1,16456	;9
	jl @wm831x_set_bits
.LM70:
	mov.f r2,r0
	beq_s @.L26
.LM71:
	ld_s r0,[r13,40]		;11
	mov_s r1,@.LC15	;9
	jl @dev_err
.L26:
.LM72:
	ldw r3,[sp,2]
	mov_s r2,20479	;9
	mov_s r0,r13	;0
	mov_s r1,16457	;9
	jl @wm831x_set_bits
.LM73:
	mov.f r2,r0
	beq_s @.L27
.LM74:
	ld_s r0,[r13,40]		;11
	mov_s r1,@.LC16	;9
	jl @dev_err
.L27:
.LM75:
	mov_s r0,r13	;0
	jl @wm831x_reg_lock
.L28:
.LM76:
	add_s sp,sp,8
	mov_s r12,16	;0
	b __ld_r13_to_r16_ret
.LFE857:
	.size	wm831x_config_battery, .-wm831x_config_battery
	.align 4
	.type	wm831x_power_probe, @function
wm831x_power_probe:
.LFB865:
.LM77:
	push_s blink
.LCFI6:
.LCFI7:
	bl.d __st_r13_to_r24
	sub_s sp,sp,48
	mov_s r15,r0	;0
.LM78:
	ld_s r0,[r0,12]		;11
.LM79:
	sub_s sp,sp,8
.LCFI8:
.LM80:
	jl @dev_get_drvdata
.LM81:
	ld_s r2,[r0,40]		;11
.LM82:
	mov_s r14,r0	;0
.LBB178:
.LBB179:
.LBB180:
.LBB181:
.LBB182:
.LM83:
	ld r0,[@kmalloc_caches+36]	;16
	mov_s r1,32976	;9
.LBE182:
.LBE181:
.LBE180:
.LBE179:
.LBE178:
.LM84:
	ld r16,[r2,176]	;16
.LBB187:
.LBB186:
.LBB185:
.LBB184:
.LBB183:
.LM85:
	jl @kmem_cache_alloc
.LBE183:
.LBE184:
.LBE185:
.LBE186:
.LBE187:
.LM86:
	mov.f r13,r0
	bne_s @.L30
	mov r2,-12		;4
	st_s r2,[sp,4]		;12
	b @.L31
.L30:
.LBB188:
.LBB189:
.LM87:
	add r17,r15,12
.LBE189:
.LBE188:
.LM88:
	st_s r14,[r13]		;12
.LBB191:
.LBB190:
.LM89:
	mov_s r0,r17	;0
	mov_s r1,r13	;0
	jl @dev_set_drvdata
.LBE190:
.LBE191:
.LM90:
	breq.d r16, 0, @.L32
	add r19,r13,4
	ld r3,[r16]	;16
	breq_s r3, 0, @.L32
.LM91:
	add3 r0,r13,53
	mov r18,@snprintf		;10
	mov_s r2,@.LC17	;9
	jl.d [r18]
	mov_s r1,20	;0
.LM92:
	ld r3,[r16]	;16
	add3 r0,r13,58
	mov_s r2,@.LC18	;9
	jl.d [r18]
	mov_s r1,20	;0
.LM93:
	ld r3,[r16]	;16
	mov_s r0,r13	;0
	mov_s r1,20	;0
	mov_s r2,@.LC19	;9
	jl.d [r18]
	add r0,r0,444
.LM94:
	b_s @.L33
.L32:
.LM95:
	add3 r0,r13,53
	mov_s r2,@.LC20	;9
	mov r16,@snprintf		;10
	jl.d [r16]
	mov_s r1,20	;0
.LM96:
	add3 r0,r13,58
	mov_s r2,@.LC21	;9
	jl.d [r16]
	mov_s r1,20	;0
.LM97:
	mov_s r0,r13	;0
	add r0,r0,444
	mov_s r2,@.LC22	;9
	jl.d [r16]
	mov_s r1,20	;0
.L33:
.LM98:
	mov_s r0,r14	;0
	jl @wm831x_config_battery
.LM99:
	add3 r2,r13,53
.LM100:
	mov r18,2		;3
.LM101:
	st_s r2,[r13,4]		;12
.LM102:
	mov_s r2,3	;0
	st_s r2,[r13,8]		;12
.LM103:
	st @.LANCHOR0+468,[r13,12]      ;19
.LM104:
	st r18,[r13,16]       ;17
.LM105:
	st @wm831x_wall_get_prop,[r13,40]      ;19
.LM106:
	mov_s r0,r17	;0
	mov r16,@power_supply_register		;10
	jl.d [r16]
	mov_s r1,r19	;0
.LM107:
	mov.f r0,r0
	st_s r0,[sp,4]		;12
	bne @.L34
.LM108:
	mov_s r2,r13	;0
	add r2,r2,444
.LM109:
	add3 r20,r13,18
.LM110:
	st r2,[r13,144]       ;17
.LM111:
	mov_s r2,4	;0
	st r2,[r13,148]       ;17
.LM112:
	st r18,[r13,156]       ;17
.LM113:
	st @.LANCHOR0+476,[r13,152]      ;19
.LM114:
	st @wm831x_usb_get_prop,[r13,180]      ;19
.LM115:
	mov_s r0,r17	;0
	jl.d [r16]
	mov_s r1,r20	;0
.LM116:
	mov.f r0,r0
	st_s r0,[sp,4]		;12
	bne @.L35
.LM117:
	mov_s r0,r14	;0
	mov_s r1,16456	;9
	jl @wm831x_reg_read
	st_s r0,[sp,4]		;12
.LM118:
	cmp_s r0,0
	blt @.L35
.LM119:
	mov_s r2,r0	;0
	lsr_s r2,r2,15
	mov_s r3,r13	;0
	bmsk_s r2,r2,0
	add r3,r3,512
.LM120:
	mov_s r21,r13	;2
.LM121:
	stb r2,[r3,-28]
.LM122:
	add r21,r21,284
.LM123:
	breq_s r2, 0, @.L36
.LBB192:
.LM124:
	add3 r2,r13,58
.LM125:
	st.as @.LANCHOR0+484,[r13,73]      ;19
.LM126:
	st.as r2,[r13,71]       ;17
.LM127:
	mov_s r2,5	;0
	st.as r2,[r13,74]       ;17
.LM128:
	mov_s r2,1	;0
	st.as r2,[r13,85]       ;17
.LM129:
	st.as @wm831x_bat_get_prop,[r13,80]      ;19
.LM130:
	mov_s r0,r17	;0
	jl.d [r16]
	mov_s r1,r21	;0
.LM131:
	mov.f r0,r0
	st_s r0,[sp,4]		;12
	bne_s @.L37
.L36:
.LBE192:
.LM132:
	mov_s r1,@.LC1	;9
	mov r18,@platform_get_irq_byname		;10
	jl.d [r18]
	mov_s r0,r15	;0
	mov_s r1,r0	;0
.LBB193:
.LBB194:
.LM133:
	mov r24,@irq_create_mapping		;10
.LBE194:
.LBE193:
.LM134:
	mov r16,@request_threaded_irq		;10
.LBB196:
.LBB195:
.LM135:
	jl.d [r24]
	ld_s r0,[r14,92]		;11
.LBE195:
.LBE196:
.LM136:
	mov_s r1,0	;0
	mov_s r2,@wm831x_syslo_irq	;9
	mov_s r3,1	;0
	mov r4,@.LC23		;10
	mov_s r5,r13	;2
	jl.d [r16]
	mov_s r22,r0	;2
.LM137:
	mov.f r0,r0
	st_s r0,[sp,4]		;12
	beq_s @.L38
.LM138:
	ld_s r3,[sp,4]		;11
	mov_s r0,r17	;0
	mov_s r2,r22	;0
	mov_s r1,@.LC24	;9
	jl @dev_err
.LM139:
	b_s @.L39
.L38:
.LM140:
	mov_s r1,@.LC0	;9
	jl.d [r18]
	mov_s r0,r15	;0
	mov_s r1,r0	;0
.LBB197:
.LBB198:
.LM141:
	jl.d [r24]
	ld_s r0,[r14,92]		;11
.LBE198:
.LBE197:
.LM142:
	mov_s r1,0	;0
	mov_s r2,@wm831x_pwr_src_irq	;9
	mov_s r3,1	;0
	mov r4,@.LC25		;10
	mov_s r5,r13	;2
	jl.d [r16]
	mov_s r22,r0	;2
.LM143:
	mov.f r0,r0
	st_s r0,[sp,4]		;12
	bne_s @.L40
.LM144:
	mov_s r12,r18	;0
.LM145:
	mov r22,@.LANCHOR1		;10
	mov r16,0		;3
	b_s @.L41
.L40:
.LM146:
	ld_s r3,[sp,4]		;11
	mov_s r0,r17	;0
	mov_s r2,r22	;0
	mov_s r1,@.LC26	;9
	jl @dev_err
.LM147:
	b_s @.L42
.L41:
.LM148:
	ld.ab r18,[r22,4]	;16
	st_s r12,[sp]		;12
	mov_s r0,r15	;0
	jl_s.d [r12]
	mov_s r1,r18	;0
	mov_s r1,r0	;0
.LBB199:
.LBB200:
.LM149:
	jl.d [r24]
	ld_s r0,[r14,92]		;11
.LBE200:
.LBE199:
.LM150:
	mov_s r1,0	;0
	mov_s r2,@wm831x_bat_irq	;9
	mov_s r3,1	;0
	mov r4,r18		;3
	mov_s r5,r13	;2
.LBB202:
.LBB201:
.LM151:
	mov_s r23,r0	;2
.LBE201:
.LBE202:
.LM152:
	jl @request_threaded_irq
.LM153:
	mov.f r0,r0
	st_s r0,[sp,4]		;12
	ld_s r12,[sp]		;11
	beq_s @.L43
.LM154:
	ld r4,[sp,4]	;16
	mov_s r0,r17	;0
	mov_s r2,r18	;0
	mov_s r3,r23	;0
	mov_s r1,@.LC27	;9
	jl @dev_err
	add2 r17,@.LANCHOR1,r16
.LM155:
	mov r22,@platform_get_irq_byname		;10
.LM156:
	mov r18,@free_irq		;10
	b_s @.L44
.L43:
.LM157:
	add r16,r16,1
	brne r16, 8, @.L41
	b_s @.L31
.L44:
.LM158:
	ld.ab r1,[r17,-4]	;16
	mov_s r0,r15	;0
	jl.d [r22]
	sub r16,r16,1
.LM159:
	jl.d [r18]
	mov_s r1,r13	;0
.LM160:
	cmp r16,-1
	bne_s @.L44
.LM161:
	mov_s r1,@.LC0	;9
	mov_s r0,r15	;0
	jl @platform_get_irq_byname
	mov_s r1,r0	;0
.LBB203:
.LBB204:
.LM162:
	ld_s r0,[r14,92]		;11
	jl @irq_create_mapping
.LBE204:
.LBE203:
.LM163:
	mov_s r1,r13	;0
	jl @free_irq
.L42:
.LM164:
	mov_s r1,@.LC1	;9
	mov_s r0,r15	;0
	jl @platform_get_irq_byname
	mov_s r1,r0	;0
.LBB205:
.LBB206:
.LM165:
	ld_s r0,[r14,92]		;11
	jl @irq_create_mapping
.LBE206:
.LBE205:
.LM166:
	mov_s r1,r13	;0
	jl @free_irq
.L39:
.LM167:
	mov_s r2,r13	;0
	add r2,r2,512
	ldb r2,[r2,-28]
	breq_s r2, 0, @.L37
.LM168:
	mov_s r0,r21	;0
	jl @power_supply_unregister
.L37:
.LM169:
	mov_s r0,r20	;0
	jl @power_supply_unregister
.L35:
.LM170:
	mov_s r0,r19	;0
	jl @power_supply_unregister
.L34:
.LM171:
	mov_s r0,r13	;0
	jl @kfree
.L31:
.LM172:
	ld_s r0,[sp,4]		;11
	mov_s r12,48	;0
	add_s sp,sp,8
	b __ld_r13_to_r24_ret
.LFE865:
	.size	wm831x_power_probe, .-wm831x_power_probe
	.align 4
	.type	wm831x_bat_irq, @function
wm831x_bat_irq:
.LFB862:
.LM173:
.LBB207:
.LM174:
	ldw r2,[@.LANCHOR2+42]
.LBE207:
.LM175:
	push_s blink
.LCFI9:
	st.a r13,[sp,-4]       ;17
.LCFI10:
.LM176:
	ld_s r3,[r1]		;11
.LBB208:
.LM177:
	bbit0.d r2,6,@.L49
	mov_s r13,r1	;0
	ld_s r1,[r3,40]		;11
	mov_s r2,@.LC28	;9
	mov_s r3,r0	;0
	mov_s r0,@.LANCHOR2+24	;9
	jl @__dynamic_dev_dbg
.L49:
.LBE208:
.LM178:
	mov_s r2,r13	;0
	add r2,r2,512
	ldb r2,[r2,-28]
	breq_s r2, 0, @.L50
.LM179:
	mov_s r0,r13	;0
	add r0,r0,284
	jl @power_supply_changed
.L50:
.LM180:
	mov_s r0,1	;0
	ld blink,[sp,4]	;16
	ld_s r13,[sp]		;11
	j_s.d [blink]
	add_s sp,sp,8
.LFE862:
	.size	wm831x_bat_irq, .-wm831x_bat_irq
	.align 4
	.type	wm831x_pwr_src_irq, @function
wm831x_pwr_src_irq:
.LFB864:
.LM181:
	push_s blink
.LCFI11:
.LBB209:
.LM182:
	ldw r2,[@.LANCHOR2+66]
.LBE209:
.LM183:
	st.a r13,[sp,-8]       ;17
.LCFI12:
	mov_s r13,r1	;0
	st_s r14,[sp,4]		;12
.LCFI13:
.LBB210:
.LM184:
	bbit0.d r2,6,@.L53
	ld_s r3,[r1]		;11
	ld_s r1,[r3,40]		;11
	mov_s r0,@.LANCHOR2+48	;9
	mov_s r2,@.LC29	;9
	jl @__dynamic_dev_dbg
.L53:
.LBE210:
.LM185:
	mov_s r2,r13	;0
	add r2,r2,512
	ldb r2,[r2,-28]
	breq_s r2, 0, @.L54
.LM186:
	mov_s r0,r13	;0
	add r0,r0,284
	jl @power_supply_changed
.L54:
.LM187:
	mov_s r14,@power_supply_changed	;9
	jl_s.d [r14]
	add3 r0,r13,18
.LM188:
	jl_s.d [r14]
	add_s r0,r13,4
.LM189:
	mov_s r12,8	;0
	b.d __ld_r13_to_r14_ret
	mov_s r0,1	;0
.LFE864:
	.size	wm831x_pwr_src_irq, .-wm831x_pwr_src_irq
	.align 4
	.type	wm831x_syslo_irq, @function
wm831x_syslo_irq:
.LFB863:
.LM190:
	push_s blink
.LCFI14:
.LM191:
	ld_s r2,[r1]		;11
	mov_s r1,@.LC30	;9
	ld_s r0,[r2,40]		;11
	jl @dev_crit
.LM192:
	pop_s blink
	j_s.d [blink]
	mov_s r0,1	;0
.LFE863:
	.size	wm831x_syslo_irq, .-wm831x_syslo_irq
	.align 4
	.type	wm831x_bat_get_prop, @function
wm831x_bat_get_prop:
.LFB861:
.LM193:
	push_s blink
.LCFI15:
.LCFI16:
	bl.d __st_r13_to_r16
	sub_s sp,sp,16
.LM194:
	ld_s r3,[r0,60]		;11
.LM195:
	mov_s r15,r1	;0
	mov_s r13,r2	;0
.LM196:
	ld_s r0,[r3]		;11
	jl @dev_get_drvdata
.LM197:
	brhi.d r15, 12, @.L59
	ld_s r14,[r0]		;11
	add_s r15,r15,pcl
	ldb_s r2,[r15,10]
	add_s r2,r2,pcl
	j_s [r2]
.L65:
	.byte .L60-.L65 + 6
	.byte .L61-.L65 + 6
	.byte .L62-.L65 + 6
	.byte .L59-.L65 + 6
	.byte .L63-.L65 + 6
	.byte .L59-.L65 + 6
	.byte .L59-.L65 + 6
	.byte .L59-.L65 + 6
	.byte .L59-.L65 + 6
	.byte .L59-.L65 + 6
	.byte .L59-.L65 + 6
	.byte .L59-.L65 + 6
	.byte .L64-.L65 + 6
	.align 2
.L59:
	mov r0,-22		;4
	b_s @.L66
.L60:
.LBB211:
.LBB212:
.LM198:
	mov_s r1,16397	;9
	mov_s r15,@wm831x_reg_read	;9
	jl_s.d [r15]
	mov_s r0,r14	;0
.LM199:
	cmp_s r0,0
	blt @.L66
.LM200:
	and r16,r0,1024
	btst_s r0,10
	bne.d @.L86; bbit out of range
	mov_s r2,2	;0
.LM201:
	mov_s r1,16458	;9
	jl_s.d [r15]
	mov_s r0,r14	;0
.LM202:
	cmp_s r0,0
	blt @.L66
.LM203:
	and r0,r0,28672
	breq r0, 4096, @.L78
	breq r0, 8192, @.L78
	brne_s r0, 0, @.L83
.LM204:
	mov_s r2,3	;0
	st_s r2,[r13]		;12
	b_s @.L66
.L83:
.LM205:
	st r16,[r13]       ;17
	b_s @.L85
.L63:
.LBE212:
.LBE211:
.LBB213:
.LBB214:
.LM206:
	mov_s r0,r14	;0
	mov_s r1,16397	;9
	jl @wm831x_reg_read
.LM207:
	brlt.d r0, 0, @.L88
	mov_s r12,16	;0
.LM208:
	and r2,r0,1024
	bbit0 r0,10,@.L86
	b_s @.L78
.L64:
.LBE214:
.LBE213:
.LBB215:
.LBB216:
.LM209:
	mov_s r0,r14	;0
	mov_s r1,8	;0
	jl @wm831x_auxadc_read_uv
.LM210:
	brlt.nd r0, 0, @.L66
	st_s r0,[r13]		;12
	b_s @.L66
.L62:
.LBE216:
.LBE215:
.LBB217:
.LBB218:
.LM211:
	mov_s r0,r14	;0
	mov_s r1,16458	;9
	jl @wm831x_reg_read
.LM212:
	brlt.d r0, 0, @.L88
	mov_s r12,16	;0
.LM213:
	bbit1.d r0,11,@.L86
	mov_s r2,2	;0
.LM214:
	bbit0.nd r0,10,@.L73
	mov_s r2,6	;0
	b_s @.L86
.L73:
.LM215:
	bbit0.nd r0,15,@.L74
	mov_s r2,4	;0
	b_s @.L86
.L74:
.LM216:
	and r0,r0,28672
	breq r0, 16384, @.L79
	cmp_s r0,20480
.LM217:
	mov.eq r2,5
.LM218:
	beq_s @.L86
	brne r0, 12288, @.L78
	b_s @.L79
.L61:
.LBE218:
.LBE217:
.LBB219:
.LBB220:
.LM219:
	mov_s r0,r14	;0
	mov_s r1,16458	;9
	jl @wm831x_reg_read
.LM220:
	brlt.d r0, 0, @.L88
	mov_s r12,16	;0
.LM221:
	and r0,r0,28672
	breq r0, 8192, @.L80
	brgt r0, 8192, @.L81
	brne r0, 4096, @.L78
	b_s @.L79
.L81:
	breq r0, 12288, @.L79
	brne r0, 16384, @.L78
	b_s @.L80
.L79:
.LM222:
	mov_s r2,2	;0
	b_s @.L86
.L80:
.LM223:
	mov_s r2,3	;0
	b_s @.L86
.L78:
.LM224:
	mov_s r2,1	;0
.L86:
	st_s r2,[r13]		;12
.L85:
	mov_s r0,0	;0
.L66:
.LBE220:
.LBE219:
.LM225:
	mov_s r12,16	;0
.L88:
	b __ld_r13_to_r16_ret
.LFE861:
	.size	wm831x_bat_get_prop, .-wm831x_bat_get_prop
	.align 4
	.type	wm831x_usb_get_prop, @function
wm831x_usb_get_prop:
.LFB855:
.LM226:
	push_s blink
.LCFI17:
	st.a r13,[sp,-8]       ;17
.LCFI18:
	st_s r14,[sp,4]		;12
.LCFI19:
.LM227:
	ld_s r3,[r0,60]		;11
.LM228:
	mov_s r14,r1	;0
	mov_s r13,r2	;0
.LM229:
	ld_s r0,[r3]		;11
	jl @dev_get_drvdata
.LM230:
	breq.d r14, 4, @.L91
	ld_s r0,[r0]		;11
	cmp_s r14,12
	mov.ne r0,-22
	bne_s @.L93
	b_s @.L97
.L91:
.LBB221:
.LBB222:
.LM231:
	mov_s r1,16397	;9
	jl @wm831x_reg_read
.LM232:
	brlt.d r0, 0, @.L98
	mov_s r12,8	;0
.LM233:
	and r2,r0,256
	bbit0.nd r0,8,@.L94
	mov_s r2,1	;0
.L94:
.LM234:
	st_s r2,[r13]		;12
	mov_s r0,0	;0
	b_s @.L93
.L97:
.LBE222:
.LBE221:
.LBB223:
.LBB224:
.LM235:
	mov_s r1,7	;0
	jl @wm831x_auxadc_read_uv
.LM236:
	brlt.nd r0, 0, @.L93
	st_s r0,[r13]		;12
.L93:
.LBE224:
.LBE223:
.LM237:
	mov_s r12,8	;0
.L98:
	b __ld_r13_to_r14_ret
.LFE855:
	.size	wm831x_usb_get_prop, .-wm831x_usb_get_prop
	.align 4
	.type	wm831x_wall_get_prop, @function
wm831x_wall_get_prop:
.LFB854:
.LM238:
	push_s blink
.LCFI20:
	st.a r13,[sp,-8]       ;17
.LCFI21:
	st_s r14,[sp,4]		;12
.LCFI22:
.LM239:
	ld_s r3,[r0,60]		;11
.LM240:
	mov_s r14,r1	;0
	mov_s r13,r2	;0
.LM241:
	ld_s r0,[r3]		;11
	jl @dev_get_drvdata
.LM242:
	breq.d r14, 4, @.L101
	ld_s r0,[r0]		;11
	cmp_s r14,12
	mov.ne r0,-22
	bne_s @.L103
	b_s @.L107
.L101:
.LBB225:
.LBB226:
.LM243:
	mov_s r1,16397	;9
	jl @wm831x_reg_read
.LM244:
	brlt.d r0, 0, @.L108
	mov_s r12,8	;0
.LM245:
	and r2,r0,512
	bbit0.nd r0,9,@.L104
	mov_s r2,1	;0
.L104:
.LM246:
	st_s r2,[r13]		;12
	mov_s r0,0	;0
	b_s @.L103
.L107:
.LBE226:
.LBE225:
.LBB227:
.LBB228:
.LM247:
	mov_s r1,9	;0
	jl @wm831x_auxadc_read_uv
.LM248:
	brlt.nd r0, 0, @.L103
	st_s r0,[r13]		;12
.L103:
.LBE228:
.LBE227:
.LM249:
	mov_s r12,8	;0
.L108:
	b __ld_r13_to_r14_ret
.LFE854:
	.size	wm831x_wall_get_prop, .-wm831x_wall_get_prop
	.section	.init.text,"ax",@progbits
	.align 4
	.type	wm831x_power_driver_init, @function
wm831x_power_driver_init:
.LFB867:
.LSM2:
.LSM3:
	mov_s r0,@.LANCHOR0	;9
	mov_s r1,@__this_module	;9
	j @__platform_driver_register
.LFE867:
	.size	wm831x_power_driver_init, .-wm831x_power_driver_init
	.global	init_module
	.set	init_module,wm831x_power_driver_init
	.global	cleanup_module
	.set	cleanup_module,wm831x_power_driver_exit
	.section .rodata
	.align 4
	.set	.LANCHOR1,. + 0
	.type	wm831x_bat_irqs, @object
	.size	wm831x_bat_irqs, 32
wm831x_bat_irqs:
	.word	@.LC32
	.word	@.LC33
	.word	@.LC34
	.word	@.LC35
	.word	@.LC36
	.word	@.LC37
	.word	@.LC38
	.word	@.LC39
	.type	__func__.16138, @object
	.size	__func__.16138, 27
__func__.16138:
	.string	"wm831x_battey_apply_config"
	.zero	1
	.type	__func__.16308, @object
	.size	__func__.16308, 15
__func__.16308:
	.string	"wm831x_bat_irq"
	.zero	1
	.type	__func__.16336, @object
	.size	__func__.16336, 19
__func__.16336:
	.string	"wm831x_pwr_src_irq"
	.section	.modinfo,"a",@progbits
	.type	__UNIQUE_ID_alias3, @object
	.size	__UNIQUE_ID_alias3, 28
__UNIQUE_ID_alias3:
	.string	"alias=platform:wm831x-power"
	.type	__UNIQUE_ID_license2, @object
	.size	__UNIQUE_ID_license2, 12
__UNIQUE_ID_license2:
	.string	"license=GPL"
	.type	__UNIQUE_ID_author1, @object
	.size	__UNIQUE_ID_author1, 56
__UNIQUE_ID_author1:
	.string	"author=Mark Brown <broonie@opensource.wolfsonmicro.com>"
	.type	__UNIQUE_ID_description0, @object
	.size	__UNIQUE_ID_description0, 49
__UNIQUE_ID_description0:
	.string	"description=Power supply driver for WM831x PMICs"
	.section .data
	.align 4
	.set	.LANCHOR0,. + 0
	.type	wm831x_power_driver, @object
	.size	wm831x_power_driver, 84
wm831x_power_driver:
	.word	@wm831x_power_probe
	.word	@wm831x_power_remove
	.zero	12
	.word	@.LC31
	.zero	56
	.zero	4
	.type	trickle_ilims, @object
	.size	trickle_ilims, 32
trickle_ilims:
	.word	50
	.word	0
	.word	100
	.word	64
	.word	150
	.word	128
	.word	200
	.word	192
	.type	vsels, @object
	.size	vsels, 32
vsels:
	.word	4050
	.word	0
	.word	4100
	.word	16
	.word	4150
	.word	32
	.word	4200
	.word	48
	.type	fast_ilims, @object
	.size	fast_ilims, 128
fast_ilims:
	.word	0
	.word	0
	.word	50
	.word	1
	.word	100
	.word	2
	.word	150
	.word	3
	.word	200
	.word	4
	.word	250
	.word	5
	.word	300
	.word	6
	.word	350
	.word	7
	.word	400
	.word	8
	.word	450
	.word	9
	.word	500
	.word	10
	.word	600
	.word	11
	.word	700
	.word	12
	.word	800
	.word	13
	.word	900
	.word	14
	.word	1000
	.word	15
	.type	eoc_iterms, @object
	.size	eoc_iterms, 64
eoc_iterms:
	.word	20
	.word	0
	.word	30
	.word	1024
	.word	40
	.word	2048
	.word	50
	.word	3072
	.word	60
	.word	4096
	.word	70
	.word	5120
	.word	80
	.word	6144
	.word	90
	.word	7168
	.type	chg_times, @object
	.size	chg_times, 128
chg_times:
	.word	60
	.word	0
	.word	90
	.word	256
	.word	120
	.word	512
	.word	150
	.word	768
	.word	180
	.word	1024
	.word	210
	.word	1280
	.word	240
	.word	1536
	.word	270
	.word	1792
	.word	300
	.word	2048
	.word	330
	.word	2304
	.word	360
	.word	2560
	.word	390
	.word	2816
	.word	420
	.word	3072
	.word	450
	.word	3328
	.word	480
	.word	3584
	.word	510
	.word	3840
	.type	wm831x_wall_props, @object
	.size	wm831x_wall_props, 8
wm831x_wall_props:
	.word	4
	.word	12
	.type	wm831x_usb_props, @object
	.size	wm831x_usb_props, 8
wm831x_usb_props:
	.word	4
	.word	12
	.type	wm831x_bat_props, @object
	.size	wm831x_bat_props, 20
wm831x_bat_props:
	.word	0
	.word	4
	.word	12
	.word	2
	.word	1
	.section	.rodata.str1.4,"aMS",@progbits,1
	.align 4
.LC0:
	.string	"PWR SRC"
.LC1:
	.string	"SYSLO"
	.zero	2
.LC2:
	.string	"Invalid %s %d%s\n"
	.zero	3
.LC3:
	.string	"Set %s of %d%s\n"
.LC4:
	.string	"No battery charger configuration\n"
	.zero	2
.LC5:
	.string	"Battery charger disabled\n"
	.zero	2
.LC6:
	.string	"trickle charge current limit"
	.zero	3
.LC7:
	.string	"mA"
	.zero	1
.LC8:
	.string	"target voltage"
	.zero	1
.LC9:
	.string	"mV"
	.zero	1
.LC10:
	.string	"fast charge current limit"
	.zero	2
.LC11:
	.string	"end of charge current threshold"
.LC12:
	.string	"charger timeout"
.LC13:
	.string	"min"
.LC14:
	.string	"Failed to unlock registers: %d\n"
.LC15:
	.string	"Failed to set charger control 1: %d\n"
	.zero	3
.LC16:
	.string	"Failed to set charger control 2: %d\n"
	.zero	3
.LC17:
	.string	"wm831x-wall.%d"
	.zero	1
.LC18:
	.string	"wm831x-battery.%d"
	.zero	2
.LC19:
	.string	"wm831x-usb.%d"
	.zero	2
.LC20:
	.string	"wm831x-wall"
.LC21:
	.string	"wm831x-battery"
	.zero	1
.LC22:
	.string	"wm831x-usb"
	.zero	1
.LC23:
	.string	"System power low"
	.zero	3
.LC24:
	.string	"Failed to request SYSLO IRQ %d: %d\n"
.LC25:
	.string	"Power source"
	.zero	3
.LC26:
	.string	"Failed to request PWR SRC IRQ %d: %d\n"
	.zero	2
.LC27:
	.string	"Failed to request %s IRQ %d: %d\n"
	.zero	3
.LC28:
	.string	"Battery status changed: %d\n"
.LC29:
	.string	"Power source changed\n"
	.zero	2
.LC30:
	.string	"SYSVDD under voltage\n"
	.zero	2
.LC31:
	.string	"wm831x-power"
	.zero	3
.LC32:
	.string	"BATT HOT"
	.zero	3
.LC33:
	.string	"BATT COLD"
	.zero	2
.LC34:
	.string	"BATT FAIL"
	.zero	2
.LC35:
	.string	"OV"
	.zero	1
.LC36:
	.string	"END"
.LC37:
	.string	"TO"
	.zero	1
.LC38:
	.string	"MODE"
	.zero	3
.LC39:
	.string	"START"
	.zero	2
.LC40:
	.string	"wm831x_power"
	.zero	3
.LC41:
	.string	"drivers/power/wm831x_power.c"
	.section	__verbose,"aw",@progbits
	.align 8
	.set	.LANCHOR2,. + 0
	.type	descriptor.16137, @object
	.size	descriptor.16137, 24
descriptor.16137:
	.word	@.LC40
	.word	@__func__.16138
	.word	@.LC41
	.word	@.LC3
	.byte	0
	.byte	53
	.byte	0
	.byte	64
	.zero	4
	.type	descriptor.16307, @object
	.size	descriptor.16307, 24
descriptor.16307:
	.word	@.LC40
	.word	@__func__.16308
	.word	@.LC41
	.word	@.LC28
	.byte	0
	.byte	112
	.byte	64
	.byte	64
	.zero	4
	.type	descriptor.16335, @object
	.size	descriptor.16335, 24
descriptor.16335:
	.word	@.LC40
	.word	@__func__.16336
	.word	@.LC41
	.word	@.LC29
	.byte	0
	.byte	120
	.byte	64
	.byte	64
	.zero	4
	.section	.debug_frame,"",@progbits
.Lframe0:
	.4byte	@.LECIE0-@.LSCIE0
.LSCIE0:
	.4byte	0xffffffff
	.byte	0x1
	.string	""
	.uleb128 0x1
	.sleb128 -4
	.byte	0x1f
	.byte	0xc
	.uleb128 0x1c
	.uleb128 0x0
	.align 4
.LECIE0:
.LSFDE0:
	.4byte	@.LEFDE0-@.LASFDE0
.LASFDE0:
	.4byte	@.Lframe0
	.4byte	@.LFB869
	.4byte	@.LFE869-@.LFB869
	.align 4
.LEFDE0:
.LSFDE2:
	.4byte	@.LEFDE2-@.LASFDE2
.LASFDE2:
	.4byte	@.Lframe0
	.4byte	@.LFB866
	.4byte	@.LFE866-@.LFB866
	.byte	0x4
	.4byte	@.LCFI0-@.LFB866
	.byte	0xe
	.uleb128 0x4
	.byte	0x4
	.4byte	@.LCFI1-@.LCFI0
	.byte	0xe
	.uleb128 0x2c
	.byte	0x11
	.uleb128 0x1f
	.sleb128 1
	.align 4
.LEFDE2:
.LSFDE4:
	.4byte	@.LEFDE4-@.LASFDE4
.LASFDE4:
	.4byte	@.Lframe0
	.4byte	@.LFB856
	.4byte	@.LFE856-@.LFB856
	.byte	0x4
	.4byte	@.LCFI2-@.LFB856
	.byte	0xe
	.uleb128 0x4
	.byte	0x11
	.uleb128 0xd
	.sleb128 1
	.align 4
.LEFDE4:
.LSFDE6:
	.4byte	@.LEFDE6-@.LASFDE6
.LASFDE6:
	.4byte	@.Lframe0
	.4byte	@.LFB857
	.4byte	@.LFE857-@.LFB857
	.byte	0x4
	.4byte	@.LCFI3-@.LFB857
	.byte	0xe
	.uleb128 0x4
	.byte	0x4
	.4byte	@.LCFI4-@.LCFI3
	.byte	0xe
	.uleb128 0x14
	.byte	0x4
	.4byte	@.LCFI5-@.LCFI4
	.byte	0xe
	.uleb128 0x1c
	.byte	0x11
	.uleb128 0x1f
	.sleb128 1
	.align 4
.LEFDE6:
.LSFDE8:
	.4byte	@.LEFDE8-@.LASFDE8
.LASFDE8:
	.4byte	@.Lframe0
	.4byte	@.LFB865
	.4byte	@.LFE865-@.LFB865
	.byte	0x4
	.4byte	@.LCFI6-@.LFB865
	.byte	0xe
	.uleb128 0x4
	.byte	0x4
	.4byte	@.LCFI7-@.LCFI6
	.byte	0xe
	.uleb128 0x34
	.byte	0x4
	.4byte	@.LCFI8-@.LCFI7
	.byte	0xe
	.uleb128 0x3c
	.byte	0x11
	.uleb128 0x1f
	.sleb128 1
	.align 4
.LEFDE8:
.LSFDE10:
	.4byte	@.LEFDE10-@.LASFDE10
.LASFDE10:
	.4byte	@.Lframe0
	.4byte	@.LFB862
	.4byte	@.LFE862-@.LFB862
	.byte	0x4
	.4byte	@.LCFI9-@.LFB862
	.byte	0xe
	.uleb128 0x4
	.byte	0x4
	.4byte	@.LCFI10-@.LCFI9
	.byte	0xe
	.uleb128 0x8
	.byte	0x11
	.uleb128 0xd
	.sleb128 2
	.byte	0x11
	.uleb128 0x1f
	.sleb128 1
	.align 4
.LEFDE10:
.LSFDE12:
	.4byte	@.LEFDE12-@.LASFDE12
.LASFDE12:
	.4byte	@.Lframe0
	.4byte	@.LFB864
	.4byte	@.LFE864-@.LFB864
	.byte	0x4
	.4byte	@.LCFI11-@.LFB864
	.byte	0xe
	.uleb128 0x4
	.byte	0x4
	.4byte	@.LCFI12-@.LCFI11
	.byte	0xe
	.uleb128 0xc
	.byte	0x11
	.uleb128 0xd
	.sleb128 3
	.byte	0x11
	.uleb128 0x1f
	.sleb128 1
	.byte	0x4
	.4byte	@.LCFI13-@.LCFI12
	.byte	0x11
	.uleb128 0xe
	.sleb128 2
	.align 4
.LEFDE12:
.LSFDE14:
	.4byte	@.LEFDE14-@.LASFDE14
.LASFDE14:
	.4byte	@.Lframe0
	.4byte	@.LFB863
	.4byte	@.LFE863-@.LFB863
	.byte	0x4
	.4byte	@.LCFI14-@.LFB863
	.byte	0xe
	.uleb128 0x4
	.byte	0x11
	.uleb128 0x1f
	.sleb128 1
	.align 4
.LEFDE14:
.LSFDE16:
	.4byte	@.LEFDE16-@.LASFDE16
.LASFDE16:
	.4byte	@.Lframe0
	.4byte	@.LFB861
	.4byte	@.LFE861-@.LFB861
	.byte	0x4
	.4byte	@.LCFI15-@.LFB861
	.byte	0xe
	.uleb128 0x4
	.byte	0x4
	.4byte	@.LCFI16-@.LCFI15
	.byte	0xe
	.uleb128 0x14
	.byte	0x11
	.uleb128 0x1f
	.sleb128 1
	.align 4
.LEFDE16:
.LSFDE18:
	.4byte	@.LEFDE18-@.LASFDE18
.LASFDE18:
	.4byte	@.Lframe0
	.4byte	@.LFB855
	.4byte	@.LFE855-@.LFB855
	.byte	0x4
	.4byte	@.LCFI17-@.LFB855
	.byte	0xe
	.uleb128 0x4
	.byte	0x4
	.4byte	@.LCFI18-@.LCFI17
	.byte	0xe
	.uleb128 0xc
	.byte	0x4
	.4byte	@.LCFI19-@.LCFI18
	.byte	0x11
	.uleb128 0xe
	.sleb128 2
	.byte	0x11
	.uleb128 0xd
	.sleb128 3
	.byte	0x11
	.uleb128 0x1f
	.sleb128 1
	.align 4
.LEFDE18:
.LSFDE20:
	.4byte	@.LEFDE20-@.LASFDE20
.LASFDE20:
	.4byte	@.Lframe0
	.4byte	@.LFB854
	.4byte	@.LFE854-@.LFB854
	.byte	0x4
	.4byte	@.LCFI20-@.LFB854
	.byte	0xe
	.uleb128 0x4
	.byte	0x4
	.4byte	@.LCFI21-@.LCFI20
	.byte	0xe
	.uleb128 0xc
	.byte	0x4
	.4byte	@.LCFI22-@.LCFI21
	.byte	0x11
	.uleb128 0xe
	.sleb128 2
	.byte	0x11
	.uleb128 0xd
	.sleb128 3
	.byte	0x11
	.uleb128 0x1f
	.sleb128 1
	.align 4
.LEFDE20:
.LSFDE22:
	.4byte	@.LEFDE22-@.LASFDE22
.LASFDE22:
	.4byte	@.Lframe0
	.4byte	@.LFB867
	.4byte	@.LFE867-@.LFB867
	.align 4
.LEFDE22:
	.section .text
.Letext0:
	.section	.debug_loc,"",@progbits
.Ldebug_loc0:
.LLST1:
	.4byte	@.LFB866
	.4byte	@.LCFI0
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI0
	.4byte	@.LCFI1
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	@.LCFI1
	.4byte	@.LFE866
	.2byte	0x2
	.byte	0x8c
	.sleb128 44
	.4byte	0x0
	.4byte	0x0
.LLST2:
	.4byte	@.LFB856
	.4byte	@.LCFI2
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI2
	.4byte	@.LFE856
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	0x0
	.4byte	0x0
.LLST3:
	.4byte	@.LFB857
	.4byte	@.LCFI3
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI3
	.4byte	@.LCFI4
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	@.LCFI4
	.4byte	@.LCFI5
	.2byte	0x2
	.byte	0x8c
	.sleb128 20
	.4byte	@.LCFI5
	.4byte	@.LFE857
	.2byte	0x2
	.byte	0x8c
	.sleb128 28
	.4byte	0x0
	.4byte	0x0
.LLST4:
	.4byte	@.LFB865
	.4byte	@.LCFI6
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI6
	.4byte	@.LCFI7
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	@.LCFI7
	.4byte	@.LCFI8
	.2byte	0x2
	.byte	0x8c
	.sleb128 52
	.4byte	@.LCFI8
	.4byte	@.LFE865
	.2byte	0x2
	.byte	0x8c
	.sleb128 60
	.4byte	0x0
	.4byte	0x0
.LLST5:
	.4byte	@.LFB862
	.4byte	@.LCFI9
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI9
	.4byte	@.LCFI10
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	@.LCFI10
	.4byte	@.LFE862
	.2byte	0x2
	.byte	0x8c
	.sleb128 8
	.4byte	0x0
	.4byte	0x0
.LLST6:
	.4byte	@.LFB864
	.4byte	@.LCFI11
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI11
	.4byte	@.LCFI12
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	@.LCFI12
	.4byte	@.LFE864
	.2byte	0x2
	.byte	0x8c
	.sleb128 12
	.4byte	0x0
	.4byte	0x0
.LLST7:
	.4byte	@.LFB863
	.4byte	@.LCFI14
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI14
	.4byte	@.LFE863
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	0x0
	.4byte	0x0
.LLST8:
	.4byte	@.LFB861
	.4byte	@.LCFI15
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI15
	.4byte	@.LCFI16
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	@.LCFI16
	.4byte	@.LFE861
	.2byte	0x2
	.byte	0x8c
	.sleb128 20
	.4byte	0x0
	.4byte	0x0
.LLST9:
	.4byte	@.LFB855
	.4byte	@.LCFI17
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI17
	.4byte	@.LCFI18
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	@.LCFI18
	.4byte	@.LFE855
	.2byte	0x2
	.byte	0x8c
	.sleb128 12
	.4byte	0x0
	.4byte	0x0
.LLST10:
	.4byte	@.LFB854
	.4byte	@.LCFI20
	.2byte	0x1
	.byte	0x6c
	.4byte	@.LCFI20
	.4byte	@.LCFI21
	.2byte	0x2
	.byte	0x8c
	.sleb128 4
	.4byte	@.LCFI21
	.4byte	@.LFE854
	.2byte	0x2
	.byte	0x8c
	.sleb128 12
	.4byte	0x0
	.4byte	0x0
	.section	.debug_info
	.4byte	0x177e
	.2byte	0x2
	.4byte	@.Ldebug_abbrev0
	.byte	0x4
	.uleb128 0x1
	.4byte	@.LASF342
	.byte	0x1
	.4byte	@.LASF343
	.4byte	@.LASF344
	.4byte	0x0
	.4byte	0x0
	.4byte	@.Ldebug_ranges0+0x110
	.4byte	@.Ldebug_line0
	.uleb128 0x2
	.byte	0x1
	.byte	0x6
	.4byte	@.LASF0
	.uleb128 0x2
	.byte	0x1
	.byte	0x8
	.4byte	@.LASF1
	.uleb128 0x2
	.byte	0x2
	.byte	0x5
	.4byte	@.LASF2
	.uleb128 0x2
	.byte	0x2
	.byte	0x7
	.4byte	@.LASF3
	.uleb128 0x3
	.byte	0x4
	.byte	0x5
	.string	"int"
	.uleb128 0x2
	.byte	0x4
	.byte	0x7
	.4byte	@.LASF4
	.uleb128 0x2
	.byte	0x8
	.byte	0x5
	.4byte	@.LASF5
	.uleb128 0x2
	.byte	0x8
	.byte	0x7
	.4byte	@.LASF6
	.uleb128 0x4
	.string	"u32"
	.byte	0x20
	.byte	0x16
	.4byte	0x4c
	.uleb128 0x2
	.byte	0x4
	.byte	0x5
	.4byte	@.LASF7
	.uleb128 0x2
	.byte	0x4
	.byte	0x7
	.4byte	@.LASF8
	.uleb128 0x5
	.4byte	@.LASF9
	.byte	0x5
	.byte	0x43
	.4byte	0x4c
	.uleb128 0x2
	.byte	0x1
	.byte	0x8
	.4byte	@.LASF10
	.uleb128 0x5
	.4byte	@.LASF11
	.byte	0x6
	.byte	0x1d
	.4byte	0x97
	.uleb128 0x2
	.byte	0x1
	.byte	0x2
	.4byte	@.LASF12
	.uleb128 0x5
	.4byte	@.LASF13
	.byte	0x6
	.byte	0x36
	.4byte	0x7a
	.uleb128 0x5
	.4byte	@.LASF14
	.byte	0x6
	.byte	0x9d
	.4byte	0x4c
	.uleb128 0x6
	.4byte	@.LASF15
	.byte	0x1
	.uleb128 0x6
	.4byte	@.LASF16
	.byte	0x1
	.uleb128 0x7
	.byte	0x4
	.uleb128 0x8
	.4byte	@.LASF32
	.byte	0x4
	.byte	0x7
	.2byte	0x17f
	.4byte	0xfa
	.uleb128 0x9
	.4byte	@.LASF17
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF18
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF19
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF20
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF21
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF22
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF23
	.sleb128 4
	.byte	0x0
	.uleb128 0xa
	.byte	0x4
	.byte	0x8
	.byte	0x26
	.4byte	0x133
	.uleb128 0x9
	.4byte	@.LASF24
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF25
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF26
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF27
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF28
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF29
	.sleb128 4
	.uleb128 0x9
	.4byte	@.LASF30
	.sleb128 5
	.uleb128 0x9
	.4byte	@.LASF31
	.sleb128 6
	.byte	0x0
	.uleb128 0xb
	.4byte	@.LASF33
	.byte	0x4
	.byte	0x8
	.byte	0x69
	.4byte	0x1fa
	.uleb128 0x9
	.4byte	@.LASF34
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF35
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF36
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF37
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF38
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF39
	.sleb128 4
	.uleb128 0x9
	.4byte	@.LASF40
	.sleb128 5
	.uleb128 0x9
	.4byte	@.LASF41
	.sleb128 6
	.uleb128 0x9
	.4byte	@.LASF42
	.sleb128 7
	.uleb128 0x9
	.4byte	@.LASF43
	.sleb128 8
	.uleb128 0x9
	.4byte	@.LASF44
	.sleb128 9
	.uleb128 0x9
	.4byte	@.LASF45
	.sleb128 10
	.uleb128 0x9
	.4byte	@.LASF46
	.sleb128 11
	.uleb128 0x9
	.4byte	@.LASF47
	.sleb128 12
	.uleb128 0x9
	.4byte	@.LASF48
	.sleb128 13
	.uleb128 0x9
	.4byte	@.LASF49
	.sleb128 14
	.uleb128 0x9
	.4byte	@.LASF50
	.sleb128 15
	.uleb128 0x9
	.4byte	@.LASF51
	.sleb128 16
	.uleb128 0x9
	.4byte	@.LASF52
	.sleb128 17
	.uleb128 0x9
	.4byte	@.LASF53
	.sleb128 18
	.uleb128 0x9
	.4byte	@.LASF54
	.sleb128 19
	.uleb128 0x9
	.4byte	@.LASF55
	.sleb128 20
	.uleb128 0x9
	.4byte	@.LASF56
	.sleb128 21
	.uleb128 0x9
	.4byte	@.LASF57
	.sleb128 22
	.uleb128 0x9
	.4byte	@.LASF58
	.sleb128 23
	.uleb128 0x9
	.4byte	@.LASF59
	.sleb128 24
	.uleb128 0x9
	.4byte	@.LASF60
	.sleb128 25
	.uleb128 0x9
	.4byte	@.LASF61
	.sleb128 26
	.uleb128 0x9
	.4byte	@.LASF62
	.sleb128 27
	.uleb128 0x9
	.4byte	@.LASF63
	.sleb128 28
	.uleb128 0x9
	.4byte	@.LASF64
	.sleb128 29
	.byte	0x0
	.uleb128 0xb
	.4byte	@.LASF65
	.byte	0x4
	.byte	0x8
	.byte	0xa2
	.4byte	0x22b
	.uleb128 0x9
	.4byte	@.LASF66
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF67
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF68
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF69
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF70
	.sleb128 4
	.uleb128 0x9
	.4byte	@.LASF71
	.sleb128 5
	.byte	0x0
	.uleb128 0xb
	.4byte	@.LASF72
	.byte	0x4
	.byte	0x8
	.byte	0xe4
	.4byte	0x250
	.uleb128 0x9
	.4byte	@.LASF73
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF74
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF75
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF76
	.sleb128 3
	.byte	0x0
	.uleb128 0x6
	.4byte	@.LASF77
	.byte	0x1
	.uleb128 0xb
	.4byte	@.LASF78
	.byte	0x4
	.byte	0x9
	.byte	0x67
	.4byte	0x27b
	.uleb128 0x9
	.4byte	@.LASF79
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF80
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF81
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF82
	.sleb128 3
	.byte	0x0
	.uleb128 0xc
	.byte	0x4
	.byte	0x7
	.uleb128 0x6
	.4byte	@.LASF83
	.byte	0x1
	.uleb128 0x6
	.4byte	@.LASF84
	.byte	0x1
	.uleb128 0x6
	.4byte	@.LASF85
	.byte	0x1
	.uleb128 0x6
	.4byte	@.LASF86
	.byte	0x1
	.uleb128 0xa
	.byte	0x4
	.byte	0xa
	.byte	0x23
	.4byte	0x2bd
	.uleb128 0x9
	.4byte	@.LASF87
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF88
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF89
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF90
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF91
	.sleb128 4
	.byte	0x0
	.uleb128 0xa
	.byte	0x4
	.byte	0xa
	.byte	0x2b
	.4byte	0x2de
	.uleb128 0x9
	.4byte	@.LASF92
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF93
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF94
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF95
	.sleb128 3
	.byte	0x0
	.uleb128 0xa
	.byte	0x4
	.byte	0xa
	.byte	0x32
	.4byte	0x31d
	.uleb128 0x9
	.4byte	@.LASF96
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF97
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF98
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF99
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF100
	.sleb128 4
	.uleb128 0x9
	.4byte	@.LASF101
	.sleb128 5
	.uleb128 0x9
	.4byte	@.LASF102
	.sleb128 6
	.uleb128 0x9
	.4byte	@.LASF103
	.sleb128 7
	.uleb128 0x9
	.4byte	@.LASF104
	.sleb128 8
	.byte	0x0
	.uleb128 0xb
	.4byte	@.LASF105
	.byte	0x4
	.byte	0xa
	.byte	0x57
	.4byte	0x486
	.uleb128 0x9
	.4byte	@.LASF106
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF107
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF108
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF109
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF110
	.sleb128 4
	.uleb128 0x9
	.4byte	@.LASF111
	.sleb128 5
	.uleb128 0x9
	.4byte	@.LASF112
	.sleb128 6
	.uleb128 0x9
	.4byte	@.LASF113
	.sleb128 7
	.uleb128 0x9
	.4byte	@.LASF114
	.sleb128 8
	.uleb128 0x9
	.4byte	@.LASF115
	.sleb128 9
	.uleb128 0x9
	.4byte	@.LASF116
	.sleb128 10
	.uleb128 0x9
	.4byte	@.LASF117
	.sleb128 11
	.uleb128 0x9
	.4byte	@.LASF118
	.sleb128 12
	.uleb128 0x9
	.4byte	@.LASF119
	.sleb128 13
	.uleb128 0x9
	.4byte	@.LASF120
	.sleb128 14
	.uleb128 0x9
	.4byte	@.LASF121
	.sleb128 15
	.uleb128 0x9
	.4byte	@.LASF122
	.sleb128 16
	.uleb128 0x9
	.4byte	@.LASF123
	.sleb128 17
	.uleb128 0x9
	.4byte	@.LASF124
	.sleb128 18
	.uleb128 0x9
	.4byte	@.LASF125
	.sleb128 19
	.uleb128 0x9
	.4byte	@.LASF126
	.sleb128 20
	.uleb128 0x9
	.4byte	@.LASF127
	.sleb128 21
	.uleb128 0x9
	.4byte	@.LASF128
	.sleb128 22
	.uleb128 0x9
	.4byte	@.LASF129
	.sleb128 23
	.uleb128 0x9
	.4byte	@.LASF130
	.sleb128 24
	.uleb128 0x9
	.4byte	@.LASF131
	.sleb128 25
	.uleb128 0x9
	.4byte	@.LASF132
	.sleb128 26
	.uleb128 0x9
	.4byte	@.LASF133
	.sleb128 27
	.uleb128 0x9
	.4byte	@.LASF134
	.sleb128 28
	.uleb128 0x9
	.4byte	@.LASF135
	.sleb128 29
	.uleb128 0x9
	.4byte	@.LASF136
	.sleb128 30
	.uleb128 0x9
	.4byte	@.LASF137
	.sleb128 31
	.uleb128 0x9
	.4byte	@.LASF138
	.sleb128 32
	.uleb128 0x9
	.4byte	@.LASF139
	.sleb128 33
	.uleb128 0x9
	.4byte	@.LASF140
	.sleb128 34
	.uleb128 0x9
	.4byte	@.LASF141
	.sleb128 35
	.uleb128 0x9
	.4byte	@.LASF142
	.sleb128 36
	.uleb128 0x9
	.4byte	@.LASF143
	.sleb128 37
	.uleb128 0x9
	.4byte	@.LASF144
	.sleb128 38
	.uleb128 0x9
	.4byte	@.LASF145
	.sleb128 39
	.uleb128 0x9
	.4byte	@.LASF146
	.sleb128 40
	.uleb128 0x9
	.4byte	@.LASF147
	.sleb128 41
	.uleb128 0x9
	.4byte	@.LASF148
	.sleb128 42
	.uleb128 0x9
	.4byte	@.LASF149
	.sleb128 43
	.uleb128 0x9
	.4byte	@.LASF150
	.sleb128 44
	.uleb128 0x9
	.4byte	@.LASF151
	.sleb128 45
	.uleb128 0x9
	.4byte	@.LASF152
	.sleb128 46
	.uleb128 0x9
	.4byte	@.LASF153
	.sleb128 47
	.uleb128 0x9
	.4byte	@.LASF154
	.sleb128 48
	.uleb128 0x9
	.4byte	@.LASF155
	.sleb128 49
	.uleb128 0x9
	.4byte	@.LASF156
	.sleb128 50
	.uleb128 0x9
	.4byte	@.LASF157
	.sleb128 51
	.uleb128 0x9
	.4byte	@.LASF158
	.sleb128 52
	.uleb128 0x9
	.4byte	@.LASF159
	.sleb128 53
	.uleb128 0x9
	.4byte	@.LASF160
	.sleb128 54
	.uleb128 0x9
	.4byte	@.LASF161
	.sleb128 55
	.uleb128 0x9
	.4byte	@.LASF162
	.sleb128 56
	.uleb128 0x9
	.4byte	@.LASF163
	.sleb128 57
	.byte	0x0
	.uleb128 0xb
	.4byte	@.LASF164
	.byte	0x4
	.byte	0xa
	.byte	0x96
	.4byte	0x4c3
	.uleb128 0x9
	.4byte	@.LASF165
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF166
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF167
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF168
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF169
	.sleb128 4
	.uleb128 0x9
	.4byte	@.LASF170
	.sleb128 5
	.uleb128 0x9
	.4byte	@.LASF171
	.sleb128 6
	.uleb128 0x9
	.4byte	@.LASF172
	.sleb128 7
	.byte	0x0
	.uleb128 0xd
	.4byte	@.LASF345
	.byte	0x1
	.uleb128 0x6
	.4byte	@.LASF173
	.byte	0x1
	.uleb128 0xb
	.4byte	@.LASF174
	.byte	0x4
	.byte	0xb
	.byte	0xb
	.4byte	0x57e
	.uleb128 0x9
	.4byte	@.LASF175
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF176
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF177
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF178
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF179
	.sleb128 4
	.uleb128 0x9
	.4byte	@.LASF180
	.sleb128 5
	.uleb128 0x9
	.4byte	@.LASF181
	.sleb128 6
	.uleb128 0x9
	.4byte	@.LASF182
	.sleb128 7
	.uleb128 0x9
	.4byte	@.LASF183
	.sleb128 8
	.uleb128 0x9
	.4byte	@.LASF184
	.sleb128 9
	.uleb128 0x9
	.4byte	@.LASF185
	.sleb128 10
	.uleb128 0x9
	.4byte	@.LASF186
	.sleb128 11
	.uleb128 0x9
	.4byte	@.LASF187
	.sleb128 12
	.uleb128 0x9
	.4byte	@.LASF188
	.sleb128 13
	.uleb128 0x9
	.4byte	@.LASF189
	.sleb128 14
	.uleb128 0x9
	.4byte	@.LASF190
	.sleb128 15
	.uleb128 0x9
	.4byte	@.LASF191
	.sleb128 16
	.uleb128 0x9
	.4byte	@.LASF192
	.sleb128 17
	.uleb128 0x9
	.4byte	@.LASF193
	.sleb128 18
	.uleb128 0x9
	.4byte	@.LASF194
	.sleb128 19
	.uleb128 0x9
	.4byte	@.LASF195
	.sleb128 20
	.uleb128 0x9
	.4byte	@.LASF196
	.sleb128 21
	.uleb128 0x9
	.4byte	@.LASF197
	.sleb128 22
	.uleb128 0x9
	.4byte	@.LASF198
	.sleb128 23
	.uleb128 0x9
	.4byte	@.LASF199
	.sleb128 24
	.uleb128 0x9
	.4byte	@.LASF200
	.sleb128 25
	.uleb128 0x9
	.4byte	@.LASF201
	.sleb128 26
	.byte	0x0
	.uleb128 0x6
	.4byte	@.LASF202
	.byte	0x1
	.uleb128 0xb
	.4byte	@.LASF203
	.byte	0x4
	.byte	0xc
	.byte	0xa
	.4byte	0x5a3
	.uleb128 0x9
	.4byte	@.LASF204
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF205
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF206
	.sleb128 2
	.byte	0x0
	.uleb128 0x5
	.4byte	@.LASF207
	.byte	0xc
	.byte	0x10
	.4byte	0x584
	.uleb128 0xb
	.4byte	@.LASF208
	.byte	0x4
	.byte	0xd
	.byte	0x9c
	.4byte	0x5d9
	.uleb128 0x9
	.4byte	@.LASF209
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF210
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF211
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF212
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF213
	.sleb128 4
	.byte	0x0
	.uleb128 0xe
	.byte	0x4
	.byte	0xe
	.2byte	0x158
	.4byte	0x625
	.uleb128 0x9
	.4byte	@.LASF214
	.sleb128 0
	.uleb128 0x9
	.4byte	@.LASF215
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF216
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF217
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF218
	.sleb128 4
	.uleb128 0x9
	.4byte	@.LASF219
	.sleb128 5
	.uleb128 0x9
	.4byte	@.LASF220
	.sleb128 6
	.uleb128 0x9
	.4byte	@.LASF221
	.sleb128 7
	.uleb128 0x9
	.4byte	@.LASF222
	.sleb128 8
	.uleb128 0x9
	.4byte	@.LASF223
	.sleb128 9
	.uleb128 0x9
	.4byte	@.LASF224
	.sleb128 10
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x62b
	.uleb128 0x10
	.uleb128 0xb
	.4byte	@.LASF225
	.byte	0x4
	.byte	0xf
	.byte	0xc8
	.4byte	0x681
	.uleb128 0x9
	.4byte	@.LASF226
	.sleb128 15
	.uleb128 0x9
	.4byte	@.LASF227
	.sleb128 10
	.uleb128 0x9
	.4byte	@.LASF228
	.sleb128 9
	.uleb128 0x9
	.4byte	@.LASF229
	.sleb128 8
	.uleb128 0x9
	.4byte	@.LASF230
	.sleb128 7
	.uleb128 0x9
	.4byte	@.LASF231
	.sleb128 6
	.uleb128 0x9
	.4byte	@.LASF232
	.sleb128 5
	.uleb128 0x9
	.4byte	@.LASF233
	.sleb128 4
	.uleb128 0x9
	.4byte	@.LASF234
	.sleb128 3
	.uleb128 0x9
	.4byte	@.LASF235
	.sleb128 2
	.uleb128 0x9
	.4byte	@.LASF236
	.sleb128 1
	.uleb128 0x9
	.4byte	@.LASF237
	.sleb128 0
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x687
	.uleb128 0x6
	.4byte	@.LASF238
	.byte	0x1
	.uleb128 0x6
	.4byte	@.LASF239
	.byte	0x1
	.uleb128 0x6
	.4byte	@.LASF240
	.byte	0x1
	.uleb128 0x11
	.4byte	@.LASF247
	.2byte	0x1e8
	.byte	0x1
	.byte	0x16
	.4byte	0x71d
	.uleb128 0x12
	.4byte	@.LASF238
	.byte	0x1
	.byte	0x17
	.4byte	0x681
	.byte	0x2
	.byte	0x23
	.uleb128 0x0
	.uleb128 0x12
	.4byte	@.LASF241
	.byte	0x1
	.byte	0x18
	.4byte	0x4c9
	.byte	0x2
	.byte	0x23
	.uleb128 0x4
	.uleb128 0x13
	.string	"usb"
	.byte	0x1
	.byte	0x19
	.4byte	0x4c9
	.byte	0x3
	.byte	0x23
	.uleb128 0x90
	.uleb128 0x12
	.4byte	@.LASF242
	.byte	0x1
	.byte	0x1a
	.4byte	0x4c9
	.byte	0x3
	.byte	0x23
	.uleb128 0x11c
	.uleb128 0x12
	.4byte	@.LASF243
	.byte	0x1
	.byte	0x1b
	.4byte	0x71d
	.byte	0x3
	.byte	0x23
	.uleb128 0x1a8
	.uleb128 0x12
	.4byte	@.LASF244
	.byte	0x1
	.byte	0x1c
	.4byte	0x71d
	.byte	0x3
	.byte	0x23
	.uleb128 0x1bc
	.uleb128 0x12
	.4byte	@.LASF245
	.byte	0x1
	.byte	0x1d
	.4byte	0x71d
	.byte	0x3
	.byte	0x23
	.uleb128 0x1d0
	.uleb128 0x12
	.4byte	@.LASF246
	.byte	0x1
	.byte	0x1e
	.4byte	0x8c
	.byte	0x3
	.byte	0x23
	.uleb128 0x1e4
	.byte	0x0
	.uleb128 0x14
	.4byte	0x85
	.4byte	0x72d
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x13
	.byte	0x0
	.uleb128 0x16
	.4byte	@.LASF248
	.byte	0x8
	.byte	0x1
	.byte	0x81
	.4byte	0x756
	.uleb128 0x13
	.string	"val"
	.byte	0x1
	.byte	0x82
	.4byte	0x45
	.byte	0x2
	.byte	0x23
	.uleb128 0x0
	.uleb128 0x12
	.4byte	@.LASF249
	.byte	0x1
	.byte	0x83
	.4byte	0x45
	.byte	0x2
	.byte	0x23
	.uleb128 0x4
	.byte	0x0
	.uleb128 0x17
	.4byte	@.LASF250
	.byte	0x2
	.byte	0xc9
	.byte	0x1
	.4byte	0xc0
	.byte	0x3
	.4byte	0x773
	.uleb128 0x18
	.4byte	@.LASF252
	.byte	0x2
	.byte	0xc9
	.4byte	0x773
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x779
	.uleb128 0x19
	.4byte	@.LASF85
	.4byte	0x28a
	.uleb128 0x1a
	.4byte	@.LASF251
	.byte	0x3
	.2byte	0x1a7
	.byte	0x1
	.4byte	0x45
	.byte	0x3
	.4byte	0x7ad
	.uleb128 0x1b
	.4byte	@.LASF238
	.byte	0x3
	.2byte	0x1a7
	.4byte	0x681
	.uleb128 0x1c
	.string	"irq"
	.byte	0x3
	.2byte	0x1a7
	.4byte	0x45
	.byte	0x0
	.uleb128 0x1a
	.4byte	@.LASF253
	.byte	0x10
	.2byte	0x1a7
	.byte	0x1
	.4byte	0x45
	.byte	0x3
	.4byte	0x7d4
	.uleb128 0x1c
	.string	"x"
	.byte	0x10
	.2byte	0x1a7
	.4byte	0x45
	.uleb128 0x1d
	.string	"r"
	.byte	0x10
	.2byte	0x1a9
	.4byte	0x45
	.byte	0x0
	.uleb128 0x1e
	.string	"clz"
	.byte	0x10
	.2byte	0x198
	.byte	0x1
	.4byte	0x45
	.byte	0x3
	.4byte	0x7fd
	.uleb128 0x1c
	.string	"x"
	.byte	0x10
	.2byte	0x198
	.4byte	0x4c
	.uleb128 0x1d
	.string	"res"
	.byte	0x10
	.2byte	0x19a
	.4byte	0x4c
	.byte	0x0
	.uleb128 0x1e
	.string	"fls"
	.byte	0x10
	.2byte	0x1c9
	.byte	0x1
	.4byte	0x45
	.byte	0x3
	.4byte	0x81a
	.uleb128 0x1c
	.string	"x"
	.byte	0x10
	.2byte	0x1c9
	.4byte	0x73
	.byte	0x0
	.uleb128 0x1f
	.4byte	@.LASF269
	.byte	0x11
	.byte	0x40
	.byte	0x1
	.byte	0x3
	.4byte	0x854
	.uleb128 0x20
	.string	"ptr"
	.byte	0x11
	.byte	0x40
	.4byte	0x625
	.uleb128 0x18
	.4byte	@.LASF254
	.byte	0x11
	.byte	0x40
	.4byte	0x9e
	.uleb128 0x18
	.4byte	@.LASF255
	.byte	0x11
	.byte	0x40
	.4byte	0x45
	.uleb128 0x20
	.string	"gfp"
	.byte	0x11
	.byte	0x41
	.4byte	0xa9
	.byte	0x0
	.uleb128 0x1a
	.4byte	@.LASF256
	.byte	0x4
	.2byte	0x163
	.byte	0x1
	.4byte	0xc0
	.byte	0x3
	.4byte	0x897
	.uleb128 0x1b
	.4byte	@.LASF254
	.byte	0x4
	.2byte	0x163
	.4byte	0x9e
	.uleb128 0x1b
	.4byte	@.LASF257
	.byte	0x4
	.2byte	0x163
	.4byte	0xa9
	.uleb128 0x1b
	.4byte	@.LASF258
	.byte	0x4
	.2byte	0x163
	.4byte	0x4c
	.uleb128 0x1d
	.string	"ret"
	.byte	0x4
	.2byte	0x165
	.4byte	0xc0
	.byte	0x0
	.uleb128 0x17
	.4byte	@.LASF259
	.byte	0x12
	.byte	0x20
	.byte	0x1
	.4byte	0x45
	.byte	0x3
	.4byte	0x8b2
	.uleb128 0x20
	.string	"n"
	.byte	0x12
	.byte	0x20
	.4byte	0x61
	.byte	0x0
	.uleb128 0x17
	.4byte	@.LASF260
	.byte	0x13
	.byte	0xd
	.byte	0x1
	.4byte	0x45
	.byte	0x3
	.4byte	0x8da
	.uleb128 0x18
	.4byte	@.LASF254
	.byte	0x13
	.byte	0xd
	.4byte	0x73
	.uleb128 0x21
	.4byte	@.LASF258
	.byte	0x13
	.byte	0xf
	.4byte	0x45
	.byte	0x0
	.uleb128 0x1a
	.4byte	@.LASF261
	.byte	0x4
	.2byte	0x171
	.byte	0x1
	.4byte	0xc0
	.byte	0x3
	.4byte	0x911
	.uleb128 0x1b
	.4byte	@.LASF254
	.byte	0x4
	.2byte	0x171
	.4byte	0x9e
	.uleb128 0x1b
	.4byte	@.LASF257
	.byte	0x4
	.2byte	0x171
	.4byte	0xa9
	.uleb128 0x1b
	.4byte	@.LASF258
	.byte	0x4
	.2byte	0x171
	.4byte	0x4c
	.byte	0x0
	.uleb128 0x1a
	.4byte	@.LASF262
	.byte	0x4
	.2byte	0x177
	.byte	0x1
	.4byte	0xc0
	.byte	0x3
	.4byte	0x948
	.uleb128 0x1b
	.4byte	@.LASF254
	.byte	0x4
	.2byte	0x177
	.4byte	0x9e
	.uleb128 0x1b
	.4byte	@.LASF257
	.byte	0x4
	.2byte	0x177
	.4byte	0xa9
	.uleb128 0x22
	.4byte	@.LASF258
	.byte	0x4
	.2byte	0x179
	.4byte	0x4c
	.byte	0x0
	.uleb128 0x17
	.4byte	@.LASF263
	.byte	0x4
	.byte	0xfc
	.byte	0x1
	.4byte	0x45
	.byte	0x3
	.4byte	0x973
	.uleb128 0x18
	.4byte	@.LASF254
	.byte	0x4
	.byte	0xfc
	.4byte	0x9e
	.uleb128 0x23
	.4byte	@.LASF264
	.4byte	0x983
	.byte	0x1
	.4byte	@.LASF263
	.byte	0x0
	.uleb128 0x14
	.4byte	0x85
	.4byte	0x983
	.uleb128 0x15
	.4byte	0x27b
	.byte	0xd
	.byte	0x0
	.uleb128 0x24
	.4byte	0x973
	.uleb128 0x1a
	.4byte	@.LASF265
	.byte	0x4
	.2byte	0x14b
	.byte	0x1
	.4byte	0xc0
	.byte	0x3
	.4byte	0x9bd
	.uleb128 0x1c
	.string	"s"
	.byte	0x4
	.2byte	0x14b
	.4byte	0x9bd
	.uleb128 0x1b
	.4byte	@.LASF257
	.byte	0x4
	.2byte	0x14c
	.4byte	0xa9
	.uleb128 0x1b
	.4byte	@.LASF254
	.byte	0x4
	.2byte	0x14c
	.4byte	0x9e
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x57e
	.uleb128 0x1a
	.4byte	@.LASF266
	.byte	0x4
	.2byte	0x185
	.byte	0x1
	.4byte	0xc0
	.byte	0x3
	.4byte	0x9fc
	.uleb128 0x1b
	.4byte	@.LASF254
	.byte	0x4
	.2byte	0x185
	.4byte	0x9e
	.uleb128 0x1b
	.4byte	@.LASF257
	.byte	0x4
	.2byte	0x185
	.4byte	0xa9
	.uleb128 0x25
	.uleb128 0x22
	.4byte	@.LASF267
	.byte	0x4
	.2byte	0x18c
	.4byte	0x45
	.byte	0x0
	.byte	0x0
	.uleb128 0x1a
	.4byte	@.LASF268
	.byte	0x4
	.2byte	0x27c
	.byte	0x1
	.4byte	0xc0
	.byte	0x3
	.4byte	0xa27
	.uleb128 0x1b
	.4byte	@.LASF254
	.byte	0x4
	.2byte	0x27c
	.4byte	0x9e
	.uleb128 0x1b
	.4byte	@.LASF257
	.byte	0x4
	.2byte	0x27c
	.4byte	0xa9
	.byte	0x0
	.uleb128 0x1f
	.4byte	@.LASF270
	.byte	0x2
	.byte	0xce
	.byte	0x1
	.byte	0x3
	.4byte	0xa4b
	.uleb128 0x18
	.4byte	@.LASF252
	.byte	0x2
	.byte	0xce
	.4byte	0xa4b
	.uleb128 0x18
	.4byte	@.LASF271
	.byte	0x2
	.byte	0xcf
	.4byte	0xc0
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x28a
	.uleb128 0x1a
	.4byte	@.LASF272
	.byte	0x1
	.2byte	0x126
	.byte	0x1
	.4byte	0x45
	.byte	0x1
	.4byte	0xa88
	.uleb128 0x1b
	.4byte	@.LASF238
	.byte	0x1
	.2byte	0x126
	.4byte	0x681
	.uleb128 0x1b
	.4byte	@.LASF273
	.byte	0x1
	.2byte	0x126
	.4byte	0xa88
	.uleb128 0x1d
	.string	"ret"
	.byte	0x1
	.2byte	0x128
	.4byte	0x45
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x45
	.uleb128 0x17
	.4byte	@.LASF274
	.byte	0x1
	.byte	0x21
	.byte	0x1
	.4byte	0x45
	.byte	0x1
	.4byte	0xacc
	.uleb128 0x18
	.4byte	@.LASF238
	.byte	0x1
	.byte	0x21
	.4byte	0x681
	.uleb128 0x18
	.4byte	@.LASF275
	.byte	0x1
	.byte	0x21
	.4byte	0x45
	.uleb128 0x20
	.string	"val"
	.byte	0x1
	.byte	0x22
	.4byte	0xacc
	.uleb128 0x26
	.string	"ret"
	.byte	0x1
	.byte	0x24
	.4byte	0x45
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x4c3
	.uleb128 0x17
	.4byte	@.LASF276
	.byte	0x1
	.byte	0x32
	.byte	0x1
	.4byte	0x45
	.byte	0x1
	.4byte	0xb10
	.uleb128 0x18
	.4byte	@.LASF238
	.byte	0x1
	.byte	0x32
	.4byte	0x681
	.uleb128 0x20
	.string	"src"
	.byte	0x1
	.byte	0x33
	.4byte	0x62c
	.uleb128 0x20
	.string	"val"
	.byte	0x1
	.byte	0x34
	.4byte	0xacc
	.uleb128 0x26
	.string	"ret"
	.byte	0x1
	.byte	0x36
	.4byte	0x45
	.byte	0x0
	.uleb128 0x1a
	.4byte	@.LASF277
	.byte	0x1
	.2byte	0x161
	.byte	0x1
	.4byte	0x45
	.byte	0x1
	.4byte	0xb47
	.uleb128 0x1b
	.4byte	@.LASF238
	.byte	0x1
	.2byte	0x161
	.4byte	0x681
	.uleb128 0x1b
	.4byte	@.LASF278
	.byte	0x1
	.2byte	0x161
	.4byte	0xa88
	.uleb128 0x1d
	.string	"ret"
	.byte	0x1
	.2byte	0x163
	.4byte	0x45
	.byte	0x0
	.uleb128 0x1a
	.4byte	@.LASF279
	.byte	0x1
	.2byte	0x148
	.byte	0x1
	.4byte	0x45
	.byte	0x1
	.4byte	0xb7e
	.uleb128 0x1b
	.4byte	@.LASF238
	.byte	0x1
	.2byte	0x148
	.4byte	0x681
	.uleb128 0x1b
	.4byte	@.LASF280
	.byte	0x1
	.2byte	0x148
	.4byte	0xa88
	.uleb128 0x1d
	.string	"ret"
	.byte	0x1
	.2byte	0x14a
	.4byte	0x45
	.byte	0x0
	.uleb128 0x27
	.4byte	@.LASF346
	.byte	0x1
	.2byte	0x297
	.byte	0x1
	.4byte	@.LFB869
	.4byte	@.LFE869
	.byte	0x1
	.byte	0x6c
	.uleb128 0x28
	.4byte	@.LASF290
	.byte	0x1
	.2byte	0x274
	.byte	0x1
	.4byte	0x45
	.4byte	@.LFB866
	.4byte	@.LFE866
	.4byte	@.LLST1
	.4byte	0xc62
	.uleb128 0x29
	.4byte	@.LASF252
	.byte	0x1
	.2byte	0x274
	.4byte	0xa4b
	.byte	0x1
	.byte	0x5e
	.uleb128 0x2a
	.4byte	@.LASF247
	.byte	0x1
	.2byte	0x276
	.4byte	0xc62
	.byte	0x1
	.byte	0x5d
	.uleb128 0x2a
	.4byte	@.LASF238
	.byte	0x1
	.2byte	0x277
	.4byte	0x681
	.byte	0x1
	.byte	0x5f
	.uleb128 0x1d
	.string	"irq"
	.byte	0x1
	.2byte	0x278
	.4byte	0x45
	.uleb128 0x1d
	.string	"i"
	.byte	0x1
	.2byte	0x278
	.4byte	0x45
	.uleb128 0x2b
	.4byte	0x756
	.4byte	@.LBB165
	.4byte	@.Ldebug_ranges0+0x0
	.byte	0x1
	.2byte	0x276
	.4byte	0xc08
	.uleb128 0x2c
	.4byte	0x767
	.byte	0x0
	.uleb128 0x2d
	.4byte	0x782
	.4byte	@.LBB169
	.4byte	@.LBE169
	.byte	0x1
	.2byte	0x27b
	.4byte	0xc27
	.uleb128 0x2c
	.4byte	0x7a0
	.uleb128 0x2c
	.4byte	0x794
	.byte	0x0
	.uleb128 0x2d
	.4byte	0x782
	.4byte	@.LBB171
	.4byte	@.LBE171
	.byte	0x1
	.2byte	0x281
	.4byte	0xc46
	.uleb128 0x2c
	.4byte	0x7a0
	.uleb128 0x2c
	.4byte	0x794
	.byte	0x0
	.uleb128 0x2e
	.4byte	0x782
	.4byte	@.LBB173
	.4byte	@.LBE173
	.byte	0x1
	.2byte	0x284
	.uleb128 0x2c
	.4byte	0x7a0
	.uleb128 0x2c
	.4byte	0x794
	.byte	0x0
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x699
	.uleb128 0x2f
	.4byte	@.LASF285
	.byte	0x1
	.byte	0xc5
	.byte	0x1
	.4byte	@.LFB856
	.4byte	@.LFE856
	.4byte	@.LLST2
	.4byte	0xd0e
	.uleb128 0x30
	.4byte	@.LASF238
	.byte	0x1
	.byte	0xc5
	.4byte	0x681
	.byte	0x1
	.byte	0x50
	.uleb128 0x31
	.string	"map"
	.byte	0x1
	.byte	0xc6
	.4byte	0xd0e
	.byte	0x1
	.byte	0x51
	.uleb128 0x30
	.4byte	@.LASF281
	.byte	0x1
	.byte	0xc6
	.4byte	0x45
	.byte	0x1
	.byte	0x52
	.uleb128 0x31
	.string	"val"
	.byte	0x1
	.byte	0xc6
	.4byte	0x45
	.byte	0x1
	.byte	0x5c
	.uleb128 0x31
	.string	"reg"
	.byte	0x1
	.byte	0xc7
	.4byte	0xa88
	.byte	0x1
	.byte	0x54
	.uleb128 0x30
	.4byte	@.LASF282
	.byte	0x1
	.byte	0xc7
	.4byte	0xd14
	.byte	0x1
	.byte	0x53
	.uleb128 0x30
	.4byte	@.LASF283
	.byte	0x1
	.byte	0xc8
	.4byte	0xd14
	.byte	0x1
	.byte	0x56
	.uleb128 0x32
	.string	"i"
	.byte	0x1
	.byte	0xca
	.4byte	0x45
	.byte	0x1
	.byte	0x55
	.uleb128 0x33
	.4byte	@.LASF264
	.4byte	0xd2f
	.byte	0x1
	.byte	0x5
	.byte	0x3
	.4byte	@__func__.16138
	.uleb128 0x34
	.4byte	@.Ldebug_ranges0+0x18
	.uleb128 0x35
	.4byte	@.LASF284
	.byte	0x1
	.byte	0xd4
	.4byte	0xb4
	.byte	0x5
	.byte	0x3
	.4byte	@descriptor.16137
	.byte	0x0
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x72d
	.uleb128 0xf
	.byte	0x4
	.4byte	0xd1a
	.uleb128 0x24
	.4byte	0x85
	.uleb128 0x14
	.4byte	0x85
	.4byte	0xd2f
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x1a
	.byte	0x0
	.uleb128 0x24
	.4byte	0xd1f
	.uleb128 0x2f
	.4byte	@.LASF286
	.byte	0x1
	.byte	0xd8
	.byte	0x1
	.4byte	@.LFB857
	.4byte	@.LFE857
	.4byte	@.LLST3
	.4byte	0xd9b
	.uleb128 0x30
	.4byte	@.LASF238
	.byte	0x1
	.byte	0xd8
	.4byte	0x681
	.byte	0x1
	.byte	0x5d
	.uleb128 0x35
	.4byte	@.LASF240
	.byte	0x1
	.byte	0xda
	.4byte	0xd9b
	.byte	0x1
	.byte	0x52
	.uleb128 0x21
	.4byte	@.LASF287
	.byte	0x1
	.byte	0xdb
	.4byte	0xda1
	.uleb128 0x32
	.string	"ret"
	.byte	0x1
	.byte	0xdc
	.4byte	0x45
	.byte	0x1
	.byte	0x52
	.uleb128 0x35
	.4byte	@.LASF288
	.byte	0x1
	.byte	0xdc
	.4byte	0x45
	.byte	0x2
	.byte	0x91
	.sleb128 -24
	.uleb128 0x35
	.4byte	@.LASF289
	.byte	0x1
	.byte	0xdc
	.4byte	0x45
	.byte	0x2
	.byte	0x91
	.sleb128 -28
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x693
	.uleb128 0xf
	.byte	0x4
	.4byte	0x68d
	.uleb128 0x28
	.4byte	@.LASF291
	.byte	0x1
	.2byte	0x1ec
	.byte	0x1
	.4byte	0x45
	.4byte	@.LFB865
	.4byte	@.LFE865
	.4byte	@.LLST4
	.4byte	0xfb4
	.uleb128 0x29
	.4byte	@.LASF252
	.byte	0x1
	.2byte	0x1ec
	.4byte	0xa4b
	.byte	0x1
	.byte	0x5f
	.uleb128 0x2a
	.4byte	@.LASF238
	.byte	0x1
	.2byte	0x1ee
	.4byte	0x681
	.byte	0x1
	.byte	0x5e
	.uleb128 0x22
	.4byte	@.LASF240
	.byte	0x1
	.2byte	0x1ef
	.4byte	0xd9b
	.uleb128 0x2a
	.4byte	@.LASF292
	.byte	0x1
	.2byte	0x1f0
	.4byte	0xc62
	.byte	0x1
	.byte	0x5d
	.uleb128 0x36
	.string	"usb"
	.byte	0x1
	.2byte	0x1f1
	.4byte	0xfb4
	.byte	0x1
	.byte	0x64
	.uleb128 0x2a
	.4byte	@.LASF242
	.byte	0x1
	.2byte	0x1f2
	.4byte	0xfb4
	.byte	0x1
	.byte	0x65
	.uleb128 0x2a
	.4byte	@.LASF241
	.byte	0x1
	.2byte	0x1f3
	.4byte	0xfb4
	.byte	0x1
	.byte	0x63
	.uleb128 0x36
	.string	"ret"
	.byte	0x1
	.2byte	0x1f4
	.4byte	0x45
	.byte	0x2
	.byte	0x8c
	.sleb128 4
	.uleb128 0x1d
	.string	"irq"
	.byte	0x1
	.2byte	0x1f4
	.4byte	0x45
	.uleb128 0x36
	.string	"i"
	.byte	0x1
	.2byte	0x1f4
	.4byte	0x45
	.byte	0x1
	.byte	0x60
	.uleb128 0x37
	.4byte	@.LASF293
	.byte	0x1
	.2byte	0x26f
	.4byte	@.L34
	.uleb128 0x37
	.4byte	@.LASF294
	.byte	0x1
	.2byte	0x26d
	.4byte	@.L35
	.uleb128 0x37
	.4byte	@.LASF295
	.byte	0x1
	.2byte	0x26b
	.4byte	@.L37
	.uleb128 0x37
	.4byte	@.LASF296
	.byte	0x1
	.2byte	0x268
	.4byte	@.L39
	.uleb128 0x37
	.4byte	@.LASF297
	.byte	0x1
	.2byte	0x265
	.4byte	@.L42
	.uleb128 0x38
	.4byte	@.LASF347
	.byte	0x1
	.2byte	0x25e
	.uleb128 0x2b
	.4byte	0x9fc
	.4byte	@.LBB178
	.4byte	@.Ldebug_ranges0+0x38
	.byte	0x1
	.2byte	0x1f6
	.4byte	0xef4
	.uleb128 0x2c
	.4byte	0xa1a
	.uleb128 0x2c
	.4byte	0xa0e
	.uleb128 0x39
	.4byte	0x9c3
	.4byte	@.LBB179
	.4byte	@.Ldebug_ranges0+0x50
	.byte	0x4
	.2byte	0x27e
	.uleb128 0x2c
	.4byte	0x9e1
	.uleb128 0x2c
	.4byte	0x9d5
	.uleb128 0x34
	.4byte	@.Ldebug_ranges0+0x68
	.uleb128 0x3a
	.4byte	0x9ee
	.uleb128 0x39
	.4byte	0x988
	.4byte	@.LBB181
	.4byte	@.Ldebug_ranges0+0x80
	.byte	0x4
	.2byte	0x191
	.uleb128 0x2c
	.4byte	0x99a
	.uleb128 0x2c
	.4byte	0x9b0
	.uleb128 0x2c
	.4byte	0x9a4
	.byte	0x0
	.byte	0x0
	.byte	0x0
	.byte	0x0
	.uleb128 0x2b
	.4byte	0xa27
	.4byte	@.LBB188
	.4byte	@.Ldebug_ranges0+0x98
	.byte	0x1
	.2byte	0x1fb
	.4byte	0xf13
	.uleb128 0x2c
	.4byte	0xa3f
	.uleb128 0x2c
	.4byte	0xa34
	.byte	0x0
	.uleb128 0x3b
	.4byte	@.LBB192
	.4byte	@.LBE192
	.uleb128 0x2b
	.4byte	0x782
	.4byte	@.LBB193
	.4byte	@.Ldebug_ranges0+0xb0
	.byte	0x1
	.2byte	0x238
	.4byte	0xf3b
	.uleb128 0x2c
	.4byte	0x7a0
	.uleb128 0x2c
	.4byte	0x794
	.byte	0x0
	.uleb128 0x2d
	.4byte	0x782
	.4byte	@.LBB197
	.4byte	@.LBE197
	.byte	0x1
	.2byte	0x242
	.4byte	0xf5a
	.uleb128 0x2c
	.4byte	0x7a0
	.uleb128 0x2c
	.4byte	0x794
	.byte	0x0
	.uleb128 0x2b
	.4byte	0x782
	.4byte	@.LBB199
	.4byte	@.Ldebug_ranges0+0xc8
	.byte	0x1
	.2byte	0x24d
	.4byte	0xf79
	.uleb128 0x2c
	.4byte	0x7a0
	.uleb128 0x2c
	.4byte	0x794
	.byte	0x0
	.uleb128 0x2d
	.4byte	0x782
	.4byte	@.LBB203
	.4byte	@.LBE203
	.byte	0x1
	.2byte	0x263
	.4byte	0xf98
	.uleb128 0x2c
	.4byte	0x7a0
	.uleb128 0x2c
	.4byte	0x794
	.byte	0x0
	.uleb128 0x2e
	.4byte	0x782
	.4byte	@.LBB205
	.4byte	@.LBE205
	.byte	0x1
	.2byte	0x266
	.uleb128 0x2c
	.4byte	0x7a0
	.uleb128 0x2c
	.4byte	0x794
	.byte	0x0
	.byte	0x0
	.uleb128 0xf
	.byte	0x4
	.4byte	0x4c9
	.uleb128 0x28
	.4byte	@.LASF298
	.byte	0x1
	.2byte	0x1bc
	.byte	0x1
	.4byte	0x5a3
	.4byte	@.LFB862
	.4byte	@.LFE862
	.4byte	@.LLST5
	.4byte	0x1038
	.uleb128 0x3c
	.string	"irq"
	.byte	0x1
	.2byte	0x1bc
	.4byte	0x45
	.byte	0x1
	.byte	0x50
	.uleb128 0x29
	.4byte	@.LASF271
	.byte	0x1
	.2byte	0x1bc
	.4byte	0xc0
	.byte	0x1
	.byte	0x51
	.uleb128 0x2a
	.4byte	@.LASF247
	.byte	0x1
	.2byte	0x1be
	.4byte	0xc62
	.byte	0x1
	.byte	0x5d
	.uleb128 0x2a
	.4byte	@.LASF238
	.byte	0x1
	.2byte	0x1bf
	.4byte	0x681
	.byte	0x1
	.byte	0x53
	.uleb128 0x33
	.4byte	@.LASF264
	.4byte	0x1048
	.byte	0x1
	.byte	0x5
	.byte	0x3
	.4byte	@__func__.16308
	.uleb128 0x34
	.4byte	@.Ldebug_ranges0+0xe0
	.uleb128 0x2a
	.4byte	@.LASF284
	.byte	0x1
	.2byte	0x1c1
	.4byte	0xb4
	.byte	0x5
	.byte	0x3
	.4byte	@descriptor.16307
	.byte	0x0
	.byte	0x0
	.uleb128 0x14
	.4byte	0x85
	.4byte	0x1048
	.uleb128 0x15
	.4byte	0x27b
	.byte	0xe
	.byte	0x0
	.uleb128 0x24
	.4byte	0x1038
	.uleb128 0x28
	.4byte	@.LASF299
	.byte	0x1
	.2byte	0x1dc
	.byte	0x1
	.4byte	0x5a3
	.4byte	@.LFB864
	.4byte	@.LFE864
	.4byte	@.LLST6
	.4byte	0x10cb
	.uleb128 0x3c
	.string	"irq"
	.byte	0x1
	.2byte	0x1dc
	.4byte	0x45
	.byte	0x1
	.byte	0x50
	.uleb128 0x29
	.4byte	@.LASF271
	.byte	0x1
	.2byte	0x1dc
	.4byte	0xc0
	.byte	0x1
	.byte	0x51
	.uleb128 0x2a
	.4byte	@.LASF247
	.byte	0x1
	.2byte	0x1de
	.4byte	0xc62
	.byte	0x1
	.byte	0x5d
	.uleb128 0x2a
	.4byte	@.LASF238
	.byte	0x1
	.2byte	0x1df
	.4byte	0x681
	.byte	0x1
	.byte	0x53
	.uleb128 0x33
	.4byte	@.LASF264
	.4byte	0x10db
	.byte	0x1
	.byte	0x5
	.byte	0x3
	.4byte	@__func__.16336
	.uleb128 0x34
	.4byte	@.Ldebug_ranges0+0xf8
	.uleb128 0x2a
	.4byte	@.LASF284
	.byte	0x1
	.2byte	0x1e1
	.4byte	0xb4
	.byte	0x5
	.byte	0x3
	.4byte	@descriptor.16335
	.byte	0x0
	.byte	0x0
	.uleb128 0x14
	.4byte	0x85
	.4byte	0x10db
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x12
	.byte	0x0
	.uleb128 0x24
	.4byte	0x10cb
	.uleb128 0x28
	.4byte	@.LASF300
	.byte	0x1
	.2byte	0x1d0
	.byte	0x1
	.4byte	0x5a3
	.4byte	@.LFB863
	.4byte	@.LFE863
	.4byte	@.LLST7
	.4byte	0x1132
	.uleb128 0x3c
	.string	"irq"
	.byte	0x1
	.2byte	0x1d0
	.4byte	0x45
	.byte	0x1
	.byte	0x50
	.uleb128 0x29
	.4byte	@.LASF271
	.byte	0x1
	.2byte	0x1d0
	.4byte	0xc0
	.byte	0x1
	.byte	0x51
	.uleb128 0x22
	.4byte	@.LASF247
	.byte	0x1
	.2byte	0x1d2
	.4byte	0xc62
	.uleb128 0x22
	.4byte	@.LASF238
	.byte	0x1
	.2byte	0x1d3
	.4byte	0x681
	.byte	0x0
	.uleb128 0x28
	.4byte	@.LASF301
	.byte	0x1
	.2byte	0x188
	.byte	0x1
	.4byte	0x45
	.4byte	@.LFB861
	.4byte	@.LFE861
	.4byte	@.LLST8
	.4byte	0x128e
	.uleb128 0x3c
	.string	"psy"
	.byte	0x1
	.2byte	0x188
	.4byte	0xfb4
	.byte	0x1
	.byte	0x50
	.uleb128 0x3c
	.string	"psp"
	.byte	0x1
	.2byte	0x189
	.4byte	0x31d
	.byte	0x1
	.byte	0x5f
	.uleb128 0x3c
	.string	"val"
	.byte	0x1
	.2byte	0x18a
	.4byte	0xacc
	.byte	0x1
	.byte	0x5d
	.uleb128 0x22
	.4byte	@.LASF247
	.byte	0x1
	.2byte	0x18c
	.4byte	0xc62
	.uleb128 0x2a
	.4byte	@.LASF238
	.byte	0x1
	.2byte	0x18d
	.4byte	0x681
	.byte	0x1
	.byte	0x5e
	.uleb128 0x36
	.string	"ret"
	.byte	0x1
	.2byte	0x18e
	.4byte	0x45
	.byte	0x1
	.byte	0x50
	.uleb128 0x2d
	.4byte	0xa51
	.4byte	@.LBB211
	.4byte	@.LBE211
	.byte	0x1
	.2byte	0x192
	.4byte	0x11cf
	.uleb128 0x2c
	.4byte	0xa6f
	.uleb128 0x2c
	.4byte	0xa63
	.uleb128 0x3d
	.4byte	@.LBB212
	.4byte	@.LBE212
	.uleb128 0x3a
	.4byte	0xa7b
	.byte	0x0
	.byte	0x0
	.uleb128 0x2d
	.4byte	0xa8e
	.4byte	@.LBB213
	.4byte	@.LBE213
	.byte	0x1
	.2byte	0x195
	.4byte	0x1202
	.uleb128 0x2c
	.4byte	0xab5
	.uleb128 0x2c
	.4byte	0xaaa
	.uleb128 0x2c
	.4byte	0xa9f
	.uleb128 0x3d
	.4byte	@.LBB214
	.4byte	@.LBE214
	.uleb128 0x3a
	.4byte	0xac0
	.byte	0x0
	.byte	0x0
	.uleb128 0x2d
	.4byte	0xad2
	.4byte	@.LBB215
	.4byte	@.LBE215
	.byte	0x1
	.2byte	0x199
	.4byte	0x1235
	.uleb128 0x2c
	.4byte	0xaf9
	.uleb128 0x2c
	.4byte	0xaee
	.uleb128 0x2c
	.4byte	0xae3
	.uleb128 0x3d
	.4byte	@.LBB216
	.4byte	@.LBE216
	.uleb128 0x3a
	.4byte	0xb04
	.byte	0x0
	.byte	0x0
	.uleb128 0x2d
	.4byte	0xb10
	.4byte	@.LBB217
	.4byte	@.LBE217
	.byte	0x1
	.2byte	0x19c
	.4byte	0x1263
	.uleb128 0x2c
	.4byte	0xb2e
	.uleb128 0x2c
	.4byte	0xb22
	.uleb128 0x3d
	.4byte	@.LBB218
	.4byte	@.LBE218
	.uleb128 0x3a
	.4byte	0xb3a
	.byte	0x0
	.byte	0x0
	.uleb128 0x2e
	.4byte	0xb47
	.4byte	@.LBB219
	.4byte	@.LBE219
	.byte	0x1
	.2byte	0x19f
	.uleb128 0x2c
	.4byte	0xb65
	.uleb128 0x2c
	.4byte	0xb59
	.uleb128 0x3d
	.4byte	@.LBB220
	.4byte	@.LBE220
	.uleb128 0x3a
	.4byte	0xb71
	.byte	0x0
	.byte	0x0
	.byte	0x0
	.uleb128 0x3e
	.4byte	@.LASF302
	.byte	0x1
	.byte	0x61
	.byte	0x1
	.4byte	0x45
	.4byte	@.LFB855
	.4byte	@.LFE855
	.4byte	@.LLST9
	.4byte	0x1357
	.uleb128 0x31
	.string	"psy"
	.byte	0x1
	.byte	0x61
	.4byte	0xfb4
	.byte	0x1
	.byte	0x50
	.uleb128 0x31
	.string	"psp"
	.byte	0x1
	.byte	0x62
	.4byte	0x31d
	.byte	0x1
	.byte	0x5e
	.uleb128 0x31
	.string	"val"
	.byte	0x1
	.byte	0x63
	.4byte	0xacc
	.byte	0x1
	.byte	0x5d
	.uleb128 0x21
	.4byte	@.LASF247
	.byte	0x1
	.byte	0x65
	.4byte	0xc62
	.uleb128 0x35
	.4byte	@.LASF238
	.byte	0x1
	.byte	0x66
	.4byte	0x681
	.byte	0x1
	.byte	0x50
	.uleb128 0x32
	.string	"ret"
	.byte	0x1
	.byte	0x67
	.4byte	0x45
	.byte	0x1
	.byte	0x50
	.uleb128 0x3f
	.4byte	0xa8e
	.4byte	@.LBB221
	.4byte	@.LBE221
	.byte	0x1
	.byte	0x6b
	.4byte	0x1328
	.uleb128 0x2c
	.4byte	0xab5
	.uleb128 0x2c
	.4byte	0xaaa
	.uleb128 0x2c
	.4byte	0xa9f
	.uleb128 0x3d
	.4byte	@.LBB222
	.4byte	@.LBE222
	.uleb128 0x3a
	.4byte	0xac0
	.byte	0x0
	.byte	0x0
	.uleb128 0x40
	.4byte	0xad2
	.4byte	@.LBB223
	.4byte	@.LBE223
	.byte	0x1
	.byte	0x6e
	.uleb128 0x2c
	.4byte	0xaf9
	.uleb128 0x2c
	.4byte	0xaee
	.uleb128 0x2c
	.4byte	0xae3
	.uleb128 0x3d
	.4byte	@.LBB224
	.4byte	@.LBE224
	.uleb128 0x3a
	.4byte	0xb04
	.byte	0x0
	.byte	0x0
	.byte	0x0
	.uleb128 0x3e
	.4byte	@.LASF303
	.byte	0x1
	.byte	0x42
	.byte	0x1
	.4byte	0x45
	.4byte	@.LFB854
	.4byte	@.LFE854
	.4byte	@.LLST10
	.4byte	0x1420
	.uleb128 0x31
	.string	"psy"
	.byte	0x1
	.byte	0x42
	.4byte	0xfb4
	.byte	0x1
	.byte	0x50
	.uleb128 0x31
	.string	"psp"
	.byte	0x1
	.byte	0x43
	.4byte	0x31d
	.byte	0x1
	.byte	0x5e
	.uleb128 0x31
	.string	"val"
	.byte	0x1
	.byte	0x44
	.4byte	0xacc
	.byte	0x1
	.byte	0x5d
	.uleb128 0x21
	.4byte	@.LASF247
	.byte	0x1
	.byte	0x46
	.4byte	0xc62
	.uleb128 0x35
	.4byte	@.LASF238
	.byte	0x1
	.byte	0x47
	.4byte	0x681
	.byte	0x1
	.byte	0x50
	.uleb128 0x32
	.string	"ret"
	.byte	0x1
	.byte	0x48
	.4byte	0x45
	.byte	0x1
	.byte	0x50
	.uleb128 0x3f
	.4byte	0xa8e
	.4byte	@.LBB225
	.4byte	@.LBE225
	.byte	0x1
	.byte	0x4c
	.4byte	0x13f1
	.uleb128 0x2c
	.4byte	0xab5
	.uleb128 0x2c
	.4byte	0xaaa
	.uleb128 0x2c
	.4byte	0xa9f
	.uleb128 0x3d
	.4byte	@.LBB226
	.4byte	@.LBE226
	.uleb128 0x3a
	.4byte	0xac0
	.byte	0x0
	.byte	0x0
	.uleb128 0x40
	.4byte	0xad2
	.4byte	@.LBB227
	.4byte	@.LBE227
	.byte	0x1
	.byte	0x4f
	.uleb128 0x2c
	.4byte	0xaf9
	.uleb128 0x2c
	.4byte	0xaee
	.uleb128 0x2c
	.4byte	0xae3
	.uleb128 0x3d
	.4byte	@.LBB228
	.4byte	@.LBE228
	.uleb128 0x3a
	.4byte	0xb04
	.byte	0x0
	.byte	0x0
	.byte	0x0
	.uleb128 0x41
	.4byte	@.LASF348
	.byte	0x1
	.2byte	0x297
	.byte	0x1
	.4byte	0x45
	.4byte	@.LFB867
	.4byte	@.LFE867
	.byte	0x1
	.byte	0x6c
	.uleb128 0x6
	.4byte	@.LASF304
	.byte	0x1
	.uleb128 0x6
	.4byte	@.LASF305
	.byte	0x1
	.uleb128 0x14
	.4byte	0x31d
	.4byte	0x1453
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x1
	.byte	0x0
	.uleb128 0x35
	.4byte	@.LASF306
	.byte	0x1
	.byte	0x59
	.4byte	0x1443
	.byte	0x5
	.byte	0x3
	.4byte	@wm831x_wall_props
	.uleb128 0x35
	.4byte	@.LASF307
	.byte	0x1
	.byte	0x78
	.4byte	0x1443
	.byte	0x5
	.byte	0x3
	.4byte	@wm831x_usb_props
	.uleb128 0x14
	.4byte	0x72d
	.4byte	0x1485
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x3
	.byte	0x0
	.uleb128 0x35
	.4byte	@.LASF308
	.byte	0x1
	.byte	0x86
	.4byte	0x1475
	.byte	0x5
	.byte	0x3
	.4byte	@trickle_ilims
	.uleb128 0x35
	.4byte	@.LASF309
	.byte	0x1
	.byte	0x8d
	.4byte	0x1475
	.byte	0x5
	.byte	0x3
	.4byte	@vsels
	.uleb128 0x14
	.4byte	0x72d
	.4byte	0x14b7
	.uleb128 0x15
	.4byte	0x27b
	.byte	0xf
	.byte	0x0
	.uleb128 0x35
	.4byte	@.LASF310
	.byte	0x1
	.byte	0x94
	.4byte	0x14a7
	.byte	0x5
	.byte	0x3
	.4byte	@fast_ilims
	.uleb128 0x14
	.4byte	0x72d
	.4byte	0x14d8
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x7
	.byte	0x0
	.uleb128 0x35
	.4byte	@.LASF311
	.byte	0x1
	.byte	0xa7
	.4byte	0x14c8
	.byte	0x5
	.byte	0x3
	.4byte	@eoc_iterms
	.uleb128 0x35
	.4byte	@.LASF312
	.byte	0x1
	.byte	0xb2
	.4byte	0x14a7
	.byte	0x5
	.byte	0x3
	.4byte	@chg_times
	.uleb128 0x14
	.4byte	0x31d
	.4byte	0x150a
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x4
	.byte	0x0
	.uleb128 0x2a
	.4byte	@.LASF313
	.byte	0x1
	.2byte	0x1a9
	.4byte	0x14fa
	.byte	0x5
	.byte	0x3
	.4byte	@wm831x_bat_props
	.uleb128 0x14
	.4byte	0xd14
	.4byte	0x152c
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x7
	.byte	0x0
	.uleb128 0x2a
	.4byte	@.LASF314
	.byte	0x1
	.2byte	0x1b1
	.4byte	0x153e
	.byte	0x5
	.byte	0x3
	.4byte	@wm831x_bat_irqs
	.uleb128 0x24
	.4byte	0x151c
	.uleb128 0x2a
	.4byte	@.LASF315
	.byte	0x1
	.2byte	0x28f
	.4byte	0x290
	.byte	0x5
	.byte	0x3
	.4byte	@wm831x_power_driver
	.uleb128 0x14
	.4byte	0x85
	.4byte	0x1565
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x30
	.byte	0x0
	.uleb128 0x2a
	.4byte	@.LASF316
	.byte	0x1
	.2byte	0x299
	.4byte	0x1577
	.byte	0x5
	.byte	0x3
	.4byte	@__UNIQUE_ID_description0
	.uleb128 0x24
	.4byte	0x1555
	.uleb128 0x14
	.4byte	0x85
	.4byte	0x158c
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x37
	.byte	0x0
	.uleb128 0x2a
	.4byte	@.LASF317
	.byte	0x1
	.2byte	0x29a
	.4byte	0x159e
	.byte	0x5
	.byte	0x3
	.4byte	@__UNIQUE_ID_author1
	.uleb128 0x24
	.4byte	0x157c
	.uleb128 0x14
	.4byte	0x85
	.4byte	0x15b3
	.uleb128 0x15
	.4byte	0x27b
	.byte	0xb
	.byte	0x0
	.uleb128 0x2a
	.4byte	@.LASF318
	.byte	0x1
	.2byte	0x29b
	.4byte	0x15c5
	.byte	0x5
	.byte	0x3
	.4byte	@__UNIQUE_ID_license2
	.uleb128 0x24
	.4byte	0x15a3
	.uleb128 0x14
	.4byte	0x85
	.4byte	0x15da
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x1b
	.byte	0x0
	.uleb128 0x2a
	.4byte	@.LASF319
	.byte	0x1
	.2byte	0x29c
	.4byte	0x15ec
	.byte	0x5
	.byte	0x3
	.4byte	@__UNIQUE_ID_alias3
	.uleb128 0x24
	.4byte	0x15ca
	.uleb128 0x42
	.4byte	@.LASF320
	.byte	0x14
	.byte	0x15
	.4byte	0x15ff
	.byte	0x1
	.byte	0x1
	.byte	0x69
	.uleb128 0xf
	.byte	0x4
	.4byte	0x1437
	.uleb128 0x43
	.4byte	@.LASF321
	.byte	0x15
	.byte	0x21
	.4byte	0x27e
	.byte	0x1
	.byte	0x1
	.uleb128 0x14
	.4byte	0x45
	.4byte	0x161d
	.uleb128 0x44
	.byte	0x0
	.uleb128 0x43
	.4byte	@.LASF322
	.byte	0x16
	.byte	0x24
	.4byte	0x1612
	.byte	0x1
	.byte	0x1
	.uleb128 0x14
	.4byte	0x85
	.4byte	0x1635
	.uleb128 0x44
	.byte	0x0
	.uleb128 0x45
	.4byte	@.LASF323
	.byte	0x17
	.2byte	0x1af
	.4byte	0x1643
	.byte	0x1
	.byte	0x1
	.uleb128 0x24
	.4byte	0x162a
	.uleb128 0x43
	.4byte	@.LASF324
	.byte	0x18
	.byte	0x76
	.4byte	0x8c
	.byte	0x1
	.byte	0x1
	.uleb128 0x43
	.4byte	@.LASF325
	.byte	0x8
	.byte	0x4c
	.4byte	0x45
	.byte	0x1
	.byte	0x1
	.uleb128 0x43
	.4byte	@.LASF326
	.byte	0x19
	.byte	0xa
	.4byte	0x45
	.byte	0x1
	.byte	0x1
	.uleb128 0x43
	.4byte	@.LASF327
	.byte	0x1a
	.byte	0x1c
	.4byte	0x45
	.byte	0x1
	.byte	0x1
	.uleb128 0x14
	.4byte	0x73
	.4byte	0x1692
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x20
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x0
	.byte	0x0
	.uleb128 0x45
	.4byte	@.LASF328
	.byte	0x1a
	.2byte	0x2f9
	.4byte	0x16a0
	.byte	0x1
	.byte	0x1
	.uleb128 0x24
	.4byte	0x167c
	.uleb128 0x43
	.4byte	@.LASF329
	.byte	0x1b
	.byte	0xca
	.4byte	0x45
	.byte	0x1
	.byte	0x1
	.uleb128 0x45
	.4byte	@.LASF330
	.byte	0x1c
	.2byte	0x177
	.4byte	0x16c0
	.byte	0x1
	.byte	0x1
	.uleb128 0xf
	.byte	0x4
	.4byte	0x143d
	.uleb128 0x45
	.4byte	@.LASF331
	.byte	0x1c
	.2byte	0x17a
	.4byte	0x16c0
	.byte	0x1
	.byte	0x1
	.uleb128 0x45
	.4byte	@.LASF332
	.byte	0x8
	.2byte	0x38f
	.4byte	0x250
	.byte	0x1
	.byte	0x1
	.uleb128 0x14
	.4byte	0x73
	.4byte	0x16f2
	.uleb128 0x15
	.4byte	0x27b
	.byte	0x1
	.byte	0x0
	.uleb128 0x43
	.4byte	@.LASF333
	.byte	0x1d
	.byte	0x12
	.4byte	0x16e2
	.byte	0x1
	.byte	0x1
	.uleb128 0x43
	.4byte	@.LASF334
	.byte	0x1e
	.byte	0x8a
	.4byte	0x284
	.byte	0x1
	.byte	0x1
	.uleb128 0x14
	.4byte	0x9bd
	.4byte	0x171c
	.uleb128 0x15
	.4byte	0x27b
	.byte	0xe
	.byte	0x0
	.uleb128 0x43
	.4byte	@.LASF335
	.byte	0x4
	.byte	0xef
	.4byte	0x170c
	.byte	0x1
	.byte	0x1
	.uleb128 0x43
	.4byte	@.LASF336
	.byte	0x1f
	.byte	0x15
	.4byte	0x85
	.byte	0x1
	.byte	0x1
	.uleb128 0x43
	.4byte	@.LASF337
	.byte	0x1f
	.byte	0x15
	.4byte	0x1743
	.byte	0x1
	.byte	0x1
	.uleb128 0xf
	.byte	0x4
	.4byte	0xba
	.uleb128 0x45
	.4byte	@.LASF338
	.byte	0xd
	.2byte	0x14f
	.4byte	0x85
	.byte	0x1
	.byte	0x1
	.uleb128 0x45
	.4byte	@.LASF339
	.byte	0xe
	.2byte	0x187
	.4byte	0x85
	.byte	0x1
	.byte	0x1
	.uleb128 0x45
	.4byte	@.LASF340
	.byte	0xe
	.2byte	0x189
	.4byte	0x85
	.byte	0x1
	.byte	0x1
	.uleb128 0x45
	.4byte	@.LASF341
	.byte	0xe
	.2byte	0x189
	.4byte	0x15ff
	.byte	0x1
	.byte	0x1
	.byte	0x0
	.section	.debug_abbrev
	.uleb128 0x1
	.uleb128 0x11
	.byte	0x1
	.uleb128 0x25
	.uleb128 0xe
	.uleb128 0x13
	.uleb128 0xb
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x1b
	.uleb128 0xe
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x52
	.uleb128 0x1
	.uleb128 0x55
	.uleb128 0x6
	.uleb128 0x10
	.uleb128 0x6
	.byte	0x0
	.byte	0x0
	.uleb128 0x2
	.uleb128 0x24
	.byte	0x0
	.uleb128 0xb
	.uleb128 0xb
	.uleb128 0x3e
	.uleb128 0xb
	.uleb128 0x3
	.uleb128 0xe
	.byte	0x0
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x24
	.byte	0x0
	.uleb128 0xb
	.uleb128 0xb
	.uleb128 0x3e
	.uleb128 0xb
	.uleb128 0x3
	.uleb128 0x8
	.byte	0x0
	.byte	0x0
	.uleb128 0x4
	.uleb128 0x16
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x5
	.uleb128 0x16
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x6
	.uleb128 0x13
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3c
	.uleb128 0xc
	.byte	0x0
	.byte	0x0
	.uleb128 0x7
	.uleb128 0xf
	.byte	0x0
	.uleb128 0xb
	.uleb128 0xb
	.byte	0x0
	.byte	0x0
	.uleb128 0x8
	.uleb128 0x4
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0xb
	.uleb128 0xb
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x9
	.uleb128 0x28
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x1c
	.uleb128 0xd
	.byte	0x0
	.byte	0x0
	.uleb128 0xa
	.uleb128 0x4
	.byte	0x1
	.uleb128 0xb
	.uleb128 0xb
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0xb
	.uleb128 0x4
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0xb
	.uleb128 0xb
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0xc
	.uleb128 0x24
	.byte	0x0
	.uleb128 0xb
	.uleb128 0xb
	.uleb128 0x3e
	.uleb128 0xb
	.byte	0x0
	.byte	0x0
	.uleb128 0xd
	.uleb128 0x17
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3c
	.uleb128 0xc
	.byte	0x0
	.byte	0x0
	.uleb128 0xe
	.uleb128 0x4
	.byte	0x1
	.uleb128 0xb
	.uleb128 0xb
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0xf
	.uleb128 0xf
	.byte	0x0
	.uleb128 0xb
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x10
	.uleb128 0x26
	.byte	0x0
	.byte	0x0
	.byte	0x0
	.uleb128 0x11
	.uleb128 0x13
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0xb
	.uleb128 0x5
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x12
	.uleb128 0xd
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x38
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x13
	.uleb128 0xd
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x38
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x14
	.uleb128 0x1
	.byte	0x1
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x15
	.uleb128 0x21
	.byte	0x0
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x2f
	.uleb128 0xb
	.byte	0x0
	.byte	0x0
	.uleb128 0x16
	.uleb128 0x13
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0xb
	.uleb128 0xb
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x17
	.uleb128 0x2e
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x27
	.uleb128 0xc
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x20
	.uleb128 0xb
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x18
	.uleb128 0x5
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x19
	.uleb128 0x26
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x1a
	.uleb128 0x2e
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x27
	.uleb128 0xc
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x20
	.uleb128 0xb
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x1b
	.uleb128 0x5
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x1c
	.uleb128 0x5
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x1d
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x1e
	.uleb128 0x2e
	.byte	0x1
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x27
	.uleb128 0xc
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x20
	.uleb128 0xb
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x1f
	.uleb128 0x2e
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x27
	.uleb128 0xc
	.uleb128 0x20
	.uleb128 0xb
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x20
	.uleb128 0x5
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x21
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x22
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x23
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x34
	.uleb128 0xc
	.uleb128 0x1c
	.uleb128 0xe
	.byte	0x0
	.byte	0x0
	.uleb128 0x24
	.uleb128 0x26
	.byte	0x0
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x25
	.uleb128 0xb
	.byte	0x1
	.byte	0x0
	.byte	0x0
	.uleb128 0x26
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x27
	.uleb128 0x2e
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x27
	.uleb128 0xc
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.uleb128 0x40
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x28
	.uleb128 0x2e
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x27
	.uleb128 0xc
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.uleb128 0x40
	.uleb128 0x6
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x29
	.uleb128 0x5
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x2a
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x2b
	.uleb128 0x1d
	.byte	0x1
	.uleb128 0x31
	.uleb128 0x13
	.uleb128 0x52
	.uleb128 0x1
	.uleb128 0x55
	.uleb128 0x6
	.uleb128 0x58
	.uleb128 0xb
	.uleb128 0x59
	.uleb128 0x5
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x2c
	.uleb128 0x5
	.byte	0x0
	.uleb128 0x31
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x2d
	.uleb128 0x1d
	.byte	0x1
	.uleb128 0x31
	.uleb128 0x13
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.uleb128 0x58
	.uleb128 0xb
	.uleb128 0x59
	.uleb128 0x5
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x2e
	.uleb128 0x1d
	.byte	0x1
	.uleb128 0x31
	.uleb128 0x13
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.uleb128 0x58
	.uleb128 0xb
	.uleb128 0x59
	.uleb128 0x5
	.byte	0x0
	.byte	0x0
	.uleb128 0x2f
	.uleb128 0x2e
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x27
	.uleb128 0xc
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.uleb128 0x40
	.uleb128 0x6
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x30
	.uleb128 0x5
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x31
	.uleb128 0x5
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x32
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x33
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x34
	.uleb128 0xc
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x34
	.uleb128 0xb
	.byte	0x1
	.uleb128 0x55
	.uleb128 0x6
	.byte	0x0
	.byte	0x0
	.uleb128 0x35
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x36
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x37
	.uleb128 0xa
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x11
	.uleb128 0x1
	.byte	0x0
	.byte	0x0
	.uleb128 0x38
	.uleb128 0xa
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.byte	0x0
	.byte	0x0
	.uleb128 0x39
	.uleb128 0x1d
	.byte	0x1
	.uleb128 0x31
	.uleb128 0x13
	.uleb128 0x52
	.uleb128 0x1
	.uleb128 0x55
	.uleb128 0x6
	.uleb128 0x58
	.uleb128 0xb
	.uleb128 0x59
	.uleb128 0x5
	.byte	0x0
	.byte	0x0
	.uleb128 0x3a
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x31
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x3b
	.uleb128 0xb
	.byte	0x0
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.byte	0x0
	.byte	0x0
	.uleb128 0x3c
	.uleb128 0x5
	.byte	0x0
	.uleb128 0x3
	.uleb128 0x8
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x3d
	.uleb128 0xb
	.byte	0x1
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.byte	0x0
	.byte	0x0
	.uleb128 0x3e
	.uleb128 0x2e
	.byte	0x1
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x27
	.uleb128 0xc
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.uleb128 0x40
	.uleb128 0x6
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x3f
	.uleb128 0x1d
	.byte	0x1
	.uleb128 0x31
	.uleb128 0x13
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.uleb128 0x58
	.uleb128 0xb
	.uleb128 0x59
	.uleb128 0xb
	.uleb128 0x1
	.uleb128 0x13
	.byte	0x0
	.byte	0x0
	.uleb128 0x40
	.uleb128 0x1d
	.byte	0x1
	.uleb128 0x31
	.uleb128 0x13
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.uleb128 0x58
	.uleb128 0xb
	.uleb128 0x59
	.uleb128 0xb
	.byte	0x0
	.byte	0x0
	.uleb128 0x41
	.uleb128 0x2e
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x27
	.uleb128 0xc
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x11
	.uleb128 0x1
	.uleb128 0x12
	.uleb128 0x1
	.uleb128 0x40
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x42
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x3f
	.uleb128 0xc
	.uleb128 0x2
	.uleb128 0xa
	.byte	0x0
	.byte	0x0
	.uleb128 0x43
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0xb
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x3f
	.uleb128 0xc
	.uleb128 0x3c
	.uleb128 0xc
	.byte	0x0
	.byte	0x0
	.uleb128 0x44
	.uleb128 0x21
	.byte	0x0
	.byte	0x0
	.byte	0x0
	.uleb128 0x45
	.uleb128 0x34
	.byte	0x0
	.uleb128 0x3
	.uleb128 0xe
	.uleb128 0x3a
	.uleb128 0xb
	.uleb128 0x3b
	.uleb128 0x5
	.uleb128 0x49
	.uleb128 0x13
	.uleb128 0x3f
	.uleb128 0xc
	.uleb128 0x3c
	.uleb128 0xc
	.byte	0x0
	.byte	0x0
	.byte	0x0
	.section	.debug_pubnames,"",@progbits
	.4byte	0x1b
	.2byte	0x2
	.4byte	@.Ldebug_info0
	.4byte	0x1782
	.4byte	0x15f1
	.string	"curr_arc"
	.4byte	0x0
	.section	.debug_aranges,"",@progbits
	.4byte	0x2c
	.2byte	0x2
	.4byte	@.Ldebug_info0
	.byte	0x4
	.byte	0x0
	.2byte	0x0
	.2byte	0x0
	.4byte	@.Ltext0
	.4byte	@.Letext0-@.Ltext0
	.4byte	@.LFB869
	.4byte	@.LFE869-@.LFB869
	.4byte	@.LFB867
	.4byte	@.LFE867-@.LFB867
	.4byte	0x0
	.4byte	0x0
	.section	.debug_ranges,"",@progbits
.Ldebug_ranges0:
	.4byte	@.LBB165
	.4byte	@.LBE165
	.4byte	@.LBB168
	.4byte	@.LBE168
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB175
	.4byte	@.LBE175
	.4byte	@.LBB177
	.4byte	@.LBE177
	.4byte	@.LBB176
	.4byte	@.LBE176
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB178
	.4byte	@.LBE178
	.4byte	@.LBB187
	.4byte	@.LBE187
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB179
	.4byte	@.LBE179
	.4byte	@.LBB186
	.4byte	@.LBE186
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB180
	.4byte	@.LBE180
	.4byte	@.LBB185
	.4byte	@.LBE185
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB181
	.4byte	@.LBE181
	.4byte	@.LBB184
	.4byte	@.LBE184
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB188
	.4byte	@.LBE188
	.4byte	@.LBB191
	.4byte	@.LBE191
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB193
	.4byte	@.LBE193
	.4byte	@.LBB196
	.4byte	@.LBE196
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB199
	.4byte	@.LBE199
	.4byte	@.LBB202
	.4byte	@.LBE202
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB207
	.4byte	@.LBE207
	.4byte	@.LBB208
	.4byte	@.LBE208
	.4byte	0x0
	.4byte	0x0
	.4byte	@.LBB209
	.4byte	@.LBE209
	.4byte	@.LBB210
	.4byte	@.LBE210
	.4byte	0x0
	.4byte	0x0
	.4byte	@.Ltext0
	.4byte	@.Letext0
	.4byte	@.LFB869
	.4byte	@.LFE869
	.4byte	@.LFB866
	.4byte	@.LFE866
	.4byte	@.LFB856
	.4byte	@.LFE856
	.4byte	@.LFB857
	.4byte	@.LFE857
	.4byte	@.LFB865
	.4byte	@.LFE865
	.4byte	@.LFB862
	.4byte	@.LFE862
	.4byte	@.LFB864
	.4byte	@.LFE864
	.4byte	@.LFB863
	.4byte	@.LFE863
	.4byte	@.LFB861
	.4byte	@.LFE861
	.4byte	@.LFB855
	.4byte	@.LFE855
	.4byte	@.LFB854
	.4byte	@.LFE854
	.4byte	@.LFB867
	.4byte	@.LFE867
	.4byte	0x0
	.4byte	0x0
	.section	.debug_line
	.4byte	@.LELT0-@.LSLT0
.LSLT0:
	.2byte	0x2
	.4byte	@.LELTP0-@.LASLTP0
.LASLTP0:
	.byte	0x1
	.byte	0x1
	.byte	0xf6
	.byte	0xf5
	.byte	0xa
	.byte	0x0
	.byte	0x1
	.byte	0x1
	.byte	0x1
	.byte	0x1
	.byte	0x0
	.byte	0x0
	.byte	0x0
	.byte	0x1
	.ascii	"include/asm-generic"
	.byte	0
	.ascii	"include/linux"
	.byte	0
	.ascii	"include/linux/mfd/wm831x"
	.byte	0
	.ascii	"drivers/power"
	.byte	0
	.ascii	"/root/linux-next/arch/arc/include/asm"
	.byte	0
	.ascii	"/root/linux-next/include/uapi/asm-generic"
	.byte	0
	.byte	0x0
	.string	"wm831x_power.c"
	.uleb128 0x4
	.uleb128 0x0
	.uleb128 0x0
	.string	"platform_device.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"mfd/wm831x/core.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"slab.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"posix_types.h"
	.uleb128 0x6
	.uleb128 0x0
	.uleb128 0x0
	.string	"types.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"nodemask.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"mmzone.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"percpu.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"power_supply.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"slub_def.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"irqreturn.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"hrtimer.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"interrupt.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"mfd/wm831x/auxadc.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"bitops.h"
	.uleb128 0x5
	.uleb128 0x0
	.uleb128 0x0
	.string	"kmemleak.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"log2.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"getorder.h"
	.uleb128 0x1
	.uleb128 0x0
	.uleb128 0x0
	.string	"current.h"
	.uleb128 0x5
	.uleb128 0x0
	.uleb128 0x0
	.string	"export.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"printk.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"kernel.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"time.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"debug_locks.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"cpumask.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"timer.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"workqueue.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"percpu.h"
	.uleb128 0x1
	.uleb128 0x0
	.uleb128 0x0
	.string	"ioport.h"
	.uleb128 0x2
	.uleb128 0x0
	.uleb128 0x0
	.string	"irq_regs.h"
	.uleb128 0x1
	.uleb128 0x0
	.uleb128 0x0
	.string	"int-ll64.h"
	.uleb128 0x1
	.uleb128 0x0
	.uleb128 0x0
	.byte	0x0
.LELTP0:
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM1
	.byte	0x3
	.sleb128 628
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM2
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM3
	.byte	0x4
	.uleb128 0x2
	.byte	0x3
	.sleb128 -426
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM4
	.byte	0x4
	.uleb128 0x1
	.byte	0x3
	.sleb128 428
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM5
	.byte	0x4
	.uleb128 0x2
	.byte	0x3
	.sleb128 -428
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM6
	.byte	0x4
	.uleb128 0x1
	.byte	0x3
	.sleb128 428
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM7
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM8
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM9
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -210
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM10
	.byte	0x4
	.uleb128 0x1
	.byte	0xe9
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM11
	.byte	0x11
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM12
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM13
	.byte	0x1b
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM14
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -216
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM15
	.byte	0x4
	.uleb128 0x1
	.byte	0xed
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM16
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM17
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -219
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM18
	.byte	0x4
	.uleb128 0x1
	.byte	0xf0
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM19
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM20
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM21
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM22
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM23
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM24
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM25
	.byte	0x3
	.sleb128 -452
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM26
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM27
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM28
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM29
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM30
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM31
	.byte	0x1a
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM32
	.byte	0xe
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM33
	.byte	0x1a
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM34
	.byte	0xe
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM35
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM36
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM37
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM38
	.byte	0x12
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM39
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM40
	.byte	0x12
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM41
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM42
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM43
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM44
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM45
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM46
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM47
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM48
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM49
	.byte	0x19
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM50
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM51
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM52
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM53
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM54
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM55
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM56
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM57
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM58
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM59
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM60
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM61
	.byte	0x19
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM62
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM63
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM64
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM65
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM66
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM67
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM68
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM69
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM70
	.byte	0x19
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM71
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM72
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM73
	.byte	0x1b
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM74
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM75
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM76
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM77
	.byte	0xdd
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM78
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM79
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM80
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM81
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM82
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM83
	.byte	0x4
	.uleb128 0x4
	.byte	0x3
	.sleb128 -160
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM84
	.byte	0x4
	.uleb128 0x1
	.byte	0xb5
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM85
	.byte	0x4
	.uleb128 0x4
	.byte	0x3
	.sleb128 -161
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM86
	.byte	0x4
	.uleb128 0x1
	.byte	0xbd
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM87
	.byte	0x4
	.uleb128 0x2
	.byte	0x3
	.sleb128 -294
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM88
	.byte	0x4
	.uleb128 0x1
	.byte	0x3
	.sleb128 297
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM89
	.byte	0x4
	.uleb128 0x2
	.byte	0x3
	.sleb128 -297
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM90
	.byte	0x4
	.uleb128 0x1
	.byte	0x3
	.sleb128 304
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM91
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM92
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM93
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM94
	.byte	0xf
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM95
	.byte	0x1c
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM96
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM97
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM98
	.byte	0x1b
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM99
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM100
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM101
	.byte	0x11
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM102
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM103
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM104
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM105
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM106
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM107
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM108
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM109
	.byte	0x3
	.sleb128 -34
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM110
	.byte	0x36
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM111
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM112
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM113
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM114
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM115
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM116
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM117
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM118
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM119
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM120
	.byte	0x3
	.sleb128 -45
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM121
	.byte	0x41
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM122
	.byte	0x3
	.sleb128 -45
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM123
	.byte	0x43
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM124
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM125
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM126
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM127
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM128
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM129
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM130
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM131
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM132
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM133
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -143
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM134
	.byte	0x4
	.uleb128 0x1
	.byte	0xa4
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM135
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -144
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM136
	.byte	0x4
	.uleb128 0x1
	.byte	0xa4
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM137
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM138
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM139
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM140
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM141
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -153
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM142
	.byte	0x4
	.uleb128 0x1
	.byte	0xae
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM143
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM144
	.byte	0x1b
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM145
	.byte	0xd
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM146
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM147
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM148
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM149
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -164
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM150
	.byte	0x4
	.uleb128 0x1
	.byte	0xbb
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM151
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -167
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM152
	.byte	0x4
	.uleb128 0x1
	.byte	0xbb
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM153
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM154
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM155
	.byte	0x1f
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM156
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM157
	.byte	0x3
	.sleb128 -21
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM158
	.byte	0x28
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM159
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM160
	.byte	0x12
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM161
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM162
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -186
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM163
	.byte	0x4
	.uleb128 0x1
	.byte	0xcf
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM164
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM165
	.byte	0x4
	.uleb128 0x3
	.byte	0x3
	.sleb128 -189
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM166
	.byte	0x4
	.uleb128 0x1
	.byte	0xd2
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM167
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM168
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM169
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM170
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM171
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM172
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM173
	.byte	0x3
	.sleb128 -181
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM174
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM175
	.byte	0x10
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM176
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM177
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM178
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM179
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM180
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM181
	.byte	0x28
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM182
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM183
	.byte	0x10
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM184
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM185
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM186
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM187
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM188
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM189
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM190
	.byte	0x3
	.sleb128 -25
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM191
	.byte	0x1a
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM192
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM193
	.byte	0x3
	.sleb128 -79
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM194
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM195
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM196
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM197
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM198
	.byte	0x3
	.sleb128 -102
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM199
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM200
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM201
	.byte	0x19
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM202
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM203
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM204
	.byte	0x16
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM205
	.byte	0x1c
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM206
	.byte	0x3
	.sleb128 -283
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM207
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM208
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM209
	.byte	0x22
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM210
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM211
	.byte	0x3
	.sleb128 300
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM212
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM213
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM214
	.byte	0x19
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM215
	.byte	0x19
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM216
	.byte	0x19
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM217
	.byte	0x1a
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM218
	.byte	0xe
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM219
	.byte	0x3
	.sleb128 -44
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM220
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM221
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM222
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM223
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM224
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM225
	.byte	0x61
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM226
	.byte	0x3
	.sleb128 -323
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM227
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM228
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM229
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM230
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM231
	.byte	0x3
	.sleb128 -67
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM232
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM233
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM234
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM235
	.byte	0x1f
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM236
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM237
	.byte	0x51
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM238
	.byte	0x3
	.sleb128 -49
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM239
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM240
	.byte	0x13
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM241
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM242
	.byte	0x18
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM243
	.byte	0x3
	.sleb128 -36
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM244
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM245
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM246
	.byte	0x17
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM247
	.byte	0x1f
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM248
	.byte	0x15
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LM249
	.byte	0x32
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.Letext0
	.byte	0x0
	.uleb128 0x1
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LSM0
	.byte	0x3
	.sleb128 662
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LSM1
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LFE869
	.byte	0x0
	.uleb128 0x1
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LSM2
	.byte	0x3
	.sleb128 662
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LSM3
	.byte	0x1
	.byte	0x0
	.uleb128 0x5
	.byte	0x2
	.4byte	@.LFE867
	.byte	0x0
	.uleb128 0x1
	.byte	0x1
.LELT0:
	.section	.debug_str,"MS",@progbits,1
.LASF155:
	.string	"POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW"
.LASF7:
	.string	"long int"
.LASF149:
	.string	"POWER_SUPPLY_PROP_TEMP"
.LASF300:
	.string	"wm831x_syslo_irq"
.LASF228:
	.string	"WM831X_AUX_WALL"
.LASF237:
	.string	"WM831X_AUX_AUX1"
.LASF236:
	.string	"WM831X_AUX_AUX2"
.LASF49:
	.string	"NR_SLAB_UNRECLAIMABLE"
.LASF297:
	.string	"err_syslo"
.LASF125:
	.string	"POWER_SUPPLY_PROP_POWER_AVG"
.LASF341:
	.string	"ksoftirqd"
.LASF342:
	.string	"GNU C 4.4.7"
.LASF98:
	.string	"POWER_SUPPLY_HEALTH_OVERHEAT"
.LASF211:
	.string	"HRTIMER_BASE_BOOTTIME"
.LASF53:
	.string	"NR_BOUNCE"
.LASF334:
	.string	"ioport_resource"
.LASF19:
	.string	"N_NORMAL_MEMORY"
.LASF106:
	.string	"POWER_SUPPLY_PROP_STATUS"
.LASF37:
	.string	"NR_INACTIVE_ANON"
.LASF296:
	.string	"err_battery"
.LASF322:
	.string	"console_printk"
.LASF223:
	.string	"RCU_SOFTIRQ"
.LASF95:
	.string	"POWER_SUPPLY_CHARGE_TYPE_FAST"
.LASF243:
	.string	"wall_name"
.LASF257:
	.string	"flags"
.LASF182:
	.string	"ALLOC_FROM_PARTIAL"
.LASF52:
	.string	"NR_UNSTABLE_NFS"
.LASF178:
	.string	"FREE_SLOWPATH"
.LASF198:
	.string	"CPU_PARTIAL_FREE"
.LASF302:
	.string	"wm831x_usb_get_prop"
.LASF4:
	.string	"unsigned int"
.LASF187:
	.string	"CPUSLAB_FLUSH"
.LASF23:
	.string	"NR_NODE_STATES"
.LASF219:
	.string	"BLOCK_IOPOLL_SOFTIRQ"
.LASF239:
	.string	"wm831x_battery_pdata"
.LASF148:
	.string	"POWER_SUPPLY_PROP_CAPACITY_LEVEL"
.LASF275:
	.string	"supply"
.LASF188:
	.string	"DEACTIVATE_FULL"
.LASF77:
	.string	"pglist_data"
.LASF15:
	.string	"_ddebug"
.LASF207:
	.string	"irqreturn_t"
.LASF107:
	.string	"POWER_SUPPLY_PROP_CHARGE_TYPE"
.LASF314:
	.string	"wm831x_bat_irqs"
.LASF288:
	.string	"reg1"
.LASF289:
	.string	"reg2"
.LASF83:
	.string	"module"
.LASF96:
	.string	"POWER_SUPPLY_HEALTH_UNKNOWN"
.LASF324:
	.string	"persistent_clock_exist"
.LASF133:
	.string	"POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT"
.LASF303:
	.string	"wm831x_wall_get_prop"
.LASF175:
	.string	"ALLOC_FASTPATH"
.LASF204:
	.string	"IRQ_NONE"
.LASF40:
	.string	"NR_ACTIVE_FILE"
.LASF348:
	.string	"wm831x_power_driver_init"
.LASF344:
	.string	"/root/linux-next"
.LASF101:
	.string	"POWER_SUPPLY_HEALTH_UNSPEC_FAILURE"
.LASF160:
	.string	"POWER_SUPPLY_PROP_SCOPE"
.LASF126:
	.string	"POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN"
.LASF103:
	.string	"POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE"
.LASF276:
	.string	"wm831x_power_read_voltage"
.LASF193:
	.string	"DEACTIVATE_BYPASS"
.LASF272:
	.string	"wm831x_bat_check_status"
.LASF66:
	.string	"LRU_INACTIVE_ANON"
.LASF245:
	.string	"battery_name"
.LASF321:
	.string	"__this_module"
.LASF128:
	.string	"POWER_SUPPLY_PROP_CHARGE_FULL"
.LASF110:
	.string	"POWER_SUPPLY_PROP_ONLINE"
.LASF217:
	.string	"NET_RX_SOFTIRQ"
.LASF247:
	.string	"wm831x_power"
.LASF144:
	.string	"POWER_SUPPLY_PROP_ENERGY_AVG"
.LASF230:
	.string	"WM831X_AUX_USB"
.LASF43:
	.string	"NR_ANON_PAGES"
.LASF62:
	.string	"NR_ANON_TRANSPARENT_HUGEPAGES"
.LASF130:
	.string	"POWER_SUPPLY_PROP_CHARGE_NOW"
.LASF122:
	.string	"POWER_SUPPLY_PROP_CURRENT_NOW"
.LASF306:
	.string	"wm831x_wall_props"
.LASF112:
	.string	"POWER_SUPPLY_PROP_TECHNOLOGY"
.LASF9:
	.string	"__kernel_size_t"
.LASF109:
	.string	"POWER_SUPPLY_PROP_PRESENT"
.LASF281:
	.string	"count"
.LASF267:
	.string	"index"
.LASF6:
	.string	"long long unsigned int"
.LASF290:
	.string	"wm831x_power_remove"
.LASF152:
	.string	"POWER_SUPPLY_PROP_TEMP_AMBIENT"
.LASF162:
	.string	"POWER_SUPPLY_PROP_MANUFACTURER"
.LASF215:
	.string	"TIMER_SOFTIRQ"
.LASF248:
	.string	"chg_map"
.LASF206:
	.string	"IRQ_WAKE_THREAD"
.LASF163:
	.string	"POWER_SUPPLY_PROP_SERIAL_NUMBER"
.LASF87:
	.string	"POWER_SUPPLY_STATUS_UNKNOWN"
.LASF335:
	.string	"kmalloc_caches"
.LASF343:
	.string	"drivers/power/wm831x_power.c"
.LASF35:
	.string	"NR_ALLOC_BATCH"
.LASF331:
	.string	"system_freezable_wq"
.LASF203:
	.string	"irqreturn"
.LASF312:
	.string	"chg_times"
.LASF156:
	.string	"POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG"
.LASF33:
	.string	"zone_stat_item"
.LASF135:
	.string	"POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE"
.LASF161:
	.string	"POWER_SUPPLY_PROP_MODEL_NAME"
.LASF113:
	.string	"POWER_SUPPLY_PROP_CYCLE_COUNT"
.LASF208:
	.string	"hrtimer_base_type"
.LASF151:
	.string	"POWER_SUPPLY_PROP_TEMP_ALERT_MAX"
.LASF32:
	.string	"node_states"
.LASF92:
	.string	"POWER_SUPPLY_CHARGE_TYPE_UNKNOWN"
.LASF108:
	.string	"POWER_SUPPLY_PROP_HEALTH"
.LASF117:
	.string	"POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN"
.LASF308:
	.string	"trickle_ilims"
.LASF309:
	.string	"vsels"
.LASF129:
	.string	"POWER_SUPPLY_PROP_CHARGE_EMPTY"
.LASF292:
	.string	"power"
.LASF166:
	.string	"POWER_SUPPLY_TYPE_BATTERY"
.LASF60:
	.string	"NR_DIRTIED"
.LASF12:
	.string	"_Bool"
.LASF305:
	.string	"workqueue_struct"
.LASF50:
	.string	"NR_PAGETABLE"
.LASF76:
	.string	"NR_WMARK"
.LASF27:
	.string	"MIGRATE_PCPTYPES"
.LASF84:
	.string	"resource"
.LASF249:
	.string	"reg_val"
.LASF244:
	.string	"usb_name"
.LASF284:
	.string	"descriptor"
.LASF328:
	.string	"cpu_bit_bitmap"
.LASF311:
	.string	"eoc_iterms"
.LASF115:
	.string	"POWER_SUPPLY_PROP_VOLTAGE_MIN"
.LASF286:
	.string	"wm831x_config_battery"
.LASF179:
	.string	"FREE_FROZEN"
.LASF318:
	.string	"__UNIQUE_ID_license2"
.LASF150:
	.string	"POWER_SUPPLY_PROP_TEMP_ALERT_MIN"
.LASF216:
	.string	"NET_TX_SOFTIRQ"
.LASF171:
	.string	"POWER_SUPPLY_TYPE_USB_CDP"
.LASF333:
	.string	"__per_cpu_offset"
.LASF145:
	.string	"POWER_SUPPLY_PROP_CAPACITY"
.LASF89:
	.string	"POWER_SUPPLY_STATUS_DISCHARGING"
.LASF68:
	.string	"LRU_INACTIVE_FILE"
.LASF224:
	.string	"NR_SOFTIRQS"
.LASF55:
	.string	"NR_VMSCAN_IMMEDIATE"
.LASF44:
	.string	"NR_FILE_MAPPED"
.LASF10:
	.string	"char"
.LASF25:
	.string	"MIGRATE_RECLAIMABLE"
.LASF41:
	.string	"NR_UNEVICTABLE"
.LASF214:
	.string	"HI_SOFTIRQ"
.LASF94:
	.string	"POWER_SUPPLY_CHARGE_TYPE_TRICKLE"
.LASF26:
	.string	"MIGRATE_MOVABLE"
.LASF229:
	.string	"WM831X_AUX_BATT"
.LASF199:
	.string	"CPU_PARTIAL_NODE"
.LASF146:
	.string	"POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN"
.LASF38:
	.string	"NR_ACTIVE_ANON"
.LASF258:
	.string	"order"
.LASF251:
	.string	"wm831x_irq"
.LASF111:
	.string	"POWER_SUPPLY_PROP_AUTHENTIC"
.LASF271:
	.string	"data"
.LASF139:
	.string	"POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN"
.LASF259:
	.string	"__ilog2_u32"
.LASF235:
	.string	"WM831X_AUX_AUX3"
.LASF234:
	.string	"WM831X_AUX_AUX4"
.LASF238:
	.string	"wm831x"
.LASF201:
	.string	"NR_SLUB_STAT_ITEMS"
.LASF132:
	.string	"POWER_SUPPLY_PROP_CHARGE_COUNTER"
.LASF18:
	.string	"N_ONLINE"
.LASF273:
	.string	"status"
.LASF119:
	.string	"POWER_SUPPLY_PROP_VOLTAGE_AVG"
.LASF82:
	.string	"PCPU_FC_NR"
.LASF212:
	.string	"HRTIMER_BASE_TAI"
.LASF63:
	.string	"NR_FREE_CMA_PAGES"
.LASF338:
	.string	"__pcpu_scope_tick_cpu_device"
.LASF202:
	.string	"kmem_cache"
.LASF185:
	.string	"ALLOC_NODE_MISMATCH"
.LASF153:
	.string	"POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN"
.LASF197:
	.string	"CPU_PARTIAL_ALLOC"
.LASF345:
	.string	"power_supply_propval"
.LASF164:
	.string	"power_supply_type"
.LASF304:
	.string	"task_struct"
.LASF20:
	.string	"N_HIGH_MEMORY"
.LASF22:
	.string	"N_CPU"
.LASF5:
	.string	"long long int"
.LASF131:
	.string	"POWER_SUPPLY_PROP_CHARGE_AVG"
.LASF123:
	.string	"POWER_SUPPLY_PROP_CURRENT_AVG"
.LASF279:
	.string	"wm831x_bat_check_type"
.LASF291:
	.string	"wm831x_power_probe"
.LASF176:
	.string	"ALLOC_SLOWPATH"
.LASF347:
	.string	"err_bat_irq"
.LASF270:
	.string	"platform_set_drvdata"
.LASF172:
	.string	"POWER_SUPPLY_TYPE_USB_ACA"
.LASF298:
	.string	"wm831x_bat_irq"
.LASF47:
	.string	"NR_WRITEBACK"
.LASF192:
	.string	"DEACTIVATE_REMOTE_FREES"
.LASF11:
	.string	"bool"
.LASF255:
	.string	"min_count"
.LASF167:
	.string	"POWER_SUPPLY_TYPE_UPS"
.LASF191:
	.string	"DEACTIVATE_TO_TAIL"
.LASF221:
	.string	"SCHED_SOFTIRQ"
.LASF30:
	.string	"MIGRATE_ISOLATE"
.LASF28:
	.string	"MIGRATE_RESERVE"
.LASF195:
	.string	"CMPXCHG_DOUBLE_CPU_FAIL"
.LASF277:
	.string	"wm831x_bat_check_health"
.LASF141:
	.string	"POWER_SUPPLY_PROP_ENERGY_FULL"
.LASF263:
	.string	"kmalloc_index"
.LASF250:
	.string	"platform_get_drvdata"
.LASF168:
	.string	"POWER_SUPPLY_TYPE_MAINS"
.LASF157:
	.string	"POWER_SUPPLY_PROP_TIME_TO_FULL_NOW"
.LASF29:
	.string	"MIGRATE_CMA"
.LASF127:
	.string	"POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN"
.LASF21:
	.string	"N_MEMORY"
.LASF220:
	.string	"TASKLET_SOFTIRQ"
.LASF254:
	.string	"size"
.LASF72:
	.string	"zone_watermarks"
.LASF200:
	.string	"CPU_PARTIAL_DRAIN"
.LASF269:
	.string	"kmemleak_alloc"
.LASF80:
	.string	"PCPU_FC_EMBED"
.LASF232:
	.string	"WM831X_AUX_BATT_TEMP"
.LASF287:
	.string	"pdata"
.LASF165:
	.string	"POWER_SUPPLY_TYPE_UNKNOWN"
.LASF58:
	.string	"NR_ISOLATED_FILE"
.LASF240:
	.string	"wm831x_pdata"
.LASF218:
	.string	"BLOCK_SOFTIRQ"
.LASF340:
	.string	"__pcpu_scope_ksoftirqd"
.LASF252:
	.string	"pdev"
.LASF325:
	.string	"page_group_by_mobility_disabled"
.LASF71:
	.string	"NR_LRU_LISTS"
.LASF65:
	.string	"lru_list"
.LASF231:
	.string	"WM831X_AUX_SYSVDD"
.LASF99:
	.string	"POWER_SUPPLY_HEALTH_DEAD"
.LASF97:
	.string	"POWER_SUPPLY_HEALTH_GOOD"
.LASF332:
	.string	"contig_page_data"
.LASF253:
	.string	"constant_fls"
.LASF13:
	.string	"size_t"
.LASF265:
	.string	"kmem_cache_alloc_trace"
.LASF330:
	.string	"system_wq"
.LASF174:
	.string	"stat_item"
.LASF91:
	.string	"POWER_SUPPLY_STATUS_FULL"
.LASF1:
	.string	"unsigned char"
.LASF190:
	.string	"DEACTIVATE_TO_HEAD"
.LASF210:
	.string	"HRTIMER_BASE_REALTIME"
.LASF262:
	.string	"kmalloc_large"
.LASF36:
	.string	"NR_LRU_BASE"
.LASF116:
	.string	"POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN"
.LASF14:
	.string	"gfp_t"
.LASF2:
	.string	"short int"
.LASF105:
	.string	"power_supply_property"
.LASF56:
	.string	"NR_WRITEBACK_TEMP"
.LASF90:
	.string	"POWER_SUPPLY_STATUS_NOT_CHARGING"
.LASF85:
	.string	"platform_device"
.LASF205:
	.string	"IRQ_HANDLED"
.LASF261:
	.string	"kmalloc_order_trace"
.LASF177:
	.string	"FREE_FASTPATH"
.LASF100:
	.string	"POWER_SUPPLY_HEALTH_OVERVOLTAGE"
.LASF169:
	.string	"POWER_SUPPLY_TYPE_USB"
.LASF268:
	.string	"kzalloc"
.LASF225:
	.string	"wm831x_auxadc"
.LASF170:
	.string	"POWER_SUPPLY_TYPE_USB_DCP"
.LASF102:
	.string	"POWER_SUPPLY_HEALTH_COLD"
.LASF118:
	.string	"POWER_SUPPLY_PROP_VOLTAGE_NOW"
.LASF64:
	.string	"NR_VM_ZONE_STAT_ITEMS"
.LASF278:
	.string	"health"
.LASF39:
	.string	"NR_INACTIVE_FILE"
.LASF323:
	.string	"hex_asc"
.LASF316:
	.string	"__UNIQUE_ID_description0"
.LASF78:
	.string	"pcpu_fc"
.LASF54:
	.string	"NR_VMSCAN_WRITE"
.LASF337:
	.string	"__irq_regs"
.LASF315:
	.string	"wm831x_power_driver"
.LASF81:
	.string	"PCPU_FC_PAGE"
.LASF256:
	.string	"kmalloc_order"
.LASF282:
	.string	"name"
.LASF59:
	.string	"NR_SHMEM"
.LASF326:
	.string	"debug_locks"
.LASF138:
	.string	"POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX"
.LASF260:
	.string	"__get_order"
.LASF274:
	.string	"wm831x_power_check_online"
.LASF186:
	.string	"FREE_SLAB"
.LASF137:
	.string	"POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT"
.LASF120:
	.string	"POWER_SUPPLY_PROP_VOLTAGE_OCV"
.LASF142:
	.string	"POWER_SUPPLY_PROP_ENERGY_EMPTY"
.LASF31:
	.string	"MIGRATE_TYPES"
.LASF339:
	.string	"__pcpu_scope_softirq_work_list"
.LASF8:
	.string	"long unsigned int"
.LASF124:
	.string	"POWER_SUPPLY_PROP_POWER_NOW"
.LASF16:
	.string	"pt_regs"
.LASF346:
	.string	"wm831x_power_driver_exit"
.LASF69:
	.string	"LRU_ACTIVE_FILE"
.LASF301:
	.string	"wm831x_bat_get_prop"
.LASF45:
	.string	"NR_FILE_PAGES"
.LASF181:
	.string	"FREE_REMOVE_PARTIAL"
.LASF17:
	.string	"N_POSSIBLE"
.LASF140:
	.string	"POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN"
.LASF51:
	.string	"NR_KERNEL_STACK"
.LASF42:
	.string	"NR_MLOCK"
.LASF246:
	.string	"have_battery"
.LASF196:
	.string	"CMPXCHG_DOUBLE_FAIL"
.LASF227:
	.string	"WM831X_AUX_BKUP_BATT"
.LASF280:
	.string	"type"
.LASF320:
	.string	"curr_arc"
.LASF233:
	.string	"WM831X_AUX_CHIP_TEMP"
.LASF307:
	.string	"wm831x_usb_props"
.LASF285:
	.string	"wm831x_battey_apply_config"
.LASF158:
	.string	"POWER_SUPPLY_PROP_TIME_TO_FULL_AVG"
.LASF266:
	.string	"kmalloc"
.LASF104:
	.string	"POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE"
.LASF114:
	.string	"POWER_SUPPLY_PROP_VOLTAGE_MAX"
.LASF310:
	.string	"fast_ilims"
.LASF75:
	.string	"WMARK_HIGH"
.LASF299:
	.string	"wm831x_pwr_src_irq"
.LASF34:
	.string	"NR_FREE_PAGES"
.LASF93:
	.string	"POWER_SUPPLY_CHARGE_TYPE_NONE"
.LASF329:
	.string	"timer_stats_active"
.LASF136:
	.string	"POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX"
.LASF57:
	.string	"NR_ISOLATED_ANON"
.LASF209:
	.string	"HRTIMER_BASE_MONOTONIC"
.LASF313:
	.string	"wm831x_bat_props"
.LASF226:
	.string	"WM831X_AUX_CAL"
.LASF61:
	.string	"NR_WRITTEN"
.LASF48:
	.string	"NR_SLAB_RECLAIMABLE"
.LASF173:
	.string	"power_supply"
.LASF241:
	.string	"wall"
.LASF79:
	.string	"PCPU_FC_AUTO"
.LASF121:
	.string	"POWER_SUPPLY_PROP_CURRENT_MAX"
.LASF194:
	.string	"ORDER_FALLBACK"
.LASF283:
	.string	"units"
.LASF180:
	.string	"FREE_ADD_PARTIAL"
.LASF336:
	.string	"__pcpu_scope___irq_regs"
.LASF0:
	.string	"signed char"
.LASF143:
	.string	"POWER_SUPPLY_PROP_ENERGY_NOW"
.LASF70:
	.string	"LRU_UNEVICTABLE"
.LASF3:
	.string	"short unsigned int"
.LASF147:
	.string	"POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX"
.LASF134:
	.string	"POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX"
.LASF293:
	.string	"err_kmalloc"
.LASF317:
	.string	"__UNIQUE_ID_author1"
.LASF264:
	.string	"__func__"
.LASF67:
	.string	"LRU_ACTIVE_ANON"
.LASF183:
	.string	"ALLOC_SLAB"
.LASF327:
	.string	"nr_cpu_ids"
.LASF295:
	.string	"err_usb"
.LASF184:
	.string	"ALLOC_REFILL"
.LASF242:
	.string	"battery"
.LASF86:
	.string	"platform_driver"
.LASF88:
	.string	"POWER_SUPPLY_STATUS_CHARGING"
.LASF24:
	.string	"MIGRATE_UNMOVABLE"
.LASF46:
	.string	"NR_FILE_DIRTY"
.LASF213:
	.string	"HRTIMER_MAX_CLOCK_BASES"
.LASF154:
	.string	"POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX"
.LASF294:
	.string	"err_wall"
.LASF222:
	.string	"HRTIMER_SOFTIRQ"
.LASF159:
	.string	"POWER_SUPPLY_PROP_TYPE"
.LASF73:
	.string	"WMARK_MIN"
.LASF189:
	.string	"DEACTIVATE_EMPTY"
.LASF74:
	.string	"WMARK_LOW"
.LASF319:
	.string	"__UNIQUE_ID_alias3"
	.ident	"GCC: (ARCompact elf32 toolchain (built 20130922)) 4.4.7"

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-09-23  6:04 [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code Chen Gang
@ 2013-09-23  6:12 ` Chen Gang
  2013-09-23  6:39   ` Vineet Gupta
  0 siblings, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-09-23  6:12 UTC (permalink / raw)
  To: vgupta; +Cc: linux-kernel


Oh, I forgot to supply the related arc cross-compiler's information:

[root@dhcp122 linux-next]# /usr/local/bin/arc-elf32-gcc -v
Using built-in specs.
Target: arc-elf32
Configured with: /mnt/sda11/src/toolchain_arc/unisrc/configure --target=arc-elf32 --with-cpu=arc700 --disable-werror --disable-multilib --with-pkgversion='ARCompact elf32 toolchain (built 20130922)' --with-bugurl=http://solvnet.synopsys.com --enable-fast-install=N/A --enable-languages=c,c++ --prefix=/usr/local --with-headers=/mnt/sda11/src/toolchain_arc/unisrc/newlib/libc/include
Thread model: single
gcc version 4.4.7 (ARCompact elf32 toolchain (built 20130922)) 

[root@dhcp122 linux-next]# /usr/local/bin/arc-elf32-as -v
GNU assembler version 2.19.50.ARC_4.4 (arc-elf32) using BFD version (ARCompact elf32 toolchain (built 20130922)) 2.19.50.ARC_4.4.20081103

[root@dhcp122 linux-next]# /usr/local/bin/arc-elf32-ld -v
GNU ld (ARCompact elf32 toolchain (built 20130922)) 2.19.50.ARC_4.4.20081103


On 09/23/2013 02:04 PM, Chen Gang wrote:
> Hello arc members:
> 
> It is arc compiler's bug, but can not report to gnu tool chain (it is
> not integrated into gnu tool chain), so have to report it here (I find
> this bug here, and I guess, some arc folks are here, too).
> 
> 
> In "drivers/power/wm831x_power.c", all wm831x_bat_get_prop() calling
> functions are inline, so wm831x_bat_get_prop() size is more than 256,
> but it uses 1 byte to express related offset (".byte .L61-.L65 + 6").
> 
> If let some of wm831x_bat_get_prop() calling functions noinline, it can
> pass compiling.
> 
> The related .s file is in attachment, and the related command and error
> (for next-20130920 tree) is below:
> 
>     /usr/local/bin/arc-elf32-gcc -Wp,-MD,drivers/power/.wm831x_power.o.d  -nostdinc -isystem /usr/local/lib/gcc/arc-elf32/4.4.7/include -I/root/linux-next/arch/arc/include -Iarch/arc/include/generated  -Iinclude -I/root/linux-next/arch/arc/include/uapi -Iarch/arc/include/generated/uapi -I/root/linux-next/include/uapi -Iinclude/generated/uapi -include /root/linux-next/include/linux/kconfig.h -include /root/linux-next/arch/arc/include/asm/current.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -mA7 -fno-common -pipe -fno-builtin -D__linux__ -fsection-anchors -mlock -mswape -mrtsc -fasynchronous-unwind-tables -mno-sdata -fcall-used-gp -mbig-endian -multcost=16 -fno-reorder-blocks -fno-ipa-cp-clone -Wframe-larger-than=1024 -fno-stack-protector -fomit-frame-pointer -g -femit-struct-debug-baseonly -fno-var-tracking -fno-inline-functions-c
 alled-onc
e 
> -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -DDEBUG   -DMODULE -mlong-calls  -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(wm831x_power)"  -D"KBUILD_MODNAME=KBUILD_STR(wm831x_power)" -c -o drivers/power/.tmp_wm831x_power.o drivers/power/wm831x_power.c
>   {standard input}: Assembler messages:
>   {standard input}:934: Error: value of 256 too large for field of 1 bytes at 1987
> 
> 
> Welcome any suggestions or completions (e.g. which location and members
> this bug should be reported to).
> 
> Thanks.
> 


-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-09-23  6:12 ` Chen Gang
@ 2013-09-23  6:39   ` Vineet Gupta
  2013-09-23  6:53     ` Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Vineet Gupta @ 2013-09-23  6:39 UTC (permalink / raw)
  To: Chen Gang
  Cc: jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, joern Rennecke

On 09/23/2013 11:43 AM, Chen Gang wrote:
> Oh, I forgot to supply the related arc cross-compiler's information:
>
> [root@dhcp122 linux-next]# /usr/local/bin/arc-elf32-gcc -v
> Using built-in specs.
> Target: arc-elf32
> Configured with: /mnt/sda11/src/toolchain_arc/unisrc/configure --target=arc-elf32 --with-cpu=arc700 --disable-werror --disable-multilib --with-pkgversion='ARCompact elf32 toolchain (built 20130922)' --with-bugurl=http://solvnet.synopsys.com --enable-fast-install=N/A --enable-languages=c,c++ --prefix=/usr/local --with-headers=/mnt/sda11/src/toolchain_arc/unisrc/newlib/libc/include
> Thread model: single
> gcc version 4.4.7 (ARCompact elf32 toolchain (built 20130922)) 
>
> [root@dhcp122 linux-next]# /usr/local/bin/arc-elf32-as -v
> GNU assembler version 2.19.50.ARC_4.4 (arc-elf32) using BFD version (ARCompact elf32 toolchain (built 20130922)) 2.19.50.ARC_4.4.20081103
>
> [root@dhcp122 linux-next]# /usr/local/bin/arc-elf32-ld -v
> GNU ld (ARCompact elf32 toolchain (built 20130922)) 2.19.50.ARC_4.4.20081103
>
>
> On 09/23/2013 02:04 PM, Chen Gang wrote:
>> Hello arc members:
>>
>> It is arc compiler's bug, but can not report to gnu tool chain (it is
>> not integrated into gnu tool chain), so have to report it here (I find
>> this bug here, and I guess, some arc folks are here, too).
>>
>>
>> In "drivers/power/wm831x_power.c", all wm831x_bat_get_prop() calling
>> functions are inline, so wm831x_bat_get_prop() size is more than 256,
>> but it uses 1 byte to express related offset (".byte .L61-.L65 + 6").
>>
>> If let some of wm831x_bat_get_prop() calling functions noinline, it can
>> pass compiling.
>>
>> The related .s file is in attachment, and the related command and error
>> (for next-20130920 tree) is below:
>>
>>     /usr/local/bin/arc-elf32-gcc -Wp,-MD,drivers/power/.wm831x_power.o.d  -nostdinc -isystem /usr/local/lib/gcc/arc-elf32/4.4.7/include -I/root/linux-next/arch/arc/include -Iarch/arc/include/generated  -Iinclude -I/root/linux-next/arch/arc/include/uapi -Iarch/arc/include/generated/uapi -I/root/linux-next/include/uapi -Iinclude/generated/uapi -include /root/linux-next/include/linux/kconfig.h -include /root/linux-next/arch/arc/include/asm/current.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -mA7 -fno-common -pipe -fno-builtin -D__linux__ -fsection-anchors -mlock -mswape -mrtsc -fasynchronous-unwind-tables -mno-sdata -fcall-used-gp -mbig-endian -multcost=16 -fno-reorder-blocks -fno-ipa-cp-clone -Wframe-larger-than=1024 -fno-stack-protector -fomit-frame-pointer -g -femit-struct-debug-baseonly -fno-var-tracking -fno-inline-functions-c
>  alled-onc
> e 
>> -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -DDEBUG   -DMODULE -mlong-calls  -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(wm831x_power)"  -D"KBUILD_MODNAME=KBUILD_STR(wm831x_power)" -c -o drivers/power/.tmp_wm831x_power.o drivers/power/wm831x_power.c
>>   {standard input}: Assembler messages:
>>   {standard input}:934: Error: value of 256 too large for field of 1 bytes at 1987
>>
>>
>> Welcome any suggestions or completions (e.g. which location and members
>> this bug should be reported to).
>>
>> Thanks.

Hi Chen,

Thanks for the problem report. Please note that we have moved on to gcc 4.8 based
tool-chain so I would suggest you switch over to it too (4.4 support is really
phased out).

With current 4.8 tools, I don't see the error you report.

Please use the arc-4.8-dev branch of toolchain repo on github for building the
tools, assuming that is where you got the sources for 4.4 tools too.

Jeremy, Claudiu, Joern maintain the gcc and rest of GNU toolchain ports for ARC so
please add them to any future posting on toolchain issues.

Thx,
-Vineet



^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-09-23  6:39   ` Vineet Gupta
@ 2013-09-23  6:53     ` Chen Gang
  2013-10-23  2:00       ` Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-09-23  6:53 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, joern Rennecke

On 09/23/2013 02:39 PM, Vineet Gupta wrote:
> Hi Chen,
> 
> Thanks for the problem report. Please note that we have moved on to gcc 4.8 based
> tool-chain so I would suggest you switch over to it too (4.4 support is really
> phased out).
> 
> With current 4.8 tools, I don't see the error you report.
> 
> Please use the arc-4.8-dev branch of toolchain repo on github for building the
> tools, assuming that is where you got the sources for 4.4 tools too.
> 

OK, thanks, I should try 4.8.  :-)

> Jeremy, Claudiu, Joern maintain the gcc and rest of GNU toolchain ports for ARC so
> please add them to any future posting on toolchain issues.
> 

Thank you very much for your information.

> Thx,
> -Vineet


Thanks.
-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-09-23  6:53     ` Chen Gang
@ 2013-10-23  2:00       ` Chen Gang
  2013-10-23  2:48         ` Joern Rennecke
  2013-10-23  2:51         ` [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code Francois Bedard
  0 siblings, 2 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-23  2:00 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, joern Rennecke

On 09/23/2013 02:53 PM, Chen Gang wrote:
> On 09/23/2013 02:39 PM, Vineet Gupta wrote:
>> Hi Chen,
>>
...
>>
>> Jeremy, Claudiu, Joern maintain the gcc and rest of GNU toolchain ports for ARC so
>> please add them to any future posting on toolchain issues.
>>


Firstly, sorry for so late to continue arc. Now I use latest tool-chain
(content gcc-4.8.0) to compile kernel with allmodconfig, and find three
tool chain issues (2 for gcc, 1 for binutils).

And also excuse me, I am still not quite sure where I should sent these
information to, although you have mentioned some valuable information.

I just list the issue details below, if necessary, please provide more
details where these information should be sent to (e.g. bugzilla), and
I will/should follow and work with related tool chain guys. thanks.


-------------------------information begin----------------------------

Operation:

  for Linux next-20130927 tree
  make ARCH=arc CROSS_COMPILE=/usr/local/bin/arc-elf32- allmodconfig
  make ARCH=arc CROSS_COMPILE=/usr/local/bin/arc-elf32-

Binutils (1 issue, ld and as information):

  when calling panic(), printk(), or memset() with R_ARC_S21W_PCREL, it may be overflow (I guess it need be R_ARC_S25W_PCREL).

  /usr/local/bin/arc-elf32-ld --build-id -X -o .tmp_vmlinux1 -T /android/public-kernel/linux-next/arch/arc/kernel/vmlinux.lds arch/arc/kernel/head.o init/built-in.o --start-group usr/built-in.o arch/arc/built-in.o arch/arc/boot/dts/built-in.o arch/arc/plat-arcfpga/built-in.o arch/arc/plat-tb10x/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o lib/lib.a arch/arc/lib/lib.a /usr/local/lib/gcc/arc-elf32/4.8.0/libgcc.a lib/built-in.o arch/arc/lib/built-in.o /usr/local/lib/gcc/arc-elf32/4.8.0/libgcc.a drivers/built-in.o sound/built-in.o firmware/built-in.o net/built-in.o --end-group
  /usr/local/bin/arc-elf32-ld: Error: Overflow detected in relocation value;
  /usr/local/bin/arc-elf32-ld: Relocation value should be between 1048575 and -1048576 whereas it  2404264
  /usr/local/bin/arc-elf32-ld: Global symbol: "panic".
  /usr/local/bin/arc-elf32-ld:
  Relocation type is:R_ARC_S21W_PCREL
  FileName:arch/arc/built-in.o
  Section Name:.text
  Offset in Section:1716
  /usr/local/bin/arc-elf32-ld: final link failed: Bad value
  make: *** [vmlinux] Error 1

  [root@gchenlinux binutils]# arc-elf32-ld -v
  GNU ld (GNU Binutils) 2.23.2

  [root@gchenlinux binutils]# arc-elf32-as -v
  GNU assembler version 2.23.2 (arc-elf32) using BFD version (GNU Binutils) 2.23.2

GCC (2 issues, and gcc information):

    CC      drivers/rtc/systohc.o
  drivers/rtc/systohc.c: In function 'rtc_set_ntp_time':
  drivers/rtc/systohc.c:44:1: internal compiler error: in arc_ifcvt, at config/arc/arc.c:8315
   }
   ^
  0x939c94 arc_ifcvt
  	../../gcc/gcc/config/arc/arc.c:8315
  0x93a394 arc_reorg
  	../../gcc/gcc/config/arc/arc.c:5985
  0x7517d9 rest_of_handle_machine_reorg
  	../../gcc/gcc/reorg.c:3927
  Please submit a full bug report,
  with preprocessed source if appropriate.
  Please include the complete backtrace with any bug report.
  See <http://gcc.gnu.org/bugs.html> for instructions.
  make[2]: *** [drivers/rtc/systohc.o] Error 1
  make[1]: *** [drivers/rtc] Error 2
  make: *** [drivers] Error 2
  
  
    CC [M]  drivers/target/target_core_pr.o
  drivers/target/target_core_pr.c: In function 'target_scsi3_emulate_pr_in':
  drivers/target/target_core_pr.c:4033:1: error: unrecognizable insn:
   }
   ^
  (insn 846 194 196 12 (set (reg:QI 1 r1)
          (subreg:QI (mem/j/c:DI (plus:SI (reg/v/f:SI 2 r2 [orig:199 pr_reg ] [199])
                      (const_int 576 [0x240])) [0 pr_reg_50->pr_res_key+0 S8 A32]) 7)) drivers/target/target_core_pr.c:3677 -1
       (nil))
  drivers/target/target_core_pr.c:4033:1: internal compiler error: in extract_insn, at recog.c:2151
  0x758fb5 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
  	../../gcc/gcc/rtl-error.c:109
  0x758fe9 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
  	../../gcc/gcc/rtl-error.c:117
  0x726e83 extract_insn(rtx_def*)
  	../../gcc/gcc/recog.c:2151
  0x726ef4 extract_insn_cached(rtx_def*)
  	../../gcc/gcc/recog.c:2054
  0x5fe026 cleanup_subreg_operands(rtx_def*)
  	../../gcc/gcc/final.c:3305
  0x750c2e reload(rtx_def*, int)
  	../../gcc/gcc/reload1.c:1240
  0x68e703 do_reload
  	../../gcc/gcc/ira.c:4631
  0x68e703 rest_of_handle_reload
  	../../gcc/gcc/ira.c:4731
  Please submit a full bug report,
  with preprocessed source if appropriate.
  Please include the complete backtrace with any bug report.
  See <http://gcc.gnu.org/bugs.html> for instructions.
  make[2]: *** [drivers/target/target_core_pr.o] Error 1
  make[1]: *** [drivers/target] Error 2
  make: *** [drivers] Error 2
  
  
  [root@gchenlinux linux-next]# /usr/local/bin/arc-elf32-gcc -v
  Using built-in specs.
  COLLECT_GCC=/usr/local/bin/arc-elf32-gcc
  COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/arc-elf32/4.8.0/lto-wrapper
  Target: arc-elf32
  Configured with: ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 --disable-multilib --with-headers=../newlib/newlib/libc/include
  Thread model: single
  gcc version 4.8.0 (GCC) 

-------------------------information end------------------------------


Thanks.
-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-10-23  2:00       ` Chen Gang
@ 2013-10-23  2:48         ` Joern Rennecke
  2013-10-23  3:10           ` Chen Gang
  2013-10-23  2:51         ` [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code Francois Bedard
  1 sibling, 1 reply; 33+ messages in thread
From: Joern Rennecke @ 2013-10-23  2:48 UTC (permalink / raw)
  To: Chen Gang
  Cc: Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

On 23 October 2013 03:00, Chen Gang <gang.chen@asianux.com> wrote:

> Binutils (1 issue, ld and as information):
>
>   when calling panic(), printk(), or memset() with R_ARC_S21W_PCREL, it may be overflow (I guess it need be R_ARC_S25W_PCREL).
>
>   /usr/local/bin/arc-elf32-ld --build-id -X -o .tmp_vmlinux1 -T /android/public-kernel/linux-next/arch/arc/kernel/vmlinux.lds arch/arc/kernel/head.o init/built-in.o --start-group usr/built-in.o arch/arc/built-in.o arch/arc/boot/dts/built-in.o arch/arc/plat-arcfpga/built-in.o arch/arc/plat-tb10x/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o lib/lib.a arch/arc/lib/lib.a /usr/local/lib/gcc/arc-elf32/4.8.0/libgcc.a lib/built-in.o arch/arc/lib/built-in.o /usr/local/lib/gcc/arc-elf32/4.8.0/libgcc.a drivers/built-in.o sound/built-in.o firmware/built-in.o net/built-in.o --end-group
>   /usr/local/bin/arc-elf32-ld: Error: Overflow detected in relocation value;
>   /usr/local/bin/arc-elf32-ld: Relocation value should be between 1048575 and -1048576 whereas it  2404264
>   /usr/local/bin/arc-elf32-ld: Global symbol: "panic".
>   /usr/local/bin/arc-elf32-ld:
>   Relocation type is:R_ARC_S21W_PCREL
>   FileName:arch/arc/built-in.o
>   Section Name:.text
>   Offset in Section:1716
>   /usr/local/bin/arc-elf32-ld: final link failed: Bad value
>   make: *** [vmlinux] Error 1

That just means that the image is too large to allow conditional
pc-relative calls (tail/sibcalls) or otherwise.

You can avoid generating them for functions with out a relevant
attribute with -mmedium-calls .



> GCC (2 issues, and gcc information):
>
>     CC      drivers/rtc/systohc.o
>   drivers/rtc/systohc.c: In function 'rtc_set_ntp_time':
>   drivers/rtc/systohc.c:44:1: internal compiler error: in arc_ifcvt, at config/arc/arc.c:8315
>    }
>    ^
>   0x939c94 arc_ifcvt
>         ../../gcc/gcc/config/arc/arc.c:8315
>   0x93a394 arc_reorg
>         ../../gcc/gcc/config/arc/arc.c:5985
>   0x7517d9 rest_of_handle_machine_reorg
>         ../../gcc/gcc/reorg.c:3927
>   Please submit a full bug report,
>   with preprocessed source if appropriate.
>   Please include the complete backtrace with any bug report.
>   See <http://gcc.gnu.org/bugs.html> for instructions.
>   make[2]: *** [drivers/rtc/systohc.o] Error 1
>   make[1]: *** [drivers/rtc] Error 2
>   make: *** [drivers] Error 2
>
>
>     CC [M]  drivers/target/target_core_pr.o
>   drivers/target/target_core_pr.c: In function 'target_scsi3_emulate_pr_in':
>   drivers/target/target_core_pr.c:4033:1: error: unrecognizable insn:
>    }
>    ^
>   (insn 846 194 196 12 (set (reg:QI 1 r1)
>           (subreg:QI (mem/j/c:DI (plus:SI (reg/v/f:SI 2 r2 [orig:199 pr_reg ] [199])
>                       (const_int 576 [0x240])) [0 pr_reg_50->pr_res_key+0 S8 A32]) 7)) drivers/target/target_core_pr.c:3677 -1
>        (nil))
>   drivers/target/target_core_pr.c:4033:1: internal compiler error: in extract_insn, at recog.c:2151
>   0x758fb5 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
>         ../../gcc/gcc/rtl-error.c:109
>   0x758fe9 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
>         ../../gcc/gcc/rtl-error.c:117
>   0x726e83 extract_insn(rtx_def*)
>         ../../gcc/gcc/recog.c:2151
>   0x726ef4 extract_insn_cached(rtx_def*)
>         ../../gcc/gcc/recog.c:2054
>   0x5fe026 cleanup_subreg_operands(rtx_def*)
>         ../../gcc/gcc/final.c:3305
>   0x750c2e reload(rtx_def*, int)
>         ../../gcc/gcc/reload1.c:1240
>   0x68e703 do_reload
>         ../../gcc/gcc/ira.c:4631
>   0x68e703 rest_of_handle_reload
>         ../../gcc/gcc/ira.c:4731
>   Please submit a full bug report,
>   with preprocessed source if appropriate.
>   Please include the complete backtrace with any bug report.
>   See <http://gcc.gnu.org/bugs.html> for instructions.
>   make[2]: *** [drivers/target/target_core_pr.o] Error 1
>   make[1]: *** [drivers/target] Error 2
>   make: *** [drivers] Error 2

Can these issues be reproduced with the lastest gcc version?  If so,
can you provide preprocessed source of the testcases and the compiler
flags to trigger the ICEs?

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-10-23  2:00       ` Chen Gang
  2013-10-23  2:48         ` Joern Rennecke
@ 2013-10-23  2:51         ` Francois Bedard
  2013-10-23  3:12           ` Chen Gang
  1 sibling, 1 reply; 33+ messages in thread
From: Francois Bedard @ 2013-10-23  2:51 UTC (permalink / raw)
  To: Chen Gang, Vineet Gupta
  Cc: jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, joern Rennecke

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 6917 bytes --]

Hi Chen,

Our sources are on github at https://github.com/foss-for-synopsys-dwc-arc-processors  and you can report problems by opening "Issues" with command lines and log outputs below against relevant toolchain component:

For GCC:  https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues?state=open
For binutils: https://github.com/foss-for-synopsys-dwc-arc-processors/binutils/issues?page=1&state=open 

Go ahead and officially file these and we'll take a look at them. 

Thanks,

Francois

-----Original Message-----
From: Chen Gang [mailto:gang.chen@asianux.com] 
Sent: Tuesday, October 22, 2013 7:00 PM
To: Vineet Gupta
Cc: jeremy.bennett@embecosm.com; linux-kernel@vger.kernel.org; Claudiu Zissulescu; Francois Bedard; joern Rennecke
Subject: Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.

On 09/23/2013 02:53 PM, Chen Gang wrote:
> On 09/23/2013 02:39 PM, Vineet Gupta wrote:
>> Hi Chen,
>>
...
>>
>> Jeremy, Claudiu, Joern maintain the gcc and rest of GNU toolchain 
>> ports for ARC so please add them to any future posting on toolchain issues.
>>


Firstly, sorry for so late to continue arc. Now I use latest tool-chain (content gcc-4.8.0) to compile kernel with allmodconfig, and find three tool chain issues (2 for gcc, 1 for binutils).

And also excuse me, I am still not quite sure where I should sent these information to, although you have mentioned some valuable information.

I just list the issue details below, if necessary, please provide more details where these information should be sent to (e.g. bugzilla), and I will/should follow and work with related tool chain guys. thanks.


-------------------------information begin----------------------------

Operation:

  for Linux next-20130927 tree
  make ARCH=arc CROSS_COMPILE=/usr/local/bin/arc-elf32- allmodconfig
  make ARCH=arc CROSS_COMPILE=/usr/local/bin/arc-elf32-

Binutils (1 issue, ld and as information):

  when calling panic(), printk(), or memset() with R_ARC_S21W_PCREL, it may be overflow (I guess it need be R_ARC_S25W_PCREL).

  /usr/local/bin/arc-elf32-ld --build-id -X -o .tmp_vmlinux1 -T /android/public-kernel/linux-next/arch/arc/kernel/vmlinux.lds arch/arc/kernel/head.o init/built-in.o --start-group usr/built-in.o arch/arc/built-in.o arch/arc/boot/dts/built-in.o arch/arc/plat-arcfpga/built-in.o arch/arc/plat-tb10x/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o lib/lib.a arch/arc/lib/lib.a /usr/local/lib/gcc/arc-elf32/4.8.0/libgcc.a lib/built-in.o arch/arc/lib/built-in.o /usr/local/lib/gcc/arc-elf32/4.8.0/libgcc.a drivers/built-in.o sound/built-in.o firmware/built-in.o net/built-in.o --end-group
  /usr/local/bin/arc-elf32-ld: Error: Overflow detected in relocation value;
  /usr/local/bin/arc-elf32-ld: Relocation value should be between 1048575 and -1048576 whereas it  2404264
  /usr/local/bin/arc-elf32-ld: Global symbol: "panic".
  /usr/local/bin/arc-elf32-ld:
  Relocation type is:R_ARC_S21W_PCREL
  FileName:arch/arc/built-in.o
  Section Name:.text
  Offset in Section:1716
  /usr/local/bin/arc-elf32-ld: final link failed: Bad value
  make: *** [vmlinux] Error 1

  [root@gchenlinux binutils]# arc-elf32-ld -v
  GNU ld (GNU Binutils) 2.23.2

  [root@gchenlinux binutils]# arc-elf32-as -v
  GNU assembler version 2.23.2 (arc-elf32) using BFD version (GNU Binutils) 2.23.2

GCC (2 issues, and gcc information):

    CC      drivers/rtc/systohc.o
  drivers/rtc/systohc.c: In function 'rtc_set_ntp_time':
  drivers/rtc/systohc.c:44:1: internal compiler error: in arc_ifcvt, at config/arc/arc.c:8315
   }
   ^
  0x939c94 arc_ifcvt
  	../../gcc/gcc/config/arc/arc.c:8315
  0x93a394 arc_reorg
  	../../gcc/gcc/config/arc/arc.c:5985
  0x7517d9 rest_of_handle_machine_reorg
  	../../gcc/gcc/reorg.c:3927
  Please submit a full bug report,
  with preprocessed source if appropriate.
  Please include the complete backtrace with any bug report.
  See <http://gcc.gnu.org/bugs.html> for instructions.
  make[2]: *** [drivers/rtc/systohc.o] Error 1
  make[1]: *** [drivers/rtc] Error 2
  make: *** [drivers] Error 2
  
  
    CC [M]  drivers/target/target_core_pr.o
  drivers/target/target_core_pr.c: In function 'target_scsi3_emulate_pr_in':
  drivers/target/target_core_pr.c:4033:1: error: unrecognizable insn:
   }
   ^
  (insn 846 194 196 12 (set (reg:QI 1 r1)
          (subreg:QI (mem/j/c:DI (plus:SI (reg/v/f:SI 2 r2 [orig:199 pr_reg ] [199])
                      (const_int 576 [0x240])) [0 pr_reg_50->pr_res_key+0 S8 A32]) 7)) drivers/target/target_core_pr.c:3677 -1
       (nil))
  drivers/target/target_core_pr.c:4033:1: internal compiler error: in extract_insn, at recog.c:2151
  0x758fb5 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
  	../../gcc/gcc/rtl-error.c:109
  0x758fe9 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
  	../../gcc/gcc/rtl-error.c:117
  0x726e83 extract_insn(rtx_def*)
  	../../gcc/gcc/recog.c:2151
  0x726ef4 extract_insn_cached(rtx_def*)
  	../../gcc/gcc/recog.c:2054
  0x5fe026 cleanup_subreg_operands(rtx_def*)
  	../../gcc/gcc/final.c:3305
  0x750c2e reload(rtx_def*, int)
  	../../gcc/gcc/reload1.c:1240
  0x68e703 do_reload
  	../../gcc/gcc/ira.c:4631
  0x68e703 rest_of_handle_reload
  	../../gcc/gcc/ira.c:4731
  Please submit a full bug report,
  with preprocessed source if appropriate.
  Please include the complete backtrace with any bug report.
  See <http://gcc.gnu.org/bugs.html> for instructions.
  make[2]: *** [drivers/target/target_core_pr.o] Error 1
  make[1]: *** [drivers/target] Error 2
  make: *** [drivers] Error 2
  
  
  [root@gchenlinux linux-next]# /usr/local/bin/arc-elf32-gcc -v
  Using built-in specs.
  COLLECT_GCC=/usr/local/bin/arc-elf32-gcc
  COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/arc-elf32/4.8.0/lto-wrapper
  Target: arc-elf32
  Configured with: ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 --disable-multilib --with-headers=../newlib/newlib/libc/include
  Thread model: single
  gcc version 4.8.0 (GCC) 

-------------------------information end------------------------------


Thanks.
--
Chen Gang
ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-10-23  2:48         ` Joern Rennecke
@ 2013-10-23  3:10           ` Chen Gang
  2013-10-23 11:14             ` Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-10-23  3:10 UTC (permalink / raw)
  To: Joern Rennecke
  Cc: Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

On 10/23/2013 10:48 AM, Joern Rennecke wrote:
> On 23 October 2013 03:00, Chen Gang <gang.chen@asianux.com> wrote:
> 
>> Binutils (1 issue, ld and as information):
>>
>>   when calling panic(), printk(), or memset() with R_ARC_S21W_PCREL, it may be overflow (I guess it need be R_ARC_S25W_PCREL).
>>
>>   /usr/local/bin/arc-elf32-ld --build-id -X -o .tmp_vmlinux1 -T /android/public-kernel/linux-next/arch/arc/kernel/vmlinux.lds arch/arc/kernel/head.o init/built-in.o --start-group usr/built-in.o arch/arc/built-in.o arch/arc/boot/dts/built-in.o arch/arc/plat-arcfpga/built-in.o arch/arc/plat-tb10x/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o lib/lib.a arch/arc/lib/lib.a /usr/local/lib/gcc/arc-elf32/4.8.0/libgcc.a lib/built-in.o arch/arc/lib/built-in.o /usr/local/lib/gcc/arc-elf32/4.8.0/libgcc.a drivers/built-in.o sound/built-in.o firmware/built-in.o net/built-in.o --end-group
>>   /usr/local/bin/arc-elf32-ld: Error: Overflow detected in relocation value;
>>   /usr/local/bin/arc-elf32-ld: Relocation value should be between 1048575 and -1048576 whereas it  2404264
>>   /usr/local/bin/arc-elf32-ld: Global symbol: "panic".
>>   /usr/local/bin/arc-elf32-ld:
>>   Relocation type is:R_ARC_S21W_PCREL
>>   FileName:arch/arc/built-in.o
>>   Section Name:.text
>>   Offset in Section:1716
>>   /usr/local/bin/arc-elf32-ld: final link failed: Bad value
>>   make: *** [vmlinux] Error 1
> 
> That just means that the image is too large to allow conditional
> pc-relative calls (tail/sibcalls) or otherwise.
> 
> You can avoid generating them for functions with out a relevant
> attribute with -mmedium-calls .
> 

OK, thanks, I will/should try (it should be OK).

BTW: after pass this, kernel may pass the whole cross compiling with
allmodconfig (the other 2 gcc issues, can reconstruct source code to
bypass).

> 
> 
>> GCC (2 issues, and gcc information):
>>
>>     CC      drivers/rtc/systohc.o
>>   drivers/rtc/systohc.c: In function 'rtc_set_ntp_time':
>>   drivers/rtc/systohc.c:44:1: internal compiler error: in arc_ifcvt, at config/arc/arc.c:8315
>>    }
>>    ^
>>   0x939c94 arc_ifcvt
>>         ../../gcc/gcc/config/arc/arc.c:8315
>>   0x93a394 arc_reorg
>>         ../../gcc/gcc/config/arc/arc.c:5985
>>   0x7517d9 rest_of_handle_machine_reorg
>>         ../../gcc/gcc/reorg.c:3927
>>   Please submit a full bug report,
>>   with preprocessed source if appropriate.
>>   Please include the complete backtrace with any bug report.
>>   See <http://gcc.gnu.org/bugs.html> for instructions.
>>   make[2]: *** [drivers/rtc/systohc.o] Error 1
>>   make[1]: *** [drivers/rtc] Error 2
>>   make: *** [drivers] Error 2
>>
>>
>>     CC [M]  drivers/target/target_core_pr.o
>>   drivers/target/target_core_pr.c: In function 'target_scsi3_emulate_pr_in':
>>   drivers/target/target_core_pr.c:4033:1: error: unrecognizable insn:
>>    }
>>    ^
>>   (insn 846 194 196 12 (set (reg:QI 1 r1)
>>           (subreg:QI (mem/j/c:DI (plus:SI (reg/v/f:SI 2 r2 [orig:199 pr_reg ] [199])
>>                       (const_int 576 [0x240])) [0 pr_reg_50->pr_res_key+0 S8 A32]) 7)) drivers/target/target_core_pr.c:3677 -1
>>        (nil))
>>   drivers/target/target_core_pr.c:4033:1: internal compiler error: in extract_insn, at recog.c:2151
>>   0x758fb5 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
>>         ../../gcc/gcc/rtl-error.c:109
>>   0x758fe9 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
>>         ../../gcc/gcc/rtl-error.c:117
>>   0x726e83 extract_insn(rtx_def*)
>>         ../../gcc/gcc/recog.c:2151
>>   0x726ef4 extract_insn_cached(rtx_def*)
>>         ../../gcc/gcc/recog.c:2054
>>   0x5fe026 cleanup_subreg_operands(rtx_def*)
>>         ../../gcc/gcc/final.c:3305
>>   0x750c2e reload(rtx_def*, int)
>>         ../../gcc/gcc/reload1.c:1240
>>   0x68e703 do_reload
>>         ../../gcc/gcc/ira.c:4631
>>   0x68e703 rest_of_handle_reload
>>         ../../gcc/gcc/ira.c:4731
>>   Please submit a full bug report,
>>   with preprocessed source if appropriate.
>>   Please include the complete backtrace with any bug report.
>>   See <http://gcc.gnu.org/bugs.html> for instructions.
>>   make[2]: *** [drivers/target/target_core_pr.o] Error 1
>>   make[1]: *** [drivers/target] Error 2
>>   make: *** [drivers] Error 2
> 
> Can these issues be reproduced with the lastest gcc version?  If so,
> can you provide preprocessed source of the testcases and the compiler
> flags to trigger the ICEs?
> 
> 

OK, thanks, I will/should try, hope I can finish within this month
(2013-10-31).

Thanks.
-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-10-23  2:51         ` [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code Francois Bedard
@ 2013-10-23  3:12           ` Chen Gang
  2013-10-30  1:43             ` Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-10-23  3:12 UTC (permalink / raw)
  To: Francois Bedard
  Cc: Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	joern Rennecke

On 10/23/2013 10:51 AM, Francois Bedard wrote:
> Our sources are on github at https://github.com/foss-for-synopsys-dwc-arc-processors  and you can report problems by opening "Issues" with command lines and log outputs below against relevant toolchain component:
> 
> For GCC:  https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues?state=open
> For binutils: https://github.com/foss-for-synopsys-dwc-arc-processors/binutils/issues?page=1&state=open 
> 
> Go ahead and officially file these and we'll take a look at them. 

I will/should go ahead, hope I can finish reporting them within this
week (2013-10-27)

Thanks.
-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-10-23  3:10           ` Chen Gang
@ 2013-10-23 11:14             ` Chen Gang
  2013-10-24  5:31               ` [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL() Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-10-23 11:14 UTC (permalink / raw)
  To: Joern Rennecke
  Cc: Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

On 10/23/2013 11:10 AM, Chen Gang wrote:
> On 10/23/2013 10:48 AM, Joern Rennecke wrote:
>>
>> That just means that the image is too large to allow conditional
>> pc-relative calls (tail/sibcalls) or otherwise.
>>
>> You can avoid generating them for functions with out a relevant
>> attribute with -mmedium-calls .
>>

After try, it is OK (pass compiling), and I will continue the arc kernel
and try to finish allmodconfig cross compiling.

Thanks again.

> OK, thanks, I will/should try (it should be OK).
> 
> BTW: after pass this, kernel may pass the whole cross compiling with
> allmodconfig (the other 2 gcc issues, can reconstruct source code to
> bypass).
> 

-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-23 11:14             ` Chen Gang
@ 2013-10-24  5:31               ` Chen Gang
  2013-10-24  6:03                 ` Richard Weinberger
                                   ` (2 more replies)
  0 siblings, 3 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-24  5:31 UTC (permalink / raw)
  To: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai
  Cc: Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

For some architectures, tool chain is not smart enough to recognize the
macro with multiple lines (e.g. arc tool chain), and for common ".S"
file, this kind of macro is also rarely used.

So expand the related contents of macro to let it pass compiling (can
use "arc-elf32-objdump -x" to know about it).

The related error (allmodconfig for arc):

    LD      init/built-in.o
  kernel/built-in.o: In function `load_module_signing_keys':
  kernel/modsign_pubkey.c:66: undefined reference to `modsign_certificate_list'
  kernel/modsign_pubkey.c:71: undefined reference to `modsign_certificate_list_end'
  kernel/modsign_pubkey.c:67: undefined reference to `modsign_certificate_list_end'

The related tool chain information:

  [root@gchenlinux linux-next]# arc-elf32-as -v
  GNU assembler version 2.23.2 (arc-elf32) using BFD version (GNU Binutils) 2.23.2
  [root@gchenlinux linux-next]# arc-elf32-ld -v
  GNU ld (GNU Binutils) 2.23.2
  [root@gchenlinux linux-next]# arc-elf32-gcc -v
  Using built-in specs.
  COLLECT_GCC=arc-elf32-gcc
  COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/arc-elf32/4.8.0/lto-wrapper
  Target: arc-elf32
  Configured with: ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 --disable-multilib --with-headers=../newlib/newlib/libc/include
  Thread model: single
  gcc version 4.8.0 (GCC) 


Signed-off-by: Chen Gang <gang.chen@asianux.com>
---
 kernel/modsign_certificate.S |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/kernel/modsign_certificate.S b/kernel/modsign_certificate.S
index 4a9a86d..1967dcd 100644
--- a/kernel/modsign_certificate.S
+++ b/kernel/modsign_certificate.S
@@ -1,12 +1,10 @@
 #include <linux/export.h>
 
-#define GLOBAL(name)	\
-	.globl VMLINUX_SYMBOL(name);	\
-	VMLINUX_SYMBOL(name):
-
 	.section ".init.data","aw"
 
-GLOBAL(modsign_certificate_list)
+	.globl VMLINUX_SYMBOL(modsign_certificate_list)
+VMLINUX_SYMBOL(modsign_certificate_list):
 	.incbin "signing_key.x509"
 	.incbin "extra_certificates"
-GLOBAL(modsign_certificate_list_end)
+	.globl VMLINUX_SYMBOL(modsign_certificate_list_end)
+VMLINUX_SYMBOL(modsign_certificate_list_end):
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-24  5:31               ` [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL() Chen Gang
@ 2013-10-24  6:03                 ` Richard Weinberger
  2013-10-24  6:26                   ` Chen Gang
  2013-10-24 17:28                   ` Portable assmbler code - newline (was Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()) Vineet Gupta
  2013-10-24 15:29                 ` [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL() Josh Boyer
  2013-10-29  2:17                 ` [PATCH v2] " Chen Gang
  2 siblings, 2 replies; 33+ messages in thread
From: Richard Weinberger @ 2013-10-24  6:03 UTC (permalink / raw)
  To: Chen Gang
  Cc: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai,
	Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

On Thu, Oct 24, 2013 at 7:31 AM, Chen Gang <gang.chen@asianux.com> wrote:
> For some architectures, tool chain is not smart enough to recognize the
> macro with multiple lines (e.g. arc tool chain), and for common ".S"
> file, this kind of macro is also rarely used.

Does not "not smart enough" mean than the said toolchain is broken/buggy
or is the kernel using an unsupported notation?

> So expand the related contents of macro to let it pass compiling (can
> use "arc-elf32-objdump -x" to know about it).
>
> The related error (allmodconfig for arc):
>
>     LD      init/built-in.o
>   kernel/built-in.o: In function `load_module_signing_keys':
>   kernel/modsign_pubkey.c:66: undefined reference to `modsign_certificate_list'
>   kernel/modsign_pubkey.c:71: undefined reference to `modsign_certificate_list_end'
>   kernel/modsign_pubkey.c:67: undefined reference to `modsign_certificate_list_end'
>
> The related tool chain information:
>
>   [root@gchenlinux linux-next]# arc-elf32-as -v
>   GNU assembler version 2.23.2 (arc-elf32) using BFD version (GNU Binutils) 2.23.2
>   [root@gchenlinux linux-next]# arc-elf32-ld -v
>   GNU ld (GNU Binutils) 2.23.2
>   [root@gchenlinux linux-next]# arc-elf32-gcc -v
>   Using built-in specs.
>   COLLECT_GCC=arc-elf32-gcc
>   COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/arc-elf32/4.8.0/lto-wrapper
>   Target: arc-elf32
>   Configured with: ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 --disable-multilib --with-headers=../newlib/newlib/libc/include
>   Thread model: single
>   gcc version 4.8.0 (GCC)
>
>
> Signed-off-by: Chen Gang <gang.chen@asianux.com>
> ---
>  kernel/modsign_certificate.S |   10 ++++------
>  1 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/kernel/modsign_certificate.S b/kernel/modsign_certificate.S
> index 4a9a86d..1967dcd 100644
> --- a/kernel/modsign_certificate.S
> +++ b/kernel/modsign_certificate.S
> @@ -1,12 +1,10 @@
>  #include <linux/export.h>
>
> -#define GLOBAL(name)   \
> -       .globl VMLINUX_SYMBOL(name);    \
> -       VMLINUX_SYMBOL(name):
> -
>         .section ".init.data","aw"
>
> -GLOBAL(modsign_certificate_list)
> +       .globl VMLINUX_SYMBOL(modsign_certificate_list)
> +VMLINUX_SYMBOL(modsign_certificate_list):
>         .incbin "signing_key.x509"
>         .incbin "extra_certificates"
> -GLOBAL(modsign_certificate_list_end)
> +       .globl VMLINUX_SYMBOL(modsign_certificate_list_end)
> +VMLINUX_SYMBOL(modsign_certificate_list_end):
> --
> 1.7.7.6
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/



-- 
Thanks,
//richard

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-24  6:03                 ` Richard Weinberger
@ 2013-10-24  6:26                   ` Chen Gang
  2013-10-24  6:44                     ` Richard Weinberger
  2013-10-24 17:28                   ` Portable assmbler code - newline (was Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()) Vineet Gupta
  1 sibling, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-10-24  6:26 UTC (permalink / raw)
  To: Richard Weinberger
  Cc: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai,
	Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

On 10/24/2013 02:03 PM, Richard Weinberger wrote:
> On Thu, Oct 24, 2013 at 7:31 AM, Chen Gang <gang.chen@asianux.com> wrote:
>> For some architectures, tool chain is not smart enough to recognize the
>> macro with multiple lines (e.g. arc tool chain), and for common ".S"
>> file, this kind of macro is also rarely used.
> 
> Does not "not smart enough" mean than the said toolchain is broken/buggy
> or is the kernel using an unsupported notation?
> 

Hmm... maybe my comments is not quite precise, what I want to say is:

 - another architectures tool chain (e.g. arm-linux-gnueabi-) support it.
   but our tool chain (arc-elf32-) will cause issue.

 - in kernel source, excluding "arch/" sub directory, excep this file and one x86 drivers, no one use macro in this way, now.
   and in "arch/arc/" sub-directory, no one use macro in this way, too.
   the related find command: "find | grep "\.S$" | grep -v "/arch/"  | grep -v "Documentation" | xargs grep define"

So at least, for kernel itself, better change the using way (only 2
areas use the macro, and the macro only contents 2 lines, so it is
acceptable enough to expand it).


Anyway, maybe it is also the tool chain's bug (so I include related arc
tool chain guys in this mail).


Thanks.

>> So expand the related contents of macro to let it pass compiling (can
>> use "arc-elf32-objdump -x" to know about it).
>>
>> The related error (allmodconfig for arc):
>>
>>     LD      init/built-in.o
>>   kernel/built-in.o: In function `load_module_signing_keys':
>>   kernel/modsign_pubkey.c:66: undefined reference to `modsign_certificate_list'
>>   kernel/modsign_pubkey.c:71: undefined reference to `modsign_certificate_list_end'
>>   kernel/modsign_pubkey.c:67: undefined reference to `modsign_certificate_list_end'
>>
>> The related tool chain information:
>>
>>   [root@gchenlinux linux-next]# arc-elf32-as -v
>>   GNU assembler version 2.23.2 (arc-elf32) using BFD version (GNU Binutils) 2.23.2
>>   [root@gchenlinux linux-next]# arc-elf32-ld -v
>>   GNU ld (GNU Binutils) 2.23.2
>>   [root@gchenlinux linux-next]# arc-elf32-gcc -v
>>   Using built-in specs.
>>   COLLECT_GCC=arc-elf32-gcc
>>   COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/arc-elf32/4.8.0/lto-wrapper
>>   Target: arc-elf32
>>   Configured with: ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 --disable-multilib --with-headers=../newlib/newlib/libc/include
>>   Thread model: single
>>   gcc version 4.8.0 (GCC)
>>
>>
>> Signed-off-by: Chen Gang <gang.chen@asianux.com>
>> ---
>>  kernel/modsign_certificate.S |   10 ++++------
>>  1 files changed, 4 insertions(+), 6 deletions(-)
>>
>> diff --git a/kernel/modsign_certificate.S b/kernel/modsign_certificate.S
>> index 4a9a86d..1967dcd 100644
>> --- a/kernel/modsign_certificate.S
>> +++ b/kernel/modsign_certificate.S
>> @@ -1,12 +1,10 @@
>>  #include <linux/export.h>
>>
>> -#define GLOBAL(name)   \
>> -       .globl VMLINUX_SYMBOL(name);    \
>> -       VMLINUX_SYMBOL(name):
>> -
>>         .section ".init.data","aw"
>>
>> -GLOBAL(modsign_certificate_list)
>> +       .globl VMLINUX_SYMBOL(modsign_certificate_list)
>> +VMLINUX_SYMBOL(modsign_certificate_list):
>>         .incbin "signing_key.x509"
>>         .incbin "extra_certificates"
>> -GLOBAL(modsign_certificate_list_end)
>> +       .globl VMLINUX_SYMBOL(modsign_certificate_list_end)
>> +VMLINUX_SYMBOL(modsign_certificate_list_end):
>> --
>> 1.7.7.6
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at  http://www.tux.org/lkml/
> 
> 
> 


-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-24  6:26                   ` Chen Gang
@ 2013-10-24  6:44                     ` Richard Weinberger
  2013-10-24  7:40                       ` Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Richard Weinberger @ 2013-10-24  6:44 UTC (permalink / raw)
  To: Chen Gang
  Cc: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai,
	Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

Am 24.10.2013 08:26, schrieb Chen Gang:
> On 10/24/2013 02:03 PM, Richard Weinberger wrote:
> Anyway, maybe it is also the tool chain's bug (so I include related arc
> tool chain guys in this mail).

That's exactly my point. Before you blindly patch the kernel just to make it
somehow build you need to find the root cause.
Do you even have an ARC board to test the kernel?

Thanks,
//richard


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-24  6:44                     ` Richard Weinberger
@ 2013-10-24  7:40                       ` Chen Gang
  0 siblings, 0 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-24  7:40 UTC (permalink / raw)
  To: Richard Weinberger
  Cc: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai,
	Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

On 10/24/2013 02:44 PM, Richard Weinberger wrote:
> Am 24.10.2013 08:26, schrieb Chen Gang:
>> On 10/24/2013 02:03 PM, Richard Weinberger wrote:
>> Anyway, maybe it is also the tool chain's bug (so I include related arc
>> tool chain guys in this mail).
> 
> That's exactly my point. Before you blindly patch the kernel just to make it
> somehow build you need to find the root cause.
> Do you even have an ARC board to test the kernel?
> 

Hmm... I don't think it is blindly, at least, we can not say: "if tool
chain has issues, we should not use it, if we have no related hard
wares, it is useless to compile them".

We are focus on the contribution, not on whether others have issues or
'qualifications', if we are sure this patch should be useful, we need go
ahead.

For normal members, it is not quite important, but for managerial
members or a company, of cause, they will/should understand these rules.


> Thanks,
> //richard
> 
> 
> 

Thanks.
-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-24  5:31               ` [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL() Chen Gang
  2013-10-24  6:03                 ` Richard Weinberger
@ 2013-10-24 15:29                 ` Josh Boyer
  2013-10-26  2:42                   ` Chen Gang
  2013-10-29  2:17                 ` [PATCH v2] " Chen Gang
  2 siblings, 1 reply; 33+ messages in thread
From: Josh Boyer @ 2013-10-24 15:29 UTC (permalink / raw)
  To: Chen Gang
  Cc: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai,
	Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

On Wed, Oct 23, 2013 at 10:31 PM, Chen Gang <gang.chen@asianux.com> wrote:
> For some architectures, tool chain is not smart enough to recognize the
> macro with multiple lines (e.g. arc tool chain), and for common ".S"
> file, this kind of macro is also rarely used.
>
> So expand the related contents of macro to let it pass compiling (can
> use "arc-elf32-objdump -x" to know about it).
>
> The related error (allmodconfig for arc):
>
>     LD      init/built-in.o
>   kernel/built-in.o: In function `load_module_signing_keys':
>   kernel/modsign_pubkey.c:66: undefined reference to `modsign_certificate_list'
>   kernel/modsign_pubkey.c:71: undefined reference to `modsign_certificate_list_end'
>   kernel/modsign_pubkey.c:67: undefined reference to `modsign_certificate_list_end'
>
> The related tool chain information:
>
>   [root@gchenlinux linux-next]# arc-elf32-as -v
>   GNU assembler version 2.23.2 (arc-elf32) using BFD version (GNU Binutils) 2.23.2
>   [root@gchenlinux linux-next]# arc-elf32-ld -v
>   GNU ld (GNU Binutils) 2.23.2
>   [root@gchenlinux linux-next]# arc-elf32-gcc -v
>   Using built-in specs.
>   COLLECT_GCC=arc-elf32-gcc
>   COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/arc-elf32/4.8.0/lto-wrapper
>   Target: arc-elf32
>   Configured with: ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 --disable-multilib --with-headers=../newlib/newlib/libc/include
>   Thread model: single
>   gcc version 4.8.0 (GCC)

Is this only an issue with using multi-line macro definitions in .S
files?  The practice of using multi-line macro definitions isn't rare.
 Look at e.g. include/linux/module.h, and a number of other header
files.

This seems like a toolchain bug that should be fixable if it works for
other architectures.

josh

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Portable assmbler code - newline (was Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL())
  2013-10-24  6:03                 ` Richard Weinberger
  2013-10-24  6:26                   ` Chen Gang
@ 2013-10-24 17:28                   ` Vineet Gupta
  2013-10-24 19:41                     ` Geert Uytterhoeven
  1 sibling, 1 reply; 33+ messages in thread
From: Vineet Gupta @ 2013-10-24 17:28 UTC (permalink / raw)
  To: Richard Weinberger, Chen Gang
  Cc: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai,
	Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, Sam Ravnborg, Joe Perches, linux-arch

+CC linux-arch

On 10/24/2013 11:33 AM, Richard Weinberger wrote:
> On Thu, Oct 24, 2013 at 7:31 AM, Chen Gang <gang.chen@asianux.com> wrote:
>> > For some architectures, tool chain is not smart enough to recognize the
>> > macro with multiple lines (e.g. arc tool chain), and for common ".S"
>> > file, this kind of macro is also rarely used.
> Does not "not smart enough" mean than the said toolchain is broken/buggy
> or is the kernel using an unsupported notation?
> 

IMHO this is not broken - rather the code is not fully portable - given that gas
ports of arches have differnet notions of what to treat as comment and what newline.

Looking as binutils/gas/config, I can see that avr, cris,...are likely broken in
the same way as ARC is.

Historically ARC has had ';' as comment char, which Joern relatively recently
augmented to have '#' as well. However there's legacy codebase which relies on ';'
being a comment and we can't change that fact.

So can we introduce an ARCH over-ridable newline annotation in linkage.h and other
places after auditing. Since asm/linkage.h preempts linux/linkage.h by way of
#include it shd be pretty strightforward.

Something like below. I can send the formal patch if people think the approach is OK.


----------------->
diff --git a/include/linux/linkage.h b/include/linux/linkage.h
index d3e8ad23a8e0..4188c632f2b8 100644
--- a/include/linux/linkage.h
+++ b/include/linux/linkage.h
@@ -6,6 +6,10 @@
 #include <linux/export.h>
 #include <asm/linkage.h>

+#ifndef __ARCH_NL
+#define __ARCH_NL
+#endif
+
 #ifdef __cplusplus
 #define CPP_ASMLINKAGE extern "C"
 #else
@@ -75,7 +79,7 @@

 #ifndef ENTRY
 #define ENTRY(name) \
-  .globl name; \
+  .globl name; __ARCH_NL \
   ALIGN; \
   name:
 #endif
@@ -83,7 +87,7 @@

 #ifndef WEAK
 #define WEAK(name)        \
-       .weak name;        \
+       .weak name; __ARCH_NL \
        name:
 #endif


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: Portable assmbler code - newline (was Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL())
  2013-10-24 17:28                   ` Portable assmbler code - newline (was Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()) Vineet Gupta
@ 2013-10-24 19:41                     ` Geert Uytterhoeven
  2013-10-25  5:10                       ` Vineet Gupta
  0 siblings, 1 reply; 33+ messages in thread
From: Geert Uytterhoeven @ 2013-10-24 19:41 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: Richard Weinberger, Chen Gang, Joern Rennecke, James Hogan,
	Rusty Russell, Takashi Iwai, Vineet Gupta, jeremy.bennett,
	linux-kernel, Claudiu Zissulescu, Francois Bedard, Sam Ravnborg,
	Joe Perches, linux-arch

On Thu, Oct 24, 2013 at 7:28 PM, Vineet Gupta <vineetg76@gmail.com> wrote:
> +CC linux-arch
>
> On 10/24/2013 11:33 AM, Richard Weinberger wrote:
>> On Thu, Oct 24, 2013 at 7:31 AM, Chen Gang <gang.chen@asianux.com> wrote:
>>> > For some architectures, tool chain is not smart enough to recognize the
>>> > macro with multiple lines (e.g. arc tool chain), and for common ".S"
>>> > file, this kind of macro is also rarely used.
>> Does not "not smart enough" mean than the said toolchain is broken/buggy
>> or is the kernel using an unsupported notation?
>>
>
> IMHO this is not broken - rather the code is not fully portable - given that gas
> ports of arches have differnet notions of what to treat as comment and what newline.
>
> Looking as binutils/gas/config, I can see that avr, cris,...are likely broken in
> the same way as ARC is.
>
> Historically ARC has had ';' as comment char, which Joern relatively recently
> augmented to have '#' as well. However there's legacy codebase which relies on ';'
> being a comment and we can't change that fact.
>
> So can we introduce an ARCH over-ridable newline annotation in linkage.h and other
> places after auditing. Since asm/linkage.h preempts linux/linkage.h by way of
> #include it shd be pretty strightforward.
>
> Something like below. I can send the formal patch if people think the approach is OK.

By what are you gonna override __ARCH_NL on ARC?
I'm afraid cpp will still turn it into a single line.

> ----------------->
> diff --git a/include/linux/linkage.h b/include/linux/linkage.h
> index d3e8ad23a8e0..4188c632f2b8 100644
> --- a/include/linux/linkage.h
> +++ b/include/linux/linkage.h
> @@ -6,6 +6,10 @@
>  #include <linux/export.h>
>  #include <asm/linkage.h>
>
> +#ifndef __ARCH_NL
> +#define __ARCH_NL
> +#endif
> +
>  #ifdef __cplusplus
>  #define CPP_ASMLINKAGE extern "C"
>  #else
> @@ -75,7 +79,7 @@
>
>  #ifndef ENTRY
>  #define ENTRY(name) \
> -  .globl name; \
> +  .globl name; __ARCH_NL \
>    ALIGN; \
>    name:
>  #endif
> @@ -83,7 +87,7 @@
>
>  #ifndef WEAK
>  #define WEAK(name)        \
> -       .weak name;        \
> +       .weak name; __ARCH_NL \
>         name:
>  #endif

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: Portable assmbler code - newline (was Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL())
  2013-10-24 19:41                     ` Geert Uytterhoeven
@ 2013-10-25  5:10                       ` Vineet Gupta
  2013-10-26 13:38                         ` Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Vineet Gupta @ 2013-10-25  5:10 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Richard Weinberger, Chen Gang, Joern Rennecke, James Hogan,
	Rusty Russell, Takashi Iwai, Vineet Gupta, jeremy.bennett,
	linux-kernel, Claudiu Zissulescu, Francois Bedard, Sam Ravnborg,
	Joe Perches, linux-arch

On 10/25/2013 01:11 AM, Geert Uytterhoeven wrote:
> On Thu, Oct 24, 2013 at 7:28 PM, Vineet Gupta <vineetg76@gmail.com> wrote:
>> > +CC linux-arch
>> >
>> > On 10/24/2013 11:33 AM, Richard Weinberger wrote:
>>> >> On Thu, Oct 24, 2013 at 7:31 AM, Chen Gang <gang.chen@asianux.com> wrote:
>>>>> >>> > For some architectures, tool chain is not smart enough to recognize the
>>>>> >>> > macro with multiple lines (e.g. arc tool chain), and for common ".S"
>>>>> >>> > file, this kind of macro is also rarely used.
>>> >> Does not "not smart enough" mean than the said toolchain is broken/buggy
>>> >> or is the kernel using an unsupported notation?
>>> >>
>> >
>> > IMHO this is not broken - rather the code is not fully portable - given that gas
>> > ports of arches have differnet notions of what to treat as comment and what newline.
>> >
>> > Looking as binutils/gas/config, I can see that avr, cris,...are likely broken in
>> > the same way as ARC is.
>> >
>> > Historically ARC has had ';' as comment char, which Joern relatively recently
>> > augmented to have '#' as well. However there's legacy codebase which relies on ';'
>> > being a comment and we can't change that fact.
>> >
>> > So can we introduce an ARCH over-ridable newline annotation in linkage.h and other
>> > places after auditing. Since asm/linkage.h preempts linux/linkage.h by way of
>> > #include it shd be pretty strightforward.
>> >
>> > Something like below. I can send the formal patch if people think the approach is OK.
> By what are you gonna override __ARCH_NL on ARC?
> I'm afraid cpp will still turn it into a single line.
> 

Eh ! My untested patch was broken but not because of what you mentioned.

For ARC, the ; negating the newline annotation. So the following works (backquote
is new line for ARC)

diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
index 0283e9e44e0d..b3eea2999322 100644
--- a/arch/arc/include/asm/linkage.h
+++ b/arch/arc/include/asm/linkage.h
@@ -9,6 +9,8 @@
 #ifndef __ASM_LINKAGE_H
 #define __ASM_LINKAGE_H

+#define __ARCH_NL      `
+
 #ifdef __ASSEMBLY__


diff --git a/include/linux/linkage.h b/include/linux/linkage.h
index d3e8ad23a8e0..969e70ad231a 100644
--- a/include/linux/linkage.h
+++ b/include/linux/linkage.h
@@ -6,6 +6,10 @@
 #include <linux/export.h>
 #include <asm/linkage.h>

+#ifndef __ARCH_NL
+#define __ARCH_NL      ;
+#endif
+
 #ifdef __cplusplus
 #define CPP_ASMLINKAGE extern "C"
 #else
@@ -75,7 +79,7 @@

 #ifndef ENTRY
 #define ENTRY(name) \
-  .globl name; \
+  .globl name __ARCH_NL \
   ALIGN; \
   name:
 #endif



^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-24 15:29                 ` [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL() Josh Boyer
@ 2013-10-26  2:42                   ` Chen Gang
  2013-10-26 14:40                     ` Chen Gang F T
  0 siblings, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-10-26  2:42 UTC (permalink / raw)
  To: Josh Boyer
  Cc: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai,
	Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard

On 10/24/2013 11:29 PM, Josh Boyer wrote:
> On Wed, Oct 23, 2013 at 10:31 PM, Chen Gang <gang.chen@asianux.com> wrote:
>> For some architectures, tool chain is not smart enough to recognize the
>> macro with multiple lines (e.g. arc tool chain), and for common ".S"
>> file, this kind of macro is also rarely used.
>>
>> So expand the related contents of macro to let it pass compiling (can
>> use "arc-elf32-objdump -x" to know about it).
>>
>> The related error (allmodconfig for arc):
>>
>>     LD      init/built-in.o
>>   kernel/built-in.o: In function `load_module_signing_keys':
>>   kernel/modsign_pubkey.c:66: undefined reference to `modsign_certificate_list'
>>   kernel/modsign_pubkey.c:71: undefined reference to `modsign_certificate_list_end'
>>   kernel/modsign_pubkey.c:67: undefined reference to `modsign_certificate_list_end'
>>
>> The related tool chain information:
>>
>>   [root@gchenlinux linux-next]# arc-elf32-as -v
>>   GNU assembler version 2.23.2 (arc-elf32) using BFD version (GNU Binutils) 2.23.2
>>   [root@gchenlinux linux-next]# arc-elf32-ld -v
>>   GNU ld (GNU Binutils) 2.23.2
>>   [root@gchenlinux linux-next]# arc-elf32-gcc -v
>>   Using built-in specs.
>>   COLLECT_GCC=arc-elf32-gcc
>>   COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/arc-elf32/4.8.0/lto-wrapper
>>   Target: arc-elf32
>>   Configured with: ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 --disable-multilib --with-headers=../newlib/newlib/libc/include
>>   Thread model: single
>>   gcc version 4.8.0 (GCC)
> 
> Is this only an issue with using multi-line macro definitions in .S
> files?  The practice of using multi-line macro definitions isn't rare.
>  Look at e.g. include/linux/module.h, and a number of other header
> files.
> 

Yes, excluding "arch/*", for all ".S" files, except x86 driver and this
file, no others use multi-line macro definition, and "arch/arc" don't
use mulit-line macro definitions, either.

The related search command is:

  "find | grep -i "\.S$" | grep -v "/arch/"  | grep -v "Documentation" | xargs grep define".

Hmm... at least, in our case, we need not use the multi-line macro
definition, if expand it, the total lines will be shrunk, that will
be more clearer and simpler to source code readers and writers.


> This seems like a toolchain bug that should be fixable if it works for
> other architectures.
> 

Hmm... at least, we are sure the toolchain is not quite smart enough
(but we can not say it must be a bug).


So for me, I recommend to apply this patch (maybe the patch comment
need improvement). It is quite valuable to continue discussing about
it, but it is not related with whether applying this patch or not.

> josh
> 
> 

Thanks.
-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: Portable assmbler code - newline (was Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL())
  2013-10-25  5:10                       ` Vineet Gupta
@ 2013-10-26 13:38                         ` Chen Gang
  2013-10-27  7:28                           ` Portable assmbler code - newline Vineet Gupta
  0 siblings, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-10-26 13:38 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: Geert Uytterhoeven, Richard Weinberger, Joern Rennecke,
	James Hogan, Rusty Russell, Takashi Iwai, Vineet Gupta,
	jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, Sam Ravnborg, Joe Perches, linux-arch

On 10/25/2013 01:10 PM, Vineet Gupta wrote:
> On 10/25/2013 01:11 AM, Geert Uytterhoeven wrote:
>> On Thu, Oct 24, 2013 at 7:28 PM, Vineet Gupta <vineetg76@gmail.com> wrote:
>>>> +CC linux-arch
>>>>
>>>> On 10/24/2013 11:33 AM, Richard Weinberger wrote:
>>>>>> On Thu, Oct 24, 2013 at 7:31 AM, Chen Gang <gang.chen@asianux.com> wrote:
>>>>>>>>>> For some architectures, tool chain is not smart enough to recognize the
>>>>>>>>>> macro with multiple lines (e.g. arc tool chain), and for common ".S"
>>>>>>>>>> file, this kind of macro is also rarely used.
>>>>>> Does not "not smart enough" mean than the said toolchain is broken/buggy
>>>>>> or is the kernel using an unsupported notation?
>>>>>>
>>>>
>>>> IMHO this is not broken - rather the code is not fully portable - given that gas
>>>> ports of arches have differnet notions of what to treat as comment and what newline.
>>>>
>>>> Looking as binutils/gas/config, I can see that avr, cris,...are likely broken in
>>>> the same way as ARC is.
>>>>
>>>> Historically ARC has had ';' as comment char, which Joern relatively recently
>>>> augmented to have '#' as well. However there's legacy codebase which relies on ';'
>>>> being a comment and we can't change that fact.
>>>>
>>>> So can we introduce an ARCH over-ridable newline annotation in linkage.h and other
>>>> places after auditing. Since asm/linkage.h preempts linux/linkage.h by way of
>>>> #include it shd be pretty strightforward.
>>>>
>>>> Something like below. I can send the formal patch if people think the approach is OK.
>> By what are you gonna override __ARCH_NL on ARC?
>> I'm afraid cpp will still turn it into a single line.
>>
> 
> Eh ! My untested patch was broken but not because of what you mentioned.
> 
> For ARC, the ; negating the newline annotation. So the following works (backquote
> is new line for ARC)
> 
> diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
> index 0283e9e44e0d..b3eea2999322 100644
> --- a/arch/arc/include/asm/linkage.h
> +++ b/arch/arc/include/asm/linkage.h
> @@ -9,6 +9,8 @@
>  #ifndef __ASM_LINKAGE_H
>  #define __ASM_LINKAGE_H
> 
> +#define __ARCH_NL      `
> +
>  #ifdef __ASSEMBLY__
> 
> 
> diff --git a/include/linux/linkage.h b/include/linux/linkage.h
> index d3e8ad23a8e0..969e70ad231a 100644
> --- a/include/linux/linkage.h
> +++ b/include/linux/linkage.h
> @@ -6,6 +6,10 @@
>  #include <linux/export.h>
>  #include <asm/linkage.h>
> 
> +#ifndef __ARCH_NL
> +#define __ARCH_NL      ;
> +#endif
> +
>  #ifdef __cplusplus
>  #define CPP_ASMLINKAGE extern "C"
>  #else
> @@ -75,7 +79,7 @@
> 
>  #ifndef ENTRY
>  #define ENTRY(name) \
> -  .globl name; \
> +  .globl name __ARCH_NL \
>    ALIGN; \

Do we also need consider about "ALIGN;"?

>    name:
>  #endif
> 

For next-20130927 tree, do we also need consider about WEAK, ENDPROC?


I am not quite sure about it, but I will try. Now, I am just analyzing
another issue -- maybe the last issue for allmodconfig under arc, which
may be related with this patch, the errors are:

      1   Building modules, stage 2.
      2   MODPOST 2994 modules
      3 ERROR: "__st_r13_to_r20" [sound/usb/snd-usbmidi-lib.ko] undefined!
      4 ERROR: "__ld_r13_to_r15" [sound/usb/snd-usbmidi-lib.ko] undefined!
      5 ERROR: "__st_r13_to_r18" [sound/usb/snd-usbmidi-lib.ko] undefined!
      6 ERROR: "__ld_r13_to_r14_ret" [sound/usb/snd-usbmidi-lib.ko] undefined!
      7 ERROR: "__ld_r13_to_r22" [sound/usb/snd-usbmidi-lib.ko] undefined!
      8 ERROR: "__ld_r13_to_r15_ret" [sound/usb/snd-usbmidi-lib.ko] undefined!
      9 ERROR: "__ld_r13_to_r16" [sound/usb/snd-usbmidi-lib.ko] undefined!
     10 ERROR: "__ld_r13_to_r18_ret" [sound/usb/snd-usbmidi-lib.ko] undefined!
     11 ERROR: "__ld_r13_to_r24_ret" [sound/usb/snd-usbmidi-lib.ko] undefined!
     ...
     ...
  
  28095 ERROR: "__st_r13_to_r17" [arch/arc/oprofile/oprofile.ko] undefined!
  28096 ERROR: "__st_r13_to_r22" [arch/arc/oprofile/oprofile.ko] undefined!
  28097 ERROR: "__ld_r13_to_r19_ret" [Documentation/filesystems/configfs/configfs_example_macros.ko] undefined!
  28098 ERROR: "__st_r13_to_r19" [Documentation/filesystems/configfs/configfs_example_macros.ko] undefined!
  28099 ERROR: "__ld_r13_to_r14_ret" [Documentation/filesystems/configfs/configfs_example_macros.ko] undefined!
  28100 ERROR: "__ld_r13_to_r19_ret" [Documentation/filesystems/configfs/configfs_example_explicit.ko] undefined!
  28101 ERROR: "__st_r13_to_r19" [Documentation/filesystems/configfs/configfs_example_explicit.ko] undefined!
  28102 ERROR: "__ld_r13_to_r14_ret" [Documentation/filesystems/configfs/configfs_example_explicit.ko] undefined!
  28103 ERROR: "__ld_r13_to_r14_ret" [Documentation/connector/cn_test.ko] undefined!
  28104 make[1]: *** [__modpost] Error 1
  28105 make: *** [modules] Error 2


Thanks.
-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-26  2:42                   ` Chen Gang
@ 2013-10-26 14:40                     ` Chen Gang F T
  0 siblings, 0 replies; 33+ messages in thread
From: Chen Gang F T @ 2013-10-26 14:40 UTC (permalink / raw)
  To: Chen Gang
  Cc: Josh Boyer, Joern Rennecke, James Hogan, Rusty Russell,
	Takashi Iwai, Vineet Gupta, jeremy.bennett, linux-kernel,
	Claudiu Zissulescu, Francois Bedard

On 10/26/2013 10:42 AM, Chen Gang wrote:
> On 10/24/2013 11:29 PM, Josh Boyer wrote:
>> On Wed, Oct 23, 2013 at 10:31 PM, Chen Gang <gang.chen@asianux.com> wrote:
>>> For some architectures, tool chain is not smart enough to recognize the
>>> macro with multiple lines (e.g. arc tool chain), and for common ".S"
>>> file, this kind of macro is also rarely used.
>>>
>>> So expand the related contents of macro to let it pass compiling (can
>>> use "arc-elf32-objdump -x" to know about it).
>>>
>>> The related error (allmodconfig for arc):
>>>
>>>     LD      init/built-in.o
>>>   kernel/built-in.o: In function `load_module_signing_keys':
>>>   kernel/modsign_pubkey.c:66: undefined reference to `modsign_certificate_list'
>>>   kernel/modsign_pubkey.c:71: undefined reference to `modsign_certificate_list_end'
>>>   kernel/modsign_pubkey.c:67: undefined reference to `modsign_certificate_list_end'
>>>
>>> The related tool chain information:
>>>
>>>   [root@gchenlinux linux-next]# arc-elf32-as -v
>>>   GNU assembler version 2.23.2 (arc-elf32) using BFD version (GNU Binutils) 2.23.2
>>>   [root@gchenlinux linux-next]# arc-elf32-ld -v
>>>   GNU ld (GNU Binutils) 2.23.2
>>>   [root@gchenlinux linux-next]# arc-elf32-gcc -v
>>>   Using built-in specs.
>>>   COLLECT_GCC=arc-elf32-gcc
>>>   COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/arc-elf32/4.8.0/lto-wrapper
>>>   Target: arc-elf32
>>>   Configured with: ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 : (reconfigured) ../gcc/configure --without-header --disable-nls --enable-language=c --disable-threads --disable-shared --enable-werror=no target_configargs=enable_vtable_verify=yes --target=arc-elf32 --with-cpu=arc700 --disable-multilib --with-headers=../newlib/newlib/libc/include
>>>   Thread model: single
>>>   gcc version 4.8.0 (GCC)
>>
>> Is this only an issue with using multi-line macro definitions in .S
>> files?  The practice of using multi-line macro definitions isn't rare.
>>  Look at e.g. include/linux/module.h, and a number of other header
>> files.
>>

> 
> Yes, excluding "arch/*", for all ".S" files, except x86 driver and this
> file, no others use multi-line macro definition, and "arch/arc" don't
> use mulit-line macro definitions, either.
> 

Oh, sorry, what my written is not quite precise, and my real meaning is:
"no others *intend* to use multi-line macro definition in *.S".

> The related search command is:
> 
>   "find | grep -i "\.S$" | grep -v "/arch/"  | grep -v "Documentation" | xargs grep define".
> 
> Hmm... at least, in our case, we need not use the multi-line macro
> definition, if expand it, the total lines will be shrunk, that will
> be more clearer and simpler to source code readers and writers.
> 
> 
>> This seems like a toolchain bug that should be fixable if it works for
>> other architectures.
>>
> 
> Hmm... at least, we are sure the toolchain is not quite smart enough
> (but we can not say it must be a bug).
> 
> 
> So for me, I recommend to apply this patch (maybe the patch comment
> need improvement). It is quite valuable to continue discussing about
> it, but it is not related with whether applying this patch or not.
> 
>> josh
>>
>>
> 
> Thanks.
> 


-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: Portable assmbler code - newline
  2013-10-26 13:38                         ` Chen Gang
@ 2013-10-27  7:28                           ` Vineet Gupta
  2013-10-27 12:34                             ` Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Vineet Gupta @ 2013-10-27  7:28 UTC (permalink / raw)
  To: Chen Gang
  Cc: Geert Uytterhoeven, Richard Weinberger, Joern Rennecke,
	James Hogan, Rusty Russell, Takashi Iwai, Vineet Gupta,
	jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, Sam Ravnborg, Joe Perches, linux-arch

On 10/26/2013 07:08 PM, Chen Gang wrote:
> On 10/25/2013 01:10 PM, Vineet Gupta wrote:
>> On 10/25/2013 01:11 AM, Geert Uytterhoeven wrote:
>>> On Thu, Oct 24, 2013 at 7:28 PM, Vineet Gupta <vineetg76@gmail.com> wrote:
>>>>> +CC linux-arch
>>>>>
>>>>> On 10/24/2013 11:33 AM, Richard Weinberger wrote:
>>>>>>> On Thu, Oct 24, 2013 at 7:31 AM, Chen Gang <gang.chen@asianux.com> wrote:
>>>>>>>>>>> For some architectures, tool chain is not smart enough to recognize the
>>>>>>>>>>> macro with multiple lines (e.g. arc tool chain), and for common ".S"
>>>>>>>>>>> file, this kind of macro is also rarely used.
>>>>>>> Does not "not smart enough" mean than the said toolchain is broken/buggy
>>>>>>> or is the kernel using an unsupported notation?
>>>>>>>
>>>>>
>>>>> IMHO this is not broken - rather the code is not fully portable - given that gas
>>>>> ports of arches have differnet notions of what to treat as comment and what newline.
>>>>>
>>>>> Looking as binutils/gas/config, I can see that avr, cris,...are likely broken in
>>>>> the same way as ARC is.
>>>>>
>>>>> Historically ARC has had ';' as comment char, which Joern relatively recently
>>>>> augmented to have '#' as well. However there's legacy codebase which relies on ';'
>>>>> being a comment and we can't change that fact.
>>>>>
>>>>> So can we introduce an ARCH over-ridable newline annotation in linkage.h and other
>>>>> places after auditing. Since asm/linkage.h preempts linux/linkage.h by way of
>>>>> #include it shd be pretty strightforward.
>>>>>
>>>>> Something like below. I can send the formal patch if people think the approach is OK.
>>> By what are you gonna override __ARCH_NL on ARC?
>>> I'm afraid cpp will still turn it into a single line.
>>>
>>
>> Eh ! My untested patch was broken but not because of what you mentioned.
>>
>> For ARC, the ; negating the newline annotation. So the following works (backquote
>> is new line for ARC)
>>
>> diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
>> index 0283e9e44e0d..b3eea2999322 100644
>> --- a/arch/arc/include/asm/linkage.h
>> +++ b/arch/arc/include/asm/linkage.h
>> @@ -9,6 +9,8 @@
>>  #ifndef __ASM_LINKAGE_H
>>  #define __ASM_LINKAGE_H
>>
>> +#define __ARCH_NL      `
>> +
>>  #ifdef __ASSEMBLY__
>>
>>
>> diff --git a/include/linux/linkage.h b/include/linux/linkage.h
>> index d3e8ad23a8e0..969e70ad231a 100644
>> --- a/include/linux/linkage.h
>> +++ b/include/linux/linkage.h
>> @@ -6,6 +6,10 @@
>>  #include <linux/export.h>
>>  #include <asm/linkage.h>
>>
>> +#ifndef __ARCH_NL
>> +#define __ARCH_NL      ;
>> +#endif
>> +
>>  #ifdef __cplusplus
>>  #define CPP_ASMLINKAGE extern "C"
>>  #else
>> @@ -75,7 +79,7 @@
>>
>>  #ifndef ENTRY
>>  #define ENTRY(name) \
>> -  .globl name; \
>> +  .globl name __ARCH_NL \
>>    ALIGN; \
> 
> Do we also need consider about "ALIGN;"?

Right - as I said already, above was not a formal patch but a RFC whether we are
on right track. The proper fix will have to audit all such places.


>>    name:
>>  #endif
>>
> 
> For next-20130927 tree, do we also need consider about WEAK, ENDPROC?

Indeed.


> I am not quite sure about it, but I will try. 

So you volunteer to send out a patch base don __ARCH_NL I proposed above ?


> Now, I am just analyzing
> another issue -- maybe the last issue for allmodconfig under arc, which
> may be related with this patch, the errors are:
> 
>       1   Building modules, stage 2.
>       2   MODPOST 2994 modules
>       3 ERROR: "__st_r13_to_r20" [sound/usb/snd-usbmidi-lib.ko] undefined!

Yes we know about this already. This is to do with libgcc linkage. The fix is non
trivial - I'll get back to you on this. For now disable CONFIG_CC_OPTIMIZE_FOR_SIZE.

-Vineet

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: Portable assmbler code - newline
  2013-10-27  7:28                           ` Portable assmbler code - newline Vineet Gupta
@ 2013-10-27 12:34                             ` Chen Gang
  2013-10-27 13:57                               ` Chen Gang
  0 siblings, 1 reply; 33+ messages in thread
From: Chen Gang @ 2013-10-27 12:34 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: Geert Uytterhoeven, Richard Weinberger, Joern Rennecke,
	James Hogan, Rusty Russell, Takashi Iwai, Vineet Gupta,
	jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, Sam Ravnborg, Joe Perches, linux-arch

On 10/27/2013 03:28 PM, Vineet Gupta wrote:
> On 10/26/2013 07:08 PM, Chen Gang wrote:
>> On 10/25/2013 01:10 PM, Vineet Gupta wrote:
>>> Eh ! My untested patch was broken but not because of what you mentioned.
>>>
>>> For ARC, the ; negating the newline annotation. So the following works (backquote
>>> is new line for ARC)
>>>
>>> diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
>>> index 0283e9e44e0d..b3eea2999322 100644
>>> --- a/arch/arc/include/asm/linkage.h
>>> +++ b/arch/arc/include/asm/linkage.h
>>> @@ -9,6 +9,8 @@
>>>  #ifndef __ASM_LINKAGE_H
>>>  #define __ASM_LINKAGE_H
>>>
>>> +#define __ARCH_NL      `
>>> +
>>>  #ifdef __ASSEMBLY__
>>>
>>>
>>> diff --git a/include/linux/linkage.h b/include/linux/linkage.h
>>> index d3e8ad23a8e0..969e70ad231a 100644
>>> --- a/include/linux/linkage.h
>>> +++ b/include/linux/linkage.h
>>> @@ -6,6 +6,10 @@
>>>  #include <linux/export.h>
>>>  #include <asm/linkage.h>
>>>
>>> +#ifndef __ARCH_NL
>>> +#define __ARCH_NL      ;
>>> +#endif
>>> +
>>>  #ifdef __cplusplus
>>>  #define CPP_ASMLINKAGE extern "C"
>>>  #else
>>> @@ -75,7 +79,7 @@
>>>
>>>  #ifndef ENTRY
>>>  #define ENTRY(name) \
>>> -  .globl name; \
>>> +  .globl name __ARCH_NL \
>>>    ALIGN; \
>>
>> Do we also need consider about "ALIGN;"?
> 
> Right - as I said already, above was not a formal patch but a RFC whether we are
> on right track. The proper fix will have to audit all such places.
> 
> 
>>>    name:
>>>  #endif
>>>
>>
>> For next-20130927 tree, do we also need consider about WEAK, ENDPROC?
> 
> Indeed.
> 
> 
>> I am not quite sure about it, but I will try. 
> 
> So you volunteer to send out a patch base don __ARCH_NL I proposed above ?
> 
> 

OK, I will/should try.

Hmm... I am 'almost' a volunteer: my company support what I have done
for Public Open Source, they treat it as important thing.

Now you are mainly focusing on arc, and I want/try to focus on kernel
wide. This patch belongs to kernel wide, and at least now, nobody
rejects me for it, so I will/should try.


>> Now, I am just analyzing
>> another issue -- maybe the last issue for allmodconfig under arc, which
>> may be related with this patch, the errors are:
>>
>>       1   Building modules, stage 2.
>>       2   MODPOST 2994 modules
>>       3 ERROR: "__st_r13_to_r20" [sound/usb/snd-usbmidi-lib.ko] undefined!
> 
> Yes we know about this already. This is to do with libgcc linkage. The fix is non
> trivial - I'll get back to you on this. For now disable CONFIG_CC_OPTIMIZE_FOR_SIZE.
> 

OK, thank you for your valuable information in time, at least, it saves
my time resources, after pass this issue, hope our arc can pass
allmodconfig.

:-)

> -Vineet
> --
> To unsubscribe from this list: send the line "unsubscribe linux-arch" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

Thanks.
-- 
Chen Gang

-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: Portable assmbler code - newline
  2013-10-27 12:34                             ` Chen Gang
@ 2013-10-27 13:57                               ` Chen Gang
  0 siblings, 0 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-27 13:57 UTC (permalink / raw)
  To: Chen Gang
  Cc: Vineet Gupta, Geert Uytterhoeven, Richard Weinberger,
	Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai,
	Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, Sam Ravnborg, Joe Perches, linux-arch

On 10/27/2013 08:34 PM, Chen Gang wrote:
> On 10/27/2013 03:28 PM, Vineet Gupta wrote:
>> On 10/26/2013 07:08 PM, Chen Gang wrote:
>>> On 10/25/2013 01:10 PM, Vineet Gupta wrote:
>>>> Eh ! My untested patch was broken but not because of what you mentioned.
>>>>
>>>> For ARC, the ; negating the newline annotation. So the following works (backquote
>>>> is new line for ARC)
>>>>
>>>> diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
>>>> index 0283e9e44e0d..b3eea2999322 100644
>>>> --- a/arch/arc/include/asm/linkage.h
>>>> +++ b/arch/arc/include/asm/linkage.h
>>>> @@ -9,6 +9,8 @@
>>>>  #ifndef __ASM_LINKAGE_H
>>>>  #define __ASM_LINKAGE_H
>>>>
>>>> +#define __ARCH_NL      `
>>>> +
>>>>  #ifdef __ASSEMBLY__
>>>>
>>>>
>>>> diff --git a/include/linux/linkage.h b/include/linux/linkage.h
>>>> index d3e8ad23a8e0..969e70ad231a 100644
>>>> --- a/include/linux/linkage.h
>>>> +++ b/include/linux/linkage.h
>>>> @@ -6,6 +6,10 @@
>>>>  #include <linux/export.h>
>>>>  #include <asm/linkage.h>
>>>>
>>>> +#ifndef __ARCH_NL
>>>> +#define __ARCH_NL      ;
>>>> +#endif
>>>> +
>>>>  #ifdef __cplusplus
>>>>  #define CPP_ASMLINKAGE extern "C"
>>>>  #else
>>>> @@ -75,7 +79,7 @@
>>>>
>>>>  #ifndef ENTRY
>>>>  #define ENTRY(name) \
>>>> -  .globl name; \
>>>> +  .globl name __ARCH_NL \
>>>>    ALIGN; \
>>>
>>> Do we also need consider about "ALIGN;"?
>>
>> Right - as I said already, above was not a formal patch but a RFC whether we are
>> on right track. The proper fix will have to audit all such places.
>>
>>
>>>>    name:
>>>>  #endif
>>>>
>>>
>>> For next-20130927 tree, do we also need consider about WEAK, ENDPROC?
>>
>> Indeed.
>>
>>
>>> I am not quite sure about it, but I will try. 
>>
>> So you volunteer to send out a patch base don __ARCH_NL I proposed above ?
>>
>>
> 
> OK, I will/should try.
> 
> Hmm... I am 'almost' a volunteer: my company support what I have done
> for Public Open Source, they treat it as important thing.
> 
> Now you are mainly focusing on arc, and I want/try to focus on kernel
> wide. This patch belongs to kernel wide, and at least now, nobody
> rejects me for it, so I will/should try.
> 
> 
>>> Now, I am just analyzing
>>> another issue -- maybe the last issue for allmodconfig under arc, which
>>> may be related with this patch, the errors are:
>>>
>>>       1   Building modules, stage 2.
>>>       2   MODPOST 2994 modules
>>>       3 ERROR: "__st_r13_to_r20" [sound/usb/snd-usbmidi-lib.ko] undefined!
>>
>> Yes we know about this already. This is to do with libgcc linkage. The fix is non
>> trivial - I'll get back to you on this. For now disable CONFIG_CC_OPTIMIZE_FOR_SIZE.
>>
> 
> OK, thank you for your valuable information in time, at least, it saves
> my time resources, after pass this issue, hope our arc can pass
> allmodconfig.
> 
> :-)
> 


In "include/asm-generic/vmlinux.lds.h", I guess "*(...)" also can
express an individual line, is it generic enough to arc, too?


Thanks.

>> -Vineet
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-arch" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
> 
> Thanks.
> 


-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [PATCH v2] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-24  5:31               ` [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL() Chen Gang
  2013-10-24  6:03                 ` Richard Weinberger
  2013-10-24 15:29                 ` [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL() Josh Boyer
@ 2013-10-29  2:17                 ` Chen Gang
  2013-10-30  1:11                   ` [PATCH-next v3] kernel/system_certificate.S: " Chen Gang
  2013-10-30 12:57                   ` David Howells
  2 siblings, 2 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-29  2:17 UTC (permalink / raw)
  To: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai
  Cc: Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, Max Filippov, Al Viro, Arnd Bergmann

If a macro is only used within 2 times, and also its contents are
within 2 lines, recommend to expand it to shrink code line.

For our case, the macro is not portable either: some architectures'
assembler may use another character to mark newline in a macro (e.g.
'`' for arc), which will cause issue (e.g. arc with allmodconfig):

    LD      init/built-in.o
  kernel/built-in.o: In function `load_module_signing_keys':
  kernel/modsign_pubkey.c:66: undefined reference to `modsign_certificate_list'
  kernel/modsign_pubkey.c:71: undefined reference to `modsign_certificate_list_end'
  kernel/modsign_pubkey.c:67: undefined reference to `modsign_certificate_list_end'

If still want to use macro and let it portable enough, it will need
additional line -- include additional header file (e.g "#include
<linux/linkage.h>", although it also need be fixed).


Signed-off-by: Chen Gang <gang.chen@asianux.com>
---
 kernel/modsign_certificate.S |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/kernel/modsign_certificate.S b/kernel/modsign_certificate.S
index 4a9a86d..1967dcd 100644
--- a/kernel/modsign_certificate.S
+++ b/kernel/modsign_certificate.S
@@ -1,12 +1,10 @@
 #include <linux/export.h>
 
-#define GLOBAL(name)	\
-	.globl VMLINUX_SYMBOL(name);	\
-	VMLINUX_SYMBOL(name):
-
 	.section ".init.data","aw"
 
-GLOBAL(modsign_certificate_list)
+	.globl VMLINUX_SYMBOL(modsign_certificate_list)
+VMLINUX_SYMBOL(modsign_certificate_list):
 	.incbin "signing_key.x509"
 	.incbin "extra_certificates"
-GLOBAL(modsign_certificate_list_end)
+	.globl VMLINUX_SYMBOL(modsign_certificate_list_end)
+VMLINUX_SYMBOL(modsign_certificate_list_end):
-- 
1.7.7.6



^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH-next v3] kernel/system_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-29  2:17                 ` [PATCH v2] " Chen Gang
@ 2013-10-30  1:11                   ` Chen Gang
  2013-10-30 12:57                   ` David Howells
  1 sibling, 0 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-30  1:11 UTC (permalink / raw)
  To: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai, dhowells
  Cc: Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, Max Filippov, Al Viro, Arnd Bergmann

If a macro is only used within 2 times, and also its contents are
within 2 lines, recommend to expand it to shrink code line.

For our case, the macro is not portable either: some architectures'
assembler may use another character to mark newline in a macro (e.g.
'`' for arc), which will cause issue.

If still want to use macro and let it portable enough, it will also
need include additional header file (e.g "#include <linux/linkage.h>",
although it also need be fixed).


Signed-off-by: Chen Gang <gang.chen@asianux.com>
---
 kernel/system_certificates.S |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/kernel/system_certificates.S b/kernel/system_certificates.S
index 552d47b..4aef390 100644
--- a/kernel/system_certificates.S
+++ b/kernel/system_certificates.S
@@ -1,12 +1,10 @@
 #include <linux/export.h>
 #include <linux/init.h>
 
-#define GLOBAL(name)	\
-	.globl VMLINUX_SYMBOL(name);	\
-	VMLINUX_SYMBOL(name):
-
 	__INITRODATA
 
-GLOBAL(system_certificate_list)
+	.globl VMLINUX_SYMBOL(system_certificate_list)
+VMLINUX_SYMBOL(system_certificate_list):
 	.incbin "kernel/x509_certificate_list"
-GLOBAL(system_certificate_list_end)
+	.globl VMLINUX_SYMBOL(system_certificate_list_end)
+VMLINUX_SYMBOL(system_certificate_list_end):
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-10-23  3:12           ` Chen Gang
@ 2013-10-30  1:43             ` Chen Gang
  2013-10-30 12:10               ` Chen Gang
  2013-10-31  7:48               ` Vineet Gupta
  0 siblings, 2 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-30  1:43 UTC (permalink / raw)
  To: Francois Bedard
  Cc: Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	joern Rennecke

On 10/23/2013 11:12 AM, Chen Gang wrote:
> On 10/23/2013 10:51 AM, Francois Bedard wrote:
>> Our sources are on github at https://github.com/foss-for-synopsys-dwc-arc-processors  and you can report problems by opening "Issues" with command lines and log outputs below against relevant toolchain component:
>>
>> For GCC:  https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues?state=open
>> For binutils: https://github.com/foss-for-synopsys-dwc-arc-processors/binutils/issues?page=1&state=open 
>>
>> Go ahead and officially file these and we'll take a look at them. 
> 

Hello Francois, I marked them at 2013-10-26 night (China time).

  for gcc (3 issues, but #28 duplicates with #26): 

    https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues/26
    https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues/27
    https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues/28

  for binutils (1 issue):

    https://github.com/foss-for-synopsys-dwc-arc-processors/binutils/issues/21


Hello Joern, for current shrinking status:

  for gcc issue #26, (#28 is its duplication):

    issue command: arc-elf32-gcc -Os -fno-reorder-blocks -c systohc.i
    source code:   systohc.i contents 41 lines (past it on website).
    whether GNU:   only for arc, gnu no issue: gnu gcc-4.8/4.9 are OK.

  for gcc issue #27:

    issue command: arc-elf32-gcc -Os -c target_core_pr.i
    status:        just shrinking code.
                   will/should be finish within 2013-10-31.
                   welcome any suggestions or completions.

  for binutils issue #21:

    it seems simple enough, if still need shrinking, please let me know.


It seems no response, and I am a newbie about the website, need I do
something more for them? (e.g. cc to some members, although I don't
know how to cc).

> I will/should go ahead, hope I can finish reporting them within this
> week (2013-10-27)
> 
> Thanks.
> 

Thanks.
-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-10-30  1:43             ` Chen Gang
@ 2013-10-30 12:10               ` Chen Gang
  2013-10-31  7:48               ` Vineet Gupta
  1 sibling, 0 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-30 12:10 UTC (permalink / raw)
  To: Francois Bedard
  Cc: Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	joern Rennecke

On 10/30/2013 09:43 AM, Chen Gang wrote:
> On 10/23/2013 11:12 AM, Chen Gang wrote:
>> On 10/23/2013 10:51 AM, Francois Bedard wrote:
>>> Our sources are on github at https://github.com/foss-for-synopsys-dwc-arc-processors  and you can report problems by opening "Issues" with command lines and log outputs below against relevant toolchain component:
>>>
>>> For GCC:  https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues?state=open
>>> For binutils: https://github.com/foss-for-synopsys-dwc-arc-processors/binutils/issues?page=1&state=open 
>>>
>>> Go ahead and officially file these and we'll take a look at them. 
>>
> 
> Hello Francois, I marked them at 2013-10-26 night (China time).
> 
>   for gcc (3 issues, but #28 duplicates with #26): 
> 
>     https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues/26
>     https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues/27
>     https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues/28
> 
>   for binutils (1 issue):
> 
>     https://github.com/foss-for-synopsys-dwc-arc-processors/binutils/issues/21
> 
> 
> Hello Joern, for current shrinking status:
> 
>   for gcc issue #26, (#28 is its duplication):
> 
>     issue command: arc-elf32-gcc -Os -fno-reorder-blocks -c systohc.i
>     source code:   systohc.i contents 41 lines (past it on website).
>     whether GNU:   only for arc, gnu no issue: gnu gcc-4.8/4.9 are OK.
> 
>   for gcc issue #27:
> 
>     issue command: arc-elf32-gcc -Os -c target_core_pr.i
>     status:        just shrinking code.
>                    will/should be finish within 2013-10-31.
>                    welcome any suggestions or completions.
> 

For gnu gcc 4.8/4.9, it is OK (not cause issue). The target_core_pr.i is
still large, I will try to let is smaller and then upload to the website
tomorrow.

Welcome any suggestions or completions (especially for shrinking size,
or only generate related insn tree is enough?).

Thank.

>   for binutils issue #21:
> 
>     it seems simple enough, if still need shrinking, please let me know.
> 
> 
> It seems no response, and I am a newbie about the website, need I do
> something more for them? (e.g. cc to some members, although I don't
> know how to cc).
> 
>> I will/should go ahead, hope I can finish reporting them within this
>> week (2013-10-27)
>>
>> Thanks.
>>
> 
> Thanks.
> 


-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH-next v3] kernel/system_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-29  2:17                 ` [PATCH v2] " Chen Gang
  2013-10-30  1:11                   ` [PATCH-next v3] kernel/system_certificate.S: " Chen Gang
@ 2013-10-30 12:57                   ` David Howells
  2013-10-31  0:47                     ` Chen Gang
  1 sibling, 1 reply; 33+ messages in thread
From: David Howells @ 2013-10-30 12:57 UTC (permalink / raw)
  To: Chen Gang
  Cc: dhowells, Joern Rennecke, James Hogan, Rusty Russell,
	Takashi Iwai, Vineet Gupta, jeremy.bennett, linux-kernel,
	Claudiu Zissulescu, Francois Bedard, Max Filippov, Al Viro,
	Arnd Bergmann

Chen Gang <gang.chen@asianux.com> wrote:

> If a macro is only used within 2 times, and also its contents are
> within 2 lines, recommend to expand it to shrink code line.
> 
> For our case, the macro is not portable either: some architectures'
> assembler may use another character to mark newline in a macro (e.g.
> '`' for arc), which will cause issue.
> 
> If still want to use macro and let it portable enough, it will also
> need include additional header file (e.g "#include <linux/linkage.h>",
> although it also need be fixed).

Fine by me.

Applied.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH-next v3] kernel/system_certificate.S: use real contents instead of macro GLOBAL()
  2013-10-30 12:57                   ` David Howells
@ 2013-10-31  0:47                     ` Chen Gang
  0 siblings, 0 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-31  0:47 UTC (permalink / raw)
  To: David Howells
  Cc: Joern Rennecke, James Hogan, Rusty Russell, Takashi Iwai,
	Vineet Gupta, jeremy.bennett, linux-kernel, Claudiu Zissulescu,
	Francois Bedard, Max Filippov, Al Viro, Arnd Bergmann

On 10/30/2013 08:57 PM, David Howells wrote:
> Chen Gang <gang.chen@asianux.com> wrote:
> 
>> If a macro is only used within 2 times, and also its contents are
>> within 2 lines, recommend to expand it to shrink code line.
>>
>> For our case, the macro is not portable either: some architectures'
>> assembler may use another character to mark newline in a macro (e.g.
>> '`' for arc), which will cause issue.
>>
>> If still want to use macro and let it portable enough, it will also
>> need include additional header file (e.g "#include <linux/linkage.h>",
>> although it also need be fixed).
> 
> Fine by me.
> 
> Applied.
> 
> 

Thanks.
-- 
Chen Gang

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-10-30  1:43             ` Chen Gang
  2013-10-30 12:10               ` Chen Gang
@ 2013-10-31  7:48               ` Vineet Gupta
  2013-10-31  8:50                 ` Chen Gang
  1 sibling, 1 reply; 33+ messages in thread
From: Vineet Gupta @ 2013-10-31  7:48 UTC (permalink / raw)
  To: Chen Gang, Francois Bedard
  Cc: jeremy.bennett, linux-kernel, Claudiu Zissulescu, joern Rennecke

Hi Chen,

On 10/30/2013 07:14 AM, Chen Gang wrote:
> On 10/23/2013 11:12 AM, Chen Gang wrote:
>> On 10/23/2013 10:51 AM, Francois Bedard wrote:
>>> Our sources are on github at https://github.com/foss-for-synopsys-dwc-arc-processors  and you can report problems by opening "Issues" with command lines and log outputs below against relevant toolchain component:
>>>
>>> For GCC:  https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues?state=open
>>> For binutils: https://github.com/foss-for-synopsys-dwc-arc-processors/binutils/issues?page=1&state=open 
>>>
>>> Go ahead and officially file these and we'll take a look at them. 
> Hello Francois, I marked them at 2013-10-26 night (China time).
>
>   for gcc (3 issues, but #28 duplicates with #26): 
>
>     https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues/26
>     https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues/27
>     https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/issues/28
>
>   for binutils (1 issue):
>
>     https://github.com/foss-for-synopsys-dwc-arc-processors/binutils/issues/21
>
>
> Hello Joern, for current shrinking status:
>
>   for gcc issue #26, (#28 is its duplication):
>
>     issue command: arc-elf32-gcc -Os -fno-reorder-blocks -c systohc.i
>     source code:   systohc.i contents 41 lines (past it on website).
>     whether GNU:   only for arc, gnu no issue: gnu gcc-4.8/4.9 are OK.
>
>   for gcc issue #27:
>
>     issue command: arc-elf32-gcc -Os -c target_core_pr.i
>     status:        just shrinking code.
>                    will/should be finish within 2013-10-31.
>                    welcome any suggestions or completions.
>
>   for binutils issue #21:
>
>     it seems simple enough, if still need shrinking, please let me know.
>
>
> It seems no response, and I am a newbie about the website, need I do
> something more for them? (e.g. cc to some members, although I don't
> know how to cc).

Many thanks for all your efforts so far.

Most of your patches have already been folded into ARC for 3.13. I will send out
the patches for some of the cross-arch changes in next development cycle as
currently I need to finish up a few things for upcoming merge window.

We are actively working on toolchain issues and hopefully the fixes will make it
into next formal release of tools. Please check back in few weeks.

Thanks,
-Vineet

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code.
  2013-10-31  7:48               ` Vineet Gupta
@ 2013-10-31  8:50                 ` Chen Gang
  0 siblings, 0 replies; 33+ messages in thread
From: Chen Gang @ 2013-10-31  8:50 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: Francois Bedard, jeremy.bennett, linux-kernel,
	Claudiu Zissulescu, joern Rennecke

[-- Attachment #1: Type: text/plain, Size: 1140 bytes --]

On 10/31/2013 03:48 PM, Vineet Gupta wrote:
> Hi Chen,
> 
> Many thanks for all your efforts so far.
> 

Since I need provide contribution to Public Open Source, so what I have
done is what I should do. :-)

In fact, I really need improve myself: e.g. how to make negative effect
lowest (e.g. how to let more members pleased with what I have done), how
to improve efficiency (make my waste mail lower) ...


> Most of your patches have already been folded into ARC for 3.13. I will send out
> the patches for some of the cross-arch changes in next development cycle as
> currently I need to finish up a few things for upcoming merge window.
> 

OK, thanks.

> We are actively working on toolchain issues and hopefully the fixes will make it
> into next formal release of tools. Please check back in few weeks.
> 

OK, I will/should focus.

And for gcc issue #27, I shrank the demo source file is about 1K lines
(shrank from 50K lines to 1K lines), although it is still a big file
which can be shrunk more.

And excuse me, I don't know how to past this file on this website, so I
load it as attachment, please check.


Thanks.
-- 
Chen Gang

[-- Attachment #2: target_core_pr.i.shrink3.line_1K.i --]
[-- Type: text/plain, Size: 35543 bytes --]

typedef char __s8;
typedef unsigned char __u8;
typedef short __s16;
typedef unsigned short __u16;
typedef int __s32;
typedef unsigned int __u32;
typedef long long __s64;
typedef unsigned long long __u64;
typedef signed char s8;
typedef unsigned char u8;
typedef signed short s16;
typedef unsigned short u16;
typedef signed int s32;
typedef unsigned int u32;
typedef signed long long s64;
typedef unsigned long long u64;
enum {
 false = 0,
 true = 1
};
typedef struct {
 unsigned long fds_bits[1024 / (8 * sizeof(long))];
} __kernel_fd_set;
typedef void (*__kernel_sighandler_t)(int);
typedef int __kernel_key_t;
typedef int __kernel_mqd_t;
typedef long __kernel_long_t;
typedef unsigned long __kernel_ulong_t;
typedef __kernel_ulong_t __kernel_ino_t;
typedef unsigned int __kernel_mode_t;
typedef int __kernel_pid_t;
typedef int __kernel_ipc_pid_t;
typedef unsigned int __kernel_uid_t;
typedef unsigned int __kernel_gid_t;
typedef __kernel_long_t __kernel_suseconds_t;
typedef int __kernel_daddr_t;
typedef unsigned int __kernel_uid32_t;
typedef unsigned int __kernel_gid32_t;
typedef __kernel_uid_t __kernel_old_uid_t;
typedef __kernel_gid_t __kernel_old_gid_t;
typedef unsigned int __kernel_old_dev_t;
typedef unsigned int __kernel_size_t;
typedef int __kernel_ssize_t;
typedef int __kernel_ptrdiff_t;
typedef struct {
 int val[2];
} __kernel_fsid_t;
typedef __kernel_long_t __kernel_off_t;
typedef long long __kernel_loff_t;
typedef __kernel_long_t __kernel_time_t;
typedef __kernel_long_t __kernel_clock_t;
typedef int __kernel_timer_t;
typedef int __kernel_clockid_t;
typedef char * __kernel_caddr_t;
typedef unsigned short __kernel_uid16_t;
typedef unsigned short __kernel_gid16_t;
typedef __u16 __le16;
typedef __u16 __be16;
typedef __u32 __le32;
typedef __u32 __be32;
typedef __u64 __le64;
typedef __u64 __be64;
typedef __u16 __sum16;
typedef __u32 __wsum;
typedef __u32 __kernel_dev_t;
typedef __kernel_fd_set fd_set;
typedef __kernel_dev_t dev_t;
typedef __kernel_ino_t ino_t;
typedef __kernel_mode_t mode_t;
typedef unsigned short umode_t;
typedef __u32 nlink_t;
typedef __kernel_off_t off_t;
typedef __kernel_pid_t pid_t;
typedef __kernel_daddr_t daddr_t;
typedef __kernel_key_t key_t;
typedef __kernel_suseconds_t suseconds_t;
typedef __kernel_timer_t timer_t;
typedef __kernel_clockid_t clockid_t;
typedef __kernel_mqd_t mqd_t;
typedef _Bool bool;
typedef __kernel_uid32_t uid_t;
typedef __kernel_gid32_t gid_t;
typedef __kernel_uid16_t uid16_t;
typedef __kernel_gid16_t gid16_t;
typedef unsigned long uintptr_t;
typedef __kernel_loff_t loff_t;
typedef __kernel_size_t size_t;
typedef __kernel_ssize_t ssize_t;
typedef __kernel_ptrdiff_t ptrdiff_t;
typedef __kernel_time_t time_t;
typedef __kernel_clock_t clock_t;
typedef __kernel_caddr_t caddr_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned char unchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef __u8 u_int8_t;
typedef __s8 int8_t;
typedef __u16 u_int16_t;
typedef __s16 int16_t;
typedef __u32 u_int32_t;
typedef __s32 int32_t;
typedef __u8 uint8_t;
typedef __u16 uint16_t;
typedef __u32 uint32_t;
typedef __u64 uint64_t;
typedef __u64 u_int64_t;
typedef __s64 int64_t;
typedef u64 sector_t;
typedef u64 blkcnt_t;
typedef u32 dma_addr_t;
typedef unsigned gfp_t;
typedef unsigned fmode_t;
typedef unsigned oom_flags_t;
typedef u32 phys_addr_t;
typedef phys_addr_t resource_size_t;
typedef unsigned long irq_hw_number_t;
typedef struct {
 int counter;
} atomic_t;
struct list_head {
 struct list_head *next, *prev;
};
typedef struct {
 volatile unsigned int slock;
} arch_spinlock_t;
typedef struct raw_spinlock {
 arch_spinlock_t raw_lock;
 unsigned int magic, owner_cpu;
 void *owner;
} raw_spinlock_t;
typedef struct spinlock {
 union {
  struct raw_spinlock rlock;
 };
} spinlock_t;
typedef atomic_t atomic_long_t;
typedef struct __wait_queue wait_queue_t;
typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, void *key);

struct __wait_queue {
 unsigned int flags;
 void *private;
 wait_queue_func_t func;
 struct list_head task_list;
};
struct wait_bit_key {
 void *flags;
 int bit_nr;
};
struct wait_bit_queue {
 struct wait_bit_key key;
 wait_queue_t wait;
};
struct __wait_queue_head {
 spinlock_t lock;
 struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;
struct mutex {
 atomic_t count;
 spinlock_t wait_lock;
 struct list_head wait_list;
 struct task_struct *owner;
 const char *name;
 void *magic;
};
typedef struct cpumask { unsigned long bits[(((2) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))]; } cpumask_t;
struct completion {
 unsigned int done;
 wait_queue_head_t wait;
};
struct workqueue_struct;
struct work_struct;
typedef void (*work_func_t)(struct work_struct *work);
void delayed_work_timer_fn(unsigned long __data);

enum {
 WORK_STRUCT_PENDING_BIT = 0,
 WORK_STRUCT_DELAYED_BIT = 1,
 WORK_STRUCT_PWQ_BIT = 2,
 WORK_STRUCT_LINKED_BIT = 3,
 WORK_STRUCT_STATIC_BIT = 4,
 WORK_STRUCT_COLOR_SHIFT = 5,
 WORK_STRUCT_COLOR_BITS = 4,
 WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT,
 WORK_STRUCT_DELAYED = 1 << WORK_STRUCT_DELAYED_BIT,
 WORK_STRUCT_PWQ = 1 << WORK_STRUCT_PWQ_BIT,
 WORK_STRUCT_LINKED = 1 << WORK_STRUCT_LINKED_BIT,
 WORK_STRUCT_STATIC = 1 << WORK_STRUCT_STATIC_BIT,
 WORK_NR_COLORS = (1 << WORK_STRUCT_COLOR_BITS) - 1,
 WORK_NO_COLOR = WORK_NR_COLORS,
 WORK_CPU_UNBOUND = 2,
 WORK_CPU_END = 2 + 1,
 WORK_STRUCT_FLAG_BITS = WORK_STRUCT_COLOR_SHIFT + WORK_STRUCT_COLOR_BITS,
 WORK_OFFQ_FLAG_BASE = WORK_STRUCT_COLOR_SHIFT,
 WORK_OFFQ_CANCELING = (1 << WORK_OFFQ_FLAG_BASE),
 WORK_OFFQ_FLAG_BITS = 1,
 WORK_OFFQ_POOL_SHIFT = WORK_OFFQ_FLAG_BASE + WORK_OFFQ_FLAG_BITS,
 WORK_OFFQ_LEFT = 32 - WORK_OFFQ_POOL_SHIFT,
 WORK_OFFQ_POOL_BITS = WORK_OFFQ_LEFT <= 31 ? WORK_OFFQ_LEFT : 31,
 WORK_OFFQ_POOL_NONE = (1LU << WORK_OFFQ_POOL_BITS) - 1,
 WORK_STRUCT_FLAG_MASK = (1UL << WORK_STRUCT_FLAG_BITS) - 1,
 WORK_STRUCT_WQ_DATA_MASK = ~WORK_STRUCT_FLAG_MASK,
 WORK_STRUCT_NO_POOL = (unsigned long)WORK_OFFQ_POOL_NONE << WORK_OFFQ_POOL_SHIFT,
 WORK_BUSY_PENDING = 1 << 0,
 WORK_BUSY_RUNNING = 1 << 1,
 WORKER_DESC_LEN = 24,
};
struct work_struct {
 atomic_long_t data;
 struct list_head entry;
 work_func_t func;
};
struct kref {
 atomic_t refcount;
};
enum dma_data_direction {
 DMA_BIDIRECTIONAL = 0,
 DMA_TO_DEVICE = 1,
 DMA_FROM_DEVICE = 2,
 DMA_NONE = 3,
};
struct semaphore {
 raw_spinlock_t lock;
 unsigned int count;
 struct list_head wait_list;
};
struct config_item {
 char *ci_name;
 char ci_namebuf[20];
 struct kref ci_kref;
 struct list_head ci_entry;
 struct config_item *ci_parent;
 struct config_group *ci_group;
 struct config_item_type *ci_type;
 struct dentry *ci_dentry;
};
struct config_item_type {
 struct module *ct_owner;
 struct configfs_item_operations *ct_item_ops;
 struct configfs_group_operations *ct_group_ops;
 struct configfs_attribute **ct_attrs;
};
struct config_group {
 struct config_item cg_item;
 struct list_head cg_children;
 struct configfs_subsystem *cg_subsys;
 struct config_group **default_groups;
};
struct configfs_attribute {
 const char *ca_name;
 struct module *ca_owner;
 umode_t ca_mode;
};
struct percpu_ida_cpu;
struct percpu_ida {
 unsigned nr_tags;
 struct percpu_ida_cpu *tag_cpu;
 cpumask_t cpus_have_tags;
 struct {
  spinlock_t lock;
  unsigned cpu_last_stolen;
  wait_queue_head_t wait;
  unsigned nr_free;
  unsigned *freelist;
 } __attribute__((__aligned__((1 << 6))));
};
enum hba_flags_table {
 HBA_FLAGS_INTERNAL_USE = 0x01,
 HBA_FLAGS_PSCSI_MODE = 0x02,
};
enum transport_lun_status_table {
 TRANSPORT_LUN_STATUS_FREE = 0,
 TRANSPORT_LUN_STATUS_ACTIVE = 1,
};
enum transport_tpg_type_table {
 TRANSPORT_TPG_TYPE_NORMAL = 0,
 TRANSPORT_TPG_TYPE_DISCOVERY = 1,
};
enum transport_state_table {
 TRANSPORT_NO_STATE = 0,
 TRANSPORT_NEW_CMD = 1,
 TRANSPORT_WRITE_PENDING = 3,
 TRANSPORT_PROCESSING = 5,
 TRANSPORT_COMPLETE = 6,
 TRANSPORT_ISTATE_PROCESSING = 11,
 TRANSPORT_COMPLETE_QF_WP = 18,
 TRANSPORT_COMPLETE_QF_OK = 19,
};
enum se_cmd_flags_table {
 SCF_SUPPORTED_SAM_OPCODE = 0x00000001,
 SCF_TRANSPORT_TASK_SENSE = 0x00000002,
 SCF_EMULATED_TASK_SENSE = 0x00000004,
 SCF_SCSI_DATA_CDB = 0x00000008,
 SCF_SCSI_TMR_CDB = 0x00000010,
 SCF_FUA = 0x00000080,
 SCF_SE_LUN_CMD = 0x00000100,
 SCF_BIDI = 0x00000400,
 SCF_SENT_CHECK_CONDITION = 0x00000800,
 SCF_OVERFLOW_BIT = 0x00001000,
 SCF_UNDERFLOW_BIT = 0x00002000,
 SCF_SENT_DELAYED_TAS = 0x00004000,
 SCF_ALUA_NON_OPTIMIZED = 0x00008000,
 SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00020000,
 SCF_ACK_KREF = 0x00040000,
 SCF_COMPARE_AND_WRITE = 0x00080000,
 SCF_COMPARE_AND_WRITE_POST = 0x00100000,
 SCF_CMD_XCOPY_PASSTHROUGH = 0x00200000,
};
enum transport_lunflags_table {
 TRANSPORT_LUNFLAGS_NO_ACCESS = 0x00,
 TRANSPORT_LUNFLAGS_INITIATOR_ACCESS = 0x01,
 TRANSPORT_LUNFLAGS_READ_ONLY = 0x02,
 TRANSPORT_LUNFLAGS_READ_WRITE = 0x04,
};

typedef unsigned sense_reason_t;

enum tcm_sense_reason_table {
 TCM_NO_SENSE = ( sense_reason_t )(0x00),
 TCM_NON_EXISTENT_LUN = ( sense_reason_t )(0x01),
 TCM_UNSUPPORTED_SCSI_OPCODE = ( sense_reason_t )(0x02),
 TCM_INCORRECT_AMOUNT_OF_DATA = ( sense_reason_t )(0x03),
 TCM_UNEXPECTED_UNSOLICITED_DATA = ( sense_reason_t )(0x04),
 TCM_SERVICE_CRC_ERROR = ( sense_reason_t )(0x05),
 TCM_SNACK_REJECTED = ( sense_reason_t )(0x06),
 TCM_SECTOR_COUNT_TOO_MANY = ( sense_reason_t )(0x07),
 TCM_INVALID_CDB_FIELD = ( sense_reason_t )(0x08),
 TCM_INVALID_PARAMETER_LIST = ( sense_reason_t )(0x09),
 TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE = ( sense_reason_t )(0x0a),
 TCM_UNKNOWN_MODE_PAGE = ( sense_reason_t )(0x0b),
 TCM_WRITE_PROTECTED = ( sense_reason_t )(0x0c),
 TCM_CHECK_CONDITION_ABORT_CMD = ( sense_reason_t )(0x0d),
 TCM_CHECK_CONDITION_UNIT_ATTENTION = ( sense_reason_t )(0x0e),
 TCM_CHECK_CONDITION_NOT_READY = ( sense_reason_t )(0x0f),
 TCM_RESERVATION_CONFLICT = ( sense_reason_t )(0x10),
 TCM_ADDRESS_OUT_OF_RANGE = ( sense_reason_t )(0x11),
 TCM_OUT_OF_RESOURCES = ( sense_reason_t )(0x12),
 TCM_PARAMETER_LIST_LENGTH_ERROR = ( sense_reason_t )(0x13),
 TCM_MISCOMPARE_VERIFY = ( sense_reason_t )(0x14),
};
enum target_sc_flags_table {
 TARGET_SCF_BIDI_OP = 0x01,
 TARGET_SCF_ACK_KREF = 0x02,
 TARGET_SCF_UNKNOWN_SIZE = 0x04,
};
enum tcm_tmreq_table {
 TMR_ABORT_TASK = 1,
 TMR_ABORT_TASK_SET = 2,
 TMR_CLEAR_ACA = 3,
 TMR_CLEAR_TASK_SET = 4,
 TMR_LUN_RESET = 5,
 TMR_TARGET_WARM_RESET = 6,
 TMR_TARGET_COLD_RESET = 7,
};
enum tcm_tmrsp_table {
 TMR_FUNCTION_COMPLETE = 1,
 TMR_TASK_DOES_NOT_EXIST = 2,
 TMR_LUN_DOES_NOT_EXIST = 3,
 TMR_TASK_MGMT_FUNCTION_NOT_SUPPORTED = 4,
 TMR_FUNCTION_REJECTED = 5,
};
typedef enum {
 SCSI_INST_INDEX,
 SCSI_DEVICE_INDEX,
 SCSI_AUTH_INTR_INDEX,
 SCSI_INDEX_TYPE_MAX
} scsi_index_t;

struct se_cmd;

struct t10_alua {
 u16 alua_tg_pt_gps_counter;
 u32 alua_tg_pt_gps_count;
 spinlock_t tg_pt_gps_lock;
 struct se_device *t10_dev;
 struct t10_alua_tg_pt_gp *default_tg_pt_gp;
 struct config_group alua_tg_pt_gps_group;
 struct list_head tg_pt_gps_list;
};
struct t10_alua_lu_gp {
 u16 lu_gp_id;
 int lu_gp_valid_id;
 u32 lu_gp_members;
 atomic_t lu_gp_ref_cnt;
 spinlock_t lu_gp_lock;
 struct config_group lu_gp_group;
 struct list_head lu_gp_node;
 struct list_head lu_gp_mem_list;
};
struct t10_alua_lu_gp_member {
 bool lu_gp_assoc;
 atomic_t lu_gp_mem_ref_cnt;
 spinlock_t lu_gp_mem_lock;
 struct t10_alua_lu_gp *lu_gp;
 struct se_device *lu_gp_mem_dev;
 struct list_head lu_gp_mem_list;
};
struct t10_alua_tg_pt_gp {
 u16 tg_pt_gp_id;
 int tg_pt_gp_valid_id;
 int tg_pt_gp_alua_access_status;
 int tg_pt_gp_alua_access_type;
 int tg_pt_gp_nonop_delay_msecs;
 int tg_pt_gp_trans_delay_msecs;
 int tg_pt_gp_implict_trans_secs;
 int tg_pt_gp_pref;
 int tg_pt_gp_write_metadata;
 u32 tg_pt_gp_md_buf_len;
 u32 tg_pt_gp_members;
 atomic_t tg_pt_gp_alua_access_state;
 atomic_t tg_pt_gp_ref_cnt;
 spinlock_t tg_pt_gp_lock;
 struct mutex tg_pt_gp_md_mutex;
 struct se_device *tg_pt_gp_dev;
 struct config_group tg_pt_gp_group;
 struct list_head tg_pt_gp_list;
 struct list_head tg_pt_gp_mem_list;
};
struct t10_alua_tg_pt_gp_member {
 bool tg_pt_gp_assoc;
 atomic_t tg_pt_gp_mem_ref_cnt;
 spinlock_t tg_pt_gp_mem_lock;
 struct t10_alua_tg_pt_gp *tg_pt_gp;
 struct se_port *tg_pt;
 struct list_head tg_pt_gp_mem_list;
};
struct t10_wwn {
 char vendor[8];
 char model[16];
 char revision[4];
 char unit_serial[254];
 spinlock_t t10_vpd_lock;
 struct se_device *t10_dev;
 struct config_group t10_wwn_group;
 struct list_head t10_vpd_list;
};

struct t10_pr_registration {
 char pr_reg_isid[16];
 unsigned char pr_iport[256];
 unsigned char pr_tport[256];
 u16 pr_aptpl_rpti;
 u16 pr_reg_tpgt;
 int pr_reg_all_tg_pt;
 int pr_reg_aptpl;
 int pr_res_holder;
 int pr_res_type;
 int pr_res_scope;
 bool isid_present_at_reg;
 u32 pr_res_mapped_lun;
 u32 pr_aptpl_target_lun;
 u32 pr_res_generation;
 u64 pr_reg_bin_isid;
 u64 pr_res_key;
 atomic_t pr_res_holders;
 struct se_node_acl *pr_reg_nacl;
 struct se_dev_entry *pr_reg_deve;
 struct se_lun *pr_reg_tg_pt_lun;
 struct list_head pr_reg_list;
 struct list_head pr_reg_abort_list;
 struct list_head pr_reg_aptpl_list;
 struct list_head pr_reg_atp_list;
 struct list_head pr_reg_atp_mem_list;
};
struct t10_reservation {
 int pr_all_tg_pt;
 int pr_aptpl_active;
 u32 pr_generation;
 spinlock_t registration_lock;
 spinlock_t aptpl_reg_lock;
 struct se_node_acl *pr_res_holder;
 struct list_head registration_list;
 struct list_head aptpl_reg_list;
};
struct se_tmr_req {
 u8 function;
 u8 response;
 int call_transport;
 u32 ref_task_tag;
 void *fabric_tmr_ptr;
 struct se_cmd *task_cmd;
 struct se_device *tmr_dev;
 struct se_lun *tmr_lun;
 struct list_head tmr_list;
};
struct se_cmd {
 u8 scsi_status;
 u8 scsi_asc;
 u8 scsi_ascq;
 u16 scsi_sense_length;
 int alua_nonop_delay;
 enum dma_data_direction data_direction;
 int sam_task_attr;
 unsigned int map_tag;
 enum transport_state_table t_state;
 unsigned cmd_wait_set:1;
 unsigned unknown_data_length:1;
 u32 se_cmd_flags;
 u32 se_ordered_id;
 u32 data_length;
 u32 residual_count;
 u32 orig_fe_lun;
 u64 pr_res_key;
 void *sense_buffer;
 struct list_head se_delayed_node;
 struct list_head se_lun_node;
 struct list_head se_qf_node;
 struct se_device *se_dev;
 struct se_dev_entry *se_deve;
 struct se_lun *se_lun;
 struct se_session *se_sess;
 struct se_tmr_req *se_tmr_req;
 struct list_head se_cmd_list;
 struct completion cmd_wait_comp;
 struct kref cmd_kref;
 struct target_core_fabric_ops *se_tfo;
 sense_reason_t (*execute_cmd)(struct se_cmd *);
 sense_reason_t (*execute_rw)(struct se_cmd *, struct scatterlist *, u32, enum dma_data_direction);
 sense_reason_t (*transport_complete_callback)(struct se_cmd *);
 unsigned char *t_task_cdb;
 unsigned char __t_task_cdb[32];
 unsigned long long t_task_lba;
 unsigned int t_task_nolb;
 unsigned int transport_state;
 spinlock_t t_state_lock;
 struct completion t_transport_stop_comp;
 struct completion transport_lun_fe_stop_comp;
 struct completion transport_lun_stop_comp;
 struct work_struct work;
 struct scatterlist *t_data_sg;
 struct scatterlist *t_data_sg_orig;
 unsigned int t_data_nents;
 unsigned int t_data_nents_orig;
 void *t_data_vmap;
 struct scatterlist *t_bidi_data_sg;
 unsigned int t_bidi_data_nents;
 struct list_head state_list;
 bool state_active;
 struct completion task_stop_comp;
 void *priv;
};
struct se_ua {
 u8 ua_asc;
 u8 ua_ascq;
 struct se_node_acl *ua_nacl;
 struct list_head ua_dev_list;
 struct list_head ua_nacl_list;
};
struct se_node_acl {
 char initiatorname[224];
 bool dynamic_node_acl;
 bool acl_stop:1;
 u32 queue_depth;
 u32 acl_index;
 char acl_tag[64];
 u64 num_cmds;
 u64 read_bytes;
 u64 write_bytes;
 spinlock_t stats_lock;
 atomic_t acl_pr_ref_count;
 struct se_dev_entry **device_list;
 struct se_session *nacl_sess;
 struct se_portal_group *se_tpg;
 spinlock_t device_list_lock;
 spinlock_t nacl_sess_lock;
 struct config_group acl_group;
 struct config_group acl_attrib_group;
 struct config_group acl_auth_group;
 struct config_group acl_param_group;
 struct config_group acl_fabric_stat_group;
 struct config_group *acl_default_groups[5];
 struct list_head acl_list;
 struct list_head acl_sess_list;
 struct completion acl_free_comp;
 struct kref acl_kref;
};
struct se_session {
 unsigned sess_tearing_down:1;
 u64 sess_bin_isid;
 struct se_node_acl *se_node_acl;
 struct se_portal_group *se_tpg;
 void *fabric_sess_ptr;
 struct list_head sess_list;
 struct list_head sess_acl_list;
 struct list_head sess_cmd_list;
 struct list_head sess_wait_list;
 spinlock_t sess_cmd_lock;
 struct kref sess_kref;
 void *sess_cmd_map;
 struct percpu_ida sess_tag_pool;
};
struct se_device;
struct se_transform_info;
struct scatterlist;
struct se_ml_stat_grps {
 struct config_group stat_group;
 struct config_group scsi_auth_intr_group;
 struct config_group scsi_att_intr_port_group;
};
struct se_lun_acl {
 char initiatorname[224];
 u32 mapped_lun;
 struct se_node_acl *se_lun_nacl;
 struct se_lun *se_lun;
 struct list_head lacl_list;
 struct config_group se_lun_group;
 struct se_ml_stat_grps ml_stat_grps;
};
struct se_dev_entry {
 bool def_pr_registered;
 u32 lun_flags;
 u32 mapped_lun;
 u32 total_cmds;
 u64 pr_res_key;
 u64 creation_time;
 u32 attach_count;
 u64 read_bytes;
 u64 write_bytes;
 atomic_t ua_count;
 atomic_t pr_ref_count;
 struct se_lun_acl *se_lun_acl;
 spinlock_t ua_lock;
 struct se_lun *se_lun;
 struct list_head alua_port_list;
 struct list_head ua_list;
};
struct se_dev_attrib {
 int emulate_model_alias;
 int emulate_dpo;
 int emulate_fua_write;
 int emulate_fua_read;
 int emulate_write_cache;
 int emulate_ua_intlck_ctrl;
 int emulate_tas;
 int emulate_tpu;
 int emulate_tpws;
 int emulate_caw;
 int emulate_3pc;
 int enforce_pr_isids;
 int is_nonrot;
 int emulate_rest_reord;
 u32 hw_block_size;
 u32 block_size;
 u32 hw_max_sectors;
 u32 fabric_max_sectors;
 u32 optimal_sectors;
 u32 hw_queue_depth;
 u32 queue_depth;
 u32 max_unmap_lba_count;
 u32 max_unmap_block_desc_count;
 u32 unmap_granularity;
 u32 unmap_granularity_alignment;
 u32 max_write_same_len;
 struct se_device *da_dev;
 struct config_group da_group;
};
struct se_dev_stat_grps {
 struct config_group stat_group;
 struct config_group scsi_dev_group;
 struct config_group scsi_tgt_dev_group;
 struct config_group scsi_lu_group;
};
struct se_device {
 u32 dev_link_magic;
 u16 dev_rpti_counter;
 u32 dev_cur_ordered_id;
 u32 dev_flags;
 u32 dev_port_count;
 u32 queue_depth;
 u64 dev_res_bin_isid;
 u32 dev_index;
 u64 creation_time;
 u32 num_resets;
 u64 num_cmds;
 u64 read_bytes;
 u64 write_bytes;
 spinlock_t stats_lock;
 atomic_t simple_cmds;
 atomic_t dev_ordered_id;
 atomic_t dev_ordered_sync;
 atomic_t dev_qf_count;
 int export_count;
 spinlock_t delayed_cmd_lock;
 spinlock_t execute_task_lock;
 spinlock_t dev_reservation_lock;
 unsigned int dev_reservation_flags;
 spinlock_t se_port_lock;
 spinlock_t se_tmr_lock;
 spinlock_t qf_cmd_lock;
 struct semaphore caw_sem;
 struct se_node_acl *dev_reserved_node_acl;
 struct t10_alua_lu_gp_member *dev_alua_lu_gp_mem;
 struct t10_pr_registration *dev_pr_res_holder;
 struct list_head dev_sep_list;
 struct list_head dev_tmr_list;
 struct workqueue_struct *tmr_wq;
 struct work_struct qf_work_queue;
 struct list_head delayed_cmd_list;
 struct list_head state_list;
 struct list_head qf_cmd_list;
 struct list_head g_dev_node;
 struct se_hba *se_hba;
 struct t10_wwn t10_wwn;
 struct t10_alua t10_alua;
 struct t10_reservation t10_pr;
 struct se_dev_attrib dev_attrib;
 struct config_group dev_group;
 struct config_group dev_pr_group;
 struct se_dev_stat_grps dev_stat_grps;
 unsigned char dev_alias[512];
 unsigned char udev_path[512];
 struct se_subsystem_api *transport;
 struct list_head dev_list;
};
struct se_hba {
 u16 hba_tpgt;
 u32 hba_id;
 u32 hba_flags;
 u32 dev_count;
 u32 hba_index;
 void *hba_ptr;
 struct list_head hba_node;
 spinlock_t device_lock;
 struct config_group hba_group;
 struct mutex hba_access_mutex;
 struct se_subsystem_api *transport;
};
struct se_port_stat_grps {
 struct config_group stat_group;
 struct config_group scsi_port_group;
 struct config_group scsi_tgt_port_group;
 struct config_group scsi_transport_group;
};

struct se_lun {
 u32 lun_link_magic;
 enum transport_lun_status_table lun_status;
 u32 lun_access;
 u32 lun_flags;
 u32 unpacked_lun;
 atomic_t lun_acl_count;
 spinlock_t lun_acl_lock;
 spinlock_t lun_cmd_lock;
 spinlock_t lun_sep_lock;
 struct completion lun_shutdown_comp;
 struct list_head lun_cmd_list;
 struct list_head lun_acl_list;
 struct se_device *lun_se_dev;
 struct se_port *lun_sep;
 struct config_group lun_group;
 struct se_port_stat_grps port_stat_grps;
};
struct scsi_port_stats {
       u64 cmd_pdus;
       u64 tx_data_octets;
       u64 rx_data_octets;
};
struct se_port {
 u16 sep_rtpi;
 int sep_tg_pt_secondary_stat;
 int sep_tg_pt_secondary_write_md;
 u32 sep_index;
 struct scsi_port_stats sep_stats;
 atomic_t sep_tg_pt_secondary_offline;
 atomic_t sep_tg_pt_ref_cnt;
 spinlock_t sep_alua_lock;
 struct mutex sep_tg_pt_md_mutex;
 struct t10_alua_tg_pt_gp_member *sep_alua_tg_pt_gp_mem;
 struct se_lun *sep_lun;
 struct se_portal_group *sep_tpg;
 struct list_head sep_alua_list;
 struct list_head sep_list;
};
struct se_tpg_np {
 struct se_portal_group *tpg_np_parent;
 struct config_group tpg_np_group;
};
struct se_portal_group {
 enum transport_tpg_type_table se_tpg_type;
 u32 num_node_acls;
 atomic_t tpg_pr_ref_count;
 spinlock_t acl_node_lock;
 spinlock_t session_lock;
 spinlock_t tpg_lun_lock;
 void *se_tpg_fabric_ptr;
 struct list_head se_tpg_node;
 struct list_head acl_node_list;
 struct se_lun **tpg_lun_list;
 struct se_lun tpg_virt_lun0;
 struct list_head tpg_sess_list;
 struct target_core_fabric_ops *se_tpg_tfo;
 struct se_wwn *se_tpg_wwn;
 struct config_group tpg_group;
 struct config_group *tpg_default_groups[7];
 struct config_group tpg_lun_group;
 struct config_group tpg_np_group;
 struct config_group tpg_acl_group;
 struct config_group tpg_attrib_group;
 struct config_group tpg_auth_group;
 struct config_group tpg_param_group;
};
struct se_wwn {
 struct target_fabric_configfs *wwn_tf;
 struct config_group wwn_group;
 struct config_group *wwn_default_groups[2];
 struct config_group fabric_stat_group;
};

void *transport_kmap_data_sg(struct se_cmd *);
void transport_kunmap_data_sg(struct se_cmd *);

struct target_core_fabric_ops {
 struct configfs_subsystem *tf_subsys;
 char *(*get_fabric_name)(void);
 u8 (*get_fabric_proto_ident)(struct se_portal_group *);
 char *(*tpg_get_wwn)(struct se_portal_group *);
 u16 (*tpg_get_tag)(struct se_portal_group *);
 u32 (*tpg_get_default_depth)(struct se_portal_group *);
 u32 (*tpg_get_pr_transport_id)(struct se_portal_group *, struct se_node_acl *, struct t10_pr_registration *, int *, unsigned char *);
 u32 (*tpg_get_pr_transport_id_len)(struct se_portal_group *, struct se_node_acl *, struct t10_pr_registration *, int *);
 char *(*tpg_parse_pr_out_transport_id)(struct se_portal_group *, const char *, u32 *, char **);
 int (*tpg_check_demo_mode)(struct se_portal_group *);
 int (*tpg_check_demo_mode_cache)(struct se_portal_group *);
 int (*tpg_check_demo_mode_write_protect)(struct se_portal_group *);
 int (*tpg_check_prod_mode_write_protect)(struct se_portal_group *);
 int (*tpg_check_demo_mode_login_only)(struct se_portal_group *);
 struct se_node_acl *(*tpg_alloc_fabric_acl)( struct se_portal_group *);
 void (*tpg_release_fabric_acl)(struct se_portal_group *, struct se_node_acl *);
 u32 (*tpg_get_inst_index)(struct se_portal_group *);
 int (*check_stop_free)(struct se_cmd *);
 void (*release_cmd)(struct se_cmd *);
 void (*put_session)(struct se_session *);
 int (*shutdown_session)(struct se_session *);
 void (*close_session)(struct se_session *);
 u32 (*sess_get_index)(struct se_session *);
 u32 (*sess_get_initiator_sid)(struct se_session *, unsigned char *, u32);
 int (*write_pending)(struct se_cmd *);
 int (*write_pending_status)(struct se_cmd *);
 void (*set_default_node_attributes)(struct se_node_acl *);
 u32 (*get_task_tag)(struct se_cmd *);
 int (*get_cmd_state)(struct se_cmd *);
 int (*queue_data_in)(struct se_cmd *);
 int (*queue_status)(struct se_cmd *);
 void (*queue_tm_rsp)(struct se_cmd *);
 struct se_wwn *(*fabric_make_wwn)(struct target_fabric_configfs *, struct config_group *, const char *);
 void (*fabric_drop_wwn)(struct se_wwn *);
 struct se_portal_group *(*fabric_make_tpg)(struct se_wwn *, struct config_group *, const char *);
 void (*fabric_drop_tpg)(struct se_portal_group *);
 int (*fabric_post_link)(struct se_portal_group *, struct se_lun *);
 void (*fabric_pre_unlink)(struct se_portal_group *, struct se_lun *);
 struct se_tpg_np *(*fabric_make_np)(struct se_portal_group *, struct config_group *, const char *);
 void (*fabric_drop_np)(struct se_tpg_np *);
 struct se_node_acl *(*fabric_make_nodeacl)(struct se_portal_group *, struct config_group *, const char *);
 void (*fabric_drop_nodeacl)(struct se_node_acl *);
};
struct target_fabric_configfs_template {
 struct config_item_type tfc_discovery_cit;
 struct config_item_type tfc_wwn_cit;
 struct config_item_type tfc_wwn_fabric_stats_cit;
 struct config_item_type tfc_tpg_cit;
 struct config_item_type tfc_tpg_base_cit;
 struct config_item_type tfc_tpg_lun_cit;
 struct config_item_type tfc_tpg_port_cit;
 struct config_item_type tfc_tpg_port_stat_cit;
 struct config_item_type tfc_tpg_np_cit;
 struct config_item_type tfc_tpg_np_base_cit;
 struct config_item_type tfc_tpg_attrib_cit;
 struct config_item_type tfc_tpg_auth_cit;
 struct config_item_type tfc_tpg_param_cit;
 struct config_item_type tfc_tpg_nacl_cit;
 struct config_item_type tfc_tpg_nacl_base_cit;
 struct config_item_type tfc_tpg_nacl_attrib_cit;
 struct config_item_type tfc_tpg_nacl_auth_cit;
 struct config_item_type tfc_tpg_nacl_param_cit;
 struct config_item_type tfc_tpg_nacl_stat_cit;
 struct config_item_type tfc_tpg_mappedlun_cit;
 struct config_item_type tfc_tpg_mappedlun_stat_cit;
};
struct target_fabric_configfs {
 char tf_name[32];
 atomic_t tf_access_cnt;
 struct list_head tf_list;
 struct config_group tf_group;
 struct config_group tf_disc_group;
 struct config_group *tf_default_groups[2];
 struct config_item *tf_fabric;
 struct config_item_type *tf_fabric_cit;
 struct configfs_subsystem *tf_subsys;
 struct module *tf_module;
 struct target_core_fabric_ops tf_ops;
 struct target_fabric_configfs_template tf_cit_tmpl;
};

extern sense_reason_t target_scsi3_emulate_pr_in(struct se_cmd *);

static sense_reason_t core_scsi3_pri_read_keys(struct se_cmd *cmd)
{
 struct se_device *dev = cmd->se_dev;
 struct t10_pr_registration *pr_reg;
 unsigned char *buf;
 u32 add_len = 0, off = 8;

 if (cmd->data_length < 8) {
  printk("\001" "3" "PRIN SA READ_KEYS SCSI Data Length: %u" " too small\n", cmd->data_length);
  return TCM_INVALID_CDB_FIELD;
 }

 buf = transport_kmap_data_sg(cmd);
 if (!buf)
  return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;

 buf[0] = ((dev->t10_pr.pr_generation >> 24) & 0xff);
 buf[1] = ((dev->t10_pr.pr_generation >> 16) & 0xff);
 buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
 buf[3] = (dev->t10_pr.pr_generation & 0xff);

 spin_lock(&dev->t10_pr.registration_lock);
 for (pr_reg = ({ const typeof( ((typeof(*pr_reg) *)0)->pr_reg_list ) *__mptr = ((&dev->t10_pr.registration_list)->next); (typeof(*pr_reg) *)( (char *)__mptr - __builtin_offsetof(typeof(*pr_reg),pr_reg_list) );}); &pr_reg->pr_reg_list != (&dev->t10_pr.registration_list); pr_reg = ({ const typeof( ((typeof(*pr_reg) *)0)->pr_reg_list ) *__mptr = (pr_reg->pr_reg_list.next); (typeof(*pr_reg) *)( (char *)__mptr - __builtin_offsetof(typeof(*pr_reg),pr_reg_list) );}))
 {
  if ((add_len + 8) > (cmd->data_length - 8))
   break;
  buf[off++] = ((pr_reg->pr_res_key >> 56) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 48) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 40) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 32) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 24) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 16) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 8) & 0xff);
  buf[off++] = (pr_reg->pr_res_key & 0xff);
  add_len += 8;
 }
 spin_unlock(&dev->t10_pr.registration_lock);

 buf[4] = ((add_len >> 24) & 0xff);
 buf[5] = ((add_len >> 16) & 0xff);
 buf[6] = ((add_len >> 8) & 0xff);
 buf[7] = (add_len & 0xff);
 transport_kunmap_data_sg(cmd);
 return 0;
}

static sense_reason_t core_scsi3_pri_read_reservation(struct se_cmd *cmd)
{
 struct se_device *dev = cmd->se_dev;
 struct t10_pr_registration *pr_reg;
 unsigned char *buf;
 u64 pr_res_key;
 u32 add_len = 16;

 if (cmd->data_length < 8) {
  printk("\001" "3" "PRIN SA READ_RESERVATIONS SCSI Data Length: %u" " too small\n", cmd->data_length)
                                    ;
  return TCM_INVALID_CDB_FIELD;
 }

 buf = transport_kmap_data_sg(cmd);
 if (!buf)
  return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;

 buf[0] = ((dev->t10_pr.pr_generation >> 24) & 0xff);
 buf[1] = ((dev->t10_pr.pr_generation >> 16) & 0xff);
 buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
 buf[3] = (dev->t10_pr.pr_generation & 0xff);

 spin_lock(&dev->dev_reservation_lock);
 pr_reg = dev->dev_pr_res_holder;
 if (pr_reg) {

  buf[4] = ((add_len >> 24) & 0xff);
  buf[5] = ((add_len >> 16) & 0xff);
  buf[6] = ((add_len >> 8) & 0xff);
  buf[7] = (add_len & 0xff);

  if (cmd->data_length < 22)
   goto err;
  if ((pr_reg->pr_res_type == 0x07) ||
      (pr_reg->pr_res_type == 0x08))
   pr_res_key = 0;
  else
   pr_res_key = pr_reg->pr_res_key;

  buf[8] = ((pr_res_key >> 56) & 0xff);
  buf[9] = ((pr_res_key >> 48) & 0xff);
  buf[10] = ((pr_res_key >> 40) & 0xff);
  buf[11] = ((pr_res_key >> 32) & 0xff);
  buf[12] = ((pr_res_key >> 24) & 0xff);
  buf[13] = ((pr_res_key >> 16) & 0xff);
  buf[14] = ((pr_res_key >> 8) & 0xff);
  buf[15] = (pr_res_key & 0xff);
  buf[21] = (pr_reg->pr_res_scope & 0xf0) |
     (pr_reg->pr_res_type & 0x0f);
 }

err:
 spin_unlock(&dev->dev_reservation_lock);
 transport_kunmap_data_sg(cmd);
 return 0;
}


static sense_reason_t core_scsi3_pri_report_capabilities(struct se_cmd *cmd)
{
 struct se_device *dev = cmd->se_dev;
 struct t10_reservation *pr_tmpl = &dev->t10_pr;
 unsigned char *buf;
 u16 add_len = 8;

 if (cmd->data_length < 6) {
  printk("\001" "3" "PRIN SA REPORT_CAPABILITIES SCSI Data Length:" " %u too small\n", cmd->data_length);
  return TCM_INVALID_CDB_FIELD;
 }

 buf = transport_kmap_data_sg(cmd);
 if (!buf)
  return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;

 buf[0] = ((add_len << 8) & 0xff);
 buf[1] = (add_len & 0xff);
 buf[2] |= 0x10;
 buf[2] |= 0x08;
 buf[2] |= 0x04;
 buf[2] |= 0x01;
 buf[3] |= 0x80;
 buf[3] |= 0x10;

 if (pr_tmpl->pr_aptpl_active)
  buf[3] |= 0x01;

 buf[4] |= 0x80;
 buf[4] |= 0x40;
 buf[4] |= 0x20;
 buf[4] |= 0x08;
 buf[4] |= 0x02;
 buf[5] |= 0x01;

 transport_kunmap_data_sg(cmd);
 return 0;
}

static sense_reason_t
core_scsi3_pri_read_full_status(struct se_cmd *cmd)
{
 struct se_device *dev = cmd->se_dev;
 struct se_node_acl *se_nacl;
 struct se_portal_group *se_tpg;
 struct t10_pr_registration *pr_reg, *pr_reg_tmp;
 struct t10_reservation *pr_tmpl = &dev->t10_pr;
 unsigned char *buf;
 u32 add_desc_len = 0, add_len = 0, desc_len, exp_desc_len;
 u32 off = 8;
 int format_code = 0;

 if (cmd->data_length < 8) {
  printk("\001" "3" "PRIN SA READ_FULL_STATUS SCSI Data Length: %u" " too small\n", cmd->data_length)
                                    ;
  return TCM_INVALID_CDB_FIELD;
 }

 buf = transport_kmap_data_sg(cmd);
 if (!buf)
  return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;

 buf[0] = ((dev->t10_pr.pr_generation >> 24) & 0xff);
 buf[1] = ((dev->t10_pr.pr_generation >> 16) & 0xff);
 buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
 buf[3] = (dev->t10_pr.pr_generation & 0xff);

 spin_lock(&pr_tmpl->registration_lock);
 for (pr_reg = ({ const typeof( ((typeof(*pr_reg) *)0)->pr_reg_list ) *__mptr = ((&pr_tmpl->registration_list)->next); (typeof(*pr_reg) *)( (char *)__mptr - __builtin_offsetof(typeof(*pr_reg),pr_reg_list) );}), pr_reg_tmp = ({ const typeof( ((typeof(*pr_reg) *)0)->pr_reg_list ) *__mptr = (pr_reg->pr_reg_list.next); (typeof(*pr_reg) *)( (char *)__mptr - __builtin_offsetof(typeof(*pr_reg),pr_reg_list) );}); &pr_reg->pr_reg_list != (&pr_tmpl->registration_list); pr_reg = pr_reg_tmp, pr_reg_tmp = ({ const typeof( ((typeof(*pr_reg_tmp) *)0)->pr_reg_list ) *__mptr = (pr_reg_tmp->pr_reg_list.next); (typeof(*pr_reg_tmp) *)( (char *)__mptr - __builtin_offsetof(typeof(*pr_reg_tmp),pr_reg_list) );}))
                                             {

  se_nacl = pr_reg->pr_reg_nacl;
  se_tpg = pr_reg->pr_reg_nacl->se_tpg;
  add_desc_len = 0;
  atomic_add(1, &pr_reg->pr_res_holders);
  spin_unlock(&pr_tmpl->registration_lock);

  exp_desc_len = se_tpg->se_tpg_tfo->tpg_get_pr_transport_id_len(
    se_tpg, se_nacl, pr_reg, &format_code);

  if ((exp_desc_len + add_len) > cmd->data_length) {
   printk("\001" "4" "SPC-3 PRIN READ_FULL_STATUS ran" " out of buffer: %d\n", cmd->data_length)
                                             ;
   spin_lock(&pr_tmpl->registration_lock);
   atomic_sub(1, &pr_reg->pr_res_holders);
   break;
  }


  buf[off++] = ((pr_reg->pr_res_key >> 56) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 48) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 40) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 32) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 24) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 16) & 0xff);
  buf[off++] = ((pr_reg->pr_res_key >> 8) & 0xff);
  buf[off++] = (pr_reg->pr_res_key & 0xff);
  off += 4;

  if (pr_reg->pr_reg_all_tg_pt)
   buf[off] = 0x02;

  if (pr_reg->pr_res_holder) {
   buf[off++] |= 0x01;
   buf[off++] = (pr_reg->pr_res_scope & 0xf0) |
         (pr_reg->pr_res_type & 0x0f);
  } else
   off += 2;

  off += 4;
  if (!pr_reg->pr_reg_all_tg_pt) {
   struct se_port *port = pr_reg->pr_reg_tg_pt_lun->lun_sep;

   buf[off++] = ((port->sep_rtpi >> 8) & 0xff);
   buf[off++] = (port->sep_rtpi & 0xff);
  } else
   off += 2;

  desc_len = se_tpg->se_tpg_tfo->tpg_get_pr_transport_id(se_tpg,
    se_nacl, pr_reg, &format_code, &buf[off+4]);

  spin_lock(&pr_tmpl->registration_lock);
  atomic_sub(1, &pr_reg->pr_res_holders);

  buf[off++] = ((desc_len >> 24) & 0xff);
  buf[off++] = ((desc_len >> 16) & 0xff);
  buf[off++] = ((desc_len >> 8) & 0xff);
  buf[off++] = (desc_len & 0xff);

  add_desc_len = (24 + desc_len);

  off += desc_len;
  add_len += add_desc_len;
 }
 spin_unlock(&pr_tmpl->registration_lock);

 buf[4] = ((add_len >> 24) & 0xff);
 buf[5] = ((add_len >> 16) & 0xff);
 buf[6] = ((add_len >> 8) & 0xff);
 buf[7] = (add_len & 0xff);
 transport_kunmap_data_sg(cmd);
 return 0;
}

sense_reason_t target_scsi3_emulate_pr_in(struct se_cmd *cmd)
{
 sense_reason_t ret;
 if (cmd->se_dev->dev_reservation_flags & 0x00000001) {
  printk("\001" "3" "Received PERSISTENT_RESERVE CDB while legacy" " SPC-2 reservation is held, returning" " RESERVATION_CONFLICT\n");
  return TCM_RESERVATION_CONFLICT;
 }

 switch (cmd->t_task_cdb[1] & 0x1f) {
 case 0x00:
  ret = core_scsi3_pri_read_keys(cmd);
  break;
 case 0x01:
  ret = core_scsi3_pri_read_reservation(cmd);
  break;
 case 0x02:
  ret = core_scsi3_pri_report_capabilities(cmd);
  break;
 case 0x03:
  ret = core_scsi3_pri_read_full_status(cmd);
  break;
 default:
  printk("\001" "3" "Unknown PERSISTENT_RESERVE_IN service" " action: 0x%02x\n", cmd->t_task_cdb[1] & 0x1f)
                                                  ;
  return TCM_INVALID_CDB_FIELD;
 }

 if (!ret)
  target_complete_cmd(cmd, 0x00);
 return ret;
}

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2013-10-31  8:51 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-23  6:04 [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code Chen Gang
2013-09-23  6:12 ` Chen Gang
2013-09-23  6:39   ` Vineet Gupta
2013-09-23  6:53     ` Chen Gang
2013-10-23  2:00       ` Chen Gang
2013-10-23  2:48         ` Joern Rennecke
2013-10-23  3:10           ` Chen Gang
2013-10-23 11:14             ` Chen Gang
2013-10-24  5:31               ` [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL() Chen Gang
2013-10-24  6:03                 ` Richard Weinberger
2013-10-24  6:26                   ` Chen Gang
2013-10-24  6:44                     ` Richard Weinberger
2013-10-24  7:40                       ` Chen Gang
2013-10-24 17:28                   ` Portable assmbler code - newline (was Re: [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL()) Vineet Gupta
2013-10-24 19:41                     ` Geert Uytterhoeven
2013-10-25  5:10                       ` Vineet Gupta
2013-10-26 13:38                         ` Chen Gang
2013-10-27  7:28                           ` Portable assmbler code - newline Vineet Gupta
2013-10-27 12:34                             ` Chen Gang
2013-10-27 13:57                               ` Chen Gang
2013-10-24 15:29                 ` [PATCH] kernel/modsign_certificate.S: use real contents instead of macro GLOBAL() Josh Boyer
2013-10-26  2:42                   ` Chen Gang
2013-10-26 14:40                     ` Chen Gang F T
2013-10-29  2:17                 ` [PATCH v2] " Chen Gang
2013-10-30  1:11                   ` [PATCH-next v3] kernel/system_certificate.S: " Chen Gang
2013-10-30 12:57                   ` David Howells
2013-10-31  0:47                     ` Chen Gang
2013-10-23  2:51         ` [Suggestion] arc: compiler: bug: about an arc compiler's bug which is not in gcc main source code Francois Bedard
2013-10-23  3:12           ` Chen Gang
2013-10-30  1:43             ` Chen Gang
2013-10-30 12:10               ` Chen Gang
2013-10-31  7:48               ` Vineet Gupta
2013-10-31  8:50                 ` Chen Gang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).