[Cbe-oss-dev] [PATCH] libspe: elfspe: set argv[argc] = NULL

Kazunori Asayama asayama at sm.sony.co.jp
Thu May 24 17:00:20 EST 2007


Patch applied.
Thank you.

"D. Herrendoerfer" <d.herrendoerfer at herrendoerfer.name> wrote:
> Yes, ok with me.
> 
> D.Herrendoerfer
> 
> On Wed, 2007-05-23 at 17:21 +0900, Masato Noguchi wrote:
> > Programming language-C standard says "argv[argc] shall be a null pointer."
> > but, a value of argv[argc] passed from elfspe to spe program is undefined in current implementation.
> > This patch fix it.
> > 
> > is it ok to apply?
> > 
> > --
> > 
> >  libspe/elfspe.c         |    5 +++--
> >  libspe2/elfspe/elfspe.c |    5 +++--
> >  2 files changed, 6 insertions(+), 4 deletions(-)
> > 
> > --
> > Index: libspe/libspe2/elfspe/elfspe.c
> > ===================================================================
> > --- libspe/libspe2/elfspe/elfspe.c	(revision 41)
> > +++ libspe/libspe2/elfspe/elfspe.c	(working copy)
> > @@ -99,7 +99,7 @@
> >      for (i = 0; i < argc; i++) {
> >  	nbytes += strlen(argv[i]) + 1;
> >      }
> > -    nbytes += (argc * sizeof(unsigned int));
> > +    nbytes += ((argc + 1) * sizeof(unsigned int));
> >      nbytes = (nbytes + 15) & ~(15);
> >      if (nbytes > spe_arg_max) {
> >  	return 2;
> > @@ -113,7 +113,7 @@
> >      ptr = (char *)start;
> >      end = (char *)start + nbytes;
> >      argv_offsets = (unsigned int *) ptr;
> > -    ptr += (argc * sizeof(unsigned int));
> > +    ptr += ((argc + 1) * sizeof(unsigned int));
> >      for (i = 0; i < argc; i++) {
> >  	int len = strlen(argv[i]) + 1;
> >  	argv_offsets[i] = LS_SIZE - ((unsigned int) (end - ptr));
> > @@ -121,6 +121,7 @@
> >  	memcpy(ptr, argv[i], len);
> >  	ptr += len;
> >      }
> > +    argv_offsets[argc] = NULL;
> >      ret->r3[0] = argc;
> >      ret->r4[0] = LS_SIZE - nbytes;
> >      ret->r4[1] = addr64.ui[0];
> > Index: libspe/libspe/elfspe.c
> > ===================================================================
> > --- libspe/libspe/elfspe.c	(revision 41)
> > +++ libspe/libspe/elfspe.c	(working copy)
> > @@ -100,7 +100,7 @@
> >      for (i = 0; i < argc; i++) {
> >  	nbytes += strlen(argv[i]) + 1;
> >      }
> > -    nbytes += (argc * sizeof(unsigned int));
> > +    nbytes += ((argc + 1) * sizeof(unsigned int));
> >      nbytes = (nbytes + 15) & ~(15);
> >      if (nbytes > spe_arg_max) {
> >  	return 2;
> > @@ -114,7 +114,7 @@
> >      ptr = (char *)start;
> >      end = (char *)start + nbytes;
> >      argv_offsets = (unsigned int *) ptr;
> > -    ptr += (argc * sizeof(unsigned int));
> > +    ptr += ((argc + 1) * sizeof(unsigned int));
> >      for (i = 0; i < argc; i++) {
> >  	int len = strlen(argv[i]) + 1;
> >  	argv_offsets[i] = LS_SIZE - ((unsigned int) (end - ptr));
> > @@ -122,6 +122,7 @@
> >  	memcpy(ptr, argv[i], len);
> >  	ptr += len;
> >      }
> > +    argv_offsets[argc] = NULL;
> >      ret->r3[0] = argc;
> >      ret->r4[0] = LS_SIZE - nbytes;
> >      ret->r4[1] = addr64.ui[0];
> > 



More information about the cbe-oss-dev mailing list