From mboxrd@z Thu Jan 1 00:00:00 1970 From: "J. Johnston" To: Cristiano Ligieri Pereira Cc: Ben Elliston , sid@sources.redhat.com Subject: Re: Running the hello.c example Date: Mon, 19 Nov 2001 10:58:00 -0000 Message-ID: <3BF9561B.4384B76B@cygnus.com> References: X-SW-Source: 2001-q4/msg00037.html Message-ID: <20011119105800.gRmcsRnRIwusHqF-gUquH7yvekebRymw3NhGY0T6DEM@z> Cristiano Ligieri Pereira wrote: > > These are the number in the file newlib/arm-elf/newlib/libc/sys/arm/swi.h: > > /**************************************************************************\ > * SWI numbers * > \**************************************************************************/ > > #define SWI_WriteC 0x0 > #define SWI_Write0 0x2 > #define SWI_ReadC 0x4 > #define SWI_CLI 0x5 > #define SWI_GetEnv 0x10 > #define SWI_Exit 0x11 > #define SWI_EnterOS 0x16 > > #define SWI_GetErrno 0x60 > #define SWI_Clock 0x61 > #define SWI_Time 0x63 > #define SWI_Remove 0x64 > #define SWI_Rename 0x65 > #define SWI_Open 0x66 > > #define SWI_Close 0x68 > #define SWI_Write 0x69 > #define SWI_Read 0x6a > #define SWI_Seek 0x6b > #define SWI_Flen 0x6c > > #define SWI_IsTTY 0x6e > #define SWI_TmpNam 0x6f > #define SWI_InstallHandler 0x70 > Christiano, You likely have built newlib incorrectly. See newlib/configure.host. The default is to define ARM_RDI_MONITOR which activates the Angel code. # newlib_cflags="${newlib_cflags} -DARM_RDP_MONITOR" newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR" ;; This means that instead of the SWI codes you are quoting above, you will get the AngelSWI_Reason_xxx codes which follow. The value for write is 0x5 which matches what sid is expecting. You should verify that you have not changed these lines and if so, you should clean your newlib build and reconfigure/build again. -- Jeff J. > and these are the numbers on the file sid/src/sid/component/gloss/angel.h: > > enum syscalls /* See also: newlib/libc/sys/arm/swi.h AngelSWI_Reason_* > */ > { > syscall_open = 0x1, > syscall_close = 0x2, > syscall_writec = 0x3, > syscall_write0 = 0x4, > syscall_write = 0x5, > syscall_read = 0x6, > syscall_readc = 0x7, > syscall_iserror, > syscall_istty = 0x9, > syscall_seek = 0xA, > syscall_flen = 0xC, > syscall_tmpnam = 0xD, > syscall_remove = 0xE, > syscall_rename = 0xF, > syscall_clock = 0x10, > syscall_time = 0x11, > syscall_system = 0x12, > syscall_errno = 0x13, > syscall_get_cmdline = 0x15, > syscall_heapinfo = 0x16, > syscall_report_exception = 0x18 > }; > > > If I understood well these number should match, but this is not > happening... Am I compiling the wrong verstion of newlib? > > Thanks, > Cristiano. > > ------------------------------------------------------------ > Cristiano Ligieri Pereira - http://www.ics.uci.edu/~cpereira > > On Mon, 19 Nov 2001, Ben Elliston wrote: > > > Hi. > > > > >>>>> "Cristiano" == Cristiano Ligieri Pereira writes: > > > > Cristiano> 0x8764: SWI Fault (software, 0x69) pc=0x8764 > > > > Cristiano> and this is the piece of the original code where the error is happening: > > > > Cristiano> 00008758 <_swiwrite>: > > Cristiano> 8758: e1a0c00d mov ip, sp > > Cristiano> 875c: e92dd800 stmdb sp!, {fp, ip, lr, pc} > > Cristiano> 8760: e24cb004 sub fp, ip, #4 ; 0x4 > > Cristiano> 8764: ef000069 swi 0x00000069 > > Cristiano> 8768: e91ba800 ldmdb fp, {fp, sp, pc} > > > > Cristiano> SWI is software interrupt, right? Looks like I'm trying to execution > > Cristiano> function 0x69 that doesn't exist? is this right? > > > > I think you're on the right track. > > > > Cristiano> Why would this happen? This is such a simple example. And one more > > Cristiano> question..., which configuration is being used (besides ARM processor) > > Cristiano> once I haven't specified any configuration file, let alone created some > > Cristiano> configuration. > > > > The default ARM system configuration in sid uses the ARM Angel monitor > > and its associated syscall conventions. My guess is that your build > > of newlib is targetting some other ARM target where swi 69 is the > > means by which characters are written. > > > > Ben > >