[PATCH v4] shell: exchange Dijkstra $(( )) evaluator..
Steffen Nurpmeso
steffen at sdaoden.eu
Wed Sep 7 16:18:08 UTC 2022
Harald van Dijk wrote in
<16238a7b-c165-796f-a137-d5d119bf8b45 at gigawatt.nl>:
|On 07/09/2022 13:43, Steffen Nurpmeso wrote:
|> Harald van Dijk wrote in
|> <92eff87d-3bfe-b1bb-03e1-5f280184434d at gigawatt.nl>:
|> ...
|>|The supplied patch appears to fix both #1 and #2, but it has alignment
|>|issues: when UBSAN is enabled, I see a lot of "runtime error: store to
|>|misaligned address <...> for type 'char *', which requires 4 byte
|>|alignment" warnings when using shell arithmetic.
|>
|> ASAN works, UBSAN i have not tried. How can char* require 4 byte
|> alignment?
|
|This message means the char * object itself needs to be aligned on a 4
|byte boundary, and isn't. It doesn't say anything about what the char *
I cannot reproduce this.
But yes, i hate it, i use BITENUM_IS(POD,ENUM) because there are
not bit-flag "enumerations", so that you have to use preprocessor
macros, which in turn results in no checks for content.
I do not have a VALENUM_IS(POD,SIZE,ENUM) do get around that
i think C++ compresses enumerations to the smallest possible size.
Normally i do use only integers thus for such fields. Really.
I hate it.
Here not, for sac_error, for whatever reason, which could then
misalign anything after
struct a_shexp_arith_ctx{
- enum a_shexp_arith_error sac_error;
+ u32 sac_error;
boole sac_have_error_track;
u8 sac__pad[3];
s64 sac_rv;
But not in C.
Thank you.
--steffen
|
|Der Kragenbaer, The moon bear,
|der holt sich munter he cheerfully and one by one
|einen nach dem anderen runter wa.ks himself off
|(By Robert Gernhardt)
More information about the busybox
mailing list