LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Find Resources
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Openrisc > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: Cool_ABen@s...<Cool_ABen@s...>
    Date: Tue Dec 30 09:07:19 CET 2003
    Subject: [openrisc] About "malloc" in the simulator and in the FPGA
    Top
    Hi All:
    Recently I wrote a little program "test.c" to test the "malloc"
    and "free" functions. The codes are as follows:

    "test.c":

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    char * p;
    p = malloc(8*sizeof(char));
    if (p == NULL)
    return -1;
    free(p)
    return 0;
    }

    and the "makefile" script is as follows:

    "makefile":

    common = ../sw/support/libsupport.a
    all:test

    test: test.o ../sw/support/reset-icdc.o \
    /opt/or32-uclinux/lib/libc.a \
    /opt/or32-uclinux/lib/gcc-lib/or32-uclinux/3.1/libgcc.a

    or32-uclinux-ld -T ../sw/support/orp.ld $? -o $@.or32 $(common)

    test.o: test.c
    or32-uclinux-gcc -g -c -o test.o test.c



    the support package is downloaded from the cvsweb "/ or1k / orp /
    orp_soc / sw" of the opencore.org and the libsupport is in it too.

    and the orp.ld script used by or32-uclinux-ld is as follows:

    MEMORY
    {
    vectors : ORIGIN = 0x00000000, LENGTH = 0x00002000
    flash : ORIGIN = 0x04000000, LENGTH = 0x00200000
    ram : ORIGIN = 0x00002000, LENGTH = 0x001f0000
    mp3data : ORIGIN = 0x001f2000, LENGTH = 0x00004000
    }

    SECTIONS
    {
    .reset :
    {
    *(.reset)
    } > flash

    .text ALIGN(0x04):
    {
    _text_bin = .;
    *(.text)
    _text_end = .;
    } > flash

    .rodata :
    {
    _rodata_bin = .;
    *(.rodata)
    _rodata_end = .;
    } > flash

    .dummy ALIGN(0x04):
    {
    _src_beg = .;
    } > flash

    .vectors :
    AT ( ADDR (.dummy) )
    {
    _vec_start = .;
    *(.vectors)
    _vec_end = .;
    } > vectors

    .data :
    AT ( ADDR (.dummy) + SIZEOF (.vectors) )
    {
    _dst_beg = .;
    *(.data)
    _dst_end = .;
    } > ram

    .mp3data :
    {
    _mp3_begin = .;
    *(.mp3)
    _mp3_end = .;
    } > mp3data

    .bss :
    { *(.bss) } > ram .stack : { *(.stack) _src_addr = .; } > ram } then I run the makefile script and the test.or32 is generated. First I put it in the simulator . I set the breakpoint at the line "p = malloc (8*sizeof(char));". When entering the function of malloc,many circles of instructions comes,among malloc_init , udivsi3 ,modsi3 and so on. After many instructions ,it comes to the mmap functions and implement the instruction "l.sys 0x1".Then it comes to 0xc00 and implements the "l.j 0" for ever. So I send the test.or32 to the fpga board running the or rtl. But to my disappoint ,the "p" equals NULL and means that malloc cannot work. I don't know what to do .And anyone can save me? Thanks a lot. I think simulator should support the malloc operation at least.Or I should study the code of malloc.c in ulibc library? Thanks a lot. Thanks and Regards

    Follow upAuthor
    [openrisc] About "malloc" in the simulator and in the FPGASimon Srot

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.