Viewing file: pr51623.c (2.74 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR target/51623 */ /* { dg-do compile { target { { powerpc*-*-linux* && ilp32 } || { powerpc-*-eabi* powerpc-*-rtems* } } } } */ /* { dg-options "-mrelocatable -ffreestanding" } */
/* This generated an error, since the compiler was calling unlikely_text_section_p in a context where it wasn't valid. */
typedef long long loff_t; typedef unsigned size_t;
struct mtd_info { unsigned writesize; unsigned oobsize; const char *name; };
extern int strcmp(const char *,const char *); extern int strncmp(const char *,const char *,size_t); extern char * strchr(const char *,int);
struct cmd_tbl_s { char *name; };
int printf(const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); int putc (int); void* malloc(size_t); void free(void*);
extern unsigned long simple_strtoul(const char *,char **,unsigned int);
extern int nand_curr_device; extern struct mtd_info nand_info[];
extern void cmd_usage(struct cmd_tbl_s *);
static int nand_dump(struct mtd_info *nand, unsigned long off, int only_oob) { int i; unsigned char *datbuf, *oobbuf, *p;
datbuf = malloc(nand->writesize + nand->oobsize); oobbuf = malloc(nand->oobsize); off &= ~(nand->writesize - 1);
printf("Page %08lx dump:\n", off); i = nand->writesize >> 4; p = datbuf;
while (i--) { if (!only_oob) printf("\t%02x %02x %02x %02x %02x %02x %02x %02x" " %02x %02x %02x %02x %02x %02x %02x %02x\n", p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]); p += 16; }
i = nand->oobsize >> 3; free(datbuf); free(oobbuf);
return 0; }
int do_nand(struct cmd_tbl_s * cmdtp, int flag, int argc, char *argv[]) { int dev; unsigned long off; char *cmd, *s; struct mtd_info *nand;
if (argc < 2) goto usage;
cmd = argv[1];
if (strcmp(cmd, "info") == 0) { putc('\n'); return 0; }
if (strcmp(cmd, "device") == 0) { if (argc < 3) { putc('\n'); } dev = (int)simple_strtoul(argv[2], ((void *)0), 10); nand_curr_device = dev; return 0; }
if (strcmp(cmd, "bad") != 0 && strcmp(cmd, "erase") != 0 ) goto usage; if (nand_curr_device < 0 ) { return 1; } nand = &nand_info[nand_curr_device];
if (strcmp(cmd, "erase") == 0 || strcmp(cmd, "scrub") == 0) { int clean = argc > 2 && !strcmp("clean", argv[2]); int scrub = !strcmp(cmd, "scrub"); return 0; }
if (strncmp(cmd, "dump", 4) == 0) { if (argc < 3) goto usage;
s = strchr(cmd, '.'); off = (int)simple_strtoul(argv[2], ((void *)0), 16); if (s != ((void *)0) && strcmp(s, ".oob") == 0) nand_dump(nand, off, 1); else nand_dump(nand, off, 0); return 0; } usage: cmd_usage(cmdtp); return 1; }
void *ptr = do_nand;
|