From 32f9639457392ae2dbf9def01371c95754bf0e46 Mon Sep 17 00:00:00 2001 From: tecodev Date: Fri, 27 Apr 2007 22:03:51 +0000 Subject: [PATCH] * src/pic16/pcode.c (pBlockRemoveUnusedLabels,pic16_pBlockAddInval, createReachingDefinitions,assignValnums,pic16_destructDF, pic16_createDF,pic16_vcg_dumpedges,pic16_vcg_dump_default): prevent NULL pointer dereferences * device/lib/pic/libdev/pic16f886.c, * device/lib/pic/libdev/pic16f887.c: svn mv'ed to disabled_* to prevent building them, gputils do not really support them yet git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4774 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 10 ++++++++++ .../libdev/{pic16f886.c => disabled_pic16f886.c} | 2 ++ .../libdev/{pic16f887.c => disabled_pic16f887.c} | 2 ++ src/pic16/pcode.c | 16 +++++++++++++++- 4 files changed, 29 insertions(+), 1 deletion(-) rename device/lib/pic/libdev/{pic16f886.c => disabled_pic16f886.c} (98%) rename device/lib/pic/libdev/{pic16f887.c => disabled_pic16f887.c} (98%) diff --git a/ChangeLog b/ChangeLog index 1cefc888..767387cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-04-27 Raphael Neider + + * src/pic16/pcode.c (pBlockRemoveUnusedLabels,pic16_pBlockAddInval, + createReachingDefinitions,assignValnums,pic16_destructDF, + pic16_createDF,pic16_vcg_dumpedges,pic16_vcg_dump_default): + prevent NULL pointer dereferences + * device/lib/pic/libdev/pic16f886.c, + * device/lib/pic/libdev/pic16f887.c: svn mv'ed to disabled_* to + prevent building them, gputils do not really support them yet + 2007-03-27 Frieder Ferlemann * device/lib/_ltoa.c: 36 bytes less __data mem. This really diff --git a/device/lib/pic/libdev/pic16f886.c b/device/lib/pic/libdev/disabled_pic16f886.c similarity index 98% rename from device/lib/pic/libdev/pic16f886.c rename to device/lib/pic/libdev/disabled_pic16f886.c index dcac6378..67139b80 100644 --- a/device/lib/pic/libdev/pic16f886.c +++ b/device/lib/pic/libdev/disabled_pic16f886.c @@ -2,6 +2,8 @@ * This file was automatically generated by: * inc2h.pl V4585 * Copyright (c) 2002, Kevin L. Pauba, All Rights Reserved + * + * Rename this file if your gputils in fact support this device. */ #include diff --git a/device/lib/pic/libdev/pic16f887.c b/device/lib/pic/libdev/disabled_pic16f887.c similarity index 98% rename from device/lib/pic/libdev/pic16f887.c rename to device/lib/pic/libdev/disabled_pic16f887.c index 4fce9d2f..b091ee35 100644 --- a/device/lib/pic/libdev/pic16f887.c +++ b/device/lib/pic/libdev/disabled_pic16f887.c @@ -2,6 +2,8 @@ * This file was automatically generated by: * inc2h.pl V4585 * Copyright (c) 2002, Kevin L. Pauba, All Rights Reserved + * + * Rename this file if your gputils in fact support this device. */ #include diff --git a/src/pic16/pcode.c b/src/pic16/pcode.c index 9cb878fe..a65789b0 100644 --- a/src/pic16/pcode.c +++ b/src/pic16/pcode.c @@ -6724,7 +6724,7 @@ static void pBlockRemoveUnusedLabels(pBlock *pb) { pCode *pc; pCodeLabel *pcl; - if(!pb) + if(!pb || !pb->pcHead) return; for(pc = pb->pcHead; (pc=pic16_findNextInstruction(pc->next)) != NULL; ) { @@ -10103,6 +10103,8 @@ static defmap_t *pic16_pBlockAddInval (pBlock *pb, symbol_t sym) { defmap_t *map; pCodeFlow *pcfl; + assert(pb); + pcfl = PCI(pic16_findNextInstruction (pb->pcHead))->pcflow; /* find initial value (assigning pc == NULL) */ @@ -11301,6 +11303,8 @@ static void createReachingDefinitions (pBlock *pb) { set *todo; set *blacklist; + if (!pb) return; + /* initialize out_vals to unique'fied defmaps per pCodeFlow */ for (pc = pic16_findNextInstruction (pb->pcHead); pc; pc = pic16_findNextInstruction (pc->next)) { if (isPCFL(pc)) { @@ -11810,6 +11814,8 @@ static void assignValnums (pCode *pc) { static void pic16_destructDF (pBlock *pb) { pCode *pc, *next; + if (!pb) return; + /* remove old defmaps */ pc = pic16_findNextInstruction (pb->pcHead); while (pc) { @@ -11835,6 +11841,8 @@ static void pic16_destructDF (pBlock *pb) { static int pic16_pBlockHasAsmdirs (pBlock *pb) { pCode *pc; + if (!pb) return 0; + pc = pic16_findNextInstruction (pb->pcHead); while (pc) { if (isPCAD(pc)) return 1; @@ -11922,6 +11930,8 @@ static void pic16_createDF (pBlock *pb) { pCode *pc, *next; int change=0; + if (!pb) return; + //fprintf (stderr, "creating DF for pb %p (%s)\n", pb, pic16_pBlockGetFunctionName (pb)); pic16_destructDF (pb); @@ -12215,6 +12225,8 @@ static void pic16_vcg_dumpedges (pCode *pc, FILE *of) { static void pic16_vcg_dump (FILE *of, pBlock *pb) { pCode *pc; + if (!pb) return; + /* check pBlock: do not analyze pBlocks with ASMDIRs (for now...) */ if (pic16_pBlockHasAsmdirs (pb)) { //fprintf (stderr, "%s: pBlock contains ASMDIRs -- data flow analysis not performed!\n", __FUNCTION__); @@ -12235,6 +12247,8 @@ static void pic16_vcg_dump_default (pBlock *pb) { char buf[BUF_SIZE]; pCode *pc; + if (!pb) return; + /* get function name */ pc = pb->pcHead; while (pc && !isPCF(pc)) pc = pc->next; -- 2.30.2