[PATCH v2] ash: reorder control characters to save bytes
Ron Yorston
rmy at pobox.com
Fri Nov 16 13:48:10 UTC 2018
During the processing of argument strings ash uses non-ASCII values
to indicate particular constructs. These values are arbitrary and
can be changed at will.
Sampling a number of permutations showed that the current choice
of values results in the largest code. 11% of samples were just
as bad and 89% were better. The average reduction in code size
was 11.77 bytes.
function old new delta
cmdputs 393 383 -10
argstr 1313 1301 -12
.rodata 168610 168594 -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-38) Total: -38 bytes
v2: For completeness also update comments in syntax_index_table.
Signed-off-by: Ron Yorston <rmy at pobox.com>
---
shell/ash.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/shell/ash.c b/shell/ash.c
index 90eaf6faf..7ae81ec7a 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -715,15 +715,15 @@ out2str(const char *p)
/* ============ Parser structures */
/* control characters in argument strings */
-#define CTL_FIRST CTLESC
-#define CTLESC ((unsigned char)'\201') /* escape next character */
+#define CTL_FIRST CTLENDARI
+#define CTLENDARI ((unsigned char)'\201')
#define CTLVAR ((unsigned char)'\202') /* variable defn */
-#define CTLENDVAR ((unsigned char)'\203')
-#define CTLBACKQ ((unsigned char)'\204')
-#define CTLARI ((unsigned char)'\206') /* arithmetic expression */
-#define CTLENDARI ((unsigned char)'\207')
-#define CTLQUOTEMARK ((unsigned char)'\210')
-#define CTL_LAST CTLQUOTEMARK
+#define CTLESC ((unsigned char)'\203') /* escape next character */
+#define CTLQUOTEMARK ((unsigned char)'\204')
+#define CTLENDVAR ((unsigned char)'\205')
+#define CTLBACKQ ((unsigned char)'\206')
+#define CTLARI ((unsigned char)'\207') /* arithmetic expression */
+#define CTL_LAST CTLARI
/* variable substitution byte (follows CTLVAR) */
#define VSTYPE 0x0f /* type of variable substitution */
@@ -3156,14 +3156,14 @@ static const uint8_t syntax_index_table[] ALIGN1 = {
/* 126 "~" */ CWORD_CCTL_CCTL_CWORD,
/* 127 del */ CWORD_CWORD_CWORD_CWORD,
/* 128 0x80 */ CWORD_CWORD_CWORD_CWORD,
- /* 129 CTLESC */ CCTL_CCTL_CCTL_CCTL,
+ /* 129 CTLENDARI */ CCTL_CCTL_CCTL_CCTL,
/* 130 CTLVAR */ CCTL_CCTL_CCTL_CCTL,
- /* 131 CTLENDVAR */ CCTL_CCTL_CCTL_CCTL,
- /* 132 CTLBACKQ */ CCTL_CCTL_CCTL_CCTL,
- /* 133 CTLQUOTE */ CCTL_CCTL_CCTL_CCTL,
- /* 134 CTLARI */ CCTL_CCTL_CCTL_CCTL,
- /* 135 CTLENDARI */ CCTL_CCTL_CCTL_CCTL,
- /* 136 CTLQUOTEMARK */ CCTL_CCTL_CCTL_CCTL,
+ /* 131 CTLESC */ CCTL_CCTL_CCTL_CCTL,
+ /* 132 CTLQUOTEMARK */ CCTL_CCTL_CCTL_CCTL,
+ /* 133 CTLENDVAR */ CCTL_CCTL_CCTL_CCTL,
+ /* 134 CTLBACKQ */ CCTL_CCTL_CCTL_CCTL,
+ /* 135 CTLARI */ CCTL_CCTL_CCTL_CCTL,
+ /* 136 */ CWORD_CWORD_CWORD_CWORD,
/* 137 */ CWORD_CWORD_CWORD_CWORD,
/* 138 */ CWORD_CWORD_CWORD_CWORD,
/* 139 */ CWORD_CWORD_CWORD_CWORD,
--
2.19.1
More information about the busybox
mailing list