Skip to content

Commit f65cbc2

Browse files
committed
raise error when attempting to store values in .bss section
A simple safety-net matching the behaviour of binutils-esp32ulp
1 parent 45b3769 commit f65cbc2

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

esp32_ulp/assemble.py

+2
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ def append_section(self, value, expected_section=None):
150150
if expected_section is not None and s is not expected_section:
151151
raise TypeError('only allowed in %s section' % expected_section)
152152
if s is BSS:
153+
if int.from_bytes(value, 'little') != 0:
154+
raise ValueError('attempt to store non-zero value in section .bss')
153155
# just increase BSS size by length of value
154156
self.offsets[s] += len(value)
155157
else:

tests/assemble.py

+20
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,25 @@ def test_assemble_bss():
7171
assert not raised
7272

7373

74+
def test_assemble_bss_with_value():
75+
lines = """\
76+
.bss
77+
.long 3 #non-zero value not allowed in bss section
78+
"""
79+
80+
a = Assembler()
81+
try:
82+
a.assemble(lines)
83+
except ValueError as e:
84+
if str(e) != "attempt to store non-zero value in section .bss":
85+
raise # re-raise failures we didn't expect
86+
raised = True
87+
else:
88+
raised = False
89+
90+
assert raised
91+
92+
7493
def test_symbols():
7594
st = SymbolTable({}, {})
7695
for entry in [
@@ -128,4 +147,5 @@ def test_symbols():
128147
test_parse()
129148
test_assemble()
130149
test_assemble_bss()
150+
test_assemble_bss_with_value()
131151
test_symbols()

0 commit comments

Comments
 (0)