Closed mrgriffin closed 3 months ago
Fixes #2019
There are probably still cases that don't work. Anything involving sizeof comes to mind, or any expressions which are handled differently by as than gcc... But this hopefully should fix most—if not all—of the realistic examples?
sizeof
as
gcc
Tested with SBird's example:
enum Bar { BAR_0 = 0, BAR_1 = 1, }; enum { VALUE_0 = 0, VALUE_1, // 1 VALUE_2, // 2 VALUE_2a = BAR_1, VALUE_3 };
$ tools/preproc/preproc example.s charmap.txt | cpp -I include - | tools/preproc/preproc -ie example.s charmap.txt # 1 "example.s" # 0 "<stdin>" # 0 "<built-in>" # 0 "<command-line>" # 1 "/nix/store/0c5jp9d9h9818arr6s21xibgjl1ybql0-glibc-2.39-52-dev/include/stdc-predef.h" 1 3 4 # 0 "<command-line>" 2 # 1 "<stdin>" # 1 "example.s" # 2 "example.s" .equiv BAR_0, (0) + 0 # 3 "example.s" .equiv BAR_1, (1) + 0 # 7 "example.s" .equiv VALUE_0, (0) + 0 # 8 "example.s" .equiv VALUE_1, (0) + 1 # 9 "example.s" .equiv VALUE_2, (0) + 2 # 10 "example.s" .equiv VALUE_2a, (BAR_1) + 0 # 11 "example.s" .equiv VALUE_3, (BAR_1) + 1 $ tools/preproc/preproc example.s charmap.txt | cpp -I include - | tools/preproc/preproc -ie example.s charmap.txt | arm-none-eabi-as $ readelf -s a.out Symbol table '.symtab' contains 12 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 SECTION LOCAL DEFAULT 1 .text 2: 00000000 0 SECTION LOCAL DEFAULT 2 .data 3: 00000000 0 SECTION LOCAL DEFAULT 3 .bss 4: 00000000 0 NOTYPE LOCAL DEFAULT ABS BAR_0 5: 00000001 0 NOTYPE LOCAL DEFAULT ABS BAR_1 6: 00000000 0 NOTYPE LOCAL DEFAULT ABS VALUE_0 7: 00000001 0 NOTYPE LOCAL DEFAULT ABS VALUE_1 8: 00000002 0 NOTYPE LOCAL DEFAULT ABS VALUE_2 9: 00000001 0 NOTYPE LOCAL DEFAULT ABS VALUE_2a 10: 00000002 0 NOTYPE LOCAL DEFAULT ABS VALUE_3 11: 00000000 0 SECTION LOCAL DEFAULT 4 .ARM.attributes
Fixes #2019
There are probably still cases that don't work. Anything involving
sizeof
comes to mind, or any expressions which are handled differently byas
thangcc
... But this hopefully should fix most—if not all—of the realistic examples?Tested with SBird's example: