[LinuxBIOS] util/getpir 64bit cleanup [resend]

Stefan Reinauer stepan at coresystems.de
Wed Apr 11 21:03:33 CEST 2007


applied with some changes to 2602

* Jeremy Jackson <jerj at coplanar.net> [070411 17:39]:
> 
> 
> I'm guessing nobody has tried compiling it with 64bit userspace?
> 
> Patch makes it compile cleanly and stops a "SEGV instead of working"
> issue.
> 
> I also added a few checks for errors on system calls.
> 
> Signed-off-by: Jeremy Jackson <jerj at coplanar.net>
> 
> 
> -- 
> Jeremy Jackson
> jerj at coplanar.net Email/Jabber/Google Talk/MSN
> (519)489-4903
> Coplanar Networks
> http://www.coplanar.net

> Index: getpir/checksum.c
> ===================================================================
> --- getpir/checksum.c	(revision 2601)
> +++ getpir/checksum.c	(working copy)
> @@ -1,4 +1,4 @@
> -#include <arch/pirq_routing.h>
> +#include "arch/pirq_routing.h"
>  
>  #include "checksum.h"
>  
> Index: getpir/code_gen.c
> ===================================================================
> --- getpir/code_gen.c	(revision 2601)
> +++ getpir/code_gen.c	(working copy)
> @@ -1,12 +1,13 @@
>  #include <stdio.h>
> -#include <arch/pirq_routing.h>
> +#include <stdlib.h>
> +#include "arch/pirq_routing.h"
>  
>  static char *preamble[] = {
>  	"/* This file was generated by getpir.c, do not modify! \n   (but if you do, please run checkpir on it to verify)\n",
>  	" * Contains the IRQ Routing Table dumped directly from your memory, which BIOS sets up\n",
>  	" *\n",
>  	" * Documentation at : http://www.microsoft.com/hwdev/busbios/PCIIRQ.HTM\n*/\n\n",
> -	"#include <arch/pirq_routing.h>\n\n",
> +	"#include \"arch/pirq_routing.h\"\n\n",
>  	"const struct irq_routing_table intel_irq_routing_table = {\n",
>  	"\tPIRQ_SIGNATURE,  /* u32 signature */\n",
>  	"\tPIRQ_VERSION,    /* u16 version   */\n",
> Index: getpir/checkpir.c
> ===================================================================
> --- getpir/checkpir.c	(revision 2601)
> +++ getpir/checkpir.c	(working copy)
> @@ -4,7 +4,7 @@
>  */
>  
>  #include <stdio.h>
> -#include <arch/pirq_routing.h>
> +#include "arch/pirq_routing.h"
>  
>  #include "checksum.h"
>  
> Index: getpir/getpir.c
> ===================================================================
> --- getpir/getpir.c	(revision 2601)
> +++ getpir/getpir.c	(working copy)
> @@ -1,12 +1,16 @@
>  /* getpir.c : This software is released under GPL
>     For Linuxbios use only
>     Aug 26 2001 , Nikolai Vladychevski, <niko at isl.net.mx>
> +   2007.04.09 Jeremy Jackson <jerj at coplanar.net>
> +	updated for amd64 and general 64 bit portability
>  */
>  
>  #include <stdio.h>
> +#include <stdlib.h>
>  #include <sys/mman.h>
> +#include <string.h>
>  
> -#include <arch/pirq_routing.h>
> +#include "arch/pirq_routing.h"
>  
>  #define O_RDONLY 0x00
>  
> @@ -17,14 +21,18 @@
>  
>  	ptr =  mmap(0, 0x10000, PROT_READ, MAP_SHARED,
>  		    fd_mem, (off_t) 0xf0000);
> +	if (ptr < 0) {
> +		perror("mmap failed");
> +		exit(1);
> +	}
>  
>  	rt = (struct irq_routing_table *) memmem(ptr, 0xFFFF, signature, 4);
>  
>  	if (rt != NULL) {
> -		printf("Found PCI IRQ Routing table signature at 0x%04x of system memory\n",
> +		printf("Found PCI IRQ Routing table signature $PIR at 0x%04x of system memory\n",
>  		       (char *) rt - ptr + 0xf0000);
>  	} else {
> -		printf("No PCI IRQ Routing table signature in the memory\n");		
> +		printf("No PCI IRQ Routing table signature found in memory\n");		
>  		exit(1);
>  	}
>  	return rt;
> @@ -36,10 +44,13 @@
>   	struct irq_routing_table *rt;
>  
>  	if (getuid()) {
> -		perror("Run me as root, I need access to /dev/mem");
> +		fprintf(stderr, "Run me as root, or probably can't access /dev/mem\n");
> +	}
> +	fd_mem = open("/dev/mem", O_RDONLY);
> +	if (fd_mem < 0) {
> +		perror("opening /dev/mem");
>  		exit(1);
>  	}
> -	fd_mem = open("/dev/mem", O_RDONLY);
>  
>  	printf("Probing PIRQ table in memory\n");
>  	rt = probe_table(fd_mem);
> Index: getpir/Makefile
> ===================================================================
> --- getpir/Makefile	(revision 2601)
> +++ getpir/Makefile	(working copy)
> @@ -1,26 +1,29 @@
>  # change to the path of your linuxbios tree
> -#LINUXBIOSROOT=/home/rminnich/src//freebios/
>  LINUXBIOSROOT=../..
>  
> +# we're using -iquote with these so they don't collide
> +# some LinuxBIOS headers with system ones
>  INCLUDEPATH=$(LINUXBIOSROOT)/src/arch/i386/include
>  INCLUDE2=$(LINUXBIOSROOT)/src/include
> +# boy does 64bit and memmem() mess up without -D_GNU_SOURCE
> +CFLAGS="-D_GNU_SOURCE"
>  
>  getpir: getpir.c checksum.o code_gen.o
> -	gcc -o getpir -I$(INCLUDEPATH) -I$(INCLUDE2) getpir.c checksum.o code_gen.o
> +	gcc $(CFLAGS) -o getpir -iquote$(INCLUDEPATH) -iquote$(INCLUDE2) getpir.c checksum.o code_gen.o
>  
>  code_gen.o: code_gen.c
> -	gcc -c -I$(INCLUDEPATH) -I$(INCLUDE2) code_gen.c
> +	gcc $(CFLAGS) -c -iquote$(INCLUDEPATH) -iquote$(INCLUDE2) code_gen.c
>  
>  all: getpir checkpir
>  
>  checkpir: checkpir.c checksum.o irq_tables.o
> -	gcc -o checkpir -I$(INCLUDEPATH) -I$(INCLUDE2) irq_tables.o checksum.o checkpir.c
> +	gcc $(CFLAGS) -o checkpir -iquote$(INCLUDEPATH) -iquote$(INCLUDE2) irq_tables.o checksum.o checkpir.c
>  
>  checksum.o: checksum.c
> -	gcc -c -I$(INCLUDEPATH) -I$(INCLUDE2) checksum.c 
> +	gcc $(CFLAGS) -c -iquote$(INCLUDEPATH) -iquote$(INCLUDE2) checksum.c 
>  
>  irq_tables.o: irq_tables.c  
> -	gcc -c -I$(INCLUDEPATH) -I$(INCLUDE2) irq_tables.c
> +	gcc $(CFLAGS) -c -iquote$(INCLUDEPATH) -iquote$(INCLUDE2) irq_tables.c
>  
>  clean:
>  	rm -f getpir checkpir *.o *~

> -- 
> linuxbios mailing list
> linuxbios at linuxbios.org
> http://www.linuxbios.org/mailman/listinfo/linuxbios

-- 
coresystems GmbH • Brahmsstr. 16 • D-79104 Freiburg i. Br.
      Tel.: +49 761 7668825 • Fax: +49 761 7664613
Email: info at coresystems.dehttp://www.coresystems.de/
Registergericht: Amtsgericht Freiburg • HRB 7656
Geschäftsführer: Stefan Reinauer • Ust-IdNr.: DE245674866




More information about the coreboot mailing list