[flashrom] large file support

Pádraig Brady P at draigBrady.com
Mon Oct 4 14:36:50 CEST 2010


On 04/10/10 13:20, Carl-Daniel Hailfinger wrote:
> I noticed that chipset_enable.c has #define _LARGEFILE64_SOURCE but it
> does not perform any open/seek, whereas other files (especially
> physmap.c) have no indication of large file support, yet they do use
> open/seek.
> Looking at the code history this seems to be an accident.
> 
> What's the correct way to get large file support, and do we need it at all?
> Image files will probably stay smaller than 16 MB, so I see no real
> problems there, but MSR support and physmap support may need this.

Heh, on a related note, I noticed that if I put this
at the top of physmap.c it works around the
signed shift error in the mmap syscall I previously mentioned:
  #define _FILE_OFFSET_BITS 64
Following is a minimal producer.

/* removing the following define breaks some
   32 bit fedora 12/13 systems. */
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main (void)
{
  int fd_mem = open("/dev/mem", O_RDWR | O_SYNC);
  if (fd_mem == -1) {
      fprintf (stderr, "error opening /dev/mem [%m]\n");
      exit (1);
  }
  unsigned long addr = 0xfff80000;
  size_t len = 0x80000;
  void *virt_addr = mmap(0, len, PROT_WRITE | PROT_READ, MAP_SHARED,
                         fd_mem, (off_t)addr);
  if (virt_addr == MAP_FAILED) {
      fprintf (stderr, "error mmaping /dev/mem (addr=%08lX, size=%zu) [%m]\n", addr, len);
      exit (1);
  }
  exit (0);
}




More information about the flashrom mailing list