Please scroll down to the end of letter to download the attachments
("Non-text attachment was scrubbed..."), don't copy paste (because
Google ate my tabs and broke the files)On Mon, Nov 14, 2016 at 10:50 PM, Mike Banon <[email protected]> wrote: > There are (were) five problems with a TINT payload: > 1) It is outdated: version 0.03b vs the latest 0.04+nmu1 . Two buffer > overflows have been fixed since that, as well as some other > improvements > 2) When you press 'p', "Paused - Press any key to continue" message is > not displayed - because there are no "refresh()" functions between > "out_printf" and "while" waiting cycle > 3) When you lose or quit, PC does not reboot - could only reboot by > the power button, really inconvenient. Meanwhile, coreinfo and > nvramcui payloads have a working reboot function "outb(0x6, 0xcf9);" > which could be borrowed > 4) libpayload_tint.patch is bloated - could reduce it in half for the > same effect (with a few changes to Makefile) > 5) Standard USB keyboard does not work, only internal PS2-like > keyboard works (at least it is this way on my G505S laptop). The same > USB keyboard works for me in coreinfo thanks to "#if > IS_ENABLED(CONFIG_LP_USB) usb_initialize(); #endif" right in the > beginning of "int main(void)" function at coreinfo.c file > > I have already fixed all these problems by making the changes to > Makefile and libpayload_tint.patch , but I have no idea how to make a > pull request to coreboot repository and don't have any commit rights! > So if you have the commit rights, please review the changes and commit > these updated versions of "coreboot/payloads/external/tint/Makefile" > and "coreboot/payloads/external/tint/libpayload_tint.patch" - files > attached below. Whoever commits them first could take a credit for my > work > > Best regards, > Mike Banon > > === coreboot/payloads/external/tint/Makefile === > project_url=http://http.debian.net/debian/pool/main/t/tint/tint_0.04+nmu1.tar.gz > archive_name=tint_0.04+nmu1.tar.gz > > unexport KCONFIG_AUTOHEADER > unexport KCONFIG_AUTOCONFIG > unexport KCONFIG_DEPENDENCIES > unexport KCONFIG_SPLITCONFIG > unexport KCONFIG_TRISTATE > unexport KCONFIG_NEGATIVES > > all: tint > > tint: patch > echo " MAKE TINT " > $(MAKE) -C tint > > patch: download > cd tint; \ > if [ -e debian ]; then rm -rf debian; rm typedefs.h; rm > Makefile; touch Makefile; patch -l -p1 < ../libpayload_tint.patch; fi > > download: > test -d tint || { wget $(project_url); \ > tar -xvf $(archive_name); \ > rm $(archive_name); \ > mv tint-0.04+nmu1 tint; } > > clean: > test -d tint && $(MAKE) -C tint clean || exit 0 > > distclean: > rm -rf tint > > .PHONY: download patch tint clean distclean > === coreboot/payloads/external/tint/libpayload_tint.patch === > diff -rupN tint-0.04+nmu1/config.h tint/config.h > --- tint-0.04+nmu1/config.h 2001-12-08 00:03:24.000000000 +0100 > +++ tint/config.h 2016-11-13 23:00:00.000000000 +0200 > @@ -29,7 +29,16 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > +#include <libpayload.h> > +#include <curses.h> > +#define random(x) rand(x) > +#define srandom(x) srand(x) > +#define curs_set(x) > + > + > /* Score file */ > +#if 0 > const char scorefile[] = SCOREFILE; > +#endif > > #endif /* #ifndef CONFIG_H */ > diff -rupN tint-0.04+nmu1/engine.c tint/engine.c > --- tint-0.04+nmu1/engine.c 2005-07-17 13:26:22.000000000 +0200 > +++ tint/engine.c 2016-11-13 23:00:00.000000000 +0200 > @@ -27,10 +27,13 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > +#include "config.h" > + > +#if 0 > #include <stdlib.h> > #include <string.h> > +#endif > > -#include "typedefs.h" > #include "utils.h" > #include "io.h" > #include "engine.h" > diff -rupN tint-0.04+nmu1/engine.h tint/engine.h > --- tint-0.04+nmu1/engine.h 2001-12-07 16:48:08.000000000 +0100 > +++ tint/engine.h 2016-11-13 23:00:00.000000000 +0200 > @@ -29,7 +29,7 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > -#include "typedefs.h" /* bool */ > +#include "curses.h" /* bool */ > > /* > * Macros > diff -rupN tint-0.04+nmu1/io.c tint/io.c > --- tint-0.04+nmu1/io.c 2010-06-23 15:05:12.000000000 +0100 > +++ tint/io.c 2016-11-13 23:00:00.000000000 +0200 > @@ -27,9 +27,13 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > +#include "config.h" > + > +#if 0 > #include <stdarg.h> /* va_list(), va_start(), va_end() */ > #include <sys/time.h> /* gettimeofday() */ > #include <unistd.h> /* gettimeofday() */ > +#endif > > #include "io.h" > > @@ -68,7 +72,11 @@ static int in_timeleft; > /* Initialize screen */ > void io_init () > { > + curses_enable_serial(0); > + curses_enable_vga(1); > initscr (); > + halfdelay(1); > + timeout(1); > start_color (); > curs_set (CURSOR_INVISIBLE); > out_attr = A_NORMAL; > @@ -177,11 +185,17 @@ void out_beep () > /* Read a character. Please note that you MUST call in_timeout() > before in_getch() */ > int in_getch () > { > +#if 0 > struct timeval starttv,endtv; > +#endif > int ch; > +#if 0 > timeout (in_timeleft / 1000); > gettimeofday (&starttv,NULL); > +#endif > ch = getch (); > + mdelay(150); > +#if 0 > gettimeofday (&endtv,NULL); > /* Timeout? */ > if (ch == ERR) > @@ -199,6 +213,7 @@ int in_getch () > in_timeleft -= endtv.tv_usec; > if (in_timeleft <= 0) in_timeleft = in_timetotal; > } > +#endif > return ch; > } > > diff -rupN tint-0.04+nmu1/io.h tint/io.h > --- tint-0.04+nmu1/io.h 2010-06-23 14:55:03.000000000 +0100 > +++ tint/io.h 2016-11-13 23:00:00.000000000 +0200 > @@ -29,9 +29,8 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #include <curses.h> > -#include <wchar.h> > > /* > * Colors > */ > diff -rupN tint-0.04+nmu1/Makefile tint/Makefile > --- tint-0.04+nmu1/Makefile 2010-06-23 15:06:11.000000000 +0200 > +++ tint/Makefile 2016-11-13 23:00:00.000000000 +0200 > @@ -1,0 +1,106 @@ > + > +# -*- sh -*- > + > +# Copyright (c) Abraham vd Merwe <[email protected]> > +# All rights reserved. > +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions > +# are met: > +# 1. Redistributions of source code must retain the above copyright > +# notice, this list of conditions and the following disclaimer. > +# > +# 2. Redistributions in binary form must reproduce the above copyright > +# notice, this list of conditions and the following disclaimer in the > +# documentation and/or other materials provided with the distribution. > +# 3. Neither the name of the author nor the names of other contributors > +# may be used to endorse or promote products derived from this software > +# without specific prior written permission. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS > IS" > +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A > PARTICULAR PURPOSE > +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE > +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR > +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER > +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT > LIABILITY, > +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT > OF THE USE > +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + > +# in addition to the dependency below, create the file if it doesn't exist > +# to silence warnings about a file that would be generated anyway. > +$(if $(wildcard .xcompile),,$(eval $(shell > ../../../../util/xcompile/xcompile $(XGCCPATH) > .xcompile || rm -f > .xcompile))) > +.xcompile: ../../../../util/xcompile/xcompile > + > +CONFIG_COMPILER_GCC := y > +ARCH-y := x86_32 > + > +include .xcompile > + > +src := $(CURDIR) > +srctree := $(src) > +tint_obj := $(src)/build > + > +LIBCONFIG_PATH := $(realpath ../../../libpayload) > +LIBPAYLOAD_DIR := $(tint_obj)/libpayload > +HAVE_LIBPAYLOAD := $(wildcard $(LIBPAYLOAD_DIR)/lib/libpayload.a) > +LIB_CONFIG ?= configs/defconfig-tinycurses > + > +# CFLAGS := -Wall -Werror -Os > +CFLAGS := -Wall -g -Os > +TARGET := tint > +OBJS := $(TARGET).o engine.o io.o utils.o > + > +ARCH-y := x86_32 > + > +CC := $(CC_$(ARCH-y)) > +AS := $(AS_$(ARCH-y)) > +OBJCOPY := $(OBJCOPY_$(ARCH-y)) > + > +LPCC := CC="$(CC)" $(LIBPAYLOAD_DIR)/bin/lpgcc > +LPAS := AS="$(AS)" $(LIBPAYLOAD_DIR)/bin/lpas > + > +# Make is silent per default, but 'make V=1' will show all compiler calls. > +ifneq ($(V),1) > +Q := @ > +endif > + > +all: $(TARGET).elf > +# printf" CC $(CC)\n" > + > +$(TARGET).elf: $(OBJS) libpayload > + $(Q)printf " LPCC $(subst $(shell pwd)/,,$(@))\n" > + $(Q)$(LPCC) -o $@ $(OBJS) > + $(Q)$(OBJCOPY) --only-keep-debug $@ tint.debug > + $(Q)$(OBJCOPY) --strip-debug $@ > + $(Q)$(OBJCOPY) --add-gnu-debuglink=tint.debug $@ > + > +%.o: %.c libpayload > + $(Q)printf " LPCC $(subst $(shell pwd)/,,$(@))\n" > + $(Q)$(LPCC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< > + > +%.S.o: %.S libpayload > + $(Q)printf " LPAS $(subst $(shell pwd)/,,$(@))\n" > + $(Q)$(LPAS) $(ASFLAGS) --32 -o $@ $< > + > +ifneq ($(strip $(HAVE_LIBPAYLOAD)),) > +libpayload: > + $(Q)printf "Found Libpayload $(LIBPAYLOAD_DIR).\n" > +else > +libpayload: > + $(Q)printf "Building libpayload @ $(LIBCONFIG_PATH).\n" > + $(Q)make -C $(LIBCONFIG_PATH) distclean > + $(Q)make -C $(LIBCONFIG_PATH) defconfig KBUILD_DEFCONFIG=$(LIB_CONFIG) > + $(Q)make -C $(LIBCONFIG_PATH) DESTDIR=$(tint_obj) install > +endif > + > +clean: > + $(Q)rm -f $(TARGET).elf $(TARGET).debug *.o > + $(Q)rm .xcompile > + > +distclean: clean > + $(Q)rm -rf $(tint_obj) > + > + > +.PHONY: all clean do-it-all depend with-depends without-depends debian > postinst > diff -rupN tint-0.04+nmu1/tint.c tint/tint.c > --- tint-0.04+nmu1/tint.c 2010-08-08 19:42:50.000000000 +0200 > +++ tint/tint.c 2016-11-13 23:00:00.000000000 +0200 > @@ -1,4 +1,3 @@ > - > /* > * Copyright (c) Abraham vd Merwe <[email protected]> > * All rights reserved. > @@ -27,6 +26,7 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > +#if 0 > #include <stdlib.h> > #include <stdio.h> > #include <string.h> > @@ -34,8 +34,8 @@ > #include <pwd.h> > #include <sys/types.h> > #include <unistd.h> > +#endif > > -#include "typedefs.h" > #include "utils.h" > #include "io.h" > #include "config.h" > @@ -305,5 +305,5 @@ > > /* Header for scorefile */ > -#define SCORE_HEADER "Tint 0.02b (c) Abraham vd Merwe - Scores" > +#define SCORE_HEADER "Tint 0.04+nmu1 (c) Abraham vd Merwe - Scores" > > /* Header for score title */ > @@ -322,6 +322,7 @@ typedef struct > time_t timestamp; > } score_t; > > +#if 0 > static void getname (char *name) > { > struct passwd *pw = getpwuid (geteuid ()); > @@ -338,7 +339,9 @@ static void getname (char *name) > name[NAMELEN - 1] = '\0'; > } > } > +#endif > > +#if 0 > static void err1 () > { > fprintf (stderr,"Error creating %s\n",scorefile); > @@ -350,10 +353,11 @@ static void err2 () > fprintf (stderr,"Error writing to %s\n",scorefile); > exit (EXIT_FAILURE); > } > +#endif > > void showplayerstats (engine_t *engine) > { > - fprintf (stderr, > + printf ( > "\n\t PLAYER STATISTICS\n\n\t" > "Score %11d\n\t" > "Efficiency %11d\n\t" > @@ -361,6 +365,7 @@ void showplayerstats (engine_t *engine) > GETSCORE > (engine->score),engine->status.efficiency,GETSCORE (engine->score) / > getsum ()); > } > > +#if 0 > static void createscores (int score) > { > FILE *handle; > @@ -395,7 +400,9 @@ static void createscores (int score) > fprintf (stderr,"%s",scoretitle); > fprintf (stderr,"\t 1* %7d %s\n\n",score,scores[0].name); > } > +#endif > > +#if 0 > static int cmpscores (const void *a,const void *b) > { > int result; > @@ -413,7 +420,9 @@ static int cmpscores (const void *a,cons > /* timestamps is equal */ > return 0; > } > +#endif > > +#if 0 > static void savescores (int score) > { > FILE *handle; > @@ -491,11 +500,13 @@ static void savescores (int score) > } > fprintf (stderr,"\n"); > } > +#endif > > > /***************************************************************************/ > > /***************************************************************************/ > > /***************************************************************************/ > > +#if 0 > static void showhelp () > { > fprintf (stderr,"USAGE: tint [-h] [-l level] [-n] [-d] [-b char]\n"); > @@ -506,9 +517,11 @@ static void showhelp () > fprintf (stderr," -b <char> Use this character to draw blocks > instead of spaces\n"); > exit (EXIT_FAILURE); > } > +#endif > > static void parse_options (int argc,char *argv[]) > { > +#if 0 > int i = 1; > while (i < argc) > { > @@ -544,10 +557,12 @@ static void parse_options (int argc,char > } > i++; > } > +#endif > } > > static void choose_level () > { > +#if 0 > char buf[NAMELEN]; > > do > @@ -557,6 +572,8 @@ static void choose_level () > buf[strlen (buf) - 1] = '\0'; > } > while (!str2int (&level,buf) || level < MINLEVEL || level > MAXLEVEL); > +#endif > + level = 1; > } > > > /***************************************************************************/ > @@ -571,2 +588,5 @@ int main (int argc,char *argv[]) > /* Initialize */ > + #if IS_ENABLED(CONFIG_LP_USB) > + usb_initialize(); > + #endif > rand_init (); /* must be called before > engine_init () */ > @@ -632,13 +652,15 @@ int main (int argc,char *argv[]) > /* pause */ > case 'p': > out_setcolor (COLOR_WHITE,COLOR_BLACK); > - out_gotoxy ((out_width () - 34) / 2,out_height () - 2); > + out_gotoxy ((out_width () - 34) / 2,out_height () / 2); > out_printf ("Paused - Press any key to continue"); > + refresh (); > while ((ch = in_getch ()) == ERR) ; /* Wait for > a key to be pressed */ > in_flush (); /* Clear > keyboard buffer */ > - out_gotoxy ((out_width () - 34) / 2,out_height () - 2); > + out_gotoxy ((out_width () - 34) / 2,out_height () / 2); > out_printf (" "); > + refresh (); > break; > /* unknown keypress */ > default: > out_beep (); > @@ -673,11 +695,31 @@ int main (int argc,char *argv[]) > /* Restore console settings and exit */ > io_close (); > +#if 0 > /* Don't bother the player if he want's to quit */ > if (ch != 'q') > { > +#endif > showplayerstats (&engine); > +#if 0 > savescores (GETSCORE (engine.score)); > } > +#endif > + printf("Press 'q' to reboot...\n"); > + refresh(); > + for (;;) { > + in_flush (); > + while ((ch = in_getch ()) == ERR) ; /* Wait for a key to be pressed > */ > + if (ch == 'q') { /* reboot */ > + outb(0x6, 0xcf9); > + for(;;); //halt(); > + } > + else { > + in_flush (); > + } > + } > + > +#if 0 > exit (EXIT_SUCCESS); > +#endif > } > > diff -rupN tint-0.04+nmu1/utils.c tint/utils.c > --- tint-0.04+nmu1/utils.c 2001-12-07 16:49:19.000000000 +0100 > +++ tint/utils.c 2016-11-13 23:00:00.000000000 +0200 > @@ -27,11 +27,13 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > +#include "config.h" > + > +#if 0 > #include <stdlib.h> > #include <time.h> > #include <limits.h> > - > -#include "typedefs.h" > +#endif > > /* > * Initialize random number generator > @@ -41,8 +43,11 @@ void rand_init () > #ifdef USE_RAND > srand (time (NULL)); > #else > +#if 0 > srandom (time (NULL)); > #endif > + srandom (123); > +#endif > } > > /* > @@ -61,6 +66,7 @@ int rand_value (int range) > * Convert an str to long. Returns TRUE if successful, > * FALSE otherwise. > */ > +#if 0 > bool str2int (int *i,const char *str) > { > char *endptr; > @@ -69,3 +75,4 @@ bool str2int (int *i,const char *str) > return TRUE; > } > > +#endif > diff -rupN tint-0.04+nmu1/utils.h tint/utils.h > --- tint-0.04+nmu1/utils.h 2001-12-07 16:49:35.000000000 +0100 > +++ tint/utils.h 2016-11-13 23:00:00.000000000 +0200 > @@ -29,7 +29,7 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > -#include "typedefs.h" > +#include <curses.h> > > /* > * Initialize random number generator -- coreboot mailing list: [email protected] https://www.coreboot.org/mailman/listinfo/coreboot

