Re: [kvm-unit-tests PATCH v3 3/3] arm & powerpc: populate argv[0] with prognam

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jul 11, 2016 at 03:50:21PM +0200, Andrew Jones wrote:
> On Mon, Jul 11, 2016 at 03:05:38PM +0200, Paolo Bonzini wrote:
> > What about this slightly simpler Makefilery?  I'll test ARM shortly, help
> > with PPC will be gladly accepted. :)
> 
> If it works, it works for me :-)

Sorry this message was written poorly. It probably mostly looks like
"works for me", as in tested-by, but really I was just agreeing with
the patch without actually having tested it yet, thus the "*If* it
works" part. Anyway, it doesn't :-)  I just sent a fixup patch for it
though.

Thanks,
drew

> 
> I guess we don't need the x86/Makefile.common hunk though, as seabios
> gets you argv[0]=prognam already.
> 
> nit: I'ed like to either add an 'e' to .prognam or remove the 'E' from
> PROGNAME.
> 
> Thanks,
> drew
> 
> > 
> > Paolo
> > 
> > diff --git a/arm/Makefile.common b/arm/Makefile.common
> > index a786fcf..be99a4a 100644
> > --- a/arm/Makefile.common
> > +++ b/arm/Makefile.common
> > @@ -54,7 +54,7 @@ FLATLIBS = $(libcflat) $(LIBFDT_archive) $(libgcc) $(libeabi)
> >  %.elf: %.o $(FLATLIBS) arm/flat.lds $(cstart.o)
> >  	$(CC) $(LDFLAGS) -o $@ \
> >  		-Wl,-T,arm/flat.lds,--build-id=none,-Ttext=$(start_addr) \
> > -		$(filter %.o, $^) $(FLATLIBS)
> > +		$(filter %.o, $^) $(FLATLIBS) lib/auxinfo.c -DPROGNAME=\"$(*F)\"
> >  
> >  %.flat: %.elf
> >  	$(OBJCOPY) -O binary $^ $@
> > diff --git a/lib/argv.c b/lib/argv.c
> > index 4f6b4f0..f61992c 100644
> > --- a/lib/argv.c
> > +++ b/lib/argv.c
> > @@ -1,10 +1,13 @@
> >  #include "libcflat.h"
> > +#include "auxinfo.h"
> >  
> >  int __argc;
> >  char *__argv[100];
> >  char *__args;
> >  char __args_copy[1000];
> >  
> > +static char *copy_ptr = __args_copy;
> > +
> >  static bool isblank(char p)
> >  {
> >      return p == ' ' || p == '\t';
> > @@ -21,13 +24,12 @@ void __setup_args(void)
> >  {
> >      char *args = __args;
> >      char **argv = __argv;
> > -    char *p = __args_copy;
> >  
> >      while (*(args = skip_blanks(args)) != '\0') {
> > -        *argv++ = p;
> > +        *argv++ = copy_ptr;
> >          while (*args != '\0' && !isblank(*args))
> > -            *p++ = *args++;
> > -        *p++ = '\0';
> > +            *copy_ptr++ = *args++;
> > +        *copy_ptr++ = '\0';
> >      }
> >      __argc = argv - __argv;
> >  }
> > @@ -52,6 +54,8 @@ void setup_args_prognam(char *args)
> >          for (i = __argc; i > 0; --i)
> >              __argv[i] = __argv[i-1];
> >      }
> > -    __argv[0] = NULL; // just reserve for now
> > +    __argv[0] = copy_ptr;
> > +    strcpy(__argv[0], auxinfo.prognam);
> > +    copy_ptr += strlen(auxinfo.prognam) + 1;
> >      ++__argc;
> >  }
> > diff --git a/lib/auxinfo.c b/lib/auxinfo.c
> > new file mode 100644
> > index 0000000..bffeac2
> > --- /dev/null
> > +++ b/lib/auxinfo.c
> > @@ -0,0 +1,2 @@
> > +#include "auxinfo.h"
> > +struct auxinfo auxinfo = { PROGNAME };
> > diff --git a/lib/auxinfo.h b/lib/auxinfo.h
> > new file mode 100644
> > index 0000000..18510ba
> > --- /dev/null
> > +++ b/lib/auxinfo.h
> > @@ -0,0 +1,9 @@
> > +#ifndef _AUXINFO_H_
> > +#define _AUXINFO_H_
> > +struct auxinfo {
> > +	const char *prognam;
> > +};
> > +
> > +/* No extern!  Define a common symbol.  */
> > +struct auxinfo auxinfo;
> > +#endif
> > diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common
> > index 4ff1dc8..bbad9c7 100644
> > --- a/powerpc/Makefile.common
> > +++ b/powerpc/Makefile.common
> > @@ -41,9 +41,10 @@ FLATLIBS = $(libcflat) $(LIBFDT_archive)
> >  %.elf: CFLAGS += $(arch_CFLAGS)
> >  %.elf: LDFLAGS = $(arch_LDFLAGS) -nostdlib -pie
> >  %.elf: %.o $(FLATLIBS) powerpc/flat.lds $(cstart.o) $(reloc.o)
> > -	$(LD) $(LDFLAGS) -o $@ \
> > -	      -T powerpc/flat.lds --build-id=none \
> > -		$(filter %.o, $^) $(FLATLIBS)
> > +	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \
> > +	      -Wl,-T,powerpc/flat.lds -Wl,--build-id=none \
> > +		$(filter %.o, $^) $(FLATLIBS) \
> > +		lib/auxinfo.c -DPROGNAME=\"$*\"
> >  	@echo -n Checking $@ for unsupported reloc types...
> >  	@if $(OBJDUMP) -R $@ | grep R_ | grep -v R_PPC64_RELATIVE; then	\
> >  		false;							\
> > diff --git a/x86/Makefile.common b/x86/Makefile.common
> > index 356d879..67fb65b 100644
> > --- a/x86/Makefile.common
> > +++ b/x86/Makefile.common
> > @@ -31,7 +31,7 @@ libgcc := $(shell $(CC) -m$(bits) --print-libgcc-file-name)
> >  FLATLIBS = lib/libcflat.a $(libgcc)
> >  %.elf: %.o $(FLATLIBS) x86/flat.lds $(cstart.o)
> >  	$(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,x86/flat.lds \
> > -		$(filter %.o, $^) $(FLATLIBS)
> > +		$(filter %.o, $^) $(FLATLIBS) lib/auxinfo.c -DPROGNAME=\"$(*F)\"
> >  
> >  %.flat: %.elf
> >  	$(OBJCOPY) -O elf32-i386 $^ $@
> > --
> > To unsubscribe from this list: send the line "unsubscribe kvm" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux