This is an automated email from Gerrit.

Spencer Oliver (s...@spen-soft.co.uk) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/899

-- gerrit

commit af5a2cf5bdc4a62ba68ad9403e1c1229112970de
Author: Spencer Oliver <s...@spen-soft.co.uk>
Date:   Thu Oct 4 21:40:59 2012 +0000

    Revert "target: remove unused working area 'user' field"
    
    This reverts commit 63a23e6fc862b94f00e0833ab474bd02901a019f

diff --git a/src/target/target.c b/src/target/target.c
index c71c536..b8e4c2f 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -1405,6 +1405,7 @@ static void target_split_working_area(struct working_area 
*area, uint32_t size)
                new_wa->size = area->size - size;
                new_wa->address = area->address + size;
                new_wa->backup = NULL;
+               new_wa->user = NULL;
                new_wa->free = true;
 
                area->next = new_wa;
@@ -1493,6 +1494,7 @@ int target_alloc_working_area_try(struct target *target, 
uint32_t size, struct w
                        new_wa->size = target->working_area_size & ~3UL; /* 
4-byte align */
                        new_wa->address = target->working_area;
                        new_wa->backup = NULL;
+                       new_wa->user = NULL;
                        new_wa->free = true;
                }
 
@@ -1536,6 +1538,9 @@ int target_alloc_working_area_try(struct target *target, 
uint32_t size, struct w
        c->free = false;
        *area = c;
 
+       /* user pointer */
+       c->user = area;
+
        print_wa_layout(target);
 
        return ERROR_OK;
@@ -1586,6 +1591,13 @@ static int target_free_working_area_restore(struct 
target *target, struct workin
        LOG_DEBUG("freed %"PRIu32" bytes of working area at address 
0x%08"PRIx32,
                        area->size, area->address);
 
+       /* mark user pointer invalid */
+       /* TODO: Is this really safe? It points to some previous caller's 
memory.
+        * How could we know that the area pointer is still in that place and 
not
+        * some other vital data? What's the purpose of this, anyway? */
+       *area->user = NULL;
+       area->user = NULL;
+
        target_merge_working_areas(target);
 
        print_wa_layout(target);
@@ -1613,6 +1625,8 @@ static void target_free_all_working_areas_restore(struct 
target *target, int res
                        if (restore)
                                target_restore_working_area(target, c);
                        c->free = true;
+                       *c->user = NULL; /* Same as above */
+                       c->user = NULL;
                }
                c = c->next;
        }
diff --git a/src/target/target.h b/src/target/target.h
index a610cd0..9707bcc 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -95,6 +95,7 @@ struct working_area {
        uint32_t size;
        bool free;
        uint8_t *backup;
+       struct working_area **user;
        struct working_area *next;
 };
 

-- 

------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to