This is the mail archive of the
ecos-patches@sourceware.org
mailing list for the eCos project.
[Bug 1001344] Allow nc_test_slave for lwIP to compile for targets with 128KiB RAM.
- From: bugzilla-daemon at bugs dot ecos dot sourceware dot org
- To: ecos-patches at ecos dot sourceware dot org
- Date: Fri, 18 May 2012 08:25:17 +0100
- Subject: [Bug 1001344] Allow nc_test_slave for lwIP to compile for targets with 128KiB RAM.
- Auto-submitted: auto-generated
- References: <bug-1001344-104@http.bugs.ecos.sourceware.org/>
Please do not reply to this email. Use the web interface provided at:
http://bugs.ecos.sourceware.org/show_bug.cgi?id=1001344
--- Comment #28 from Ilija Kocho <ilijak@siva.com.mk> 2012-05-18 08:25:03 BST ---
(In reply to comment #27)
> (In reply to comment #26)
> >
> > CYGBLD_ATTRIB_UNUSED, contrary to what it's name implies, will keep the
> > variable. Ref: Bug 1001520
>
> Oh yes, I'd already forgotten that conversation. The GCC documentation is still
> unclear on that point. In that case, we needed a memory access to a particular
> location. That happened courtesy of derefencing a volatile pointer set to an
> absolute address.
>
> I think this case might be a little different though as the volatile variable
> has entirely local scope. No manufactured addresses are involved that could (in
> principle) be affected by other agents.
>
I think that "volatile" is strong enough so compiler wouldn't dare to drop it
even for an automatic variable. Here is the dump for our case. The code is
optimized indeed, but the computation of critical expression is maintained.
do_some_random_computation(int p)
{
// Just something that might be "hard"
volatile double x CYGBLD_ATTRIB_UNUSED;
x = ((p * 10) * 3.14159) / 180.0; // radians
560: 4620 mov r0, r4
562: f010 fea3 bl 112ac <__aeabi_i2d>
566: a30c add r3, pc, #48 ; (adr r3, 598
<net_load+0x58>)
568: e9d3 2300 ldrd r2, r3, [r3]
56c: f010 ff04 bl 11378 <__aeabi_dmul>
570: a30b add r3, pc, #44 ; (adr r3, 5a0
<net_load+0x60>)
572: e9d3 2300 ldrd r2, r3, [r3]
576: f011 f829 bl 115cc <__aeabi_ddiv>
57a: 340a adds r4, #10
net_load(cyg_addrword_t who)
{
int i;
while (true) {
cyg_semaphore_wait(&load_thread_sem[who]);
for (i = 0; i < load_thread_level; i++) {
57c: 42ac cmp r4, r5
static void
do_some_random_computation(int p)
{
// Just something that might be "hard"
volatile double x CYGBLD_ATTRIB_UNUSED;
x = ((p * 10) * 3.14159) / 180.0; // radians
57e: e9cd 0100 strd r0, r1, [sp]
net_load(cyg_addrword_t who)
{
int i;
while (true) {
cyg_semaphore_wait(&load_thread_sem[who]);
for (i = 0; i < load_thread_level; i++) {
582: d1ed bne.n 560 <net_load+0x20>
do_some_random_computation(i);
}
cyg_thread_delay(1); // Wait until the next 'tick'
584: 2001 movs r0, #1
586: 2100 movs r1, #0
588: f003 f820 bl 35cc <cyg_thread_delay>
cyg_semaphore_post(&load_thread_sem[who]);
58c: 4630 mov r0, r6
58e: f003 f86b bl 3668 <cyg_semaphore_post>
}
592: e7db b.n 54c <net_load+0xc>
594: f3af 8000 nop.w
598: f01b866e .word 0xf01b866e
59c: 400921f9 .word 0x400921f9
5a0: 00000000 .word 0x00000000
5a4: 40668000 .word 0x40668000
5a8: 70002cac .word 0x70002cac
5ac: 700033c8 .word 0x700033c8
> I wonder if you can use both USED and UNUSED at the same time. Given their
> intended functions, you should be able to, despite the English meanings
> implying they are in some way opposites to each other. That would deal with the
> uncertainty.
Then we get ...warning: âusedâ attribute ignored... as per Comment #26.
Ilija
--
Configure bugmail: http://bugs.ecos.sourceware.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.