Skip to content

Load qstrs separately in load_raw_code_native - #3

Closed
aykevl wants to merge 2 commits into
dpgeorge:dynamic-native-modules-v2from
aykevl:dyn-nat-qstrs
Closed

aykevl wants to merge 2 commits into
dpgeorge:dynamic-native-modules-v2from
aykevl:dyn-nat-qstrs

Conversation

@aykevl

@aykevl aykevl commented Oct 19, 2017

Copy link
Copy Markdown

Do not load qstrs from within the init function, but put them in a separate area of the .mpy file (with a more efficient encoding). This reduces the size of the .mpy file (94 bytes in the modx example), but increases the code size by 20 bytes on a Cortex-M0. I've also done another optimization which reduces code size by 16 bytes (net increase is thus 4 bytes).

Saves 16 bytes of code on a Cortex M0 and 7 bytes in the .mpy file.
This costs 20 bytes on a Cortex-M0 but saves 94 bytes of file size in
the modx example.
@dpgeorge

Copy link
Copy Markdown
Owner

This is superseded by micropython#5083

@dpgeorge dpgeorge closed this Oct 16, 2019
dpgeorge pushed a commit that referenced this pull request May 30, 2021
asan considers that memcmp(p, q, N) is permitted to access N bytes at each
of p and q, even for values of p and q that have a difference earlier.
Accessing additional values is frequently done in practice, reading 4 or
more bytes from each input at a time for efficiency, so when completing
"non_exist<TAB>" in the repl, this causes a diagnostic:

    ==16938==ERROR: AddressSanitizer: global-buffer-overflow on
    address 0x555555cd8dc8 at pc 0x7ffff726457b bp 0x7fffffffda20 sp 0x7fff
    READ of size 9 at 0x555555cd8dc8 thread T0
        #0 0x7ffff726457a  (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xb857a)
        #1 0x555555b0e82a in mp_repl_autocomplete ../../py/repl.c:301
        #2 0x555555c89585 in readline_process_char ../../lib/mp-readline/re
        #3 0x555555c8ac6e in readline ../../lib/mp-readline/readline.c:513
        #4 0x555555b8dcbd in do_repl /home/jepler/src/micropython/ports/uni
        #5 0x555555b90859 in main_ /home/jepler/src/micropython/ports/unix/
        #6 0x555555b90a3a in main /home/jepler/src/micropython/ports/unix/m
        #7 0x7ffff619a09a in __libc_start_main ../csu/libc-start.c:308
        #8 0x55555595fd69 in _start (/home/jepler/src/micropython/ports/uni

    0x555555cd8dc8 is located 0 bytes to the right of global variable
    'import_str' defined in '../../py/repl.c:285:23' (0x555555cd8dc0) of
    size 8
      'import_str' is ascii string 'import '

Signed-off-by: Jeff Epler <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants