
#include <stdio.h>
#include <sys/pci.h>

void set_stack(int size, int value);
#pragma aux set_stack = \
  "mov ecx,eax" \
  "shr ecx,2" \
  "mov edi,esp" \
  "sub edi,eax" \
  "mov eax,ebx" \
  "rep stosd" \
  parm [eax] [ebx] \
  modify exact [ecx edi eax];

int main() {
  unsigned devid, venid, index, busnum, devfuncnum;
  int result;
  devid = 0x405; /* set some existing PCI device id */
  venid = 0x15ad; /* set some existing PCI vendor id */
  index = 0;
  set_stack(512, 0xffffffff); /* _CA_PCI_Find_Device will fail */
/*  set_stack(512, 0x00000000); */ /* _CA_PCI_Find_Device will succeed */
  result = _CA_PCI_Find_Device(devid, venid, index, &busnum, &devfuncnum);
  printf("_CA_PCI_Find_Device result = 0x%x\n", result);
  return 0;
}
