[U-Boot-Users] combined C/ARM assembly example

Shakthi Kannan shakthimaan at yahoo.com
Wed Mar 22 20:05:05 CET 2006


I am trying to test the mrs ARM instruction from
hello_world.c example using 2.95.3 toolchain,
u-boot-1.1.1 (will update). SDRAM is at 0x30000000.

The C/assembly code is as follows:

#include <common.h> 
#include <exports.h> 

int main (int argc, char *argv[])
 unsigned long *ptr1, *ptr2;

 ptr1 = (unsigned long *) (0x30800000);
 ptr2 = (unsigned long *) (0x30800004);

 asm volatile ("ldr r0,= 0x30800000");
 asm volatile ("ldr r3,= 0x30800004");
 asm volatile ("ldr r1,= 0xff000000");
 asm volatile ("movs r2, r1, lsl #1");
 asm volatile ("mrs r1, cpsr");
 asm volatile ("str r1, [r0, #0]");
 asm volatile ("str r2, [r3, #0]");

 printf ("*ptr1 = %8lx\n", *ptr1);
 printf ("*ptr2 = %8lx\n", *ptr2);

 return (0);

I am expecting:

*ptr1 (0x30800000) = cpsr value
*ptr2 (0x30800004) = 0xfe000000

I get the following output:

*ptr1 (0x30800000) = 0xfe000000
*ptr2 (0x30800004) = 0xfe000000

But, when I use md to get the memory dump, the values
are correct though:
     0x30800000 contains a00000d3
     0x30800004 contains fe000000

a00000d3 = NzCvjIFt_svc

svc because I am using -D__KERNEL__ ?

Checking the disassembly using objdump reveals no
instance of 0x30800004.

The Makefile, code, output is at:

I'd appreciate any inputs regarding this or am I
missing something here.



Shakthi Kannan, MS
Software Engineer, Hexaware Technologies
[E]: shakthimaan at yahoo dot com           [M]: (91) 98407-87007
[W]: http://www.shakthimaan.com      [L]: Chennai, India

Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 

More information about the U-Boot mailing list