Skip to content

Commit

Permalink
fix: Add workaround for GnuCOBOL codegen bug on Aarch64
Browse files Browse the repository at this point in the history
This is a workaround for issue #260. GnuCOBOL with -debug generates
different C code on x86_64 and aarch64, with the latter leading to
broken variable access when multiple tables are involved in the same
statement. This is due to differences in support for unaligned memory
accesses between the two architectures.
  • Loading branch information
meyfa committed Jan 6, 2025
1 parent f43ff19 commit 9d11e5f
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/commands.cob
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ WORKING-STORAGE SECTION.
01 COMMAND-INDEX BINARY-LONG UNSIGNED.
01 PTR PROGRAM-POINTER.
01 PRINT-USAGE BINARY-CHAR UNSIGNED.
01 PART-NAME PIC X(256).
LINKAGE SECTION.
01 LK-CLIENT-ID BINARY-LONG UNSIGNED.
01 LK-INPUT PIC X(256).
Expand Down Expand Up @@ -120,8 +121,9 @@ PROCEDURE DIVISION USING LK-CLIENT-ID LK-INPUT LK-INPUT-LENGTH.
END-IF

*> Handle the command by looking up the first part
MOVE PART-VALUE(1)(1:PART-LENGTH(1)) TO PART-NAME
PERFORM VARYING COMMAND-INDEX FROM 1 BY 1 UNTIL COMMAND-INDEX > COMMAND-COUNT
IF COMMAND-NAME(COMMAND-INDEX) = PART-VALUE(1)(1:PART-LENGTH(1))
IF COMMAND-NAME(COMMAND-INDEX) = PART-NAME
MOVE COMMAND-PTR-EXECUTE(COMMAND-INDEX) TO PTR
MOVE 0 TO PRINT-USAGE
CALL PTR USING LK-CLIENT-ID PARTS PRINT-USAGE
Expand All @@ -140,7 +142,7 @@ PROCEDURE DIVISION USING LK-CLIENT-ID LK-INPUT LK-INPUT-LENGTH.

*> Command not found
INITIALIZE BUFFER
STRING "Unknown command: " PART-VALUE(1)(1:PART-LENGTH(1)) INTO BUFFER
STRING "Unknown command: " FUNCTION TRIM(PART-NAME) INTO BUFFER
CALL "SendChatMessage" USING LK-CLIENT-ID BUFFER OMITTED

GOBACK.
Expand Down

0 comments on commit 9d11e5f

Please sign in to comment.