* Bad ARM code with GCC 4.7.1
@ 2012-05-10 14:28 Gary Thomas
2012-05-10 15:46 ` Khem Raj
0 siblings, 1 reply; 8+ messages in thread
From: Gary Thomas @ 2012-05-10 14:28 UTC (permalink / raw)
To: Poky Project
After updating to the latest master, I'm running into trouble
using GCC 4.7.1 with my ARM kernel(s).
The problem code is in mm/percpu.c - this function [header]
static void pcpu_dump_alloc_info(const char *lvl,
const struct pcpu_alloc_info *ai)
{
int group_width = 1, cpu_width = 1, width;
char empty_str[] = "--------";
int alloc = 0, alloc_end = 0;
int group, v;
int upa, apl; /* units per alloc, allocs per line */
generates this code:
0xc03669d0 <pcpu_dump_alloc_info>: ldr r3, [pc, #532] ; 0xc0366bec <pcpu_dump_alloc_info+540>
0xc03669d4 <pcpu_dump_alloc_info+4>: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
0xc03669d8 <pcpu_dump_alloc_info+8>: sub sp, sp, #52 ; 0x34
0xc03669dc <pcpu_dump_alloc_info+12>: ldr r2, [r3]
0xc03669e0 <pcpu_dump_alloc_info+16>: mov r4, r1
0xc03669e4 <pcpu_dump_alloc_info+20>: mov r10, r0
which in turn generates an alignment exception at pcpu_dump_alloc_info+12
The same code generates this using GCC 4.6.3
0xc02bf6b0 <pcpu_dump_alloc_info>: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
0xc02bf6b4 <pcpu_dump_alloc_info+4>: sub sp, sp, #52 ; 0x34
0xc02bf6b8 <pcpu_dump_alloc_info+8>: mov r4, r1
0xc02bf6bc <pcpu_dump_alloc_info+12>: mov r2, #9
0xc02bf6c0 <pcpu_dump_alloc_info+16>: str r0, [sp, #20]
0xc02bf6c4 <pcpu_dump_alloc_info+20>: add r0, sp, #39 ; 0x27
0xc02bf6c8 <pcpu_dump_alloc_info+24>: ldr r1, [pc, #444] ; 0xc02bf88c <pcpu_dump_alloc_info+476>
0xc02bf6cc <pcpu_dump_alloc_info+28>: mov r9, #1
0xc02bf6d0 <pcpu_dump_alloc_info+32>: bl 0xc017f2a0 <memcpy>
Which looks much better to me - the runtime assignment
char empty_str[] = "--------";
should cause the 9 byte string "--------" to be copied to the
stack variable.
I even tried to rewrite the code to match GCC 4.6.3 as
char empty_str[10];
memcpy(empty_str, "--------", 9);
but GCC 4.7.1 managed to generate the same bad code :-(
If I disable CONFIG_OPTIMIZE_FOR_SPEED, i.e. use -O2 instead of -Os,
this function is compiled properly. Sadly, there are other gremlins
in there as Linux-3.0 still crashes when built with GCC 4.7.1
Are these known problems? Are there work arounds?
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bad ARM code with GCC 4.7.1
2012-05-10 14:28 Bad ARM code with GCC 4.7.1 Gary Thomas
@ 2012-05-10 15:46 ` Khem Raj
2012-05-10 16:17 ` Gary Thomas
0 siblings, 1 reply; 8+ messages in thread
From: Khem Raj @ 2012-05-10 15:46 UTC (permalink / raw)
To: Gary Thomas; +Cc: Poky Project
On Thu, May 10, 2012 at 7:28 AM, Gary Thomas <gary@mlbassoc.com> wrote:
> After updating to the latest master, I'm running into trouble
> using GCC 4.7.1 with my ARM kernel(s).
>
whats your target arm architecture ? and kernel version ?
gcc generate unaligned accesses by default
Does adding -mno-unaligned-access to cflags help ?
> The problem code is in mm/percpu.c - this function [header]
>
> static void pcpu_dump_alloc_info(const char *lvl,
> const struct pcpu_alloc_info *ai)
> {
> int group_width = 1, cpu_width = 1, width;
> char empty_str[] = "--------";
> int alloc = 0, alloc_end = 0;
> int group, v;
> int upa, apl; /* units per alloc, allocs per line */
>
> generates this code:
>
> 0xc03669d0 <pcpu_dump_alloc_info>: ldr r3, [pc, #532] ; 0xc0366bec
> <pcpu_dump_alloc_info+540>
> 0xc03669d4 <pcpu_dump_alloc_info+4>: push {r4, r5, r6, r7, r8, r9, r10,
> r11, lr}
> 0xc03669d8 <pcpu_dump_alloc_info+8>: sub sp, sp, #52 ; 0x34
> 0xc03669dc <pcpu_dump_alloc_info+12>: ldr r2, [r3]
> 0xc03669e0 <pcpu_dump_alloc_info+16>: mov r4, r1
> 0xc03669e4 <pcpu_dump_alloc_info+20>: mov r10, r0
>
> which in turn generates an alignment exception at pcpu_dump_alloc_info+12
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bad ARM code with GCC 4.7.1
2012-05-10 15:46 ` Khem Raj
@ 2012-05-10 16:17 ` Gary Thomas
2012-05-10 16:30 ` Khem Raj
0 siblings, 1 reply; 8+ messages in thread
From: Gary Thomas @ 2012-05-10 16:17 UTC (permalink / raw)
To: Khem Raj; +Cc: Poky Project
On 2012-05-10 09:46, Khem Raj wrote:
> On Thu, May 10, 2012 at 7:28 AM, Gary Thomas<gary@mlbassoc.com> wrote:
>> After updating to the latest master, I'm running into trouble
>> using GCC 4.7.1 with my ARM kernel(s).
>>
>
> whats your target arm architecture ? and kernel version ?
My board is DM3730, much like a BeagleBoard
ARM architecture: armv7a
Linux kernel 3.0
>
> gcc generate unaligned accesses by default
>
> Does adding -mno-unaligned-access to cflags help ?
I'll check.
>
>> The problem code is in mm/percpu.c - this function [header]
>>
>> static void pcpu_dump_alloc_info(const char *lvl,
>> const struct pcpu_alloc_info *ai)
>> {
>> int group_width = 1, cpu_width = 1, width;
>> char empty_str[] = "--------";
>> int alloc = 0, alloc_end = 0;
>> int group, v;
>> int upa, apl; /* units per alloc, allocs per line */
>>
>> generates this code:
>>
>> 0xc03669d0<pcpu_dump_alloc_info>: ldr r3, [pc, #532] ; 0xc0366bec
>> <pcpu_dump_alloc_info+540>
>> 0xc03669d4<pcpu_dump_alloc_info+4>: push {r4, r5, r6, r7, r8, r9, r10,
>> r11, lr}
>> 0xc03669d8<pcpu_dump_alloc_info+8>: sub sp, sp, #52 ; 0x34
>> 0xc03669dc<pcpu_dump_alloc_info+12>: ldr r2, [r3]
>> 0xc03669e0<pcpu_dump_alloc_info+16>: mov r4, r1
>> 0xc03669e4<pcpu_dump_alloc_info+20>: mov r10, r0
>>
>> which in turn generates an alignment exception at pcpu_dump_alloc_info+12
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bad ARM code with GCC 4.7.1
2012-05-10 16:17 ` Gary Thomas
@ 2012-05-10 16:30 ` Khem Raj
2012-05-10 16:49 ` Mark Hatle
2012-05-10 17:08 ` Gary Thomas
0 siblings, 2 replies; 8+ messages in thread
From: Khem Raj @ 2012-05-10 16:30 UTC (permalink / raw)
To: Gary Thomas; +Cc: Poky Project
On Thu, May 10, 2012 at 9:17 AM, Gary Thomas <gary@mlbassoc.com> wrote:
>
> My board is DM3730, much like a BeagleBoard
> ARM architecture: armv7a
> Linux kernel 3.0
hmmm that should be able to handle alignment faults in hardware
>
>
>>
>> gcc generate unaligned accesses by default
>>
>> Does adding -mno-unaligned-access to cflags help ?
>
>
> I'll check.
Its not entirely clear whats going on so post the complete function disassembly
so further context can be seen as well.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bad ARM code with GCC 4.7.1
2012-05-10 16:30 ` Khem Raj
@ 2012-05-10 16:49 ` Mark Hatle
2012-05-10 17:00 ` Khem Raj
2012-05-10 17:08 ` Gary Thomas
1 sibling, 1 reply; 8+ messages in thread
From: Mark Hatle @ 2012-05-10 16:49 UTC (permalink / raw)
To: poky
On 5/10/12 11:30 AM, Khem Raj wrote:
> On Thu, May 10, 2012 at 9:17 AM, Gary Thomas<gary@mlbassoc.com> wrote:
>>
>> My board is DM3730, much like a BeagleBoard
>> ARM architecture: armv7a
>> Linux kernel 3.0
>
> hmmm that should be able to handle alignment faults in hardware
As far as I know, most armv7a handle alignment in the kernel, but there are
newer crops of CPUs coming out that will no longer have alignment handlers as a
"speed optimization".. (I think they're a bit nuts myself, but anyway.)
But if the code in question is inside the kernel, then the alignment faults
won't work -- or will they? (Certainly won't from within the alignment handlers
of course...)
--Mark
>>
>>
>>>
>>> gcc generate unaligned accesses by default
>>>
>>> Does adding -mno-unaligned-access to cflags help ?
>>
>>
>> I'll check.
>
> Its not entirely clear whats going on so post the complete function disassembly
> so further context can be seen as well.
> _______________________________________________
> poky mailing list
> poky@yoctoproject.org
> https://lists.yoctoproject.org/listinfo/poky
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bad ARM code with GCC 4.7.1
2012-05-10 16:49 ` Mark Hatle
@ 2012-05-10 17:00 ` Khem Raj
0 siblings, 0 replies; 8+ messages in thread
From: Khem Raj @ 2012-05-10 17:00 UTC (permalink / raw)
To: Mark Hatle; +Cc: poky
On Thu, May 10, 2012 at 9:49 AM, Mark Hatle <mark.hatle@windriver.com> wrote:
>>>
>>
>> hmmm that should be able to handle alignment faults in hardware
>
>
> As far as I know, most armv7a handle alignment in the kernel, but there are
> newer crops of CPUs coming out that will no longer have alignment handlers
> as a "speed optimization".. (I think they're a bit nuts myself, but anyway.)
thats a different thing. I was talking about unaligned accesses are taken care
by hardware not kernel.
>
> But if the code in question is inside the kernel, then the alignment faults
> won't work -- or will they? (Certainly won't from within the alignment
> handlers of course...)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bad ARM code with GCC 4.7.1
2012-05-10 16:30 ` Khem Raj
2012-05-10 16:49 ` Mark Hatle
@ 2012-05-10 17:08 ` Gary Thomas
2012-05-10 20:06 ` Martin Jansa
1 sibling, 1 reply; 8+ messages in thread
From: Gary Thomas @ 2012-05-10 17:08 UTC (permalink / raw)
To: Khem Raj; +Cc: Poky Project
[-- Attachment #1: Type: text/plain, Size: 985 bytes --]
On 2012-05-10 10:30, Khem Raj wrote:
> On Thu, May 10, 2012 at 9:17 AM, Gary Thomas<gary@mlbassoc.com> wrote:
>>
>> My board is DM3730, much like a BeagleBoard
>> ARM architecture: armv7a
>> Linux kernel 3.0
>
> hmmm that should be able to handle alignment faults in hardware
>
>>
>>
>>>
>>> gcc generate unaligned accesses by default
>>>
>>> Does adding -mno-unaligned-access to cflags help ?
>>
>>
>> I'll check.
Using -mno-unaligned-access fixes this problem, but the kernel just dies a bit
later on (kernel 3.0 + gcc 4.7.1 == bad owies...)
>
> Its not entirely clear whats going on so post the complete function disassembly
> so further context can be seen as well.
Code dump attached - first with /m, then with /r
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
[-- Attachment #2: disas.out --]
[-- Type: text/plain, Size: 19377 bytes --]
Dump of assembler code for function pcpu_dump_alloc_info:
1083 {
0xc03fb7dc <+4>: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
0xc03fb7e0 <+8>: sub sp, sp, #60 ; 0x3c
0xc03fb7e8 <+16>: str r0, [sp, #28]
0xc03fb7f8 <+32>: mov r4, r1
1084 int group_width = 1, cpu_width = 1, width;
0xc03fb808 <+48>: mov r7, #1
0xc03fb828 <+80>: mov r6, #1
1085 char empty_str[] = "--------";
0xc03fb7d8 <+0>: ldr r3, [pc, #552] ; 0xc03fba08 <pcpu_dump_alloc_info+560>
0xc03fb7e4 <+12>: ldr r2, [r3]
0xc03fb7ec <+20>: str r2, [sp, #47] ; 0x2f
0xc03fb7f0 <+24>: ldr r2, [r3, #4]
0xc03fb7f4 <+28>: ldrb r3, [r3, #8]
0xc03fb7fc <+36>: str r2, [sp, #51] ; 0x33
0xc03fb800 <+40>: strb r3, [sp, #55] ; 0x37
1086 int alloc = 0, alloc_end = 0;
0xc03fb8e0 <+264>: mov r8, r5
0xc03fb8f0 <+280>: str r5, [sp, #24]
1087 int group, v;
1088 int upa, apl; /* units per alloc, allocs per line */
1089
1090 v = ai->nr_groups;
0xc03fb804 <+44>: ldr r0, [r1, #28]
1091 while (v /= 10)
0xc03fb80c <+52>: b 0xc03fb814 <pcpu_dump_alloc_info+60>
0xc03fb814 <+60>: mov r1, #10
0xc03fb818 <+64>: bl 0xc02386b8 <__divsi3>
0xc03fb81c <+68>: cmp r0, #0
0xc03fb820 <+72>: bne 0xc03fb810 <pcpu_dump_alloc_info+56>
1092 group_width++;
0xc03fb810 <+56>: add r7, r7, #1
1093
1094 v = num_possible_cpus();
1095 while (v /= 10)
0xc03fb840 <+104>: b 0xc03fb848 <pcpu_dump_alloc_info+112>
0xc03fb848 <+112>: mov r0, r5
0xc03fb84c <+116>: mov r1, #10
0xc03fb850 <+120>: bl 0xc02386b8 <__divsi3>
0xc03fb854 <+124>: subs r5, r0, #0
0xc03fb858 <+128>: bne 0xc03fb844 <pcpu_dump_alloc_info+108>
1096 cpu_width++;
0xc03fb844 <+108>: add r6, r6, #1
1097 empty_str[min_t(int, cpu_width, sizeof(empty_str) - 1)] = '\0';
0xc03fb85c <+132>: add r1, sp, #56 ; 0x38
0xc03fb860 <+136>: cmp r6, #8
0xc03fb864 <+140>: movlt r3, r6
0xc03fb868 <+144>: movge r3, #8
0xc03fb86c <+148>: add r3, r1, r3
0xc03fb878 <+160>: strb r5, [r3, #-9]
1098
1099 upa = ai->alloc_size / ai->unit_size;
0xc03fb870 <+152>: ldr r9, [r4, #20]
0xc03fb874 <+156>: ldr r11, [r4, #12]
0xc03fb87c <+164>: mov r1, r11
0xc03fb880 <+168>: mov r0, r9
0xc03fb884 <+172>: bl 0xc023857c <__udivsi3>
0xc03fb890 <+184>: mov r10, r0
1100 width = upa * (cpu_width + 1) + group_width + 3;
0xc03fb888 <+176>: add r1, r6, #1
0xc03fb88c <+180>: mla r1, r1, r0, r7
1101 apl = rounddown_pow_of_two(max(60 / width, 1));
0xc03fb894 <+188>: add r1, r1, #3
0xc03fb898 <+192>: mov r0, #60 ; 0x3c
0xc03fb89c <+196>: bl 0xc02386b8 <__divsi3>
0xc03fb8ac <+212>: cmp r0, #1
0xc03fb8b0 <+216>: movlt r0, #1
1102
1103 printk("%spcpu-alloc: s%zu r%zu d%zu u%zu alloc=%zu*%zu",
0xc03fb8a8 <+208>: mov r1, r8
0xc03fb8bc <+228>: mov r0, r9
0xc03fb8c4 <+236>: ldr r3, [r4, #8]
0xc03fb8cc <+244>: stm sp, {r3, r11}
0xc03fb8d0 <+248>: bl 0xc023857c <__udivsi3>
0xc03fb8d4 <+252>: str r8, [sp, #12]
0xc03fb8d8 <+256>: ldr r1, [sp, #28]
0xc03fb8dc <+260>: ldm r4, {r2, r3}
0xc03fb8e4 <+268>: str r0, [sp, #8]
0xc03fb8e8 <+272>: ldr r0, [pc, #288] ; 0xc03fba10 <pcpu_dump_alloc_info+568>
0xc03fb8ec <+276>: bl 0xc03f9f48 <printk>
1104 lvl, ai->static_size, ai->reserved_size, ai->dyn_size,
1105 ai->unit_size, ai->alloc_size / ai->atom_size, ai->atom_size);
0xc03fb8a4 <+204>: ldr r8, [r4, #16]
1106
1107 for (group = 0; group < ai->nr_groups; group++) {
0xc03fb8f4 <+284>: b 0xc03fb9ec <pcpu_dump_alloc_info+532>
0xc03fb9e8 <+528>: add r5, r5, #1
0xc03fb9ec <+532>: ldr r3, [r4, #28]
0xc03fb9f0 <+536>: cmp r5, r3
0xc03fb9f4 <+540>: blt 0xc03fb8f8 <pcpu_dump_alloc_info+288>
1108 const struct pcpu_group_info *gi = &ai->groups[group];
0xc03fb8f8 <+288>: mov r3, #12
0xc03fb900 <+296>: mul r3, r3, r5
0xc03fb904 <+300>: add r3, r3, #32
0xc03fb908 <+304>: add r2, r4, r3
0xc03fb910 <+312>: str r2, [sp, #36] ; 0x24
1109 int unit = 0, unit_end = 0;
0xc03fb938 <+352>: mov r9, r11
1110
1111 BUG_ON(gi->nr_units % upa);
0xc03fb8fc <+292>: mov r1, r10
0xc03fb90c <+308>: ldr r9, [r4, r3]
0xc03fb914 <+316>: mov r0, r9
0xc03fb918 <+320>: bl 0xc0238854 <__aeabi_idivmod>
0xc03fb91c <+324>: subs r11, r1, #0
0xc03fb920 <+328>: beq 0xc03fb928 <pcpu_dump_alloc_info+336>
0xc03fb924 <+332>: b 0xc03fb924 <pcpu_dump_alloc_info+332>
1112 for (alloc_end += gi->nr_units / upa;
0xc03fb928 <+336>: mov r0, r9
0xc03fb92c <+340>: mov r1, r10
0xc03fb930 <+344>: bl 0xc02386b8 <__divsi3>
0xc03fb934 <+348>: ldr r3, [sp, #24]
0xc03fb93c <+356>: add r3, r3, r0
0xc03fb940 <+360>: str r3, [sp, #24]
0xc03fb944 <+364>: b 0xc03fb9dc <pcpu_dump_alloc_info+516>
0xc03fb9dc <+516>: ldr r3, [sp, #24]
0xc03fb9e0 <+520>: cmp r8, r3
0xc03fb9e4 <+524>: blt 0xc03fb948 <pcpu_dump_alloc_info+368>
1113 alloc < alloc_end; alloc++) {
0xc03fb9d8 <+512>: add r8, r8, #1
1114 if (!(alloc % apl)) {
0xc03fb948 <+368>: mov r0, r8
0xc03fb94c <+372>: ldr r1, [sp, #32]
0xc03fb950 <+376>: bl 0xc0238854 <__aeabi_idivmod>
0xc03fb954 <+380>: cmp r1, #0
0xc03fb958 <+384>: bne 0xc03fb970 <pcpu_dump_alloc_info+408>
1115 printk("\n");
0xc03fb95c <+388>: ldr r0, [pc, #176] ; 0xc03fba14 <pcpu_dump_alloc_info+572>
0xc03fb960 <+392>: bl 0xc03f9f48 <printk>
1116 printk("%spcpu-alloc: ", lvl);
0xc03fb964 <+396>: ldr r0, [pc, #172] ; 0xc03fba18 <pcpu_dump_alloc_info+576>
0xc03fb968 <+400>: ldr r1, [sp, #28]
0xc03fb96c <+404>: bl 0xc03f9f48 <printk>
1117 }
1118 printk("[%0*d] ", group_width, group);
0xc03fb970 <+408>: ldr r0, [pc, #164] ; 0xc03fba1c <pcpu_dump_alloc_info+580>
0xc03fb974 <+412>: mov r1, r7
0xc03fb978 <+416>: mov r2, r5
0xc03fb97c <+420>: bl 0xc03f9f48 <printk>
1119
1120 for (unit_end += upa; unit < unit_end; unit++)
0xc03fb980 <+424>: add r11, r11, r10
0xc03fb984 <+428>: lsl r3, r9, #2
0xc03fb988 <+432>: b 0xc03fb9d0 <pcpu_dump_alloc_info+504>
0xc03fb9c8 <+496>: add r9, r9, #1
0xc03fb9cc <+500>: add r3, r3, #4
0xc03fb9d0 <+504>: cmp r9, r11
0xc03fb9d4 <+508>: blt 0xc03fb98c <pcpu_dump_alloc_info+436>
1121 if (gi->cpu_map[unit] != NR_CPUS)
0xc03fb98c <+436>: ldr r1, [sp, #36] ; 0x24
0xc03fb990 <+440>: ldr r2, [r1, #8]
0xc03fb994 <+444>: ldr r2, [r2, r3]
0xc03fb998 <+448>: cmp r2, #2
0xc03fb99c <+452>: beq 0xc03fb9b4 <pcpu_dump_alloc_info+476>
1122 printk("%0*d ", cpu_width,
0xc03fb9a0 <+456>: mov r1, r6
0xc03fb9a4 <+460>: ldr r0, [pc, #116] ; 0xc03fba20 <pcpu_dump_alloc_info+584>
0xc03fb9a8 <+464>: str r3, [sp, #20]
0xc03fb9ac <+468>: bl 0xc03f9f48 <printk>
0xc03fb9b0 <+472>: b 0xc03fb9c4 <pcpu_dump_alloc_info+492>
1123 gi->cpu_map[unit]);
1124 else
1125 printk("%s ", empty_str);
0xc03fb9b4 <+476>: ldr r0, [pc, #104] ; 0xc03fba24 <pcpu_dump_alloc_info+588>
0xc03fb9b8 <+480>: add r1, sp, #47 ; 0x2f
0xc03fb9bc <+484>: str r3, [sp, #20]
0xc03fb9c0 <+488>: bl 0xc03f9f48 <printk>
0xc03fb9c4 <+492>: ldr r3, [sp, #20]
1126 }
1127 }
1128 printk("\n");
0xc03fb9f8 <+544>: ldr r0, [pc, #20] ; 0xc03fba14 <pcpu_dump_alloc_info+572>
0xc03fb9fc <+548>: bl 0xc03f9f48 <printk>
1129 }
0xc03fba00 <+552>: add sp, sp, #60 ; 0x3c
0xc03fba04 <+556>: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
0xc03fba08 <+560>: subsgt r11, r0, r6, ror r1
0xc03fba0c <+564>: strdgt r12, [r0], #-144 ; 0xffffff70
0xc03fba10 <+568>: subsgt r11, r0, r9, lsr #2
0xc03fba14 <+572>: subsgt r4, r0, r1, ror r0
0xc03fba18 <+576>: subsgt r11, r0, r9, asr r1
0xc03fba1c <+580>: subsgt r11, r0, r8, ror #2
0xc03fba20 <+584>: subsgt r11, r0, r0, ror r1
0xc03fba24 <+588>: subsgt r9, r2, r4, asr #19
---------------------------------------------------------------------------------------------
Dump of assembler code for function pcpu_dump_alloc_info:
0xc03fb7d8 <+0>: 28 32 9f e5 ldr r3, [pc, #552] ; 0xc03fba08 <pcpu_dump_alloc_info+560>
0xc03fb7dc <+4>: f0 4f 2d e9 push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
0xc03fb7e0 <+8>: 3c d0 4d e2 sub sp, sp, #60 ; 0x3c
0xc03fb7e4 <+12>: 00 20 93 e5 ldr r2, [r3]
0xc03fb7e8 <+16>: 1c 00 8d e5 str r0, [sp, #28]
0xc03fb7ec <+20>: 2f 20 8d e5 str r2, [sp, #47] ; 0x2f
0xc03fb7f0 <+24>: 04 20 93 e5 ldr r2, [r3, #4]
0xc03fb7f4 <+28>: 08 30 d3 e5 ldrb r3, [r3, #8]
0xc03fb7f8 <+32>: 01 40 a0 e1 mov r4, r1
0xc03fb7fc <+36>: 33 20 8d e5 str r2, [sp, #51] ; 0x33
0xc03fb800 <+40>: 37 30 cd e5 strb r3, [sp, #55] ; 0x37
0xc03fb804 <+44>: 1c 00 91 e5 ldr r0, [r1, #28]
0xc03fb808 <+48>: 01 70 a0 e3 mov r7, #1
0xc03fb80c <+52>: 00 00 00 ea b 0xc03fb814 <pcpu_dump_alloc_info+60>
0xc03fb810 <+56>: 01 70 87 e2 add r7, r7, #1
0xc03fb814 <+60>: 0a 10 a0 e3 mov r1, #10
0xc03fb818 <+64>: a6 f3 f8 eb bl 0xc02386b8 <__divsi3>
0xc03fb81c <+68>: 00 00 50 e3 cmp r0, #0
0xc03fb820 <+72>: fa ff ff 1a bne 0xc03fb810 <pcpu_dump_alloc_info+56>
0xc03fb824 <+76>: e0 31 9f e5 ldr r3, [pc, #480] ; 0xc03fba0c <pcpu_dump_alloc_info+564>
0xc03fb828 <+80>: 01 60 a0 e3 mov r6, #1
0xc03fb82c <+84>: 00 30 93 e5 ldr r3, [r3]
0xc03fb830 <+88>: 00 00 93 e5 ldr r0, [r3]
0xc03fb834 <+92>: 03 00 00 e2 and r0, r0, #3
0xc03fb838 <+96>: c6 2b f9 eb bl 0xc0246758 <__sw_hweight32>
0xc03fb83c <+100>: 00 50 a0 e1 mov r5, r0
0xc03fb840 <+104>: 00 00 00 ea b 0xc03fb848 <pcpu_dump_alloc_info+112>
0xc03fb844 <+108>: 01 60 86 e2 add r6, r6, #1
0xc03fb848 <+112>: 05 00 a0 e1 mov r0, r5
0xc03fb84c <+116>: 0a 10 a0 e3 mov r1, #10
0xc03fb850 <+120>: 98 f3 f8 eb bl 0xc02386b8 <__divsi3>
0xc03fb854 <+124>: 00 50 50 e2 subs r5, r0, #0
0xc03fb858 <+128>: f9 ff ff 1a bne 0xc03fb844 <pcpu_dump_alloc_info+108>
0xc03fb85c <+132>: 38 10 8d e2 add r1, sp, #56 ; 0x38
0xc03fb860 <+136>: 08 00 56 e3 cmp r6, #8
0xc03fb864 <+140>: 06 30 a0 b1 movlt r3, r6
0xc03fb868 <+144>: 08 30 a0 a3 movge r3, #8
0xc03fb86c <+148>: 03 30 81 e0 add r3, r1, r3
0xc03fb870 <+152>: 14 90 94 e5 ldr r9, [r4, #20]
0xc03fb874 <+156>: 0c b0 94 e5 ldr r11, [r4, #12]
0xc03fb878 <+160>: 09 50 43 e5 strb r5, [r3, #-9]
0xc03fb87c <+164>: 0b 10 a0 e1 mov r1, r11
0xc03fb880 <+168>: 09 00 a0 e1 mov r0, r9
0xc03fb884 <+172>: 3c f3 f8 eb bl 0xc023857c <__udivsi3>
0xc03fb888 <+176>: 01 10 86 e2 add r1, r6, #1
0xc03fb88c <+180>: 91 70 21 e0 mla r1, r1, r0, r7
0xc03fb890 <+184>: 00 a0 a0 e1 mov r10, r0
0xc03fb894 <+188>: 03 10 81 e2 add r1, r1, #3
0xc03fb898 <+192>: 3c 00 a0 e3 mov r0, #60 ; 0x3c
0xc03fb89c <+196>: 85 f3 f8 eb bl 0xc02386b8 <__divsi3>
0xc03fb8a0 <+200>: 01 20 a0 e3 mov r2, #1
0xc03fb8a4 <+204>: 10 80 94 e5 ldr r8, [r4, #16]
0xc03fb8a8 <+208>: 08 10 a0 e1 mov r1, r8
0xc03fb8ac <+212>: 01 00 50 e3 cmp r0, #1
0xc03fb8b0 <+216>: 01 00 a0 b3 movlt r0, #1
0xc03fb8b4 <+220>: 10 3f 6f e1 clz r3, r0
0xc03fb8b8 <+224>: 1f 30 63 e2 rsb r3, r3, #31
0xc03fb8bc <+228>: 09 00 a0 e1 mov r0, r9
0xc03fb8c0 <+232>: 12 23 a0 e1 lsl r2, r2, r3
0xc03fb8c4 <+236>: 08 30 94 e5 ldr r3, [r4, #8]
0xc03fb8c8 <+240>: 20 20 8d e5 str r2, [sp, #32]
0xc03fb8cc <+244>: 08 08 8d e8 stm sp, {r3, r11}
0xc03fb8d0 <+248>: 29 f3 f8 eb bl 0xc023857c <__udivsi3>
0xc03fb8d4 <+252>: 0c 80 8d e5 str r8, [sp, #12]
0xc03fb8d8 <+256>: 1c 10 9d e5 ldr r1, [sp, #28]
0xc03fb8dc <+260>: 0c 00 94 e8 ldm r4, {r2, r3}
0xc03fb8e0 <+264>: 05 80 a0 e1 mov r8, r5
0xc03fb8e4 <+268>: 08 00 8d e5 str r0, [sp, #8]
0xc03fb8e8 <+272>: 20 01 9f e5 ldr r0, [pc, #288] ; 0xc03fba10 <pcpu_dump_alloc_info+568>
0xc03fb8ec <+276>: 95 f9 ff eb bl 0xc03f9f48 <printk>
0xc03fb8f0 <+280>: 18 50 8d e5 str r5, [sp, #24]
0xc03fb8f4 <+284>: 3c 00 00 ea b 0xc03fb9ec <pcpu_dump_alloc_info+532>
0xc03fb8f8 <+288>: 0c 30 a0 e3 mov r3, #12
0xc03fb8fc <+292>: 0a 10 a0 e1 mov r1, r10
0xc03fb900 <+296>: 93 05 03 e0 mul r3, r3, r5
0xc03fb904 <+300>: 20 30 83 e2 add r3, r3, #32
0xc03fb908 <+304>: 03 20 84 e0 add r2, r4, r3
0xc03fb90c <+308>: 03 90 94 e7 ldr r9, [r4, r3]
0xc03fb910 <+312>: 24 20 8d e5 str r2, [sp, #36] ; 0x24
0xc03fb914 <+316>: 09 00 a0 e1 mov r0, r9
0xc03fb918 <+320>: cd f3 f8 eb bl 0xc0238854 <__aeabi_idivmod>
0xc03fb91c <+324>: 00 b0 51 e2 subs r11, r1, #0
0xc03fb920 <+328>: 00 00 00 0a beq 0xc03fb928 <pcpu_dump_alloc_info+336>
0xc03fb924 <+332>: fe ff ff ea b 0xc03fb924 <pcpu_dump_alloc_info+332>
0xc03fb928 <+336>: 09 00 a0 e1 mov r0, r9
0xc03fb92c <+340>: 0a 10 a0 e1 mov r1, r10
0xc03fb930 <+344>: 60 f3 f8 eb bl 0xc02386b8 <__divsi3>
0xc03fb934 <+348>: 18 30 9d e5 ldr r3, [sp, #24]
0xc03fb938 <+352>: 0b 90 a0 e1 mov r9, r11
0xc03fb93c <+356>: 00 30 83 e0 add r3, r3, r0
0xc03fb940 <+360>: 18 30 8d e5 str r3, [sp, #24]
0xc03fb944 <+364>: 24 00 00 ea b 0xc03fb9dc <pcpu_dump_alloc_info+516>
0xc03fb948 <+368>: 08 00 a0 e1 mov r0, r8
0xc03fb94c <+372>: 20 10 9d e5 ldr r1, [sp, #32]
0xc03fb950 <+376>: bf f3 f8 eb bl 0xc0238854 <__aeabi_idivmod>
0xc03fb954 <+380>: 00 00 51 e3 cmp r1, #0
0xc03fb958 <+384>: 04 00 00 1a bne 0xc03fb970 <pcpu_dump_alloc_info+408>
0xc03fb95c <+388>: b0 00 9f e5 ldr r0, [pc, #176] ; 0xc03fba14 <pcpu_dump_alloc_info+572>
0xc03fb960 <+392>: 78 f9 ff eb bl 0xc03f9f48 <printk>
0xc03fb964 <+396>: ac 00 9f e5 ldr r0, [pc, #172] ; 0xc03fba18 <pcpu_dump_alloc_info+576>
0xc03fb968 <+400>: 1c 10 9d e5 ldr r1, [sp, #28]
0xc03fb96c <+404>: 75 f9 ff eb bl 0xc03f9f48 <printk>
0xc03fb970 <+408>: a4 00 9f e5 ldr r0, [pc, #164] ; 0xc03fba1c <pcpu_dump_alloc_info+580>
0xc03fb974 <+412>: 07 10 a0 e1 mov r1, r7
0xc03fb978 <+416>: 05 20 a0 e1 mov r2, r5
0xc03fb97c <+420>: 71 f9 ff eb bl 0xc03f9f48 <printk>
0xc03fb980 <+424>: 0a b0 8b e0 add r11, r11, r10
0xc03fb984 <+428>: 09 31 a0 e1 lsl r3, r9, #2
0xc03fb988 <+432>: 10 00 00 ea b 0xc03fb9d0 <pcpu_dump_alloc_info+504>
0xc03fb98c <+436>: 24 10 9d e5 ldr r1, [sp, #36] ; 0x24
0xc03fb990 <+440>: 08 20 91 e5 ldr r2, [r1, #8]
0xc03fb994 <+444>: 03 20 92 e7 ldr r2, [r2, r3]
0xc03fb998 <+448>: 02 00 52 e3 cmp r2, #2
0xc03fb99c <+452>: 04 00 00 0a beq 0xc03fb9b4 <pcpu_dump_alloc_info+476>
0xc03fb9a0 <+456>: 06 10 a0 e1 mov r1, r6
0xc03fb9a4 <+460>: 74 00 9f e5 ldr r0, [pc, #116] ; 0xc03fba20 <pcpu_dump_alloc_info+584>
0xc03fb9a8 <+464>: 14 30 8d e5 str r3, [sp, #20]
0xc03fb9ac <+468>: 65 f9 ff eb bl 0xc03f9f48 <printk>
0xc03fb9b0 <+472>: 03 00 00 ea b 0xc03fb9c4 <pcpu_dump_alloc_info+492>
0xc03fb9b4 <+476>: 68 00 9f e5 ldr r0, [pc, #104] ; 0xc03fba24 <pcpu_dump_alloc_info+588>
0xc03fb9b8 <+480>: 2f 10 8d e2 add r1, sp, #47 ; 0x2f
0xc03fb9bc <+484>: 14 30 8d e5 str r3, [sp, #20]
0xc03fb9c0 <+488>: 60 f9 ff eb bl 0xc03f9f48 <printk>
0xc03fb9c4 <+492>: 14 30 9d e5 ldr r3, [sp, #20]
0xc03fb9c8 <+496>: 01 90 89 e2 add r9, r9, #1
0xc03fb9cc <+500>: 04 30 83 e2 add r3, r3, #4
0xc03fb9d0 <+504>: 0b 00 59 e1 cmp r9, r11
0xc03fb9d4 <+508>: ec ff ff ba blt 0xc03fb98c <pcpu_dump_alloc_info+436>
0xc03fb9d8 <+512>: 01 80 88 e2 add r8, r8, #1
0xc03fb9dc <+516>: 18 30 9d e5 ldr r3, [sp, #24]
0xc03fb9e0 <+520>: 03 00 58 e1 cmp r8, r3
0xc03fb9e4 <+524>: d7 ff ff ba blt 0xc03fb948 <pcpu_dump_alloc_info+368>
0xc03fb9e8 <+528>: 01 50 85 e2 add r5, r5, #1
0xc03fb9ec <+532>: 1c 30 94 e5 ldr r3, [r4, #28]
0xc03fb9f0 <+536>: 03 00 55 e1 cmp r5, r3
0xc03fb9f4 <+540>: bf ff ff ba blt 0xc03fb8f8 <pcpu_dump_alloc_info+288>
0xc03fb9f8 <+544>: 14 00 9f e5 ldr r0, [pc, #20] ; 0xc03fba14 <pcpu_dump_alloc_info+572>
0xc03fb9fc <+548>: 51 f9 ff eb bl 0xc03f9f48 <printk>
0xc03fba00 <+552>: 3c d0 8d e2 add sp, sp, #60 ; 0x3c
0xc03fba04 <+556>: f0 8f bd e8 pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
0xc03fba08 <+560>: 76 b1 50 c0 subsgt r11, r0, r6, ror r1
0xc03fba0c <+564>: f0 c9 40 c0 strdgt r12, [r0], #-144 ; 0xffffff70
0xc03fba10 <+568>: 29 b1 50 c0 subsgt r11, r0, r9, lsr #2
0xc03fba14 <+572>: 71 40 50 c0 subsgt r4, r0, r1, ror r0
0xc03fba18 <+576>: 59 b1 50 c0 subsgt r11, r0, r9, asr r1
0xc03fba1c <+580>: 68 b1 50 c0 subsgt r11, r0, r8, ror #2
0xc03fba20 <+584>: 70 b1 50 c0 subsgt r11, r0, r0, ror r1
0xc03fba24 <+588>: c4 99 52 c0 subsgt r9, r2, r4, asr #19
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bad ARM code with GCC 4.7.1
2012-05-10 17:08 ` Gary Thomas
@ 2012-05-10 20:06 ` Martin Jansa
0 siblings, 0 replies; 8+ messages in thread
From: Martin Jansa @ 2012-05-10 20:06 UTC (permalink / raw)
To: Gary Thomas; +Cc: Poky Project
[-- Attachment #1: Type: text/plain, Size: 22142 bytes --]
On Thu, May 10, 2012 at 11:08:08AM -0600, Gary Thomas wrote:
> On 2012-05-10 10:30, Khem Raj wrote:
> > On Thu, May 10, 2012 at 9:17 AM, Gary Thomas<gary@mlbassoc.com> wrote:
> >>
> >> My board is DM3730, much like a BeagleBoard
> >> ARM architecture: armv7a
> >> Linux kernel 3.0
> >
> > hmmm that should be able to handle alignment faults in hardware
> >
> >>
> >>
> >>>
> >>> gcc generate unaligned accesses by default
> >>>
> >>> Does adding -mno-unaligned-access to cflags help ?
> >>
> >>
> >> I'll check.
>
> Using -mno-unaligned-access fixes this problem, but the kernel just dies a bit
> later on (kernel 3.0 + gcc 4.7.1 == bad owies...)
We had to use -mno-unaligned-access in kernel Makefile even with gcc-4.6
since gcc-4.6/linaro/gcc-4.6-linaro-r106827.patch was added in meta-oe.
And it was affecting
nokia900 (2.6.37 based kernel)
crespo - Samsung Nexus S (3.0.8 based kernel)
but with -mno-unaligned-access and gcc-4.7 we don't see any new issues.
Cheers,
>
> >
> > Its not entirely clear whats going on so post the complete function disassembly
> > so further context can be seen as well.
>
> Code dump attached - first with /m, then with /r
>
> --
> ------------------------------------------------------------
> Gary Thomas | Consulting for the
> MLB Associates | Embedded world
> ------------------------------------------------------------
> Dump of assembler code for function pcpu_dump_alloc_info:
> 1083 {
> 0xc03fb7dc <+4>: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
> 0xc03fb7e0 <+8>: sub sp, sp, #60 ; 0x3c
> 0xc03fb7e8 <+16>: str r0, [sp, #28]
> 0xc03fb7f8 <+32>: mov r4, r1
>
> 1084 int group_width = 1, cpu_width = 1, width;
> 0xc03fb808 <+48>: mov r7, #1
> 0xc03fb828 <+80>: mov r6, #1
>
> 1085 char empty_str[] = "--------";
> 0xc03fb7d8 <+0>: ldr r3, [pc, #552] ; 0xc03fba08 <pcpu_dump_alloc_info+560>
> 0xc03fb7e4 <+12>: ldr r2, [r3]
> 0xc03fb7ec <+20>: str r2, [sp, #47] ; 0x2f
> 0xc03fb7f0 <+24>: ldr r2, [r3, #4]
> 0xc03fb7f4 <+28>: ldrb r3, [r3, #8]
> 0xc03fb7fc <+36>: str r2, [sp, #51] ; 0x33
> 0xc03fb800 <+40>: strb r3, [sp, #55] ; 0x37
>
> 1086 int alloc = 0, alloc_end = 0;
> 0xc03fb8e0 <+264>: mov r8, r5
> 0xc03fb8f0 <+280>: str r5, [sp, #24]
>
> 1087 int group, v;
> 1088 int upa, apl; /* units per alloc, allocs per line */
> 1089
> 1090 v = ai->nr_groups;
> 0xc03fb804 <+44>: ldr r0, [r1, #28]
>
> 1091 while (v /= 10)
> 0xc03fb80c <+52>: b 0xc03fb814 <pcpu_dump_alloc_info+60>
> 0xc03fb814 <+60>: mov r1, #10
> 0xc03fb818 <+64>: bl 0xc02386b8 <__divsi3>
> 0xc03fb81c <+68>: cmp r0, #0
> 0xc03fb820 <+72>: bne 0xc03fb810 <pcpu_dump_alloc_info+56>
>
> 1092 group_width++;
> 0xc03fb810 <+56>: add r7, r7, #1
>
> 1093
> 1094 v = num_possible_cpus();
> 1095 while (v /= 10)
> 0xc03fb840 <+104>: b 0xc03fb848 <pcpu_dump_alloc_info+112>
> 0xc03fb848 <+112>: mov r0, r5
> 0xc03fb84c <+116>: mov r1, #10
> 0xc03fb850 <+120>: bl 0xc02386b8 <__divsi3>
> 0xc03fb854 <+124>: subs r5, r0, #0
> 0xc03fb858 <+128>: bne 0xc03fb844 <pcpu_dump_alloc_info+108>
>
> 1096 cpu_width++;
> 0xc03fb844 <+108>: add r6, r6, #1
>
> 1097 empty_str[min_t(int, cpu_width, sizeof(empty_str) - 1)] = '\0';
> 0xc03fb85c <+132>: add r1, sp, #56 ; 0x38
> 0xc03fb860 <+136>: cmp r6, #8
> 0xc03fb864 <+140>: movlt r3, r6
> 0xc03fb868 <+144>: movge r3, #8
> 0xc03fb86c <+148>: add r3, r1, r3
> 0xc03fb878 <+160>: strb r5, [r3, #-9]
>
> 1098
> 1099 upa = ai->alloc_size / ai->unit_size;
> 0xc03fb870 <+152>: ldr r9, [r4, #20]
> 0xc03fb874 <+156>: ldr r11, [r4, #12]
> 0xc03fb87c <+164>: mov r1, r11
> 0xc03fb880 <+168>: mov r0, r9
> 0xc03fb884 <+172>: bl 0xc023857c <__udivsi3>
> 0xc03fb890 <+184>: mov r10, r0
>
> 1100 width = upa * (cpu_width + 1) + group_width + 3;
> 0xc03fb888 <+176>: add r1, r6, #1
> 0xc03fb88c <+180>: mla r1, r1, r0, r7
>
> 1101 apl = rounddown_pow_of_two(max(60 / width, 1));
> 0xc03fb894 <+188>: add r1, r1, #3
> 0xc03fb898 <+192>: mov r0, #60 ; 0x3c
> 0xc03fb89c <+196>: bl 0xc02386b8 <__divsi3>
> 0xc03fb8ac <+212>: cmp r0, #1
> 0xc03fb8b0 <+216>: movlt r0, #1
>
> 1102
> 1103 printk("%spcpu-alloc: s%zu r%zu d%zu u%zu alloc=%zu*%zu",
> 0xc03fb8a8 <+208>: mov r1, r8
> 0xc03fb8bc <+228>: mov r0, r9
> 0xc03fb8c4 <+236>: ldr r3, [r4, #8]
> 0xc03fb8cc <+244>: stm sp, {r3, r11}
> 0xc03fb8d0 <+248>: bl 0xc023857c <__udivsi3>
> 0xc03fb8d4 <+252>: str r8, [sp, #12]
> 0xc03fb8d8 <+256>: ldr r1, [sp, #28]
> 0xc03fb8dc <+260>: ldm r4, {r2, r3}
> 0xc03fb8e4 <+268>: str r0, [sp, #8]
> 0xc03fb8e8 <+272>: ldr r0, [pc, #288] ; 0xc03fba10 <pcpu_dump_alloc_info+568>
> 0xc03fb8ec <+276>: bl 0xc03f9f48 <printk>
>
> 1104 lvl, ai->static_size, ai->reserved_size, ai->dyn_size,
> 1105 ai->unit_size, ai->alloc_size / ai->atom_size, ai->atom_size);
> 0xc03fb8a4 <+204>: ldr r8, [r4, #16]
>
> 1106
> 1107 for (group = 0; group < ai->nr_groups; group++) {
> 0xc03fb8f4 <+284>: b 0xc03fb9ec <pcpu_dump_alloc_info+532>
> 0xc03fb9e8 <+528>: add r5, r5, #1
> 0xc03fb9ec <+532>: ldr r3, [r4, #28]
> 0xc03fb9f0 <+536>: cmp r5, r3
> 0xc03fb9f4 <+540>: blt 0xc03fb8f8 <pcpu_dump_alloc_info+288>
>
> 1108 const struct pcpu_group_info *gi = &ai->groups[group];
> 0xc03fb8f8 <+288>: mov r3, #12
> 0xc03fb900 <+296>: mul r3, r3, r5
> 0xc03fb904 <+300>: add r3, r3, #32
> 0xc03fb908 <+304>: add r2, r4, r3
> 0xc03fb910 <+312>: str r2, [sp, #36] ; 0x24
>
> 1109 int unit = 0, unit_end = 0;
> 0xc03fb938 <+352>: mov r9, r11
>
> 1110
> 1111 BUG_ON(gi->nr_units % upa);
> 0xc03fb8fc <+292>: mov r1, r10
> 0xc03fb90c <+308>: ldr r9, [r4, r3]
> 0xc03fb914 <+316>: mov r0, r9
> 0xc03fb918 <+320>: bl 0xc0238854 <__aeabi_idivmod>
> 0xc03fb91c <+324>: subs r11, r1, #0
> 0xc03fb920 <+328>: beq 0xc03fb928 <pcpu_dump_alloc_info+336>
> 0xc03fb924 <+332>: b 0xc03fb924 <pcpu_dump_alloc_info+332>
>
> 1112 for (alloc_end += gi->nr_units / upa;
> 0xc03fb928 <+336>: mov r0, r9
> 0xc03fb92c <+340>: mov r1, r10
> 0xc03fb930 <+344>: bl 0xc02386b8 <__divsi3>
> 0xc03fb934 <+348>: ldr r3, [sp, #24]
> 0xc03fb93c <+356>: add r3, r3, r0
> 0xc03fb940 <+360>: str r3, [sp, #24]
> 0xc03fb944 <+364>: b 0xc03fb9dc <pcpu_dump_alloc_info+516>
> 0xc03fb9dc <+516>: ldr r3, [sp, #24]
> 0xc03fb9e0 <+520>: cmp r8, r3
> 0xc03fb9e4 <+524>: blt 0xc03fb948 <pcpu_dump_alloc_info+368>
>
> 1113 alloc < alloc_end; alloc++) {
> 0xc03fb9d8 <+512>: add r8, r8, #1
>
> 1114 if (!(alloc % apl)) {
> 0xc03fb948 <+368>: mov r0, r8
> 0xc03fb94c <+372>: ldr r1, [sp, #32]
> 0xc03fb950 <+376>: bl 0xc0238854 <__aeabi_idivmod>
> 0xc03fb954 <+380>: cmp r1, #0
> 0xc03fb958 <+384>: bne 0xc03fb970 <pcpu_dump_alloc_info+408>
>
> 1115 printk("\n");
> 0xc03fb95c <+388>: ldr r0, [pc, #176] ; 0xc03fba14 <pcpu_dump_alloc_info+572>
> 0xc03fb960 <+392>: bl 0xc03f9f48 <printk>
>
> 1116 printk("%spcpu-alloc: ", lvl);
> 0xc03fb964 <+396>: ldr r0, [pc, #172] ; 0xc03fba18 <pcpu_dump_alloc_info+576>
> 0xc03fb968 <+400>: ldr r1, [sp, #28]
> 0xc03fb96c <+404>: bl 0xc03f9f48 <printk>
>
> 1117 }
> 1118 printk("[%0*d] ", group_width, group);
> 0xc03fb970 <+408>: ldr r0, [pc, #164] ; 0xc03fba1c <pcpu_dump_alloc_info+580>
> 0xc03fb974 <+412>: mov r1, r7
> 0xc03fb978 <+416>: mov r2, r5
> 0xc03fb97c <+420>: bl 0xc03f9f48 <printk>
>
> 1119
> 1120 for (unit_end += upa; unit < unit_end; unit++)
> 0xc03fb980 <+424>: add r11, r11, r10
> 0xc03fb984 <+428>: lsl r3, r9, #2
> 0xc03fb988 <+432>: b 0xc03fb9d0 <pcpu_dump_alloc_info+504>
> 0xc03fb9c8 <+496>: add r9, r9, #1
> 0xc03fb9cc <+500>: add r3, r3, #4
> 0xc03fb9d0 <+504>: cmp r9, r11
> 0xc03fb9d4 <+508>: blt 0xc03fb98c <pcpu_dump_alloc_info+436>
>
> 1121 if (gi->cpu_map[unit] != NR_CPUS)
> 0xc03fb98c <+436>: ldr r1, [sp, #36] ; 0x24
> 0xc03fb990 <+440>: ldr r2, [r1, #8]
> 0xc03fb994 <+444>: ldr r2, [r2, r3]
> 0xc03fb998 <+448>: cmp r2, #2
> 0xc03fb99c <+452>: beq 0xc03fb9b4 <pcpu_dump_alloc_info+476>
>
> 1122 printk("%0*d ", cpu_width,
> 0xc03fb9a0 <+456>: mov r1, r6
> 0xc03fb9a4 <+460>: ldr r0, [pc, #116] ; 0xc03fba20 <pcpu_dump_alloc_info+584>
> 0xc03fb9a8 <+464>: str r3, [sp, #20]
> 0xc03fb9ac <+468>: bl 0xc03f9f48 <printk>
> 0xc03fb9b0 <+472>: b 0xc03fb9c4 <pcpu_dump_alloc_info+492>
>
> 1123 gi->cpu_map[unit]);
> 1124 else
> 1125 printk("%s ", empty_str);
> 0xc03fb9b4 <+476>: ldr r0, [pc, #104] ; 0xc03fba24 <pcpu_dump_alloc_info+588>
> 0xc03fb9b8 <+480>: add r1, sp, #47 ; 0x2f
> 0xc03fb9bc <+484>: str r3, [sp, #20]
> 0xc03fb9c0 <+488>: bl 0xc03f9f48 <printk>
> 0xc03fb9c4 <+492>: ldr r3, [sp, #20]
>
> 1126 }
> 1127 }
> 1128 printk("\n");
> 0xc03fb9f8 <+544>: ldr r0, [pc, #20] ; 0xc03fba14 <pcpu_dump_alloc_info+572>
> 0xc03fb9fc <+548>: bl 0xc03f9f48 <printk>
> 1129 }
> 0xc03fba00 <+552>: add sp, sp, #60 ; 0x3c
> 0xc03fba04 <+556>: pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
> 0xc03fba08 <+560>: subsgt r11, r0, r6, ror r1
> 0xc03fba0c <+564>: strdgt r12, [r0], #-144 ; 0xffffff70
> 0xc03fba10 <+568>: subsgt r11, r0, r9, lsr #2
> 0xc03fba14 <+572>: subsgt r4, r0, r1, ror r0
> 0xc03fba18 <+576>: subsgt r11, r0, r9, asr r1
> 0xc03fba1c <+580>: subsgt r11, r0, r8, ror #2
> 0xc03fba20 <+584>: subsgt r11, r0, r0, ror r1
> 0xc03fba24 <+588>: subsgt r9, r2, r4, asr #19
>
>
> ---------------------------------------------------------------------------------------------
> Dump of assembler code for function pcpu_dump_alloc_info:
> 0xc03fb7d8 <+0>: 28 32 9f e5 ldr r3, [pc, #552] ; 0xc03fba08 <pcpu_dump_alloc_info+560>
> 0xc03fb7dc <+4>: f0 4f 2d e9 push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
> 0xc03fb7e0 <+8>: 3c d0 4d e2 sub sp, sp, #60 ; 0x3c
> 0xc03fb7e4 <+12>: 00 20 93 e5 ldr r2, [r3]
> 0xc03fb7e8 <+16>: 1c 00 8d e5 str r0, [sp, #28]
> 0xc03fb7ec <+20>: 2f 20 8d e5 str r2, [sp, #47] ; 0x2f
> 0xc03fb7f0 <+24>: 04 20 93 e5 ldr r2, [r3, #4]
> 0xc03fb7f4 <+28>: 08 30 d3 e5 ldrb r3, [r3, #8]
> 0xc03fb7f8 <+32>: 01 40 a0 e1 mov r4, r1
> 0xc03fb7fc <+36>: 33 20 8d e5 str r2, [sp, #51] ; 0x33
> 0xc03fb800 <+40>: 37 30 cd e5 strb r3, [sp, #55] ; 0x37
> 0xc03fb804 <+44>: 1c 00 91 e5 ldr r0, [r1, #28]
> 0xc03fb808 <+48>: 01 70 a0 e3 mov r7, #1
> 0xc03fb80c <+52>: 00 00 00 ea b 0xc03fb814 <pcpu_dump_alloc_info+60>
> 0xc03fb810 <+56>: 01 70 87 e2 add r7, r7, #1
> 0xc03fb814 <+60>: 0a 10 a0 e3 mov r1, #10
> 0xc03fb818 <+64>: a6 f3 f8 eb bl 0xc02386b8 <__divsi3>
> 0xc03fb81c <+68>: 00 00 50 e3 cmp r0, #0
> 0xc03fb820 <+72>: fa ff ff 1a bne 0xc03fb810 <pcpu_dump_alloc_info+56>
> 0xc03fb824 <+76>: e0 31 9f e5 ldr r3, [pc, #480] ; 0xc03fba0c <pcpu_dump_alloc_info+564>
> 0xc03fb828 <+80>: 01 60 a0 e3 mov r6, #1
> 0xc03fb82c <+84>: 00 30 93 e5 ldr r3, [r3]
> 0xc03fb830 <+88>: 00 00 93 e5 ldr r0, [r3]
> 0xc03fb834 <+92>: 03 00 00 e2 and r0, r0, #3
> 0xc03fb838 <+96>: c6 2b f9 eb bl 0xc0246758 <__sw_hweight32>
> 0xc03fb83c <+100>: 00 50 a0 e1 mov r5, r0
> 0xc03fb840 <+104>: 00 00 00 ea b 0xc03fb848 <pcpu_dump_alloc_info+112>
> 0xc03fb844 <+108>: 01 60 86 e2 add r6, r6, #1
> 0xc03fb848 <+112>: 05 00 a0 e1 mov r0, r5
> 0xc03fb84c <+116>: 0a 10 a0 e3 mov r1, #10
> 0xc03fb850 <+120>: 98 f3 f8 eb bl 0xc02386b8 <__divsi3>
> 0xc03fb854 <+124>: 00 50 50 e2 subs r5, r0, #0
> 0xc03fb858 <+128>: f9 ff ff 1a bne 0xc03fb844 <pcpu_dump_alloc_info+108>
> 0xc03fb85c <+132>: 38 10 8d e2 add r1, sp, #56 ; 0x38
> 0xc03fb860 <+136>: 08 00 56 e3 cmp r6, #8
> 0xc03fb864 <+140>: 06 30 a0 b1 movlt r3, r6
> 0xc03fb868 <+144>: 08 30 a0 a3 movge r3, #8
> 0xc03fb86c <+148>: 03 30 81 e0 add r3, r1, r3
> 0xc03fb870 <+152>: 14 90 94 e5 ldr r9, [r4, #20]
> 0xc03fb874 <+156>: 0c b0 94 e5 ldr r11, [r4, #12]
> 0xc03fb878 <+160>: 09 50 43 e5 strb r5, [r3, #-9]
> 0xc03fb87c <+164>: 0b 10 a0 e1 mov r1, r11
> 0xc03fb880 <+168>: 09 00 a0 e1 mov r0, r9
> 0xc03fb884 <+172>: 3c f3 f8 eb bl 0xc023857c <__udivsi3>
> 0xc03fb888 <+176>: 01 10 86 e2 add r1, r6, #1
> 0xc03fb88c <+180>: 91 70 21 e0 mla r1, r1, r0, r7
> 0xc03fb890 <+184>: 00 a0 a0 e1 mov r10, r0
> 0xc03fb894 <+188>: 03 10 81 e2 add r1, r1, #3
> 0xc03fb898 <+192>: 3c 00 a0 e3 mov r0, #60 ; 0x3c
> 0xc03fb89c <+196>: 85 f3 f8 eb bl 0xc02386b8 <__divsi3>
> 0xc03fb8a0 <+200>: 01 20 a0 e3 mov r2, #1
> 0xc03fb8a4 <+204>: 10 80 94 e5 ldr r8, [r4, #16]
> 0xc03fb8a8 <+208>: 08 10 a0 e1 mov r1, r8
> 0xc03fb8ac <+212>: 01 00 50 e3 cmp r0, #1
> 0xc03fb8b0 <+216>: 01 00 a0 b3 movlt r0, #1
> 0xc03fb8b4 <+220>: 10 3f 6f e1 clz r3, r0
> 0xc03fb8b8 <+224>: 1f 30 63 e2 rsb r3, r3, #31
> 0xc03fb8bc <+228>: 09 00 a0 e1 mov r0, r9
> 0xc03fb8c0 <+232>: 12 23 a0 e1 lsl r2, r2, r3
> 0xc03fb8c4 <+236>: 08 30 94 e5 ldr r3, [r4, #8]
> 0xc03fb8c8 <+240>: 20 20 8d e5 str r2, [sp, #32]
> 0xc03fb8cc <+244>: 08 08 8d e8 stm sp, {r3, r11}
> 0xc03fb8d0 <+248>: 29 f3 f8 eb bl 0xc023857c <__udivsi3>
> 0xc03fb8d4 <+252>: 0c 80 8d e5 str r8, [sp, #12]
> 0xc03fb8d8 <+256>: 1c 10 9d e5 ldr r1, [sp, #28]
> 0xc03fb8dc <+260>: 0c 00 94 e8 ldm r4, {r2, r3}
> 0xc03fb8e0 <+264>: 05 80 a0 e1 mov r8, r5
> 0xc03fb8e4 <+268>: 08 00 8d e5 str r0, [sp, #8]
> 0xc03fb8e8 <+272>: 20 01 9f e5 ldr r0, [pc, #288] ; 0xc03fba10 <pcpu_dump_alloc_info+568>
> 0xc03fb8ec <+276>: 95 f9 ff eb bl 0xc03f9f48 <printk>
> 0xc03fb8f0 <+280>: 18 50 8d e5 str r5, [sp, #24]
> 0xc03fb8f4 <+284>: 3c 00 00 ea b 0xc03fb9ec <pcpu_dump_alloc_info+532>
> 0xc03fb8f8 <+288>: 0c 30 a0 e3 mov r3, #12
> 0xc03fb8fc <+292>: 0a 10 a0 e1 mov r1, r10
> 0xc03fb900 <+296>: 93 05 03 e0 mul r3, r3, r5
> 0xc03fb904 <+300>: 20 30 83 e2 add r3, r3, #32
> 0xc03fb908 <+304>: 03 20 84 e0 add r2, r4, r3
> 0xc03fb90c <+308>: 03 90 94 e7 ldr r9, [r4, r3]
> 0xc03fb910 <+312>: 24 20 8d e5 str r2, [sp, #36] ; 0x24
> 0xc03fb914 <+316>: 09 00 a0 e1 mov r0, r9
> 0xc03fb918 <+320>: cd f3 f8 eb bl 0xc0238854 <__aeabi_idivmod>
> 0xc03fb91c <+324>: 00 b0 51 e2 subs r11, r1, #0
> 0xc03fb920 <+328>: 00 00 00 0a beq 0xc03fb928 <pcpu_dump_alloc_info+336>
> 0xc03fb924 <+332>: fe ff ff ea b 0xc03fb924 <pcpu_dump_alloc_info+332>
> 0xc03fb928 <+336>: 09 00 a0 e1 mov r0, r9
> 0xc03fb92c <+340>: 0a 10 a0 e1 mov r1, r10
> 0xc03fb930 <+344>: 60 f3 f8 eb bl 0xc02386b8 <__divsi3>
> 0xc03fb934 <+348>: 18 30 9d e5 ldr r3, [sp, #24]
> 0xc03fb938 <+352>: 0b 90 a0 e1 mov r9, r11
> 0xc03fb93c <+356>: 00 30 83 e0 add r3, r3, r0
> 0xc03fb940 <+360>: 18 30 8d e5 str r3, [sp, #24]
> 0xc03fb944 <+364>: 24 00 00 ea b 0xc03fb9dc <pcpu_dump_alloc_info+516>
> 0xc03fb948 <+368>: 08 00 a0 e1 mov r0, r8
> 0xc03fb94c <+372>: 20 10 9d e5 ldr r1, [sp, #32]
> 0xc03fb950 <+376>: bf f3 f8 eb bl 0xc0238854 <__aeabi_idivmod>
> 0xc03fb954 <+380>: 00 00 51 e3 cmp r1, #0
> 0xc03fb958 <+384>: 04 00 00 1a bne 0xc03fb970 <pcpu_dump_alloc_info+408>
> 0xc03fb95c <+388>: b0 00 9f e5 ldr r0, [pc, #176] ; 0xc03fba14 <pcpu_dump_alloc_info+572>
> 0xc03fb960 <+392>: 78 f9 ff eb bl 0xc03f9f48 <printk>
> 0xc03fb964 <+396>: ac 00 9f e5 ldr r0, [pc, #172] ; 0xc03fba18 <pcpu_dump_alloc_info+576>
> 0xc03fb968 <+400>: 1c 10 9d e5 ldr r1, [sp, #28]
> 0xc03fb96c <+404>: 75 f9 ff eb bl 0xc03f9f48 <printk>
> 0xc03fb970 <+408>: a4 00 9f e5 ldr r0, [pc, #164] ; 0xc03fba1c <pcpu_dump_alloc_info+580>
> 0xc03fb974 <+412>: 07 10 a0 e1 mov r1, r7
> 0xc03fb978 <+416>: 05 20 a0 e1 mov r2, r5
> 0xc03fb97c <+420>: 71 f9 ff eb bl 0xc03f9f48 <printk>
> 0xc03fb980 <+424>: 0a b0 8b e0 add r11, r11, r10
> 0xc03fb984 <+428>: 09 31 a0 e1 lsl r3, r9, #2
> 0xc03fb988 <+432>: 10 00 00 ea b 0xc03fb9d0 <pcpu_dump_alloc_info+504>
> 0xc03fb98c <+436>: 24 10 9d e5 ldr r1, [sp, #36] ; 0x24
> 0xc03fb990 <+440>: 08 20 91 e5 ldr r2, [r1, #8]
> 0xc03fb994 <+444>: 03 20 92 e7 ldr r2, [r2, r3]
> 0xc03fb998 <+448>: 02 00 52 e3 cmp r2, #2
> 0xc03fb99c <+452>: 04 00 00 0a beq 0xc03fb9b4 <pcpu_dump_alloc_info+476>
> 0xc03fb9a0 <+456>: 06 10 a0 e1 mov r1, r6
> 0xc03fb9a4 <+460>: 74 00 9f e5 ldr r0, [pc, #116] ; 0xc03fba20 <pcpu_dump_alloc_info+584>
> 0xc03fb9a8 <+464>: 14 30 8d e5 str r3, [sp, #20]
> 0xc03fb9ac <+468>: 65 f9 ff eb bl 0xc03f9f48 <printk>
> 0xc03fb9b0 <+472>: 03 00 00 ea b 0xc03fb9c4 <pcpu_dump_alloc_info+492>
> 0xc03fb9b4 <+476>: 68 00 9f e5 ldr r0, [pc, #104] ; 0xc03fba24 <pcpu_dump_alloc_info+588>
> 0xc03fb9b8 <+480>: 2f 10 8d e2 add r1, sp, #47 ; 0x2f
> 0xc03fb9bc <+484>: 14 30 8d e5 str r3, [sp, #20]
> 0xc03fb9c0 <+488>: 60 f9 ff eb bl 0xc03f9f48 <printk>
> 0xc03fb9c4 <+492>: 14 30 9d e5 ldr r3, [sp, #20]
> 0xc03fb9c8 <+496>: 01 90 89 e2 add r9, r9, #1
> 0xc03fb9cc <+500>: 04 30 83 e2 add r3, r3, #4
> 0xc03fb9d0 <+504>: 0b 00 59 e1 cmp r9, r11
> 0xc03fb9d4 <+508>: ec ff ff ba blt 0xc03fb98c <pcpu_dump_alloc_info+436>
> 0xc03fb9d8 <+512>: 01 80 88 e2 add r8, r8, #1
> 0xc03fb9dc <+516>: 18 30 9d e5 ldr r3, [sp, #24]
> 0xc03fb9e0 <+520>: 03 00 58 e1 cmp r8, r3
> 0xc03fb9e4 <+524>: d7 ff ff ba blt 0xc03fb948 <pcpu_dump_alloc_info+368>
> 0xc03fb9e8 <+528>: 01 50 85 e2 add r5, r5, #1
> 0xc03fb9ec <+532>: 1c 30 94 e5 ldr r3, [r4, #28]
> 0xc03fb9f0 <+536>: 03 00 55 e1 cmp r5, r3
> 0xc03fb9f4 <+540>: bf ff ff ba blt 0xc03fb8f8 <pcpu_dump_alloc_info+288>
> 0xc03fb9f8 <+544>: 14 00 9f e5 ldr r0, [pc, #20] ; 0xc03fba14 <pcpu_dump_alloc_info+572>
> 0xc03fb9fc <+548>: 51 f9 ff eb bl 0xc03f9f48 <printk>
> 0xc03fba00 <+552>: 3c d0 8d e2 add sp, sp, #60 ; 0x3c
> 0xc03fba04 <+556>: f0 8f bd e8 pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
> 0xc03fba08 <+560>: 76 b1 50 c0 subsgt r11, r0, r6, ror r1
> 0xc03fba0c <+564>: f0 c9 40 c0 strdgt r12, [r0], #-144 ; 0xffffff70
> 0xc03fba10 <+568>: 29 b1 50 c0 subsgt r11, r0, r9, lsr #2
> 0xc03fba14 <+572>: 71 40 50 c0 subsgt r4, r0, r1, ror r0
> 0xc03fba18 <+576>: 59 b1 50 c0 subsgt r11, r0, r9, asr r1
> 0xc03fba1c <+580>: 68 b1 50 c0 subsgt r11, r0, r8, ror #2
> 0xc03fba20 <+584>: 70 b1 50 c0 subsgt r11, r0, r0, ror r1
> 0xc03fba24 <+588>: c4 99 52 c0 subsgt r9, r2, r4, asr #19
> _______________________________________________
> poky mailing list
> poky@yoctoproject.org
> https://lists.yoctoproject.org/listinfo/poky
--
Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 205 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-05-10 20:06 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-10 14:28 Bad ARM code with GCC 4.7.1 Gary Thomas
2012-05-10 15:46 ` Khem Raj
2012-05-10 16:17 ` Gary Thomas
2012-05-10 16:30 ` Khem Raj
2012-05-10 16:49 ` Mark Hatle
2012-05-10 17:00 ` Khem Raj
2012-05-10 17:08 ` Gary Thomas
2012-05-10 20:06 ` Martin Jansa
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.