sim: mcore: drop sbrk support
authorMike Frysinger <vapier@gentoo.org>
Sun, 29 Mar 2015 07:29:29 +0000 (03:29 -0400)
committerMike Frysinger <vapier@gentoo.org>
Sun, 29 Mar 2015 08:14:27 +0000 (04:14 -0400)
The sbrk syscall assumes the sbrk region starts after the bss and the
current implementation requires a bss section to exist.  Since there
is no requirement for programs to have a bss in general, we want to
drop this check.  However, there is still the sbrk syscall that wants
to know about the region.

Since libgloss doesn't actually use the sbrk syscall (it implements
sbrk in its own way), and the sim really shouldn't enforce a specific
memory layout on programs, lets simply delete sbrk support.  Now it
always returns an error.

sim/mcore/ChangeLog
sim/mcore/interp.c

index c309a05f81368a8687c5a6503ad369b44b970067..f6089c8049de9eb75f33a07ff3db9f65c8fca8bd 100644 (file)
@@ -1,3 +1,9 @@
+2015-03-29  Mike Frysinger  <vapier@gentoo.org>
+
+       * interp.c (heap_ptr, int_sbrk): Delete.
+       (handle_trap1): Change case 69 (sbrk) to always return -1.
+       (sim_load): Delete bss checks and heap_ptr setup.
+
 2015-03-16  Mike Frysinger  <vapier@gentoo.org>
 
        * interp.c: Strip trailing whitespace.
index 4eb1a5903e61b812cf9f461601c165b0fe5d42da..b06bd1fb3f78b6718d71f8f10be9ba635f6bbcb3 100644 (file)
@@ -38,7 +38,6 @@ typedef long int           word;
 typedef unsigned long int  uword;
 
 static int            target_big_endian = 0;
-static unsigned long  heap_ptr = 0;
 host_callback *       callback;
 
 
@@ -174,21 +173,6 @@ static int issue_messages = 0;
 #define        PARM4   5
 #define        RET1    2               /* register for return values. */
 
-static long
-int_sbrk (int inc_bytes)
-{
-  long addr;
-
-  addr = heap_ptr;
-
-  heap_ptr += inc_bytes;
-
-  if (issue_messages && heap_ptr>cpu.gr[0])
-    fprintf (stderr, "Warning: heap_ptr overlaps stack!\n");
-
-  return addr;
-}
-
 static void
 wbat (word x, word v)
 {
@@ -588,8 +572,10 @@ handle_trap1 (void)
       break;
 
     case 69:
+      /* Historically this was sbrk(), but no one used it, and the
+       implementation didn't actually work, so it's a stub now.  */
       a[0] = (unsigned long) (cpu.gr[PARM1]);
-      cpu.gr[RET1] = int_sbrk (a[0]);
+      cpu.gr[RET1] = -1;
       break;
 
     default:
@@ -1871,7 +1857,6 @@ sim_load (SIM_DESC sd, const char *prog, bfd *abfd, int from_tty)
 
   {
     bfd * handle;
-    asection * s_bss;
     handle = bfd_openr (prog, 0);      /* could be "mcore" */
 
     if (!handle)
@@ -1890,27 +1875,6 @@ sim_load (SIM_DESC sd, const char *prog, bfd *abfd, int from_tty)
        return SIM_RC_FAIL;
       }
 
-    /* Look for that bss section.  */
-    s_bss = bfd_get_section_by_name (handle, ".bss");
-
-    if (!s_bss)
-      {
-       printf("``%s'' has no bss section.\n", prog);
-       return SIM_RC_FAIL;
-      }
-
-    /* Appropriately paranoid would check that we have
-       a traditional text/data/bss ordering within memory.  */
-
-    /* figure the end of the bss section */
-#if 0
-    printf ("bss section at 0x%08x for 0x%08x bytes\n",
-           (unsigned long) bfd_get_section_vma (handle, s_bss),
-           (unsigned long) bfd_section_size (handle, s_bss));
-#endif
-    heap_ptr = ((unsigned long) bfd_get_section_vma (handle, s_bss)
-               + (unsigned long) bfd_section_size (handle, s_bss));
-
     /* Clean up after ourselves.  */
     bfd_close (handle);