1/* PR target/51623 */ 2/* { dg-do compile { target { { powerpc*-*-linux* && ilp32 } || { powerpc-*-eabi* powerpc-*-rtems* } } } } */ 3/* { dg-options "-mrelocatable -ffreestanding" } */ 4 5/* This generated an error, since the compiler was calling 6 unlikely_text_section_p in a context where it wasn't valid. */ 7 8typedef long long loff_t; 9typedef unsigned size_t; 10 11 12struct mtd_info { 13 unsigned writesize; 14 unsigned oobsize; 15 const char *name; 16}; 17 18extern int strcmp(const char *,const char *); 19extern int strncmp(const char *,const char *,size_t); 20extern char * strchr(const char *,int); 21 22struct cmd_tbl_s { 23 char *name; 24}; 25 26 27int printf(const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); 28int putc (int); 29void* malloc(size_t); 30void free(void*); 31 32extern unsigned long simple_strtoul(const char *,char **,unsigned int); 33 34extern int nand_curr_device; 35extern struct mtd_info nand_info[]; 36 37extern void cmd_usage(struct cmd_tbl_s *); 38 39static int nand_dump(struct mtd_info *nand, unsigned long off, int only_oob) 40{ 41 int i; 42 unsigned char *datbuf, *oobbuf, *p; 43 44 datbuf = malloc(nand->writesize + nand->oobsize); 45 oobbuf = malloc(nand->oobsize); 46 off &= ~(nand->writesize - 1); 47 48 printf("Page %08lx dump:\n", off); 49 i = nand->writesize >> 4; 50 p = datbuf; 51 52 while (i--) { 53 if (!only_oob) 54 printf("\t%02x %02x %02x %02x %02x %02x %02x %02x" 55 " %02x %02x %02x %02x %02x %02x %02x %02x\n", 56 p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], 57 p[8], p[9], p[10], p[11], p[12], p[13], p[14], 58 p[15]); 59 p += 16; 60 } 61 62 i = nand->oobsize >> 3; 63 free(datbuf); 64 free(oobbuf); 65 66 return 0; 67} 68 69int do_nand(struct cmd_tbl_s * cmdtp, int flag, int argc, char *argv[]) 70{ 71 int dev; 72 unsigned long off; 73 char *cmd, *s; 74 struct mtd_info *nand; 75 76 if (argc < 2) 77 goto usage; 78 79 cmd = argv[1]; 80 81 if (strcmp(cmd, "info") == 0) { 82 putc('\n'); 83 return 0; 84 } 85 86 if (strcmp(cmd, "device") == 0) { 87 if (argc < 3) { 88 putc('\n'); 89 } 90 dev = (int)simple_strtoul(argv[2], ((void *)0), 10); 91 nand_curr_device = dev; 92 return 0; 93 } 94 95 if (strcmp(cmd, "bad") != 0 && strcmp(cmd, "erase") != 0 ) 96 goto usage; 97 98 if (nand_curr_device < 0 ) { 99 return 1; 100 } 101 nand = &nand_info[nand_curr_device]; 102 103 if (strcmp(cmd, "erase") == 0 || strcmp(cmd, "scrub") == 0) { 104 int clean = argc > 2 && !strcmp("clean", argv[2]); 105 int scrub = !strcmp(cmd, "scrub"); 106 return 0; 107 } 108 109 if (strncmp(cmd, "dump", 4) == 0) { 110 if (argc < 3) 111 goto usage; 112 113 s = strchr(cmd, '.'); 114 off = (int)simple_strtoul(argv[2], ((void *)0), 16); 115 116 if (s != ((void *)0) && strcmp(s, ".oob") == 0) 117 nand_dump(nand, off, 1); 118 else 119 nand_dump(nand, off, 0); 120 121 return 0; 122 } 123usage: 124 cmd_usage(cmdtp); 125 return 1; 126} 127 128void *ptr = do_nand; 129