diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2021-05-12 18:04:25 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2021-05-12 18:04:25 +0200 |
commit | 532c7479e96e439a13df421d3b9f547cde5b5642 (patch) | |
tree | 254f531b5ec4c080e8808cf96b847f1317e58ee4 | |
parent | 67eac97a81a2adf46507030a28a036ff75331f31 (diff) | |
download | plan9front-532c7479e96e439a13df421d3b9f547cde5b5642.tar.xz |
vmx: avoid strdup() register names for register cache
If we tokenize the register file contents in a static buffer,
we can avoid having to duplicate the register names.
All callers to rpoke() provide constant register arguments
so they also do not need to be duplicated.
-rw-r--r-- | sys/src/cmd/vmx/vmx.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/sys/src/cmd/vmx/vmx.c b/sys/src/cmd/vmx/vmx.c index 6ef70ac14..8a055d63c 100644 --- a/sys/src/cmd/vmx/vmx.c +++ b/sys/src/cmd/vmx/vmx.c @@ -106,9 +106,9 @@ vmxsetup(void) } enum { RCENT = 256 }; -char *rcname[RCENT]; -uvlong rcval[RCENT]; -uvlong rcvalid[(RCENT+63)/64], rcdirty[(RCENT+63)/64]; +static char *rcname[RCENT]; +static uvlong rcval[RCENT]; +static uvlong rcvalid[(RCENT+63)/64], rcdirty[(RCENT+63)/64]; static int rclookup(char *n) @@ -149,7 +149,7 @@ rcflush(int togo) static void rcload(void) { - char buf[4096]; + static char buf[4096]; char *p, *q, *f[2]; int nf; int i, rc; @@ -166,14 +166,12 @@ rcload(void) nf = tokenize(p, f, nelem(f)); p = q + 1; if(nf < 2) break; - free(rcname[i]); - rcname[i] = strdup(f[0]); + rcname[i] = f[0]; rcval[i] = strtoull(f[1], nil, 0); rcvalid[i>>6] |= 1ULL<<(i&63); } for(; i < nelem(rcname); i++){ - free(rcname[i]); - rcname[i] = 0; + rcname[i] = nil; rcvalid[i>>6] &= ~(1ULL<<(i&63)); } } @@ -204,7 +202,7 @@ rpoke(char *reg, uvlong val, int clean) } for(i = 0; i < nelem(rcname); i++) if(rcname[i] == nil){ - rcname[i] = strdup(reg); + rcname[i] = reg; break; } assert(i < nelem(rcname)); |